From 51ede370543afb836c0de249d9b53b7fc5d9a2b9 Mon Sep 17 00:00:00 2001 From: Julian Sikorski Date: Feb 29 2024 19:57:14 +0000 Subject: Fixes from upstream git: - add history.xml support - fix machine list DB not being saved to qmc2.ini - update bundled LZMA SDK to 23.01 - replace manual XML parsing with QXmlStreamReader --- diff --git a/0001-fix-MachineListDatabase-wasn-t-saved-to-qmc2.ini.patch b/0001-fix-MachineListDatabase-wasn-t-saved-to-qmc2.ini.patch new file mode 100644 index 0000000..3295679 --- /dev/null +++ b/0001-fix-MachineListDatabase-wasn-t-saved-to-qmc2.ini.patch @@ -0,0 +1,24 @@ +From c30511d03ee593bbd3e8d82681d89684be844d60 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ren=C3=A9=20Reucher?= +Date: Sat, 30 Apr 2022 10:40:44 +0200 +Subject: [PATCH] fix: MachineListDatabase wasn't saved to qmc2.ini + +--- + src/options.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/options.cpp b/src/options.cpp +index c51e69aa2..0e0ee627a 100644 +--- a/src/options.cpp ++++ b/src/options.cpp +@@ -1426,6 +1426,7 @@ void Options::on_pushButtonApply_clicked() + config->setValue(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/XmlCacheDatabase", lineEditXmlCacheDatabase->text()); + config->setValue(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/UserDataDatabase", lineEditUserDataDatabase->text()); + config->setValue(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/MachineListCacheFile", lineEditMachineListCacheFile->text()); ++ config->setValue(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/MachineListDatabase", lineEditMachineListDatabase->text()); + config->setValue(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/ROMStateCacheFile", lineEditROMStateCacheFile->text()); + config->setValue(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/SoftwareListCacheDatabase", lineEditSoftwareListCacheDb->text()); + config->setValue(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/SoftwareStateCache", lineEditSoftwareStateCache->text()); +-- +2.43.0 + diff --git a/0001-imp-Added-history.xml-support-and-use-XML-parser-to-.patch b/0001-imp-Added-history.xml-support-and-use-XML-parser-to-.patch new file mode 100644 index 0000000..e9927e5 --- /dev/null +++ b/0001-imp-Added-history.xml-support-and-use-XML-parser-to-.patch @@ -0,0 +1,51993 @@ +From 9581f69fbde2b9733535bc37b1972233889fd8fc Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Sun, 4 Feb 2024 19:44:27 +0100 +Subject: [PATCH] imp: Added history.xml support, and use XML parser to rerieve + software list info. (#33) + +--- + data/cat/dirinfo.txt | 2 +- + data/gmn/Shideravan System Template.html | 2 +- + data/gmn/Zarth's Visual Template.html | 2 +- + data/gmn/template.html | 2 +- + data/lng/qmc2_de.qm | Bin 579493 -> 578920 bytes + data/lng/qmc2_de.ts | 1866 ++++++++++---------- + data/lng/qmc2_el.qm | Bin 23 -> 33 bytes + data/lng/qmc2_el.ts | 1850 ++++++++++--------- + data/lng/qmc2_es.qm | Bin 406838 -> 406848 bytes + data/lng/qmc2_es.ts | 1866 ++++++++++---------- + data/lng/qmc2_fr.qm | Bin 342718 -> 342728 bytes + data/lng/qmc2_fr.ts | 1866 ++++++++++---------- + data/lng/qmc2_it.qm | Bin 53802 -> 53812 bytes + data/lng/qmc2_it.ts | 1850 ++++++++++--------- + data/lng/qmc2_pl.qm | Bin 320805 -> 320815 bytes + data/lng/qmc2_pl.ts | 1866 ++++++++++---------- + data/lng/qmc2_pt.qm | Bin 552672 -> 552019 bytes + data/lng/qmc2_pt.ts | 1866 ++++++++++---------- + data/lng/qmc2_pt_BR.qm | Bin 607609 -> 606926 bytes + data/lng/qmc2_pt_BR.ts | 1866 ++++++++++---------- + data/lng/qmc2_ro.qm | Bin 249704 -> 249714 bytes + data/lng/qmc2_ro.ts | 1866 ++++++++++---------- + data/lng/qmc2_sv.qm | Bin 81900 -> 81910 bytes + data/lng/qmc2_sv.ts | 1850 ++++++++++--------- + data/lng/qmc2_us.qm | Bin 323761 -> 322947 bytes + data/lng/qmc2_us.ts | 1866 ++++++++++---------- + data/swn/Shideravan Software Template.html | 2 +- + data/swn/template.html | 2 +- + src/datinfodbmgr.cpp | 221 +-- + src/options.cpp | 4 +- + src/softwarelist.cpp | 27 +- + ui/options.ui | 12 +- + 32 files changed, 10278 insertions(+), 10476 deletions(-) + +diff --git a/data/cat/dirinfo.txt b/data/cat/dirinfo.txt +index dcc869431..886fac3a4 100644 +--- a/data/cat/dirinfo.txt ++++ b/data/cat/dirinfo.txt +@@ -1,5 +1,5 @@ + The "cat" directory is the default place to store any types of catalogs -- such +-as mameinfo.dat, history.dat and catver.ini for MAME, or sysinfo.dat, messinfo.dat ++as mameinfo.dat, history.xml and catver.ini for MAME, or sysinfo.dat, messinfo.dat + and category.ini for MESS. + + File Description +diff --git a/data/gmn/Shideravan System Template.html b/data/gmn/Shideravan System Template.html +index f7a25ee29..16ca5fe1e 100644 +--- a/data/gmn/Shideravan System Template.html ++++ b/data/gmn/Shideravan System Template.html +@@ -122,7 +122,7 @@ Status of the languages supported: + $VIDEO_THUMBNAIL$ Path to the general video thumbnail image + + DAT info sources: +- $GAME_INFO$ Game/machine info DB entry (from MAME history.dat / MESS sysinfo.dat) ++ $GAME_INFO$ Game/machine info DB entry (from MAME history.xml / MESS sysinfo.dat) + $GAME_INFO_STATUS$ Status of the game-/machine info DB entry (OK / NO_DATA) + $MACHINE_INFO$ Alias for $GAME_INFO$ + $MACHINE_INFO_STATUS$ Alias for $GAME_INFO_STATUS$ +diff --git a/data/gmn/Zarth's Visual Template.html b/data/gmn/Zarth's Visual Template.html +index 374ed7c00..b6f096df8 100644 +--- a/data/gmn/Zarth's Visual Template.html ++++ b/data/gmn/Zarth's Visual Template.html +@@ -38,7 +38,7 @@ + + DAT info sources: + +- $GAME_INFO$ Game/machine info DB entry (from MAME history.dat / MESS sysinfo.dat) ++ $GAME_INFO$ Game/machine info DB entry (from MAME history.xml / MESS sysinfo.dat) + $GAME_INFO_STATUS$ Status of the game-/machine info DB entry (OK / NO_DATA) + $MACHINE_INFO$ Alias for $GAME_INFO$ + $MACHINE_INFO_STATUS$ Alias for $GAME_INFO_STATUS$ +diff --git a/data/gmn/template.html b/data/gmn/template.html +index d641d1de0..ad86b1a1d 100644 +--- a/data/gmn/template.html ++++ b/data/gmn/template.html +@@ -38,7 +38,7 @@ + + DAT info sources: + +- $GAME_INFO$ Game/machine info DB entry (from MAME history.dat / MESS sysinfo.dat) ++ $GAME_INFO$ Game/machine info DB entry (from MAME history.xml / MESS sysinfo.dat) + $GAME_INFO_STATUS$ Status of the game-/machine info DB entry (OK / NO_DATA) + $MACHINE_INFO$ Alias for $GAME_INFO$ + $MACHINE_INFO_STATUS$ Alias for $GAME_INFO_STATUS$ +diff --git a/data/lng/qmc2_de.qm b/data/lng/qmc2_de.qm +index 476cdaae8c0b40c91bea673c506c65267bf316b0..d48a3a92b55a5192592fecda39a89d002c6aa9cc 100644 +GIT binary patch +delta 34317 +zcmX7wWk6J25Qg8=7qL6BMa4$!Ld9-H>;w@56-C5ayBo0+6&374RP64;Zm>HL>(g(z +z{Caj5*u8tsoSApxvSEASS5bu>HTL`FJpXY;_@#n*kMvj@_i!TszOT +z2zuRGn`T8Mu`opTXkt0Y5}%0Gq1TVKX;#i9)&^gEmsk(zcc0h*7;ul+4BSe2_vYYE +zn~80~)5bgKK?k73(NqRG6FUMyWdL3jEP~#cD6^d*4h8Gj4-jvF96>gv+ipPi17DiO +zrfFWDxB#N_LSi^Embi%ch`1P{iy$r`7AGzxI-1ji^Wf1nY?|)5h&RD%eY2?x1rmRO +zZwt3+dZef2Ndvw;uT9fCikKUGXC<4)FXiVgVTyYbJHe{>k=PmRNrX+Fzh^2Z((2Ib +z+%e;N>VpL(Y?_yyQu)uF*o{{Ey-mI|!KSX9nMmJw>bX?zr*A~h&7jxBk>Cff5NCiN +znqbp7XbaUv@C+%>ZxCq5`DdHlhqj8ItIL}J +z*LrCoi-iDgEg_5V3>(ACIC}4=r?fJ|Xyu8rIN1(S1<~gb&D|e1Ek^HCswmm!d7EYh +zEoA-i;4}9D4c9}u4<^zzm7|>`@}*U6s>mX#{75_6s1!`28N}Z7^IkR`GT%!3fkt=Y +z6zEOIY?`%|fySO>OZAC$i35oDz^9POG&u?Ok^Zh(eaP+QfY#-~rf#swcc!x`#@?|h +zpEo21lL^(esVm%|v)}_>iFUiKj{~~GFnTZ!^6@sHT@ZL}mdb#DREE5;se;JH=;x+Z +zZQ@OcslkBvX)+lydLrLB&8DvO7VxPFG^GnjVZvdXeD^z>Dw+--y{>D}Y4vfOhgGR1 +z(1~`XBYhB&A55|-()CE?p%FG!Q#YV<52$v1h)=*yjRd-;*xE&)+Y>s~A8e}LWRu-b +zz?6Op^c@C%&Bdl3L>JVLR^sMt;za0S6#&QJc3@X0lN~Muf3*u38Vo)52r!Z^*dwz9$Gwud^v!-V)D%y&M33AOxadeefeE$X}g@n3xFMdJ0+D +z7x-}+GO!-ls46!3k}7b>DgB@#8$(W|(^NViyscd +zeMx1{0X-mZwF6gl0eAC)ea&u@(>F_buJ;^<{O$pHd?dLgGMIvaHd*bwHn~UdR1T*P +zpq~q8oyvZxzb8*j2vfR}!{aFAZ#q0h-BWq5S}LE`hjJPW5nPrygxHA~M4U`sFOJ+` +zUa0KZp!aL2eB^oR(^|PWL62SyRc<{@&%vqOJPE1_eeWF&puA{3?w^Ee7)GY-2Gz&| +z4)n=qKVa^gQ+az}Dic21E0?+LY|B020*L=WiWw8TgK=ujfBHb=c0kX!HrbHMHu;PHY^sy>Z0eD1 +zp~>d3=`tLq%ugtvaG3UV)dBl#YR4fMT6&&T5r&pjFQfg7-3u1aZHn|YVcyb8b@GLw +z3*>*+!OHxFB7h65?4gj~TEl4=8E$C-r;R_sGUbHR8DfS$$mseOGRhMf=T`%=>~tXe +ztQe@5>yUj;4D_Hf$g#Kx)FDsg_~;JHvlwztYD?aIhE09Y4LPqAhH`y{T%Hv2-1Z{Z +z-Kr!oHX@JfPsl$H;F4hvOw?hxteymwFbw(UO@isO8-?D7LM+&hA{P16`P)z=Q!~ht +zj&vvz-4N<(BNWR=3L@=N6dRlumb*V(XSXHS5e3&hWZAwIP<#fx;lenS2+9WW-5DiQ +z+|cu>D4F7Zo*zNU{p%s}^hU{p66{46l)NHgVKYjmY|V=`DEY1&MBb}#D^Lm|AB9fe +za99pj1#Usp!9rTt6#28;G+y=LmSWwnPQZ<(}9^+piHg_MzSlI%2;a@S3(4ypRVP1SA6^qR}AaE-BTGDRjWBJctG{ +zZ6NbxLZcRBmHpD8QAky=yZ$!KpLjHS*AKE@CNwTkmke$#8i$g9pbuz#ax?h1oM_@k +z$7(_LRPOe-$=2;jW&C%We1=OZ=l8d%Z#P2|k96c3mzPA7N?s7@e}~067juvaG^s?< +zz$Fn)s#Cl@G9FEOkVIa72~B$UA_*OBlP~{kQ+Vb^laRX5nNOn`Nf%k5wM{F7FPhgr +z4&L`$9|w?Fom!dF*cd+MYN1;OFGbF9$Hn72LjvM1-F=*vOI%>-gw61;vVq_HB9Qq4bEztICJh}SKHgzS1cAaLxs;~;)wF6-W +zcZGMq6JYt5z{TJ`yVGGuqGC;2@8hn;sm1`BMq)XN3c&&e{~y +zEStKzNaaIM_|%Y)nL5JfBm>`H!lw3YPi#U?^&>i*7zZU*qr7UAxWmCCx1-kgh +z!32#%mx<)3Dt=34+#j1f?mD{s90onAGP?fWM4mVb-9p+y55A4=9Unp5{*3NDK0>bf +z4?P@(e4z#vN6&M~Fw0h>*ZMFh?@Q=?%mpla5BP?AfXx_UQ_PNopR5S>HY@s8AUU(W +z1Nt8L2Y&S<0>owL&zTUgjl`eFH3Y +z9gdU-qEKE8m>5njeVa{@-e3S3mku3_fgY2xoe*ThzX-O>?&uMqiJB +z7+t`oe7FpwKa*xSau#EMyTZi3gTrkZ)QTXCFWZzt#xRTzE(1kDa?(NyIfWe?G4G#jgbJO|Hr9jkwn432Zfn)roK`)44c;~cQ4 +zNvYg<91%Bz!L}{Lx<1)}HIuR7ctyyJbrHqhP?m8FQS)4(*JMOgYj5=~VedUJnC@}dmvJhD^25Hq3L<<2 +z4*p#QwQ&RDA~r+*D2uo~r=a_F!jX_~bi6y@Xoa0%ZF=MA0tM`gu&FbT#nIJ%4p`~; +z;^^Uq(68U(co8S4K0k4M??Unet~Pb-FC32{V|l;JraHOCroMi{rdhNYC&~>44tK-} +zS{?K5BTiPMC6AknGi|;?T$_rsnTJBnU5)ccF47mMgA2`eLFMR)i?Oa+z*0 +zeXrp1$Lo-tGvUU4Z^$7XaMPcp;(|oP-=OC$1ny)d5nOFF?ite6=c90MuqVm7ytp@> +zKKM&j+*?-y+@%s8#MXn#(+-dGkAWz08c$bzh0ah3Pha{&g?iyxAYItSFL>sd?*j3+ +zHlD>@fUJ2G37&g^Ub$?tA-+h&RA72qBsQWq9PGgJZkNHve8lra(ji9<;$_ASkf%D} +zRgce5=OgiIa|G0{)_Aqc17guTyw1lVA}8Z@;$N@@%WaD2a(Mk_ETzC@;CM5XQrlw; +zZ#6A>e_y;E(ieK83*HA!g?@DuAKz?%X}%wywvzEJxN1}8FN9Cmr-MIPi_e2M!YW|l +zOM^n-Ws>l19;F3yJ0r>K2F#NyNRGJxKEee*{!E7WQUkvb09JDze)&|SEpT$+*B~d7 +zfot*i6lIFt+TdRdxysrF7$*9X=gVkQOfO{9_zz;N6dk`pZJEfh4JLFj6P0#BwoPEF +z7IFA8ro1TJ4;sPD)&TIY>zQ>g3*?KA%qd$g@YpOY%@8uqO`lkr(6!*R9D`Z9lm|0k +zuypa~U?x0g85XSqJ5YvYDm4szz&)F$ZuV4OaA#S!yaRvf%Cgm7N;z9ymLv2VRL6QO +zrz>Tmt5>qzCB{>RTAbw_QyHe%OqMs1DkWLhuza^EQLO9AT&_|+)95D4U+5-`qk<1B +zSZg9>oR5g>$rHM=LPI}5vb3y7aBrv)gIJM^NtEPNV8wRrro7sjxjN;5shOV@FSiq> +zXdhO*K`=zkDmLY$N6c-ZfmAWf?aC=A>|<`Pi@>VZg_Z7i6f8EaO}^2ExjzhnLwE3I +z?jPp>SNAjb?}<>!idBkB0P1{TmGl09*pY!%&DRrpa(7m>4Y_EKO{{7-Wt+L&S&dvN +zKcB{GW%>%^I*`@*NS<`|Gv=9+7)`3hJU?fENc_s`URe*8Pq4ao>6<_7U{mj3$?Bac +zLFd0pdsgq0AJ~P~tp1Jilr=494Y#+2IPi}(IY6E<%P`jD0%cc?cd}NOCPNl-v8i*N +zWv$n(hg!6UwVgnY=*BAMo&Gg+!(~oa`pvpu+zkF;A?uN!to*NJJx|o7RIq_f)@z(i`KJx*?Uxl|=r!h> +zJquXzTg*465j1Pbd=po}w8_K#`cS3p@gnB8p9IL~tIY5FDsbMP^&#DhVYh9X!f~u` +zZqm5peAxiUvW}F{G-Lx-{v@MHU<1}vfLiv^rm0et4Tz)HUlnHq{!8IN7FdHy9nL#g +zAfEBWvJ5`ZJOm%*~GR_V3lgY +zCJs#DY&Ox6!i#L;1KLymj7@4D0147KmGxu>f_O_;&vtyuwarzV@XBML11KAYck6HLMCHm!77 +z*`k^;VC53oqDKWG^Ic+#b0xrx?aCI{qu+CBYSVJg$d<&qg4JowmiGw(rmkVDu7p#` +z_z_#(upW4Y9BlQ5#Z+W+%(5TIwAb0%p7Y6tR$=Sp4Y1`U*}9RGCe$3l)~}+d*fWW3 +z%qt+@oMoH0oq@Tviba*C1n9{!7M(s6`c5>9K3*PHv&(GD$o1gi`Pk0ZCBO;}V7r%+ +zdLB}p#kBqmGrKg4SvZ+=!#cKq)mPB^Utovsc|+B@!{SQ42KS6)C$eUSskVfj=7tnZ +zQ+8%VJf-->*_k8fNIXWc^NKREDi_%K`OhJnI@ks8Gf-V>vkOP*xSjgWE-t0l18=fR +z?sH($_G4G_(F#OnY1Nn7!qqu_JJlUqhM4V;u*{OPxei)0dLqFKq*QQz1l*Qkp +zxPQ`v-45yvv1zeQGvqD1pUw^P%RF{JxFO8`LF_?93ChAF*~2~OsVF#`Jv>gQBj-+= +zqI*vE_-;{%Ifqz6MiMCVE3w4jM^L5)d)_4jo&SvK*b9=;dT%54;#D&E-v8Lk!zZa& +z*NMG)LdJRF8GDt`3+jDE_NMl8N*ubgx1Ln?e0qSry+N+}Z#MRBLL0E$h1vVY=OBYm +zvG-$3K)c7Xk4crm+DEWYo#-?KHe{c!W&sb%%0AsJ0Z}vq`#Pg}MWAA5mQ*zt`1hXd +z`(R(_r#IR6@XXM1KTGaVg0>_lOQ!HCa!zAE(i2O*Wxsq$y9MN9f67rD-_wQtZ5sen +z)gx?Wu40aPEx3Hsm0bHrt`k2)B#hwJOcF*}w{t6DBiPgOHhFOIB?~iB-!~jyTQTI_3u}GRvme +zU&p4ZkW8!%)}a?KRkJnNzB9bk5^v~L9=z1nVPHio+2pZ*Y?{zwymW*&cuPNC`Y1($ +zb$5B`FOIP!cuMdx#j}B*c)-i}?}fzoa!SF +zc=Ls1q_I1B3r$NOvz)iQNQY#m7jIMdF4QM~?lZq5Qs6@occ?ej^priSD*_l;vvqo#RabMkfKzH +zx>bsYd?5enD42$ad>cz1cM~76`UXVhaGTPvB_G|CtaZglKISC(q0)2tn3u;PLbma- +zrG7&k9Ky#Qp;*{kamVg5;1kyH@iU76Z;SB>9we*^4dK&1lV7XdpU-fovTX7l+NN-hP34%;Hs#|Wn|l9i9-ikp7(VdDZ5M;} +z&&n77rRU$r@ukre%bHH*D>4L-|EtDVjA=$?iBmR(cSpXmb`A(;@s){*5U+~xHFK$v +zg=-o3+V!+FGr#h6%cyZt<|JQtnWAm)lYD)qa3JY6kIY-2x+wX0sm=YQ}`g(z(p +zS(0xm`v~lLUA`%$CMRdul*LxqG( +zx}Ww7W~Jm&-715ZPs5|vuA}<*bRPY8Gx)Ptd`rm^Q0+bWmMVLwjvB_d%*z3c3+7vB +z>&&x(d|O`%C37qB?E~pJM;+rkI(kE%F3fj6p?*~NSA192h0s^_@ZB9pQ;GbCO<8;* +z-|e_WmE!CN`JQf6j$Aj6@7bFbEZ0!JH((Q$4LteYl%klfWmC8e#B2lY|5ykK4p`<&a +zG=KPy6ym`a{Lu|VHkFM(y+cCH%dw0Czkfm*U$s2^L%!pb&z$EUuG5~cc*{SIT@T|{i+@b|KuNU4KhG}@<~5RkX+w=l +zk6|`h=NA0i90QTL7*Cq%1K#L6Puf_EDmr;C@}!u_z@m5j=dq%Yz1H$yFUj|NeB-}< +zWrgp^f}+$t=*TGxNVUDbXt2nE#9Qp{iYy5RG1g +zFKQ;l{)f=@w2;{-?w_0^WF1aD$L2Q8`tw2tD}+@jl*=*bp^(E9>Am7pdGlr}pDea% +z4rLPZRWL;86QTN~RF_%`U7pJEg{})LLw!=4=Y+MK4n&>e!l?zl&(rZD%>fDz;YEe> +zp59 +zzWag~hp5qt)Z*?LqQ>zY;Nu;l#+!;zO}B_ze@P1b`7UZFzk>G3BkIh)O3rYUsPpU@ +zbgQAllgE-+x+Of_zd^L!Cp?>9fzp+Q=cp^R6&Zx*B=XV)ABeg&C?W?{6?GkyX!G}_ +zL_I?R>)A|E?-a?uagm~aZfYW?Z6@kZ-wQe7fvCTkPF}m4qT!KAFu(GNhOf&&9P$v2 +zm+b(byIC}Tlfpuxr8gb3B89r`Ea5ZsFgPt}r@)rb+wzOfgURStUKd^R7NRm%JJGG-UZAdr=+=gg@RJFm +zdlvcvUwlM&*ZNd9?;^TKFN9V8qv(;cV%{S~?*W79`4G{2A?4jBLG)ge@_dKry^Urj +z+81@$4^)+|Hucd&n`TEA;XCv@^;WtHznt_WG`nU%we_9c= +z^fd)uM>8?BS`y8m6cR%t$R`xtErvN6@D`)QuoF}(nYLSm91Np?SWSf7RS?ySi_i@u +zh`N)*#)o}$9Nt4*10 +z5s|heplm8bB5aykM$BkW+3D4@Vn%=qOx9^)#+(~a&q*0>8Ai3*BVy(@^6p*NidpH% +zSyosrW;L7yhdNkJ%z506j>!TsSH7n%(J-;#=yB)=^+Z?*ImH~8#lpOqA-fh8i!XZ9 +z(U>L{|F}lQA7`;N=Q;?#<6`-4Uzp+!v2y)VsFq=3<=GpwwAXFw1Lwrb>r_+uR#vRq +zOvT|E^Tg_2WaMQ+#o8%Zsn2g>#M*z)sAuaeBBmCGnfO6O=BGU@v_M4OBn7^_v)CAr +z6~=vs*fgLcRR+?Cs3Z!Qy|jp~OugZuokaA5Y*af56kAR-1U!3*ZG-y*f5wU(wHw1E +zHxj!>(-(SjTkLu@9r9I9vAb_de$B+*(vDb&^DD%@+LU9&%n&ijg7&JHh~1j<%>%@N +zX_UtH%`XndQqJMuR>WmF1Ag+Rh`UW6l&g$5{5TM1M3gvI^*T)B>*B;^MdNcV#Hq66 +zg1^5OXMfU)T>2r-p&eM71vZ6yadG}X(k`tJiA#=jGa;Hqic3VfWTLo|OcjNh9mLh= +z6tFh57gt}bhOAgZTx&TQEVGZeQRy#KyL{rd4+Y9X(c(^HDhOt6Cho2;Op^;Y#eKFJ +zx{QaoUt>NM0(Xgr0f(XfnI`#)Jc|09`xNPFj&1Qmdwc< +z5b<4P&bZdFYFv|f?vYOIkzeKwc7=I+Lgrml8RA7}nJ+hWodfd80#!GFb(gYehB7b% +z@5-VhVqJeXw&cS(#Hd +zS8|Z7++-uv$3wEp#M=(A(O+cMCFB8ryqDF})P^Zz$?6UKf%rW(b?$z$#(J7VE5A$D +zu5ps8N>Q@TPVx^~Bc&&&4&j(Y>A8-ILU-oLddJ8?WjrA3uk@vrOOjrz>q0c1Pi#z# +zlMOHo;%ye$xWZ6~=<%}g!IY|Uzgn{KeGj1jH=C?_W1C#;wkbzUl}(bpz(#G6t^BCz +zTWq0hv-~p6sd?Enez#?tl-ae{$+F#~*U%%TN$;$W!SZadDMsFr-fKuURyru#_oKBs(PhrF5>C?AZJ%)T*DdbJ-HmU87~^?l~am +zuaKQ1{Ai|YmF)T}8{~tYvfJ&7Fzfcnp0yGoYI)0^i@s7-hMu1$>7}EjZ-!q$x(m{` +zcwvZLnWgWrlfc%q()aFPh>CNi!@qqvJl?}MT=0G5^PWexbKOfum6b;$0^aJ|hSHrQe&-Lk{juMwb7w3@Uev8vZln&;c7EGE|Tu +zJOh|_ZW)re5j +zJyVYB;sqHKBF7!1ptHJ_9KZ50#EBauo+KxI+Y9k{uAEYyULV^^PU+DL8dKzy&vZ&&JJ!glG*O^lzL!&%odi$Ta_Wkc +zV1<9kX+0MZJIa|GX&gCypqzPZ4%D|Ta`q|;DkPL`UVS9z-pv9wE{&XbKv38Cpq#&> +z1$373a{iGRAjDtJzf8t`I6{U=QdrHN$gmR>h4x8jEXKGWWdm~q+yuqA@a`lu@$eV-YnrWvX+dq?QgJ}gL*2%Tsu2awSgp6=d +z%i?~0xxN|ciUZLyaxH1cyrbl%X65Mb*UL>^!=T%H%grj6gX%!1Wb~Y;5MF*nN@Tre +z5Whe)EK4LA-LM^zBv!*vBDJv^t|F34ZFqwCi};H8A4H>cM6&8e6^Q?cJ~DbPh@**& +zxR%I?r-_32mgtZWP2bZ43b)NN6D?w8q7$(TF%5CN+>&Ag8B5D8(X=&TJ>?c^QSg-! +za_e~#F5@rAZLJo|c+rrOk29&1NM(?{*)@tU8(*Cp7L +zyT{Apb0Z+yJ&=x+2YTyMdHm#3ApZw>{PHfy^*`nDJ0z=fzn3RN$tZo_$+K-sK#Y&J +zDc^09XOqbmk{j7nfz{->C4Mwmy-;5CqwsuszP$MO1JuA+d3nV!nD*}S@?$!VxoX)I +zJ*&$rG}?(;z7G3=Y40mi%3CFm0|n;WWC=&*tuP9g1nqFqcgXmLM##risB(Yt +zy?hdGXv)`NKYmY7q%aU6l(*+{z=EBXsO|}?$#SJik~qECMk(*AG)g>C>E>kAxznjM6DSt^h*s&V|AZXh +zS7p2u4bk05TFI4uF@=lNRHjT?(o0ju%mHij> +zQfoJ{DPKHNIie~$$jGLse9fs!nqj(f$=M7jR!O;dQ-?6`Kbw}*BjvKW3uNP_$|d$W +zwAiHzGZ&~^lT;BJrWV%~kDuZGbAd#nFz8?u9D3wIX<2lqz-M33U0#s?;Nr(|_KpQhzf*{%o&G +zH@N|JBT$t)NWOl`PF3zCWxcNxl>5|Y3EUIaQ_UB*V|StIE^7 +zAcA+;l$VRBDxF7DQ2VB;yB?=Dc~e!_kvx|AW)4-CsM?HG^*C+8;?1gF{u|)&WmUa8 +zL7fp1-JQ#e;v4JUtuNHaw>8aIMkn{KMnW6A?SHHyHykaYu8)9;kfY;jd> +z%T$Hjxl^^P*BiY0MCJV@H|c@V%4bH(-=9_vpHn0V!X_)5F?DU~yJJ;{Qe^G*yQnUA +zDJs$%boq}4ew-pzx8~t=Urue+?b;mZHIb?(ML%(|zv^{&DtOUR%J14qh=nawpG6yh +z!P8Zrlc5y6{!{+W-e8|XmH!Tk3Da-e*nWpz&Ia!Ia#l@iP6NP;Ul7YfEXhHvKx{;GCx#L$ +z5~GM7#QSR60}7|>xSBbm8%@OvHS-C@`AH=s6Y7yOV!DHsDMb~^G +z)QYqDgAmqEgUxBh>O~ONh5@ +zn!&f#3OA~nd7V}(&Mt+Vw@wKvO2MyCaB&{Qm4lLqzZ6Gb&5_sKlD_cCX*4_)2Op){h%ryQT7wXcx`oIBib$R|$D&#A5WlKp~q1Ec@ +z&ls?hqtrD+^~#Z_)U6sG)SP*x?mr}*Q+%Mh|Cth{LHBLS3oF!v73b&%p^xejg&6f^ +zhH@4EqxJa7lo5Jsov@G;o{M&v#A{&7g0#&`$8GW#fi}&;;o3Spfy#%G +zI&EWby7TOtPD_n{xgd{DSB;A6qrT{L&q$Fi=t3mfv8jg6Fe?+(0#BXk^lhlut#!7h +z(@BQpr7uGfh`w^lmW@4r-IYN_-5nM+xEex2`XL-5QW +zbb*(JVEX^i1@}7Bl1p9q9c6d}m*`S~ltzp%WmCQ*9xO~DVzVy&gHGv?lDcf=yAXd) +z>2l*}MB?5MT|Pr$=vqy5g(8&w_kE}p>dex|FY-2=6;m#+H!91ycv*YG?~SwKl$!@n`Lu}uqI^9waXuKm@u#y^M1-$d8C +zJp_8ua9w*~6(H`IP4=**u2(S|)X0Lm{)XMqEu*woMhY!CM(PHnYgF^uy5V8US5}4U +zCdo9Uo?K5i<&>0{JFA;kY!1`nux?JbmasEtbc^p4BPZ6;EkAvu`|-9P*X_=b@Nu21 +z+lR%2{dChlq&sw)>AJ&xismi%>Q3St*xMeu)1GS(hfC@%KdG(})<$>r848wdw@uN` +zMR)tv3arpc-F@&)8pqqHyMNt4{-eF_v5fY7RVMBG@D)rC5AByc6y{-0-6vfvo&QQk +z`%{+9mNe7>h5yox1y^-I6T0&ue}wK&BU);?pB|8fJm1SddSLz{;2##)RHv5M)Z>Px +z@H}kSV1@^)(ol+O! +zp&RwcGx0D*TH3VI|Iwp3>8Ebp^e8RBdhWL=KY8gZo?CTuM#8r5W^uC3k@$E_z~KlCoVZ=qWRP(kSR(J#`BCrPI&# +z)QF?hC9G>x589-s6{e!#jIMgxsRa7qFM8TdN)(T-v}v}VOJzbiJ);qY&g%hs=9Wjm +zAWP5c?gxG|x1QZR6uR|fJ=g0cl`HFS)eBN))IA#Lg%fBhH$z&zs7)DIwO8v!XF5{t +zEmAM8>JRNyN-sH_nJP@qdWCuf(Wix85lf}+Ml)@)?sxUdUDQVjS*lk)Y7M^TpkB3p +zH{E46T(2&(8?4why}Eli*=RStrZDNRJJ5coU +zLTufoH-&YCy2A9PXi~6oxooO!^>kF-y+D~vI?BHrtjd{n)L|d+E?P%-CVe;Jlio7E +zD9vMj);ruofCq2%&X=SgyQk56vz-AZgy_8ms4EioLdSfh*T-Mgv6(i|ZI$8QbnLte +zP}TP9xDi>w$_VhI+P6H+t1SBHzy%ON +zqx8{1LDX<6r;m=POkU%JKAO-NIFnW%%NI!ZuXfVMezk)t5u=Ykr8-ZJ_xi-9X;4S9 +z=#y2)(hy&fBl=YFN2JA%=~I25!}MIO&mK&qA-1nJSx^m|{H32h`GY)&w+9L6-ZhFDH=%-`h)H-Lam!q-XTCUy5dQ_v#xRg21jcBGTc$GFIPQ +zO+||>q2mp?oyD1Te0nOQ_)pOB-c*XuT3*L@BwcrGwoS7$ +zjeb0a&Q$%2`ti@AkjY;9Ny~Z=!_(;}9d<)a?ynO%&}he%JvyOdLs+?P=){zJ=?7KU +z&o!m)_ZrwV|3&H-j%;-5?&s1k63OV#eAh4jghJjss$VA0fjUuLzg|guIpTwU{e=3n +zo0{r3n`t~~@hkl%xgy|lM!%z>UB05Ue%ITDR9fDX>auBppMX^ +zFX+$jJ*bJ1Uw>Up7rbkhb|eK+W$SJWoqX>a)WzBQN6zUmL(=GR)R%!>YcKZpYjOb~&5=3evj^8di?P!N}2udDMfPd%$5B&4%&E8I4#$-!Rc(OcnZt_QOmX=af^h +z%%qt_ji}&$@fgL +zcn`208BFnv(}96COz}U|ENBvDlkcu&Q=|<{<=mb&<@fzIbzDDU0^N;N#gsq}%KNsO +z5+1=&Y`7`uK|=?foWM_F?jxYrq!Ke)LY1CT31U+K#QB!Q`?ZTTkT|8&n6M=Udg6>tW2Bybj7oc +z@uq({!QP)X-t!Mb-8gQ%sfx)z6gTZlQ+9CbwrL+mH+*?_P34CkHr4WSHuboAHqGKX +z#wT4jn#LJpeCiCQI`ApeF{}vm-6y7V1IK2_qZ>`<{p46qd^O#dFQzEI-t=rd1S+wu +z>6tQoA3WIjrjLg_JH_};SOS?)-}E_rl#b_B{y-BWpO +zrSXq03jQ&J>Dw6)t$Uf2S^~!YG=0~T0!_cf^mU{Z6`}%7N^wE_XleTXqb$G?Vgl0b +zhPi1>z)1mJse%c(kprq~X%mnb1Jr(LQx=+IQ|B&g`q96az-JfJzhGs^_rw+_peCI& +z0|JjzgDHf%Y}6^MJ=g@&9HK0@)dbQMvL4;pI0mQOfVJt08RAz0a>g<CDM{S&mHO=TT>!{S0Y{ukm2=kz|8S|_v*@$*j2O@F-HvD +zg-eN8P2(s>VSE1>Grm<4wNG1`$yXMg9(agFO +z0u}Vg%(}9etlZfq4_KVa5#wx{TBnIIWHa+@s_Bl0X4bzVFvXvk**WNnYI~SDduh+d +zR55dsXsNfHF!LIb2ru2i%Yi}|F(etY-=K}Qv2m{7_7{E6Y)htU0ZI}p~NG +z?gU*?KC_ALOc$U1%%<#A3Hv$4Y|i}^+~37SP1;YvW~+(TS%3g{n{4M#6FoTBWc{0UpFR&AQ%ssRH2i1|%Zb~7ITO6)ub~KT-2PLCi*^v}zjUhhbP +z8SgOX%93wxcix;YbPoF9V{?8oS#|Dy=0bEY@L$KxCAu}4)rhqzm;7fg9s3GVX`s34 +z6+%sf`{rsx+7k8ErpP%YNV`xXoN!u%q`~=5E)|4t(Fw6nkSpvjk}S`E@1AIpxWNzisqhMeR{*$=D~v-Bv3Ay2mjHY +zW*KH4?%G4H`jL5>p&L}ZG|y7T0FSpY3DpYGq-8skIMN%c^DdLPmBO;)m3i*#4_0=S +zdEs7w#t3d0$4k1)R|NJqFQ?O974$N%Hc<*1lG(hjN7`=GIrCI~tf@t>}J(lQ(VZ`$^_^7Lra4JRtcF=&Dt)yq +zx`Pzy8d}zU3Y)$+tTb&ZgZBusoCoKE8QI;+SW!?E46-t&R29Yzurl7H^x{lrD^nA4 +zXuoe+S*Fm+{hn!MS@I3sr=FE#SU6E^ +zj7pBRlAb}s}gB>=IRaA +zy|m@o$N)FqSf2CiLwuZX)t!+Q*!IDydyPz~$y}>`V09p|y49%O268`LtwvMn@^+W8 +zsS16v8uQiA+aj%I4HR_{auTyZwHikxccWUppa=91R9ZJ9x)66+&3s*yKIUv2dx&nk{~aAv1w(lZ?#(85a=_KR%VRqWD-eH0@ +z;`Rp0wVzm_$weSydRrq8(W$)F+8PB?1p}wr6n&dnqfS##<7_5tG*1RzMcLHDI$EP^ +zy#jmXX^mmuAd-e#W6sBr>VIof%=59v{V78k>_BUL)~rzd3R>eGJ=#Ln>28gGG9Ef^ +zgEg_pN$AcatV#cBK{Rk!Q!b{2A}^aJVzM>mX)@i7l--)zk$!JQur)P|S`X$vo_H9aO7YHMzrW@uk)`lrc2?wmGdbr)-P?rc!(gQfZpCd;2d(4{E2=c5woS@dQRS)9|Iy*F +zq7tY_k#ydQe&Pgv-PwwM<^+^4Xp=9UX;V1uPNjQyo3gi;wRKl4(7mlq)%~7LD_ebQ +zTd5L2yKrmUr8X4R>sUMJUy7*q*Q}kpH`5KVe%8*fg`qpDEy7-WE(4&dg#h>KyYj?0N +zy_rwN#W?HoYZ|Z_bI-a#gEzXlmvt+QwDYIx*1cX76MHVT?u8G9t})z741EqB_s@D2 +zprD&Jx8Bmd#}0fBv_5VoUDKhm^{Et{f@03r=N^7EINRO&vMLKzzQp*@B5>q|UT-B#9b>Hx~hF4kW`YT?6e>+j1pR8f0n{aZ;gW5yIGwul_o +z^SMNSD(Ct*3Gcg5zJX5a52YLGSw|4w5Y+NmfQlX78+$zL?N(Cvq;QtyosTLb-aNqvIB@%hE1zL`02eN2c&g(2~YCYC1}W9_qTC65>D6!IO3)qeB{ +z2O^2J*I<+#dXUDo@Ipe~6B~Dob6VvgB-s5J{R{ +z{02g55ou<`2V#;hX_gssz7F)%+{>okN16GzDjnCAOP`#Wfo%V!ejIprXB|3;kia2ZYdK|133H*DZ^ +zom^%&(z(4Wwh-+hU2Pn(khYJwG(x)XATIM6Fsyt}T=rB2Ly|vnEiMOkM-*{ujCMxp +zY$R?6Fv8o}leqhp0yi*-ctkn^8|Fj$_@O-8_C_VgchbppWGZ=hvQEQ<`<2`>N+(Oc +z>lF6AAbpOE1pak6@eH00kdjCG_N#?HCX@`gmx?m*W1XV6F`W#=UPE!@K{9aYJ+xpa +z$>3vyfU(ZiDR!wxyf$Hwy!bB}+WH;vStev?0E%TV6*BZWW^kU($k5*y@nyS^;SP;K +zeBYgnh{x{D4o}EPr(}SKs!pL^I`LVW3+(DAWNcF_tZx%Cu8xQi;QIw+d;pHw8<~vH +zM?-UNHSz6#82DEwiSJTx>{G9Y48XdPCGqcr>%Pxi;$MiqA*db+u=B<^C!0(<@ddd0 +z!*mM#E)wXFjVhl72^@n?sPQPBT+3D@a2JL(PG3n-ybp->g(P@$KipxO`jLcGOp-e< +z$aH5+q7RQGGkT%r>inL}z&jz{>Ha^iCSlw{F!<(Ga>fUpVuvJTBEYl|orZxsNLZU} +zF!W6);kG#Iv%8V--fw_iU`4`@qqFM!heT9J|I>m=#7iElyY_?0+&VVEWk!;D(|%%E +zc^6rrp$VQ>OrqTL01jT$DMZy3-Fqv$L!{z1BooqFm0o;_4Wb3*Y0A{6Rn|um*^DAWAV+_LYP9ximb6*1Pm>`K& +z4gj-qI!Ua@15+@RB)VX$;Ik(raqx67H1#CA6u`E!|48zGO~6FEMv@)wp$xH>>>h`w +zAV4A6KWrd~bsLg{N_SwaI_hLkB$I>Y_y;fNlS2VTz&tA=hh_`}=E*K{=n}4m`{#)9 +zhzD*xGb +zM=l@4h^2-#xnlkW;6fR>@?T?I9WBU}aO9zxuz$`8DLm@oHe$aGzvJI22I_NtP|z2cvIuk~IUb^vq|H +z&0xZm!Ri!`h$K4?quV_>qVaSGyj0kb#MlTT_xB?~0MoK9av} +z0IrS^Rwfxw26f?n3Z+L*;;4Xtm?b0@F*F2u^*5AtdPwzG(->cSihT0O +z1g`%S@|nAbx%ejXWd{Dgx`%w55QVw?U-ENo80IJSx{_a2djfYRl9Y`~0>=IrDN91j +zxxs<_&YFQyx-I$pryH=5DLTao9m&6i`5+9eMgFbL1u@|d`S%9nndog4)?wgdn@tVF +zW3bQeC}qX^Al7uHES^)#PJF17-#wp-i{^sp&Qbblyb(BYER{MR1HNWWDh1+1u9F>HjaIpvh8En7R=tK@sCy!4)!a3}|E^0-FJPyU>2+Go3R|Rt +zU(jl8FxS3qL94lE0`G90nr%!0!;@Cj+&K-{{J*r8Z$5Bs!)d(@^;)9|zfbF5Ed=oH +ztz|+Sn-$ +z;O_+5qpIR+oqiYF2ReoQ_v9acc&f3VlkooGj(o^>B@*> +z)OooJ7<&Js9g}VV^TkA`fxARIHAAbi$dq>4h?}ODbfTSy;u5%&t5ZC5mv;WQ8JK?~ +zs0*_lrT&}LGc^QrCB1fj?4>_B@Ysa{WEp +zGwUZ98kACxiw%G`ol1M(VSpJ}mkzMM3gR^zIjM^Ru(Y(e&}So +zb=JwP+^AF7yG5s%xQP0m!dQFrbUMMPU{nxVLMKFH5n@{$olwvdpnF~FZ`K$XM@#CD +zaxL3s4-HtJfp&DLPCmm_r*LJ3PI2`oBo-%*UeYP-eM$q+Y{8K0G~f|Ff9Z`*;lyPc +z@cShg-t5-NX9Q4V#S_Av1^N?WEJG(=rnu_GU^Z5f9-S%^Y_x3p-Es6o$1UqXa=l(>8xtVnFHu7l-doo2hcE-@Ptz> +zbc!iwXqYp$T;_J8VgAT-CN#X@8wPrTboLPz#D{4#Vm$u*CyYj5Zv}S(=p0iNNzbP0 +z6!#j}&^aM!9=e**IorO2xTT2Bc|QZSz=m`|=vH9MrqIYy8v$e&y6_Sz8eSNxcrQC%~&)a!5m$SEdv4`K@xLz3yA$b&~+V-0Q=F4 +z#*VrNY`ZwRJ~;rm*diJiWCOzWTpITT6S#GbH0}%jfBT6s$|yY3dluc`z8MVDt#oq# +z-O|ZV3)Lxn7^_pvKcUkErqTE!11f{#=*C~Uz;-xFH`8d~l77-Hz5&1lWYL6fgMkb7 +zp$YeK1Fi>69hbC@x$E4#VO>#u`{z`YB +zjsin=J(}`gIzU=6P1#lzQ}0@I&q^QkaLeePoyh3kbpO?(z@N{c`^y%C*s?o4V1EGk +z(jadkvN@)7h<+zc>WQt9DFeKAn&_qE~yFn$a@ +zm4?-wtBLgNvUONm5b0SgBQYC@PWJ70Sc8*YzLHMwR-r2klOqz_K +zxq&!!eJtqRoJ}|v;_1EQ=@^q#r^fsCKLOg!q4(dV0sow(`OmSN=J_c4Z~_LN*SzSX +zI|RhFlj);xA;7)&p^uC4Fy^Xu^vPumw_S?E&kBYPAJ#cyiQBH%>ZtKGyS2B1tS}Ei~i{5gCjAL +z{+PZMxaMy3*G%-mP7~=bJi5W)Sx(FRN>IPwNPlaXG}%0&MX!;Cz!W9;npQ+f>_n6bh8QLG +z3a-8_Mu`&|1C+0qxUOA+Pdp@<>~_VP&R&T&c#Z|fzY?8dgBSczqSG?*jfP5e0h+fr +zc9Q%m1;l-xlKjaG43lys^#q1<@#`hcdmRXe3v^VQ9vhPe%z5PEK!D9D@hi+eKCDxB#UxX0{Rw6){9WbAIVBh(lFf|IYnx6AEm{? +z=8}zZH^zrSE2L%vagBeqM@5)--|^ZdYWW^?=G+j +z+a!l`w?S<7Q*uOU(2#IZYO`ZE2zeJIryJ;l^JeK3>VVWf5~Gy2zoia?Z9rTzO6n;0 +z0E5d-siSfpV8l$xSn+@f>@0Px^8z^kmQtr@g}_@DNS&`@WiwfWuI9%^sgLFa;Fl)#$y*F8`$+P7f~G&wL-O|aLQ$kh +z8a^`s3|-br!=K}wiHVhbI+vhbnkJ1oQw+k^2x(l!R@-`tG``}3a`#FTn%qILb%!*e +zBVItDCiyjS0BC(g^0S)>!qAtJU%(rHLk%VW@kc-)#-~#7&p3cv9i+)sFfFY9NSap9 +z9k>yU6x!_`7}g|7p&1yb6+Mu`m26-~9g@Netw7lGR0=OX2Hg32I!&}SQbbHTN|Rrt +zxg~WluB$E0KZxH9(s!a1S#TMc*^_h{Hf)w63sJ;bep!kvMZL_(c99mgn+dSivyw+8 +zokHF`X-O2$X8(55GAk@SG*zYLZOehL)?QlSI0)DVg;GT?KHIRKv|^t*@OS1)D{i9Y +zen+I0*51H**OXSaM9JavYAL!eCNl{mrPU#L)_+^j$@v9IYb~&ejQe0AtzC!xhZABd +z8QMap=o~7o!{-?rOPz*+52V=ZD3}lHE3IdiV)bT=v>to94132)aaa2SYd1vN*kmVG +zv1aOI{1!`_mYf7exTBM8xJue|-yEwsPo%Bxc!7_uOIwHS!I=CjC++-$8^QmjN{JR| +zp=XCniEXifSaXb&6s2Jvnl9}Mxd$BGASJh*2mG0pQt~+*+lkku-B-ha5Al)qH!cD8 +zu_Eoa#|v?3B<*+Pz%YEbbRc0dFcCeZL&`K@o9~hi^}_hhVV`u^0>1!5Xe=F0H)5h2 +z+EF@Oia|Zil8&BFLTzJ~bZj>oqVH5XiASf4g(1?($2~9u&y`LUr2xCaK{~xQA9o+L +zlFp1r%Q>l;bape&g*Kkj`A(PcB()mSh1P%2`+t)zrf&zP&`P?5Kbv&gFJ1EW1LpU5 +zDZP4k;B8+^=|+DPJ?F$r>9eL{V^9?-qh}fR-=s+yztC&{NRY1LS;<1Gzm(}!1YEn` +z()GPhfw6FwZmh#BW6^FY+k^nK?3GS7+D6Kbp9##(iBe9i2nN@S(yfy?B<)OfG9%_n +zcQ_nU>Zy~pe=8a9CgH7GJ4Cu?HV9z#ed(UJH5gXkmhO9$U}E{7^ssq-tn!pek1}rq +zf0LCSkL?8f)8*2$K`1>s_K^yz_yPo1l?u8!0V{+{uU$~XFsm-Ti$xi^ysz}`C0#VOmt#QnNd;*1${psV!5BOSPL#nLaY +zlK@?}NWX4jYu1|DQrS2h+G(?-KR#G|IXqnY`w2CKGsfdGtcV1rQ4<+n;U^YSWF`oO +z_NA9(;Xk}H?Tch#skave=^H=X_b5 +zjC|ErHYvkKf{V#AO~96mv=o`9qaAqWE=!%QfG4)H+<7t1sr}t$+4T&tpIXYQ4~}gp +zkyT$;5T?JAtNg@(=7SPLw*N7$xiNEzXk|#^W`p;t9K9Oswr~!y5G^K-I05Y$5QC%aJk1?>=R%P&6RtF +zqAS?6K<>3Y5o;-lvWF#3@_I(OPiy?-i(kn74q~k~ceFfU2=1u6(?lop@`g^s+1)yY +zOY3xsO*Q4v>TPt}tR;Rc*P#*9m7KAxR +zhJs=3A@UewTLUJliaZ9%Hn!5qwJ4RxRqYO()ot1L +z!dlET@5p|Uk5FGvmi@M<02`~x{`pstxs@!Otdp}mBl~|w*?YhdoqXNLI)w{%I>r5e +zW&cwAy*&qX3JYRnV?ZY>;CNR#u*x5-G|rO)H)97vT!K!nc@>@F^=WcY^GH#8- +zG2&7{p4tk-h;3=|wA$aXcsxoc<9$n>whi^D$KB)*{2~jO)l8nAIu^jZog5mMgr9t> +zJaat?U)3VyS$L8UTP@3|KM?}W#b%d1k0v +zgDIIUFHhl7mFXof&qJ}KpP#&9D&C18<9T`I(skIn^-qpA#YuRyy-qPXLtYht&wqI? +zuL`MngFEu-NlQT-^i5vV3qNt#dwH#YBb4s$%4@T*_L6c#j`@;+)Gyw7qpZ&G8gbxg(Dv# +z_sJUFj3Bag0j-LuJWzksA3P>BHtMjjDg>0`A*zY +z45Kc}_m6vFlgoTLulj1-NjI&JoHr9MJjYwk3rhqOiwW|BM=`iFZk_zl!WmQO>+-`% +z3xI9rEI+P?J86Dw(J98Ak_&>o03xF0S0C~~Y~4wIJ>@Wnftm8_70-aTvXkF5%>dEy +zll%sIYz+q6N@||+yN2U{5&O&UoUs?w5d5&>0f<>`7q3@dDQy_MlB$ur~9qVz1{MP~}cZ)*#Uv>`=&w43v9(`zyCJGd=05!)ctT`qHlS6ch +zS+^9nHp)1L4hp*ug{rEj6uve7TqRdAX@EoQm8%eJa^XjMDw5IF1>nI?MQv9KoX-xW +z>N_-)2ken7avl;@-2>T*>F`kineK{N9InQXSxDT(nEza-aI&pZ^Djmv=3kXsgE2Sn +zuu!S9HyGGO1xnq;Du{}mQnw-)STtIxf6N;fQL0k^{43x;+9}2cuH(V5uD{YS5hsOV +zl+vhrE(l4t6pPMFf&2GRv7Cr?z`_@bRjUl(SNv2O;|2`gyoS=a997~Ul4A1&?aoV8 +zX>N51xH|8Z7S&Kxt(%~LBGKOTidDJ~1LOrH +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 +z+IL1|S=5QLD8_FRFR@b^Z@EtF|=& + +delta 33597 +zcmX7wWk3{N6o%iqIanAVVqk!xVhbvMDk>^sH)3FciY=gswH9_`VPRn>SlHcSVz<~G +zi0yY6em%3Zu*}Xq_nh~{@N%PT{5DrxjlIG7&V5)q|6Ig7rii2&j}aQaRRhtY8fz+VGSVHQQ%R6z6rTT;)WZr+tR7rgUH;(Q|g +ztXKdZWKUd3^dv4K1`=b5qlxFhw)D5CyEPy~57Zzrt@hQSs+~~y%r_un-k^b?Zj~~ZWpu20%@t}wY+>2aQCI3TMu|NhbaAo*b&J4 +zDU)U5ftXlU&=&H_I>Cm63JHl?|@Bi1T;DU;}iW}lX?(4x&SRJ!kBWyB1^1gk&m^rC|(RD4k4Qgx2U`r +z?S%laYO^wEgYsNW2V)=}-v`=+fz_#$$-av-Ih@vx&dZ1i7Ip0b#OvTw)&gzGa9!ye +z5m{m;m3Mw1fDE-U*+K@NlF<;^?m`yjmJb${PZpx>9L#E?few*C;B$-YPzj6NeoiJ2 +zZLlbtk`;IC3fXQx@ez#En}E(4#`gyZdPLj$y+s-F7wB>vx +z;s#w%pYc#byV1`NY6IiyZnDgIV6UG7;X|Ot&<72V1p7(fz;+z$A6Y$7p7R9T91BtE +zJMEY-7;3deUbGliv!1hIgyV4&yd>q2#SB$;PYa0~`F~FDH6meo7$o0b@Cedap +z-wa~r2;lk-@*-|9J{*G}D`d;cL#&O0@o|+!mGv&fI&vGICPA!^huYc@V$%_*Jij2e +zF9BQ85+Y#=c*zS8my5%Qev`>(ry#CQKws|QY8~(%%OGyF0n@`FZWn}+=4X+a*Db2u +z?;yT;L7dn?UMUDDI>4ggQ_v!-IxmyM=nv5QJbTql_KUM9PVR`YS5<6PKSBJWt>WH2 +zllSO*XS{wI4rwn>#PdC;MQGr9F9aXpO6nN&5#LJpsm +z$U3lz5`7^@KZEj3fSlZzwkmx9k=qx{Wb9ju5)&b(ZG-Wb-d}VQ+>!pkN=XilzH|nk +zZ?wqv|FbCE>sVAxEY2LsKjY_n{V50A28jZD67h$D48@b?+8`cSRhCYyfLC^h=$=yAm@^*%?=?Bz;PPC10L2Vleb}KtnhWTD` +zfO_5r==R2<5#HM(dsWV&JQZe9jT{F>W`*_1(B*zW2A+U!SD#|fGw5b?pvJy|rd!U^ +zL!jwas-@%;l6JwkS=l1bIRN?%ZRt+)q3HtI-|H}Qed=!}M*7d=tp)`%kr~4t7Ak +zORkWmo#0&OGbE`B=iA;S7;d0|`wxhJS>a;86MFMIxWr9>e6|{eXHS6c{RG9{MS;(I +z1UEAhHq6-yw_Hs~2GxSwCO^olktk7UBL&u2lo(VHrq=?v&u9&?kzvcPzrurT*?2R-A}=->9;;HJ +zJ@&wZY*k)=2@f(U<8429Tslqu@&!EZ(S^7bK$$Q9V1y`?YkLh!)JC}};~_#_QQpPY +z3u-I%uYiV%gbBjzKzi+vM!WE8k)qCQ!X~n +zqM0iOO?{4m^-0U*uq_sKZGmRf=;}|nqxleuNX_wyhLe{&yUF1f;MIE=!J&~|B27!5qpt`50_(bdsz%5canMbK_)yp6nNV>;Le{Wk>d +zrjr~vdB!52>TOZgtdz-zgAhV~`vpG8Cv`rKb^IijgWU3YON +zM+Rjw@jN>9ItU%H4V}i55Ayt)$s=VgvLhUwendcx>WR+3){~dLi=fChP~i$)0v~|i +zDTXdxKR~Q5gRZt>!H|Ok(CutG^wMN>UlRiv@Ebjjy1>ZW6~XhpU`$_Sk`C-Vst-fwg)QTNyER3>@$+F^erS>BtcHGMTxvud`g=_vH{JmK$+(PXWh}CQlIXvL +z+`QLj^uMja0)C+Xi$JIgH83C`4Mx2k7%)&k`8C3TAvb}g2^iF*75KoJ7<9GtTNl3TZ7`l%>_;Yncr5fbs7hw1{+B83dG5ouPQLqk1WGqqp +z2^RHT8%ADT1wOi^Me*<~Mt-uD1Zs` +zD4Z0x-NK|FtLau;z?2L04cE=W)VmbSvJA(xp1C07OJYXpG7xQsV8%;|E37YOHarAg +zbF?Z1Gf^C=C;bqLE{C{k{XMqIuZ;JtSv?sHY(zzoEFe+E{BBktEa;GjEJ +zq|AfdmxNV;GhuArmC3{}Sap2}jO{0}x~C(sA{z0>JRx$2W25n!QiRXgINKd+l@B&1 +z@Euh7+Fu+`5QVsrQ>>Zf~(W +z=Ol2w0K0oj@P!+&|1T-D4cBpSRi@ZHxbq}bzbQBz`IWZ!6db9v14ipYI5JlPyH{CM +z4qI>}F2n{iXDW^y@`HMtAIIG6AVW*y*sgix2iz^H1Ep|m4;jmcrxxX@OBU7j&ldHf +zQ#f9M5~4$aI8Jv*e{jKx>U7HwAHwNYU%;>J#TmK_a!xYN9lk(cU?9#nAtmQL8y9Za +z-h=fFLUOqv=stgu{NXA@=i0b-w=G2YBwX)BI&gj-q+FxdEj)3{fi!K6O}L{;PG7i< +zJA+8VZE1`d5-=qjQXA3-hi%2Ppkx?h +zir`r)sgI+t@giqD#OXF?gBa1s+=nuL?2n^}F#Z^)HNh7cBBE +z-C%q5dNg#S&UhV8`RVaWc%$gn_YKCI!6el-G{w8HNl>pp;KS>9=;kl*aSIvY+{+e4 +z(bo8Qbqd&%tN1i%9n4}?@wq`Uu!<${bvCK}Ia85V{~Gj@zewM69&C7XeE%H{{)X$G&e9lm^@$|i+oyZi#l|=!JDaiEKlt4svgz^oQ^z51EF*xhj0{1)t0 +zd&AKu7UI@m!zt=36>!3geD0J^u1q%am!dr4T!2w7XQ1}e3kQ7rsD1g~kh4Iwc;e7WIvAq}!oH={&CBBi!j4R<>yXrE?A$qGB5 +z-RB!68w>&W3AHFDWj8$LX$bw&@VImml07p#Ub(@nG0iC3=Ln4bH7(lMhUP})`;kx` +zCK#1J%mgm)H7b8gh5X@ZR5?f~bM5y=)q>x_6KWgYg}OmanrV2qBF9|yrr|xm2SkBj +zqlRjNbw1gHzi>0^URndA5I5@HrZn{7qzqDp +zV&4VB_jD2Al+!WdJW}QPmR{&$o-^TGTP>N1=T38(RO%Yh-G<dq9_XZ44ip2JUs%7_*Zc@4O4fSgPI0iFJ*!m#ada@v*3v +z?KZ}@egw1JC}Vv83?4AX+cNme7=Mq}ROT@zGz|rh_-ah(MG2fwnlUki>KY&2jmfQC +zVeDCJOu0?5un)H=jvVM}Oi!)@7GK_&F_7Fq-E79JQ{Iphl8o6amXa_UV9egW5yqly +z#+=6Mps&_S{(6jWXp6y^Pi38jNKfjn%_R`1`Cf)-0#U7wl%NE65?< +zrW+f!o+j~d(b!m)Qko~{jZHbCpzho;HXW--!uOA{dH5Qzh0Tl|Ela^D+RsRgC50T` +z&)C!Q6Kr}`Cu7gNXc7lkjlIjiz!>@4IB=&eWF2iBEb|J?_oi{&Avbi5)5a;Lp>Ga1 +zP7kA${aAo;`tVus+t-Y9l5(u-KaF#9o8Zu~rasCKxt~2h&g;+X2m>U-> +z&xFnqYg{T639S8KTp8Sk<622c?ro<WKWt-RvF^Uk@91hxkG7TW;K2Rf@9c6yyHRb5ylEVB9}Odm-Nr +zi@ck^@$hzW@Y(N-r#Wq;LSlLusY4!6NvN;!tdl*Z;x&xtB$d^kNaOj-bg;eUj2DNf +zih84i@$wOwVsaki<!tA_ttyQ6*Nl%H$o2;fH9iJi&I1-v-}rdF6u5hB(_GdrBX5>n@4!G|&mJ=_jCi;x!Y)UqNvOLQZxDIN{9OmfJ1FZf)mbb`OuxaaA +zejifc@4vJB<4Mu4e#`Q&A-((V5p%Iod^$0L6)sT;B4-dQn&lG2nz^i4bqbh0{F!S$ +zs>^z{V6GJsp$_h3ZYPeBiS=2?O5UXE&z%OWl+gu7zu&C1cMD3M#$8!8%<)S11ne35$sfUR<74BaHk2Z+<>QGWlykjZ*ReLe90>MbI4-fS;b}K +z4rkKqL}w_sHmq{FXvnwyndh#8(66>LubiVHSG8r;>O?_Iugj_zCOvz<75nd@E9Bzw +zti}#Mn1zb68n;?O_lsk-Y#HC6qd)Tj73E$8GM~=Pz`L(ywJ*H_-{#2b_RbByv>L1L +z^#bfqaaP~=FLf8ZSc4oCB1_I-4V<@vm)Xb~%#Nm7dIQ$rKAE8T&!RYffHg=j2T^%9 +zYj`pNYHvZ-Fg+e9lFa;%--I!KEwfn%J6~8Qc!%5;g>waq%K5xS-8RaiS!OqD(riA| +zx~#0}JTlV#k61HBw?63tYkqzv_IevH^W^flW%z +zwWw}xVBurtL$(TML$+>*JYACwr9O`ef6IoRy#!V4B#X>SE9nXrS)58pw>q=P_v9vB +zy;)XgWcX;H6WoIAv3 +zogr6*8Qy&nTUVsTM`aix&0W +z^=!kNCEx{GvyD_E;{}efja2k9I-am7uS<(+ZAptdt}@#gR28i9e{9pr)sSQNvQ2+C +zfIV|&n@g91O|~DzHdot8<<1jq^K2(z%n-JjR!XNXWm|hwe3%o$w)Lkyy7@EP9!RO% +znO1DaBkBTmcV-C=^PsLgWr=|!>HSg`Md_U^@gmi8^Sx#}gQ#d2zm4tOMa4nK7{Qp+m*iIM7FOV{i16< +zwr@V|t$*%pf6vPFdMi8VdKIQm2s@NaroJo9q9|6>qRRb&9lF#EI@?8d=-WxMpv&xV +zG&zmPr|j^iT98Mlu_M8@HjqpEup{@JV0cVs$1BmT-1VCsZ|@E9eJDE-{RF(mcXs0A +zbeOf<$BM!mn07WLX6G3AT7 +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 +zLZ*sC-Nyp<*)7VA_jY3_`Num +zoIs(bq&Rkq#=>Qxg5pFJS!M8Bai(=C@bUL7iuX6gnRGIyA5j+NpipskQ3%A2+xOa{(^-CJaQL#~O3)u@Jksi1f?U&Dy5CY}csr#4d)@jQZp;_~t0 +zMY}YJW|hPXHF*el)s&b^74zDj`-|7M!%&Hl;?1A0U|W2|+mKYS`Ax+8u_QO<*A$;h +zQi!KtReY-bzn9*CuM1pn8{=#2Tk5HL_G45~u5D$kIKJL9bpUOK)yNi{&IsZ}9{>d{>q^{|L%6hb;4eRPa9+S>~@j +z#II;sw$U{hDRHvGe)8p$pU4U)C?9?6AS+LL0@ZB2tbA&c4Z3q7>Dm1{L>7NpWeUmX +z^WA0D$@Re_A6pccTgz%4N0R3#F8^~sM*ZjEvTpil@Qd3m$~If1FQc0tdrSHjz6N%) +ztMsi+4#TybZ18v>jmf20mzvvI(+4jhWV}?-^v6F20&_?Poj?aW*Ktj1o#4* +z?71Kw7&JxpJP`%semU7IYg-tfH_Bey$>~owEwY`}Wv}-nPQNs?$n*}`dwLu299?64 +zyz<&=4VJyn?xcy;kFsADJLsf&a=@=Z7$>?Csg`|gwj2~kuDQc!IapnTS!I?CD;EX6 +zWS9(_MGkS-e=>ZQBTd^#8J?DLzChNxBPage +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 +zE}BfZ;1Yd)Q+Kf6U-U&=CCW`}BXi4N3i`-?O +zzI@Og=y=bf(f@|N@|A4-R}Ou($Yqj6xAfKP!|)hYClBCB{<-^h9#JlAV|qdA49 +z7A5sf{~!{~E%mKZRB?+9(Y8At_2>g<=zI6Bk^K0r@BN`Q%@d*TC+vhu%B~;V2SMJf +zte<2|$ekFapH?phHD6~Kr-^=_6i))Kjeh?% +z1#Iai{W;AU{P{xtbx|?Mpq)Cc>{SxNrcQfAxtr%y{rycj$UWWlj|^GVaH0OO%@eA@ +zJ^eHL3CM&Y`ezFouRn3!qI%$_f8`-r@BH-d$7BNwKI=a_ +zDM%LEXQGjUdU3==JF?!1(I&oppf&7bQE#bfGD!`s&)-az>lyI;hsjdsfmhmMa`y^A +z@oc7;b_HzpIa6L=4i@chYRb~h7MD!Zk8IAnm}$~Ok!Y3O&ou8+knAPQEUl`7bzf~} +z9pp?7aHg5llT*xFZRX5K|Hmycb6%%Z;jFKjs}cFHztYSzk?!1|eP*6TU%>(+Os9zX +z5DsHvwl&V%AvvE}dMla2n5$;#lnO8+r5=k*&@yl=sDAD({wBN +zl&)smf#ZQ1ab`P5ia*10nH@fmM!DP2?0A#B{)nk&=ZD0A31(3BW>nvatz-th41`Fl +zVs@!aBF0!}cI)o|({H=kEvh`slAFx#qiI^FW^S{`T|cNb0cOYxTDLM|%wDJKgI8=| +z_Il%02nIle7AK_eG +zb0kX#UT(CghE6s|)_O_FewaDR_zIrB&Kz}a4+;1;7Wv%C=9u5*Xv-}%$2w4TqhAYi +ztgUNnh`O`Qv5&?=9lmakcRK;qd7U}oUoG&4+s%m=DDrHIu&CGUG$%ezhaOwsoD@hu +zw|tE`DTW#V_9^D%Fq-^Zn$MiFCmnK|zePP{p*iJaG?1Up6GhGD=8XJ~km`pS<4_Rd +znu}R=el1rD)nCj-PPd_k=WYN5I0@n(OP(WJd1i<_34t&E>0`8!mc*T^HuYvXp~1>1=MSNY(XETg{D6 +zsV$KH!`$@9j^3|fZhB$|R4i(dEjeJ3XHCtd*KCU-B*NU1kOXvTZBcf&vuHD&!p*H^ +zN&#)=n_DloqL4k<+)n@TLI%Rzk+^}L<(y~k_(FBEjt$HN=Wyr_In9Jp*J13QZtlGQ +zmG0=*F9;E_y?aNH$NqpQNY0s+p%lpHiXjiFx|r +zEQr4;%}b&mLK}}2lK+&ll1vh%nSEP);<_- +zUid-Yz0MT#;%nO+u*vVuWcrsaVvL=6jb>R?^9b`s4C&&}{meVvDFF63XWp3~4pl4O +zOpSU5cBF#&GE_n}9cjLy$7u0sfcaqqiI@&O&5vbh50tE7e(D-RBi}R4&&%`B+|_pT +zE2cn1wKcy6(-*7s(fo0D5|nQx^QX(_6v%ou^A|PUgm-iEFDGsA$u$4IXa%|4DaO7f +z{g`?rWEADW&a>DR$Y`#FHv5ZkJ=?Sr`{$>~d@^ +zOfBu%cJ>Zmq0e8j%USsdg!?+XoPAOt`Yo}`UF0S><94|_(~Vj3&CcQ3JnFegJLmq? +zAwF=)&Uxfh@M(YT^0%aa;G*U^+7-y%24>SPc7ogu>a->~(9Sg*kv@37ALS|`ZS3WmIvtdW<$`5Tz^Ue?L +zDx3|2?$;%g+p^hJnoU{%m1w(4e<>f?B-XHMrn +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 +z-3osmM_c(RLHn`SP-BnWWptUq4^4# +zjnmtkK?;454$|%!3N5n0ygMlBLDXvN&M8{om0--$bV}R4E819$XoogcD$KI10OEl) +zih1Ni;E&iVR%U3JHcO1xhFh6NEL5u9#Va-4LaDwR6LM=CDK%b%fYho;sTJM^tq5MR +zvq!IIrMqIcEd-2yO%%I77@7xYO6@u5j1O{F>Yl)Ga8R;R_b$43y*nuNwxQG;dsJyK +z(j5#tKPinXR{~*0u+n%CW=h@GD$Z4Ka;WK}ICthT5!ZZ+;+&g<8se7H{P-=98rM-= +z&}}m$7b`6`<7q1QKPs+QaLLV^qSIKzNpXuo4f3wO(mJRfNbyS)4~q4A-oF(OmJKi< +zN+%aFPVuPr3_YYlN}DHzAlA_o&kGo7&wi$~pM;|Q;1R{Ez!F3I9e02x%>~{_mEMnVqTf1A>D#wAdK4u}|EO>xmXZ4S_E +zzY^Lw3JudrN@(~ifW0-9u;Kf`NSPAxEdk(WYh`Q&jM}PFWkQWkAOts2Cb!Q8L;PK3 +z@>vvNUu9*QiCqVN$TMYHp#vCqF=g79ED%n0(P?IWQkfoq2J47yl$oW~P__9f(HZ#N +z4?Pl_^&iUL^S|Bso9PUHOyWnLWi-H~C+ +z0tfW+8+t0Hg)RSpXc?|7a_I@YorO|fV$R$7D~p2fgV4W|vS_Czh&j8IMOSgce&?nv +zZi1e`r)*_OHw;XY7b(jo;&JY7O?3+4>y;IDsUQ^fP*$wOO1!YM|2So^PN_|*vJ&s- +z>e=fw^pZ`=s>|p}_v@yt=H_EQ~h98;vJyu +zauL8V@V>G;X)bUxrzm^b1mGLzDSJDku4|F6?6dO#qggLy-x&;9r;Jwim7!uM*Obg` +zyduSEO4c@{%mC%+CHy3LgOy|J +zu`jeVDcNmK1GmLjIoa$Na3k%MQ)iNadl96Z#^24_K2%PJU=H;6D&>q-2N0WBDrdsb +zX*69{&P*APWi+1grZ6khz69k`?-CGN&rmM!cnqAKyK-eEMhx@vljA +zw>I{1gL2oe6eGgk%7cbBIL)+bpyXe=1>$vQ<>AmaAQl`^p7ccL&vm*|P$2}f-sVa{ +zdspDib|^2s&{44JsJvM<0nA{g^5*#<;3s@m-pyQsu9B_tZUL&LtQ6&at$2`HE>+%# +zpnksiRVm`py4<=^r*NQ!@&Qlcu6z2^Bv3pacq+d@k +zE^VTGNlykdzcQuN9b?^yNy=BhGa!txSHAZ?1ki4S^8F^(EyepOKZapTPD)dL1!MMN +zUw`Fy5k~*VUr|^T16-}T6kgybHhVz1F`q$N_?a5(;Fa-kpvJ|xE7CA*Ej6z72JTlV +zmGF`qe$AkghV#(N9aO5F2T)i_B`5s-6`|7Da)wj0ADDJOl}1St7ATxZr{oNd`lr*V +z;^}}pb_P)DITv782THw<0{?LcRfDlx8}E$d<*jJ`@MyP_-$NupI9TA_HkLaX8mAWTxIbwqzK7~N^Lq1ctK +zD6~fZP%u<$O>5S3#p1r1)Lz9iIcs004gwD1tVrrG%L#a=&9wGd8SM+8j!9^Nj{8Bi +zy3cJ;&t=iNMG?TAdKPax%En}ALz|Rlg7M@5+O*1HFuv?Won^pEjFGgtE80K3&QX`s +zi69KSMO%z|jx{O^bxIjMY0Hhf0rn(Qw~i>Z-Fxcf236I`(^3Bza73rD^@UDj#u+4P +zjaL_`+v|x~Bi~b|?t3!P*E>%=@EBNQU^VKodL{@?+0^3&HuaPNw9Sp%s1<(clsr^q +zF>cu#NIh*TgE4UrZEGJ7T<=@7?VNL9lzPy1!}?)`uPbdgBL%;igQM+hl829>NF-_ +z`^URybxIr8(STR0z-TI@J)5BI@M#q7IWr3rY2RtkNi1Ny8%BFutwj0D)80d5kmiQd +ze(ha=zjvMvD8jMVa3me*hpINVNT*^LxswhIdI1I~j&~YkWmhkV4rz&@mvenO%)A2# +zjs_ZXas`Hnw`pihK3duL;zP&Sm}uUa +zdzyx~aliv0CezUseqp*TgN|O0N%+K@I)%pVbV^r~>6nHwAhPx}VjD^%&54e0itGO7 +zB09mk7&EGabSm5cj!xKw{?Oy`@mhqX$pD*a)M~VuEO*fYZJ +z#yACHIC750u3iDsvj#NI2?xL=Z@Lh-5^&#k(uL_FN~8Aw(S>n3zbMeH{R!gWgNC3I;x-d|jiE}e)k@SUg2M$HGQcTKvyGk(IUZ|RD#T3D&W +z(-qgQgJH)n8vpSIo&~#xuKJCuUBxK6+CBt?exY=Ar)D5D*h5$Et}zLu*|~Hz)u|m;%+lHnLoC@&fhE9`l$~~Hfn`jNDsdT$i28P<*=?)oJNlU7e5A>irs`dpA +zN8(Q0JIgyRr8^to2c5B)?v9KBL!?Icoeczo+jP2r16Fw7%%umV0uaC7rbm`{1kU$0 +zJ<3hQq{>oybjS~!ijwHD>bR=d13k6$Onl%tYtxZ6^g^OPz?wJo;t-Upvv$x+n^b^- +zw{`N`wST?SjJga56vQC;w^P=#*-DiwSzKYO(^ps}Y7m0|(cDDe)EovJ&USCyv6|5^UMar;(v1-Mw)G2Ks4CL8 +zH=Bbo$C4HqW}>UvlNNQuCsf)+i%w!MST>P<5X(Re+fG02aRf*mLW|v-fq15X7Kh=& +zx8@NoIhhIIDAF(0?LqQ6K}$WigISw3v=le(8b_|CUwf5-aQ^`Py2yl~REO=fEaL(g +z>TIDus#L(Gdj|dCa~PzyYw3?g=p;QZp}+00H#=9Pf3J50>BJlc*|^YE?aQEm2dFZP +z@s=pm$EWC&Zv17uH5w_xXvXhEtEkdjCN{(0D+$cZ7Mr-Az~r(>5C_d*ipkpx;NCZ; +zw!(Kb_!cvNV*q~7FeH!Mi$oiB&tF!t{~&-%otQ-ej=v9okhop$VFjJWBcZIyZ`2M| +zYO$(87#(|Lv1&UaP!5~3>T^|)w1KR8`HDSnDYMDyi{t1Cv&nt|;)j9EWa~W~46A3e +znkm>Rgk`Lj)g3UV{bhEZ*jWrRvmY6VRp#c*q3Kx=m)2p9xM4u7?86-Ype_5|oz;6J +z0{_yJHFP))f=xB%R0(a(>Pf6=6O0x=*J93rDF9o&ne*X9FfI#a&0cwdnU5uFz779R +zrH&@%YGwiAuR`Y9YZ+FzykxG?m{}fHnYC;nfcVv!wX#Dok~LhXl-`}SUep*X=vpxM +znzz6(GY@$i2XI~1rdA$sFqyS!i2QBA+F(`_k`^(~b~1{aFU&I%`$Fsv=DB(}h$jv+ +z&&%lS9KyV4hrW1}u3tMO&e49OkzbGr$Zx=Ru|}35y^(liM3-^MU&wVxoN~IHXC3-s +z>2jCPNNlpM)sfg_T{|N2%53R`~Cqr~CVI8(%&2xOnqza}t>zI#( +zUp3aqp85E125wGG=JN}$!rmjS+2s +zXEw(=A9DmL`xo;o*o?OKU)Ht!RP*;8ng5Y(z`HJB-8$iypX|0^J?1%J@;ODPVbv2B +zu&x+0PEHqDU@i2KR{vyyQ|y7?I+q2`4np^MDGLg}gcTk;SueNWARg+(`ZmI$m6*l) +zmAC(nCT!sAR=7K01Pjhv3ee3>Cl_jBgBNxOh}46P^u>O3z=Ms-Hmw4Fod+A;`T>aPfo$|S6tCOsu+cYpFt}G_qu(U}%<0R< +zw0e#kFL$yrBhb!x=B(3LYdIT(A+E6fHH)Z>+RqTk#xAW0;^$s$e0?0+_3dTKbE<3Zr>vPG-$@zJ~3;{5xlKE|_UM^M$?YQ+*?pTW*o$kvXZ +z3Vcunw$2^pc&r86_+=hIpJyzoVK^8o4`iF(U>3INv?gqGl?T9`@MoKA{Q)j9mu>O6 +zg!6k-w)J*BtaeIeX_1&A@K0geKF!7_T!~MLvN8=m$9DCY3fz?xw!0N3!3J$+83#hp +zBfZM@y5J-?h_SsRFd0_)D%)qhAEbW2*}i~ISXgb&_N52m95+Izl-z-3{y;U=I*%QY +z_oJx!!4AYW0Di?OcCg(4`R2n8ZFB`NIkUs_zu@vBvm^QEu%O}cJa%-!3#_2XWGDQv +zNmI>OHhz~1cV;p>nTmC2_F3$7A*ztuHQ4Ew769M7uye~We8ItV@uCQV|8aJyWmN#J +z6}tjSxC5pUyD}V0IXXRIS94~AF>{4ZDeXPGcJDfvDMQ(~Uv{{EXe1 +z9fLIhuD3~9N;Dr_RudD +z4BMjF!(-97Ik+NwbOPV_IUn}eI0J-c;q2*bTzIYWS>YfwBleDEFHE5Tw=S?(N;rt& +zBiXBaCL7=$0DGP31;&2f?A>={A|IBqZ2@EUcid6hLZ0&k(F4YH27VI +zmHe>;Q_N<)vh^YJ8gs +z+>TzV6cPu}H$kW2c$O;7EC!))k80NJK5%aRRq}2o@K>Bvr4*NuE@3L|g?4eFq^ixU +zf^geQRi`_mKb@qS)Ex9FRs^Zq>tf*N&QdG5lvj{_Q_a7gKu_?GTG0t5{o(^^CFvj- +zeU_>gPW^Fx>N0El1%CmmE~B=Hiz$T8~z%SYi{#6|2=6cw@=i +zC)HND55oL$s@;t=;BP!s9oKIJ*yLqW>kYh5f8?0WoqZ@ +z5n%jTrgpI?!~GEUYFCv9(bHY^cf`#`4ntJ`KC7^eBUJzKlfbzCjp`q>77Wt|sNLrd +z1F0TW1FPejWN}>$w8xn~u9+HCfIIQnD7Dwb&A1`WU+p~#C*TM#wf9Sup%#mE@_di< +zc&F($CP!~Iv~(sIZuQa0KR>31O-sbiUr`O4TN|K719jAiGLV{WRYzYg1a9p)oq|h_ +zI;JcQgpXU*vDT?*hg?y|U;F@)9Ii&8D`4iSR9w8Mt?s8#+XHF +zdDzJJU#-U3xnP~rWHqk)7A%+ism_sy1K)|L^CI@6<)5G~$$o|^W3jqy1_m*mKB&v9 +zMu0SYhq~hJb>PF>tE;Yd!IKzYsjHrC!Z7pZw(=Vw2F+F1e#CmrJRf!AEPUaUi`1>1 +zaft#=-Fj>iI#)=n_~qW*R<{=8#Qtrzx-A+5>VgSsx*LXNZ|A8ys;7aO%@B1*0ah5# +z9INiV;snNhpzgbD3EU5Bb>D|HfWHmY%w*K(qt>ZeuBKpoK}9`)r>P1zcd3V}bpYdd +zrXI=+0%5tedUV)E{KUoTi2?Y;Jx2A!j}kC+c&eUsH3z9>u6nW~mRx@@Q%_@(Msx{R +zPhWWjuxPJ(mZ2K)n5mwN!|(Chwn@GCV+p2SU#eFva5VPFRj;o1L(}zvdc9ZOGa%s~ +zuKNx}JJ(9R8G=*%@;BO>B4>40GpbqE~a^`zC9~kF5ZzyJ=?iKLB6rgeEUB2Qhw| +zrcO%-Av#*CV21avd!boK-gxqqi%x!acgVx3as={n6S +zpVcbkm(EHdzFL(&cxI{L+ZnA&d7*RXc&+Nq`M{;z*Q{;5K)AkCtB&Wc8+zW*X$)?v +zRsRn^QCOK){ktQ8>u=2#Hwqa$W@)z9(CErc(P}=#<{p`;Q#c!-*=>+P_^N8PSL6CO +zZ-Z9*P;=n!chl;gz$hoIy;jfNgu8)VN7BLdI0B@p^Ql +z=MUGKjC~G#+uB+a6G{SMgVwaLHt?aYT64StQeq{oc_MCpwM*1#rWR^0k1!zky;5__ +z_W<}+6Hh9z0E7Q5t!<-1y!6Agw#k!#-;%GjGof2;c-~KIkKgIVrv_;4C-(%SZv(CU +z^$x(-tgE#zy#r#kU7A;~>j0PSv<|<$LG<3B`E0?+bLC~t=Xd}ZJ-7U0K{c&oHMAys +z-qkw#uEYqWyXMRGq8I0_Q?yCdX*^Y=Q_483nS51j>slpRr)&60TE%Jp<8gXVo~ijq +zRt88n(*n9+;OBc+3tW%@X0=*rJ;%NQuJubTs8$&W=k2v#Wtm`{7^3yrQv%Yfd0OxR +z?2Ku(w83{{!L0LQZ7@1bX7zlukepc{9^IvdHOU3hP1VA7q0{sJn@J1r_Z-AlOSJGI +z$3WUJQ5*BX8@L5`bn>&eYY|Iv^13xyi}-<^FZj4N?y7(bsi!vH&lR}ITeR_AOK}ow +zpiKbm6C37g6W#pr`MtDA)a~MjcUn{~4!)C)+7$e90>kt-+SI*Rj^fr(oA!4VKo^s! +z-!L4wqEq-Ctxa!^ed5CmZF-Lqe8760hC|6Z`Gm1Lg}?W78c%83^k6)XgLcrSPZWXc +ze+s^v;~DYYmV)z +zEhxn+F~&z*R9@v5uurFCyHuwc9iT0GhmY%WRa@MxT;1){R;1&&zA!*rl^P0C$v`c^ +z4r6fpC@t}IDk=e{Q`%gjZD@2J#2tCshLBVcf|_a@MI5FvvbOP2MQFg!@z;_noCR^F +zN!zr{3v*Ymv`u?aYgCTY$@l4@Z7RT}|Lf8Cycio(#W-#A7!-To9JDQ1C@ih&t)2oDROW)iZ7sNDe*CQO2fy1W@sncB`{ke2 +zu5OIQO8H>zS`zk#Vr%VY=uq^iRP83NIAFbByW`XegkL?hJ4;be4$Rkb`lsO$6YsPK +zTSYX}BrQK?6&M`uYY&IxH5^w@dsG>tw}`LtPhzc1r5&}$Z_eRyJVxzF`bHGg!P=9I +zxd27ETEUrTVC?c!d**A0_fwtXs7ResPEGAuAAJ0t_d5A$@3q1%86ddN(Ox;A3o#>5 +zd*%BAU`rG2wK>LKH+-~rGjS%(exkkqgiRhL>Qp4Viuw&RJY~%kXVtstgZA-H8$k7| +zm6-d1!K}Gfa^D(5mT_9C_yxeKvR3MXy8B0#R{A{xjfQ$!*=;Oj-+NQrqLckq227aEX2?{ihep%4yZ6UN=+Dkt=+AXp^W4iQPh +z;Hw->$hgN*Yp34r0{lDqcXX>cCVb+=@QBcwjt)b^$2!&wPe{MYwMYoO$K6U8b&sq5 +z|9dv)lyK}GS1n=3RjzsYe>;}&m6=&2)V$Bx{eK=_Qwon5@qe#e{_f@$+~@GeaIoM$ +zZ&NG|haoU2fxjxWNzkqdwG#Y-#kL7IZwTh`1-W8^%@v`+!NRLT?TQJt`it%V?+@b+ +zi`M^pZuAqut^B!`2X8(RBB%cE-p+kRcm3XkLH$Jf?`3!O6V-#IeZ`I3{~olazv%Jr +zsc-v>AGw6&V9_Sw+d#2V!iQkd@gTkz&;I}J+;&*3SAJ);x$h5)_+!K$>EQdrX49+v +EKhygZkpKVy + +diff --git a/data/lng/qmc2_de.ts b/data/lng/qmc2_de.ts +index 57463b6d9..4d177cee3 100644 +--- a/data/lng/qmc2_de.ts ++++ b/data/lng/qmc2_de.ts +@@ -3608,147 +3608,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + WARNUNG: DAT-Info Datenbank '%1' konnte nicht geöffnet werden: Fehler = '%2' + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + WARNUNG: '%1' konnte nicht von der DAT-Info Datenbank gelesen werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + WARNUNG: '%1' konnte nicht zur DAT-Info Datenbank hinzugefügt werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + WARNUNG: '%1' konnte nicht in der DAT-Info Datenbank geändert werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + WARNUNG: Anzahl der Tabellenzeilen konnte nicht aus der DAT-Info Datenbank ermittelt werden: Abfrage = '%1', Fehler = '%2' + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + WARNUNG: Die Einstellung '%1' konnte in der DAT-Info Datenbank nicht verändert werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + WARNUNG: %1 Tabelle konnte nicht entfernt werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- ++ ++ ++ ++ + software-info + Software-Info + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + WARNUNG: %1 Tabelle konnte nicht erstellt werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- ++ ++ ++ ++ + emu-info + Emu-Info + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + Maschinen Info + + +- +- ++ ++ + machine info-texts + Maschinen Info-Texte + + +- ++ + Machine info - %p% + Maschinen Info - %p% + + +- +- WARNING: missing '$end' in machine info file %1 +- WARNUNG: '$end' fehlt in Maschinen Info Datei %1 +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- WARNUNG: '$bio' fehlt in Maschinen Info Datei %1 +- +- +- +- WARNING: missing '$info' in machine info file %1 +- WARNUNG: '$info' fehlt in Maschinen Info Datei %1 +- +- +- ++ + machine info + Maschinen Info + + +- ++ + WARNING: can't open machine info file %1 + WARNUNG: kann Maschinen Info Datei '%1' nicht öffnen + + +- ++ + %n machine info record(s) imported + + %n Maschinen Info Datensatz importiert +@@ -3756,82 +3741,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + WARNUNG: %1 Tabelle konnte nicht geändert werden: Abfrage = '%2', Fehler = '%3' + + +- +- ++ ++ + meta-data + Meta-Daten + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + DAT-Info Datenbank + + +- +- +- ++ ++ ++ + importing %1 from '%2' + Importiere %1 von '%2' + + +- +- ++ ++ + software info-texts + Software Info-Texte + + +- ++ + Software info - %p% + Software Info - %p% + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + Import gestoppt, invalidiere %1 Tabelle + + +- ++ + software info + Software Info + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + Fertig (Importiere %1 von '%2') + + +- ++ + %n software info record(s) imported + + %n Software Info Datensatz importiert +@@ -3839,43 +3821,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + WARNUNG: kann Software Info Datei '%1' nicht öffnen + + +- +- ++ ++ + emulator info-texts + Emulator Info-Texte + + +- ++ + Emu info - %p% + Emu Info - %p% + + +- ++ + WARNING: missing '$end' in emulator info file %1 + WARNUNG: '$end' fehlt in Emulator Info Datei %1 + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + WARNUNG: '$mame' fehlt in Emulator Info Datei %1 + + +- ++ + WARNING: missing '$info' in emulator info file %1 + WARNUNG: '$info' fehlt in Emulator Info Datei %1 + + +- ++ + emu info + Emu Info + + +- ++ + %n emulator info record(s) imported + + %n Emulator Info Datensatz importiert +@@ -3883,7 +3865,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + WARNUNG: kann Emulator Info Datei '%1' nicht öffnen + +@@ -7782,528 +7764,528 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + MachineList + +- ++ + Waiting for data... + Warte auf Daten... + + +- ++ + determining emulator version and supported sets + Ermittle Emulator Version und unterstützte Sets + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: kann ausführbare MAME Datei nicht in einem angemessenen Zeitraum starten, gebe auf + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + Fertig (Ermittle Emulator Version und unterstützte Sets, benötigte Zeit = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL: konnte die Anzahl unterstützter Sets nicht ermitteln + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + WARNUNG: XML Daten Cache ist unvollständig, invalidiere XML Daten Cache + + +- ++ + verifying ROM status for all sets + Prüfe ROM Status aller Sets + + +- ++ + Name + Name + + +- ++ + Source file + Quelldatei + + +- ++ + Clone of + Klon von + + +- ++ + ROM of + ROM von + + +- ++ + Year + Jahr + + +- ++ + Manufacturer + Hersteller + + +- +- ++ ++ + ROM + ROM + + +- ++ + Size + Größe + + +- ++ + CRC + CRC + + +- +- ++ ++ + Region + Region + + +- ++ + Offset + Offset + + +- ++ + Chip + Chip + + +- +- ++ ++ + Type + Typ + + +- ++ + Clock + Taktung + + +- ++ + Width + Breite + + +- ++ + Height + Höhe + + +- ++ + Refresh + Aktualisierung + + +- +- ++ ++ + Sound + Sound + + +- ++ + Channels + Kanäle + + +- ++ + Input + Eingabe + + +- ++ + Players + Spieler + + +- +- ++ ++ + Buttons + Feuerknöpfe + + +- ++ + Coins + Münzen + + +- ++ + Service + Service + + +- ++ + Driver + Treiber + + +- +- +- +- ++ ++ ++ ++ + Status + Status + + +- ++ + Emulation + Emulation + + +- ++ + Color + Farbe + + +- ++ + Graphic + Grafik + + +- ++ + Save state + Zustand speichern + + +- ++ + Palette size + Größe der Farbpalette + + +- +- +- ++ ++ ++ + good + gut + + +- +- ++ ++ + bad + schlecht + + +- +- ++ ++ + unsupported + nicht unterstützt + + +- +- ++ ++ + supported + unterstützt + + +- +- +- ++ ++ ++ + imperfect + unvollständig + + +- +- +- ++ ++ ++ + preliminary + vorläufig + + +- ++ + L: + L: + + +- ++ + C: + K: + + +- ++ + I: + I: + + +- ++ + N: + N: + + +- ++ + U: + U: + + +- ++ + S: + S: + + +- ++ + DIP switch + DIP Schalter + + +- ++ + DIP value + DIP Wert + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Standard + + +- ++ + yes + ja + + +- ++ + no + nein + + +- ++ + baddump + schlechter Dump + + +- ++ + nodump + kein Dump + + +- ++ + BIOS + BIOS + + +- +- ++ ++ + Merge + Merge + + +- ++ + Tilt + Tilt + + +- ++ + Cocktail + Cocktail + + +- ++ + Protection + Schutz + + +- ++ + BIOS set + BIOS Set + + +- ++ + Description + Beschreibung + + +- ++ + Sample + Sample + + +- ++ + Disk + Festplatte + + +- ++ + MD5 + MD5 + + +- ++ + Index + Index + + +- ++ + Sample of + Sample von + + +- ++ + loading ROM state from cache + Lade ROM Status aus dem Cache + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + WARNUNG: kann ROM-Status Cache nicht öffnen, bitte ROMs verifizieren + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + WARNUNG: ROM-Status Cache ist nicht vollständig oder nicht aktuell, bitte ROMs neu verifizieren + + +- ++ + Filtering, please wait... + Filtere, bitte warten... + + +- ++ + saving favorites + Speichere Favoriten + + +- ++ + saving play history + Speichere Spiel-Historie + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: kann Spiel-Favoriten Datei nicht zum Schreiben öffnen, Pfad = %1 + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: kann Spiel-Historien Datei nicht zum Schreiben öffnen, Pfad = %1 + + +- ++ + vertical + vertikal + + +- ++ + horizontal + horizontal + + +- ++ + raster + Raster + + +- ++ + Unknown + Unbekannt + + +- ++ + On + An + + +- ++ + Off + Aus + + +- ++ + audio + Audio + + +- ++ + Unused + Unbenutzt + + +- ++ + processing machine list + Verarbeite Maschinenliste + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + WARNUNG: konnte Emulator Version des Maschinenlisten Caches nicht ermitteln + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + INFORMATION: der Maschinenlisten Cache wird nun wegen eines neues Formats aktualisiert + + +- ++ + loading machine data from machine list cache + Lade Maschinendaten aus dem Maschinenlisten Cache + + +- +- ++ ++ + Machine data - %p% + Maschinendaten - %p% + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + Fertig (Lade Maschinendaten aus dem Maschinenlisten Cache, benötigte Zeit = %1) + + +- ++ + parsing machine data and recreating machine list cache + Lese Maschinendaten und erzeuge Maschinenlisten Cache neu + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + FEHLER: Kann Maschinenlisten Cache nicht zum Schreiben öffnen, Pfad = %1 + + +- +- ++ ++ + ascending + aufsteigend + + +- +- ++ ++ + descending + absteigend + + +- +- ++ ++ + sorting machine list by %1 in %2 order + Sortiere Maschinenliste nach %1 in %2er Reihenfolge + + +- +- ++ ++ + restoring machine selection + Restauriere Maschinen-Selektion + + +- ++ + done (processing machine list, elapsed time = %1) + Fertig (Verarbeite Maschinenliste, benötigte Zeit = %1) + + +- ++ + %n machine(s) + + %n Maschine +@@ -8311,134 +8293,134 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + WARNUNG: Maschinenliste nicht vollständig gelesen, invalidiere Maschinenlisten Cache + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + WARNUNG: Maschinenlisten Cache ist nicht aktuell, invalidiere Maschinenlisten Cache + + +- ++ + M: + B: + + +- ++ + ROM state filter already active + ROM Status Filter bereits aktiv + + +- ++ + applying ROM state filter + Filtere ROM Status + + +- ++ + done (applying ROM state filter, elapsed time = %1) + Fertig (Filtere ROM Status, benötigte Zeit = %1) + + +- ++ + please wait for ROM verification to finish and try again + Bitte warte bis die ROM Verifikation abgeschlossen wurde und versuche es dann erneut + + +- ++ + please wait for reload to finish and try again + Bitte warte bis die Spieleliste aktualisiert wurde und versuche es dann erneut + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + Fertig (Lade ROM Status aus dem Cache, benötigte Zeit = %1) + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: kann Icon-Archiv nicht öffnen, bitte Zugriffsrechte für %1 überprüfen + + +- ++ + pre-caching icons from ZIP archive + Lade Icons aus ZIP Archiv + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + Fertig (Lade Icons aus ZIP Archiv, benötigte Zeit = %1) + + +- ++ + pre-caching icons from directory + Lade Icons aus Verzeichnis + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + Fertig (Lade Icons aus Verzeichnis, benötigte Zeit = %1) + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + FEHLER: Kann ROM-Status Cache nicht zum Schreiben öffnen, Pfad = %1 + + +- ++ + verifying ROM status for '%1' + Prüfe ROM Status für '%1' + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + Fertig (Prüfe ROM Status für '%1'; benötigte Zeit = %2) + + +- +- ++ ++ + ROM status for '%1' is '%2' + ROM Status für '%1' ist '%2' + + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + unbekannt + + +- ++ + State filter - %p% + Status Filter - %p% + + +- +- +- ++ ++ ++ + ROM check - %p% + ROM Prüfung - %p% + + +- ++ + XML data - %p% + XML Daten - %p% + + +- +- ++ ++ + ROM state + ROM-Status + + +- ++ + %n cached ROM state(s) loaded + + %n ROM Status aus dem Cache geladen +@@ -8446,7 +8428,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + %n icon(s) loaded + + %n Icon geladen +@@ -8454,253 +8436,253 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + Icon cache - %p% + Icon Cache - %p% + + +- ++ + unused + unbenutzt + + +- ++ + cpu + CPU + + +- ++ + vector + Vektor + + +- ++ + lcd + LCD + + +- ++ + Is BIOS? + Ist BIOS? + + +- ++ + Runnable + Ausführbar + + +- ++ + Display + Anzeige + + +- ++ + Rotate + Rotieren + + +- ++ + Flip-X + Flip-X + + +- ++ + Pixel clock + Pixel Clock + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- +- ++ ++ ++ + Tag + Markierung + + +- ++ + Control + Steuerung + + +- ++ + Minimum + Minimum + + +- ++ + Maximum + Maximum + + +- ++ + Sensitivity + Empfindlichkeit + + +- ++ + Key Delta + Tasten Delta + + +- ++ + Reverse + Umkehrung + + +- ++ + joy4way + 4-Wege-Joystick + + +- ++ + joy8way + 8-Wege-Joystick + + +- ++ + trackball + Trackball + + +- ++ + joy2way + 2-Wege-Joystick + + +- ++ + doublejoy8way + Doppelter 8-Wege-Joystick + + +- ++ + dial + Lenkrad + + +- ++ + paddle + Paddel + + +- ++ + pedal + Pedal + + +- ++ + stick + Joystick + + +- ++ + vjoy2way + Vertikaler 2-Wege-Joystick + + +- ++ + lightgun + Lichtpistole + + +- ++ + doublejoy4way + Doppelter 4-Wege-Joystick + + +- ++ + vdoublejoy2way + Doppelter vertikaler 2-Wege-Joystick + + +- ++ + doublejoy2way + Doppelter 2-Wege-Joystick + + +- ++ + printer + Drucker + + +- ++ + cdrom + CD-ROM + + +- ++ + cartridge + Steckmodul + + +- ++ + cassette + Kassette + + +- ++ + quickload + Schnelllader + + +- ++ + floppydisk + Floppy Disk + + +- ++ + serial + Serieller Port + + +- ++ + snapshot + Schnappschuss + + +- +- ++ ++ ++ + +- + N/A + N/A + + +- ++ + libarchive error + Libarchive Fehler + + +- +- ++ ++ + %n supported set(s) + + %n unterstütztes Set +@@ -8708,267 +8690,267 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + WARNUNG: die Ausgabe von -listfull hat sich geändert, erzwinge Aktualisierung aller Emulators-Caches + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Lade, bitte warten... + + +- +- ++ ++ + loading favorites and play history + Lade Favoriten und Spiel-Historie + + +- +- ++ ++ + done (loading favorites and play history) + Fertig (Lade Favoriten und Spiel-Historie) + + +- +- ++ ++ + total start-up time: %1 + Gesamt benötigte Start-Zeit: %1 + + +- ++ + WARNING: couldn't find machine information for '%1' + WARNUNG: konnte keine Maschinen-Informationen für '%1' finden + + +- +- ++ ++ + SHA-1 + SHA-1 + + +- ++ + Player + Spieler + + +- ++ + Ways + Wege + + +- ++ + Device + Gerät + + +- ++ + Instance + Instanz + + +- ++ + Brief name + Kurzname + + +- ++ + Extension + Erweiterung + + +- ++ + Mandatory + Erforderlich + + +- ++ + original + original + + +- ++ + compatible + kompatibel + + +- +- ++ ++ + error text = %1 + Fehler Text = %1 + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + FATAL: kann %1 nicht ausführen, Datei '%2' existiert nicht + + +- +- ++ ++ + emulator info: type = %1, version = %2 + Emulator Info: Typ = %1, Version = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: konnte Emulator-Typ und ~-Version nicht ermitteln + + +- ++ + Updating + Aktualisierung + + +- ++ + Is device? + Ist Gerät? + + +- +- ++ ++ + Optional + Optional + + +- ++ + Device reference + Geräte-Referenz + + +- ++ + Configuration + Konfiguration + + +- ++ + Mask + Maske + + +- ++ + Setting + Einstellung + + +- ++ + Value + Wert + + +- ++ + Adjuster + Einsteller + + +- ++ + Software list + Software Liste + + +- ++ + Category + Kategorie + + +- ++ + Item + Gegenstand + + +- ++ + Interface + Schnittstelle + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + WARNUNG: XML Bug: der Name '%1' wird für mehrere Sets verwendet -- bitte MAME Entwickler informieren + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + Fertig (Prüfe ROM Status aller Sets, benötigte Zeit = %1) + + +- ++ + correct + korrekt + + +- ++ + mostly correct + beinahe korrekt + + +- ++ + incorrect + inkorrekt + + +- ++ + not found + nicht gefunden + + +- ++ + ? + ? + + +- +- ++ ++ + FATAL: can't open icon file %1 + FATAL: kann Icon Datei %1 nicht öffnen + + +- ++ + 7z error + 7z Fehler + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + WARNUNG: die verwendete ausführbare Datei kann nicht als MAME identifiziert werden + + +- ++ + loading XML data and recreating cache + Lade XML Daten und erzeuge Cache neu + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + WARNUNG: Maschinenlisten Cache ist ungültig, erzwinge eine Aktualisierung + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + WARNUNG: Maschinenlisten Datenbank ist ungültig, erzwinge eine Aktualisierung + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + WARNUNG: Attribut 'name' ist leer auf XML Zeile %1 (Set wird ignoriert!) -- bitte MAME Entwickler informieren und die fehlerhaften Ausgaben von -listxml anfügen + + +- ++ + and %n device(s) loaded + + und %n Gerät geladen +@@ -8976,7 +8958,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + , %n BIOS set(s) + + , %n BIOS Set +@@ -8984,88 +8966,88 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + ROM Status Info: L:%1 K:%2 B:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + WARNUNG: ROM-Status Cache ist nicht vollständig oder nicht aktuell, automatsche ROM Prüfung aktiviert + + +- ++ + machine description + Maschinen-Beschreibung + + +- ++ + tag + Markierung + + +- ++ + year + Jahr + + +- ++ + manufacturer + Hersteller + + +- ++ + machine name + Maschinenname + + +- ++ + ROM types + ROM Typen + + +- ++ + players + Spieler + + +- ++ + driver status + Treiberstatus + + +- ++ + source file + Quelldatei + + +- ++ + rank + Rang + + +- ++ + category + Kategorie + + +- ++ + version + Version + + +- ++ + T: + M: + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + Fertig (Lade XML Daten und erzeuge Cache neu, benötigte Zeit = %1) + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + Prüfe echten Status eines Sets, welches während der Analyse nicht erwähnt wurde +@@ -9073,7 +9055,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + Fertig (Prüfe echten Status eines Sets, welches während der Analyse nicht erwähnt wurde) +@@ -9081,99 +9063,99 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + pre-caching icons from 7z archive + Lade Icons aus 7z Archiv + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + Fertig (Lade Icons aus 7z Archiv, benötigte Zeit = %1) + + +- ++ + pre-caching icons from archive + Lade Icons aus Archiv + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + Fertig (Lade Icons aus Archiv, benötigte Zeit = %1) + + +- ++ + loading icons from cache database + Lade Icons aus der Cache Datenbank + + +- ++ + done (loading icons from cache database, elapsed time = %1) + Fertig (Lade Icons aus der Cache Datenbank, benötigte Zeit = %1) + + +- ++ + loading category.ini + Lade category.ini + + +- ++ + Category.ini - %p% + Category.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + FEHLER: kann '%1' nicht zum Lesen öffnen -- keine category.ini Daten verfügbar + + +- ++ + done (loading category.ini, elapsed time = %1) + Fertig (Lade category.ini, benötigte Zeit = %1) + + +- +- ++ ++ + System / BIOS + System / BIOS + + +- +- ++ ++ + System / Device + System / Gerät + + +- ++ + loading catver.ini + Lade catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + FEHLER: kann '%1' nicht zum Lesen öffnen -- keine catver.ini Daten verfügbar + + +- ++ + done (loading catver.ini, elapsed time = %1) + Fertig (Lade catver.ini, benötigte Zeit = %1) + + +- ++ + %1 category / %2 version records loaded + %1 Kategorie- / %2 Versions-Datensätze geladen + + +- ++ + Category view - %p% + Kategorieansicht - %p% + + +- ++ + %n category record(s) loaded + + %n Kategorie-Datensatz geladen +@@ -9181,35 +9163,35 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + Version view - %p% + Versionsansicht - %p% + + +- ++ + RAM options + RAM Optionen + + +- ++ + Option + Option + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + WARNUNG: Emulator-Aufruf zur Auditierung wurde nicht ordentlich beendet -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + abgestürzt + +@@ -9582,7 +9564,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + &Notes + No&tizen + +@@ -9599,7 +9581,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + About Qt + Über Qt + +@@ -9678,7 +9660,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + cleaning up + Räume auf + +@@ -9692,11 +9674,11 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + S&pielen + +@@ -9722,28 +9704,28 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + Programm beenden / Aktive Verarbeitung stoppen + + +- ++ + so long and thanks for all the fish + Macht's gut, und danke für den Fisch + + +- ++ + saving main widget layout + Speichere Hauptfenster-Layout + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Bestätigen + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Ihre Konfigurationsänderungen wurden noch nicht übernommen. +@@ -9762,28 +9744,28 @@ Wirklich beenden? + + + +- ++ + image cache cleared + Bild-Zugriffsspeicher geleert + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + Bitte warte bis die Spieleliste aktualisiert wurde und versuche es dann erneut + + +- ++ + &Kill + &Töten + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Ausgewählte(n) Emulator(en) töten (sendet KILL Signal an betreffende(n) Emulator(en)) + +@@ -9803,19 +9785,19 @@ Wirklich beenden? + + + +- +- ++ ++ + ROM verification already active + ROM-Überprüfung wird bereits durchgeführt + + +- +- ++ ++ + please wait for ROM verification to finish and try again + Bitte warte bis die ROM Verifikation abgeschlossen wurde und versuche es dann erneut + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9827,63 +9809,63 @@ Willst Du wirklich jetzt den ROM-Status aller Spiele überprüfen? + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Zu &Favoriten + + +- ++ + Remove from favorites + Von Favoriten entfernen + + +- +- ++ ++ + &Remove + Entfe&rnen + + +- ++ + Clear all favorites + Alle Favoriten entfernen + + +- +- ++ ++ + &Clear + L&eeren + + +- ++ + Remove from played + Von Gespielten entfernen + + +- ++ + Clear all played + Alle Gespielten entfernen + + +- ++ + Save favorites now + Favoriten jetzt speichern + + +- +- ++ ++ + &Save + &Speichern + + +- ++ + Save play-history now + Spiel-Historie jetzt speichern + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Einer oder mehrere Emulatoren laufen noch. +@@ -9895,19 +9877,19 @@ Sollen diese beim Beenden geschlossen werden? + Fl&yer + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Standard + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + Bitte warte bis nach ROM Status gefiltert wurde und versuche es dann erneut + +@@ -9932,20 +9914,20 @@ Sollen diese beim Beenden geschlossen werden? + &ROMs prüfen... + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + Bitte warte bis die Bild-Überprüfung abgeschlossen wurde und versuche es dann erneut + + +- ++ + icon cache cleared + Icon-Zugriffsspeicher geleert + + + +- ++ + Icon / Value + Icon / Wert + +@@ -9953,9 +9935,9 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- ++ ++ ++ + Icon + Icon + +@@ -9970,10 +9952,10 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- +- ++ ++ ++ ++ + Year + Jahr + +@@ -9982,10 +9964,10 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Hersteller + +@@ -9995,8 +9977,8 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- ++ ++ + stopping current processing upon user request + Beende aktuelle Verarbeitung auf Wunsch des Benutzers + +@@ -10011,10 +9993,10 @@ Sollen diese beim Beenden geschlossen werden? + Toolbar + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + &ROM-Status prüfen + +@@ -10029,15 +10011,15 @@ Sollen diese beim Beenden geschlossen werden? + + + +- ++ + destroying process manager + Zerstöre Prozess-Manager + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + ROM &analysieren... + +@@ -10057,54 +10039,54 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- ++ ++ + Choose export file + Export-Datei auswählen + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Alle Dateien (*) + + +- +- ++ ++ + Export to... + Exportieren nach... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Datei auswählen... + + +- +- ++ ++ + Choose import file + Import-Datei auswählen + + +- ++ + automatic ROM check triggered + Automatische ROM Überprüfung wird gestartet + + +- ++ + ERROR: no match found (?) + FEHLER: kein passender Eintrag gefunden (?) + +@@ -10131,13 +10113,13 @@ Sollen diese beim Beenden geschlossen werden? + Frontend Einstellungen und globale Emulator-Konfiguration + + +- +- ++ ++ + WARNING: invalid inipath + WARNUNG: ungültiger ini-Pfad + + +- ++ + killing %n running emulator(s) on exit + + Töte %n Emulator beim Beenden +@@ -10145,7 +10127,7 @@ Sollen diese beim Beenden geschlossen werden? + + + +- ++ + keeping %n running emulator(s) alive + + Lasse %n laufenden Emulator am Leben +@@ -10153,13 +10135,13 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + Bitte warte bis der ROMAlyzer die aktuelle Analyse abgeschlossen hat und versuche es dann erneut + +@@ -10173,227 +10155,227 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- +- ++ ++ ++ ++ + Name + Name + + +- ++ + Are you sure you want to clear the favorites list? + Bist Du sicher, dass Du alle Einträge der Spiel-Historie löschen möchtest? + + +- ++ + Are you sure you want to clear the play history? + Bist Du sicher, dass Du alle Favoriten löschen möchtest? + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Keine Daten verfügbar + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Automatisches Pausieren eingebetteter Emulatoren ein-/ausschalten (oder gedrückt halten um Menü anzuzeigen) + + +- ++ + Scan the pause key used by the emulator + Taste zum Pausieren des Emulators scannen + + +- ++ + Scan pause key... + Pause-Taste scannen... + + +- +- ++ ++ + Enter search string + Such-Zeichenkette eingeben + + +- ++ + Dock / undock this widget + Zwischen 'unabhängigem Fenster' und 'eingebettetem Objekt' hin und herschalten + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + beachten: die Sonderzeichen $, (, ), *, +, ., ?, [, ], ^, {, |, } und \ müssen durch \ eingeleitet werden, wenn sie buchstäblich gemeint sind! + + +- +- +- +- ++ ++ ++ ++ + Reset + Zurücksetzen + + +- ++ + Negate search + Suche negieren + + +- ++ + sorry, devices cannot run standalone + Sorry, Geräte können nicht allein stehend ausgeführt werden + + +- ++ + No devices available + Keine Geräte verfügbar + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + Standard + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + Zeige Maschinen- oder Softwaretitel nur an, wenn die Maschinenliste aufgrund des aktuellen Layouts nicht sichtbar ist + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + ROM neu &erzeugen... + + +- ++ + Include BIOS sets + BIOS-Sets einschließen + + +- ++ + Include device sets + Geräte-Sets einschließen + + ++ + + +- ++ + + +- + Unlock ranks + Ränge entsperren + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + N/A + + +- ++ + ERROR: can't load HTML file '%1' + FEHLER: kann HTML Datei '%1' nicht laden + + +- ++ + ERROR: can't load PDF viewer from '%1' + FEHLER: kann PDF Viewer nicht von '%1' laden + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + Bitte warte bis der ROMAlyzer die aktuelle Neu-Erzeugung abgeschlossen hat und versuche es dann erneut + + +- ++ + YouTube on-disk cache cleared (%1) + YouTube Festplatten-Cache geleert (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + WARNUNG: kann ROM-Status Cache Datei '%1' nicht entfernen, bitte Zugriffsrechte prüfen + + +- ++ + triggering an automatic ROM check on next reload + Automatische ROM Überprüfung wird nach dem nächsten Laden ausgeführt + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + INFORMATION: Der Arcade-Modus muss zuerst eingerichtet werden, starte stattdessen den entsprechenden Dialog + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + Arcade-Modus: Starte QMC2 Arcade, Kommando = '%1' + + +- ++ + WARNING: failed launching QMC2 Arcade + WARNUNG: Fehler beim Starten von QMC2 Arcade + + +- ++ + ProjectMESS page for '%1' / '%2' + ProjectMESS Seite für '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Lade ProjectMESS Seite für '%1' / '%2, bitte warten... + + +- ++ + please wait for sorting to finish and try again + Bitte warte bis die Sortierung abgeschlossen wurde und versuche es dann erneut + + ++ + +- + Toggle embedder options (hold down for menu) + Embedder Optionen ein-/ausschalten (oder gedrückt halten um Menü anzuzeigen) + + +- ++ + To favorites + Zu Favoriten + + +- ++ + Kill emulator + Emulator töten + + +- ++ + &Kill emulator + Emulatoren &töten + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -10405,187 +10387,187 @@ Zeitspanne nicht finden. + Einbettung wiederholen? + + +- ++ + Information + Information + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Sorry, der Emulator ist in der Zwischenzeit von uns gegangen :(. + + +- ++ + There are one or more running downloads. Quit anyway? + Ein oder mehrere Downloads sind noch aktiv. Trotzdem beenden? + + +- ++ + aborting running downloads + Breche aktive Downloads ab + + +- ++ + destroying media player + Zerstöre Media Player + + +- ++ + Welcome to QMC2 v%1! + Willkommen bei QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Lade, bitte warten... + + +- ++ + WARNING: can't open style sheet '%1' + WARNUNG: kann Style-Sheet '%1' nicht öffnen + + +- ++ + using default color palette for GUI style '%1' + Verwende Standard-Farbpalette für GUI Style '%1' + + +- ++ + using custom color palette + Verwende angepasste Farbpalette + + +- ++ + loading YouTube video info cache + Lade YouTube Video Info Cache + + +- ++ + done (loading YouTube video info cache) + Fertig (Lade YouTube Video Info Cache) + + +- +- ++ ++ + running + rennt + + +- +- ++ ++ + Play tagged - %p% + Markierte spielen - %p% + + +- ++ + Add favorites - %p% + Favoriten hinzufügen - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + Bitte warten bis die aktuelle Verarbeitung beendet ist (diese Batch-Mode Operation kann nur exklusiv ausgeführt werden) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + Es ist wahrscheinlich sehr viel schneller eine vollständige ROM Prüfung durchzuführen als %1 Sets individuell zu prüfen. Willst Du wirklich fortfahren? + + +- ++ + ROM tool tagged - %p% + ROM Tool (markierte) - %p% + + +- +- ++ ++ + Tag - %p% + Markierungen setzen - %p% + + +- +- ++ ++ + Tagging, please wait... + Setze Markierungen, bitte warten... + + +- +- ++ ++ + Untag - %p% + Markierungen aufheben - %p% + + +- +- ++ ++ + Untagging, please wait... + Entferne Markierungen, bitte warten... + + +- +- ++ ++ + Invert tag - %p% + Markierungen umkehren - %p% + + +- +- ++ ++ + Inverting tags, please wait... + Invertiere Markierungen, bitten warten... + + +- ++ + External browser + Externer Browser + + +- ++ + External PDF viewer + Externer PDF Viewer + + +- ++ + Manual selection + Handbuch auswählen + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + Es existieren mehrere PDF Handbücher. Auswahl zu öffnender Dokumente: + + +- +- ++ ++ + Software detail + Software-Details + + +- ++ + Choose overlay color + Overlay-Farbe auswählen + + +- ++ + WARNING: ROM path '%1' doesn't exist + WARNUNG: ROM Pfad '%1' existiert nicht + + +- ++ + WARNING: ROM path '%1' isn't accessible + WARNUNG: ROM Pfad '%1' kann nicht verwendet werden + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! +@@ -10594,7 +10576,7 @@ Please check the 'rompath' option in the global emulator configuration + Bitte die 'rompath' Option in den globalen Emulator Einstellungen überprüfen, um dies zu korrigieren. Andernfalls werden die ROMs vermutlich nicht für den Emulator verfügbar sein! + + +- ++ + The ROM paths + + %1 +@@ -10611,46 +10593,46 @@ existieren nicht oder können nicht verwendet werden. + Bitte die 'rompath' Option in den globalen Emulator Einstellungen überprüfen, um dies zu korrigieren. Andernfalls werden die ROMs vermutlich nicht für den Emulator verfügbar sein! + + +- ++ + Check ROM path + ROM Pfad prüfen + + +- ++ + processing global emulator configuration + Verarbeite globale Emulator-Konfiguration + + ++ + +- + Export global MAME configuration + Globale MAME Konfiguration exportieren + + +- ++ + Import from... + Importieren von... + + ++ + +- + Import global MAME configuration + Globale MAME Konfiguration importieren + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + Verarbeitung von MAME Ausgabe Mitteilungen aktivieren (forciert '-output console') + + +- +- ++ ++ + <inipath>/mame.ini + <inipath>/mame.ini + + +- ++ + destroying audio effects dialog + Zerstöre Audio Effekt Dialog + +@@ -10661,82 +10643,82 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + ProjectMESS Cache leeren + + +- ++ + Default configuration + Standard Konfiguration + + +- ++ + ProjectMESS in-memory cache cleared (%1) + Speicher-residenter ProjectMESS Cache geleert (%1) + + +- ++ + ROM state cache file '%1' removed + ROM-Status Cache Datei '%1' entfernt + + +- ++ + ProjectMESS page for system '%1' + ProjectMESS Seite für '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Lade ProjectMESS Seite für System '%1', bitte warten... + + +- ++ + destroying YouTube video widget + Zerstöre YouTube Video WIdget + + +- ++ + destroying emulator configuration instances + Zerstöre Emulator Konfigurationsinstanzen + + +- ++ + destroying image widgets + Zerstöre Bild Objekte + + +- ++ + destroying open dialogs + Zerstöre offene Dialogfenster + + +- ++ + destroying network access manager + Zerstöre Netzwerk-Access-Manager + + +- ++ + setting GUI style to '%1' + Setze GUI Style auf '%1' + + +- ++ + WARNING: GUI style '%1' not found + WARNUNG: GUI Style '%1' nicht gefunden + + +- ++ + loading style sheet '%1' + Lade Style Sheet '%1' + + +- ++ + removing current style sheet + Entferne aktuelles Style Sheet + + +- ++ + YouTube index - %p% + YouTube Index - %p% + + +- ++ + %n video info record(s) loaded + + %n Video-Info Datensatz geladen +@@ -10769,10 +10751,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Tag + Markierung + +@@ -10781,10 +10763,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + ROM types + ROM Typen + +@@ -10793,10 +10775,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Players + Spieler + +@@ -10805,10 +10787,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Treiberstatus + +@@ -10817,9 +10799,9 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- ++ ++ ++ + Category + Kategorie + +@@ -10828,9 +10810,9 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- ++ ++ ++ + Version + Version + +@@ -11040,10 +11022,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Source file + Quelldatei + +@@ -11053,10 +11035,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Rank + Rang + +@@ -11098,13 +11080,13 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Machine / Attribute + Maschine / Attribut + + + +- ++ + Machine / Clones + Maschine / Klone + +@@ -11115,7 +11097,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Category / Machine + Kategorie / Maschine + +@@ -11126,19 +11108,19 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Version / Machine + Version / Maschine + + + +- ++ + Search for machines (not case-sensitive) + Nach Maschinen suchen (Groß-/Kleinschreibung wird nicht beachtet) + + + +- ++ + Search for machines + Nach Maschinen suchen + +@@ -11255,9 +11237,9 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- ++ ++ ++ + Add current machine to favorites + Aktuelle Maschine zu Favoriten hinzufügen + +@@ -11270,10 +11252,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + ROM-Status der aktuellen Maschine überprüfen + +@@ -11671,7 +11653,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Internal browser + Interner Browser + +@@ -11876,12 +11858,12 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + ++ + + +- ++ + + +- + Lock ranks + Ränge sperren + +@@ -11975,7 +11957,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Internal PDF viewer + Interner PDF Viewer + +@@ -12142,9 +12124,9 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms gesamt) + +@@ -12212,168 +12194,168 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Kommando + + +- +- +- ++ ++ ++ + paused + pausiert + + +- ++ + Searching machines - %p% + Suche Maschinen - %p% + + +- ++ + Show machine/software titles + Maschinen- / Software-Titel anzeigen + + +- ++ + Show machine- or software-titles at the bottom of all images + Maschinen- oder Software-Titel am unteren Rand jedes Bilds anzeigen + + +- +- ++ ++ + Copy emulator command line to clipboard + Emulator Kommandozeile in Zwischenablage kopieren + + +- +- ++ ++ + &Copy command + &Kommando kopieren + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + Ausgewählte Maschine spielen + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Ausgewählte Maschine spielen (eingebettet) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + ROM-Set der aktuellen Maschine mit dem ROMAlyzer analysieren + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + ROM-Set der aktuellen Maschine mit dem ROMAlyzer neu erzeugen + + +- +- +- +- ++ ++ ++ ++ + Tab position + Tab Position + + +- +- +- +- ++ ++ ++ ++ + Component setup + Komponenten Einstellung + + +- +- +- +- ++ ++ ++ ++ + Component setup... + Komponenten Einstellung... + + +- ++ + machine list reload is already active + Maschinenliste wird bereits neu geladen + + +- +- ++ ++ + saving machine selection + Speichere Maschinen-Selektion + + +- ++ + machine list cache file '%1' removed + Maschinenlisten-Cache Datei '%1' entfernt + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + WARNUNG: kann Maschinenlisten Cache Datei '%1' nicht entfernen, bitte Zugriffsrechte prüfen + + +- ++ + Emulator for this machine + Emulator für diese Maschine + + +- ++ + emulator #%1 is already embedded + Emulator #%1 ist bereits eingebettet + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + WARNUNG: mehrere Fenster für Emulator #%1 gefunden, wähle Fenster ID %2 für Einbettung + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + Emulator #%1 wird eingebettet, Fenster ID = %2 + + +- ++ + saving YouTube video info cache + Speichere YouTube Video Info Cache + + +- ++ + done (saving YouTube video info cache) + Fertig (Speichere YouTube Video Info Cache) + + +- +- ++ ++ + failed (saving YouTube video info cache) + Fehlgeschlagen (Speichere YouTube Video Info Cache) + + +- ++ + saving current machine's favorite software + Speichere favorisierte Software der aktuellen Maschine + + +- ++ + saving current machine's device configurations + Speichere Geräte-Konfigurationen der aktuellen Maschine + + +- ++ + destroying machine list + Zerstöre Maschinenliste + +@@ -12455,7 +12437,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Schneller Vorlauf innerhalb des Stücks + + +- ++ + Select one or more audio files + Eine oder mehrere Audio Dateien auswählen + +@@ -12484,7 +12466,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Auotmatisch ein- und ausblenden beim Pausieren / Fortsetzen + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + Audio Player: Track Info: Titel = '%1', Künstler = '%2', Album = '%3', Genre = '%4' + +@@ -12589,66 +12571,66 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Vollbild- / Fenster-Modus umschalten + + +- +- +- +- ++ ++ ++ ++ + Set tab position north + Tabulator Position 'Norden' setzen + + +- +- +- +- ++ ++ ++ ++ + &North + &Norden + + +- +- +- +- ++ ++ ++ ++ + Set tab position south + Tabulator Position 'Süden' setzen + + +- +- +- +- ++ ++ ++ ++ + &South + &Süden + + +- +- +- +- ++ ++ ++ ++ + Set tab position west + Tabulator Position 'Westen' setzen + + +- +- +- +- ++ ++ ++ ++ + &West + &Westen + + +- +- +- +- ++ ++ ++ ++ + Set tab position east + Tabulator Position 'Osten' setzen + + +- +- +- +- ++ ++ ++ ++ + &East + &Osten + +@@ -12673,7 +12655,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Tit&el + + +- ++ + freed %n byte(s) in %1 + + %n Byte in %1 freigegeben +@@ -12681,7 +12663,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + %n entry(s) + + %n Eintrag +@@ -12694,7 +12676,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + removed %n byte(s) in %1 + + %n Byte in %1 gelöscht +@@ -12702,7 +12684,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + %n file(s) + + %n Datei +@@ -12739,13 +12721,13 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Ausgewählte Downloads anhalten + + +- ++ + Choose file to store download + Datei zum Speichern auswählen + + +- +- ++ ++ + last message repeated %n time(s) + + letzte Meldung %n-mal wiederholt +@@ -12753,80 +12735,80 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Toggle maximization of embedded emulator windows + Maximierung eingebetteter Emulatoren ein-/ausschalten + + +- ++ + Embed emulator widget + Emulator Fenster einbetten + + +- ++ + &Embed + &Einbetten + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Spielen (&eingebettet) + + +- +- ++ ++ + <p>No data available</p> + <p>Keine Daten verfügbar</p> + + + +- ++ + Embedded emulators + Eingebettete Emulatoren + + +- ++ + Release emulator + Emulator freigeben + + +- ++ + WARNING: no matching window for emulator #%1 found + WARNUNG: es konnte kein Fenster für Emulator #%1 gefunden werden + + +- ++ + Embedding failed + Einbetten fehlgeschlagen + + ++ + +- + Scanning pause key + Scanne Pause-Taste + + +- ++ + disconnecting audio source from audio sink + Trenne Audio-Quelle von Audio-Ausgabe + + +- ++ + Add URL + URL hinzufügen + + +- ++ + Enter valid MP3 stream URL: + Gültige MP3 Stream URL eingeben: + + +- ++ + Buffering %p% + Pufferung %p% + +@@ -13749,21 +13731,6 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Browse system notes template + Vorlage für System-Notizen auswählen + +- +- +- Load software information database (from history.dat) +- Software Informations Datenbank laden (aus MAME history.dat) +- +- +- +- Software information database - history.dat (read) +- Software Informations Datenbank - MAME history.dat (lesen) +- +- +- +- Browse software information database (history.dat) +- Software Informations Datenbank auswählen (MAME history.dat) +- + + + Define additional artwork classes for systems and software-list entries +@@ -13912,11 +13879,6 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Archive + Archiv + +- +- +- MAME machine information database - history.dat (read) +- MAME Maschinen Informations Datenbank - history.dat (lesen) +- + + + Browse MESS emulator information database (messinfo.dat) +@@ -13937,21 +13899,11 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Machine favorites file (write) + Maschinen-Favoriten Datei (schreiben) + +- +- +- Load MAME machine information database (history.dat) +- MAME Maschinen Informations Datenbank laden (history.dat) +- + + + Machine info (MAME) + Maschinen Info (MAME) + +- +- +- Browse MAME machine information database (history.dat) +- MAME Maschinen Informations Datenbank auswählen (history.dat) +- + + + Video snap folder +@@ -15386,11 +15338,31 @@ Lokale Maschinen-Einstellungen verwenden, mit globalen Einstellungen überschrei + Browse system manual folder + System Handbuch Verzeichnis auswählen + ++ ++ ++ Software information database - history.xml (read) ++ Software Informations Datenbank - MAME history.xml (lesen) ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ MAME Maschinen Informations Datenbank - history.xml (lesen) ++ ++ ++ ++ Browse software information database (history.xml) ++ MAME Maschinen Informations Datenbank auswählen (history.xml) ++ + + + DAT-info database file (write) + DAT-Info Datenbank Datei (schreiben) + ++ ++ ++ Load MAME machine information database (history.xml) ++ MAME Maschinen Informations Datenbank laden (history.xml) ++ + + + Machine info (MESS) +@@ -15406,6 +15378,11 @@ Lokale Maschinen-Einstellungen verwenden, mit globalen Einstellungen überschrei + Emu info (MESS) + Emu Info (MESS) + ++ ++ ++ Load software information database (from history.xml) ++ Software Informations Datenbank laden (aus MAME history.xml) ++ + + + Software info +@@ -15416,6 +15393,11 @@ Lokale Maschinen-Einstellungen verwenden, mit globalen Einstellungen überschrei + Import software information to DAT-info database + Software Informationen in DAT-Info Datenbank importieren + ++ ++ ++ Browse MAME machine information database (history.xml) ++ MAME Maschinen Informations Datenbank auswählen (history.xml) ++ + + + System manual folder (read) +@@ -17235,7 +17217,7 @@ Bist Du sicher, dass Du das tun willst? + + QObject + +- ++ + M.A.M.E. Catalog / Launcher II v + M.A.M.E. Catalog / Launcher II v + +@@ -17249,28 +17231,28 @@ Bist Du sicher, dass Du das tun willst? + Standard + + +- +- ++ ++ + correct + korrekt + + +- ++ + incorrect + inkorrekt + + +- ++ + mostly correct + beinahe korrekt + + +- ++ + not found + nicht gefunden + + +- ++ + + + +@@ -17279,29 +17261,29 @@ Bist Du sicher, dass Du das tun willst? + unbekannt + + +- ++ + Import from... + Importieren von... + + ++ + +- + Export machine-specific MAME configuration + Maschinen-spezifische MAME Konfiguration exportieren + + ++ + +- + Import machine-specific MAME configuration + Maschinen-spezifische MAME Konfiguration importieren + + +- ++ + Setting up the GUI, please wait... + GUI wird eingerichtet, bitte warten... + + +- ++ + GIT %1 + GIT %1 + +@@ -17342,13 +17324,13 @@ Bist Du sicher, dass Du das tun willst? + kein / schlechter Dump + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + SDL Joystick Unterstützung aktiviert - verwende SDL v%1.%2.%3 + + +- ++ + Phonon features enabled - using Phonon v%1 + Phonon Features aktiviert - verwende Phonon v%1 + +@@ -17425,19 +17407,19 @@ Bist Du sicher, dass Du das tun willst? + Status-Info für Software-Liste '%1': L:%2 K:%3 B:%4 I:%5 N:%6 U:%7 + + +- ++ + + yes + ja + + +- ++ + + no + nein + + +- ++ + + partially + teilweise +diff --git a/data/lng/qmc2_el.qm b/data/lng/qmc2_el.qm +index 9dad8dffceb9623e88f8b96d9cd0caf25574c6fa..d77b015f83cc577f7891af5db87c88e3f8106207 100644 +GIT binary patch +literal 33 +ocmcE7ks@*G{hX<16=n7(EZlo{IRgU&Yidrsdr$|E#l*-60Q<8GzyJUM + +literal 23 +fcmcE7ks@*G{hX<16=n7(EZlpygMop8iIEWihQJ9+ + +diff --git a/data/lng/qmc2_el.ts b/data/lng/qmc2_el.ts +index b28021bb6..358ba76c6 100644 +--- a/data/lng/qmc2_el.ts ++++ b/data/lng/qmc2_el.ts +@@ -3608,147 +3608,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + + + +- +- ++ ++ + machine info-texts + + + +- ++ + Machine info - %p% + + + +- +- WARNING: missing '$end' in machine info file %1 +- +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- +- +- +- +- WARNING: missing '$info' in machine info file %1 +- +- +- +- ++ + machine info + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -3756,82 +3741,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- ++ + Software info - %p% + + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + + + +- ++ + software info + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + %n software info record(s) imported + + +@@ -3839,43 +3821,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + Emu info - %p% + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + emu info + + + +- ++ + %n emulator info record(s) imported + + +@@ -3883,7 +3865,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + + +@@ -7779,460 +7761,460 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + + + +- +- +- ++ ++ ++ + good + + + +- +- ++ ++ + bad + + + +- +- +- ++ ++ ++ + preliminary + + + +- +- ++ ++ + supported + + + +- +- ++ ++ + unsupported + + + +- +- +- ++ ++ ++ + imperfect + + + +- ++ + yes + + + +- ++ + no + + + +- ++ + baddump + + + +- ++ + nodump + + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + + + +- ++ + On + + + +- ++ + Off + + + +- ++ + audio + + + +- ++ + unused + + + +- ++ + Unused + + + +- ++ + cpu + + + +- ++ + vector + + + +- ++ + lcd + + + +- ++ + joy4way + + + +- ++ + joy8way + + + +- ++ + trackball + + + +- ++ + joy2way + + + +- ++ + doublejoy8way + + + +- ++ + dial + + + +- ++ + paddle + + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + + + +- ++ + lightgun + + + +- ++ + doublejoy4way + + + +- ++ + vdoublejoy2way + + + +- ++ + doublejoy2way + + + +- ++ + printer + + + +- ++ + cdrom + + + +- ++ + cartridge + + + +- ++ + cassette + + + +- ++ + quickload + + + +- ++ + floppydisk + + + +- ++ + serial + + + +- ++ + snapshot + + + +- ++ + original + + + +- ++ + compatible + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + + + +- ++ + determining emulator version and supported sets + + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + + + +- +- ++ ++ + emulator info: type = %1, version = %2 + + + +- ++ + FATAL: couldn't determine emulator type and version + + + +- ++ + FATAL: couldn't determine the number of supported sets + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + + + +- ++ + verifying ROM status for '%1' + + + +- +- +- ++ ++ ++ + ROM check - %p% + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + Updating + + + +- ++ + Name + + + +- ++ + Source file + + + +- ++ + Is BIOS? + + + +- ++ + Is device? + + + +- ++ + Runnable + + + +- ++ + Clone of + + + +- ++ + ROM of + + + +- ++ + Sample of + + + +- ++ + Year + + + +- ++ + Manufacturer + + + +- +- ++ ++ + ROM + + + +- +- ++ ++ ++ + +- + N/A + + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8240,552 +8222,552 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + loading XML data and recreating cache + + + +- ++ + BIOS + + + +- ++ + Size + + + +- ++ + CRC + + + +- +- ++ ++ + Merge + + + +- +- ++ ++ + Region + + + +- ++ + Offset + + + +- +- +- +- ++ ++ ++ ++ + Status + + + +- +- ++ ++ + Optional + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Device reference + + + +- ++ + Chip + + + +- +- +- ++ ++ ++ + Tag + + + +- +- ++ ++ + Type + + + +- ++ + Clock + + + +- ++ + Display + + + +- ++ + Rotate + + + +- ++ + Flip-X + + + +- ++ + Width + + + +- ++ + Height + + + +- ++ + Refresh + + + +- ++ + Pixel clock + + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- ++ ++ + Sound + + + +- ++ + Channels + + + +- ++ + Input + + + +- ++ + Service + + + +- ++ + Tilt + + + +- ++ + Players + + + +- +- ++ ++ + Buttons + + + +- ++ + Coins + + + +- ++ + Control + + + +- ++ + Minimum + + + +- ++ + Maximum + + + +- ++ + Sensitivity + + + +- ++ + Key Delta + + + +- ++ + Reverse + + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + + + +- ++ + year + + + +- ++ + manufacturer + + + +- ++ + machine name + + + +- ++ + ROM types + + + +- ++ + players + + + +- ++ + driver status + + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + + + +- ++ + version + + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + + + +- ++ + Configuration + + + +- ++ + Mask + + + +- ++ + Setting + + + +- ++ + Value + + + +- ++ + Driver + + + +- ++ + Emulation + + + +- ++ + Color + + + +- ++ + Graphic + + + +- ++ + Cocktail + + + +- ++ + Protection + + + +- ++ + Save state + + + +- ++ + Palette size + + + +- ++ + BIOS set + + + +- ++ + Description + + + +- ++ + Sample + + + +- ++ + Disk + + + +- ++ + MD5 + + + +- ++ + Index + + + +- ++ + Adjuster + + + +- ++ + Software list + + + +- ++ + Category + + + +- ++ + Item + + + +- ++ + Device + + + +- ++ + Mandatory + + + +- ++ + Interface + + + +- ++ + Instance + + + +- ++ + Brief name + + + +- ++ + Extension + + + +- ++ + RAM options + + + +- ++ + Option + + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + + + +- ++ + loading ROM state from cache + + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + + + +- ++ + %n cached ROM state(s) loaded + + +@@ -8793,54 +8775,54 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + + + +- ++ + CHD + + + +- ++ + ? + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- +- ++ ++ + ascending + + + +- +- ++ ++ + descending + + + +- ++ + , %n BIOS set(s) + + +@@ -8848,7 +8830,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + +@@ -8856,136 +8838,136 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + + + +- ++ + ROM state filter already active + + + +- ++ + please wait for ROM verification to finish and try again + + + +- ++ + please wait for reload to finish and try again + + + +- ++ + applying ROM state filter + + + +- ++ + State filter - %p% + + + +- ++ + done (applying ROM state filter, elapsed time = %1) + + + +- ++ + saving favorites + + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + + + +- ++ + saving play history + + + +- ++ + FATAL: can't open play history file for writing, path = %1 + + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + + + +- ++ + S: + + + +- ++ + T: + + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + +@@ -8993,7 +8975,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + +@@ -9001,83 +8983,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + + + +- +- ++ ++ + ROM state + + + +- +- ++ ++ + ROM status for '%1' is '%2' + + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9085,42 +9067,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + pre-caching icons from ZIP archive + + + +- ++ + Icon cache - %p% + + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + +@@ -9128,77 +9110,77 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from directory + + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- ++ + loading catver.ini + + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + + + +- ++ + done (loading catver.ini, elapsed time = %1) + + + +- ++ + %1 category / %2 version records loaded + + + +- ++ + Category view - %p% + + + +- ++ + %n category record(s) loaded + + +@@ -9206,7 +9188,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + + +@@ -9545,16 +9527,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + + + + +- ++ + Icon / Value + + +@@ -9563,10 +9545,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + + +@@ -9575,10 +9557,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + + +@@ -9587,10 +9569,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + + +@@ -9599,10 +9581,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + + +@@ -9611,10 +9593,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + + +@@ -9623,10 +9605,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + + +@@ -9635,9 +9617,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + + +@@ -9646,9 +9628,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + + +@@ -9669,9 +9651,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + + +@@ -9698,7 +9680,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + + +@@ -9922,9 +9904,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -10054,7 +10036,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + + +@@ -10111,11 +10093,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + + +@@ -10147,7 +10129,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + + +@@ -10229,10 +10211,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + + +@@ -10285,13 +10267,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10302,7 +10284,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10313,19 +10295,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10396,9 +10378,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10417,10 +10399,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10591,10 +10573,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + + +@@ -10604,10 +10586,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10943,11 +10925,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + + +@@ -11323,7 +11305,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -11528,12 +11510,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + ++ + + +- ++ + + +- + Lock ranks + + +@@ -11627,7 +11609,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11639,8 +11621,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + +@@ -11648,48 +11630,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + + + +- +- ++ ++ + Enter search string + + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + + + +- ++ + Scan the pause key used by the emulator + + + +- ++ + Scan pause key... + + + +- ++ + Toggle maximization of embedded emulator windows + + + +- ++ + Dock / undock this widget + + +@@ -11700,123 +11682,131 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embed emulator widget + + + +- ++ + &Embed + + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + + + +- ++ + &Kill + + + +- +- ++ ++ + Copy emulator command line to clipboard + + + +- +- ++ ++ + &Copy command + + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + + + +- ++ + Remove from favorites + + + +- +- ++ ++ + &Remove + + + +- ++ + Clear all favorites + + + +- +- ++ ++ + &Clear + + + +- ++ + Save favorites now + + + +- +- ++ ++ + &Save + + + +- ++ + Remove from played + + + +- ++ + Clear all played + + + +- ++ + Save play-history now + + + +- +- +- +- ++ ++ ++ ++ + Tab position + + ++ ++ ++ ++ ++ ++ Set tab position north ++ ++ + + + + + +- Set tab position north ++ &North + + + +- +- +- +- +- &North ++ ++ ++ ++ ++ Set tab position south + + + +@@ -11824,15 +11814,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position south ++ &South + + + +- +- +- +- +- &South ++ ++ ++ ++ ++ Set tab position west + + + +@@ -11840,15 +11830,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position west ++ &West + + + +- +- +- +- +- &West ++ ++ ++ ++ ++ Set tab position east + + + +@@ -11856,15 +11846,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position east ++ &East + + + +- +- +- +- +- &East ++ ++ ++ ++ ++ Component setup + + + +@@ -11872,93 +11862,85 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Component setup +- +- +- +- +- +- +- + Component setup... + + + +- ++ + sorry, devices cannot run standalone + + + +- ++ + No devices available + + + +- ++ + Default configuration + + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + + + +- +- ++ ++ + please wait for ROM verification to finish and try again + + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + + + +- +- ++ ++ + ROM verification already active + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11966,22 +11948,22 @@ Do you really want to check all ROM states now? + + + +- ++ + automatic ROM check triggered + + + +- ++ + image cache cleared + + + +- ++ + icon cache cleared + + + +- ++ + freed %n byte(s) in %1 + + +@@ -11989,7 +11971,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n entry(s) + + +@@ -11997,7 +11979,7 @@ Do you really want to check all ROM states now? + + + +- ++ + removed %n byte(s) in %1 + + +@@ -12005,7 +11987,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n file(s) + + +@@ -12013,363 +11995,363 @@ Do you really want to check all ROM states now? + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + YouTube on-disk cache cleared (%1) + + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + + + +- ++ + triggering an automatic ROM check on next reload + + + +- ++ + ERROR: no match found (?) + + + +- ++ + ProjectMESS page for '%1' / '%2' + + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + + + +- +- ++ ++ + Export to... + + + +- +- ++ ++ + <inipath>/%1.ini + + + +- +- +- +- ++ ++ ++ ++ + Select file... + + + +- +- ++ ++ + <p>No data available</p> + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + +- +- +- +- +- +- &Rebuild ROM... +- +- + + + + + ++ &Rebuild ROM... ++ ++ ++ ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + + + +- ++ + Negate search + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + ++ + + +- ++ + + +- + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- ++ + emulator #%1 is already embedded + + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + + + +- +- +- ++ ++ ++ + paused + + + +- ++ + Release emulator + + + ++ + +- + Toggle embedder options (hold down for menu) + + + +- ++ + To favorites + + + +- ++ + Kill emulator + + + +- ++ + &Kill emulator + + + +- ++ + WARNING: no matching window for emulator #%1 found + + + +- ++ + Embedding failed + + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12377,139 +12359,139 @@ Retry embedding? + + + +- ++ + Information + + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + + + ++ + +- + Scanning pause key + + + +- ++ + Are you sure you want to clear the favorites list? + + + +- ++ + Are you sure you want to clear the play history? + + + +- +- ++ ++ + Choose export file + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + + + +- +- ++ ++ + Choose import file + + + +- +- ++ ++ + WARNING: invalid inipath + + + +- +- ++ ++ + stopping current processing upon user request + + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + + + +- ++ + There are one or more running downloads. Quit anyway? + + + +- ++ + cleaning up + + + +- ++ + aborting running downloads + + + +- ++ + disconnecting audio source from audio sink + + + +- ++ + destroying audio effects dialog + + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + + + +- ++ + saving main widget layout + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + + + +- ++ + killing %n running emulator(s) on exit + + +@@ -12517,7 +12499,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + +@@ -12525,86 +12507,86 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + + + +- ++ + so long and thanks for all the fish + + + +- ++ + Welcome to QMC2 v%1! + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + loading style sheet '%1' + + + +- ++ + removing current style sheet + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + +@@ -12612,156 +12594,156 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + + + +- ++ + Add URL + + + +- ++ + Enter valid MP3 stream URL: + + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + + + +- ++ + Buffering %p% + + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + + + +- +- ++ ++ + Play tagged - %p% + + + +- ++ + Add favorites - %p% + + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + + + +- +- ++ ++ + Tag - %p% + + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12772,41 +12754,41 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + + + ++ + +- + Export global MAME configuration + + + +- ++ + Import from... + + + ++ + +- + Import global MAME configuration + + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + + +@@ -13905,16 +13887,6 @@ Please check the 'rompath' option in the global emulator configuration + Browse system notes template + + +- +- +- Load software information database (from history.dat) +- +- +- +- +- Software information database - history.dat (read) +- +- + + + Save machine selection on exit and before reloading the machine list +@@ -13935,16 +13907,6 @@ Please check the 'rompath' option in the global emulator configuration + Browse machine favorites file + + +- +- +- MAME machine information database - history.dat (read) +- +- +- +- +- Browse software information database (history.dat) +- +- + + + +@@ -13980,11 +13942,6 @@ Please check the 'rompath' option in the global emulator configuration + Select image formats... + + +- +- +- Load MAME machine information database (history.dat) +- +- + + + Machine info (MAME) +@@ -14393,6 +14350,36 @@ Please check the 'rompath' option in the global emulator configuration + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ ++ ++ ++ ++ Browse software information database (history.xml) ++ ++ ++ ++ ++ Load MAME machine information database (history.xml) ++ ++ ++ ++ ++ Load software information database (from history.xml) ++ ++ ++ ++ ++ Browse MAME machine information database (history.xml) ++ ++ + + + System manual folder (read) +@@ -15488,11 +15475,6 @@ Please check the 'rompath' option in the global emulator configuration + Import software information to DAT-info database + + +- +- +- Browse MAME machine information database (history.dat) +- +- + + + Machine description +@@ -17204,28 +17186,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + + + +- ++ + incorrect + + + +- ++ + mostly correct + + + +- ++ + not found + + + +- ++ + + + +@@ -17243,45 +17225,45 @@ Are you sure you want to do this? + + + +- ++ + Import from... + + + ++ + +- + Export machine-specific MAME configuration + + + ++ + +- + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + + +@@ -17389,19 +17371,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + + + +- ++ + + no + + + +- ++ + + partially + +diff --git a/data/lng/qmc2_es.qm b/data/lng/qmc2_es.qm +index dc5dc7a1280d805f406bf743cbf7a70f4da9169e..1678475251cdf77d60a39f3dbe2842f387cd9e6a 100644 +GIT binary patch +delta 213 +zcmdn?O5(sP2`QT$DH5mN&zX8wQD%R_!o7EwGcYi)rWVJ$25%H-_Z3?s%D`f4%iVKk +z3j?E;5_hj^Bm*-W`{cF0Klyh}y2-#?V!*vSC60k9QgriHKTdw;!h0#xepi +z)Aob0%y+n1D;RPaa;7iJWVT|d$j#B5p7@qoc>3)KW})f*SM9a5RarVDg2Yj5|< +zVs6NVD!+W4*_Iioe7o=s<`d3P!NMubveW-cvuJ{3rW;OUmS}gBVF6;+?T#{RUnKx) +CtV$OE + +delta 169 +zcmX@`N@Ck92?3iODH5mN&zX8wQD%R_!o7DlO11ln#oc6JW@G2>StH88Vr$FYb7l(z +zqn6U-?Y=+xcc;WLFhz=T?>-sHz+7UmdA}bgKl7oYlg+1N+fT^BnQbAW`Zt)jIZrRS$*eS;U4}(-dgE2_}! +O79eKb?k&UiRRRD(#y~s( + +diff --git a/data/lng/qmc2_es.ts b/data/lng/qmc2_es.ts +index 9ba3ffe3b..76d520b1a 100644 +--- a/data/lng/qmc2_es.ts ++++ b/data/lng/qmc2_es.ts +@@ -3627,147 +3627,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + + + +- +- ++ ++ + machine info-texts + + + +- ++ + Machine info - %p% + + + +- +- WARNING: missing '$end' in machine info file %1 +- +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- +- +- +- +- WARNING: missing '$info' in machine info file %1 +- +- +- +- ++ + machine info + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -3775,82 +3760,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- ++ + Software info - %p% + Info de software - %p% + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + + + +- ++ + software info + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + %n software info record(s) imported + + +@@ -3858,43 +3840,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + Emu info - %p% + Info emulador - %p% + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + emu info + + + +- ++ + %n emulator info record(s) imported + + +@@ -3902,7 +3884,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + + +@@ -7801,460 +7783,460 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + desconocido + + +- +- +- ++ ++ ++ + good + bueno + + +- +- ++ ++ + bad + malo + + +- +- +- ++ ++ ++ + preliminary + preliminar + + +- +- ++ ++ + supported + soportado + + +- +- ++ ++ + unsupported + sin soporte + + +- +- +- ++ ++ ++ + imperfect + imperfecto + + +- ++ + yes + + + +- ++ + no + + + +- ++ + baddump + mal dump + + +- ++ + nodump + sin dump + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + desconocido + + +- ++ + On + Activado + + +- ++ + Off + Desactivado + + +- ++ + audio + sonido + + +- ++ + unused + sin uso + + +- ++ + Unused + Sin uso + + +- ++ + cpu + + + +- ++ + vector + + + +- ++ + lcd + + + +- ++ + joy4way + joy4dir + + +- ++ + joy8way + joy8dir + + +- ++ + trackball + + + +- ++ + joy2way + joy2dir + + +- ++ + doublejoy8way + doblejoy8dir + + +- ++ + dial + + + +- ++ + paddle + pala + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + vjoy2dir + + +- ++ + lightgun + + + +- ++ + doublejoy4way + doblejoy4dir + + +- ++ + vdoublejoy2way + vdoblejoy2dir + + +- ++ + doublejoy2way + doblejoy2dir + + +- ++ + printer + impresora + + +- ++ + cdrom + + + +- ++ + cartridge + cartucho + + +- ++ + cassette + + + +- ++ + quickload + carga rápida + + +- ++ + floppydisk + + + +- ++ + serial + + + +- ++ + snapshot + captura + + +- ++ + original + + + +- ++ + compatible + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + ERROR: no se puede abrir el archivo de icono, por favor comprueba los permisos de acceso para %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + ERROR: no se puede abrir archivo de icono %1 + + +- ++ + 7z error + error 7z + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + Esperando datos... + + +- ++ + determining emulator version and supported sets + determinando la versión del emulador y los sets soportados + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + ERROR: no se puede iniciar el ejecutable de MAME en un tiempo razonable, abandonando + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + ERROR: no se puede iniciar el ejecutable %1, el archivo '%2' no existe + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + hecho (determinando la versión del emulador y los sets soportados, tiempo transcurrido = %1) + + +- +- ++ ++ + emulator info: type = %1, version = %2 + info emulador: tipo= %1, versión = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + ERROR: no se pudo determinar versión ni tipo de emulador + + +- ++ + FATAL: couldn't determine the number of supported sets + ERROR: no se pudo determinar el número de sets soportados + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Cargando, por favor espere... + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + datos XML - %p% + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERROR: no se puede abrir caché de estado de ROMs para su escritura, ruta = %1 + + +- ++ + verifying ROM status for '%1' + verificando el estado de ROMs para '%1' + + +- +- +- ++ ++ ++ + ROM check - %p% + comprobación de ROM - %p% + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + Updating + Actualizando + + +- ++ + Name + Nombre + + +- ++ + Source file + Archivo original + + +- ++ + Is BIOS? + ¿Es BIOS? + + +- ++ + Is device? + ¿Es dispositivo? + + +- ++ + Runnable + Ejecutable + + +- ++ + Clone of + Clon de + + +- ++ + ROM of + ROM de + + +- ++ + Sample of + Muestra de + + +- ++ + Year + Año + + +- ++ + Manufacturer + Fabricante + + +- +- ++ ++ + ROM + + + +- +- ++ ++ ++ + +- + N/A + + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8262,552 +8244,552 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + loading XML data and recreating cache + cargando datos XML y recreando caché + + +- ++ + BIOS + + + +- ++ + Size + Tamaño + + +- ++ + CRC + + + +- +- ++ ++ + Merge + Mezclar + + +- +- ++ ++ + Region + Región + + +- ++ + Offset + + + +- +- +- +- ++ ++ ++ ++ + Status + Estado + + +- +- ++ ++ + Optional + Opcional + + +- +- ++ ++ + SHA-1 + + + +- ++ + Device reference + Referencia de dispositivo + + +- ++ + Chip + + + +- +- +- ++ ++ ++ + Tag + Etiqueta + + +- +- ++ ++ + Type + Tipo + + +- ++ + Clock + Reloj + + +- ++ + Display + Pantalla + + +- ++ + Rotate + Rotar + + +- ++ + Flip-X + Invertir X + + +- ++ + Width + Largo + + +- ++ + Height + Alto + + +- ++ + Refresh + Actualizar + + +- ++ + Pixel clock + Reloj de píxel + + +- ++ + H-Total + + + +- ++ + H-Bend + H Curvatura + + +- ++ + HB-Start + HB comienzo + + +- ++ + V-Total + + + +- ++ + V-Bend + V Curvatura + + +- ++ + VB-Start + VB comienzo + + +- +- ++ ++ + Sound + Sonido + + +- ++ + Channels + Canales + + +- ++ + Input + Entrada + + +- ++ + Service + Servicio + + +- ++ + Tilt + Inclinación + + +- ++ + Players + Jugadores + + +- +- ++ ++ + Buttons + Botones + + +- ++ + Coins + Monedas + + +- ++ + Control + + + +- ++ + Minimum + Mínimo + + +- ++ + Maximum + Máximo + + +- ++ + Sensitivity + Sensibilidad + + +- ++ + Key Delta + + + +- ++ + Reverse + Inverso + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + Interruptor DIP + + +- ++ + DIP value + Valor DIP + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + etiqueta + + +- ++ + year + año + + +- ++ + manufacturer + fabricante + + +- ++ + machine name + + + +- ++ + ROM types + Tipos de ROM + + +- ++ + players + jugadores + + +- ++ + driver status + estado del driver + + +- ++ + source file + archivo fuente + + +- ++ + rank + rango + + +- ++ + category + categoría + + +- ++ + version + versión + + +- ++ + Filtering, please wait... + Filtrando, por favor espere... + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + ATENCIÓN: error de XML: el nombre '%1' se usa en múltiples sets -- por favor informa a los desarrolladores de MAME + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + hecho (verificando estado de ROM para todos los sets, (tiempo transcurrido = '%1') + + +- ++ + pre-caching icons from 7z archive + pre-cacheando iconos desde archivo 7z + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + hecho (pre-cacheando iconos desde archivo 7z, tiempo transcurrido = %1) + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + Sistema / Dispositivo + + +- ++ + correct + correcto + + +- ++ + mostly correct + mayormente correcto + + +- ++ + incorrect + incorrecto + + +- ++ + not found + no encontrado + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Predeterminado + + +- ++ + Configuration + Configuración + + +- ++ + Mask + Máscara + + +- ++ + Setting + Configuración + + +- ++ + Value + Valor + + +- ++ + Driver + + + +- ++ + Emulation + Emulación + + +- ++ + Color + + + +- ++ + Graphic + Gráfico + + +- ++ + Cocktail + Cóctel + + +- ++ + Protection + Protección + + +- ++ + Save state + Estado guardado + + +- ++ + Palette size + Tamaño paleta + + +- ++ + BIOS set + + + +- ++ + Description + Descripción + + +- ++ + Sample + Muestra + + +- ++ + Disk + Disco + + +- ++ + MD5 + + + +- ++ + Index + Índice + + +- ++ + Adjuster + Ajustador + + +- ++ + Software list + Lista de software + + +- ++ + Category + Categoría + + +- ++ + Item + Objeto + + +- ++ + Device + Dispositivo + + +- ++ + Mandatory + Mandatorio + + +- ++ + Interface + Interfaz + + +- ++ + Instance + Instancia + + +- ++ + Brief name + Nombre breve + + +- ++ + Extension + Extensión + + +- ++ + RAM options + Opciones RAM + + +- ++ + Option + Opción + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + ATENCIÓN: no se puede abrir caché de estado de ROM, por favor comprueba las ROMs + + +- ++ + loading ROM state from cache + cargando estado de ROM desde caché + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + hecho (cargando estado de ROM desde caché, tiempo transcurrido = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n estado de ROM cargado +@@ -8815,54 +8797,54 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + + + +- ++ + CHD + + + +- ++ + ? + ¿? + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + ATENCIÓN: caché de datos XML incompleta, invalidando caché + + +- ++ + verifying ROM status for all sets + verificando estado de ROM para todos los sets + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + ATENCIÓN: el resultado de -listfull ha cambiado, forzando una recarga de todos los caches de emuladores + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + ATENCIÓN: atributo de nombre vacío en XML línea %1 (¡el set será ignorado!) -- por favor, informa a los desarrolladores de MAME y adjunta el archivo resultante de --listxml + + +- +- ++ ++ + ascending + ascendente + + +- +- ++ ++ + descending + descendente + + +- ++ + , %n BIOS set(s) + + , %n set BIOS +@@ -8870,7 +8852,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + y %n dispositivo cargado +@@ -8878,136 +8860,136 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Info estado de ROM: L:%1 C:%2 M:%3 I:%4 N:%5 D:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + ATENCIÓN: caché de estado de ROM incompleta o antigua, activando comprobación automática de ROM + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + ATENCIÓN: caché de estado de ROM incompleta o antigua, por favor vuelve a comprobar ROMs + + +- ++ + ROM state filter already active + filtro estado de ROM todavía activo + + +- ++ + please wait for ROM verification to finish and try again + por favor espera a que finalice la verificación ROM y vuelve a intentarlo + + +- ++ + please wait for reload to finish and try again + por favor espera a que finalice la recarga y vuelve a intentarlo + + +- ++ + applying ROM state filter + aplicando filtro estado de ROM + + +- ++ + State filter - %p% + Filtro estado - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + hecho (aplicando filtro estado de ROM, tiempo transcurrido = %1) + + +- ++ + saving favorites + guardando favoritos + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + ERROR: no se puede abrir el archivo de favoritos para su escritura, ruta = %1 + + +- ++ + saving play history + guardando historial de juego + + +- ++ + FATAL: can't open play history file for writing, path = %1 + ERROR: no se puede abrir el archivo de historial de juego para su escritura, ruta =%1 + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + D: + + +- ++ + S: + B: + + +- ++ + T: + E: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + ATENCIÓN: la auditoría del emulador no finalizó correctamente -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + caído + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + hecho (cargando datos XML y recreando caché, tiempo transcurrido = %1) + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + comprobando estado real de %n set no indicado en la auditoría completa +@@ -9015,7 +8997,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + hecho (comprobando estado real de %n set no indicado en la auditoría completa) +@@ -9023,83 +9005,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + hecho (verificando estado de ROM para '%1', tiempo transcurrido = %2) + + +- +- ++ ++ + ROM state + estado de ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + estado de ROM para '%1' es '%2' + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9107,42 +9089,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + pre-caching icons from ZIP archive + pre-cacheando iconos desde archivo ZIP + + +- ++ + Icon cache - %p% + caché iconos - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + hecho (pre-cacheando iconos desde archivo ZIP, tiempo transcurrido = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + %n icono cargado +@@ -9150,77 +9132,77 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from directory + pre-cacheando iconos desde directorio + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + hecho (pre-cacheando iconos desde directorio, tiempo transcurrido = %1) + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + cargando category.ini + + +- ++ + Category.ini - %p% + Category.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + ERROR: no se puede abrir '%1' para su lectura -- no hay datos de category.ini disponibles + + +- ++ + done (loading category.ini, elapsed time = %1) + hecho (cargando category.ini, tiempo transcurrido = %1) + + +- ++ + loading catver.ini + cargando catver.ini + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + ERROR: no se puede abrir '%1' para su lectura -- no hay datos de catver.ini disponibles + + +- ++ + done (loading catver.ini, elapsed time = %1) + hecho (cargando catver.ini, tiempo transcurrido = %1) + + +- ++ + %1 category / %2 version records loaded + categoría %1 / %2 registros de versión cargados + + +- ++ + Category view - %p% + Vista por categorías - %p% + + +- ++ + %n category record(s) loaded + + %n registro de categorías cargado +@@ -9228,7 +9210,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + Vista versión - %p% + +@@ -9567,16 +9549,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Etiqueta + + + +- ++ + Icon / Value + Icono / Valor + +@@ -9585,10 +9567,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + Año + +@@ -9597,10 +9579,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Fabricante + +@@ -9609,10 +9591,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + Nombre + +@@ -9621,10 +9603,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Tipos de ROM + +@@ -9633,10 +9615,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + Jugadores + +@@ -9645,10 +9627,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Estado del driver + +@@ -9657,9 +9639,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + Categoría + +@@ -9668,9 +9650,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + Versión + +@@ -9691,9 +9673,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + Icono + +@@ -9720,7 +9702,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + Emuladores empotrados + +@@ -9944,9 +9926,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -10076,7 +10058,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + &Notas + +@@ -10133,11 +10115,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jugar + +@@ -10169,7 +10151,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + Acerca de Qt + +@@ -10251,10 +10233,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + A &favoritos + +@@ -10307,13 +10289,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10324,7 +10306,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10335,19 +10317,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10418,9 +10400,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10439,10 +10421,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10613,10 +10595,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + Archivo original + +@@ -10626,10 +10608,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + Rango + +@@ -10965,11 +10947,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jugar &empotrado + +@@ -11345,7 +11327,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + Navegador interno + +@@ -11550,12 +11532,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + ++ + + +- ++ + + +- + Lock ranks + Bloquear rangos + +@@ -11649,7 +11631,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11661,8 +11643,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + último mensaje repetido %n vez +@@ -11670,48 +11652,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Predeterminado + + +- +- ++ ++ + Enter search string + Introducir texto de búsqueda + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Cambiar el pausado automático de emuladores empotrados (mantener pulsado para menú) + + +- ++ + Scan the pause key used by the emulator + Escanear tecla de pausa usada por el emulador + + +- ++ + Scan pause key... + Escanear tecla de pausa... + + +- ++ + Toggle maximization of embedded emulator windows + Cambiar la maximización de la ventana de emuladores empotrados + + +- ++ + Dock / undock this widget + Acoplar / desacoplar este widget + +@@ -11722,265 +11704,265 @@ Use local value for option '%1', overwrite with global value or don&ap + Eliminar caché de ProjectMESS + + +- ++ + Embed emulator widget + Empotrar widget de emulador + + +- ++ + &Embed + &Empotrar + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Matar emulador(es) seleccionado(s) (manda señal KILL a proceso(s) de emulador(es)) + + +- ++ + &Kill + Ma&tar + + +- +- ++ ++ + Copy emulator command line to clipboard + Copiar el comando del emulador al portapapeles + + +- +- ++ ++ + &Copy command + &Copiar comando + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Comprobar estado de &ROM + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analizar ROM... + + +- ++ + Remove from favorites + Eliminar de favoritos + + +- +- ++ ++ + &Remove + &Eliminar + + +- ++ + Clear all favorites + Borrar todos los favoritos + + +- +- ++ ++ + &Clear + &Borrar + + +- ++ + Save favorites now + Guardar favoritos ahora + + +- +- ++ ++ + &Save + &Guardar + + +- ++ + Remove from played + Eliminar de jugados + + +- ++ + Clear all played + Borrar todos los jugados + + +- ++ + Save play-history now + Guardar historial de juego ahora + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- +- +- +- ++ ++ ++ ++ + Set tab position north + Fijar posición de pestaña norte + + +- +- +- +- ++ ++ ++ ++ + &North + &Norte + + +- +- +- +- ++ ++ ++ ++ + Set tab position south + Fijar posición de pestaña sur + + +- +- +- +- ++ ++ ++ ++ + &South + &Sur + + +- +- +- +- ++ ++ ++ ++ + Set tab position west + Fijar posición de pestaña oeste + + +- +- +- +- ++ ++ ++ ++ + &West + &Oeste + + +- +- +- +- ++ ++ ++ ++ + Set tab position east + Fijar posición de pestaña este + + +- +- +- +- ++ ++ ++ ++ + &East + &Este + + +- +- +- +- ++ ++ ++ ++ + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + sorry, devices cannot run standalone + lo siento, los dispositivos no se pueden ejecutar por sí solos + + +- ++ + No devices available + Sin dispositivos disponibles + + +- ++ + Default configuration + Configuración predeterminada + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + por favor espera a que finalice el filtro de estado de ROM y vuelve a intentarlo + + +- +- ++ ++ + please wait for ROM verification to finish and try again + por favor espera a que finalice la verificación de las ROM y vuelve a intentarlo + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + por favor espera a que finalice la comprobación de imágenes y vuelve a intentarlo + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + por favor espera a que finalice el análisis actual de ROMAlyzer y vuelve a intentarlo + + +- +- ++ ++ + ROM verification already active + Verificación de ROM todavía activa + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + por favor espera a que finalice la recarga y vuelve a intentarlo + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirmar + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11991,22 +11973,22 @@ Se sobrescribirá los datos existentes en caché. + ¿Realmente quieres comprobar todos los estados de ROM ahora? + + +- ++ + automatic ROM check triggered + Comprobación automática de ROM activada + + +- ++ + image cache cleared + Borrada caché de imágenes + + +- ++ + icon cache cleared + Borrada caché de iconos + + +- ++ + freed %n byte(s) in %1 + + Liberado %n byte en %1 +@@ -12014,7 +11996,7 @@ Se sobrescribirá los datos existentes en caché. + + + +- ++ + %n entry(s) + + %n entrada +@@ -12022,7 +12004,7 @@ Se sobrescribirá los datos existentes en caché. + + + +- ++ + removed %n byte(s) in %1 + + eliminado %n byte en %1 +@@ -12030,7 +12012,7 @@ Se sobrescribirá los datos existentes en caché. + + + +- ++ + %n file(s) + + %n archivo +@@ -12038,363 +12020,363 @@ Se sobrescribirá los datos existentes en caché. + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + Borrada caché en memoria de ProjectMESS (%1) + + +- ++ + ROM state cache file '%1' removed + Archivo de estado de cache de ROM '%1' eliminado + + +- ++ + ProjectMESS page for system '%1' + Página ProjectMESS para sistema '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Descargando página ProjectMESS para sistema '%1', por favor espera... + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + Estableciendo el estilo de GUI a '%1' + + +- ++ + WARNING: GUI style '%1' not found + ATENCIÓN: estilo de GUI '%1' no encontrado + + +- ++ + WARNING: can't open style sheet '%1' + ATENCIÓN: no se puede abrir la capa de estilos '%1' + + +- ++ + YouTube on-disk cache cleared (%1) + Borrada caché en disco de YouTube (%1) + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + predeterminado + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Jugar a la máquina seleccionada (empotrado) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + ATENCIÓN: no se puede eliminar el archivo de caché de estado de ROM '%1', por favor comprueba los permisos + + +- ++ + triggering an automatic ROM check on next reload + activando una comprobación automática de ROM en el próximo inicio + + +- ++ + ERROR: no match found (?) + ERROR: no se ha encontrado ningún resultado (¿?) + + +- ++ + ProjectMESS page for '%1' / '%2' + Página ProjectMESS para '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Descargando página ProjectMESS para '%1' / '%2', por favor espera... + + +- +- ++ ++ + Export to... + Exportar a... + + +- +- ++ ++ + <inipath>/%1.ini + + + +- +- +- +- ++ ++ ++ ++ + Select file... + Seleccionar archivo... + + +- +- ++ ++ + <p>No data available</p> + <p>Sin datos disponibles</p> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Sin datos disponibles + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + nota: ¡los caracteres especiales $, (, ), *, +, ., ?, [, ], ^, {, |, } y \ deben ser precedidos por escape cuando se usan literalmente! + +- +- +- +- +- +- &Rebuild ROM... +- +- + + + + + ++ &Rebuild ROM... ++ ++ ++ ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + Reiniciar + + +- ++ + Negate search + Negar búsqueda + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + ++ + + +- ++ + + +- + Unlock ranks + Desbloquear rangos + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + ERROR: no se puede cargar el archivo HTML '%1' + + +- ++ + ERROR: can't load PDF viewer from '%1' + ERROR: no se puede cargar el visor PDF desde '%1' + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + INFORMACIÓN: el modo arcade tiene que ser configurado primero, lanzando el diálogo de configuración + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + modo arcade: lanzando QMC2 Arcade, comando = '%1' + + +- ++ + WARNING: failed launching QMC2 Arcade + ATENCIÓN: fallo lanzando QMC2 Arcade + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + por favor espera a que finalice la clasificación y vuelve a intentarlo + + +- ++ + emulator #%1 is already embedded + emulador #%1 ya está empotrado + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + ATENCIÓN: encontradas múltiples ventanas del emulador #%1, escogiendo ID de ventana %2 para empotrar + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + empotrando emulador #%1, ID ventana = %2 + + +- +- +- ++ ++ ++ + paused + pausado + + +- ++ + Release emulator + Liberar emulador + + ++ + +- + Toggle embedder options (hold down for menu) + Cambiar opciones de empotrado (mantener pulsado para menú) + + +- ++ + To favorites + A favoritos + + +- ++ + Kill emulator + Matar emulador + + +- ++ + &Kill emulator + &Matar emulador + + +- ++ + WARNING: no matching window for emulator #%1 found + ATENCIÓN: no se ha encontrado ventana para emulador #%1 + + +- ++ + Embedding failed + Empotrado fallido + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12405,141 +12387,141 @@ emulador(es) en un tiempo razonable. + ¿Volver a intentar el empotrado? + + +- ++ + Information + Información + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + lo siento, en este tiempo el emulador ha tenido una muerte horrible :(. + + ++ + +- + Scanning pause key + Escaneando tecla de pausa + + +- ++ + Are you sure you want to clear the favorites list? + ¿Estás seguro de que quieres borrar la lista de favoritos? + + +- ++ + Are you sure you want to clear the play history? + ¿Estás seguro de que quieres borrar el historial de juego? + + +- +- ++ ++ + Choose export file + Seleccionar archivo de exportado + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Todos los archivos (*) + + +- +- ++ ++ + Choose import file + Seleccionar archivo de importado + + +- +- ++ ++ + WARNING: invalid inipath + ATENCIÓN: ruta ini inválida + + +- +- ++ ++ + stopping current processing upon user request + parando el procesado actual a petición del usuario + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Los cambios en la configuración todavía no han sido aplicados. + ¿Realmente quieres salir? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Hay uno o mas emuladores ejecutándose todavía. + ¿Deberían ser cerrados al salir? + + +- ++ + There are one or more running downloads. Quit anyway? + Hay una o más descargas en curso. ¿Salir de todas formas? + + +- ++ + cleaning up + limpiando + + +- ++ + aborting running downloads + cancelando descargas en curso + + +- ++ + disconnecting audio source from audio sink + desconectando fuente de sonido del mezclador de audio + + +- ++ + destroying audio effects dialog + destruyendo la ventana de efectos de sonido + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + destruyendo el widget de video YouTube + + +- ++ + saving main widget layout + guardando el diseño de widget principal + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + destruyendo monitor de procesos + + +- ++ + killing %n running emulator(s) on exit + + matando %n emulador activo al salir +@@ -12547,7 +12529,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + manteniendo %n emulador activo +@@ -12555,86 +12537,86 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + destruyendo el gestor de acceso a la red + + +- ++ + so long and thanks for all the fish + hasta luego y gracias por el pescado + + +- ++ + Welcome to QMC2 v%1! + ¡Bienvenido a QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Cargando, por favor espere... + + +- ++ + loading style sheet '%1' + cargando capa de estilos '%1' + + +- ++ + removing current style sheet + eliminando la capa de estilos actual + + +- ++ + using default color palette for GUI style '%1' + usando la paleta de colores predeterminada para el estilo de GUI '%1' + + +- ++ + using custom color palette + usando paleta de colores personalizada + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + Índice YouTube - %p% + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + %n registro de información de video cargado +@@ -12642,149 +12624,149 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + Selecciona uno o más archivos de audio + + +- ++ + Add URL + Añadir URL + + +- ++ + Enter valid MP3 stream URL: + Introducir URL de flujo MP3 válido: + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + reproductor de sonido: info pista: título = '%1', artista = '%2', album = '%3', género = '%4' + + +- ++ + Buffering %p% + Almacenando %p% + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + Seleccionar archivo para almacenar descarga + + +- +- ++ ++ + Play tagged - %p% + Jugar etiquetados - %p% + + +- ++ + Add favorites - %p% + Añadir favoritos - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + por favor espera a que la actividad actual finalice y vuelve a intentarlo (esta operación en lote solo puede ejecutarse exclusivamente) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + Herramienta ROM (etiquetados) - %p% + + +- +- ++ ++ + Tag - %p% + Etiquetar - %p% + + +- +- ++ ++ + Tagging, please wait... + Etiquetando, por favor espere... + + +- +- ++ ++ + Untag - %p% + Desetiquetar - %p% + + +- +- ++ ++ + Untagging, please wait... + Desetiquetando, por favor espere... + + +- +- ++ ++ + Invert tag - %p% + Invertir etiqueta - %p% + + +- +- ++ ++ + Inverting tags, please wait... + Invirtiendo etiquetas, por favor espere... + + +- ++ + External browser + Navegador externo + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Detalle de software + + +- ++ + Choose overlay color + Elegir color de superposición + + +- ++ + WARNING: ROM path '%1' doesn't exist + ATENCIÓN: la ruta de ROM '%1' no existe + + +- ++ + WARNING: ROM path '%1' isn't accessible + ATENCIÓN: la ruta de ROM '%1' no es accesible + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! +@@ -12793,7 +12775,7 @@ Please check the 'rompath' option in the global emulator configuration + Por favor, revisa la opción 'rompath' en la configuración global del emulador para arreglarlo, ¡de lo contrario las ROMs no estarán disponibles para el emulador! + + +- ++ + The ROM paths + + %1 +@@ -12808,41 +12790,41 @@ no existen o no son accesibles + Por favor, revisa la opción 'rompath' en la configuración global del emulador para arreglarlo, ¡de lo contrario las ROMs no estarán disponibles para el emulador! + + +- ++ + Check ROM path + Comprobar la ruta ROM + + +- ++ + processing global emulator configuration + procesando configuración de emulador global + + ++ + +- + Export global MAME configuration + Exportar configuración MAME global + + +- ++ + Import from... + Importar desde... + + ++ + +- + Import global MAME configuration + Importar configuración MAME global + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + + +@@ -13941,16 +13923,6 @@ Por favor, revisa la opción 'rompath' en la configuración global del + Browse system notes template + Navegar a la plantilla de notas de sistema + +- +- +- Load software information database (from history.dat) +- Cargar la base de datos de información del software (desde history.dat) +- +- +- +- Software information database - history.dat (read) +- Base de datos de información de software - history.dat (lectura) +- + + + Save machine selection on exit and before reloading the machine list +@@ -13971,16 +13943,6 @@ Por favor, revisa la opción 'rompath' en la configuración global del + Browse machine favorites file + + +- +- +- MAME machine information database - history.dat (read) +- +- +- +- +- Browse software information database (history.dat) +- Navegar a la base de datos de información de software (history.dat) +- + + + +@@ -14016,11 +13978,6 @@ Por favor, revisa la opción 'rompath' en la configuración global del + Select image formats... + Seleccionar formatos de imagen... + +- +- +- Load MAME machine information database (history.dat) +- +- + + + Machine info (MAME) +@@ -14429,6 +14386,36 @@ Por favor, revisa la opción 'rompath' en la configuración global del + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ Base de datos de información de software - history.xml (lectura) ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ ++ ++ ++ ++ Browse software information database (history.xml) ++ Navegar a la base de datos de información de software (history.xml) ++ ++ ++ ++ Load MAME machine information database (history.xml) ++ ++ ++ ++ ++ Load software information database (from history.xml) ++ Cargar la base de datos de información del software (desde history.xml) ++ ++ ++ ++ Browse MAME machine information database (history.xml) ++ ++ + + + System manual folder (read) +@@ -15524,11 +15511,6 @@ Por favor, revisa la opción 'rompath' en la configuración global del + Import software information to DAT-info database + + +- +- +- Browse MAME machine information database (history.dat) +- +- + + + Machine description +@@ -17250,28 +17232,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + correcto + + +- ++ + incorrect + incorrecto + + +- ++ + mostly correct + mayormente correcto + + +- ++ + not found + no encontrado + + +- ++ + + + +@@ -17289,45 +17271,45 @@ Are you sure you want to do this? + Predeterminado + + +- ++ + Import from... + Importar desde... + + ++ + +- + Export machine-specific MAME configuration + + + ++ + +- + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + Creando la GUI, por favor espera... + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + Funciones Phonon activadas - usando Phonon v%1 + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Soporte de joystick SDL activado - usando SDL v%1.%2.%3 + +@@ -17435,19 +17417,19 @@ Are you sure you want to do this? + info de estado de la lista de software '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 + + +- ++ + + yes + + + +- ++ + + no + + + +- ++ + + partially + parcialmente +diff --git a/data/lng/qmc2_fr.qm b/data/lng/qmc2_fr.qm +index f57d46c6a25db4d30b71f8174caafbef34102225..c1a4f3d94fcdd4edb6747e0ac37e1dc3323d137a 100644 +GIT binary patch +delta 52 +zcmV-40L%Zr^%ThU6dF9ZWEjftoR!TX9KT?pz1^n(000GMa$iPLfe?id0fi6(g%AUU +K5CpXl1+F?|NE3|! + +delta 42 +zcmV+_0M-A<^%TDK6c9YPWEjftoR!TX9KT?pz1@Ktg&F~c8UlqH1BDs{wHgJkI<2P> +AL;wH) + +diff --git a/data/lng/qmc2_fr.ts b/data/lng/qmc2_fr.ts +index ae0499fde..c91915701 100644 +--- a/data/lng/qmc2_fr.ts ++++ b/data/lng/qmc2_fr.ts +@@ -3627,147 +3627,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + + + +- +- ++ ++ + machine info-texts + + + +- ++ + Machine info - %p% + + + +- +- WARNING: missing '$end' in machine info file %1 +- +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- +- +- +- +- WARNING: missing '$info' in machine info file %1 +- +- +- +- ++ + machine info + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -3775,82 +3760,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- ++ + Software info - %p% + + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + + + +- ++ + software info + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + %n software info record(s) imported + + +@@ -3858,43 +3840,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + Emu info - %p% + Info de l'émulateur + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + emu info + + + +- ++ + %n emulator info record(s) imported + + +@@ -3902,7 +3884,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + + +@@ -7801,245 +7783,245 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + inconnu + + +- +- +- ++ ++ ++ + good + valide + + +- +- ++ ++ + bad + invalide + + +- +- +- ++ ++ ++ + preliminary + préliminaire + + +- +- ++ ++ + supported + pris en charge + + +- +- ++ ++ + unsupported + non pris en charge + + +- +- +- ++ ++ ++ + imperfect + imparfait + + +- ++ + yes + oui + + +- ++ + no + non + + +- ++ + baddump + mauvais dump + + +- ++ + nodump + pas de dump + + +- ++ + vertical + vertical + + +- ++ + horizontal + horizontal + + +- ++ + raster + raster bitmap + + +- ++ + Unknown + Inconnu + + +- ++ + On + Activé + + +- ++ + Off + Désactivé + + +- ++ + audio + audio + + +- ++ + Unused + Inutilisé + + +- ++ + original + original + + +- ++ + compatible + compatible + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: Impossible d'ouvrir le fichier des icônes, vérifiez les permissions d'accès pour %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + erreur 7z + + +- ++ + Waiting for data... + En attente de données... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + XML data - %p% + données XML - %p% + + +- ++ + verifying ROM status for '%1' + vérification du statut de ROM pour '%1' + + +- ++ + Updating + Mise à jour en cours + + +- ++ + Name + Nom + + +- ++ + Source file + Fichier source + + +- ++ + Clone of + Clone de + + +- ++ + ROM of + ROM de + + +- ++ + Sample of + Échantillon de + + +- ++ + Is device? + Est un périphérique ? + + +- ++ + Year + Année + + +- ++ + Manufacturer + Fabricant + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ ++ + +- + N/A + + + +- +- ++ ++ + error text = %1 + Texte d'erreur : %1 + + +- +- ++ ++ + %n supported set(s) + + +@@ -8047,219 +8029,219 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Taille + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Merge + + +- +- ++ ++ + Region + Région + + +- ++ + Offset + Offset + + +- +- +- +- ++ ++ ++ ++ + Status + Statut + + +- ++ + Device reference + Périphérique de référence + + +- ++ + Chip + Puce + + +- +- ++ ++ + Type + Type + + +- ++ + Clock + Horloge + + +- ++ + Width + Largeur + + +- ++ + Height + Hauteur + + +- ++ + Refresh + Rafraîchir + + +- +- ++ ++ + Sound + Son + + +- ++ + Channels + Canaux + + +- ++ + Input + Entrée + + +- ++ + Service + Service + + +- ++ + Tilt + Tilt + + +- ++ + Players + Joueurs + + +- +- ++ ++ + Buttons + Boutons + + +- ++ + Coins + Pièces + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + DIP switch + + +- ++ + DIP value + DIP valeur + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -8267,266 +8249,266 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + Système / BIOS + + +- +- ++ ++ + System / Device + Système / Dispositif + + +- ++ + correct + correct + + +- ++ + mostly correct + globalement correct + + +- ++ + incorrect + incorrect + + +- ++ + not found + non trouvé + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Défaut + + +- ++ + libarchive error + erreur libarchive + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + loading XML data and recreating cache + + + +- ++ + verifying ROM status for all sets + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + Configuration + + +- ++ + Mask + Masque + + +- ++ + Setting + Paramètre + + +- ++ + Value + Valeur + + +- ++ + Driver + Pilote + + +- ++ + Emulation + Émulation + + +- ++ + Color + Couleur + + +- ++ + Graphic + Graphique + + +- ++ + Cocktail + Cocktail + + +- ++ + Protection + Protection + + +- ++ + Save state + Sauvegarde d'état + + +- ++ + Palette size + Dimension de palette + + +- ++ + BIOS set + BIOS set + + +- ++ + Description + Description + + +- ++ + Sample + Samples + + +- ++ + Disk + Disque + + +- ++ + MD5 + MD5 + + +- ++ + Index + Index + + +- ++ + Adjuster + Ajuster + + +- ++ + Software list + Liste des logiciels + + +- ++ + Category + Catégorie + + +- ++ + Item + Objet + + +- ++ + Interface + Interface + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + ATTENTION: impossible d'ouvrir le cache d'état de ROM, vérifiez les ROMS + + +- ++ + loading ROM state from cache + chargement des états de ROM depuis le cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + fait (chargement d'état de ROM depuis le cache, temps écoulé = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n état de ROM chargé depuis le cache +@@ -8534,7 +8516,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + et %n périphérique chargé +@@ -8542,7 +8524,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + , %n BIOS set(s) + + , %n set BIOS +@@ -8550,255 +8532,255 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Infor de statut ROM: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + ATTENTION: le cache de ROM est incomplet ou périmé, lancement d'une vérification de ROM automatique + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + ATTENTION: le cache de ROM est incomplet ou périmé, re-vérifiez les ROMS + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- +- ++ ++ + ascending + ascendant + + +- +- ++ ++ + descending + descendant + + +- ++ + machine description + description de la machine + + +- ++ + tag + étiquette + + +- ++ + year + année + + +- ++ + manufacturer + fabricant + + +- ++ + machine name + nom de la machine + + +- ++ + ROM types + + + +- ++ + players + joueurs + + +- ++ + driver status + état du pilote + + +- ++ + source file + fichier source + + +- ++ + rank + rang + + +- ++ + category + catégorie + + +- ++ + version + version + + +- ++ + ROM state filter already active + Le filtre d'état de ROM est déjà actif + + +- ++ + please wait for ROM verification to finish and try again + Patientez SVP durant la vérification des ROMS puis recommencez + + +- ++ + please wait for reload to finish and try again + attendez SVP la fin du rechargement puis recommencez + + +- ++ + applying ROM state filter + Application du filtre d'état de ROM + + +- ++ + State filter - %p% + Filtre d'état - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + fait (application du filtre d'état de ROMS, temps écoulé = %1) + + +- ++ + saving favorites + sauvegarde des favoris + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: impossible d'ouvrir le fichier des favoris en écriture, répertoire = %1 + + +- ++ + saving play history + sauvegarde de l'historique des jeux joués + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: impossible d'ouvrir l'historique des jeux joués en écriture, répertoire = %1 + + +- ++ + L: + L : + + +- ++ + C: + C : + + +- ++ + M: + M : + + +- ++ + I: + I : + + +- ++ + N: + N : + + +- ++ + U: + U : + + +- ++ + S: + S : + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERREUR: impossible d'ouvrir le cache d'état de ROM en écriture, répertoire = %1 + + +- +- +- ++ ++ ++ + ROM check - %p% + vérification de ROM - %p% + + +- ++ + T: + T : + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + fait (vérification du statut de ROM pour '%1', temps écoulé = %2) + + +- +- ++ ++ + ROM state + statut de ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + Le statut de ROM pour '%1' est '%2' + + +- ++ + pre-caching icons from ZIP archive + mise en cache des icônes depuis l'archive ZIP + + +- ++ + Icon cache - %p% + Cache d'icônes - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + fait (mise en cache des icônes depuis l'archive ZIP, temps écoulé = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + %n icône chargé +@@ -8806,77 +8788,77 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from directory + mise en cache des icônes depuis le répertoire + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + fait (mise en cache des icônes depuis le répertoire, temps écoulé = %1) + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- ++ + loading catver.ini + Chargement de catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + ERREUR: impossible d'ouvrir '%1' en liecture - pas de données catver.ini disponibles + + +- ++ + done (loading catver.ini, elapsed time = %1) + fait (Chargement de catver.ini, temps écoulé = %1) + + +- ++ + %1 category / %2 version records loaded + categorie %1 / %2 enregistrements de version chargés + + +- ++ + Category view - %p% + Vue par catégorie - %p% + + +- ++ + %n category record(s) loaded + + +@@ -8884,312 +8866,312 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + Vue par version - %p% + + +- ++ + unused + inutilisé + + +- ++ + cpu + CPU + + +- ++ + vector + vecteur + + +- ++ + lcd + lcd + + +- ++ + Is BIOS? + est BIOS ? + + +- ++ + Runnable + Jouable + + +- ++ + Display + Affichage + + +- ++ + Rotate + Rotation + + +- ++ + Flip-X + Flip-X + + +- ++ + Pixel clock + Horloge de Pixel + + +- ++ + H-Total + H-Total + + +- ++ + H-Bend + H-Bend + + +- ++ + HB-Start + HB-Start + + +- ++ + V-Total + V-Total + + +- ++ + V-Bend + V-Bend + + +- ++ + VB-Start + VB-Start + + +- +- +- ++ ++ ++ + Tag + Tag + + +- ++ + Control + Contrôle + + +- ++ + Minimum + Minimum + + +- ++ + Maximum + Maximum + + +- ++ + Sensitivity + Sensibilité + + +- ++ + Key Delta + Key Delta + + +- ++ + Reverse + Inversé + + +- ++ + joy4way + joy4way + + +- ++ + joy8way + joy8way + + +- ++ + trackball + trackball + + +- ++ + joy2way + joy2way + + +- ++ + doublejoy8way + doublejoy8way + + +- ++ + dial + dial + + +- ++ + paddle + paddle + + +- ++ + pedal + pedal + + +- ++ + stick + stick + + +- ++ + vjoy2way + vjoy2way + + +- ++ + lightgun + lightgun + + +- ++ + doublejoy4way + doublejoy4way + + +- ++ + vdoublejoy2way + vdoublejoy2way + + +- ++ + doublejoy2way + doublejoy2way + + +- ++ + printer + imprimante + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + carte + + +- ++ + cassette + cassette + + +- ++ + quickload + quickload + + +- ++ + floppydisk + floppydisk + + +- ++ + serial + serial + + +- ++ + snapshot + snapshot + + +- ++ + determining emulator version and supported sets + Détermine la version de l'émulateur et les sets supportés + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + fait (détermine la version de l'émulateur et les sets supportés, temps écoulé = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL: impossible de déterminer le nombre de sets supportés + + +- ++ + Device + Device + + +- ++ + Instance + Instance + + +- ++ + Brief name + Nom court + + +- ++ + Extension + Extension + + +- ++ + Mandatory + Mandatory + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: impossible de démarrer MAME en un temps raisonnable, abandon + + +- +- ++ ++ + emulator info: type = %1, version = %2 + info émulateur: type = %1, version = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: n'a pas pu déterminer le type et version de l'émulateur + + +- +- ++ ++ + Optional + Optionnel + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + Vérification du vrai statut de %n set non signalé durant l'audit complet +@@ -9197,7 +9179,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + fait (vérification du vrai statut de %n set non signalé durant l'audit complet) +@@ -9205,30 +9187,30 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + RAM options + options de RAM + + +- ++ + Option + Option + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + ATTENTION: l'audit de test de l'émulateur n'a pas fini proprement -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + planté + +@@ -9550,161 +9532,161 @@ Use local value for option '%1', overwrite with global value or don&ap + + MainWindow + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Par défaut + + +- ++ + Toggle maximization of embedded emulator windows + Bascule la maximisation de fenêtre de l'émulateur embarqué + + +- ++ + Searching machines - %p% + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- ++ + Embed emulator widget + Embarquement de l'émulateur + + +- ++ + &Embed + &Embarqué + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Tue l'émulateur sélectionné (envoit un signal KILL aux processus de l'émulateur) + + +- ++ + &Kill + &Tuer + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jouer + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jouer &embarqué + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Ajouter le jeu aux &favoris + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Vérifie l'état de &ROM + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analyse ROM... + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Remove from favorites + Retirer des favoris + + +- +- ++ ++ + &Remove + &Retirer + + +- ++ + Clear all favorites + Vide tous les favoris + + +- +- ++ ++ + &Clear + &Nettoyer + + +- ++ + Save favorites now + Enregistre les favoris maintenant + + +- +- ++ ++ + &Save + &Sauvegarder + + +- ++ + Remove from played + Retirer de la liste des jeux joués + + +- ++ + Clear all played + Vider toute la liste des jeux joués + + +- ++ + Save play-history now + Enregistrer l'historique des jeux joués maintenant + +@@ -9717,66 +9699,66 @@ Use local value for option '%1', overwrite with global value or don&ap + En attente de données... + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + patientez SVP durant le filtrage par état des ROMS puis recommencez + + +- +- ++ ++ + please wait for ROM verification to finish and try again + patientez SVP durant la vérification des ROMS puis recommencez + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + patientez SVP durant la vérification des images puis recommencez + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + patientez pendant que ROMAlyzer finit l'analyse en cours et recommencez + + +- +- ++ ++ + ROM verification already active + vérification de ROM déjà en cours + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + patientez SVP durant le rechargement puis recommencez + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirmer + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9787,187 +9769,187 @@ Ceci effacera toutes les données existantes en cache. + Etes-vous sûr(e) de vouloir vérifier les ROMS ? + + +- ++ + automatic ROM check triggered + vérification automatique des ROMS + + +- ++ + image cache cleared + cache d'images nettoyé + + +- ++ + icon cache cleared + cache d'icônes nettoyé + + + +- ++ + About Qt + A propos de Qt + + +- ++ + ERROR: no match found (?) + ERREUR: pas de correspondance trouvée (?) + + +- +- ++ ++ + Export to... + Exporter vers... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Choisir le fichier... + + +- +- ++ ++ + <p>No data available</p> + <p>Aucune donnée disponible</p> + + + +- ++ + Embedded emulators + Emulateurs embarqués + + +- ++ + Release emulator + Relâcher l'émulateur + + +- ++ + WARNING: no matching window for emulator #%1 found + ATTENTION: pas de fenêtre correspondante à l'émulateur #%1 + + +- ++ + Embedding failed + Embarquement échoué + + ++ + +- + Scanning pause key + En attente de la touche Pause + + +- +- ++ ++ + Choose export file + Choisir le fichier d'export + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Tous les fichiers (*) + + +- +- ++ ++ + Choose import file + Choisir le fichier d'import + + +- +- ++ ++ + WARNING: invalid inipath + ATTENTION: répetoire ini non valide + + +- +- ++ ++ + stopping current processing upon user request + Arrêt du processus en cours à la demande de l'utilisateur + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Vos changements de configuration n'ont pas encore été appliqués. + Voulez-vous vraiment quitter ? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Il y a un ou plusieurs émulateurs encore en fonctionnement. + Faut-il les tuer à la sortie ? + + +- ++ + There are one or more running downloads. Quit anyway? + Il y a un ou plusieurs téléchargements en cours. Quitter quand même? + + +- ++ + cleaning up + nettoyage + + +- ++ + aborting running downloads + annulation des téléchargements en cours + + +- ++ + saving main widget layout + sauvegarde du layout principal + + +- ++ + disconnecting audio source from audio sink + déconnecte l'audio du mixer audio + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Jouer la machine sélectionnée (embarqué) + + +- ++ + destroying YouTube video widget + destruction du widget de vidéo YouTube + + +- ++ + destroying process manager + destruction du manager de processus + + +- ++ + killing %n running emulator(s) on exit + + tue %n émulateur(s) en fonctionnement à la sortie +@@ -9975,7 +9957,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + keeping %n running emulator(s) alive + + conserve %n émulateur(s) en fonctionnement +@@ -9983,12 +9965,12 @@ Faut-il les tuer à la sortie ? + + + +- ++ + destroying network access manager + destruction du manager de connection réseau + + +- ++ + so long and thanks for all the fish + Salut, et encore merci pour le poisson + +@@ -10004,16 +9986,16 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Tag + Tag + + + +- ++ + Icon / Value + Icône / Valeur + +@@ -10022,10 +10004,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Year + Année + +@@ -10034,10 +10016,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Fabricant + +@@ -10046,10 +10028,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Statut du driver + +@@ -10057,9 +10039,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + Icon + Icône + +@@ -10253,10 +10235,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Source file + Fichier source + +@@ -10266,10 +10248,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10726,7 +10708,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Internal browser + + +@@ -10931,12 +10913,12 @@ Faut-il les tuer à la sortie ? + + + ++ + + +- ++ + + +- + Lock ranks + + +@@ -11030,7 +11012,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Internal PDF viewer + + +@@ -11108,13 +11090,13 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -11125,7 +11107,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Category / Machine + + +@@ -11136,19 +11118,19 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -11306,9 +11288,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -11347,10 +11329,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -11513,90 +11495,90 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Name + Nom + + +- ++ + Are you sure you want to clear the favorites list? + Etes-vous sûr(e) de vouloir vider la liste des favoris ? + + +- ++ + Are you sure you want to clear the play history? + Etes-vous sûr(e) de vouloir vider l'historique des jeux joués ? + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Pas de données disponibles + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- ++ + Default configuration + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + +@@ -11626,10 +11608,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + ROM types + types de ROM + +@@ -11638,10 +11620,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Players + Joueurs + +@@ -11650,9 +11632,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + Category + Catégorie + +@@ -11661,9 +11643,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + Version + Version​‎ + +@@ -11756,7 +11738,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + &Notes + &Notes + +@@ -11815,9 +11797,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms total) + +@@ -11885,21 +11867,21 @@ Faut-il les tuer à la sortie ? + Commande + + +- +- +- ++ ++ ++ + paused + en pause + + +- +- ++ ++ + Copy emulator command line to clipboard + Copier la ligne de commande de l'émulateur dans le presse-papier + + +- +- ++ ++ + &Copy command + &Copier la commande + +@@ -11976,7 +11958,7 @@ Faut-il les tuer à la sortie ? + Avance rapide dans le morceau + + +- ++ + Select one or more audio files + Sélectionner un ou plusieurs fichiers audio + +@@ -12005,7 +11987,7 @@ Faut-il les tuer à la sortie ? + Baisser / Monter le volume sur pause / reprise + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + lecteur audio: info du morceau: titre = '%1', artiste = '%2', album = '%3', genre = '%4' + +@@ -12110,118 +12092,118 @@ Faut-il les tuer à la sortie ? + Basculer en plein écran / fenêtre + + +- +- +- +- ++ ++ ++ ++ + Set tab position north + Positionner le nord + + +- +- +- +- ++ ++ ++ ++ + &North + &Nord + + +- +- +- +- ++ ++ ++ ++ + Set tab position south + Positionner le sud + + +- +- +- +- ++ ++ ++ ++ + &South + &Sud + + +- +- +- +- ++ ++ ++ ++ + Set tab position west + Positionner l'ouest + + +- +- +- +- ++ ++ ++ ++ + &West + &Ouest + + +- +- +- +- ++ ++ ++ ++ + Set tab position east + Positionner l'est + + +- +- +- +- ++ ++ ++ ++ + &East + &Est + + +- +- +- +- ++ ++ ++ ++ + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + +@@ -12246,7 +12228,7 @@ Faut-il les tuer à la sortie ? + Titr&e + + +- ++ + freed %n byte(s) in %1 + + %n bit libéré en %1 +@@ -12254,7 +12236,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + %n entry(s) + + %n entrée +@@ -12267,7 +12249,7 @@ Faut-il les tuer à la sortie ? + Ctrl+M + + +- ++ + removed %n byte(s) in %1 + + %n bit supprimé en %1 +@@ -12275,7 +12257,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + %n file(s) + + %n fichier +@@ -12312,23 +12294,23 @@ Faut-il les tuer à la sortie ? + Stopper les téléchargements sélectionnés + + +- ++ + Choose file to store download + Choisir le fichier pour stocker le téléchargement + + +- ++ + loading style sheet '%1' + chargement de la feuille de style '%1' + + +- ++ + removing current style sheet + enlever la feuille de style actuelle + + +- +- ++ ++ + last message repeated %n time(s) + + dernier message répété %n fois +@@ -12336,17 +12318,17 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Bascule la pause automatique des émulateurs embarqués (maintenir pour menu) + + +- ++ + Scan the pause key used by the emulator + En attente de la touche Pause utilisée par l'émulateur + + +- ++ + Scan pause key... + En attente de la touche Pause... + +@@ -12357,187 +12339,187 @@ Faut-il les tuer à la sortie ? + + + +- +- ++ ++ + Enter search string + Entrer une chaîne de recherche + + +- ++ + Dock / undock this widget + Accroche / Décroche ce widget + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + Reset + Ré-initialise + + +- ++ + Negate search + + + +- ++ + sorry, devices cannot run standalone + désolé, les périphériques ne peuvent fonctionner seuls + + +- ++ + No devices available + Pas de périphériques disponibles + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + défaut + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + ++ + + +- ++ + + +- + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + YouTube on-disk cache cleared (%1) + Cache disque YouTube nettoyé (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + ATTENTION: n'a pas pu enlever le fichier de cache d'état de ROM '%1', vérifiez les permissions + + +- ++ + triggering an automatic ROM check on next reload + actionner la vérification automatique de ROM au prochain rafraîchissement + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + ProjectMESS page for '%1' / '%2' + page ProjectMESS de '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Récupération de la page ProjectMESS de '%1' / '%2', patientez svp... + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + ++ + +- + Toggle embedder options (hold down for menu) + Basculer les options d'embarquement (maintenir pour le menu) + + +- ++ + To favorites + Ajouter aux favoris + + +- ++ + Kill emulator + Tuer l'émulateur + + +- ++ + &Kill emulator + Tu&er l'émulateur + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12548,91 +12530,91 @@ ou plusieurs émulateurs dans un délai raisonnable. + Re-essayer l'embarquement? + + +- ++ + Information + Information + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Désolé, l'émulateur est mort durant ce temps :(. + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + destroying audio effects dialog + destruction de la fenêtre des effets audio + + +- ++ + destroying media player + + + +- ++ + Welcome to QMC2 v%1! + Bienvenue dans QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + YouTube index - %p% + + +- ++ + %n video info record(s) loaded + + %n information de vidéo chargée +@@ -12640,142 +12622,142 @@ Re-essayer l'embarquement? + + + +- ++ + Add URL + + Ajouter une URL + + +- ++ + Enter valid MP3 stream URL: + Entrer une URL de stream MP3 valide: + + +- ++ + Buffering %p% + Mise en cache %p% + + +- +- ++ ++ + running + + + +- +- ++ ++ + Play tagged - %p% + Jouer taggé - %p% + + +- ++ + Add favorites - %p% + Ajouter aux favoris - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + merci de patienter pendant l'activité en cours et tenter de nouveau (cette opération ne peut fonctionner qu'exclusivement) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + outil de ROM taggé - %p% + + +- +- ++ ++ + Tag - %p% + Tagger - %p% + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + Enlever le tag - %p% + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + Inverser le tag - %p% + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Détail du logiciel + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12786,58 +12768,58 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + traitement de la configuration globale de l'émulateur + + ++ + +- + Export global MAME configuration + Exporter la configuration globale de MAME + + +- ++ + Import from... + Importer depuis... + + ++ + +- + Import global MAME configuration + Importer la configuration globale de MAME + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + <rep.ini>/mame.ini + + +- ++ + emulator #%1 is already embedded + l'émulateur #%1 est déjà embarqué + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + ATTENTION: plusieurs fenêtres trouvées pour l'émulateur #%1, choix de la fenêtre ID %2 pour embarquement + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + embarquement de l'émulateur #%1, ID de fenêtre = %2 + +@@ -15174,21 +15156,6 @@ Are you sure you want to do this? + Browse system notes template + + +- +- +- Load software information database (from history.dat) +- +- +- +- +- Software information database - history.dat (read) +- +- +- +- +- Browse software information database (history.dat) +- +- + + + Define additional artwork classes for systems and software-list entries +@@ -15337,11 +15304,6 @@ Are you sure you want to do this? + Archive + Archive + +- +- +- MAME machine information database - history.dat (read) +- +- + + + Browse MESS emulator information database (messinfo.dat) +@@ -15362,21 +15324,11 @@ Are you sure you want to do this? + Machine favorites file (write) + + +- +- +- Load MAME machine information database (history.dat) +- +- + + + Machine info (MAME) + + +- +- +- Browse MAME machine information database (history.dat) +- +- + + + Video snap folder +@@ -16016,11 +15968,31 @@ Are you sure you want to do this? + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ ++ ++ ++ ++ Browse software information database (history.xml) ++ ++ + + + DAT-info database file (write) + + ++ ++ ++ Load MAME machine information database (history.xml) ++ ++ + + + Machine info (MESS) +@@ -16036,6 +16008,11 @@ Are you sure you want to do this? + Emu info (MESS) + + ++ ++ ++ Load software information database (from history.xml) ++ ++ + + + Software info +@@ -16046,6 +16023,11 @@ Are you sure you want to do this? + Import software information to DAT-info database + + ++ ++ ++ Browse MAME machine information database (history.xml) ++ ++ + + + System manual folder (read) +@@ -17244,28 +17226,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + correct + + +- ++ + incorrect + incorrect + + +- ++ + mostly correct + globalement correct + + +- ++ + not found + introuvable + + +- ++ + + + +@@ -17283,34 +17265,34 @@ Are you sure you want to do this? + Par défaut + + +- ++ + Import from... + Importer depuis... + + ++ + +- + Export machine-specific MAME configuration + Exporter la configuration MAME spécifique à la machine + + ++ + +- + Import machine-specific MAME configuration + Importer la configuration MAME spécifique à la machine + + +- ++ + Setting up the GUI, please wait... + Configuration de l'interface, veuillez patienter... + + +- ++ + M.A.M.E. Catalog / Launcher II v + M.A.M.E. Catalog / Launcher II v + + +- ++ + GIT %1 + + +@@ -17351,13 +17333,13 @@ Are you sure you want to do this? + pas de / mauvais dump + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Support SDL du joystick activé - utilise SDL v%1.%2.%3 + + +- ++ + Phonon features enabled - using Phonon v%1 + Phonon actif - utilise Phonon v%1 + +@@ -17434,19 +17416,19 @@ Are you sure you want to do this? + information d'état pour la software-list '%1' : L :%2 C :%3 M :%4 I :%5 N :%6 U :%7 + + +- ++ + + yes + oui + + +- ++ + + no + non + + +- ++ + + partially + partiellement +diff --git a/data/lng/qmc2_it.qm b/data/lng/qmc2_it.qm +index 784e911c3e18aeb49fa0b6ba3fba7986440bb2bf..e28b56cdec0532496538df9abe3a1574c9c50ac8 100644 +GIT binary patch +delta 37 +vcmV+=0NVemqyx010~$QIWEjftoR!TX9KT?pz1^n(000GPbYDqSu@D;4JADtg + +delta 27 +lcmV+$0ObF)qyws?0}wp8WEjftoR!TX9KT?pz1^`I8q%>24Ke@# + +diff --git a/data/lng/qmc2_it.ts b/data/lng/qmc2_it.ts +index 37d49fea8..c60f4375e 100644 +--- a/data/lng/qmc2_it.ts ++++ b/data/lng/qmc2_it.ts +@@ -3628,147 +3628,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + + + +- +- ++ ++ + machine info-texts + + + +- ++ + Machine info - %p% + + + +- +- WARNING: missing '$end' in machine info file %1 +- +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- +- +- +- +- WARNING: missing '$info' in machine info file %1 +- +- +- +- ++ + machine info + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -3776,82 +3761,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- ++ + Software info - %p% + + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + + + +- ++ + software info + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + %n software info record(s) imported + + +@@ -3859,43 +3841,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + Emu info - %p% + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + emu info + + + +- ++ + %n emulator info record(s) imported + + +@@ -3903,7 +3885,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + + +@@ -7799,438 +7781,438 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + sconosciuto + + +- +- +- ++ ++ ++ + good + buono + + +- +- ++ ++ + bad + cattivo + + +- +- +- ++ ++ ++ + preliminary + preliminare + + +- +- ++ ++ + supported + supportato + + +- +- ++ ++ + unsupported + non supportato + + +- +- +- ++ ++ ++ + imperfect + imperfetto + + +- ++ + yes + si + + +- ++ + no + no + + +- ++ + baddump + dump cattivo + + +- ++ + nodump + no dump + + +- ++ + vertical + verticale + + +- ++ + horizontal + orizzontale + + +- ++ + raster + raster + + +- ++ + Unknown + Sconosciuto + + +- ++ + On + Acceso + + +- ++ + Off + Spento + + +- ++ + audio + audio + + +- ++ + unused + non utilizzato + + +- ++ + Unused + Non utilizzato + + +- ++ + cpu + cpu + + +- ++ + vector + vettore + + +- ++ + lcd + lcd + + +- ++ + joy4way + joy4vie + + +- ++ + joy8way + joy8vie + + +- ++ + trackball + trackball + + +- ++ + joy2way + joy2vie + + +- ++ + doublejoy8way + doppiojoy8vie + + +- ++ + dial + chiama + + +- ++ + paddle + paddle + + +- ++ + pedal + pedale + + +- ++ + stick + stick + + +- ++ + vjoy2way + vjoy2vie + + +- ++ + lightgun + pistolaottica + + +- ++ + doublejoy4way + doppiojoy4vie + + +- ++ + vdoublejoy2way + vdoppiojoy2vie + + +- ++ + doublejoy2way + doppiojoy2vie + + +- ++ + printer + stampante + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + cartuccia + + +- ++ + cassette + cassetta + + +- ++ + quickload + caricamento veloce + + +- ++ + floppydisk + floppydisk + + +- ++ + serial + seriale + + +- ++ + snapshot + snapshot + + +- ++ + original + originale + + +- ++ + compatible + compatibile + + +- +- ++ ++ ++ + +- + N/A + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATALE: impossibile aprire file icona, per favore controlla permessi d'accesso per %1 + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + Aspettando i dati... + + +- ++ + determining emulator version and supported sets + determinando versione emulatore e set supportati + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATALE: impossibile avviare eseguibile MAME in un tempo ragionevole, mi arrendo + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + terminato (determinazione versione emulatore e set supportati, tempo impiegato = %1) + + +- +- ++ ++ + emulator info: type = %1, version = %2 + info emulatore: tipo = %1, versione = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATALE: impossibile determinare tipo e versione emulatore + + +- ++ + FATAL: couldn't determine the number of supported sets + FATALE: impossibile determinare il numero di set supportati + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + dati XML - %p% + + +- ++ + verifying ROM status for '%1' + verifica stato ROM per '%1' + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERRORE: impossibile aprire cache stato ROM in scrittura, percorso = %1 + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- +- +- ++ ++ ++ + ROM check - %p% + controllo ROM - %p% + + +- ++ + Name + Nome + + +- ++ + Source file + File origina + + +- ++ + Is BIOS? + È un BIOS? + + +- ++ + Is device? + È un device? + + +- ++ + Runnable + Eseguibile + + +- ++ + Clone of + Clone di + + +- ++ + ROM of + ROM di + + +- ++ + Sample of + Esempio di + + +- ++ + Year + Anno + + +- ++ + Manufacturer + Produttore + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8238,435 +8220,435 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Dimensione + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Merge + + +- +- ++ ++ + Region + Regione + + +- ++ + Offset + Offset + + +- +- +- +- ++ ++ ++ ++ + Status + Stato + + +- +- ++ ++ + Optional + Opzionale + + +- ++ + Device reference + + + +- ++ + Chip + Chip + + +- +- +- ++ ++ ++ + Tag + Tag + + +- +- ++ ++ + Type + Tipo + + +- ++ + Clock + Clock + + +- ++ + Display + DIsplay + + +- ++ + Rotate + + + +- ++ + Flip-X + Inverti-X + + +- ++ + Width + Larghezza + + +- ++ + Height + Altezza + + +- ++ + Refresh + Aggiornamento + + +- ++ + Pixel clock + Clock pixel + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- ++ ++ + Sound + Suono + + +- ++ + Channels + Canali + + +- ++ + Input + Input + + +- ++ + Service + Servizio + + +- ++ + Tilt + Tilt + + +- ++ + Players + Giocatori + + +- +- ++ ++ + Buttons + Tasti + + +- ++ + Coins + Coins + + +- ++ + Control + Controllo + + +- ++ + Minimum + Minimo + + +- ++ + Maximum + Massimo + + +- ++ + Sensitivity + Sensibilità + + +- ++ + Key Delta + + + +- ++ + Reverse + + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Predefinito + + +- ++ + loading XML data and recreating cache + + + +- ++ + Updating + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + Configurazione + + +- ++ + Mask + + + +- ++ + Setting + Impostazioni + + +- ++ + Value + Valore + + +- ++ + Driver + Driver + + +- ++ + Emulation + Emulazione + + +- ++ + Color + Colore + + +- ++ + Graphic + Grafica + + +- ++ + Cocktail + Cocktail + + +- ++ + Protection + Protezione + + +- ++ + Save state + Stato salvataggio + + +- ++ + Palette size + Dimensione paletta + + +- ++ + BIOS set + + + +- ++ + Description + Descrizione + + +- ++ + Sample + Esempio + + +- ++ + Disk + Disco + + +- ++ + MD5 + MD5 + + +- ++ + Index + Indice + + +- ++ + Adjuster + + + +- ++ + Software list + Lista software + + +- ++ + Category + Categoria + + +- ++ + Item + Oggetto + + +- ++ + Device + Device + + +- ++ + Mandatory + Obbligatorio + + +- ++ + Interface + Interfaccia + + +- ++ + Instance + + + +- ++ + Brief name + + + +- ++ + Extension + Estensione + + +- ++ + RAM options + Opzioni RAM + + +- ++ + Option + Opzione + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + ATTENZIONE: impossibile aprire cache stato ROM, per favore controlla la ROM + + +- ++ + loading ROM state from cache + caricamento stato ROM dalla cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + completato (caricamento stato ROM dalla cache, tempo impiegato = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n stato(i) ROM caricati +@@ -8674,81 +8656,81 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- +- ++ ++ + ascending + ascendente + + +- +- ++ ++ + descending + discendente + + +- ++ + , %n BIOS set(s) + + , %n set BIOS +@@ -8756,7 +8738,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + e %n periferiche caricate +@@ -8764,196 +8746,196 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + + + +- ++ + machine description + + + +- ++ + tag + + + +- ++ + year + + + +- ++ + manufacturer + + + +- ++ + machine name + + + +- ++ + ROM types + + + +- ++ + players + + + +- ++ + driver status + + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + + + +- ++ + version + + + +- ++ + ROM state filter already active + + + +- ++ + please wait for ROM verification to finish and try again + per favore aspetta la fine della validazione della ROM e riprova + + +- ++ + please wait for reload to finish and try again + per favore aspetta la fine del caricamento e riprova + + +- ++ + applying ROM state filter + + + +- ++ + State filter - %p% + + + +- ++ + done (applying ROM state filter, elapsed time = %1) + + + +- ++ + saving favorites + + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + + + +- ++ + saving play history + + + +- ++ + FATAL: can't open play history file for writing, path = %1 + + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + + + +- ++ + S: + + + +- ++ + T: + T: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + +@@ -8961,7 +8943,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + +@@ -8969,83 +8951,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + + + +- +- ++ ++ + ROM state + + + +- +- ++ ++ + ROM status for '%1' is '%2' + + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9053,47 +9035,47 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + Filtering, please wait... + + + +- ++ + pre-caching icons from ZIP archive + + + +- ++ + Icon cache - %p% + + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + +@@ -9101,124 +9083,124 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- ++ + pre-caching icons from directory + + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading catver.ini + + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + + + +- ++ + done (loading catver.ini, elapsed time = %1) + + + +- ++ + %1 category / %2 version records loaded + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + Category view - %p% + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + %n category record(s) loaded + + +@@ -9226,7 +9208,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + + +@@ -9565,16 +9547,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Tag + + + +- ++ + Icon / Value + + +@@ -9583,10 +9565,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + Anno + +@@ -9595,10 +9577,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Produttore + +@@ -9607,10 +9589,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + Nome + +@@ -9619,10 +9601,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + + +@@ -9631,10 +9613,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + Giocatori + +@@ -9643,10 +9625,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + + +@@ -9655,9 +9637,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + Categoria + +@@ -9666,9 +9648,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + + +@@ -9689,9 +9671,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + + +@@ -9718,7 +9700,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + + +@@ -9942,9 +9924,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -10074,7 +10056,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + + +@@ -10131,11 +10113,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + + +@@ -10167,7 +10149,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + + +@@ -10249,10 +10231,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + + +@@ -10305,13 +10287,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10322,7 +10304,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10333,19 +10315,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10416,9 +10398,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10437,10 +10419,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10611,10 +10593,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + File origina + +@@ -10624,10 +10606,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10963,11 +10945,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + + +@@ -11343,7 +11325,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -11548,12 +11530,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + ++ + + +- ++ + + +- + Lock ranks + + +@@ -11647,7 +11629,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11659,8 +11641,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + +@@ -11668,48 +11650,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Predefinito + + +- +- ++ ++ + Enter search string + + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + + + +- ++ + Scan the pause key used by the emulator + + + +- ++ + Scan pause key... + + + +- ++ + Toggle maximization of embedded emulator windows + + + +- ++ + Dock / undock this widget + + +@@ -11720,123 +11702,131 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embed emulator widget + + + +- ++ + &Embed + + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + + + +- ++ + &Kill + + + +- +- ++ ++ + Copy emulator command line to clipboard + + + +- +- ++ ++ + &Copy command + + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + + + +- ++ + Remove from favorites + + + +- +- ++ ++ + &Remove + + + +- ++ + Clear all favorites + + + +- +- ++ ++ + &Clear + + + +- ++ + Save favorites now + + + +- +- ++ ++ + &Save + &Salva + + +- ++ + Remove from played + + + +- ++ + Clear all played + + + +- ++ + Save play-history now + + + +- +- +- +- ++ ++ ++ ++ + Tab position + + ++ ++ ++ ++ ++ ++ Set tab position north ++ ++ + + + + + +- Set tab position north ++ &North + + + +- +- +- +- +- &North ++ ++ ++ ++ ++ Set tab position south + + + +@@ -11844,15 +11834,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position south ++ &South + + + +- +- +- +- +- &South ++ ++ ++ ++ ++ Set tab position west + + + +@@ -11860,15 +11850,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position west ++ &West + + + +- +- +- +- +- &West ++ ++ ++ ++ ++ Set tab position east + + + +@@ -11876,15 +11866,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position east ++ &East + + + +- +- +- +- +- &East ++ ++ ++ ++ ++ Component setup + + + +@@ -11892,93 +11882,85 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Component setup +- +- +- +- +- +- +- + Component setup... + + + +- ++ + sorry, devices cannot run standalone + + + +- ++ + No devices available + + + +- ++ + Default configuration + + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + + + +- +- ++ ++ + please wait for ROM verification to finish and try again + per favore aspetta la fine della validazione della ROM e riprova + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + + + +- +- ++ ++ + ROM verification already active + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + per favore aspetta la fine del caricamento e riprova + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11986,22 +11968,22 @@ Do you really want to check all ROM states now? + + + +- ++ + automatic ROM check triggered + + + +- ++ + image cache cleared + + + +- ++ + icon cache cleared + + + +- ++ + freed %n byte(s) in %1 + + +@@ -12009,7 +11991,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n entry(s) + + +@@ -12017,7 +11999,7 @@ Do you really want to check all ROM states now? + + + +- ++ + removed %n byte(s) in %1 + + +@@ -12025,7 +12007,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n file(s) + + +@@ -12033,363 +12015,363 @@ Do you really want to check all ROM states now? + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + YouTube on-disk cache cleared (%1) + + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + + + +- ++ + triggering an automatic ROM check on next reload + + + +- ++ + ERROR: no match found (?) + + + +- ++ + ProjectMESS page for '%1' / '%2' + + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + + + +- +- ++ ++ + Export to... + + + +- +- ++ ++ + <inipath>/%1.ini + + + +- +- +- +- ++ ++ ++ ++ + Select file... + + + +- +- ++ ++ + <p>No data available</p> + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + +- +- +- +- +- +- &Rebuild ROM... +- +- + + + + + ++ &Rebuild ROM... ++ ++ ++ ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + + + +- ++ + Negate search + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + ++ + + +- ++ + + +- + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- ++ + emulator #%1 is already embedded + + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + + + +- +- +- ++ ++ ++ + paused + + + +- ++ + Release emulator + + + ++ + +- + Toggle embedder options (hold down for menu) + + + +- ++ + To favorites + + + +- ++ + Kill emulator + + + +- ++ + &Kill emulator + + + +- ++ + WARNING: no matching window for emulator #%1 found + + + +- ++ + Embedding failed + + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12397,139 +12379,139 @@ Retry embedding? + + + +- ++ + Information + + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + + + ++ + +- + Scanning pause key + + + +- ++ + Are you sure you want to clear the favorites list? + + + +- ++ + Are you sure you want to clear the play history? + + + +- +- ++ ++ + Choose export file + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Tutti i file (*) + + +- +- ++ ++ + Choose import file + + + +- +- ++ ++ + WARNING: invalid inipath + + + +- +- ++ ++ + stopping current processing upon user request + + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + + + +- ++ + There are one or more running downloads. Quit anyway? + + + +- ++ + cleaning up + + + +- ++ + aborting running downloads + + + +- ++ + disconnecting audio source from audio sink + + + +- ++ + destroying audio effects dialog + + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + + + +- ++ + saving main widget layout + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + + + +- ++ + killing %n running emulator(s) on exit + + +@@ -12537,7 +12519,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + +@@ -12545,86 +12527,86 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + + + +- ++ + so long and thanks for all the fish + + + +- ++ + Welcome to QMC2 v%1! + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + loading style sheet '%1' + + + +- ++ + removing current style sheet + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + +@@ -12632,156 +12614,156 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + + + +- ++ + Add URL + + + +- ++ + Enter valid MP3 stream URL: + + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + + + +- ++ + Buffering %p% + + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + + + +- +- ++ ++ + Play tagged - %p% + + + +- ++ + Add favorites - %p% + + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + + + +- +- ++ ++ + Tag - %p% + + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12792,41 +12774,41 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + + + ++ + +- + Export global MAME configuration + + + +- ++ + Import from... + + + ++ + +- + Import global MAME configuration + + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + + +@@ -13950,21 +13932,6 @@ Please check the 'rompath' option in the global emulator configuration + Browse system notes template + + +- +- +- Load software information database (from history.dat) +- +- +- +- +- Software information database - history.dat (read) +- +- +- +- +- Browse software information database (history.dat) +- +- + + + Define additional artwork classes for systems and software-list entries +@@ -14388,6 +14355,36 @@ Please check the 'rompath' option in the global emulator configuration + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ ++ ++ ++ ++ Browse software information database (history.xml) ++ ++ ++ ++ ++ Load MAME machine information database (history.xml) ++ ++ ++ ++ ++ Load software information database (from history.xml) ++ ++ ++ ++ ++ Browse MAME machine information database (history.xml) ++ ++ + + + System manual folder (read) +@@ -15359,11 +15356,6 @@ Please check the 'rompath' option in the global emulator configuration + Browse machine favorites file + + +- +- +- MAME machine information database - history.dat (read) +- +- + + + +@@ -15379,21 +15371,11 @@ Please check the 'rompath' option in the global emulator configuration + Machine favorites file (write) + + +- +- +- Load MAME machine information database (history.dat) +- +- + + + Machine info (MAME) + + +- +- +- Browse MAME machine information database (history.dat) +- +- + + + Machine description +@@ -17224,28 +17206,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + + + +- ++ + incorrect + + + +- ++ + mostly correct + + + +- ++ + not found + + + +- ++ + + + +@@ -17263,45 +17245,45 @@ Are you sure you want to do this? + Predefinito + + +- ++ + Import from... + + + ++ + +- + Export machine-specific MAME configuration + + + ++ + +- + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + + +@@ -17409,19 +17391,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + si + + +- ++ + + no + no + + +- ++ + + partially + +diff --git a/data/lng/qmc2_pl.qm b/data/lng/qmc2_pl.qm +index fc214084d26b998dc478d183f729e602dfea0eee..e2b13a64c274fedda4c6404abe54148cc6bf1a86 100644 +GIT binary patch +delta 180 +zcmZ2_N_hP#VJVv(DH5mN&zX8wQD%R_!o7EwGcYi)7UaYS_-qu|ZZEb*l!4jm8F$Z_ +zEes47)wz3BBN>>o8Ykbi-^jmf(oF`Y9TMETQ{osHUp?GB*CCUK`LL#EGpBDmr!V7n +zPG2U!eAWtvT!x(KF?*P-m@9H~w$I$dVcWKeyk=zdI$4f$`Nt?%gLN8JKoRY+mk=$-{i8=w!37Z@aKB<91vn5=*u(-oxbU3l;pz$!rT2H05G8w1o<8{Kq6cz0I9j6C^Wzf&{Zf`zd$k +L?Wf#XQs)8yMnOK6 + +diff --git a/data/lng/qmc2_pl.ts b/data/lng/qmc2_pl.ts +index 521e0ea0e..80d5d6551 100644 +--- a/data/lng/qmc2_pl.ts ++++ b/data/lng/qmc2_pl.ts +@@ -3633,147 +3633,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + + + +- +- ++ ++ + machine info-texts + + + +- ++ + Machine info - %p% + + + +- +- WARNING: missing '$end' in machine info file %1 +- +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- +- +- +- +- WARNING: missing '$info' in machine info file %1 +- +- +- +- ++ + machine info + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -3782,82 +3767,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- ++ + Software info - %p% + + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + + + +- ++ + software info + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + %n software info record(s) imported + + +@@ -3866,43 +3848,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + Emu info - %p% + Informacje o emulatorze - %p% + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + emu info + + + +- ++ + %n emulator info record(s) imported + + +@@ -3911,7 +3893,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + + +@@ -7823,186 +7805,186 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + nieznany + + +- +- +- ++ ++ ++ + good + dobry + + +- +- ++ ++ + bad + zły + + +- +- +- ++ ++ ++ + preliminary + wstępny + + +- +- ++ ++ + supported + obsługiwana + + +- +- ++ ++ + unsupported + nieobsługiwana + + +- +- +- ++ ++ ++ + imperfect + niedoskonały + + +- ++ + yes + tak + + +- ++ + no + nie + + +- ++ + baddump + zły zrzut + + +- ++ + nodump + brak zrzutu + + +- ++ + vertical + pionowa + + +- ++ + horizontal + pozioma + + +- ++ + raster + rastrowy + + +- ++ + Unknown + Nieznany + + +- ++ + On + Włączony + + +- ++ + Off + Wyłączony + + +- ++ + audio + dźwięk + + +- ++ + Unused + Nieużywany + + +- ++ + original + oryginalne + + +- ++ + compatible + kompatybilne + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATALNIE: nie można otworzyć pliku ikony, proszę sprawdzić uprawnienia dostępu dla %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + Waiting for data... + Oczekiwanie na dane... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + FATALNIE: uruchamianie '%1' nie powiodło się, plik '%2' nie istnieje + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -8011,103 +7993,103 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + XML data - %p% + dane XML - %p% + + +- ++ + verifying ROM status for '%1' + sprawdzanie stanu ROM-ów dla '%1' + + +- ++ + Updating + Aktualizacja + + +- ++ + Name + Nazwa + + +- ++ + Source file + Plik źródłowy + + +- ++ + Clone of + Klon + + +- ++ + ROM of + ROM + + +- ++ + Sample of + Sampel + + +- ++ + Is device? + Jest urządzeniem? + + +- ++ + Year + Rok + + +- ++ + Manufacturer + Producent + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ ++ + +- + N/A + + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8116,501 +8098,501 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Rozmiar + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Scalanie + + +- +- ++ ++ + Region + Region + + +- ++ + Offset + Przesunięcie + + +- +- +- +- ++ ++ ++ ++ + Status + Stan + + +- ++ + Device reference + Referencja urządzenia + + +- ++ + Chip + Chip + + +- +- ++ ++ + Type + Typ + + +- ++ + Clock + Taktowanie + + +- ++ + Width + Szerokość + + +- ++ + Height + Wysokość + + +- ++ + Refresh + Odświeżanie + + +- +- ++ ++ + Sound + Dźwięk + + +- ++ + Channels + Kanały + + +- ++ + Input + Wejście + + +- ++ + Service + Serwis + + +- ++ + Tilt + Nachylenie + + +- ++ + Players + Gracze + + +- +- ++ ++ + Buttons + Przyciski + + +- ++ + Coins + Monety + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + przełącznik DIP + + +- ++ + DIP value + wartość DIP + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + zaznaczenie + + +- ++ + year + roku + + +- ++ + manufacturer + producenta + + +- ++ + machine name + + + +- ++ + ROM types + Rodzaje ROM-ów + + +- ++ + players + gracze + + +- ++ + driver status + stan sterownika + + +- ++ + source file + plik źródłowy + + +- ++ + rank + + + +- ++ + category + kategoria + + +- ++ + version + wersja + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + UWAGA: bug XML: nazwa '%1' jest używana dla więcej niż jednego zestawu -- proszę poinformować deweloperów MAME + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + ukończono (weryfikowanie stanu ROM-ów dla wszystkich zestawów, miniony czas = %1) + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + correct + poprawny + + +- ++ + mostly correct + w większości poprawny + + +- ++ + incorrect + niepoprawny + + +- ++ + not found + nieznaleziony + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Domyślny + + +- ++ + libarchive error + + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + loading XML data and recreating cache + + + +- ++ + verifying ROM status for all sets + sprawdzanie stanu ROM-ów dla wszystkich zestawów + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + Konfiguracja + + +- ++ + Mask + Maska + + +- ++ + Setting + Ustawienie + + +- ++ + Value + Wartość + + +- ++ + Driver + Sterownik + + +- ++ + Emulation + Emulacja + + +- ++ + Color + Kolor + + +- ++ + Graphic + Grafika + + +- ++ + Cocktail + Koktajl + + +- ++ + Protection + Ochrona + + +- ++ + Save state + Zapis stanu + + +- ++ + Palette size + Rozmiar palety + + +- ++ + BIOS set + BIOS + + +- ++ + Description + Opis + + +- ++ + Sample + Sampel + + +- ++ + Disk + Dysk + + +- ++ + MD5 + MD5 + + +- ++ + Index + Indeks + + +- ++ + Adjuster + Regulator + + +- ++ + Software list + Lista oprogramowania + + +- ++ + Category + Kategoria + + +- ++ + Item + Element + + +- ++ + Interface + Interfejs + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + UWAGA: nie można otworzyć bufora stanów ROM-ów, proszę sprawdzić ROM-y + + +- ++ + loading ROM state from cache + wczytywanie stanów ROM-ów z bufora + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + ukończono (wczytywanie stanów ROM-ów z bufora, miniony czas = %1) + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + and %n device(s) loaded + + oraz %n urządzenie +@@ -8619,7 +8601,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + , %n BIOS set(s) + + , %n BIOS +@@ -8628,275 +8610,275 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Informacje o stanie ROM-ów: W: %1 P:%2 Wp:%3 Np:%4 Nz:%5 Nn:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + UWAGA: bufor stanów ROM-ów jest niekompletny lub nieaktualny, uruchamianie automatycznego sprawdzenia ROM-ów + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + UWAGA: bufor stanów ROM-ów jest niekompletny lub nieaktualny, proszę ponownie sprawdzić ROM-y + + +- ++ + determining emulator version and supported sets + określanie wersji emulatora i obsługiwanych zestawów + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + ukończono (określanie wersji emulatora i obsługiwanych zestawów, miniony czas = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATALNIE: nie udało się ustalić liczby obsługiwanych zestawów + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- +- ++ ++ + ascending + rosnącym + + +- +- ++ ++ + descending + malejącym + + +- ++ + ROM state filter already active + filtr stanów ROM-ów jest już aktywny + + +- ++ + please wait for ROM verification to finish and try again + proszę poczekać za zakończenie weryfikacji ROM-ów i spróbować ponownie + + +- ++ + please wait for reload to finish and try again + proszę poczekać za zakończenie przeładowywania i spróbować ponownie + + +- ++ + applying ROM state filter + zastosowywanie filtra stanów ROM-ów + + +- ++ + State filter - %p% + Filtr stanów - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + ukończono (zastosowywanie filtra stanów ROM-ów, miniony czas = %1) + + +- ++ + saving favorites + zapisywanie ulubionych + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATALNIE: nie można otworzyć pliku ulubionych do zapisu, ścieżka = %1 + + +- ++ + saving play history + zapisywanie historii gier + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATALNIE: nie można otworzyć pliku historii do zapisu, ścieżka = %1 + + +- ++ + L: + W: + + +- ++ + C: + P: + + +- ++ + M: + Wp: + + +- ++ + I: + Np: + + +- ++ + N: + Nz: + + +- ++ + U: + Nn: + + +- ++ + S: + S: + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + BŁĄD: nie można otworzyć bufora stanów ROM-ów do zapisu, ścieżka = %1 + + +- +- +- ++ ++ ++ + ROM check - %p% + Sprawdzanie ROM-ów - %p% + + +- ++ + T: + Z: + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + ukończono (weryfikowanie stanu ROM-ów dla '%1', miniony czas = %2) + + +- +- ++ ++ + ROM state + Stan ROM-u + + +- +- ++ ++ + ROM status for '%1' is '%2' + Stan ROM-u dla '%1' to '%2' + + +- ++ + pre-caching icons from ZIP archive + pre-buforowanie ikon z archiwum ZIP + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + ukończono (pre-buforowanie ikon z archiwum ZIP, miniony czas = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + pre-caching icons from directory + pre-buforowanie ikon z katalogu + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + ukończono (pre-buforowanie ikon z katalogu, miniony czas = %1) + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + Wczytywanie category.ini + + +- ++ + Category.ini - %p% + Category.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + BŁĄD: nie można otworzyć '%1' do odczytu -- dane category.ini niedostępne + + +- ++ + done (loading category.ini, elapsed time = %1) + ukończono (wczytywanie category.ini, miniony czas = %1) + + +- ++ + loading catver.ini + wczytywanie catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + UWAGA: nie można otworzyć '%1' do odczytu -- dane catver.ini niedostępne + + +- ++ + done (loading catver.ini, elapsed time = %1) + ukończono (wczytywanie catver.ini, miniony czas = %1) + + +- ++ + %1 category / %2 version records loaded + wczytano %1 rekordów kategorii / %2 wersji + + +- ++ + Category view - %p% + Widok kategorii - %p% + + +- ++ + %n category record(s) loaded + + załadowano %n rekord informacji o kategoriach +@@ -8905,12 +8887,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + Widok wersji - %p% + + +- ++ + %n cached ROM state(s) loaded + + %n buforowany stan ROM-ów załadowany +@@ -8919,7 +8901,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + %n icon(s) loaded + + %n ikona załadowana +@@ -8928,297 +8910,297 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Icon cache - %p% + Bufor ikon - %p% + + +- ++ + unused + nieużywany + + +- ++ + cpu + CPU + + +- ++ + vector + Wektorowy + + +- ++ + lcd + LCD + + +- ++ + Is BIOS? + Jest BIOS-em? + + +- ++ + Runnable + Uruchamialny + + +- ++ + Display + Ekran + + +- ++ + Rotate + Obrót + + +- ++ + Flip-X + Odbicie w poziomie + + +- ++ + Pixel clock + Zegar pikseli + + +- ++ + H-Total + Poz. całkowite + + +- ++ + H-Bend + Odchylanie poz. + + +- ++ + HB-Start + Początek odch. poz. + + +- ++ + V-Total + Pion. całkowite + + +- ++ + V-Bend + Odchylanie pion. + + +- ++ + VB-Start + Początek odch. pion. + + +- +- +- ++ ++ ++ + Tag + Zaznaczenie + + +- ++ + Control + Kontrola + + +- ++ + Minimum + Minimum + + +- ++ + Maximum + Maksimum + + +- ++ + Sensitivity + Czułość + + +- ++ + Key Delta + Delta przycisków + + +- ++ + Reverse + Odwrócenie + + +- ++ + joy4way + Dżojstik czterokierunkowy + + +- ++ + joy8way + Dżojstik ośmiokierunkowy + + +- ++ + trackball + Trackball + + +- ++ + joy2way + Dżojstik dwukierunkowy + + +- ++ + doublejoy8way + Podwójny dżojstik ośmiokierunkowy + + +- ++ + dial + Tarcza + + +- ++ + paddle + Wiosło + + +- ++ + pedal + Pedał + + +- ++ + stick + Drążek + + +- ++ + vjoy2way + Pionowy dżojstik dwukierunkowy + + +- ++ + lightgun + Pistolet świetlny + + +- ++ + doublejoy4way + Podwójny dżojstik czterokierunkowy + + +- ++ + vdoublejoy2way + Pionowy podwójny dżojstik dwukierunkowy + + +- ++ + doublejoy2way + Podwójny dżojstik dwukierunkowy + + +- ++ + printer + Drukarka + + +- ++ + cdrom + CD-ROM + + +- ++ + cartridge + Kartridż + + +- ++ + cassette + Kaseta + + +- ++ + quickload + Szybki zapis + + +- ++ + floppydisk + Dyskietka + + +- ++ + serial + Port szeregowy + + +- ++ + snapshot + Zrzut + + +- ++ + Device + Urządzenie + + +- ++ + Instance + Instancja + + +- ++ + Brief name + Skrócona nazwa + + +- ++ + Extension + Rozszerzenie + + +- ++ + Mandatory + Obowiązkowy + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATALNIE: nie udało się uruchomienie MAME w sensownym czasie, poddanie + + +- +- ++ ++ + emulator info: type = %1, version = %2 + informacje o emulatorze: typ = %1, wersja = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATALNIE: nie udało się ustalić typu i wersji emulatora + + +- +- ++ ++ + Optional + opcjonalne + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + UWAGA: atrybut nazwy pusty w %1 linii XML (zestaw zostanie zignorowany) -- proszę poinformować deweloperów MAME załączając problematyczne wyjście parametru -listxml + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + sprawdzanie rzeczywistego statusu %n zestawu nie wspomnianego podczas analizy +@@ -9227,7 +9209,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + ukończono (sprawdzanie rzeczywistego statusu %n zestawu nie wspomnianego podczas analizy) +@@ -9236,30 +9218,30 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + RAM options + Opcje RAM-u + + +- ++ + Option + Opcja + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + UWAGA: wywołanie audytu emulatora nie zakończyło się czysto -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + normalny + + +- +- ++ ++ + crashed + przestał działać + +@@ -9592,16 +9574,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Zaznaczenie + + + +- ++ + Icon / Value + Ikona / Wartość + +@@ -9610,10 +9592,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + Rok + +@@ -9622,10 +9604,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Producent + +@@ -9634,10 +9616,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Stan sterownika + +@@ -9646,10 +9628,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + Plik źródłowy + +@@ -9659,10 +9641,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -9678,9 +9660,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + Ikona + +@@ -9855,13 +9837,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -9872,7 +9854,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -9883,19 +9865,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -9994,9 +9976,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10015,10 +9997,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10109,7 +10091,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -10672,12 +10654,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + ++ + + +- ++ + + +- + Lock ranks + + +@@ -10771,7 +10753,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -10932,11 +10914,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Graj + +@@ -11010,7 +10992,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + O Qt + +@@ -11081,10 +11063,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Do ulu&bionych + +@@ -11115,10 +11097,10 @@ Use local value for option '%1', overwrite with global value or don&ap + Ctrl+S + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analizuj ROM... + +@@ -11138,280 +11120,280 @@ Use local value for option '%1', overwrite with global value or don&ap + Ctrl+Z + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Domyślny + + +- ++ + Toggle maximization of embedded emulator windows + Przełącz maksymalizację osadzonych okien emulatora + + +- ++ + Searching machines - %p% + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- ++ + Embed emulator widget + Osadzaj widżet emulatora + + +- ++ + &Embed + Osad&zaj + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Zabij wybrane emulatory (wysyła sygnał KILL do procesów emulatorów) + + +- ++ + &Kill + Za&bij + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Graj osad&zając + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Sprawdź stan &ROM-u + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Remove from favorites + Usuń z ulubionych + + +- +- ++ ++ + &Remove + &Usuń + + +- ++ + Clear all favorites + Wyczyść wszystkie ulubione + + +- +- ++ ++ + &Clear + &Wyczyść + + +- ++ + Save favorites now + Zapisz ulubione teraz + + +- +- ++ ++ + &Save + Zapi&sz + + +- ++ + Remove from played + Usuń z granych + + +- ++ + Clear all played + Wyczyść wszystkie grane + + +- ++ + Save play-history now + Zapisz historię gier teraz + + +- +- ++ ++ + Enter search string + Wpisz szukany ciąg + + +- ++ + Dock / undock this widget + Przełączanie pomiędzy oddzielnym oknem a osadzonym obiektem + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + Reset + Zresetuj + + +- ++ + Negate search + + + +- ++ + sorry, devices cannot run standalone + Przepraszamy, urządzenia nie mogą pracować samodzielnie + + +- ++ + No devices available + Brak dostępnych urządzeń + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + domyślny + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + ++ + + +- ++ + + +- + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + proszę poczekać za zakończenie filtra stanu ROM-ów i spróbować ponownie + + +- +- ++ ++ + please wait for ROM verification to finish and try again + proszę poczekać za zakończenie weryfikacji ROM-ów i spróbować ponownie + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + proszę poczekać za zakończenie sprawdzania obrazów i spróbować ponownie + + +- +- ++ ++ + ROM verification already active + weryfikacja ROM-ów jest już aktywna + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + proszę poczekać za zakończenie przeładowywania i spróbować ponownie + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Potwierdź + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11422,292 +11404,292 @@ Nadpisze on istniejące zbuforowane dane . + Czy naprawdę chcesz sprawdzić teraz stany wszystkich ROM-ów? + + +- ++ + automatic ROM check triggered + uruchomiono automatyczne sprawdzanie ROM-ów + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + image cache cleared + wyczyszczono bufor obrazów + + +- ++ + icon cache cleared + wyczyszczono bufor ikon + + +- ++ + YouTube on-disk cache cleared (%1) + Wyczyszczono dyskowy bufor YouTube (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + UWAGA: nie można usunąć pliku bufora stanów ROM-ów '%1', proszę sprawdzić uprawnienia + + +- ++ + triggering an automatic ROM check on next reload + uruchamianie automatycznego sprawdzenia romów podczas następnego przeładowania + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + ERROR: no match found (?) + BŁĄD: nie znaleziono dopasowania (?) + + +- ++ + ProjectMESS page for '%1' / '%2' + Strona ProjectMESS dla '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Pobieranie strony ProjectMESS dla '%1' / '%2', proszę czekać... + + +- +- ++ ++ + Export to... + Eksportuj do... + + +- +- ++ ++ + <inipath>/%1.ini + <ścieżka ini>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Wybierz plik... + + +- +- ++ ++ + <p>No data available</p> + <p>Brak danych<p> + + +- ++ + please wait for sorting to finish and try again + proszę poczekać za zakończenie sortowania i spróbować ponownie + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + destroying media player + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- +- ++ ++ + running + + + +- +- ++ ++ + Play tagged - %p% + Graj w zaznaczone - %p% + + +- ++ + Add favorites - %p% + Dodaj do ulubionych - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + proszę poczekać na zakończenie bieżącej aktywności i spróbować ponownie (ta operacja wsadowa może działać jedynie samodzielnie) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + Narzędzie ROM-ów (zaznaczone) - %p% + + +- +- ++ ++ + Tag - %p% + Ustawianie zaznaczenia - %p% + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + Usuwanie zaznaczenia - %p% + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + Odwracanie zaznaczenia - %p% + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Szczegóły oprogramowania + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -11718,166 +11700,166 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + Sprawdź ścieżkę ROM-ów + + +- ++ + processing global emulator configuration + przetwarzanie globalnej konfiguracji emulatora + + ++ + +- + Export global MAME configuration + Eksportuj globalną konfigurację MAME + + +- ++ + Import from... + Importuj z... + + ++ + +- + Import global MAME configuration + Importuj globalną konfigurację MAME + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + <ścieżka ini>/mame.ini + + + +- ++ + Embedded emulators + Osadzone emulatory + + +- ++ + Release emulator + Uwolnij emulator + + +- ++ + WARNING: no matching window for emulator #%1 found + UWAGA: nie znaleziono okna odpowiadającego emulatorowi #%1 + + +- ++ + Embedding failed + Osadzanie nie powiodło się + + ++ + +- + Scanning pause key + Skanowanie klawisza pauzy + + +- +- ++ ++ + Choose export file + Wybierz plik eksportu + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Wszystkie pliki (*) + + +- +- ++ ++ + Choose import file + Wybierz plik importu + + +- +- ++ ++ + WARNING: invalid inipath + UWAGA: nieprawidłowa ścieżka ini + + +- +- ++ ++ + stopping current processing upon user request + zatrzymywanie bieżącego przetwarzania na żądanie użytkownika + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Twoje zmiany konfiguracji nie zostały jeszcze zastosowane. + Na pewno zakończyć? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Pozostało jeden lub więcej uruchomionych emulatorów. + Czy mają być zabite przy wyjściu? + + +- ++ + There are one or more running downloads. Quit anyway? + Jedno lub więcej pobierań wciąż jest aktywnych. Zakończyć mimo wszystko? + + +- ++ + cleaning up + czyszczenie + + +- ++ + aborting running downloads + przerywanie aktywnych pobierań + + +- ++ + saving main widget layout + zapisywanie układu widżeta głównego + + +- ++ + disconnecting audio source from audio sink + odzłączanie źródła dźwięku od wyśjścia + + +- ++ + destroying YouTube video widget + niszczenie widżetu filmu YouTube + + +- ++ + destroying process manager + niszczenie zarządcy procesów + + +- ++ + destroying network access manager + niszczenie zarządcy dostępu do sieci + + +- ++ + so long and thanks for all the fish + cześć, i dzięki za ryby + + +- ++ + killing %n running emulator(s) on exit + + zabijanie %n uruchomionego emulatora przy wyjściu +@@ -11886,7 +11868,7 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + keeping %n running emulator(s) alive + + pozostawianie %n uruchomionego emulatora przy życiu +@@ -11895,13 +11877,13 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + proszę poczekać, aż ROMAlyzer skończy bieżącą analizę i spróbować ponownie + +@@ -11915,32 +11897,32 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- +- ++ ++ ++ ++ + Name + Nazwa + + +- ++ + Are you sure you want to clear the favorites list? + Czy na pewno chcesz wyczyścić listę ulubionych? + + +- ++ + Are you sure you want to clear the play history? + Czy na pewno chcesz wyczyścić historię gier? + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Brak dostępnych danych + +@@ -11970,10 +11952,10 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Rodzaje ROM-ów + +@@ -11982,10 +11964,10 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- +- ++ ++ ++ ++ + Players + Gracze + +@@ -11994,9 +11976,9 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- ++ ++ ++ + Category + Kategoria + +@@ -12005,9 +11987,9 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- ++ ++ ++ + Version + Wersja + +@@ -12100,7 +12082,7 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + &Notes + No&tatki + +@@ -12154,9 +12136,9 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms w sumie) + +@@ -12224,62 +12206,62 @@ Czy mają być zabite przy wyjściu? + Polecenie + + +- +- +- ++ ++ ++ + paused + wstrzymany + + +- +- ++ ++ + Copy emulator command line to clipboard + Skopiuj wiersz poleceń emulatora do schowka + + +- +- ++ ++ + &Copy command + S&kopiuj polecenie + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Uruchom wybraną maszynę (osadzając) + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + +@@ -12356,7 +12338,7 @@ Czy mają być zabite przy wyjściu? + Przewijaj do przodu w ramach ścieżki + + +- ++ + Select one or more audio files + Wybierz jeden lub więcej plików dźwiękowych + +@@ -12385,7 +12367,7 @@ Czy mają być zabite przy wyjściu? + Pogłaśniaj i sciszaj przy wstrzymaniu / wznowieniu + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + odtwarzacz dźwięku: informacje o ścieżce: tytuł = '%1', wykonawca = '%2', album = '%3', gatunek = '%4' + +@@ -12490,103 +12472,103 @@ Czy mają być zabite przy wyjściu? + Przełącz pomiędzy trybem pełnoekranowym a oknem + + +- +- +- +- ++ ++ ++ ++ + Set tab position north + Ustaw położenie kart na północ + + +- +- +- +- ++ ++ ++ ++ + &North + &Północ + + +- +- +- +- ++ ++ ++ ++ + Set tab position south + Ustaw położenie kart na południe + + +- +- +- +- ++ ++ ++ ++ + &South + P&ołudnie + + +- +- +- +- ++ ++ ++ ++ + Set tab position west + Ustaw położenie kart na zachód + + +- +- +- +- ++ ++ ++ ++ + &West + &Zachód + + +- +- +- +- ++ ++ ++ ++ + Set tab position east + Ustaw położenie kart na wschód + + +- +- +- +- ++ ++ ++ ++ + &East + &Wschód + + +- +- +- +- ++ ++ ++ ++ + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + +@@ -12611,7 +12593,7 @@ Czy mają być zabite przy wyjściu? + Ekran &tytułowy + + +- ++ + freed %n byte(s) in %1 + + uwolniono %n bajt w %1 +@@ -12620,7 +12602,7 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + %n entry(s) + + %n wpis +@@ -12634,7 +12616,7 @@ Czy mają być zabite przy wyjściu? + Ctrl+M + + +- ++ + removed %n byte(s) in %1 + + usunięto %n bajt w %1 +@@ -12643,7 +12625,7 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + %n file(s) + %n plików + +@@ -12682,23 +12664,23 @@ Czy mają być zabite przy wyjściu? + Zatrzymaj wybrane pobierania + + +- ++ + Choose file to store download + Wybierz plik do zapisania pobierania + + +- ++ + loading style sheet '%1' + ładowanie arkusza stylu '%1' + + +- ++ + removing current style sheet + usuwanie bieżącego arkusza stylu + + +- +- ++ ++ + last message repeated %n time(s) + + ostatnia wiadomość powtarza się %n raz +@@ -12707,17 +12689,17 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Włącz/wyłącz automatyczne pauzowanie osadzonych emulatorów (przytrzymaj aby pokazać menu) + + +- ++ + Scan the pause key used by the emulator + Skanuj klawisz pauzujący emulator + + +- ++ + Scan pause key... + Skanowanie klawisza pauzy... + +@@ -12728,58 +12710,58 @@ Czy mają być zabite przy wyjściu? + Wyczyść bufor ProjectMESS + + +- ++ + Default configuration + Domyślna konfiguracja + + +- ++ + ProjectMESS in-memory cache cleared (%1) + Wyczyszczono pamięciowy bufor ProjectMESS (%1) + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + Strona ProjectMESS dla systemu '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Pobieranie strony ProjectMESS dla systemu '%1', proszę czekać... + + +- ++ + Emulator for this machine + + + ++ + +- + Toggle embedder options (hold down for menu) + Przełącz opcje osadzacza (przytrzymaj dla menu) + + +- ++ + To favorites + Do ulubionych + + +- ++ + Kill emulator + Usuń emulator + + +- ++ + &Kill emulator + &Usuń emulator + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12790,57 +12772,57 @@ liczby emulatorów w sensownym czasie. + Ponowić próbę osadzania? + + +- ++ + Information + Informacja + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Przykro mi, w międzyczasie emulator zginął bolesną śmiercią :(. + + +- ++ + destroying audio effects dialog + niszczenie okna dialogowego efektów dźwięku + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + Welcome to QMC2 v%1! + Witamy w QMC2 w wersji %1! + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + YouTube index - %p% + Indeks YouTube - %p% + + +- ++ + %n video info record(s) loaded + + załadowano %n rekord informacji o filmie +@@ -12849,34 +12831,34 @@ Ponowić próbę osadzania? + + + +- ++ + Add URL + Dodaj adres URL + + +- ++ + Enter valid MP3 stream URL: + Wprowadź poprawny adres URL strumienia MP3: + + +- ++ + Buffering %p% + Buforowanie %p% + + +- ++ + emulator #%1 is already embedded + emulator #%1 jest już osadzony + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + UWAGA: znaleziono wiele okien dla emulatora #%1, wybrano okno o ID %2 do osadzenia + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + osadzanie emulatora #%1, ID okna = %2 + +@@ -14277,21 +14259,6 @@ Ponowić próbę osadzania? + Browse system notes template + Wskaż szablon notatek o systemie + +- +- +- Load software information database (from history.dat) +- Ładuj bazę danych informacji o historii (z history.dat) +- +- +- +- Software information database - history.dat (read) +- Baza danych informacji o oprogramowaniu - history.dat (odczyt) +- +- +- +- Browse software information database (history.dat) +- Wskaż bazę danych informacji o oprogramowaniu (history.dat) +- + + + Define additional artwork classes for systems and software-list entries +@@ -14440,11 +14407,6 @@ Ponowić próbę osadzania? + Archive + + +- +- +- MAME machine information database - history.dat (read) +- +- + + + Browse MESS emulator information database (messinfo.dat) +@@ -14465,21 +14427,11 @@ Ponowić próbę osadzania? + Machine favorites file (write) + + +- +- +- Load MAME machine information database (history.dat) +- +- + + + Machine info (MAME) + + +- +- +- Browse MAME machine information database (history.dat) +- +- + + + Video snap folder +@@ -15767,11 +15719,31 @@ Are you sure you want to do this? + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ Baza danych informacji o oprogramowaniu - history.xml (odczyt) ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ ++ ++ ++ ++ Browse software information database (history.xml) ++ Wskaż bazę danych informacji o oprogramowaniu (history.xml) ++ + + + DAT-info database file (write) + + ++ ++ ++ Load MAME machine information database (history.xml) ++ ++ + + + Machine info (MESS) +@@ -15787,6 +15759,11 @@ Are you sure you want to do this? + Emu info (MESS) + + ++ ++ ++ Load software information database (from history.xml) ++ Ładuj bazę danych informacji o historii (z history.xml) ++ + + + Software info +@@ -15797,6 +15774,11 @@ Are you sure you want to do this? + Import software information to DAT-info database + + ++ ++ ++ Browse MAME machine information database (history.xml) ++ ++ + + + System manual folder (read) +@@ -17288,60 +17270,60 @@ Are you sure you want to do this? + Domyślny + + +- ++ + Import from... + Importuj z... + + ++ + +- + Export machine-specific MAME configuration + + + ++ + +- + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + Ustawianie interfejsu, proszę czekać... + + +- ++ + M.A.M.E. Catalog / Launcher II v + M.A.M.E. Catalog / Launcher II wersja + + +- ++ + GIT %1 + + + +- +- ++ ++ + correct + poprawny + + +- ++ + incorrect + niepoprawny + + +- ++ + mostly correct + w większości poprawny + + +- ++ + not found + nieznaleziony + + +- ++ + + + +@@ -17386,13 +17368,13 @@ Are you sure you want to do this? + brak zrzutu / zły zrzut + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Wsparcie dla dżojstika SDL włączone - używanie SDL w wersji %1.%2.%3 + + +- ++ + Phonon features enabled - using Phonon v%1 + Funkcje Phonona włączone - używanie Phonon w wersji %1 + +@@ -17469,19 +17451,19 @@ Are you sure you want to do this? + informacje o stanach listy oprogramowania '%1': W:%2 P:%3 Wp:%4 Np:%5 Nz:%6 Nn:%7 + + +- ++ + + yes + tak + + +- ++ + + no + nie + + +- ++ + + partially + częściowo +diff --git a/data/lng/qmc2_pt.qm b/data/lng/qmc2_pt.qm +index 6993d4404f510510cb07fa651e5cf7a51e18ccfa..b91904b1fe8d67004dc9225cce32ffe16d54eb55 100644 +GIT binary patch +delta 32560 +zcmXV&bzBu+6ULuCx!1y048#slEL1EkRO~{;4p1>LQL(NHDvAxL*n!=O!B4TUTd_O9 +z?!v@(Sl&PUeDChP+`D_uoSA3l%=-92(WKi&?X?g1=RfyhS@gxCg^u)Go$z1-06BDI +zj|S};0QQP>R19j)S&O<>dt!0$(v^u7A&OTZ)`FV5z@n~QhUf{l-Idr7nDUF*7?_%w +z*aFOXFR>+9(Idq6V8v(I=|v}?{-6xb{6X{sA{+r$5=KH{i^Ab4aRiJJ-T;3MR5)%? +zl=uRO0bo0ZTU2lV5f^|Dh$lu9?-Cahe-jsh4=hAnOsqqUA=i?zhg&{t0oyTJHW%p$8sKTOAL +z$$uGK{WpX5jk~QEI(#sZE~eHZi|kB3i>hP?BHiK2+!?$?7e>cA+dSe}uxpYylX%FY +zcIrXA09L9jF^Sj;&X# +zQCnn#)8GFLdFTvKGAEsqZb8$j;jalT|FWsEX3xxAz5WS<9kwrde-4 +z3F6LTpu=!5pQ9O^MBme4xE*XR-6_2x`&_oD9?(d1xDLKx4B&H$tisnKJH6AQDp?fp +zB^&NT7naUH8DwYEtYf)ky+!3h>&W*UbP`!l=h47$7mMs#26@ribZj3De#*moL)N1a +z=+YC?`vUPXj7M|_-O|lz1kjxJiVklIvE5OhW +zFkaKh4vzx+I|&#O3^j;GXe|9+R=Qw&B6tpWBE69NK7ehFA+vAG#U6f7NWX8j2s0af*QhzK4Ot=pAIo?0A%!hi0QOW8a{-W +zGY)v)og6|5Fm(%JB{`K{xnLLTL%{S^q*MOrNb`A}=5{^A#&uAO-au?Q3I%6~olEIr +z@<8mK0bcDf#1(Q;D~4t8&nJj$Vc^AoW^kw*#LW(1PDN?n3xQ=BmBAt|7S-x(5Z~P) +z4pyr{o`qI^joTIt-?kQ63v#e@p3R{jByy)S84NKkibKwk7iBeji}?`0X;I`lpTU!5 +zGI*Ln+J=HpX+#`G>_;3$h>)=V%tF$riIgGHKdabYJewX#aL+LPX?R5 +zfUH6HeJTdBNhH~BGGtSlwTVs^?M92<)(hj~u?+rgX_1`{v&f5_%HYhh7Db_qFA$Gx +z*0EZ@%%T<;TI{cD!1Wr}~t^zX=xE<);>f6D>%3U)6XB +zxt2_9$3)02J%O1mAh*UsHi&@SX|GDYw>!OXhuVGu@@N1p5_gNn&d>~=ot?p312g#d +ztwnZ?E|5MioVHk04e9Sr(1jJa0Qq|gFeb<%drp5x$Gqs)48HkjQTnxqw9^}E&m`-F +zc5}&K2REp^-C&$32(_>)t>WHLJH~^(xeJwUvoC)^J?{X7WYCB>ZXL5fo)+aEZc+6w +z4n?+w<87fU{Df>-9J-?y1(WX<)nI?vb@~uzY5<)+RMTCd*XY$~kVCD^hcwYmyk#3MBuEVzBCycU-U^`7Lor3J8Y2mH4A^Us^P%h1p +zch-K$>!*=-&VHz_*O6~g37QVO9r->~fqw84`NP@+JwI4f8>S=w<>HVXuR +zd$`=E3#e>|>z98pCR9WPpCrf+XHj8BC`8xQaC7PhHQXB&ujK|K5m8O80m|1!^+1Z> +z>-H*b4|hC)Ax<8hn`(8qoS> +z>?|4#XbR@I3JsIU>AZ@7SNLAA8h_9@Fcp|T28~DGAyFA`QP*yV#{1hr +z9YE_~3Qc{ZEE@JoXuZBY?5sr(w5fgrn3iCXwK$G8&CY-&Rz#bY49i>hy+3YOK5-Q26^x_i>iblI&_{1eR(i^JcFPe1bhZ0!l-crKFf;2=rIl* +z>*t0FOhm^SV=(k0k|4IhiwnW!{3D7x;plc|(qn0Z(cx$OecD*9H +z{v_4X|2Mk*CX-Bgi|(U4Ky`149^^qpj3;^)^M~vef?j7+p*>2Vw>>rzvbi7n9CL!< +z<^ca_cNps`TjY!TB0!LzqksJ?lPWoz75)GFNAjpS0=I`#&f|i>_-jzBPxhey%n{wD2g2HxdB+TP(Th^j>XS%Lp;8ZB}*s~IFW`W +zO9go1BP@$<29)iH6;2cr&s4+8{4ccGt)to)He%e88Ato%($5slue8&QxO +z`eKdW915}*GkESd)?5#Uar!*g_RRyt-^FI*H6;Pz*gUT^R76#5j?V^MjIn5ZJBDq` +zze3$EfbC5jA*PPPu6$F$@{Yk?=TxZcm9h7(7p0taurK>`*tw$@_Vt(GtIFeG+6u^p +zuaK~26U66wNQgTL)u|$mjQ&c?bPkSI-UVY|DI8rOfh(6SDqO(Pl>yLOlX3KL6R5M> +zaeObONRP@{RO_4J`2Hvw!HpK>o}L!f(KqR|L%UZ)Vns>>ZW9w|Zf76BiJCODTd(4D +zyD#8(U*k+pl9iJ}aqh?ksDCeUzQt}xhbUaQ`5tUs1zf7o9a@jUr4QF2+U!TtJs*hv +zS#iBz6vWJU+(@G1h77lJlQb=J0C#l|#0h8I9cr%+xrE{FWcuL+&2V>ZS+J_7aX-Ex +zWX{%jRAd6U$7?)U_673qLOgjvdY8P~(;&LA8~gEez7vFS$I}GT$(4rTS^YR*Y#ED2 +z#0Ml}Iu)&1_NRABvCHW`KQf3;U;`8=w>H_}sV{nAbUcokwbYd>?%C +zN`js|52^dlQzGe$AAhET|2TqQ2!!FY1HXK$(iAkquOamL?~jmnGLfc+;opApc;&Mg +z2=#{%`^X}X{B2RIs)pf8tE}=(gF9@8&R^JW@M^muyu%DxmpJ&eA-yO{cXKlIwm@(* +z+%WIvqU8m{mWOh<%VmvB!^kM3x*C~6R)ejbZe&g8ntw*t8)u=5ZZ;eiu7Hu`XXJ1l +z2^OX;swWpL>H!~(+*{v*{RuSkc*a0nw*N5lg?xoI4`?>xP0gT4WR(@g71=GfD*afeid$l(_H>vTj?W)b2gN +zsJupLTRy1!$BZ(KgTY(8u_(qR87@&8BGX#Kuc2eK%Q`8s8K&XEm>(8^*=d)zhg#&%dxN<)s)fT4&B+UD;8Dk +z1Eb;Tvd}kL8Vx@Nz(^TnG)k%jIe)a#WJi1OllhEh|B+{N$!oN^I2EGc0E^1pZnRw+ +z3pwqx(S8c~llwmnpKPz7-0v7ZV~apUb~60(=Yes?+why@4_51;(RoN#JCw>}blbQH +zYE+`pZSP*7)o7!~g-u|e8yG!{Y=DussL?C20aYblSv1C9wkW>OHTneP2A_1@@XwnI +zMuWnJ|Nf>VIg1+p$t$2fyBPs}snqmS7y$=J7yRgD1bklsR?x%f`<9mF?0rN#EtAU^ +zjQ#~kYA$VV3|is`p8c6IX!%d7E@Uz*+vA^m)1W6BZ{-_^x=hnuk-&INRv^7RY&H>9j#TflL59IBh#+a8hmC??| +zSo^4N;0>!8lj6vA+Itz3JH&!;MgTI`Ut@Kz +z`Q-3&+Ksg$3C7+{#@ex@#w%qpVpmYq@||gHD8wO>R~nnPpQd>K&)8g^(u|k4j4j72 +zLBC2hwvLSj+j7F#)wV2*niGsYF(gvM4;%a2eu8#MHugtNr7*t6II!Xi)o)rDhwl17 +zy4#He*H>VjCL4*lb3)y<*E3Er4IRALI6dYD(~xZ+ +z8Rw7EvbkK|xDZ3<0|Jc8h3QU@jx??gql%Q`Mp79G6|F7m`a_Hx_2_uPEQ`ACP2IRx?sy+BRQB#2}Yuk(v|Y!?Ol!MBu>@pHOBLosbCjs87~e~ +z_431SQhnhbynj|5-pE>j>g+5?O;^?YP|D4 +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 +zbkolN^rGOf?=t`Ulqw*Hqxj#SCn5ix;KEPHU +z$l&^+LKw7;hgB6aeHEN`6SDGIh~687tV+#8DeHtBLz&0oH^MAN4kvDk$XxCx_|_#N +z^PCdk-uBWW%Mf>JgqSR{9uEVqeGu7(bp$&XKfXQR#gXo-%J!PKpT`jatmjV +zbudEOi;@l%ptB4YCCA27<#X=`QR)c^(c5leioIjqo^Hw8}P0mJZqnz9m>U`-Y#12 +zyt1gzDnJftD(bIw1baVJG(1L*rno5@EvKF0GfH@^Yyj@pmFP_j7mYCz{7Y})U3mm} +z+y>!&kYdb~I>P&&I}qlWPCJbDVb%#oSDyZc7_wM2OZ5WP+C-ZG+81=nC)%ZVB|SSM +zI)uG~>f1s1cv8AvWa@dDFRjfs0 +zVgoTGjXoICO$_Zr#^a&I@QOES?{}jZF=zvLu@+)9bAS=#CPpW3phmJpF?J`do_;&T +z*uBINpT*ey6ny4;iiwrTl~3L#CZS^tdA!ak|17xiA%5|a*6u$Ws)OkVy7 +z{9;)V`X4FmSDQqb^#gN6mNHy?=Hf=?gf95ET&bW^TEr+w4PK>Bb%7^ +ziLCxpf|x#t#OaM3V)~L3;8~QIzU%~y+BZaauLZ=qBI4K_$fpbKV)hDesE1J&^)Q>5 +zdnXr+C6C0s|2V~jIb#0KR#3)tG5^SZU|vNr{}P4UZBZhUHk?$g5+X8@f>NH{BC0oe +z(q&IXbZJsd5pE*dlfrY=V6pIEH;5XU#KONMPG_wbi@guQ`0~jjt871(@gnAF23PgY +z;D)Rg_3{+4cvN?CIIl%a;5QPFw?xe5-6YK%#FE0rfqI=S%E~9i(&}VnBf5#DOHv?4 +zwi3%aQ%>SHPAvDN^R4!X73qJsZo61HEd=6HX0a;#B(47zd&KHs8ma|N#OkltAP1Hg +zYwUfX$K4RIEhxSx-4^RtlSIqgTWqARHMVZD*w`%+s*zo6lC%s@6%t$KJOTHqNTl@6 +z$A|bCyyGw8S8(4V#Ban#MA`}Q4J48W^qoWeMKuWDJ@n!)ow!XTtM&a${0H8tnAkEG +z#3n?8IEcuI^NF0ek0`*q93WCu?DBwUQq*Kb8?iJo6S0NZx`n17f=JbHwr8~1c8>JK +zh(NKuP5RE~^dn;XK`K4I-YB*osz)`3(_)AH6Ky_)iXG4QfIr_TcFk%8%4)?PGBUp2 +z5OLiZ$?&CO?|*AZ@5hLJ)ze@!uPgS&QPumEtBB7+K`L&5I7lK>hYS=4mr@^8!O!C0 +zwmo3a0>mM~Acv=lV;$^N$V)vXj@S7F7N0?}wURhKcMZ6I4vQ*goj86X2B_Xh9KW=i +zVnT>Gew##Uj{D+72pQS<58_Pwvf#76S`^PGi!-Ua$?7Xuls)f>vx@^DHg*sf0w`KO +z4iXn0y@%{MN?fup8wvG2SX_EU%c^p5i+pG%ad}h}>4Mf4)%T4eiI<@f7$TDXM1nOx +zCvKLbT4@bw(fI2uZbnk@su5$6P154#3F^yi{z=^J(VzB^JBfSoZq)I$Ox!z73C*Iy +z7Inj%!hY{I8C8TK9@U_#@hM;NIGQr?<=e&c?j>o<4C74f3uH;8(7#f#-s +zTj;n;yg1|zquNLDYOf=VzoW!!`w>bi^NKfrzf#9{h247O>Fct4qRLTD%PsZ1c$ +z;{g`+umJJ(Xdg&<#V)?@ZbKEpe&WZnDPURFieF!^Q}0sQH#ZVnfFjd$T&JCszHZj-t=0AkKLlWaNeTc +z^iSsfMZ0XilPwDS;|((3=Bi{&1Eo{`7C@c5(#eN5mCm=bs5ktRPMf+y)cGo%;!_|$ +zy_CfbC&&{=WeN8_)E6*Rme|k>#=dT{R3}=V14_tJC*vW4w#(8B=y-f3SvC(9iMzLu +zW$TlcoIgjF>w6r!UNKp2YX|ClI_4?MZKE) +z7xbY +z{gzFpegJoBDw|FkL%UzYWz$C_uR&G5pgR!NddueDDNk5x$o3UHAT|$_9UArlYgbqL +zd@exYxuW!)nf~|T()T2V=dHUlc(o7Fegf*m8QIB|thrlz+4ar|5|Jsg>tAZ174EWo +zON!s~x5@5T=RifAk-aE5@f$T|?>p1MYWJ1_S1G!!xG4KBTnEf(B>SESf$`N{_RH)8 +zW=oL$c9IK^-Dr`W@sj=C2avk%mqDjivcG*+2k;`Pvj5pQAkHa+zh7EZ<>pw_S7ypV +znQYL$on_E(KN$BO5~&P)Cru7rNv^klV>wJEQIc9x4zCab9y?Qxn41TpU#J|BN@Dih +zG#T74Ju3Ri;OTU}!6-SZ2ia7vnbID@ePQ%$Btx1~%2dcphP*rr_OF5*zlRcr4^mF5 +zmJHpcxSTeddOxZxkkeI9@C~0Vil5iz^cz*kW?IYe%z41|C>h?88Z6hWCRQRQ6DxzS +zElsRK96+o}+(vXKezeQ*`xM=l&Xf@|se8O|7a8%G!tKS5a#rJ$Fj}0j$V=?DDE=8l +z3a>>b%2``UL_RxdQMumC;HepMUc5ILg^&5^F(WBbMwYSx$u}(;ziZ0KY5~CDWEt5t +z41BY_i;ONnQK<^m7UE;TOShBJ*Pg41|qzYTy~vm +zllDQk~-ju7-)9Tt&<*J}dkf%(!Dt;4P$l?q> +zm~2rM?U2EfUF4dzU8&TvMy^Tks;loI*JloaE?8ZzFFqAK#9gj`Oc$L0i`?)ajyfNv +zev=zrM^J+B%%bd5P;Q(}%cR~PxiOAfG9K9ErdSF_-Q(rv$uv@lQF3!cBG}bR7Ws)t +zi^{W++){&`$Qb>P9E!77Gh-ud2Ex77%7i!*$>_Gh)nFDp{s_;#2wV_lG0k9ocNOpir3^x +zTDB~yuso9`0J8jhdFHr;=sQWC9Tf^A@sUOK*iD{&L{qnFuRKeQNXF4^^5WY@!1Xrr +zl6`&*RND{o^44-R0yE{6pZj4n+$pbWD!cWMls9Wra(efOy!W6a4P9w@?-L~&6DL>{ +zCv(gD%Sc>q+9n@T43Lj|$w#iS)L@V#A3KwviFJ@q+L2`s+aaITBhNT#ynJ@M75L3( +z7G={4(w_W{;<=t6U(OSGi +zaMmyRZ3)>@ZKfir%|cJR0aRcg)F>46~590 +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 +zU162hvm$dc-{)H)$`# +zfSUTC=}Yn7E5ANS&wOEeO?@bLU$Ed6`jG1e=%_G#yb{fsUnzZ3bs*8YMW<)eJlh3* +zY79A+cP;g)SlV%QZmiF`1(Qc}*5`_yh1%$&&rNLrk-Mcnzoj>I#a7lAD^o?b!v%|C +z{$PFa*cWiGk@||4eKb|oPv|R6XfB+_Smfnf=qm{hz=(eqjcHZ&)vxjNsMjBT&G`x` +zpTqjvb#kS}3+fy6FdJ*!N8ikxNV{zt_0854bo?LcTi#UG8`DJJE=$F-ZGrl(OC$Qe +zSbhI~66uTI`u<;hD#LD_IqU>Gt%Z-#8hUL<)8j>^%pQT@~ +z^MTkmSiiXt46%2%ez!i7Iyj!{_wnn1C#|*p{a4C}cJ9!hzd3@x4bfj07lUl)uD_MP +zM)G&Q{`Qzswfc|rk2e({V@v9v>B^_(9{qDiRjA6(^slTZAXiq?zuHg__`^FE)hV0) +zos0ZJa$WsBH}98{!ym9zJmH=2b-F*as9TiX*Qt| +zygA!6>1jHY%xaqVDEf`NZDwj$9c*+DGxJbKXh&vdugWQy**BWm)ARh%?al1h(`!vG +zW{zg$xxVKzb4{Zm`*y(0wfHMoP{D!HK+{t8N)Jqr +zdlasFe>H1&%|;cRH>PK20i$h6v%X^=$PRza`b{-;b}TpR&u;|&J=JV5GdFN%uG!!! +znTThC*(j(M@aK=&wBb5(C&$dD)9E@AYFLy7Dw*DFC9UQ`W{buWvdK_lE=aEfL`T}? +zZ(NFA6ozaZMRcMMFtde!X{fUW%$9}7Ro{0rTh5tE3hSgrK9iZPc7KC7-OQriInZpg +zvI#J8uGyjGcJKwIOrIg4^dG4dHaq5_naMrd?EK*lL{dq!%PsQoL&ME(kBH5g*}Y~f +zs@&{aWp;n*M@i!uvqu#YH1CF+y$0uoemc$U72*b+Xg7OLq+;ByWoDmyO`vA?H3MGI +zOckGR_B-tbUN^z)mqIeZA>JI|^ab*AUUTT+Z&Y&rV-DRNLCN|Bb9it+=)Qf-k$45s +zOqs!3$o9P#o1+`q1Ht!AF-I>U{V`;zIp)?n%6|8lA*qy&A6sjVJw&VR#Zq$|;z$x+ +zu*gS!HOHOG1%9=RIi97$Fxp#Gy*`=a>%OFHKEj+}dhf`17g4X7Y{i%>kpIg*9ew#BsP6aA;wJ0j2nzIY!Aw^fojLcmK;#@;B +zx^8h8#k!k|^WA~!GugB+K1{KpWe;=dl);eec9|=mR|el*$6S4`AyDCiMNu+`x#la$ +z`t8lkH9v!4biHG)lcc(1zL@Kyj)H~%FgMnxeur}5=BCmVv(7#@H(hiGdzsbTT%J-) +z&(7xNN>nR<)zjSkjEeam&YN2v+vt6FySe454QRT^BHQuUA}<`A!3KXVicT-hZM)-v +z(QPbBpA{DMo<-(%*RsH%h358)?Ild#;ISFCzxq3+Ck3BV*XoB@?h-@o3W4_Q(8S@ +zKd=Q`ZQSP$Was=g`G-DtxsJ`|{1CE8sx8YhO1`rewPlH=|KEUTxnj#U?JSJs2wS%8 +zMQE!z-sX_|D|BE5(RyEt<7;T +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 +zU*S?R&6l;HS;{>iWyRVX)Gce{@ +z)yJgL<`ubl4AW}$o0FUQJAlu0BDW*=fpWo@+?j}DvrjO&w+myo&y~piX5RpMmnZk% +zCV_Olm}EW0l8#h%NV!513@;p%Usn+Tb +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 +zYrx)9d32D6^i^8;?=7$*W6m_Yc6b +z%m(y!#1fF6Y^C>)4*P +zJx?D_SO`L!uJloL+-C99Fsb}Ci01ka0N5~^zRbfV<4!I5>fZ!Vv=I7gc@BE*)9LF5 +zX}IXlq_43|ldr1&VO@c~tu-1QvP1N(D|!i`4ki`<^7LJsmjIdH=sQbB3y_mBcH`%P +zq(#yEp7;xmylH+ijsZ&}`sq+TfTa7hz_mFh`Ge_~HttMk?F09v6f$8W#953oH&jYKsZ?iiQ4DMd92*v;Q-HFnN0*b^;|0Q1BiDOi+Lf( +z&SjN;qPt+Fu*&^VQF9#0s_qQ{Va-)mt#p;1`is>#HV|jUKdi>Nmmp<@v6`K5lI|&B +zwPLZ4E39L+E8GEjbrG|5Ujkx@GpjSc54x1u%&ut~NI`E|ynR9nXWP?Z({0eL&iq!rZT*43qqfbsUJt +zr~Z?TL_<1IMq;LQU{mBb4Om6J@$>1~*YVg=CAk9qXi4qVh8 +z=J5kt;!+ax3`a+6bye2I3B86!Wm#8g1t@`0tgDK4B%%%Lnph8%p&868cRSAio8?&d +z(gUdrIYHt*MJRu(+Z?!mDsS%RRCja +zA}y=156-X=%X)!4bPF44HyXrhYuU&>%>kZ-uu=Q&0C%i}jXL@g1W{u?X6)<8d?%uX +zFEfPs#Y&Yt$KFR|DqPvNbO5 +zlbN4K2jFI@%+G=s^6w?g?*jh9=!?wnp&dxcL)dsv95hLGY{Iz>AjCFj6WcrlDSRTE +zcmZ9~m^d~uLjb;4ESs1Y0T3O^{9C;MvD_5qKL%xpl8+{3-GljKs48v?W&suFfhgTz +zlU9|(2+*2MZh+Ia-8E(@y^scOWK&Yh1K;f{n|dAnlh6-rCL93qy)_GjVl2R_#R75T +zsgix3&3%J?H+mlnvZ)VJ!8{gJT6Gj!hRsjCi894}w%`&ralb+qeCaDlt0GxQd2Aux +zV4`OAN$F=H3(Y$Uyj!$|g=N?Q-}eg(dxYB6s|{?aV?2lptFonI(56Qhv1J~a +z=$*T;WpgH@0jk56hvVzRpRyI%S-9GVvDK&11xjo;(|bQFd&LEBefl +zmsr%-Fie{%EV_{&$ifE}^A_`!^;)p)l^z0j&oYl~ul)wgXlT-DA6^qw?Nv +zE8G2PA--@8+vDK^+{kil&-vBBwe(>7(wBkY--hk)jmzuvee6K1Z|J7m|z}rlg^2!D{s|a>sHHI6p?b)SE5>^vUV3%7~#zFX)U4>}eJ(+QV +zUG-TH^6MCO?e0QU>6}d}9apkj?NUG<%(FWjdVqXuc4uKQz%f^LPuKxm(rcDkTLgY~ +zB+J~t9mGd{S>`bmQ2I||5Ae)O<@!>VRUWhell19ArI^1GwJrLNZ%-$gjcZkXh6?bDTc1t4Zy^fJw}fb-s|le~GD1+v$* +zLbUn5Gj-Y@v+*U~x^8Jv8N|yWx<0oaO2PiRe%BuOom+L|O#uk2E9h3v!B|(dOE3Fh +z5{hv*^m2~qBrlB8t(6lXH;dG5Cf5NNu|~Hk&0|@Dbeq&oz`xh^@)PiV^CsyP7H6Yf +zXsK5!FQS6pM6ao3VLVk%x4pRwcTtDxmU@v<0H+q}4kK{79P6VuDvPE#|Bl{h{}+(u +zY`uwn8bCy--ek=k5P}j-ifKpmChOi|zAHm_OtA*pshjRp^$B)eYrSc}3oM0gp*Q=D +zO~2%)-h3H8vCne7MV&M(8_L(6-yT6<`JnDn!5Kxp@)q4?#xaoB?bKb0(RWLa(%Y0p +zL-HhBcXh=s$s41)X-zRx=cc#y#?|oEzq)&yhQMF?uK(TI8Q^q;-flKZ)dfW+`KDne +zmB)mXMQO8KtyXyi- +z%?tD%|7^g%Yp(YQ-VFSj5WP<|Tmu@<*89{!QyVoz@0U9Tq~c$C|EW00zR%JJOh5}5 +zxKAJO3SGCx-AoF@+pTLnqlTs0RDEpWJm6ohGby~gsE-TW1d>C6K5nr+K=)Pp#4FFS +zGE6clI<(OJi+2H@RijU;5{Kf#G<_z9*2>-Q`kb>5K>Bn*pKFf>`?#V9EkLuRdFYm= +zS1>DdS+^{R1u3D6J|B<25CdcM1>Xi>#n|n+`hucVkS9rcX}BbeE7BL)I%Bf9slKS! +z4&V>v=%K0)R%FELVF5>gPu``k4nnVfbUl4dWmGMMTKd{|=&?;dtZ%s14U~(=^bOBq +zFn2r5q~y6%-~1742vbMvQS?Xkb5f +z)Z<&D;S^l-z14Psa=N0vHy0~nr{2^LUv&g|%N9N13eNVjf}ZeU7jPBF>qobp0;Nn% +z{g}%zd>=dgIG&R!rr*|2R_zG#kWl^P(S9I?y6R^}M}gqyttSoH1#tP6o>YQWll;J~ +zda?_q4)3?slRIP0@K;wo^sf^gubeg_qAZpNrroR +z&HxcOsjr^v?F9V%C;BtLf6>YApg-SH2y&++{rL-ToaKuCsv(XI?`ZwiCY=4xn(MEt +zOb7AYXFadc6yU#G>G=zN0Mc`HOaA4GAdP#W=jWUN_^?_3*sTdj*G}nQ4lV-G!&(3G +zyb}n~6ZEh4Xm|^)^{>kp1E>7fzi!2`(k~E+dTzfR$Qj6M`q!xWI96&SgORuN!suoo +zzpttn?!xz*I7kCeekHDME$!}2jEUN(SK}p0lssP{&RXS +z^lwJ%zgnW1S(0Ud9rkrkSAz?~#kb6ULmb@#xY-4U)aVNEkw*EQwW%GXfP0C$<8P$sF0rXsC)WrQRa`SMb=JjL1TQ2Q4YCXciF|)Br@pP79yHy1- +zKhdxc$F*xscfHpImVcHd<`*#0~5>nwl5N-hqbm +zW9(DorO`Uu4LF+tM%x-TSeMhl_`C6QY;s5A?`_jS*ppzib5$`rn`5-c|8XSjt8BEN +zfqHNYTciDrjws0`8XfxIKsQ7(I{xegQmgZZ#}16-mQFM}S4B0aCL)UhvHO)$D#$AIbnC!@z?w9vcz89k;~1V~wCcz475 +zE#i$nOR>um*BN~$y~RyZ4o1J)#ULhbH2N2#N;)jo_~+0UP(lNYVaIW-oeMTb+{Yb* +zFUJ}qURbax(yAD~cjtq&d!aGT=^jW;-WlWeqX6=Iwc$7D1%BVx@Ee&3N~@cO|HDqe +z?dWGxShn2=ScSgq*=!FRF|lN$?yx^SI; +zP<4y+YoW2-KMlYCV(h>YR;B4yBepJj?I&j$@!JRBs+VT$e~i=2{iJcQxi@fCbBx19 +zn3QZf%1F3|uI0gs#*y;^h}#<*M*|0da;ArIoO=dxP8;Lw)O6s2LXC4Zv63~Wzj4kE +z6Imk~7|D}R6>a<0NL}+cZuM#X#<HyWNcI(P*McDec&72BhCjfdcE%GsoHfJTjVG&c$G=d#&3N+m0w}j*jGXu=;D3HIat`7L +zl7|?%srV$VbmN()E#BW@QW_d&Qki07Jo^V%fw1_s@!InxK;kCj +zO<9bCPMnXQe*QsGuld(B8GTNLr%=^D_ITv->;jm +ZN!Twr{QuW1{%^m8U-F6n_ABp_{}18mz&-!~ + +delta 31928 +zcmX7wWk3{N6o%iqxnrTC*ole?VxnS;-HDhOfQW&K3My-NgCdHJ-HL%77}%}YfgM=b +zAAX17*E2i2?9SYK?uqxF;l|x!PaYPt*E-;z_k2psqD#dJ9_zLG$U`r{-V{J_s0A6+ +zwXf4_XYew+h!r48ZX?!&TA0J4uCswy7i{MiVgq2}Z(?I$N@ik9Fy|`7R$wLS5IcaC +zNI&l%P +z3vn?qj2J~+MqENXOpGQzB%TLLC~Hx(hQymNe9Bq0E5}qi_ziZJE`X@HBOo);>z@|2 +z`bW$UmiW}7*2Rfkp>NX7%5E_JuC~ak(+|^Yw%jv=v12p1rJ_YW^F7g*#xBYtJHI%c +zb|{w{bU=5wIwFHtw_4OW9Ef3HHzyNkg59cVQ5Stgya-l$Bk>0D5}+GE_VOXN0hhxq +z%6%?CmaD+58bFENFuwG($cA`Wl*dXDdwiicrqaO|up#Lm_yT#X2~aX8ou{cLvLQ1p +ziemJ`^jaS4N1RCS-?Yev?6D}1(dS$mKosu|xVC{PF*;%tbGMJ95qG75ncLi=D6!I_ +z>>F!QkNuXxH5CB2l4N;ZBcuL0L|)y52Ood=0&FBM7#&K@*U7T0W7mW +zS#U#$&7nZM5U_LkEh=aF`wl)}Z4O#g&NSm4#zQ>F19Th)*12v5C(`$H9A*bwKzB-S +z$iA&DswXrO9dCk1{s6qskV(+Y5!w0j7M05?z^69gM;DmRzZql~$62rC@{$%+xh2H& +z(6`8Px{d;dxmsj5H(TV+hluu3;O7olC!`mRK(}6yEn5(uz<5e`&?DWHz5u>YXi?G^ +z5@olaK)(@SZ&EC(o;1Y$X#_q9;v^{lHo%aMFy7P14vPf)_YW8z0yUUMD2#s3fkxDR +z3fwV{NCz@L7;I}ag!2-xxM47gl(NVxxf0KU@tR-<=?|;;f*m_WUSe?lOF>NS54j{e#57tXje9`M9RqyyC1+3q%6E{3L2S55b4xB~<2tCN{UNp-hhi%sb}j?k7YVU@2DoQWh^r-GtooF}e?uUyPX;eF +zI)lTuL)`8NR&*6aQbDk6sTnM`*`iuI2jaU2#F4!bE2UHM);q|z(7ny4uP5?iO)@xU +znniJRWyBp>)!v3~=MOCbr{)=y}bo14Mb>904! +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 +zf_V9}k6N?Z(57{ +zJ$ah|N;%q%vncG{csr6?4E2<^-$#Kv#}M8z{Q`#H;T`AF50*}|s2aB8KEscK5-i>| +zxD8ZHAKq;U+0wpB+}^!lafpK_xNj3G6uS)LzU}kTZuSS>(~-Ww?8AGyG=%Eq$9ry} +zeY|Uxd9U;lY8A-+1`dI~dW-w5B3={RZ@U2mceE%g85Y$}M~k|B8}2{+JJ_B#JRmRK +zz_WEcpiN~MKjWM7zB_kAhpgg(Mg(m=fConTLcTP3P-#+S>4O6vt%2&1jSqBwOMAXy +zJop*a18vUp!O!o2xi{j2Q>ebnyEr1n*~wmgC?8>xmKykmk2v)ex~wZ7btnQD>5b??I` +zT`NiTZEZfe7?qhT1Nr2WQ%NK##iz8O_q!M2Q+$1B^XWiEK4aEtu;3FGMb0`z8tIA0 +zGPoevqIy!4&+J6y)QPox=3Ls#xjBx{+B$-ILj3rw?c`0vTJhOg$$K@N$!9m247v3V +zpZnMs#^Szwp7=l;1I>BFDDqCZ8uF-%-r%jb^QfQKND_?b$D{ME1s|1*FOQ9;6r}=R +ze(nZsvz4@{HZ9@HuTO)Kr9EG4Dqq=$Y_iD(zItjd$e)M#>VMB@`>hFIGmTbn +z$>Mx{5t@Kpx%v8=lw)ox!#4zxJG`BPZyeYKqR&yjIkh#kEWo!^%eo)RuM6MufYRe^ +z9U|tHbh1Z}<-1?cfJpAg_w?%sLvH4K%f*A=F39)Qr6hUdQ@;NPrxD-E&6eoQ_}3Sj~{V73-<6iKXRuDP+=iI`j~b=^4;YpJg-B&_v5E7OCX>;KV6>O +z-`7$6+%LNCqyKm!I--T)Y+47rQ3HPdKT`OOrZkj0l!f-4YI}eh{2_t?7K_z`^F}yB1ifCS_?=dx=*U=QHs-V +z_`}#JzedKUauH=a^~t}kK~|2&r( +zS6sgGFXL#3r{PWhZMX}VZwdY_>KRzp>O6H}Ecn;m{Chw&bf>5M`}lB(EFS#(%#+lU +zb(w!ZGK@6fUi?QR(sl|&^B;rKs~AuIV;8CTzxwf?BfF6p@5_JHy`BX|@$&q4z&eP= +zMkN6=~3~1UVqEHPte> +zF+~W2mgMj~LRuERUC2s_5CNrxq`FwVE+OP-ss)zy7q;T$D)t*9bJ<_uJMxLlb4!4? +zSTC{+_MicwLCSh^GH^XbWE>VMBdai>p=DH~9 +z;0~SbvnUxB4{;z^lzJL&hn{>yxQwLAc3KXLD*2H`J?M{cbqIlIa!9z(y$tQ-Bg*HA +zCMjsEDDO@hlHX8Kz5^u+Da}R2c9kgkohK^U`T-ZuSu}pE5!Ki!z^j0$)_en1OU|PD +zBr3<23gNkgoY0$aQL}MCAdu394g#Sv-x9TA?*h%-McrBnkTH2gy!O+?4ZZ=m|!5Z<{S!>BUdBA=N> +zc(0<2$vs+h>hB3%aH;6@gc89jFNM#_aggDIMdv*<^HZOQ&d<}pa-0@jT0Mna&{A|O +zUk0jm4biP<9%>GmwNrFk699C(C3^hM4Uyz7eD73&Zp1|II#hJD4Hdl?e}ysPrRaSo +z3i8J$;qUO9`qSnK|I*IjM}vg_2-0@WjuHMzB&jq$ECM?%g6KCy^m|YevhGO{RA?1g +zRnULtJgX=?a$7h!veBZrEx{S+-Cj*9S#C9%T#yK-XX)KG}4GsUXu +zr)h@UR1&L0Xka4Gh}GY&)5g?RvBvHP9o|vIwxsxb+efTlO$k%pr($Ev3iQJe8+$}h +zvYRG0Nm^RxmWeHMpMv}BAW~K3bCdW5yh|vNQpGMSh^fR=MA}Q}@|s9qt!q}I{Wl#{ +zqJ#g4K18z7u49S+h^xhxc_5x48pL-*Mr$@ZkrO?Lg2GxgB84&E?nE1L0?{O{CuSmE +z5L>s<6wD!BSwzyqcd_j}#ru%gV!OR9rFb*zi0y|+;QQbrwjZuXaig)=VW*w6gG}sr +zxd;4>i`X^0A=s&IVh@=V-#A{x`7%n1^NYO)*HHGISL~~n2BSqCu`iC4)jaab_AfRVy}q9e&=zZ;2@wLgO$&Y;-7Q=FW) +z2E6Zliz=psIGGR)RBI?sUfxZuem}*@yOc8K>LwCG$;ig0h;toCWSTeJqId&w?#FJj +z@og5RUssX1B!D_QZ-|Ql6!4yX5EmbRgzS@Q7nfs3K>hqCExxriIQG}y_H;>OQihzMBMAy +z4|4k*aX-F1RmcUz{j*eFM8{avjVdk>_wSNX%^5EqS0`=u+->n>5mmse%88f0CBZ{m +zi`pK?ch +zE*%8*?2Sb|JXw4@?gwdWBfjr$OPc>n@iS&3m_u>#``b;(ZL#7{+o6zAHN}6f4Irnl +z5^3G2yCra^MPuT5@o#uh7z+|5uSrdN`mG^lS<2N8`$_5T3Gt(VRISJs%X!F56TgDx +zYACbS{6$j0J(>N|7VzLNGW*qh5M$e0RM*y6)Z0(W96dHc?CBuAg+OO%c0FA?dVwm7O{f7D%VV6-bARv8V>ulumc)2Yk{jsw>Sc +z>aF3@={Idl`Ao1Vo|lq&HdmojWQh&--n9MlK$hxEt8w63S?Y8=#L#lmWg)!|-zm%FCgru) +z1zDy(Wq*-bW!b(bp}khivRgaSR2`LNw^aeV9U|Q>Jb@~{O1eFA2Ftrtx}`Zlq^8Mo +z%_+G`IU_3^B1gRTgRGF?0d5qOm8U%;hg(Bdwx5{>_1_^`rO!p08 +z8-Y)8vnUdONv|K_ly<+eD4X|?4Hyme!ilm$ksH+9yFxaoN2~rsR@wOJV6ZbIE%IVv +zvdNSb@SftV(VMkv4J00$0O4F +zOMZ&I6{OEh`hsFw`kbcNyLER4ulZS2XPd~*ZXVR_(m{4lN}x7qf7$&%>TFeU(zg}G +z=14c`du=Y%+$OR&g(7|@UiL|vMq8avWxzFxT&r8wlYJMj17OmwW^}#qfWF`64{-@qMH#ZF20Mvn26;o-D^#O@{8VMoyjc +z6|!m$IZcruxOs?0@wbDVcB?X($YnV_b8aflQ|0tl)ONV8D6t~Zk64Mgo>-aqhFArB +zy&I8CX8m9}{Q*U;6{egulRBk~+>^7OP$<1}OU`agq0eZUkbVH}QqiI`#uF)a7W+@m +z-s%B7KW$N!_s(FVP0o*R2KLo17o-P-+c{-KDHBM(ZPEBIUPe?600t$?i0+d~tiLB0 +z<)?__VV8^IqruBulZ&W3%$PM@F5Z}R9oW@ca`82Pi0d^Y%2#o+J9m{!nv|r|UuE>f +zI9i<1a_M4f@voduE}OoD*uC38Bof(u +zEvjeRW#VI+p|w?HA~oL_r`+VF_YHxYZRO6+DnYxrrrpkQz!%n?_IDURa@#)l(Qf8`BBT4K%a#yJdQ%Izq +zsMPaFN`|&5oqUa|?$H^1+ukBet7uVs3{NE6nboveqCi +zbn6y-B97AA0{!8ofVF75F=kip?CV(A6eju5VS*SH+>Ty7yAW_GX5TyQrMsC%~9F +zU%3TSMm_h7Me%x~ay#S2GmWE3g^qY;9ESFC<=nY^~}{ +zcmZB1T-CWV6l%&|RX6?dwmVBL8ovsv232y?&Q)-B)o|S&sCx0LQFij{Whbh}loH5B +zRaKLtl%LOkrdqIEkgn}jiz=<4KDSV}{ZeoJm;23Ki6xdY-HPRs*P`M9yVupd(ofKdS~6AulL@5DS%{?Cy$nLJf(` +z;HkqFb@hmdc{QBMZfd219TtKWJg5ejHA&bir-nT61pBg84FxUoK_Ar6S#jVm=0;qp +zQP^IoqZ;nk9%|86;5jw@ +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 +z?o^1xM2mX&TU*X- +z!$Ja~`#rObz#E8`Q*0qy$lhD#v5jhI52DJ-u#H+uImfX4w$XRifiJ0K3;jU_bV6}k +z*kM{=Z}Z#6fFk&mixzq4aNC$OB&pxnU>nPRz%V*kRQ^M3W9z)8*3?Y4amF|Bw7Rx& +z=l8>?AuRIcJ#FLv(gOOu#5N&UF34W1Z4>OhIzUuSvQ2n00cvZUZBmH@s1{#slmFEL +z@0@6xdXd6Ol$S-_V1sSy(;v`9tJ|gzqo%LO%eEQ&e?YDXu&8r|*=Bs20#xj7QB)jh +zo0C5`q_NW$k*grY#gn#0b(~=o_q8p_lLXZlHkTzwDIBzUWLq|I5H%H5u&sPq2|Vtw +zZT0yEfP0EX;W9s>dDO>!}NT^qjZ3ho|!?@SVcJN^| +zX+KYFhx2}+-rW$}k@kCNzbevpWcE3FR^rN1+tDVefM*WdnMW4rvuP8}1Y7T9i3CxxoxZo3^pnsVmfwtIaj +zj17BiySIq$xLjRZa_9@N+mCFogCta~Y_@mw@SkDMvZZXI45V#!+b1`&^}35}pL+#B +zbRB2=vceJi!3*0r%%G +z+*-D@SM4F^&a(YmPRZHY8K$wA{8CyyVj$_5t|s?Rg6tk;%D?ovYlls<=p)GDBh4%^ +zRBbz~GPA_eVsmI?W}BJ_<5eaz+x8;lR;rs0xxPUUh&8iUK2EzRJ%r};5uBbd_{&wUhCe$_y8FGR?v!rLTAW&BD2I(+1NJvv|6@=#*qS?{}dMw!jQt%VSZUg;`=7`S+F2%#uFd +z)O&HrZo1^7D;d<>EYplqk`}#*(U6Bqm}Txqk|6S*>Du3ohQ77wdg3!}D>t^N8y_-V +z6Q|Gx|25s{jxo4|MRp^rMeaN_gJ<$vl$9o%=iZtX5{E%&?wi5ZAIwVgscgS@#;lY^6-M(7W|fH#=vjoz +z8H{XhdStE!qfxwB<2pIqj~~ri +z0z`t@{?<+sKyO=Ae;1n_sJ~0&uGyjUEf_IBP4B(bDp}`&MfI$(>9cGX*y>Ye=gMy& +zk9wG$gQio+yAf`7eoB?nr=@1+Ka_eM4Kuq{ae)2M^E#AZgby==+`CZXVK)ctPoamPOInoQ7nuXATn4ZH%pBO8B8cZl +zi=uR0bKv^3FxuM9LD9ZYx0;*5F(e^hj5UX+Tfn0;=7?HUq^`YdhBPO4RQ<0RLL;F^ +zyv|^Vml-N1(>6!|(M|{Ru30D4!{fwQU{-gFY*2MGwCZKBpqge_IkM^3_06!BB!QmVqn=FB5PtEWGWgt$|Q$Y^27>m1^Q<~iY5@%UdAx+IGE$DUJ +zT60QxPGEAlIW=NNyDav^E#|Cud!ch3FlT+Hv}XSfbM{CQb5FiA=hmV-eAwBXn?w~= +zjXCDr`^1r+=3IKTn`N3|E*M`8_*ub>pr_u96UWWP11YU9|G|uI91Y&j(_Ffff_-3| +zx%71kiSFDY4=7_Ui=0fWxSko4zb-W#_iJw*7?TE=%cE$qG#+5C$Q1$+G{IaE`3!Iy +zXRgW;51D<5x#|IBzfU@utHYDQ2M;o1vu}s7d8rv&NW%DA(~NCEEnW}2%vkRcU=4Pf +z>*;@~i8)iv4W&v$?_6kZsB(+;JL;Mn{jx%Su4nGZ+K|$o+S$?%D9h+??#N9)v_HGK +zE9fhXKM%}ZAst}+vYWe3lGR`TZtiJuowmdh%{{F)L3}7;?oB8R-m8syAZIS9$xqGy +z3p?|;n!4!!uX{#!@3YS_RA!MpWu|x{nKFcsF>^?R43R1I$SoyPrb5Ot6f$MVlq4nd +zOhO{lBNCnnW%{m8-`Dr|=kE`%_wC&7?cTHZUVE+2T5CHMGaNV9p~lqYEHD%|Gp1gC +z28RCS#xqZGFH3SXo~?;7q`9Rry;~39_a8E*-;Jq0w1z2muQ5Z&1!?nhopSG4#*9d` +zq?@SmJi5bR=V8pm=egoaiXJw`%sbW5<=kbwa2c<^U9D3b_sMvn5C^$eL!E;C5S>!Y +zRh@FTQ^xE;C|HmkI>l83jM-a6n9AJ1=7d7>qo7 +z(Rj%`38cJqn<9fd`FF}?rdZJD~y+- +zrWy1+tCPTsJ +zxAATDAP`ch@m(o~ZLb>`i)@m?FmHje=)V!buZcCjFEa;OIb|$viAJ?B+*s^-1%$pG +zj30y?3`koW|MOW4e4j+)H_sptEiM_qSL*}9i4(^1@rkGvxXv+_C!)1lGTr#&#$4dD +z3XOjv9)Z;3q47`jJ&?QoHvV~ouE5eM1lFO;U^$dt +zv|9^U! +z*az1H*t>+-ABq8k{RYzR<4fRNrV)q3$3T4Fm2^lyjb*l*n~{zTBdEAI(#aFm?H>ii +z$p)w8pA6!(q6eD)siboviqa&%k`3FEF3oYp?&?jtZ2kfK`U9lvNQ{GzDmvw166yM9 +zD{ysgkRAp+Fw=7k>5+#;Q*#_i&*vy@oGmB4E}<)B+(CNX!Acaa@jcS(?I#cuW|BVV +za7wL>B7JUr1FmCh;(Fc^M0E-2e;3`}>4{{B-6fExv?oJr;QAVSmW=8>0tGpZjEW5e +zdE!Sh`XxG(55AJ|C`HPFv&aNY;TX1T)5(u7)hU%WAQOC30c;nN3F#)34z?a4p7C|i +zZ8eZd{bjTu56Pr4q4-I2h*t*z_@Og(3SqoXd3hD$b^8Vwt}M{W4-3#KEb-APZTh5B +z?o~*?^fSc@O5s0Nv9 +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 +z`FIPHV(#8!l*&aO)A +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 + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + AVISO: falha ao abrir a base de dados de informações DAT '%1' erro = '%2' + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + AVISO: falha ao carregar '%1' da base de dados de informações DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + AVISO: falha ao adicionar '%1' à base de dados de informações DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + AVISO: falha ao atualizar '%1' na base de dados de informações DAT: consulta = '%2', erro = '%3' + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + AVISO: falha ao ler quantidade de linhas da base de dados de informações DAT: consulta = '%1', erro = '%2' + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + AVISO: falha ao alterar a configuração '%1' da base de dados de informações DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + AVISO: falha ao remover a tabela '%1': consulta = '%2', erro = '%3' + + +- +- +- +- ++ ++ ++ ++ + software-info + Informação de Software + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + AVISO: falha ao criar a tabela '%1': consulta = '%2', erro = '%3' + + +- +- +- +- ++ ++ ++ ++ + emu-info + Informação de emulador + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + informações de máquina + + +- +- ++ ++ + machine info-texts + textos de informação de máquina + + +- ++ + Machine info - %p% + Informações de máquina - %p% + + +- +- WARNING: missing '$end' in machine info file %1 +- AVISO: '$end' faltando no arquivo de informação de máquina %1 +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- AVISO: '$bio' faltando no arquivo de informação de máquina %1 +- +- +- +- WARNING: missing '$info' in machine info file %1 +- AVISO: '$info' faltando no arquivo de informação de máquina %1 +- +- +- ++ + machine info + informações de máquina + + +- ++ + WARNING: can't open machine info file %1 + AVISO: impossível abrir arquivo de informação de máquina %1 + + +- ++ + %n machine info record(s) imported + + %n registro de informação de máquina importado +@@ -3775,82 +3760,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + AVISO: falha ao alterar tabela %1: query = '%2', erro = '%3' + + +- +- ++ ++ + meta-data + meta dados + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + Base de dados de informação DAT + + +- +- +- ++ ++ ++ + importing %1 from '%2' + Importando '%1' de '%2' + + +- +- ++ ++ + software info-texts + textos de informação de software + + +- ++ + Software info - %p% + Informação de software - %p% + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + Importação parada, invalidando tabela %1 + + +- ++ + software info + informação de software + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + feito (importando %1 de %2) + + +- ++ + %n software info record(s) imported + + %n registro de informação de software importado +@@ -3858,43 +3840,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + AVISO: impossível abrir arquivo de informação de software %1 + + +- +- ++ ++ + emulator info-texts + textos de informação de emulador + + +- ++ + Emu info - %p% + Informação do emulador - %p% + + +- ++ + WARNING: missing '$end' in emulator info file %1 + AVISO: '$end' faltando no arquivo de informação de emulador %1 + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + AVISO: '$mame' faltando no arquivo de informação de emulador %1 + + +- ++ + WARNING: missing '$info' in emulator info file %1 + AVISO: '$info' faltando no arquivo de informação de emulador %1 + + +- ++ + emu info + informação de emulador + + +- ++ + %n emulator info record(s) imported + + %n registro de informação de emulador importado +@@ -3902,7 +3884,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + AVISO: impossível abrir arquivo de informação de emulador %1 + +@@ -7801,426 +7783,426 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + desconhecido + + +- +- +- ++ ++ ++ + good + bom + + +- +- ++ ++ + bad + ruim + + +- +- +- ++ ++ ++ + preliminary + preliminar + + +- +- ++ ++ + supported + suportado + + +- +- ++ ++ + unsupported + não suportado + + +- +- +- ++ ++ ++ + imperfect + imperfeito + + +- ++ + yes + sim + + +- ++ + no + não + + +- ++ + baddump + dump ruim + + +- ++ + nodump + sem dump + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + Desconhecido + + +- ++ + On + Ligado + + +- ++ + Off + Desligado + + +- ++ + audio + + + +- ++ + unused + não usado + + +- ++ + Unused + Não usado + + +- ++ + cpu + + + +- ++ + vector + vetor + + +- ++ + lcd + + + +- ++ + joy4way + + + +- ++ + joy8way + + + +- ++ + trackball + + + +- ++ + joy2way + + + +- ++ + doublejoy8way + + + +- ++ + dial + discador + + +- ++ + paddle + + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + + + +- ++ + lightgun + + + +- ++ + doublejoy4way + + + +- ++ + vdoublejoy2way + + + +- ++ + doublejoy2way + + + +- ++ + printer + impressora + + +- ++ + cdrom + + + +- ++ + cartridge + cartucho + + +- ++ + cassette + + + +- ++ + quickload + carregamento rápido + + +- ++ + floppydisk + disquete + + +- ++ + serial + + + +- ++ + snapshot + + + +- ++ + original + + + +- ++ + compatible + compatível + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: impossível abrir arquivo do ícone, por favor verifique permissões de acesso para %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + FATAL: impossível abrir o arquivo de ícone %1 + + +- ++ + 7z error + erro do 7z + + +- ++ + libarchive error + erro do libarchive + + +- ++ + Waiting for data... + Aguardando dados... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + FATAL: impossível iniciar o executável %1, arquivo '%2' não existe + + +- +- ++ ++ + emulator info: type = %1, version = %2 + informação do emulador: tipo = %1, versão = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: impossível determinar o tipo e versão do emulador + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Carregando, por favor espere... + + +- +- ++ ++ + loading favorites and play history + carregando favoritos e histórico + + +- +- ++ ++ + done (loading favorites and play history) + feito (carregando favoritos e histórico) + + +- +- ++ ++ + total start-up time: %1 + tempo total de inicialização: %1 + + +- ++ + XML data - %p% + dados XML - %p% + + +- ++ + verifying ROM status for '%1' + verificando estado da ROM para '%1' + + +- ++ + WARNING: couldn't find machine information for '%1' + AVISO: impossível encontrar informações de máquina para '%1' + + +- ++ + Updating + Atualizando + + +- ++ + Name + Nome + + +- ++ + Source file + Arquivo fonte + + +- ++ + Is BIOS? + É BIOS? + + +- ++ + Runnable + Executável + + +- ++ + Clone of + Clone de + + +- ++ + ROM of + ROM de + + +- ++ + Sample of + Exemplo de + + +- ++ + Is device? + É dispositivo? + + +- ++ + Year + Ano + + +- ++ + Manufacturer + Fabricante + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ ++ + +- + N/A + + + +- +- ++ ++ + error text = %1 + texto do erro = %1 + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + AVISO: o executável do emulador selecionado não pode ser identificado como MAME + + +- +- ++ ++ + %n supported set(s) + + +@@ -8228,546 +8210,546 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + AVISO: a saída do -listfull mudou, forçando uma atualização do cache de todos os emuladores + + +- ++ + BIOS + BIOS + + +- ++ + Size + Tamanho + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Junção + + +- +- ++ ++ + Region + Região + + +- ++ + Offset + Desvio + + +- +- +- +- ++ ++ ++ ++ + Status + Estado + + +- +- ++ ++ + SHA-1 + + + +- ++ + Device reference + Referência do dispositivo + + +- ++ + Chip + + + +- +- +- ++ ++ ++ + Tag + Etiqueta + + +- +- ++ ++ + Type + Tipo + + +- ++ + Clock + Relógio + + +- ++ + Display + + + +- ++ + Rotate + Rotação + + +- ++ + Flip-X + Inverte-X + + +- ++ + Width + Largura + + +- ++ + Height + Altura + + +- ++ + Refresh + Recarregar + + +- ++ + Pixel clock + Relógio do pixel + + +- ++ + H-Total + + + +- ++ + H-Bend + Curvatura-H + + +- ++ + HB-Start + Início-HB + + +- ++ + V-Total + + + +- ++ + V-Bend + Curvatura-V + + +- ++ + VB-Start + Início-VB + + +- +- ++ ++ + Sound + Som + + +- ++ + Channels + Canais + + +- ++ + Input + Entrada + + +- ++ + Service + Serviço + + +- ++ + Tilt + Declive + + +- ++ + Players + Jogadores + + +- +- ++ ++ + Buttons + Botões + + +- ++ + Coins + Moedas + + +- ++ + Control + Controle + + +- ++ + Minimum + Mínimo + + +- ++ + Maximum + Máximo + + +- ++ + Sensitivity + Sensitividade + + +- ++ + Key Delta + Variação da tecla + + +- ++ + Reverse + Reverso + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + valor DIP + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + AVISO: o cache da lista de máquinas é inválido, forçando atualização + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + AVISO: o banco de lista de máquinas é invalido, forçando atualização + + +- ++ + machine description + descrição da máquina + + +- ++ + tag + etiqueta + + +- ++ + year + ano + + +- ++ + manufacturer + fabricante + + +- ++ + machine name + nome da máquina + + +- ++ + ROM types + Tipos de ROM + + +- ++ + players + jogadores + + +- ++ + driver status + estado do driver + + +- ++ + source file + arquivo fonte + + +- ++ + rank + classificação + + +- ++ + category + categoria + + +- ++ + version + versão + + +- ++ + Filtering, please wait... + Filtrando, por favor espere... + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + AVISO: Defeito do XML: o nome '%1' é usado por vários conjuntos -- por favor informe os desenvolvedores do MAME + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + feito (verificando estado da ROM para todos os conjuntos, tempo = %1) + + +- ++ + pre-caching icons from 7z archive + fazendo pré-cache de ícones do arquivo 7z + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + feito (fazendo pré-cache de ícones do arquivo 7z, tempo = %1) + + +- +- ++ ++ + System / BIOS + Sistema / BIOS + + +- +- ++ ++ + System / Device + Sistema / Dispositivo + + +- ++ + correct + correto + + +- ++ + mostly correct + maioria correto + + +- ++ + incorrect + incorreto + + +- ++ + not found + não encontrado + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Padrão + + +- ++ + Configuration + Configuração + + +- ++ + Mask + Máscara + + +- ++ + Setting + Configuração + + +- ++ + Value + Valor + + +- ++ + Driver + + + +- ++ + Emulation + Emulação + + +- ++ + Color + Cor + + +- ++ + Graphic + Gráfico + + +- ++ + Cocktail + + + +- ++ + Protection + Proteção + + +- ++ + Save state + Salvar estado + + +- ++ + Palette size + Tamanho da paleta + + +- ++ + BIOS set + Conjunto de BIOS + + +- ++ + Description + Descrição + + +- ++ + Sample + Exemplo + + +- ++ + Disk + Disco + + +- ++ + MD5 + + + +- ++ + Index + Índice + + +- ++ + Adjuster + Ajustador + + +- ++ + Software list + Lista de Software + + +- ++ + Category + Categoria + + +- ++ + Item + + + +- ++ + Device + Dispositivo + + +- ++ + Mandatory + Mandatório + + +- ++ + Interface + + + +- ++ + Instance + Instância + + +- ++ + Brief name + Nome resumido + + +- ++ + Extension + Extensão + + +- ++ + RAM options + Opções de RAM + + +- ++ + Option + Opção + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + AVISO: impossível abrir cache de estado da ROM, por favor verifique as ROMs + + +- ++ + loading ROM state from cache + carregando estado da ROM do cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + feito (carregando estado da ROM do cache, tempo = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n estado de ROM carregado do cache +@@ -8775,34 +8757,34 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + processing machine list + processando lista de máquinas + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + AVISO: impossível determinar versão do emulador do cache da lista de máquinas + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + INFORMAÇÃO: o cache de lista de máquinas será atualizado devido ao novo formato + + +- ++ + loading machine data from machine list cache + carregando dados da máquina do cache da lista de máquinas + + +- +- ++ ++ + Machine data - %p% + Dados da máquina - %p% + + +- ++ + and %n device(s) loaded + + e %n dispositivo carregado +@@ -8810,7 +8792,7 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + , %n BIOS set(s) + + , %n conjuto de BIOS +@@ -8818,218 +8800,218 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Informação do estado da ROM: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + AVISO: cache de estado de ROM está imcompleto ou desatualizado, iniciando uma checagem automática de ROM + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + AVISO: cache de estado de ROM está imcompleto ou desatualizado, por favor re-verifique as ROMs + + +- ++ + determining emulator version and supported sets + determinando versão do emulador e conjuntos suportados + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + feito (determinando versão do emulador e conjuntos suportados, tempo = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL: impossível determinar o número de conjuntos suportados + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + AVISO: Cache de dados XML está incompleto, invalidando cache de dados XML + + +- ++ + verifying ROM status for all sets + verificando estado da ROM para todos os conjuntos + + +- ++ + ROM, CHD + + + +- ++ + CHD + + + +- ++ + loading XML data and recreating cache + carregando dados XML e recriando cache + + +- ++ + ? + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + AVISO: atributo nome está vazio na linha %1 do XML (conjunto será ignorado!) -- por favor informe os desenvolvedores do MAME e inclua a saída com problema do --listxml + + +- +- ++ ++ + ascending + crescente + + +- +- ++ ++ + descending + decrescente + + +- ++ + ROM state filter already active + Filtro de estado da ROM já ativo + + +- ++ + please wait for ROM verification to finish and try again + por favor aguarde a verificação de ROM terminar e tente novamente + + +- ++ + please wait for reload to finish and try again + por favor espere o fim do recarregamento e tente novamente + + +- ++ + applying ROM state filter + aplicando filtro de estado de ROM + + +- ++ + State filter - %p% + Filtro de estado - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + feito (aplicando filtro de estado de ROM, tempo = %1) + + +- ++ + saving favorites + salvando favoritos + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: impossível carregar arquivo de favoritos para escrita, caminho = %1 + + +- ++ + saving play history + salvando histórico de jogadas + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: impossível abrir arquivo de histórico de jogadas para escrita, camiho = %1 + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + + + +- ++ + S: + + + +- ++ + T: + T: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + AVISO: chamada de auditoria do emulador não acabou sem erros -- código de saída = %1, estado de saída = %2 + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + quebrado + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERRO: impossível abrir cache de estado da ROM para escrita, caminho = %1 + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: impossível iniciar o executável do MAME dentro de um tempo razoável, desistindo + + +- +- +- ++ ++ ++ + ROM check - %p% + Verificação da ROM - %p% + + +- +- ++ ++ + Optional + Opcional + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + verificando estado real de %n conjunto não mencionado durante audição +@@ -9037,7 +9019,7 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + feito (verificando estado real de %n conjunto não mencionado durante audição) +@@ -9045,56 +9027,56 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + feito (verificando estado da ROM para '%1', tempo = %2) + + +- +- ++ ++ + ROM state + Estado da ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + Estado da ROM para '%1' é '%2' + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + feito (carregando dados da máquina do cache da lista de máquinas, tempo = %1) + + +- ++ + parsing machine data and recreating machine list cache + analisando dados das máquinas e recriando cache de lista de máquinas + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + ERRO: impossível abrir cache da lista de máquinas para escrita, caminho = %1 + + +- +- ++ ++ + sorting machine list by %1 in %2 order + ordenando lista de máquinas por %1 na ordem %2 + + +- +- ++ ++ + restoring machine selection + restaurando seleção de máquinas + + +- ++ + done (processing machine list, elapsed time = %1) + feito (processando lista de máquinas, tempo = %1) + + +- ++ + %n machine(s) + + %n máquina +@@ -9102,47 +9084,47 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + AVISO: lista de máquinas não totalmente analisada, invalidando cache de lista de máquinas + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + AVISO: lista de máquinas desatualizada, invalidando cache da lista de máquinas + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + feito (carregando dados XML e recriando cache, tempo = %1) + + +- ++ + pre-caching icons from ZIP archive + pre-cache de ícones do arquivo ZIP + + +- ++ + Icon cache - %p% + Cache de ícones - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + feito (pre-cache de íconos do arquivo ZIP, tempo = %1) + + +- ++ + pre-caching icons from archive + fazendo pré-cache dos ícones do arquivo + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + feito (fazendo pré-cache de ícones do arquivo, tempo = %1) + + +- ++ + %n icon(s) loaded + + %n ícone carregado +@@ -9150,77 +9132,77 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + pre-caching icons from directory + pre-cache de ícones do diretório + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + feito (pre-cache de ícones do diretório, tempo = %1) + + +- ++ + loading icons from cache database + carregando ícones da base de dados do cache + + +- ++ + done (loading icons from cache database, elapsed time = %1) + feito (carregando ícones da base de dados do cache, tempo = %1) + + +- ++ + loading category.ini + carregando category.ini + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + ERRO: impossível abrir '%1' para leitura -- arquivo category.ini não disponível + + +- ++ + done (loading category.ini, elapsed time = %1) + feito (carregando category.ini, tempo = %1) + + +- ++ + loading catver.ini + carregando catver.ini + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + ERRO: impossível abrir '%1' para leitura -- arquivo catver.ini não disponível + + +- ++ + done (loading catver.ini, elapsed time = %1) + feito (carregando catver.ini, tempo = %1) + + +- ++ + %1 category / %2 version records loaded + %1 categoria / %2 versão de registros carregados + + +- ++ + Category view - %p% + Visão de categoria - %p% + + +- ++ + %n category record(s) loaded + + %n registo de categoria carregado +@@ -9228,7 +9210,7 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + Version view - %p% + Visão de versão - %p% + +@@ -9550,229 +9532,229 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + MainWindow + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Padrão + + +- ++ + Toggle maximization of embedded emulator windows + Ativar/desativar maximização das janelas de emuladores embutidos + + +- ++ + Searching machines - %p% + Buscando máquinas - %p% + + +- ++ + Show machine/software titles + Mostrar títulos das máquinas/softwares + + +- ++ + Show machine- or software-titles at the bottom of all images + Mostrar títulos de máquinas ou software embaixo de qualquer imagem + + +- ++ + Embed emulator widget + Embutir widget do emulador + + +- ++ + &Embed + &Embutir + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Matar emulador(res) selecionado(s) (envia sinal KILL para o(s) processo(s) do emulador) + + +- ++ + &Kill + &Matar + + +- +- ++ ++ + Copy emulator command line to clipboard + Copiar linha de comando do emulador para a área de transferência + + +- +- ++ ++ + &Copy command + &Copiar comando + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jogar + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jogar &embutido + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Para &favoritos + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Verificar estado da &ROM + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analisar ROM... + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + Reconstruir ROM da máquina atual com o ROMAlyzer + + +- ++ + Remove from favorites + Remover dos favoritos + + +- +- ++ ++ + &Remove + &Remover + + +- ++ + Clear all favorites + Limpar favoritos + + +- +- ++ ++ + &Clear + &Limpar + + +- ++ + Save favorites now + Salvar favoritos agora + + +- +- ++ ++ + &Save + &Salvar + + +- ++ + Remove from played + Remover dos jogados + + +- ++ + Clear all played + Limpar todos os jogados + + +- ++ + Save play-history now + Salvar histórico de jogadas agora + + +- +- +- +- ++ ++ ++ ++ + Set tab position north + Definir posição da aba ao norte + + +- +- +- +- ++ ++ ++ ++ + &North + &Norte + + +- +- +- +- ++ ++ ++ ++ + Set tab position south + Definir posição da aba ao sul + + +- +- +- +- ++ ++ ++ ++ + &South + &Sul + + +- +- +- +- ++ ++ ++ ++ + Set tab position west + Definir posição da aba ao Oeste + + +- +- +- +- ++ ++ ++ ++ + &West + &Oeste + + +- +- +- +- ++ ++ ++ ++ + Set tab position east + Definir posição da aba ao Leste + + +- +- +- +- ++ ++ ++ ++ + &East + &Leste + +@@ -9790,66 +9772,66 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + Aguardando dados... + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + por favor espere o filtro de estado de ROM terminar e tente novamente + + +- +- ++ ++ + please wait for ROM verification to finish and try again + por favor aguarde a verificação de ROM terminar e tente novamente + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + por favor espere a verificação de imagem terminar e tente novamente + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + por favor espere o ROMAlyzer terminar a análise atual e tente novamente + + +- +- ++ ++ + ROM verification already active + Verificação de ROM já ativa + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + por favor espere o fim do recarregamento e tente novamente + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirmar + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9860,22 +9842,22 @@ Ele vai sobrescrever dados de cache existente. + Você realmente quer verificar o estado de todas as ROMs agora? + + +- ++ + automatic ROM check triggered + verificação automática de ROM ativado + + +- ++ + image cache cleared + cache de imagens limpo + + +- ++ + icon cache cleared + cache de ícones limpo + + +- ++ + freed %n byte(s) in %1 + + liberado %n byte em %1 +@@ -9883,7 +9865,7 @@ Você realmente quer verificar o estado de todas as ROMs agora? + + + +- ++ + %n entry(s) + + %n entrada +@@ -9891,7 +9873,7 @@ Você realmente quer verificar o estado de todas as ROMs agora? + + + +- ++ + removed %n byte(s) in %1 + + removido %n byte em %1 +@@ -9899,7 +9881,7 @@ Você realmente quer verificar o estado de todas as ROMs agora? + + + +- ++ + %n file(s) + + %n arquivo +@@ -9907,167 +9889,167 @@ Você realmente quer verificar o estado de todas as ROMs agora? + + + +- ++ + YouTube on-disk cache cleared (%1) + Cache em disco do YouTube limpo (%1) + + +- ++ + ROM state cache file '%1' removed + arquivo de cache de estado de ROM '%1' removido + + + +- ++ + About Qt + Sobre o Qt + + +- ++ + ERROR: no match found (?) + ERRO: nenhuma ocorrência encontrada (?) + + +- +- ++ ++ + Export to... + Exportar para... + + +- +- ++ ++ + <inipath>/%1.ini + + + +- +- +- +- ++ ++ ++ ++ + Select file... + Selecionar arquivo... + + +- +- ++ ++ + <p>No data available</p> + <b>Nenhum dado disponível</b> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Nenhum dado disponível + + + +- ++ + Embedded emulators + Emuladores embutidos + + +- ++ + Release emulator + Soltar emulador + + +- ++ + WARNING: no matching window for emulator #%1 found + AVISO: nenhuma janela para o emulador #%1 encontrada + + +- ++ + Embedding failed + Embutir falhou + + ++ + +- + Scanning pause key + Escaneando tecla de pausa + + +- ++ + Are you sure you want to clear the favorites list? + Tem certeza que deseja limpar a lista de favoritos? + + +- ++ + Are you sure you want to clear the play history? + Tem certeza que deseja limpar o histórico de jogadas? + + +- +- ++ ++ + Choose export file + Escolha o arquivo de exportação + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Todos os arquivos (*) + + +- +- ++ ++ + Choose import file + Escolha o arquivo de importação + + +- +- ++ ++ + WARNING: invalid inipath + AVISO: inipath inválido + + +- +- ++ ++ + stopping current processing upon user request + parando processamento atual devido à requisição do usuário + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Suas mudanças ainda não foram aplicadas. + Sair realmente? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Existem um ou mais emuladores em execução. + Eles devem ser mortos ao sair? + + +- ++ + There are one or more running downloads. Quit anyway? + Existem um ou mais downloads em execução. + Sair mesmo assim? + + +- ++ + cleaning up + limpando + + +- ++ + aborting running downloads + abortando downloads em execução + + +- ++ + saving main widget layout + salvando layout do widget principal + +@@ -10078,292 +10060,292 @@ Sair mesmo assim? + Limpar cache do ProjectMESS + + +- ++ + Default configuration + Configuração padrão + + +- ++ + ProjectMESS in-memory cache cleared (%1) + Cache em memória do ProjectMESS limpo (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + AVISO: impossível remover o arquivo de cache '%1' do estado da ROM, por favor cheque as permissões + + +- ++ + ProjectMESS page for system '%1' + Página do ProjectMESS para o sistema '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Baixando página do ProjectMESS para o sistema '%1', por favor espere... + + +- ++ + disconnecting audio source from audio sink + desconectando fonte de áudio do sumidouro de áudio + + +- +- ++ ++ + Enter search string + Entre com o texto de busca + + +- ++ + Dock / undock this widget + Anexar / desanexar este widget + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + nota: os caracteres especiais $, (, ), *, +, ., ?, [, ], ^, {, |, } e \ devem ser precedidos pelo caracter de escape quando forem utilizados literalmente! + + +- +- +- +- ++ ++ ++ ++ + Reset + Redefinir + + +- ++ + Negate search + Negar busca + + +- ++ + sorry, devices cannot run standalone + desculpe, dispositivos não podem ser executados sozinhos + + +- ++ + No devices available + Nenhum dispositivo disponível + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + padrão + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + &Reconstruir ROM... + + +- ++ + Include BIOS sets + Incluir conjuntos de BIOS + + +- ++ + Include device sets + Incluir conjuntos de dispositivos + + ++ + + +- ++ + + +- + Unlock ranks + Destravar classificações + + +- ++ + machine list reload is already active + recarregamento da lista de máquinas já está ativa + + +- +- ++ ++ + saving machine selection + salvando seleção de máquinas + + +- ++ + ERROR: can't load HTML file '%1' + ERRO: impossível abrir arquivo HTML '%1' + + +- ++ + ERROR: can't load PDF viewer from '%1' + ERRO: impossível abrir visualizador PDF em '%1' + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + por favor espere o ROMAlyzer terminar a reconstrução atual e tente novamente + + +- ++ + triggering an automatic ROM check on next reload + ativando uma verificação de ROM automática na próxima execução + + +- ++ + machine list cache file '%1' removed + arquivo de cache da lista de máquinas '%1' removido + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + AVISO: impossível remover o arquivo de cache '%1' da lista de máquinas, por favor cheque as permissões + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + INFORMAÇÃO: o modo arcade precisa ser configurado primeiro, iniciando o diálogo respectivo + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + modo arcade: executando o Arcade QMC2, comando = '%1' + + +- ++ + WARNING: failed launching QMC2 Arcade + AVISO: falha ao iniciar o Arcade QMC2 + + +- ++ + ProjectMESS page for '%1' / '%2' + Página do ProjectMESS para '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Baixando página do ProjectMESS para '%1' / '%2', por favor espere... + + +- ++ + Emulator for this machine + Emulador para esta máquina + + +- ++ + please wait for sorting to finish and try again + por favor espere o fim da ordenação e tente novamente + + +- ++ + destroying YouTube video widget + destruindo widget de vídeos do YouTube + + +- ++ + saving current machine's favorite software + salvando software favorito da máquina atual + + +- ++ + saving current machine's device configurations + salvando configurações de dispositivos da máquina atual + + +- ++ + destroying machine list + destruindo lista de máquinas + + +- ++ + destroying emulator configuration instances + destruindo instâncias de configuração do emulador + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + Mostrar títulos de máquina ou software somente quando a lista de máquinas não está visível devido ao layout atual + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- +- +- +- ++ ++ ++ ++ + Component setup + Configuração de componente + + +- +- +- +- ++ ++ ++ ++ + Component setup... + Configuração de componente... + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + destroying media player + destruindo tocador de mídia + + +- ++ + destroying image widgets + destruindo widgets de imagens + + +- ++ + destroying open dialogs + destruindo diálogos abertos + + +- ++ + destroying process manager + destruindo gerenciador de processo + + +- ++ + killing %n running emulator(s) on exit + + matando %n emulador em execução na saída +@@ -10371,7 +10353,7 @@ Sair mesmo assim? + + + +- ++ + keeping %n running emulator(s) alive + + mantendo %n emulador em execução vivo +@@ -10379,60 +10361,60 @@ Sair mesmo assim? + + + +- ++ + destroying network access manager + destruindo gerenciador de acesso à rede + + +- ++ + so long and thanks for all the fish + até logo e obrigado pelos peixes + + +- ++ + Welcome to QMC2 v%1! + Bem vindo ao QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Carregando, por favor espere... + + +- ++ + loading style sheet '%1' + carregando estilos '%1' + + +- ++ + removing current style sheet + removendo estilo atual + + +- ++ + using default color palette for GUI style '%1' + usando paleta de cor padrão para o estilo de interface '%1' + + +- ++ + using custom color palette + usando paleta de cores personalizada + + +- ++ + YouTube index - %p% + Índice do YouTube - %p% + + +- ++ + %n video info record(s) loaded + + %n registro de informação de vídeo carregado +@@ -10440,144 +10422,144 @@ Sair mesmo assim? + + + +- ++ + Select one or more audio files + Selecione um ou mais arquivos de audio + + +- ++ + Add URL + Adicionar URL + + +- ++ + Enter valid MP3 stream URL: + Entre com uma URL de stream MP3 válido: + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + reprodutor de músicas: informação da faixa: título = '%1', artista = '%2', album = '%3', gênero = '%4' + + +- ++ + Buffering %p% + + + +- +- ++ ++ + running + executando + + +- +- ++ ++ + Play tagged - %p% + Jogar etiquetados - %p% + + +- ++ + Add favorites - %p% + Adicionar aos favoritos - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + por favor espere a atividade atual terminar e tente novamente (essa operação em lote só pode ser executada exclusivamente) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + Ferramenta de ROM com etiquetados - %p% + + +- +- ++ ++ + Tag - %p% + Etiquetar - %p% + + +- +- ++ ++ + Tagging, please wait... + Etiquetando, por favor espere... + + +- +- ++ ++ + Untag - %p% + Remover Etiqueta - %p% + + +- +- ++ ++ + Untagging, please wait... + Removendo etiquetas, por favor espere... + + +- +- ++ ++ + Invert tag - %p% + Inverter etiqueta - %p% + + +- +- ++ ++ + Inverting tags, please wait... + Invertendo etiquetas, por favor espere... + + +- ++ + External browser + Navegador externo + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Detalhe do software + + +- ++ + Choose overlay color + Escolha a cor de sobreposição + + +- ++ + WARNING: ROM path '%1' doesn't exist + AVISO: caminho de ROMs '%1' não existe + + +- ++ + WARNING: ROM path '%1' isn't accessible + AVISO: caminho de ROMs '%1' não está acessível + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! +@@ -10586,7 +10568,7 @@ Please check the 'rompath' option in the global emulator configuration + Por favor verifique a opção 'rompath' nas configurações globais de emulador para corrigir, caso contrário as ROMs provavelmente não estarão disponíveis para o emulador! + + +- ++ + The ROM paths + + %1 +@@ -10603,63 +10585,63 @@ não existem ou estão inacessíveis. + Por favor verifique a opção 'rompath' nas configurações globais de emulador para corrigir, caso contrário as ROMs provavelmente não estarão disponíveis para o emulador! + + +- ++ + Check ROM path + Verificar caminho das ROMs + + +- ++ + processing global emulator configuration + processando configuração global do emulador + + ++ + +- + Export global MAME configuration + Exportar configuração global do MAME + + +- ++ + Import from... + Importar de... + + ++ + +- + Import global MAME configuration + Importar configuração global do MAME + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + Habilitar processamento dos notificadores de saída do MAME (força '-output console') + + +- +- ++ ++ + <inipath>/mame.ini + + + +- +- +- ++ ++ ++ + paused + pausado + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Ativar/desativar pausa automática de emuladores embutidos (segure pressionado para abrir o menu) + + +- ++ + Scan the pause key used by the emulator + Escanear tecla de pausa usada pelo emulador + + +- ++ + Scan pause key... + Escanear tecla de pausa... + +@@ -10667,39 +10649,39 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + Icon + Ícone + + +- ++ + setting GUI style to '%1' + configurando estilo da interface para '%1' + + +- ++ + WARNING: GUI style '%1' not found + AVISO: estilo de interface '%1' não encontrado + + +- ++ + WARNING: can't open style sheet '%1' + AVISO: impossível abrir folha de estilo '%1' + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + Choose file to store download + Escolha o arquivo para salvar o download + +@@ -10712,7 +10694,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Icon / Value + Ícone / Valor + +@@ -10721,10 +10703,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Year + Ano + +@@ -10733,10 +10715,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Fabricante + +@@ -10745,10 +10727,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Name + Nome + +@@ -10757,10 +10739,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Tipos de ROM + +@@ -10769,9 +10751,9 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + Category + Categoria + +@@ -10780,9 +10762,9 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + Version + Versão + +@@ -11022,9 +11004,9 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -11101,10 +11083,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Players + Jogadores + +@@ -11200,10 +11182,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Estado do driver + +@@ -11220,7 +11202,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + &Notes + &Notas + +@@ -11333,10 +11315,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Tag + Etiqueta + +@@ -11345,10 +11327,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Source file + Arquivo fonte + +@@ -11358,10 +11340,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Rank + Classificação + +@@ -11430,13 +11412,13 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Machine / Attribute + Máquina / Atributo + + + +- ++ + Machine / Clones + Máquina / Clones + +@@ -11447,7 +11429,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Category / Machine + Categoria / Máquina + +@@ -11458,19 +11440,19 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Version / Machine + Versão / Máquina + + + +- ++ + Search for machines (not case-sensitive) + Buscar por máquinas (não sensível à caixa) + + + +- ++ + Search for machines + Buscar por máquinas + +@@ -11671,9 +11653,9 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + Add current machine to favorites + Adicionar máquina atual para os favoritos + +@@ -11712,10 +11694,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + Verificar estado das ROM da máquina atual + +@@ -12257,7 +12239,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Internal browser + Navegador interno + +@@ -12462,12 +12444,12 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + ++ + + +- ++ + + +- + Lock ranks + Travar classificações + +@@ -12561,7 +12543,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Internal PDF viewer + + +@@ -12751,7 +12733,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + Forçar limpar (remover) TODOS os caches relacionados à emuladores + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12762,24 +12744,24 @@ emulador(es) dentro de um limite de tempo razoável. + Tentar novamente? + + +- ++ + Information + Informação + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Desculpe, o emulador teve uma morte triste :(. + + ++ + +- + Toggle embedder options (hold down for menu) + Ativar/desativar opções para embutir (segure para exibir o menu) + + +- +- ++ ++ + last message repeated %n time(s) + + última mensagem se repetiu %n vez +@@ -12787,65 +12769,65 @@ Tentar novamente? + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + Jogar máquina selecionada + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Jogar máquina selecionada (embutida) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + Analisar ROM da máquina atual com o ROMAlyzer + + +- ++ + To favorites + Para favoritos + + +- ++ + Kill emulator + Matar emulador + + +- ++ + &Kill emulator + &Matar emulador + + +- ++ + destroying audio effects dialog + destruindo janela de efeitos de áudio + + +- ++ + emulator #%1 is already embedded + emulador #%1 já está embutido + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + AVISO: múltiplas janelas para o emulador #%1 encontradas, escolhando ID de janela %2 para embutir + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + embutindo emulador #%1, ID da janela = %2 + +@@ -15693,21 +15675,6 @@ Tem certeza que deseja fazer isso? + Browse system notes template + Procurar modelo das notas de sistema + +- +- +- Load software information database (from history.dat) +- Carregar base de dados de informações de software (de history.dat) +- +- +- +- Software information database - history.dat (read) +- Banco de dados de informações de software - history.dat (leitura) +- +- +- +- Browse software information database (history.dat) +- Procurar por base de dados de informações de software (history.dat) +- + + + Define additional artwork classes for systems and software-list entries +@@ -15856,11 +15823,6 @@ Tem certeza que deseja fazer isso? + Archive + Arquivo + +- +- +- MAME machine information database - history.dat (read) +- Base da dados de informação de máquinas do MAME -- history.dat (leitura) +- + + + Browse MESS emulator information database (messinfo.dat) +@@ -15881,21 +15843,11 @@ Tem certeza que deseja fazer isso? + Machine favorites file (write) + Arquivo de máquinas favoritas (escrita) + +- +- +- Load MAME machine information database (history.dat) +- Carregar base de dados de informações de máquinas do MAME (history.dat) +- + + + Machine info (MAME) + Informação de máquina (MAME) + +- +- +- Browse MAME machine information database (history.dat) +- Procurar por base de dados de informação de máquinas do MAME(history.dat) +- + + + Video snap folder +@@ -16001,6 +15953,36 @@ Tem certeza que deseja fazer isso? + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ Banco de dados de informações de software - history.xml (leitura) ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ Base da dados de informação de máquinas do MAME -- history.xml (leitura) ++ ++ ++ ++ Browse software information database (history.xml) ++ Procurar por base de dados de informações de software (history.xml) ++ ++ ++ ++ Load MAME machine information database (history.xml) ++ Carregar base de dados de informações de máquinas do MAME (history.xml) ++ ++ ++ ++ Load software information database (from history.xml) ++ Carregar base de dados de informações de software (de history.xml) ++ ++ ++ ++ Browse MAME machine information database (history.xml) ++ Procurar por base de dados de informação de máquinas do MAME(history.xml) ++ + + + System manual folder (read) +@@ -17254,28 +17236,28 @@ Tem certeza que deseja fazer isso? + + QObject + +- +- ++ ++ + correct + correto + + +- ++ + incorrect + incorreto + + +- ++ + mostly correct + maioria correto + + +- ++ + not found + não encontrado + + +- ++ + + + +@@ -17293,45 +17275,45 @@ Tem certeza que deseja fazer isso? + Padrão + + +- ++ + Import from... + Importar de... + + ++ + +- + Export machine-specific MAME configuration + Exportar configuração do MAME específica de máquina + + ++ + +- + Import machine-specific MAME configuration + Importar configuração do MAME específica de máquina + + +- ++ + Setting up the GUI, please wait... + Configurando a Interface, por favor espere... + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + Recursos Phonon habilitados - usando Phonon v%1 + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Suporte do SDL à joystick habilitado - usando SDL v%1.%2.%3 + +@@ -17444,19 +17426,19 @@ Tem certeza que deseja fazer isso? + Informação de estado para a lista de software '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 + + +- ++ + + yes + sim + + +- ++ + + no + não + + +- ++ + + partially + parcialmente +diff --git a/data/lng/qmc2_pt_BR.qm b/data/lng/qmc2_pt_BR.qm +index d01518d63d0435dda309ddf4b2247ae902c58288..67c7bb539ab7d3467b62753646ca01c73c7be93e 100644 +GIT binary patch +delta 34220 +zcmXV&bzD`?)5kyC2RpDkF|b9&FN%s7D0X*%ih(WmwXhqpTTu~g)E@?RD+YEe*olgm +z_zZ{V4`1(dk8tm~yR$Q&nc3y%>=LoTB^)0A^UHnl)9TPGMe-l(vEk^WtpL=J5#8&x +zss{uQp;tv=*c_V{zfUX%(fm5GB4prN;(su_i%m-$Bzl5hdO`F8X7nUB0A`IQHU)P} +zeIH-&YN5o|;O;LRbkPB*cQK6%h7vmh3zh)91lX0GHf6^T#Nl9*2Lj?PP{G5d9O4hi +z{@_>2*))3;aWTZoX2ek9aN<(pa^f=LQQ~sqbK(k!RSrWJ7r~##*fggZ@g|sG2Ag^u +zJ&61To{-+AIsJ=Y}BI +zU%*B7G){kFQx|Okl*mT+>!fi;W}C8qh)rEIh&YA*pT0mUXL#DwMagztyfQ!z$On{d +z4mqfI$OK;Av1BH_q!HUjmOzw)=!+25nPi(*{VZu5SP5_~LAFUFPqc&v>Q4qgMz0%g +zh8#`L)$lanlg=i;(%Po_>1tDZ7Xuo(!bC16_9hb=Z_^=rlJU|F-GOYW(R3K&WYaPm +zfW~zpR?vVou17Xhl6W8d5WSJlY4H40$;RtLrqD>YtOT})W`@XLlF<`I3@s?4s`igK +zl1%83O+ANxzjb?X|H`R!K+le(i%C$G=o_>d20rLP8do~f7(q`;_tlwIHqC|r;!TKi +zv?|-4C6l3_Bl1@?B1FBw7ieD#=yTF0BYRJM&EL>S6IBY?Fj0qgCOR&{+V}+MMAJ5k +z76Fkb(i0O!gCS}BH`=D!KttNO2h?^Nkj^}eqecr +z&^<4(&A)8&%k|)p)B8jHYzaAoR#WGWkn_g@Ne9V|6bH{c7?K{AU(FA>Wej+}0Gqn! +zcF3(a$p&ctw}ru^y8{_<96I1M8UFhgS?j?yf7`0R92a4(>T)`eRqS(HlEy4H^BY1P3BkCCiinmi? +zlWQYX0YS5S8LFTY^qo^s6*t42?PJr*as;XdeeV}BP~J2iwHrV+3;_>RP>tN+z!ZP` +zf_3<7lZ(VOW_gyzm-lUo`ft-1Lz6W@iv8gxFgKi>|J2n6+!qEemPeT^D +znQn$a?XF4=yE4%Yrf46i;}q8F(S0I2J~oXH%B1m)t4*GDZW_PPtkTcPfG0Nf&izoQ +z=>f}6gt{jn^h&7TAU$y}zHnhoBkv-6BQ82)!&h;pbwHk>{Q}Wc)qkbD=NN +zq7w>cj-rRrD7bDKboHeuv~U{Cr9>3{Fb3jA9Ew}yPj^S6c-E%mY8*#VJc5R+cr}zP +zu$|)QRFoW&AJ)3BaGBSdmZAq-qMAY--iT7O$=RMueMN|N3sJVPEAcqW`h~)B3~Yz8!)Af4 +zPq8UF+^}iFGofs%b>|2}S+Z`PvxH62DKpA$On{lIY4mzPm)wf7sYaGF5oNEQgXr7| +zWgpUmbe;~^um8a2yg>Q3anKzXp!_UyUAw!WLczY!PrIYy4QDubo&l()Hv;8$qI!TA +zcr-ZJ3bMN=8Z{%U +zoF0TmLGIux(Wcd}92&jv4>_|T8W*kytIsPm9z*`2Ll-nY9S-5@2cNREtoD>lW85j5 +zEcUZa&U>XXCR-ZMw6$s6Pr}D7Be}+__2E;^8=_J6kfZ5KI$A8Fm!XioYr^NhB;aWg +z`1Bx&eDxK4diNp;?Q4@?%WYGP=kN)t2i<=+ny%;t>9@+JHEuV2Jx_wKxR%E4MQxh( +z$!Io*oM_f>Xg-ocSioPKY~FV?-_n|9#IGG%RKEqxDQ}beMWcn!dGO~=(88B|&!4Gi +z(Vk?^^YLi;AI0G4UuboN0)OsUv_5}}WKJ=gdj3eX=`@>cxiZ>%2EyFhfwuimfqA_~ +z+to$D1};Rqy3Q0b+|X_o`L+}%w3{8~05A26E)K!!J00!jh5|3o+Z5;f+0-HXZ5q#m +zXzw8*+YUv0lI#4VlTE#{1JMT>PUvuoC#4od{x&+uXw-`DG_J>vP5;|Tw +z4oq2wPFWnY=@-AE)4=-RpUa_hdRjfJKcq48p-r>tLK>gUvT5ZRh%SAP!rVEJE>rh| +zb*h=hH(hM +zpy!2TSlEPKo5}r0hN1U~f?)0w;TP%#7L{aETzLe4NschrW%R2|a^`AN^gHyAbd?(d +zL@Z2eZv^Zlao6lC0;0P@I62VY&=lO5jQ(VDSpF3K$)?!X)94@VO|oes9H|$g^8pN; +z8cHsm+Y}8mV;~uqzBv(t+@{g}0T`5OT;wQiPJ4kttHy)(a>t;120SJXG6Bn6{(|cuU81%=ozptV|uux_lDs +zS|nya_zB&kG3NBi3iaI`^UAnV&e#R>UQ-t1`W*8c#Xxijz~YAiuvU&n$h>5*lphEQ +z;SeQ;VM!n*oHrGgEs`Fgo<5(2NHvR22r +zRwVSD{c)ZGriw3%i^ne0gO|dkrle~J49Df$AHkO-BeuMw8%%6=#D2N~xygaJ2W=q_ +zf5*+fOCX>2$E`Sey<`mTI_H26Nr(F;5Gr48+#gbxJXkf{pG+Uz%DFecc$P?0W!wd#qcH}1?*^Fo8tX_ym>p3Qs0_*JDjwym;lE+O+!B8J>CuN2cvT0 +z!>}1JO`hY^Taxd4*5mUIGP*r4ZOY!m@c9O%Gr2w>amZF!b9>=SgQDPFTjSe8l7H_a +zkmMZ)t4V7lAG`z}5rrRrDAlPx7QYYx)@uoVwXaH3Pzb*UJHZ@EavWtoX#z4Lw6SeGQgw%m(n|qglpO9&;qHjJGbpypCp>m#zhS +z;moqSjsRcV)TRmhpG~XE6XqQGp2Tek%i*~K$|W1iHRc;BcXyWCg)-2K?OEQ^lcDpc +zWBDgkCp~+PBc +zI{YJ~_j6W!WN)ZTk67``Nl>r1dw75Bi*Si(v*pd32rk4<^K +z3@f{YvO1r4tnAe@P;HvAvTusR+H#wf>wg?9{D^{1(JKNcX)lJL{S!xHXcXczl>?f?=J<43mzqV;|yD_hGrD25?XI`Ia +z{j=nCtbQETN4~va4R^JMNO595hsYzA9mRYuk-T4bowc|^M$~7bO+9P`Yq^OMs5cK; +z>nRE{=UCP@(;Mgw=~>&cg&^N7WgT8HOg3*fhbnSiiiaZMRQn +z16Ov0sQQ-;bgcPF<&MT|;Ce~}KbEs;RuPY;-k-<@{!QgR7U;1FyvBSMn6Mf8*I_nz +zPpqKiw>HbtgsMCVYY*h^GsbaJ4Q8e5VX;WpI$L7Y? +z1;4YN%^MsHF?NB2EjUXa?RGD=aQ$kMM!ng>-P^&A?_i6XY=fCv*QPb5AX{4NAXvMi +zZ0X}7kiBxSWqIOZ;?J>VUi5R0e>SaAm)Y`Y7cl>2Y*io1ytYhaYp;evM%`xXD2?Pj +z9zT^S;aWtvC(7sR%pRG7;u$ +zb#`z`FsxOK{cr78syqd=BUIf|j?mofsOuZ>A@|uS=WH-**0ZzRkaEe#&W*kWo&7XB +zckBXW-XrXyqD*X6BD=Wg1>~Z2>{8ovQ2TnbOUG%sS!LMe6?8wk4!criKFpxk>}mlT +zfwQaF^`TT+%XFT_l~UvZ<84|_RoShav*1v@O0rvZ=s#3Ho0bk{x9(HCe^HLz8P=Ps +z?)hw*JB8STj8sMO&dDB(YzV9HAog%$Y0AEvvPV%Dskq_79-XAs;gQ~^STlk>xmN-r +zHkQR_Az^a(IZGJ%n2O>#*^4fjVT~WeUQXTbfN_4wUcOESfA@gBilM@7@(}j=X%b|n +zyzF&6iO_l-*jvvRP=5!pcXe+iktv}yI9&z;6NQ--&SJDnT>C71AY +zqsEX5xL}j5n#I$1qVh$KzC3;RvJl@qc?MUq?e@cY#`!eUyA;p7noP2rJI{RKGaRhy +z9{WO!@4>TxDyYE?c@|$X`k$M5_KsVjI +z37&T|sr=jyUeHk;R+*K&P|3=Wt=xE#bXOr0eRR*s+n;_Pq0ZP +zxofSKV9y$J*X3=Ye;?znJ4S#tzG0Jpx^L4wp2Ev*Y)iqj0xx%*BEk26yxbSZM2J^M +zdHGT~z<7o}gl0qr%*?Ycq(oalFpeHxM5;@_PNUK|Ju{-fpDst90SsRCDDq +zKX`*o6f}KqWSaYyjvAYG4E#J-P-=4p-bW2v&@2-@|JgRw~ks@XL-*h +zIcTaf^4_tHA#&8`{<){YxL4$TKD$F!>B##%rxsMxTs)xFHmWRn@_}`J!_@o51Dz-# +zo7{m1=A#iy$P>>4`)37@-jl`?LwR7_4Di~ULVODpbo776hs#sYMbFqY)&IwbPYQ+F +zGJ=oXxf?q77CwsFNBYtpKI+0%=rLn?PL2;nhiqgBG9Y`kVS~DdYIWV-)i?Y~qf6<-re} +z=9A|X2g}f(PjMst)Zh)DnMm$yc?CYZ3azqTA8eXEu6)jzH(=i`@df8eZ47D4Q!`Df +z6xif1CfXGB!_s)NoYQo%FvZABfF9o(wTw^evd)yt}U8_-vfVMV@c5UtwV+4=5{ +z6pVAW=X;(8fiE1$_c~J(p;9Zpuj6>iv3+dHL2i8C6{-XGzsIAxZ6Lq1mq+b)rjYl9 +z?+>6tPY1*Ir=pc^s8u7_nXgSt~P@i@R`SaKLfF` +z5%ejR?&c`4 +zx4rnit@pt04znr0rswzX1yG+Vl0V2txph)k{^%bG!I$;;<2VDBa|VBQm-N`|@BDeX +z@<6u&HdX!ro^X6G&@&Hz<1rFg^_st#MxK0ELH^+><#lU{@Q(#fLOQy>_#gk$iaN2)X4_;_yYO%G4MdYZJZVmQ@X_sf($?B! +zO#OJ$!C>G(QU3Ep2@;6+_^(%QAO=6=zkWGG#~kN>T-rc(_#gi>jpRWhLBF_bHSU$x>zIOMhx4%TX`)bb +zDi(%Z5QUcPr#apsict00+T|;XMg>4l-zkc3Bjc{VR+QL6<TR +zN&Y{Gm{6PM;uKNRmFBiv6Hz+A39Psh<%NWPJWrIbNU%LN>S}g0$7)MqI#BH)Zwo!YEGmQf7R2X=665vcJqZt3lfUoTM389 +z$z0(3!-U7%s?->KDr%>Y3~-w%Jd-^w%)3S&GECHY{v3My7*Ur;lkn*z>Q?y% +zvFNR+>wA?pmN<#JDGBc~Rdj2W2dc8G=$@V4pp2X7?n1_R +zafs+1u>{uIL83?Mh(%Twy$23~wdRxPy@aA*KpxS1J-uFAUi99{XxBgmn`-_Qo2Ez> +zn^vw1!f*I@l8RS@gnw=tfxH8SfAcEfPIE<{-FsnqOcQ-s2sM^6iN4FaK{xrI2q;C% +z>&+H1;PFQ2v-`!sVsD{-o)Ur2DIFT!O$?5|172^R82l*;YWPkuY{eT2$FIfknn|=X +zq^KCak^Dq=UopaoO5+ntixH>3Qs?tyya+lR0yw6NpnHm3??N#qj3nGo7n^!STQTNi +z5=8rnV(iDER6%kT6G$JJ2F--y#eUiqF{r&DQbv~?LbNqJn%4k!pSs<@avpL%-k4aA(t5l}~Wia9&U=TG+%b2E|$9q>xbZ8!}& +zQ;eAZq#M|#GGc-J0RG~$SbY2>OzjgQB*;Oovh!`RB!4!@um@t<<+fD1swS5GpuYXL +z_F_fuO%R)ViBic21*c#vrv-G0aHjqT^ +zz7(-NiNfePOGH#Z2z}+GhD}Ah0PZ`hYSEK*huX5Yz(Vsir71zzLD1~ +zvG?^XsG81VU%xhBnR<%-<)R@o+z6Ci(Q3AaOXF +z@{JQ!#L?{Mz<+NRNAJ)FRjMdro&>@?&LmE_-+nYOoea?*Vo1QpDUn? +zycZWhA6TxwO)+r2xcGM>%>EzZO2#=5bEHlADxfb?>mbME +z6W5yugSq7ran-0|v^`whX;0zvzn0=|muM%|+7U&5-2^i|_s` +zVC8QuzE7G+@xSqB@qIQWw>7tj??;DG3HqW)_WlA^B2Xj`qSVmwOeF82Ef(Zbe~hAS +zXR&w0PtO}*uJyz(|1ikVYvOmQhG4DsiQmao*3AA-{OL)8C6f?;pHt!JY6h{Q +zv>laEa?0$LqaeTe$Q(l|!MG*K93!aCZY`}Ra}6jBd3Tr0wZI>2+IX3pg1XEdD03fe +zNn*3L%y<73*eoOSk92|6?vc#DzB*(X7g-=Lb(;6a$-?eoU^C9k5}C`x#1)by#zsSB +z%q&YjBURm$NtaPnR#1=~ +z8s0v###Bmzw;Y%5%gF;apDh1N=Skbn4$1!-^aZ}h$p5<0g&tl|dThQ6_{2(2kJD69 +zx-9GLAqO$=h^))0D|o$+thC2X3De`PD$ +zm8Lv|Y%}c*bleo#*7*sTXGfdjP$}7VeKE*!zOr3^cbKR5WxJ=OnLQ86_Uk4D!k +z>?2FL_eXY!PXRA_S9bJ$MiTQ&b=kQ>Y3PGpW#{g>ARphCoj3Xe-KlE-D+g4$W3t7%TfdECIE~Lk1LB556-|27JFkrnGIm9GHy~q#W7g;8|~=*dsYOrY#V_ +zY_hq(<=~VXkg+S}kltiU_4CSM6>n2}W}qBCa4STkMly(J1{+^b1|@6-uhl}1-F*h? +z!Xi0#Kk;@MIrbohupOu6#7fRk32o)Xr`aE{K~8h7M>~OBZ~GyO<&o1X(fy0< +zUY9C}%o)E(U9OOU~K49HQYQ +zIp@TDXrJwJ-rB}68*AFMY8ICZ?opL=dv3Y#kbrXEBNy#%20fsxTy*Rpu;h+h6iYUo +zt+ou2lw@z|Awy14EPL2fF6l*%cjICi>Oul-tA`Brq^R%aEtekd3OTE}bS(W#bNH{6 +zT;BKyxcM)QKF(=8FfWZqUD9}ZgiR};ms~!o8@Z(&az#KAZPg|QhSKJ%dveA0z2v6q +z$dv_(0d)`9REwL-Rn^J(&P|i6R=$8dKUJ>oLPl(3(a{^0_gJ~PDanTyA#%%xqL4if +z%56<6((g}_+q#C3MpiOhQ7i97T^TX|8N?)iBBijCmJ+|v{!T|8x*)MU)rUwzYU(&5 +zHL9jY63KB+eMI~PF)b7EFVT}oRy}P9k#$fAUQ3eNRz-vXJ}87{!A> +zGO8P=ETMqhe`q76BbDTV>M2wJZhurBh)RSNT}eh~pjdZft2|6v*YeWx@G9CMHzqs)y#F3;O0+qU7xm3X1OGHu=hQ^7d)k*W3HGytgU@rp5?) +zzk5IEEHUyybOowcw2=?ay@pAb-lml#<%6Yd{TonZ-Khn2e&2r% +z!gsFxv3d%4;kxqIx0}$JC(GY0hC=-al#ah;y`WzIlPR6o0Ru|dWDD}kf5QudtzDqR +ze|2FUoS;;hJTT>^DAm>-%J-nszGT&{SE+PUzEYauuQL7jlPWeVRhBCe5UXpdEZ6ct +zUM+0XOj}{o8naqu?Ml+rT&Ci54D}{!J5;uHwEVslQQ3bJzfM-p^VU*yf2nfTB3V)U +zsmi%wJ?*qvt8yNx2%Sfz@&0&~Gqtiq@0Ch3X@*TJsD;Y;i@K$Lel}H&lPcHts!)Na +zRRLeBkJ1Ad%-t05ET{^$r54~sN2q;ajqIihhIfHnP)rq!egWONkt)UtLYEn@io5lO +z%>GUl-`W%G>=IS71Fi2BJ5?h{qIE@@fmr^@s>3CqN( +zGLda)>RPEXJF0?zy{%j?J%yf~Ub#LlMk!|LW6CupGgQ;Xs+{ryPQ{tW4Xy&-A5^UbFD@3ZRQ>P98z{#{g;d#Ax){inM8b%N@;Ty^se +zg?x2Yb-PZ{Fr}I5NzqScTBUm3n*rYXmGZw%Vf5xw)n{oKFz>MHbDFAz#-aMAZwp?a +zwd%W@VnS43oBY)()%T-6-T#}$$}LpCxosf4^QnFp98tibjC4U#N!GHdmt3=Ht#7FY +zrgMT-sI?0G-4X1=DIyis-(6Be){!q?)>RGFv~gwqTQ#iw7>N55)UXBQM_#X1!x!X$ +zJlszWPbP8wHj5hBH#Pi@RU>E6{g4-GRCltqu3>77L$n7Qj+wqxI=Sfz(n!0(^!sx~j*}AAjsln;1zgl$rAcgxv4i!?;33&IvU#r#US3o|xtybTp%J0~xYHb^f!s|?%R?vC1cKaX5{R7n6E0kjP$gI| +zRqF#|q063C>!ZWzf##(#A<(9F%<-`=Os%U+EOeSB0NZKc}h?28m6{BBBNb$R&8?~4%Dw}Q=NXIw#}pER5cQL-8;z!eCybh>9VNZdua=A-(y62t#U$rle{Kd{&YQJYMI$Ys=LLJCT(JuWQbyyCAss2eFDeDK`ue3T+)qt<- +zW7DeoTODZ~3bFH{I;w(5A>CI;r;^{;vQ!;CkqbJxriyt+<%Ar+)rqdf=sd$Cb)rXU +z$fTR7N|sEtH!+jC^1eQB +z|F?==Le|nPV9lqh>xS}yTgmFS!-LKxY~P|DJSstQdANFzNGa5= +zS~gXF>WHqs0EMpVF$EvpsJnXNx|ynWE!5M(B(+XJJ!?gcmbhmszK%QOtwa@nw;5y> +zADb$?sY*y9U6EykdOep`$D9u8Z6iOhK0DRh)fCnzJyVXi&+|Z)?x@}cC4-HORv(I! +z0LgkveF(fo#kTG0lkZyaJSWuWVkEKR7OTYjq-Y9;sV~_ZLv}fw$z_8nZRB8IW)?>qBh_?jg}u_ +zZOW|ikYYkpcP&~(QKr*VickCg60U=t(P{jZ +z&Za2v(5Cs-Ut2L#Ah&eW85&b;sAcI4)bp25f_284R9oNWh}9XNQ&#>Ym83`>_0XB; +zW`%k&PG>!P2fDVW&e3ERMB*f!=RC#lnxAx@t26?6@|IpKo{Aco`!scF7}>szhx!0Yarzpj^h{Y3st*^c0F8- +zn)qJ2+z(p6^C#*G)hW!@^VSt7(e?VpO?(t1B0$y1>@!y7HwHbYiWOu9EFM +zboIZwidTASac|aD1A0)+dw_Pk5J2yfXp{AEwW$_|>1u^(Pf^HRU9DdoIIJ~0bhVXK +z5LpnZtDhJK-TRcTL1$U`*sQw7dOteXvQ4{ZpsDyZO1r +zmHI<1HtPnYc+{q2x?xNrRN`UnlT4MK4#~O+cZQn2TsNue3$ypG_KoNP_Vuf7_MO7# +z)y2B`=Wmezit9G#ND&RJuG@v&A~E_-wm$vrn~)WLFsrM-F?VS>O-{E-M@yB0~w)vtTe#U;o9#J +z>HRZBw14t&SPeVrJ{hB-=DO&ghoax}hJYw{IA?|L5OTdQh7jF?APW}ML#biIdR5cIN}U4>x}=A@ +zwgQIDwy72r){fL0rpO@shLyXt9(AQ7l+LNg+@>&lai&f!rSKiWdhEGdFw=+Iw8pj2 +z^()TX|0TF)#- +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 +z^W$B4XltnE7}mQ5>L7mF)K8J6R> +z#k0Pk1cOro8^daxMBCd}CglX3KNS)$;+2=NqfyIhv9|B&Oq#CtKM}oh4uTb`hov}sn%8_uQ2jIgRDj~==qX9+EhUg +zt;T#EOvX`G(*_D^+eBh^s4WMGd1xQP)>3p)0BY+>VnOJ>U+)`qTe8^?+el&xl^qE1;0X9t7Z)u +zlmt<>oi$|d94aU5wuX)D3#&pwYXsgvu8OlpM$jVZIn)ZO?+BpOE~gc=l7!971J>v} +zVRW3LxHTr3>IJ{1T4RqChOib`<3O@t_J20T)*9Bhv(y+#=VguORK0V$X;a5Ov&Pqc +z4W6TzHGzGD{BN{1;o?Cs@5VO8wcggGKeXt24zeaYQ-S5!H*2z^M{CGnhc)>rIiCVk +zt*OOn_3ck*P5W0HVhXdSU#3`O*4ebI57zW&lr$$Sv}SaqpZk@=nh`?%i@`OmnZrUL +zUk|lr9ZZHsRh#DSZfn-(V4$*PQ%*`}&C8nus>38J#F>hmMS5C}(Avdl-_#0gd9HiV +z*A`jJV<@)x_pw$@83gV0*IM_oGQ``X)`p8-lp+qYDTmCkHh!b@A*zYB@#jdefag}2 +zB6%O~YHe9^9DLIPYg=8~n^NYr74AYoZ-u87e#H&KNm<*=QBJ$Qg|)pBwF~OLaah~q +zyFoSDY(+dJ@#^GlMLc%`e5%{zSHf(HdX6*>yk}EJjTn0LeXMopa9gl93#>zrR?xwYxz>@~U!ZeDT1Q*$qyFS<>*(C` +z;P0U6`yW&h)S@M!8Wk +zT|UXa;7bnJl!HFmRA>8J7r*DFKWUQ1x_sdbby#X!mmiT3`WI|n{z)!Bu(EaK?INl} +zp0Q%z&@P<|m#sM3y`#5$vTlb^b-qAW>wYf^itBS&_d|zM%EzsQF)zTsd0MXn6!hkB +z>m40YcCc*Qtxw@3Y<3l~KD*K?XtT;n?BP#)8y)ynq; +z(@{54 +zi3H*5deT^03vhHLX>76qafm`1m&Zl$@H5hQT0h|b?jlXjV}|EaxK5MhP||D}HmF%- +z5OcFX7}#i~#Ch&L;A|e1F{LMQkzK*itAMn+iYB?=E8-UR2c#V*h&yhJ!|x8(DOQBqU0X&*ku9S9Us#1Ggj{u=MyhGv@flC5U&*U +z>PQF9BPDx%#x*Z$}##Zl1 +z_X)uO=VM5Zo>f5fGLhal_JJX5h)yZJ66u3Qhf-z)=`-*K+NT4g-{HO}Rn5{VZ5c)e +ztV0+0#7{EN=>-^TGcqu60oH%E=t2fQ!T{|+V>0k3dUTEVlEKb)VCvVG3|Z>}QsP50 +z)O9<+Po~p2Es6NWTm$~{Co-~uEf@}lkx|t!*zUH5j1EM5)A|4zeH+cl^OwZG*8%+C +z)ro)1ATXY-feZxUMhF?(4QF*&c`~-R4T^Jnx{yFe6kuM=A>-2CfiQBLPUBEtGTylW +z#k+Jee#B>t5@el1@Fy~U8@eq+-AK?{Kaf`aBoo%7rhYe*OvND}SmlynH;j?REhMBf +z+NIUyNC;jDQ|ou1+p;2ASEs066n<650p{ +z^}BEq+7%VuGkGNR2(Cqk8j#ulvH*Dt$?PX0K$n>$yqZ0TRqm5HQ@&y9c_W#tp@Dt6 +zfJApH1h{lZr?Kb_iSB}rkFOxnaRd5UnjKz}MXwHnbn7iy^uZJOHz&#BX(&}+u_3W; +z_ze@?N$l;>VBAul#NI_ddO%`J{eY{snJk}!V;9^>95%)pF1;nI$78h6Y6w~DwHEl5 +zcS*uNbO##UA_>pmVHRSnPJa1PvTkJ*&SoQ7U$rgnwJmbOkoJ@$*ARhInvi4<9>k`z +zNOHem;07Kc+Y|ty=p@-*uRiux+mh|hH&9i0Np_6Ftq%sqkiEWr%pip&l2pYL3_ja+ +z@;@$;RI6iPtP)A~2jVPZ=gIz%KETm|WPc`(e!DnwunRV#MNB6LyP>b^(ViU6wg!Ij +zC~~yCB^W;*AV=fS9GLRR@zg9Z{BA;y=RO3(pjG6=16L?E~rdAd=qB>;e3v +zsU-cX0N`UuG6cLgy*}v_Ud`7j$=!9DS=p3dy{JiJDE-N%r!(81%=H>|A_a`a!bIcp#o?O|qZk|JZA;P9fsC +zPD!Y((%C1y-Yck@J^wfP3dm%oof!{i+di;Us!g8N3nUkh +zQ~)mT2g#Q|fg$w<$!~;qAYvNH55W(5ZviPVWPxNmPN%7A2`MNnl2)0UI_PcYJZ{go6oM<;kNBSoF-0zWc4Ztp;AbNf!D +zqzBIG$`?qPYfD~z +z7yx|cRPwsi3Z%=I$r~{Zt0lLRH;vGM?|e+&bU6>gn(^eVfX+ad{p4K;KJR^$d>9jr +z4Y$?Ew~;e3%9xx_zFVLpCVP+{!!Tz*;1l_=RRZIe1oAUK1byvJ8qUElq +zqorO+EpjpbdtIJdTw4yt-bPwJ13!q_npSA;jJnTfTA|Z<5EovhmI*t7w;V;S+|u#N +zHKkSjZ-WqKNo%Y@Rb|9tYJJYC7$9UM9u#8%h%2pmVHF5hV&aDSI+}kjpf=d%YH+nK +zWS@CtQ2iFIopx2aQTC4iJE)F~wnEBXde=c8{y8s|=(-{Hp?GKISCJBUkN@8`5d +z`Y{mRYP6+djln|@Z9UQh#NG+i%?^W&GySOBA`jqZZ=&v7QM#}8wTw+uXq$#;MfN$+ +zHVLRL=B}n~2jbATX{^&!WgBh#cRd!&0QE3zLWMq)dfdfIKJx?W`KSYk4J +z>hMjp;}x8A%^T2;FW!UE*qZvBo(V!pP3n{X4Y=-AXqPkS|BXqdU9TFzF!LAf-RvBg +zn#`wtDxgn)b~GL2H2^iqT69qSbTHYaQr}|q?c)#AA%1B7icEAEs%4`|1uq(UIq9|2kFS9s=x(pprg7 +z*+xgV5P+ZUpi{W^L8qx#6dipz9}I<`b@E}2bP9LM&P#Nd{@5h9qW;HFSi8J{jxj5^ +z>hIb@$HX?p9SrW%F-1NAe$(h!OFJ<5j-z8yZRKapqk)UE(Qf{y(^zSbPRXuv8NVJw +zVrK4!uTF`sr-5j#V9FC3co)wX-_R*l8bJep;tEw$)oHBEQ}e$QlJgAxg!JPZ9e1Gw +zq?BJY$Q{Lsi0d>cDjxXe#dJcqKVWc)qZ6LRqLo=mC#ItPw0EGBm*WQ`DKx}#7CMw& +zb&9)u=(I)?!I<=yPIqtw!-gtl{2i;4x1Xs~@Qg6)2gdt-==5n@fpfN|)0gA44|kz6 +zDj=`cqccz-=e&>8nW(%;l`rZvmHR|zy3GcmVl6szEUL4A-_y{d59q*6qO%TSGnZ!` +zojn>K_gPM7WATJ&Or&AuaY?PdP^YQEM +z?`TZDx&YxST?km8GJ61BoR412=?^q^3ckN@JsY}ocwgWKtf5QCx!|;GN|%pByRo+e +zU4f~8WBw2tcX9(rhwIXntuf$iQbJb^y8-;vV|4X)^c6%VB3%4KDDU6$VW>_(QKM@a~39rX3|ZTXjaNEy^)hR`9)@kbWvW%f;>8bVR&cLs}PfuM(H}3vj +znvRW#uw({3jayoA(^Z|ugv0c7VH>PKA~fR)iX-p4(lauy2px{lGanCu;e9C0yn7AA +z#wj$rq8kXl0W{kkhv1(RH0L^cS%m>KHy-Wh;}<%m?6SwEax>_8bFc`UV+(rz*E_5* +z_SMOI`qB&6F@KWAPrZhzccBjX&CfyHFTQz5PIn_W)SN~ +z(@Sr*0Qb$AUha7mr0#p^)%AP8v~n)JHr@q`y&lu+m)3#Qp(VYs9iv9yL~6d->>HLa +z8tBazm@#y*qPHKl1itcVdS?t~nQ0uodzFCn-JRb3Fco{Og6X}_*w*K7r1x{syGq|l +zA1uH^-lLu9gG)FDx(uTa{=NVy?InFkaIPdI(}(DJ^V4#53YSmQqR{SGpR<}4rES36 +z>*)IQan;Ts{%%4a&*}i&oVK(iV=5TB4581WtKoiYUi5k8tsovh7}sc|qxtS|`pOII +zdYU+u(Pv^A2ei}4k7}Y*7%{($GjeqrTYS(d@srCK-lmLuGIW~61!WAbRmP>$=v&up +z^hK`IFC9WaNS#N&Y9lcxob!=>?cfJ|pAz~t7_HExU-bKQTzkiKrr&YL1};2<{s_PY +z!N!yR)G#($Jd6J6zZJI<{zLy7u>c_}UWS>EfUC6#iK29^%Se1(Z7bvxq%X1rnS^|b +z#9vH!kCWwUvCMrgMK9@gH<|wrLx;T~GJp0Ej>SS*Fycy7YoRQ($DJO&rOBop9WfPi +zTc$N1VK&P}rjzV(=**Vs6wHiVogve?*RbTuQf4Jsm{1{6W^XKk+h8NBY3RN^caXI~ +z82wp1)oD_u%i6?2U_2Hpmz!fQ2S#bWY!Pw~_@CBtMUyS?|80~jo=XGhnJHIleH+Vl +zTFRA&^utXwUdz>P;-$+OCRb0v#-%)yT%*Jvq=X}K?LeGNHc@gN8x)UDUX<(X@CW1O +z_Hvy+FF@QT$aUvo3CEF5a{Y8q;MaYY>)*rxJ>{WnZ{C6aVA@N$;eT$x71fX(D^&pD +zzPs!=3^SWkV&rC((Oh_Ll$&+tQ9W)TH@k5iy^F`P^QkK!#cq{dP|)M9SCE@;#tw&8 +z9c0&wxb}XZtJ63&Lv9s`-br68xphCZ*WYYpcjgV;)H<@eavEU9CfWS&z_4n+>|X6L +zs#3{vn}@|9&bT1AJ%)y*gEuDdj=_dR5VWbfESoX=qTi}~7cly@_d@xY%{BZ( +z)GT+?TmhoW$=wR)1Mjv-9&jH`|EDhUpg{vr>-ZuMo*oF?#5MBZM|fo(xyycSzkt}p +zS{`xYGZ=pf@+fSkHHO@lNB{dkw(aFH^--Cu;3ki8|2GDP$pQ790lJ=&101KL1{*2| +z1U>_}5-g7$eGp}F^DTM8w|IaLL*&fXi7TPs^?XLd!97 +zsDc_uq9}(JW3HG)$)TSQgQzvsX_|Fgo*kD3V)$A){7W_T=bFh8skpDf!B{!6CwV4HXuG+B1e`6V@|05RXM8Vbb$SSWxPIFr_}PRydZifNcr>Sg|>mfkGdc) +zYVik^%CYidm%dnfxk3I{hR+YWEic|<1;%<4*ON$ +z$*V4)%snkyUTuiMoJ*;^8cVRaq9=0vxgNj=?2!}dZ^7gf(P>!rNnW?$C>ZR$bn?FK +z<#ji$K-dr_Cw3YHVk28Q(RUYWu^l(cTYh1uw?kh!xeh7-$8X8WExf@L^+w(rt%1>f +zle}%}4G?bQe(Xo-9v%Ul7(^I7tNQgr4UMaYLvqh;>! +zKt8+!-2m^G@=-$zFmca(|4R +zHDfXuYu1vpeSTos%o;iSdkh#V+sNlCq6evUmd_7B|0C>)d|~$kFnFcN7gwf%^m?CM +zU?N~R?5~qA=qMMgoeqZY$?~OD5^y0_^5vs=OM1`HX^6TkUls6{HWGC5<44Qp>s#?s +zo$W5)u){m%%wonRqkvmcff*Az +zV)c4;CgG*#n>}WdhSRY+Wm4TjOo1Ah)cD`yUQC+!k87Ce2j=}BPh>O+DZ +zR(>3&>GxJ=mYIcMJebO?aGL?xxQtbDMUQRqW>&?vCHgf*tO~9L!pUW<>V(1QPrPH* +zM&g*New@`9jDyZ=G^=HgmUi(xW~17JX;~v?E7+stc+@685`Ab>xn!F)U5V5+i?4S91OjFC2MXcu&j +z_Z-*BtzF87_Cuep;Y2q42P%fmeAtK<9Dq%sPJZ|WokH+oHp;>igutQ9KVt& +z)sL9*4bf>fMC7q48&QX9(vwZ?cMV|GZWg?6BtRnzHZ6WDe$U!$`f3!sx@NE$xK|I~ +zt&&dDxLPdKX(AX-<+9LIxU~59VzYkZ+NPGU*{-N%xEx}$=X?P!Hk6seuz(9{usMSV +zVTDO7iwKWK!OV(9Hb&W9L<14EdIj!qHIGF%J_g2%KiDE{$l&VOvqd{aRAU%hREQ$U +zp|x!BWV{j!L)em-mB5vM!(z*$J5phvPLq0;Ee*u;)lajfQ~$kwE?YJ(2Bc#x+49c# +zjpKK)6=Q3oV)vA-$S(lyp#_V3XTF4m*W1~u-?*5LuEkc{pwqn3nXT^R1i}P6wmJpP +z(bKMMHCB9bbvLv4f3f)TYApUqN06R#C+W1dbSD3v8n@(1J79F}D9 +z2ZgUpox%-;CADe>h6^v)#<@8loSn^*D`FbW<~~avIui`CtkZa9CfkmE&)ojzY?q9! +zZM}xE-2@lq7E~v{)Pe1;G6+NO3})Vg{m#7KcebY?e)Dr2O9_btZtGcgAR99s0e0-* +z2CQ*+J;2hWA~1Hn&5kek2E)X~?1W(|=7Ns06C?0vqINB0C#&O<)%WD?9TIR|-0ZotuiDV6hWBx3)VbPW!Oj5zfFJ2sX3x8*ws(R@TXT?a(PyZKYE@ +z=!|s4OSghu7;l3ydPkODH6F_ZTv+~p6q|FxS;2kOn>)ck62OA0Dy$KtmIW8NUM9Yr;`qVbhR3Ly7(c8GacBo2H7C3 +zImMn~%`E45qKs}M*^64E&=WkyUbvxKvT?RfQ}godW$O~GM|iM}y}axUlG8o*h6_j4 +z)tkNPfiGyjl)cHovGM2*d%w>PAp0Bp=!QD9l?(eg7Ndd-FWIMzLjY}GvCq|U4~!jy +z*_XDvur&Q0`+|Me#>@crbuk8XVWZeL1qXNi>8v#M9B{o4u^*Mofw1=g`{8vAx8B;c +ziv3s|2%=*P_PY*__7yqoZvncXwo?^2jp9Mit_l?K08P9V-U_3HO?Em>&C?aWD(X7k +zO%;9*Dp#GqDWVfT?t5P`)x>+dfL93Cs)&aUC~`*+fYJ|&+Oiac?f)qjFF4@ecSrJ= +zdVPNg4+LyItE!YAJPhEayJ8uS;f8HK5*7D`vQDYeb*1uebXR;UDpmSnus$bPskVCp +zI^)(#_4zoRCS)ts|9J_I>nPTT(GcywqgbCV0b~0HO3jXF4|1m}wUTixw63Alu6PY3 +zzCfwd)*J(3pDBvXe|^x`-KN+!%?7b(gJOpb6k=d|#qLiW@Qxc4`}-mYc1INl+e{FK +zJ1C7Spvu}VOljH#A3K*#czF5G$ +zpcRrwh9U8mEyzHkiH_lsxZ6jJ7ZN?im>48(_7Rh(c<#W;?<@E|NQ2EZAK+NUg?J0;|q@Ml5gBsy9J62oq +z#j(IWXsir<-V(&+n-ssor2zlM>NLd8Q-&|<3C0UGlo7V0KnO@tM(lC|C^0J|adsHa +zS}7wBVaRIN4MnnlLA$2-kH}gcfNH|#$V=v8=Iw!e-#g~ +zwY3t|@(Bn-7AZkvo`8XGr_(s2gA#;6xA5IvnNSH`%#Lo##HHoI=y_0?+yLjfhl5V> +z#7JdImKAWLUnx`b(N9`5OqmWT*f)`)ghDCSzBwqNk=f`2?>?l=evbFj!9@wPtdFVG +z2TB;0dhthxDRZ(eq3{Aqgk?HNfj5+hT)gyYOO(jm&zQZTN|Y5|xpBLds5$7Wx^g=C +zQzLas=esKNyqkhBsz9ePz+aj7>JV`KY?TFm4#!@ +zgYY#`S>#m+kW`>7nl%{&uV`iQYJ9=LIm(i|x3ScsgR<;+C6Jn|QPw`kz{~NYk}!ED +z@XKo`>)g=W-(#gDeqI0&{8~wJ2n1u$3}xdB%oRtyQ8rh;1BPd9mCd#Ppc39h*=D|K +zkD;cjY!AU?#pbQbj`wpxjP9)L@^S^kgtp4AGt0o>(M#ELZV~VsIAw1yT<5OqiBHBb)p?gS7wQ#r7+A6h&+ohGrh +za_9%nmT))4e1u><(h7reB&s2n)9g~xP>K>-{Zx)7x&mxis2q#=jEfCZj^E7zc(qV;a+YEIbnv&5 +zn~N57MXqwbMHLM4D=8Nt33rrOY*sFgUJ26fWF_zVT#zh==`^vSO8%_^Fa=LluC&ht +zRl?TQ!5T=3hXf7_lV{a+N!zzH0 +zo1&DM0{}kWR-WC$NKhD{JU`?C#{CJ(t6iuD*4nAOo0biR8iMjMA|6Dvh##?3lwUSM +z`DAqf%Lu)dPk&IFdi`DbY%PE=aG3JF(Pr#CX{eO8{RjrT3OadnZ(rp{zZ)P7+phdN +z`vkKT$5p6M9>kZaI;AyXDin0aZPs?GhVI$G&D^XS&iLUsc(3w1ZGo#|sfw990oGPj +zjj_1Mc(+uIFArh!{$y41kH$23s!s01990TO%jeWyH96e|!>|CAzQUil66D^h`~?@4 +zsi3m{s9`G?RMoi(h_w<_b+#Rf=95(QdR^2-K-Hdq1U|=KE$0#m!ZlU3_?nKg?a0b&Pw7sl^PnaVFl{b$)7- +zY7g+%#;8pvn4jS2@258Vi}z%$o9eU(uf!CC>THt@{L3KK<;6ja3x=q!6*+MnExGOR|j8-!lHP8b;z3S0Dn%X!){?5(0!~rYAH%mp-t3)FX6x&Tk90+IjLhq +z*Mc}dOC3AEEbUe$kXBAq$6qK0Ll)I3%!n|nL8aS4YGIhmEbWXRHsH^h2;#Qou +z)K!l+f>17Br?@juO?Zb|nyb5-I0xVN^E!1~=awM$nxbwy84O+gtkcjhb?soOr< +zgJ|}#Qg=k4&(Vdc0 +z!BD%UdT0|$O$A5Q!>)e7RXC|0!L4>h>&xoVYMx-s%~g*cLWkz=74^g@49(U|R?~;z +zt-D-HP54GrXH&qPvfpdGQ&*?ie-8z7x7!_0?x*sKMSPK8`J`yk-+;Wsh9oH<{$S|uQV?N +z{+YXa4bu;X;2vsWRSPgKyRY7=9EXe9e)aa~5bQ^I-bTISiW!+lM)jW6RxB8-tlm#u +z1Dv*8y`L9}Iwhw*93X%}`K=c9ZUS6Fsroo@60UZ|YVnpYXp(!Y#ZP*J$>*f{v>}e6 +zzK7MPYtaC`a8{pH#Q>yIUGZJ{T-a>gNqOc;=i#;u}T?Nc{2Si1zB| +zL@e%#$VNuu7`mr^NooetzMATn?f8Bflhv<(*Mi_5t$x3G8v~k=YN^X;FpN%8f11mA +zfFU21&kyzZ^<4L}zhVBI6;smXn3D4hot654N(NlV? +zlRv#kGh2o_0e^LwW*Hg}rk=kv%VVV=9;>NSiY?V?np;h)^urINToJ`2Cl)&*Mi?{-+wI8>{N{Z_`r +z1zOE~6ycupX06se93lDk^)aq=&(90`QtGgPP)3fWfx<{RX;}f*{=@>e#{;Ao! +zJpkj;?V9}=oaecdHGA9_!Pq}YYw&&$2){09j_dyw7`tmtCO!dvMuyhJJQs|EUTRH? +z>jJ-Jhvtk|K>AHJ=e5{PJl7nmADCtw&|L20y>)t~wYuw$>-u}GjkP6kvx>ELjfz1W +zc~5J%DHtoNOww^_;L-zpkh=5?w!7*}&TC3CwWns+r6QrDi-ynR*zT+h^el>L}WdZtsH +z^jxP@^OjDNPtO +z!?nH>QK}xnY5i*Bt+nK|{-uXdWoxAk+=p9ln|cn`{Epygyxd9~eiM6L54Y2Xqq=2^ +zYpMBPp94mAQybd^mETwwZR}o*5$m+k0)3x=xFksn9B~p%hTdAxosM8Q@JA>X-&Fu(-s$9CcF-wyU#ZP@et`afuQt2a +zCxC#BI=R>Vb@Dgzbc(&4bV}Brwb_2xF{idkn>`ixMKFYgYv#+2z*%3?=GfQ+wBDsf +z^oqgE&>k%UX9Ya{t3~4&;77V@3*0(l7SKamSo{K0*P+_NFL)&~a<#?(N*m*c>XgF& +z=ro07X^UUszgw21E$Q*kR}9rw?8L>a?iOv;)&MXK{;I|M)xo&F$0Tj-^Q|C>Uv-+K +zirR)oXF>dRT-)Hk6|40fv_ui7X@;Mcc)vXGS)a6|awt?>I;3q}=7G!gGHv62bX;1U +z*2%A2plvKl2HxR8+>%IZ^VoXY=Adlg8}-w+U;(vM%CzKqb--9-h_-X{05Dh?w7vIn +zR_=DzQk{B(q3%&_|96a0*N@f?5PE9?B +zX&86ybWJRz7B*_9Z7~TM`%cT4h!XX(23pqgc36|-<)P(tMFUFOYG;RHpj2+FmX{cX +zRr&E+eiB;t3jMXq0V6Svd8A#&H4B<;(XKVdC8(RPc5Ny8s*%~+^}*XQ-VwAr+e93i +z-?h7utAOkIQoA=A?c})&+Wkrx5uST2aDwk>(tbB3|hyOf&4X +zH&JNOYcJE@6a)h_XrjH_h&pAv9PQnoHXsFgXrC;)0N1Qo`*gc121-8K7x6Pdqc_?Y +z7xenuJl4K^p8))XJzD8iED36HU;A;k2HvWx+V2ji?oF$#{b~0Hq{&SJ!F0-r2Piiu +zzFnzMDKb4eEj`-6&x}v{Yj_mzXW*Xv`;X;(SDwQ^9{+?iS6*CEPMiTjFh0JZg4l+i +z5i~wcvlLmy|DCMWKy0O-9NIv<67j#2PJ2W*0sp0a{E1!S#Q389qABg=92DTB`~Ua!{MO}-_$T3? +MDXn#R(#Glk00G0Se*gdg + +delta 33561 +zcmX7wWk3{N6o%iqIanCjiX8|h78ZhmUIvCSr?$fgLDzcVV}J +zh=Jd6`1Q;#8?$rIJ?A|!T$)iPeRdgJy#xLQ&VO1Faj`^^qrKK1dFTnum<6CDv?y=U +zlw*mdz}p28t3V8|ORP(OPq%2Q4n%jbOH+xBfRNtAra8pKFqSK?BljTl8-PdpFyyqiURW)<-U4F7BvZE8|gI`|3pa;{(8HIr=$Wb&ZMmYopiFLh +z{$VCVw^|fKs#sKI9EelF6#amI41Hixl_66p*9cL6#4uWUXIh3z$1~Z4PB1Kr +z6|qH@v7TUCR$3Ip=$Fw8<+*T+X47q%47voklp))rr68Je9ng3R*a>>DiiyHT`6eMCj7}L=?T@9jH}s9XuFLT%`6Q7Zx1py +zx`f`I#FNB(V2A00eCP{`6(<{S3~A7%Z(9{c++>UF4H-Q>=Eojelx{1CqsgW^Syc1r +z{p~w}1zi3|8`L~+I+zUUO244P2(V$}GP$xyCb!d>()03MZHs!nBHjQ$PrK5WmaQJy +z5s|&2D?(I@-U6NK1N~1}G-wC>d(7U`l_n~KjQSrVe-LfwVQ!$c?m8A2L)(JLQs|6{ +z+&jBP!SY&^>*$hp>jk-uu1L2hFuu_??D5a|CIWs>Xj{_<66KM5K+luVVU>UZqrkHo +z7FE(BVBl!*9QBCPpsvyt@f+3w#^0sDh;ZfoS0)|t5i@aN7;#shKU%(F1`+7_RJ9?7*Rh}?=na{Q<5+bM(xv9qxGY3Nc +z`Unw1o2kcli245ksr$)`lm;uB4PrHUqO0)`8-u|dl||+61+nP{J$?$Yc>{FzQ4q1m +zpa%Db*ts0+#w&>3q2PTUKwK#UV`rd6mZv1dwdokdTVA#fc=QyATOGivAA`7C1gvCC +zCTkYAsPoYWeXjwTw;*{XKfvv^MZ>?kMb`gRCbw~mylH4AW9fbLdYP|Sn7yiL3m}*J +zs|?g++7?9Z-Zqm>mqXeO1K(eoIGos;ID$ByoZS)fg7xVm@rr-UVwrLZ(9u1#EdWDhUMng8Mfv{65mrc#Lj#-{bnS3+WBKHc( +z8nN4AqcXc8}!8h$N}Ndm+A5l&3q?`n_+Zuwx}ZL^T&ik +zwxDyE-~pQ$)E08m3#gSPA!juQ0$y3<&1k35V}38iqU=C#nzIAUr3B>C)8MVkL9UhL +z&=NA4=VvCrHnAuMH?pWU(uuC~hjGG$jO_)?rxV(`9&%$9$eq<~w2Lm&K@I3K9P(H{ +z+8tpQjg$E^`S5He-z8dP4o;a&`DIZIo?ub!Y6p3WPOxfW$h#cet`=D^`K$@sEONWI +zne?7$QB-gt+NRPrjI*B5PBSu@PM3<_XgVH&%GU$N?HH&f-C?8@fZ8zu+hE(3G}<_VDm^)(24O{*I?%U3e9b_zQK^*t6(>(GUSZfVa4q7 +z*?#vz&P8=78pI;s-2G4uGLUaR@xoE$k1P$9dmQqAa)r4w6a}WY2mBjY)J20(;BqNQ +zTPg~AkXcP1NSv +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 +zkR|n{)TP))cBKnB3Mho +zc4vJYjQ4-p-A#9?0%31aq;6*S?gm2U^RB|~7xo}w|C2rZOET~EWA^B}hLJCXJ((5- +zF)xfg%TkGYL`5yiVk*qNM7|2U4zUkUC?#8+z&;i|0nsajeY{3X{IM7NG>I~$g;Ut4 +z)Q{kItA^Q16Bl`3Adk%7oQsBxT6!BTnmO`^l`H9JI}^gi7*cR3lu5U!Og4FK +z(JY(9#p}`FhwgLPpZ0Leja*fwI(Xo1ZrV2{C78j@^f^s$@GJ*OalE+3 +zv&Qv>F=ZvsL3LQeoXhQdIKW&yoabB-O3Si==Unp_Hl3#@&()y`)J8j=yE3)oYFFTS +zmevAJ*W(UFDDq#5;|{k!0_S(}{L`o#zG@aPSfvT%5?lSKKit@o@=WtTol}mh|Vv!uLY$_Mz0K6wF<3dC9my8$@VxUV1ZGXq~#e +z%tq4stDaiq&h;z`&vv{lI{<#XnniuF7%%HWE7 +zuiTKH&%d2lKKls9hDN-4Ofr>4i}0FZ^aFR-;x)e}!{|Pb*UD+zLBIGuuQQ2C@3ngK +zI^X@lx;XQCZAjbw_{8g-$PaeFlh=D&9di9d-XMblckMFVJ?%Br9zWi2-W8}jp1k3+ +zXHeVnaSs+xQl%^Ra7_UZ58)ovkCojwa*zKm(^Ayo9@EMFw%f%$>rwo?my>(iDCgzn +zPV+{ZOtx8W-sm)mwf#MK<3g7p`&{6SL-#_Qxy~EM(3V>DoO>Oe4m02x_j*H0z_`S{ +zm+b^QQ<8hXC7xc+Tl?BUS2)XC_uC6TA<3e+agVp1LaNdJ3~#q@H`IUgd53=|G_?S? +zb(l{l(Dpz6k7~yk-f3h4ShYyrHHd~!>}T?B!^r4v%;4RNPPJ+zSqE~_K#RK6Hj8GV{@j1$cWQGu@O}m83KX^D{aU+%Wpm>FckYJiUV;Z0 +zVYFLgc|fEeR4ZQ|Se{DWZ#MElkD{Rx+wsArs9X8F7Y}+y3C#FkeCYGrU`^Wap`YR) +z$28|7qTWzMwY}ye>!i}SMM*v~n%qI}w|tZxm8>V9;iFDc+2YG&KK4);%>>NkWA94v +zaTR&+1`=KA&s{Okv~bO$3y3w +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 +z04KFVKBD>Z_|Bug%rwur4%;5w14J +zk|0ezWl;&Hws`IZnx0f!0{mcZoTs)VbOM|IO2u{~xpwKV+B&5S)xDJ3={gqplcILL +zB0aceqS~AHEU>n@+FP8u5xgxLV{R +z9;su`y@6Lh)p5G*i}#68$A5N!obpqhcuGZ@%JJ&t=2_I2_fef9Idiasw?QbQ^!nAOz9dU2HfwN;nuOotfP +zQC&(UMP2NLy0UXUbtfmQt3M^s`ir{Wc?67%Mnu}m8B^4a)imD}b6nkcW}^Uc+*{p9 +z8x2t?Sl!g*WZqv;H*-)81J&b+w1ehuQjgQiK(AVN>{tflKGmT1Q997S|c)^_YT_xL31?IY|7mDJET|bNFpfL5aQeN6) +zmAw@suhOV6SFnwGvy#?w$t3mWNqf364`H7?^4YFEQSbXY!YCJG +zk^6p8?-!73Y23>qzi?4~89^p=Z?pRHp$0_rx9VFYonP8bl{(@pSzwwkd5fu^Yhqw-NuqlTcfB{p0*iU*QUR(xvaBfr4ue&MrWB$?Vh2_b(Sr2fF4hEj(GAJxBhB-_(JC|sB_z$ +z=uYlGo6b|soA&$#?eIP?43BEMz!#dAU*e|=HRu4grlCc>X}v|W#x-4Z3DtOOl-8x3 +zlOe<7b*Tv?6IUkc(rsx0TK3arZ<3~YI4-PbqkOh^Lv;DyC&9f^GkL9mMcKm5qAvE7 +z_#E7sYbWHV94%Qp)ff%gX_u~0V=q*~3|-;aC>msA+Ie3S$jUu*#jIJuFU--dZl~#9 +z_yFyCk9^J0(z^QUX3$fMTQtXg(KY&2rPgD~n!4sf((_3zxI`0cFSJz|09;};J +zs{oXHrCTbJ#V5Y$*2N>i+IZI&P@Vi@dr-sxxZ?-~r2`dfVAWe5`N+q8>?R2*TyxB7N&>EAKz=Vo`Xs&;$OGj(@mH +z2WF?Z&~UI0JVkYkMNM?zb-E3CaT^_&yr0HYxJ3~drfvV8P@^a7f%HEQjNBdcpb~Vy +zu}8Wd)QUFM{R(<;&raK`*&Ya#xOm+pA*F0 +zZF=M^s?rZWrAL=L4qiQ%94W5`JL)3+AQ!e#WBCuFp)>uh?gohQVG2t78C +zzUabBJ#JMX)a9u`%YM?aLQ`)4$aK5f*T%j^ykwbKcau3RIF6voZPJmZw +zYtwUkpQf7ATRr#USjcln_1w#mREw!$!i)7Uq4> +z^YT;1GxK1WyH`G&Um3lyD;0PvH`I&r(fO3Prx#IY$rx~1FSe%}xvvE2ur;*Vs%O{X +zH5!l?^3>s-N<;a_Th!65bmSnqu+x)uRME!N&gi0}sK2kKE!R;WH$Z32VbRRiN3U2w +zrdut$Ufq8hQ(oE3H_0Pra_-XyDr;y*_sY +zMC3uep86+d>k@iHak`KJgY|~peaYXaSmd2YS`Brija^;9`##qj6Hk(< +zb=I5dW@_Q)sW<1N3tm25#}xWTcZ@FErngK#Kx3HQb*#z*%vfa6c-&vd&gV3ZIA6yu +zqmql)X(ssluczWQ|74CtA?^uO$z*YMJ3#vO<1GE<*fp9=lv +zgifqX4tTqv&zGds(XqBZKZ8uTcPV`#whz5NQD3xGqe5@*UHT$XymiqRkAI_Dc!s{x +zWGsyOUGx<%`i12)$vfZBSB}^NV^b^|kK=D=<5D)z@y2qn)-=-&{5g +ztXG7-m6ak!^GW(vYYIS<>*(9wR3;4VqVG5*f?YhSZTFlT(+5WC2M?}8eweQx{Gm0i +z>7yU+j)N}fte@KZK{@}YpV9Q3E>lZCuTv80L0_Fb-WPK3aGks@iY{qE{lY&0Mu+$M +zrE77p)+6*Qx>c3$?5cOQK6;-%x+p +zNbQKAW%^_M2H>@i{+L1u(bXFIYidD=3VU_R(vpz-I_lJl*GT`4(5X*e&{#}8{o`FF +zsI1v^`akhA|396+qdL@@Hu`7wQ&1|u{@I4+>R;Tls6BG)UwOzI?Axk;4Wb#cy0&Qj +zYc^%c^vixfB^!9*qyNM;fe09E!bd?jZ)l<;S?{xTCcb^5HQZp)bVxUuG$3j(HCe6~ +zr2h?*C5M9#4lsGSDnR`VQ_Q&vcIT2QZ>$1~-*0Nl*3E?Hrs+jja>WGGq}w6UuJj+% +zyiY-LX#+D$yINpj+sv%P3PL~YZ04-aDdwFvbN(v>T&`^9yg>!jtoO}aKIFgJUN`g1 +zq$}5Ul$mE~3fSyyX8uvMO*?-KTirZgSGm-zu$@fd#vQZ5%_`Ky2sWL|=i#o<;y13tm_MB-}IZF#LWP(|>FkP3tYt3qYdw>sfP1omCneKHz%)W)A +zZN>uA?LLM0{vKw%?m57BH#Ob63K%_-O^&<4k7ks3rlgo2i^wb0@-aPUI{=rG +zOwX&d@ax){jf3jKknPQ8jW&?8$znDOq0{>@$D$k`Yr<506>UWz{t-hY#u +z9lDXyI91d1d))=HS!uJUD~X^k@n-KK4lv_>n!ST7!;GkJ_L)Q_y)8M+zW2SLS*Y3X +zRSd-NHDOj*g`r;h)1C+t?OJ_b2Qz$1Wq$GN-*c?l#Hvi^t92G)mF`6gS5oE)Jg6#rzL( +z!0fsfdCX1ozcbWR$o9mXz|vsY-LR;xPBJGncugt(F>|7k0?{C^Ir02{7)`t_^6M}s +z|E4YGpT(TwKt+uci_9suUhN@f6)~qgnF3wBxH+vf?X~@z%;|p{fKOj#&P<}nlckE~$)=(i(uH34d$$=9My3DZx6N52!XVz|FhlpJ(H;L+E$aI%&Ct&?fNG{i +zF?EwUuTWl+g+_hWl=i3ln2bl*C +z`NDYbVjg@LMfW8*nTHE}g(~1}9%;9Sd`P}>=8?JQsJ9VhCU~U+bxN3LF1kV8Zfc$_ +zcN((C1oLd*bEsw6%(IUd&|O41&BQ4Z`t~35d|VBnQmRF|Tfw3jHrJv|)aLo`g%q0F2&k-isIs6}j3>4t_z+lLzMOKnb;}srim>mo;*4F+atSh}o53es-Zf(5bfh +zrB^?Q?Ul^0t0_RPRa*``ad;ZPyh$?n}Er!Dc6aw}W!aZD&{f5#;1RyKE~cHy=3EF57zA +zbFLNba?DJGk>1HJ$M$06U0T@LJEXv@9&4A=^%%t99dMJ(1E4|GXO4PF})5(`=0EO(z6{PPyKGM#~ +zn-ojmIz)=o#T(l>O{JgRZm*rweTqIG%Gx;(bfN3pz|Q$N-Qbvel0`GeW;^G^8FZeH +z?Of=0Vq^)6>}#q;-t1&1{}!@nlZ)-`Dn`UZM7Oc4)O{MnO*gyBItn-tZufs*XC7D6 +z_r?8n&$;KGd-gf|9MNFRP{}-&l!#JE$eawBN@d8G1`6G%gfb?XGbLk@%tKVZWJoeZ +zW(n~nQ^?e_oSx_R=ktfx``lYM_ny7?+G~B*TKjg?TL9;~Pv}?|ce4|*LdS4?gN(b- +zsQ@!3#f?@i?K&AB;!pt`lq)Jp`s@R4os^6Kq90&(;2K*9P7bbEgp(=sX>E(?s#$_dbL1Lp!DXQanEVLAWuFl+ +z56cDDFId9za;o5Fjkd$_Kfx^neKdBj;1N&_+ASjm&lofYr-vnV9A<8KQY;J%_=CRc +zv|8SlRI;vPRPu6XVc?N*pzFC@7!(`|P_R_+8r%SPhcsd6okOUvR;%RCXA8ry;Eum& +zE({xW2aB1!gb_!v*0ldTm3-PS!Fv<>vgg(dqq{ysAm{gWnU9U +z{Y1~KOMhXEjWy`KKMG?v*aE+OzA(-%9pI;=QWxPU_%6K#?5$P8q&AkIIo42^+z3PD +z!M1{55ZabrUV`6!v=MLP1^*#gpmRJa_%HPV-Q`orAk4?q6#@t1k~L%sfn~ig_Re@M +z1a&}_*|GO%>-df3Mym&L>STcCRE)5z2?vaFUD)Nq0%ucS*fk;)m@&hI-FTp%w#-LJZ`lg;Q5S@C +zn>#25#0z^SV~hQmmcqf&!wkSj_Yg8^U(obRSIPbk6f#Xtg068h;cyTxB4vtjIBXa& +zQk8Hx7iWK)PQnpSY?6vK7LE)=pVjrTa5Uc>*p(ohsA~+mDlg$g(g@s9gM?F=d7!De +zE}XiIWt=|A!s*Ajah+@;oHaXycl@hxt~cj`or!glo{Tg#ytfq2Yf;^%Z&m8$@xuAV +zSaDOhL%4vxGITW;E>xljZ$Dfmo8zdGzq(n-#n-X&dX?OHMaaEb7roJwLjGzi;8%1K +z@-O4hNs3A?=bn)N8mEBUB9+?MIF$xocTT;~>*IurgY7`u-%};`F+sSv3GXo4)r*4tZGH6}CtJE{Yg@PLwQH;1L +zTruEcYqDFoat2+a++V`gL#WYy(g|0O)x#R^8!5td@iS(mXD8Kon|86*3x%3I&^K8m +z6qcZKS*a6>e9+r%xLUYphcyG2U#rwkxGUVt$0#MXQIh+pCOtT2uuz&=jYkTd5gu%; +zheer-g@-9QpxM<^c=#QaxQGtIqZb%s%wej)}%U|3;|57Fq47Z$d@g2;jt~!ka2Is?B-`Z>=*y6MI2;`_UWN +zi*nS60av5}_vc +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 +z^d6hV89V7x{$Fz_?fY +zqm%}lq4Vf|pUzxa7j*7}>8v)m#$DQ}2(YJq(dfJzz`ol;7aE@fe)?>>@G{=| +zQ*CI>ypnF56#;D0DZ0rKz4nYOy7kKvfYASFYP%rN{bNG6RbWmw +zei_|SzZ5hT51Y{)&HsQV|2o}W+#0k|`)PU@W(m@q>7EaZ@E2btdCf63q^8n?LvZ8% +z9!fLpzX7w#mu4RG$L*mZJ#34{?btiK&#`v)$L===1TfTcQXx6)&=Z83Utr^itQ()L_WPi(aV*s_eCT>1r=YkTRb2k73z +z+s*X!vU1Se4yNZkaR~EcX%2ozil%ZZJ)efvW((YDZW($Uf2wHiOJmS9ct|g`pAiXiH0)Yk^7rMN1Cu0IpjBEjfyUV{;9?hbNfo +zQ#aH5CKzXIai9-9V}W_}nLa$T5VWm3&`0O+jei_VAL|xikHZ%FY!Pm>)52)k_Ry%zHjdeYh?C@{&$A~+)ee|Wj{(S*V +zq_+(9>S7u90G0eE{Gx)w{-EFJCTk3X@`0J}Bx^4C;wM-xvwJOpX>?fTa`yskFqL&H +za6j?5E9>55gQi55dH*c9PAWI`r +zE3OkD%Qg*wv#^up`PL{-Q(3-k1~R-(n_@}N=4IL7PbL9;?JsutuyF&lw7v|An= +zKNu%D$}oeLu2MVCT%J*#4xIBSd1k{jlte1z +zS(o1fKlP_P2gL$?dXOA(8#V1d@8x-C?}2V?xjf$rmsXRF@`8nSpfR2&8#-UXE&0<9 +z*)Se`xG5)O!@^ylYmgyF;{hYu;$`x}Z{Aq&<}WY&o(H-oTV)Ilf!&xP$F;Bpjn6eX +zZtzZEZpO)r1wUZpI>}3dkD$8mA+N}J4%~8HUbO(jl7AM)_qPXbxFYX96N+M0fV>;4 +zcNw!*^6pQqf$N_o?^%d0m&*isuLIg^@v^+XaXRP|M#%f0Vzuy|4RL-a9 +zV=THSUyQ?V;reANU;eQIv#h1^HDg?R>wn7EHhThlW4c^uXq5;2HwU?}-y~FS9pxf_ +zG~{QV$v3-|09#Qi-$FHC6Y3?GG&BNTQlxyZeiDlFgXH^um_L8>KrXez{Khk#{Lmx~ +z*mXzcN15w^soOz*bS(yTKt_JztpyGJEk7NKM@?;6CqEDR2jhZhxol?@=#Es%hO!q! +z(R%pEFWcfI8h%uMxdE+8g^m2GAqEf)a^<(}P*QGMBEMVY2T(}mcLip^T@R4oJvk0g +z^;xbQ&;fMa!sXAIaiHBePySry3T(+U`HK}A_FozDmqe7Njr8)DEjV{#{E+zfVzwj0 +zk&g}Xm#u#bp(Y|@a1uqxRjFNYk)M&P((w=G$@15l4WJEdA%DMnAGr24a<#1=X#7&; +zpLJY7bG4=XYl|H)6VJ-O!v>?9bw>Wv9j(-#uL@Y=SdaOrXqMm>@BdTLPPPF}LVbm6 +zcLkU;dWCbb0d~D%gQBan2e9d)=-a#pcFc1{Sb>K_yqc=Wk$dr!Xi=%7$LAj@Qa8k2;6lai^8~ +ze+!*gr6~=HmZGLt6s9z6>H=I-Z>2FFxX#2Gsnnh5sWhI4pJslDQ|uJd +zZMRaIUPp=S%{HakL!2Y~WR;xp8KuP*jGR20DOT%ni!88LtWMbAo@%GGI){PJhV@Eo +z$H$;M-B)RS0hjqzS!s>^_6D5~QQCa)K@l-P>985q>a(RvrAgJ^*zz=`k0S;sjhiXX_-$V7tGbGF_;6fq+fOUbg?)h?Jydb7x&_=n?G=}ig#d3m +zD1Cps0=K!T;2h`s0t32`D(}lkY12x1;e!Dj`Z> +zCsbiq6)S-UF`~14pahM6fsY-PpowSjYYr=w8KthEIl4(Dn;WYHuS7@Ms#FR7fm1EL +zK>6pI7I#*IGRqS!^tLc%*1#&Xb56=^z!`9+TnTX)gs&$`*k6aeZ-_GI4lX|9p32-g +z_NZ?hwpAhyw?;EzsYKQ!15Bw@$^7?3B{!tAGT-JgZt35Y`9nSf1Z-2uy#K6{y%(gC +z8&;%}Z@yZY?|U14hF;425DqlajTA#s2Vj~{SE4Oi1N7LZEF7{Fm;w)FVWc4i;AM>x +zheOW#-By-3x?&2=MOju>fr(!;Wmy&8i9CNL@o&-Jh94^Vg_~6B=T1-(-{S8jIV#J& +z{^c-QRwtCh-!Utj +zs!_78p`UwUlXBz&3)-J6lrG6{Si}Q>+u_dn!4Wn890} +zsGOgPvhkWrO5W<;Sij@uqFfw+_EKG +zX&#m}?!Krz@7Ds@78xqJ3!hc$dwy4*kJ^ff??RRAsf|k6fK1RX+^4*<%)oW01BNfsb9HKB14ySKh^<0dKxac~=+;(5918 +zxeZlCmq|+HpI*Sve5!ml@&v{{@})TWO?srnv_0)&TBU5wQ-JtCDK|2DyqnW_AC +zM&)hpQRPqXKfs4v4+4D-#@kRQI>o43YZh}T?)afN4I7a%_@kx{Zw;0(34&4%)@Zzw +z&b=~Dsh*>g8g}&VGjx#0Aa{pmGlD`wf`S8@SzAsDnrYoEDCN>8O}CUIe>Bh3*QezD +z(fI!VU*{j}_y1m(JeM&}*;At_`uhjetFixkZHh~c#+VNZp7Ou{C2lSgH`|H|CqtqPpJLD07cjOe?N#{ +SrReY + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + AVISO: houve uma falha ao abrir o banco de dados de informações DAT '%1' erro = '%2' + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + AVISO: houve uma falha ao carregar '%1' do banco de dados de informações DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + AVISO: houve uma falha ao adicionar '%1' ao banco de dados de informações DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + AVISO: houve uma falha ao atualizar '%1' no banco de dados de informações DAT: consulta = '%2', erro = '%3' + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + AVISO: houve uma falha ao ler quantidade de linhas do banco de dados de informações DAT: consulta = '%1', erro = '%2' + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + AVISO: houve uma falha ao alterar a configuração '%1' do banco de dados de informações DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + AVISO: houve uma falha ao remover a tabela '%1': consulta = '%2', erro = '%3' + + +- +- +- +- ++ ++ ++ ++ + software-info + Informação do programa + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + AVISO: houve uma falha ao criar a tabela '%1': consulta = '%2', erro = '%3' + + +- +- +- +- ++ ++ ++ ++ + emu-info + Informação do emulador + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + informações da máquina + + +- +- ++ ++ + machine info-texts + textos de informação da máquina + + +- ++ + Machine info - %p% + Informações de máquina - %p% + + +- +- WARNING: missing '$end' in machine info file %1 +- AVISO: '$end' está faltando no arquivo de informação da máquina %1 +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- AVISO: '$bio' está faltando no arquivo de informação da máquina %1 +- +- +- +- WARNING: missing '$info' in machine info file %1 +- AVISO: '$info' está faltando no arquivo de informação da máquina %1 +- +- +- ++ + machine info + informações da máquina + + +- ++ + WARNING: can't open machine info file %1 + AVISO: foi impossível abrir o arquivo de informação da máquina %1 + + +- ++ + %n machine info record(s) imported + + %n registro de informação de máquina importado +@@ -3775,82 +3760,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + AVISO: houve uma falha ao alterar tabela %1: consulta = '%2', erro = '%3' + + +- +- ++ ++ + meta-data + meta dados + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + Base de dados de informação DAT + + +- +- +- ++ ++ ++ + importing %1 from '%2' + Importando '%1' de '%2' + + +- +- ++ ++ + software info-texts + textos de informação do programa + + +- ++ + Software info - %p% + Informação do programa - %p% + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + a importação foi parada, invalidando a tabela %1 + + +- ++ + software info + informação do programa + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + feito (importando %1 de %2) + + +- ++ + %n software info record(s) imported + + %n registro de informação de software importado +@@ -3858,43 +3840,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + AVISO: foi impossível abrir o arquivo de informação do programa %1 + + +- +- ++ ++ + emulator info-texts + textos de informação de emulador + + +- ++ + Emu info - %p% + Informação do emulador - %p% + + +- ++ + WARNING: missing '$end' in emulator info file %1 + AVISO: '$end' está faltando no arquivo de informação do emulador %1 + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + AVISO: '$mame' está faltando no arquivo de informação do emulador %1 + + +- ++ + WARNING: missing '$info' in emulator info file %1 + AVISO: '$info' está faltando no arquivo de informação do emulador %1 + + +- ++ + emu info + informação do emulador + + +- ++ + %n emulator info record(s) imported + + %n registro de informação de emulador importado +@@ -3902,7 +3884,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + AVISO: foi impossível abrir o arquivo de informação do emulador %1 + +@@ -7801,426 +7783,426 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + desconhecido + + +- +- +- ++ ++ ++ + good + bom + + +- +- ++ ++ + bad + ruim + + +- +- +- ++ ++ ++ + preliminary + preliminar + + +- +- ++ ++ + supported + suportado + + +- +- ++ ++ + unsupported + não suportado + + +- +- +- ++ ++ ++ + imperfect + imperfeito + + +- ++ + yes + sim + + +- ++ + no + não + + +- ++ + baddump + imagem ruim + + +- ++ + nodump + não há imagem + + +- ++ + vertical + vertical + + +- ++ + horizontal + horizontal + + +- ++ + raster + rasterizado + + +- ++ + Unknown + Desconhecido + + +- ++ + On + Ligado + + +- ++ + Off + Desligado + + +- ++ + audio + áudio + + +- ++ + unused + não usado + + +- ++ + Unused + Não usado + + +- ++ + cpu + cpu + + +- ++ + vector + vetor + + +- ++ + lcd + lcd + + +- ++ + joy4way + joy4way + + +- ++ + joy8way + joy8way + + +- ++ + trackball + trackball + + +- ++ + joy2way + joy2way + + +- ++ + doublejoy8way + doublejoy8way + + +- ++ + dial + discador + + +- ++ + paddle + acionador + + +- ++ + pedal + pedal + + +- ++ + stick + manche + + +- ++ + vjoy2way + vjoy2way + + +- ++ + lightgun + pistola de luz + + +- ++ + doublejoy4way + doublejoy4way + + +- ++ + vdoublejoy2way + vdoublejoy2way + + +- ++ + doublejoy2way + doublejoy2way + + +- ++ + printer + impressora + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + cartucho + + +- ++ + cassette + fita cassete + + +- ++ + quickload + carregamento rápido + + +- ++ + floppydisk + disquete + + +- ++ + serial + serial + + +- ++ + snapshot + captura da tela + + +- ++ + original + original + + +- ++ + compatible + compatível + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: foi impossível abrir o arquivo do ícone, verifique as permissões de acesso para %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + FATAL: foi impossível abrir o arquivo do ícone %1 + + +- ++ + 7z error + erro do 7z + + +- ++ + libarchive error + erro do libarchive + + +- ++ + Waiting for data... + Aguardando os dados... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + FATAL: foi impossível iniciar o executável %1, o arquivo '%2' não existe + + +- +- ++ ++ + emulator info: type = %1, version = %2 + informação do emulador: tipo = %1, versão = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: foi impossível determinar o tipo e a versão do emulador + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Carregando, aguarde... + + +- +- ++ ++ + loading favorites and play history + carregando os favoritos e o histórico dos já jogados + + +- +- ++ ++ + done (loading favorites and play history) + feito (carregando os favoritos e histórico dos já jogados) + + +- +- ++ ++ + total start-up time: %1 + tempo total da inicialização: %1 + + +- ++ + XML data - %p% + dados XML - %p% + + +- ++ + verifying ROM status for '%1' + verificando a condição da ROM para '%1' + + +- ++ + WARNING: couldn't find machine information for '%1' + AVISO: foi impossível encontrar as informações da máquina para '%1' + + +- ++ + Updating + Atualizando + + +- ++ + Name + Nome + + +- ++ + Source file + Arquivo fonte + + +- ++ + Is BIOS? + É BIOS? + + +- ++ + Runnable + Executável + + +- ++ + Clone of + Clone de + + +- ++ + ROM of + ROM de + + +- ++ + Sample of + Amostra de + + +- ++ + Is device? + É dispositivo? + + +- ++ + Year + Ano + + +- ++ + Manufacturer + Fabricante + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ ++ + +- + N/A + N/A + + +- +- ++ ++ + error text = %1 + texto do erro = %1 + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + AVISO: o executável do emulador selecionado não pode ser identificado como o MAME + + +- +- ++ ++ + %n supported set(s) + + +@@ -8228,546 +8210,546 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + AVISO: a saída do -listfull foi alterado, impondo uma atualização do cache de todos os emuladores + + +- ++ + BIOS + BIOS + + +- ++ + Size + Tamanho + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Mesclado + + +- +- ++ ++ + Region + Região + + +- ++ + Offset + Desvio + + +- +- +- +- ++ ++ ++ ++ + Status + Estado + + +- +- ++ ++ + SHA-1 + SHA-1 + + +- ++ + Device reference + Referência do dispositivo + + +- ++ + Chip + CI + + +- +- +- ++ ++ ++ + Tag + Etiqueta + + +- +- ++ ++ + Type + Tipo + + +- ++ + Clock + Relógio + + +- ++ + Display + Tela + + +- ++ + Rotate + Rotação + + +- ++ + Flip-X + Inverte-X + + +- ++ + Width + Largura + + +- ++ + Height + Altura + + +- ++ + Refresh + Recarregar + + +- ++ + Pixel clock + Relógio do pixel + + +- ++ + H-Total + H-Total + + +- ++ + H-Bend + Curvatura-H + + +- ++ + HB-Start + Início-HB + + +- ++ + V-Total + V-Total + + +- ++ + V-Bend + Curvatura-V + + +- ++ + VB-Start + Início-VB + + +- +- ++ ++ + Sound + Som + + +- ++ + Channels + Canais + + +- ++ + Input + Entrada + + +- ++ + Service + Serviço + + +- ++ + Tilt + Tilt + + +- ++ + Players + Jogadores + + +- +- ++ ++ + Buttons + Botões + + +- ++ + Coins + Moedas + + +- ++ + Control + Controle + + +- ++ + Minimum + Mínimo + + +- ++ + Maximum + Máximo + + +- ++ + Sensitivity + Sensitividade + + +- ++ + Key Delta + Tecla delta + + +- ++ + Reverse + Reverso + + +- ++ + Player + Jogador + + +- ++ + Ways + Direções + + +- ++ + DIP switch + Chave DIP + + +- ++ + DIP value + Valor do DIP + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + AVISO: o cache da lista das máquinas é inválido, impondo uma atualização + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + AVISO: o banco de dados da lista das máquinas é invalido, impondo uma atualização + + +- ++ + machine description + descrição da máquina + + +- ++ + tag + etiqueta + + +- ++ + year + ano + + +- ++ + manufacturer + fabricante + + +- ++ + machine name + nome da máquina + + +- ++ + ROM types + Tipo das ROMs + + +- ++ + players + jogadores + + +- ++ + driver status + condição do controlador + + +- ++ + source file + arquivo fonte + + +- ++ + rank + classificação + + +- ++ + category + categoria + + +- ++ + version + versão + + +- ++ + Filtering, please wait... + Filtrando, aguarde... + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + AVISO: Defeito do XML: o nome '%1' já está sendo utilizado por vários outros conjuntos -- informe os desenvolvedores do MAME + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + feito (verificando a condição geral estado ROM para todos os conjuntos, tempo = %1) + + +- ++ + pre-caching icons from 7z archive + fazendo o pré-cache dos ícones do arquivo 7z + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + feito (fazendo pré-cache dos ícones do arquivo 7z, tempo = %1) + + +- +- ++ ++ + System / BIOS + Sistema / BIOS + + +- +- ++ ++ + System / Device + Sistema / Dispositivo + + +- ++ + correct + correto + + +- ++ + mostly correct + maioria correto + + +- ++ + incorrect + incorreto + + +- ++ + not found + não encontrado + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Padrão + + +- ++ + Configuration + Configuração + + +- ++ + Mask + Máscara + + +- ++ + Setting + Configuração + + +- ++ + Value + Valor + + +- ++ + Driver + Controlador + + +- ++ + Emulation + Emulação + + +- ++ + Color + Cor + + +- ++ + Graphic + Gráfico + + +- ++ + Cocktail + Coquetel + + +- ++ + Protection + Proteção + + +- ++ + Save state + Salva o estado + + +- ++ + Palette size + Tamanho da paleta + + +- ++ + BIOS set + Conjunto de BIOS + + +- ++ + Description + Descrição + + +- ++ + Sample + Exemplo + + +- ++ + Disk + Disco + + +- ++ + MD5 + MD5 + + +- ++ + Index + Índice + + +- ++ + Adjuster + Ajustador + + +- ++ + Software list + Lista dos programas + + +- ++ + Category + Categoria + + +- ++ + Item + Item + + +- ++ + Device + Dispositivo + + +- ++ + Mandatory + Mandatório + + +- ++ + Interface + Interface + + +- ++ + Instance + Instância + + +- ++ + Brief name + Nome resumido + + +- ++ + Extension + Extensão + + +- ++ + RAM options + Opções da RAM + + +- ++ + Option + Opção + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + AVISO: foi impossível abrir o cache da condição da ROM, verifique as ROMs + + +- ++ + loading ROM state from cache + carregando a condição da ROM a partir do cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + feito (carregando a condição da ROM a partir do cache, tempo = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n estado de ROM carregado do cache +@@ -8775,34 +8757,34 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- ++ + processing machine list + processando a lista das máquinas + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + AVISO: foi impossível determinar versão do emulador a partir do cache da lista das máquinas + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + INFORMAÇÃO: o cache de lista das máquinas será atualizado devido ao novo formato + + +- ++ + loading machine data from machine list cache + carregando os dados da máquina a partir do cache da lista das máquinas + + +- +- ++ ++ + Machine data - %p% + Dados da máquina - %p% + + +- ++ + and %n device(s) loaded + + e %n dispositivo carregado +@@ -8810,7 +8792,7 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- ++ + , %n BIOS set(s) + + , %n conjuto de BIOS +@@ -8818,218 +8800,218 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Informação da condição da ROM: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + AVISO: o cache da condição da ROM está incompleto ou está desatualizado, iniciando uma verificação automática da ROM + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + AVISO: o cache da condição da ROM está incompleto ou está desatualizado, verifique novamente as ROMs + + +- ++ + determining emulator version and supported sets + determinando a versão do emulador e dos conjuntos suportados + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + feito (determinando a versão do emulador e dos conjuntos suportados, tempo = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL: foi impossível determinar a quantidade dos conjuntos suportados + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + AVISO: o cache de dados XML está incompleto, invalidando o cache dos dados XML + + +- ++ + verifying ROM status for all sets + verificando a condição da ROM para todos os conjuntos + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + loading XML data and recreating cache + carregando os dados XML e recriando o cache + + +- ++ + ? + ? + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + AVISO: atributo nome está vazio na linha %1 do XML (o conjunto será ignorado!) -- informe os desenvolvedores do MAME e inclua a saída do --listxml com problema + + +- +- ++ ++ + ascending + crescente + + +- +- ++ ++ + descending + decrescente + + +- ++ + ROM state filter already active + Filtro da condição da ROM já está ativa + + +- ++ + please wait for ROM verification to finish and try again + por favor aguarde a verificação de ROM terminar e tente novamente + + +- ++ + please wait for reload to finish and try again + aguarde a conclusão do recarregamento e tente novamente + + +- ++ + applying ROM state filter + aplicando o filtro da condição da ROM + + +- ++ + State filter - %p% + Filtros das condições - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + feito (aplicando filtro da condição da ROM, tempo = %1) + + +- ++ + saving favorites + salvando os favoritos + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: foi impossível carregar arquivo de favoritos para escrita, caminho = %1 + + +- ++ + saving play history + salvando o histórico dos já jogados + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: foi impossível abrir arquivo do histórico dos já jogados para escrita, caminho = %1 + + +- ++ + L: + L: + + +- ++ + C: + C: + + +- ++ + M: + M: + + +- ++ + I: + I: + + +- ++ + N: + N: + + +- ++ + U: + D: + + +- ++ + S: + B: + + +- ++ + T: + T: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + AVISO: chamada de auditoria do emulador não foi concluída sem erros -- código gerado = %1, estado de saída = %2 + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + travou + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERRO: foi impossível abrir cache da condição da ROM para escrita, caminho = %1 + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: foi impossível iniciar o executável do MAME dentro de um tempo razoável, desistindo + + +- +- +- ++ ++ ++ + ROM check - %p% + Verificação da ROM - %p% + + +- +- ++ ++ + Optional + Opcional + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + verificando estado real de %n conjunto não mencionado durante audição +@@ -9037,7 +9019,7 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + feito (verificando estado real de %n conjunto não mencionado durante audição) +@@ -9045,56 +9027,56 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + feito (verificando a condição da ROM para '%1', tempo = %2) + + +- +- ++ ++ + ROM state + Condição da ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + Condição da ROM para '%1' é '%2' + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + feito (carregando os dados do cache da máquina da lista das máquinas, tempo = %1) + + +- ++ + parsing machine data and recreating machine list cache + analisando os dados das máquinas e recriando o cache da lista das máquinas + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + ERRO: foi impossível abrir cache da lista das máquinas para escrita, caminho = %1 + + +- +- ++ ++ + sorting machine list by %1 in %2 order + ordenando a lista das máquinas por %1 na ordem %2 + + +- +- ++ ++ + restoring machine selection + restaurando a seleção das máquinas + + +- ++ + done (processing machine list, elapsed time = %1) + feito (processando a lista das máquinas, tempo = %1) + + +- ++ + %n machine(s) + + %n máquina +@@ -9102,47 +9084,47 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + AVISO: a lista das máquinas não foi completamente analisada, invalidando o cache da lista das máquinas + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + AVISO: a lista das máquinas está desatualizada, invalidando o cache da lista das máquinas + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + feito (carregando os dados XML e recriando o cache, tempo = %1) + + +- ++ + pre-caching icons from ZIP archive + pre-cache dos ícones do arquivo ZIP + + +- ++ + Icon cache - %p% + Cache dos ícones - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + feito (pre-cache dos ícones do arquivo ZIP, tempo = %1) + + +- ++ + pre-caching icons from archive + fazendo pré-cache dos ícones do arquivo + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + feito (fazendo o pré-cache dos ícones do arquivo, tempo = %1) + + +- ++ + %n icon(s) loaded + + %n ícone carregado +@@ -9150,77 +9132,77 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- ++ + pre-caching icons from directory + pre-cache dos ícones do diretório + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + feito (pre-cache dos ícones do diretório, tempo = %1) + + +- ++ + loading icons from cache database + carregando os ícones a partir do cache do banco de dados + + +- ++ + done (loading icons from cache database, elapsed time = %1) + feito (carregando os ícones do cache do banco de dados, tempo = %1) + + +- ++ + loading category.ini + carregando category.ini + + +- ++ + Category.ini - %p% + Category.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + ERRO: foi impossível abrir '%1' para leitura -- os dados do arquivo category.ini não estão disponíveis + + +- ++ + done (loading category.ini, elapsed time = %1) + feito (carregando o category.ini, tempo = %1) + + +- ++ + loading catver.ini + carregando catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + ERRO: foi impossível abrir '%1' para leitura -- os dados do arquivo catver.ini não estão disponíveis + + +- ++ + done (loading catver.ini, elapsed time = %1) + feito (carregando o catver.ini, tempo = %1) + + +- ++ + %1 category / %2 version records loaded + %1 categoria / %2 versão das gravações carregadas + + +- ++ + Category view - %p% + Visão de categoria - %p% + + +- ++ + %n category record(s) loaded + + %n registo de categoria carregado +@@ -9228,7 +9210,7 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + + +- ++ + Version view - %p% + Visão de versão - %p% + +@@ -9550,229 +9532,229 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + + MainWindow + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Padrão + + +- ++ + Toggle maximization of embedded emulator windows + Ativa/desativa a maximização das janelas de emuladores embutidos + + +- ++ + Searching machines - %p% + Buscando pelas máquinas - %p% + + +- ++ + Show machine/software titles + Mostra os títulos das máquinas/programas + + +- ++ + Show machine- or software-titles at the bottom of all images + Mostrar os títulos das máquinas ou dos programas abaixo de qualquer imagem + + +- ++ + Embed emulator widget + Embutir os elementos do emulador + + +- ++ + &Embed + &Embutir + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Matar o(s) emulador(res) selecionado(s) (envia sinal KILL para o(s) processo(s) do emulador) + + +- ++ + &Kill + &Matar + + +- +- ++ ++ + Copy emulator command line to clipboard + Copiar linha de comando do emulador para a área de transferência + + +- +- ++ ++ + &Copy command + &Copiar comando + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jogar + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jogar o &embutido + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Para os &favoritos + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Verificar a condição geral da &ROM + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analisar ROM... + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + Reconstrói a ROM da máquina atual com o ROMAlyzer + + +- ++ + Remove from favorites + Remove dos favoritos + + +- +- ++ ++ + &Remove + &Remover + + +- ++ + Clear all favorites + Limpa todos os favoritos + + +- +- ++ ++ + &Clear + &Limpar + + +- ++ + Save favorites now + Salvar favoritos agora + + +- +- ++ ++ + &Save + &Salvar + + +- ++ + Remove from played + Remover dos já jogados + + +- ++ + Clear all played + Limpa todos os já jogados + + +- ++ + Save play-history now + Salva o histórico dos já jogados agora + + +- +- +- +- ++ ++ ++ ++ + Set tab position north + Definir a posição da aba ao norte + + +- +- +- +- ++ ++ ++ ++ + &North + &Norte + + +- +- +- +- ++ ++ ++ ++ + Set tab position south + Definir a posição da aba ao sul + + +- +- +- +- ++ ++ ++ ++ + &South + &Sul + + +- +- +- +- ++ ++ ++ ++ + Set tab position west + Definir a posição da aba ao Oeste + + +- +- +- +- ++ ++ ++ ++ + &West + &Oeste + + +- +- +- +- ++ ++ ++ ++ + Set tab position east + Definir a posição da aba ao Leste + + +- +- +- +- ++ ++ ++ ++ + &East + &Leste + +@@ -9790,66 +9772,66 @@ Utilize o valor local para a opção '%1', substituir com o valor glob + Aguardando os dados... + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + aguarde o filtro da condição da ROM terminar e tente novamente + + +- +- ++ ++ + please wait for ROM verification to finish and try again + aguarde a verificação da ROM terminar e tente novamente + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + aguarde a verificação da imagem terminar e tente novamente + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + aguarde o ROMAlyzer terminar a análise atual e tente novamente + + +- +- ++ ++ + ROM verification already active + A verificação de ROM já está ativada + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + aguarde a conclusão do recarregamento e tente novamente + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirma + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9860,22 +9842,22 @@ Ele substituíra os dados do cachejá existente. + Realmente deseja verificar a condição de todas as ROMs agora? + + +- ++ + automatic ROM check triggered + a verificação automática de ROM foi disparada + + +- ++ + image cache cleared + o cache das imagens foi limpo + + +- ++ + icon cache cleared + o cache dos ícones foi limpo + + +- ++ + freed %n byte(s) in %1 + + foi liberado %n byte em %1 +@@ -9883,7 +9865,7 @@ Realmente deseja verificar a condição de todas as ROMs agora? + + + +- ++ + %n entry(s) + + %n entrada +@@ -9891,7 +9873,7 @@ Realmente deseja verificar a condição de todas as ROMs agora? + + + +- ++ + removed %n byte(s) in %1 + + foi removido %n byte em %1 +@@ -9899,7 +9881,7 @@ Realmente deseja verificar a condição de todas as ROMs agora? + + + +- ++ + %n file(s) + + %n arquivo +@@ -9907,166 +9889,166 @@ Realmente deseja verificar a condição de todas as ROMs agora? + + + +- ++ + YouTube on-disk cache cleared (%1) + O cache em disco do YouTube foi limpo (%1) + + +- ++ + ROM state cache file '%1' removed + o arquivo do cache da condição da ROM '%1' foi removido + + + +- ++ + About Qt + Sobre o Qt + + +- ++ + ERROR: no match found (?) + ERRO: nada foi encontrado (?) + + +- +- ++ ++ + Export to... + Exportar para... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Selecione o arquivo... + + +- +- ++ ++ + <p>No data available</p> + <b>Nenhum dado disponível</b> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Nenhum dado disponível + + + +- ++ + Embedded emulators + Emuladores embutidos + + +- ++ + Release emulator + Liberar o emulador + + +- ++ + WARNING: no matching window for emulator #%1 found + AVISO: nenhuma janela para o emulador #%1 foi encontrada + + +- ++ + Embedding failed + Houve uma falha ao embutir + + ++ + +- + Scanning pause key + Examinando a tecla de pausa + + +- ++ + Are you sure you want to clear the favorites list? + Tem certeza que deseja limpar a lista dos favoritos? + + +- ++ + Are you sure you want to clear the play history? + Tem certeza que deseja limpar o histórico dos já jogados? + + +- +- ++ ++ + Choose export file + Escolha o arquivo de exportação + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Todos os arquivos (*) + + +- +- ++ ++ + Choose import file + Escolha o arquivo de importação + + +- +- ++ ++ + WARNING: invalid inipath + AVISO: o inipath é inválido + + +- +- ++ ++ + stopping current processing upon user request + interrompendo o processamento atual devido à requisição do usuário + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + As suas alterações na configuração ainda não foram aplicadas. + Deseja encerrar? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Não há um ou qualquer outro emulador em execução. + Eles devem ser mortos ao encerrar? + + +- ++ + There are one or more running downloads. Quit anyway? + Existem um ou mais downloads em execução. Encerrar mesmo assim? + + +- ++ + cleaning up + limpando + + +- ++ + aborting running downloads + abortando os downloads em execução + + +- ++ + saving main widget layout + salvando o layout do elemento principal + +@@ -10077,292 +10059,292 @@ Eles devem ser mortos ao encerrar? + Limpa o cache do ProjectMESS + + +- ++ + Default configuration + Configuração padrão + + +- ++ + ProjectMESS in-memory cache cleared (%1) + O cache da memória do ProjectMESS foi limpo (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + AVISO: foi impossível remover o arquivo do cache '%1' da condição geral da ROM, verifique as permissões + + +- ++ + ProjectMESS page for system '%1' + Página do ProjectMESS para o sistema '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Baixando a página do ProjectMESS para o sistema '%1', aguarde... + + +- ++ + disconnecting audio source from audio sink + desconectando a fonte de áudio do sumidouro de áudio + + +- +- ++ ++ + Enter search string + Insira o termo da busca + + +- ++ + Dock / undock this widget + Anexar / desanexar este elemento + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + nota: os caracteres especiais $, (, ), *, +, ., ?, [, ], ^, {, |, } e \ devem ser precedidos pelo caractere de escape quando forem utilizados de forma literal! + + +- +- +- +- ++ ++ ++ ++ + Reset + Redefinir + + +- ++ + Negate search + Negar a busca + + +- ++ + sorry, devices cannot run standalone + desculpe, os dispositivos não podem ser executados sozinhos + + +- ++ + No devices available + Nenhum dispositivo está disponível + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + padrão + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + &Reconstruir a ROM... + + +- ++ + Include BIOS sets + Incluir a BIOS nos conjuntos + + +- ++ + Include device sets + Incluir os dispositivos nos conjuntos + + ++ + + +- ++ + + +- + Unlock ranks + Destravar as classificações + + +- ++ + machine list reload is already active + o recarregamento da lista das máquinas já está ativo + + +- +- ++ ++ + saving machine selection + salvando a seleção das máquinas + + +- ++ + ERROR: can't load HTML file '%1' + ERRO: foi impossível abrir o arquivo HTML '%1' + + +- ++ + ERROR: can't load PDF viewer from '%1' + ERRO: foi impossível abrir o visualizador PDF em '%1' + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + aguarde o ROMAlyzer concluir a reconstrução atual e tente novamente + + +- ++ + triggering an automatic ROM check on next reload + ativando uma verificação automática da ROM na próxima execução + + +- ++ + machine list cache file '%1' removed + i arquivo do cache da lista das máquinas '%1' foi removido + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + AVISO: foi impossível remover o arquivo do cache '%1' da lista das máquinas, verifique as permissões + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + INFORMAÇÃO: o modo arcade precisa ser configurado primeiro, iniciando a respectiva janela + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + modo arcade: executando o Arcade QMC2, comando = '%1' + + +- ++ + WARNING: failed launching QMC2 Arcade + AVISO: houve uma falha ao iniciar o Arcade QMC2 + + +- ++ + ProjectMESS page for '%1' / '%2' + Página do ProjectMESS para '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Baixando página do ProjectMESS para '%1' / '%2', aguarde... + + +- ++ + Emulator for this machine + O emulador para esta máquina + + +- ++ + please wait for sorting to finish and try again + aguarde o fim da ordenação e tente novamente + + +- ++ + destroying YouTube video widget + destruindo o elemento de vídeos do YouTube + + +- ++ + saving current machine's favorite software + salvando o programa favorito da máquina atual + + +- ++ + saving current machine's device configurations + salvando as configurações dos dispositivos da máquina atual + + +- ++ + destroying machine list + destruindo a lista das máquinas + + +- ++ + destroying emulator configuration instances + destruindo as instâncias de configuração do emulador + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + Mostre os títulos da máquina ou do programa apenas quando a lista das máquinas não está visível por causa do layout atual + + +- +- +- +- ++ ++ ++ ++ + Tab position + Posição da aba + + +- +- +- +- ++ ++ ++ ++ + Component setup + Configuração do componente + + +- +- +- +- ++ ++ ++ ++ + Component setup... + Configuração do componente... + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + N/A + + +- ++ + saving YouTube video info cache + salvando a informação do cache do vídeo do YouTube + + +- ++ + done (saving YouTube video info cache) + feito (salvando a informação do cache do vídeo do YouTube) + + +- +- ++ ++ + failed (saving YouTube video info cache) + houve uma falha (ao salvar a informação do cache do vídeo do YouTube) + + +- ++ + destroying media player + destruindo o tocador de mídia + + +- ++ + destroying image widgets + destruindo os elementos das imagens + + +- ++ + destroying open dialogs + destruindo as janelas que estão abertas + + +- ++ + destroying process manager + destruindo o gerenciador de processo + + +- ++ + killing %n running emulator(s) on exit + + matando %n o emulador em execução ao encerrar +@@ -10370,7 +10352,7 @@ Eles devem ser mortos ao encerrar? + + + +- ++ + keeping %n running emulator(s) alive + + mantendo %n emulador em execução vivo +@@ -10378,60 +10360,60 @@ Eles devem ser mortos ao encerrar? + + + +- ++ + destroying network access manager + destruindo o gerenciador de acesso à rede + + +- ++ + so long and thanks for all the fish + até logo e obrigado pelos peixes + + +- ++ + Welcome to QMC2 v%1! + Bem-vindo ao QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Carregando, aguarde... + + +- ++ + loading style sheet '%1' + carregando as folha de estilos '%1' + + +- ++ + removing current style sheet + removendo a folha de estilo atual + + +- ++ + using default color palette for GUI style '%1' + usando uma paleta de cor padrão para o estilo de interface '%1' + + +- ++ + using custom color palette + usando uma paleta de cores personalizada + + +- ++ + YouTube index - %p% + Índice do YouTube - %p% + + +- ++ + %n video info record(s) loaded + + %n o registro de informação do vídeo foi carregado +@@ -10439,144 +10421,144 @@ Eles devem ser mortos ao encerrar? + + + +- ++ + Select one or more audio files + Selecione um ou mais arquivos de audio + + +- ++ + Add URL + Adiciona uma URL + + +- ++ + Enter valid MP3 stream URL: + Entre uma URL de stream MP3 válida: + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + reprodutor de músicas: informação da faixa: título = '%1', artista = '%2', album = '%3', gênero = '%4' + + +- ++ + Buffering %p% + Carregando %p% + + +- +- ++ ++ + running + executando + + +- +- ++ ++ + Play tagged - %p% + Jogar os etiquetados - %p% + + +- ++ + Add favorites - %p% + Adicionar aos favoritos - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + aguarde a atividade atual terminar e tente novamente (essa operação em lote só pode ser executada de forma exclusiva) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + É muito mais rápido fazer uma auditoria completa do que verificar %1 conjuntos individualmente. Realmente deseja continuar? + + +- ++ + ROM tool tagged - %p% + Ferramenta da ROM com os etiquetados - %p% + + +- +- ++ ++ + Tag - %p% + Etiquetar - %p% + + +- +- ++ ++ + Tagging, please wait... + Etiquetando, aguarde... + + +- +- ++ ++ + Untag - %p% + Remove a etiqueta - %p% + + +- +- ++ ++ + Untagging, please wait... + Removendo as etiquetas, aguarde... + + +- +- ++ ++ + Invert tag - %p% + Inverter a etiqueta - %p% + + +- +- ++ ++ + Inverting tags, please wait... + Invertendo as etiquetas, aguarde... + + +- ++ + External browser + Navegador externo + + +- ++ + External PDF viewer + Visualizador de PDF externo + + +- ++ + Manual selection + Seleção manual + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + Existem diversos manuais em PDF. Escolha aqueles que deseja abrir: + + +- +- ++ ++ + Software detail + Detalhe do programa + + +- ++ + Choose overlay color + Escolha a cor de sobreposição + + +- ++ + WARNING: ROM path '%1' doesn't exist + AVISO: o caminho das ROMs '%1' não existe + + +- ++ + WARNING: ROM path '%1' isn't accessible + AVISO: o caminho das ROMs '%1' não está acessível + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! +@@ -10585,7 +10567,7 @@ Please check the 'rompath' option in the global emulator configuration + Verifique a opção 'rompath' na configuração global do emulador para corrigir isso, caso contrário, as ROMs provavelmente não estarão disponíveis no emulador! + + +- ++ + The ROM paths + + %1 +@@ -10602,63 +10584,63 @@ não existe ou não está disponível + Verifique a opção 'rompath' na configuração global do emulador para corrigir isso, caso contrário, as ROMs provavelmente não estarão disponíveis no emulador! + + +- ++ + Check ROM path + Verifica o caminho das ROMs + + +- ++ + processing global emulator configuration + processando de configuração global do emulador + + ++ + +- + Export global MAME configuration + Exporta a configuração global do MAME + + +- ++ + Import from... + Importar de... + + ++ + +- + Import global MAME configuration + Importar a configuração global do MAME + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + Ativa o processamento dos notificadores de saída do MAME (impõem o uso de '-output console') + + +- +- ++ ++ + <inipath>/mame.ini + <inipath>/mame.ini + + +- +- +- ++ ++ ++ + paused + pausado + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Ativa/desativa a pausa automática dos emuladores embutidos (mantenha pressionado para abrir o menu) + + +- ++ + Scan the pause key used by the emulator + Examina a tecla de pausa usada pelo emulador + + +- ++ + Scan pause key... + Examina a tecla de pausa... + +@@ -10666,39 +10648,39 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- ++ ++ ++ + Icon + Ícone + + +- ++ + setting GUI style to '%1' + configurando estilo da interface para '%1' + + +- ++ + WARNING: GUI style '%1' not found + AVISO: o estilo da interface '%1' não foi encontrado + + +- ++ + WARNING: can't open style sheet '%1' + AVISO: foi impossível abrir folha de estilo '%1' + + +- ++ + loading YouTube video info cache + carregando a informação do cache do vídeo do YouTube + + +- ++ + done (loading YouTube video info cache) + feito (carregando a informação do cache do vídeo do YouTube) + + +- ++ + Choose file to store download + Escolha o arquivo para salvar o download + +@@ -10711,7 +10693,7 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- ++ + Icon / Value + Ícone / Valor + +@@ -10720,10 +10702,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Year + Ano + +@@ -10732,10 +10714,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Fabricante + +@@ -10744,10 +10726,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Name + Nome + +@@ -10756,10 +10738,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Tipo das ROMs + +@@ -10768,9 +10750,9 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- ++ ++ ++ + Category + Categoria + +@@ -10779,9 +10761,9 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- ++ ++ ++ + Version + Versão + +@@ -11021,9 +11003,9 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms total) + +@@ -11100,10 +11082,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Players + Jogadores + +@@ -11199,10 +11181,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Condição geral do controlador + +@@ -11219,7 +11201,7 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- ++ + &Notes + &Notas + +@@ -11332,10 +11314,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Tag + Etiqueta + +@@ -11344,10 +11326,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Source file + Arquivo fonte + +@@ -11357,10 +11339,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Rank + Classificação + +@@ -11429,13 +11411,13 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- ++ + Machine / Attribute + Máquina / Atributo + + + +- ++ + Machine / Clones + Máquina / Clones + +@@ -11446,7 +11428,7 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- ++ + Category / Machine + Categoria / Máquina + +@@ -11457,19 +11439,19 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- ++ + Version / Machine + Versão / Máquina + + + +- ++ + Search for machines (not case-sensitive) + Buscar por máquinas (não sensível à caixa) + + + +- ++ + Search for machines + Buscar por máquinas + +@@ -11670,9 +11652,9 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- ++ ++ ++ + Add current machine to favorites + Adicionar a máquina atual nos favoritos + +@@ -11711,10 +11693,10 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + Verificar a condição da ROM da máquina atual + +@@ -12256,7 +12238,7 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- ++ + Internal browser + Navegador interno + +@@ -12461,12 +12443,12 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + ++ + + +- ++ + + +- + Lock ranks + Trava as classificações + +@@ -12560,7 +12542,7 @@ Verifique a opção 'rompath' na configuração global do emulador par + + + +- ++ + Internal PDF viewer + Visualizador interno de PDF + +@@ -12750,7 +12732,7 @@ Verifique a opção 'rompath' na configuração global do emulador par + Impõem a limpeza (remove) TODOS os caches relacionados aos emuladores + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12761,24 +12743,24 @@ emulador(es) dentro de um prazo razoável. + Tentar incorporar novamente? + + +- ++ + Information + Informação + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Desculpe, o emulador teve uma morte triste :(. + + ++ + +- + Toggle embedder options (hold down for menu) + Ativa/desativa as opções para embutir (mantenha pressionado para exibir o menu) + + +- +- ++ ++ + last message repeated %n time(s) + + a última mensagem que se repetiu %n vez +@@ -12786,65 +12768,65 @@ Tentar incorporar novamente? + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + Joga a máquina selecionada + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Joga a máquina selecionada (embutida) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + Analisa a ROM da máquina atual com o ROMAlyzer + + +- ++ + To favorites + Para os favoritos + + +- ++ + Kill emulator + Matar o emulador + + +- ++ + &Kill emulator + &Matar o emulador + + +- ++ + destroying audio effects dialog + destruindo a janela dos efeitos de áudio + + +- ++ + emulator #%1 is already embedded + o emulador #%1 já está embutido + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + AVISO: as diversas janelas para o emulador #%1 foram encontradas, escolhendo o ID da janela %2 para embutir + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + embutindo o emulador #%1, ID da janela = %2 + +@@ -15692,21 +15674,6 @@ Tem certeza que deseja fazer isso? + Browse system notes template + Procura pelo modelo das notas do sistema + +- +- +- Load software information database (from history.dat) +- Carrega a informação do banco de dados do programa (de history.dat) +- +- +- +- Software information database - history.dat (read) +- Informações do banco de dados do programa - history.dat (leitura) +- +- +- +- Browse software information database (history.dat) +- Procurar pelas informações no banco de dados do programa (history.dat) +- + + + Define additional artwork classes for systems and software-list entries +@@ -15855,11 +15822,6 @@ Tem certeza que deseja fazer isso? + Archive + Arquivo + +- +- +- MAME machine information database - history.dat (read) +- Base da dados de informação de máquinas do MAME -- history.dat (leitura) +- + + + Browse MESS emulator information database (messinfo.dat) +@@ -15880,21 +15842,11 @@ Tem certeza que deseja fazer isso? + Machine favorites file (write) + Arquivo de favoritos das máquinas (escrita) + +- +- +- Load MAME machine information database (history.dat) +- Carrega as informações do banco de dados das máquinas do MAME (history.dat) +- + + + Machine info (MAME) + Informação da máquina (MAME) + +- +- +- Browse MAME machine information database (history.dat) +- Procura pela informação no banco de dados das máquinas do MAME(history.dat) +- + + + Video snap folder +@@ -16000,6 +15952,36 @@ Tem certeza que deseja fazer isso? + Browse system manual folder + Navega pela pasta do manual do sistema + ++ ++ ++ Software information database - history.xml (read) ++ Informações do banco de dados do programa - history.xml (leitura) ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ Base da dados de informação de máquinas do MAME -- history.xml (leitura) ++ ++ ++ ++ Browse software information database (history.xml) ++ Procurar pelas informações no banco de dados do programa (history.xml) ++ ++ ++ ++ Load MAME machine information database (history.xml) ++ Carrega as informações do banco de dados das máquinas do MAME (history.xml) ++ ++ ++ ++ Load software information database (from history.xml) ++ Carrega a informação do banco de dados do programa (de history.xml) ++ ++ ++ ++ Browse MAME machine information database (history.xml) ++ Procura pela informação no banco de dados das máquinas do MAME(history.xml) ++ + + + System manual folder (read) +@@ -17253,28 +17235,28 @@ Tem certeza que deseja fazer isso? + + QObject + +- +- ++ ++ + correct + correto + + +- ++ + incorrect + incorreto + + +- ++ + mostly correct + maioria correto + + +- ++ + not found + não encontrado + + +- ++ + + + +@@ -17292,45 +17274,45 @@ Tem certeza que deseja fazer isso? + Padrão + + +- ++ + Import from... + Importar de... + + ++ + +- + Export machine-specific MAME configuration + Exporta a configuração do MAME específica da máquina + + ++ + +- + Import machine-specific MAME configuration + Importar a configuração do MAME específica da máquina + + +- ++ + Setting up the GUI, please wait... + Configurando a Interface, aguarde... + + +- ++ + M.A.M.E. Catalog / Launcher II v + MAME Catálogo / Launcher II v + + +- ++ + GIT %1 + GIT %1 + + +- ++ + Phonon features enabled - using Phonon v%1 + Recursos Phonon ativados - usando o Phonon v%1 + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + O suporte do SDL ao joystick foi ativado - usando o SDL v%1.%2.%3 + +@@ -17443,19 +17425,19 @@ Tem certeza que deseja fazer isso? + Informação da condição para a lista do programa '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 + + +- ++ + + yes + sim + + +- ++ + + no + não + + +- ++ + + partially + parcialmente +diff --git a/data/lng/qmc2_ro.qm b/data/lng/qmc2_ro.qm +index d097092de87ccaa8f50a01d949c17322de062700..cdbaab15a44ced8f4a2e9e9ed53f77eb69befff9 100644 +GIT binary patch +delta 46 +zcmV+}0MY;Go)7Y#4;nnUWEjftoR!TX9KT?pz1^n(000GYZ(mJBfe?id0fi6(wGabX +E&*Z2QHvj+t + +delta 36 +ucmV+<0Nelao)74r4-h=KWEjftoR!TX9KT?pz1@Ktg&F~c8UnQ%16a>LbPw17 + +diff --git a/data/lng/qmc2_ro.ts b/data/lng/qmc2_ro.ts +index 0ed861a49..a95c272de 100644 +--- a/data/lng/qmc2_ro.ts ++++ b/data/lng/qmc2_ro.ts +@@ -3633,147 +3633,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + + + +- +- ++ ++ + machine info-texts + + + +- ++ + Machine info - %p% + + + +- +- WARNING: missing '$end' in machine info file %1 +- +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- +- +- +- +- WARNING: missing '$info' in machine info file %1 +- +- +- +- ++ + machine info + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -3782,82 +3767,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- ++ + Software info - %p% + + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + + + +- ++ + software info + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + %n software info record(s) imported + + +@@ -3866,43 +3848,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + Emu info - %p% + Informatii emulator - %p% + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + emu info + + + +- ++ + %n emulator info record(s) imported + + +@@ -3911,7 +3893,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + + +@@ -7823,438 +7805,438 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + necunoscut + + +- +- +- ++ ++ ++ + good + bun + + +- +- ++ ++ + bad + rau + + +- +- +- ++ ++ ++ + preliminary + preliminar + + +- +- ++ ++ + supported + suportat + + +- +- ++ ++ + unsupported + nesuportat + + +- +- +- ++ ++ ++ + imperfect + imperfect + + +- ++ + yes + da + + +- ++ + no + nu + + +- ++ + baddump + vid rau + + +- ++ + nodump + niciun vid + + +- ++ + vertical + vertical + + +- ++ + horizontal + orizontal + + +- ++ + raster + raster + + +- ++ + Unknown + Necunoscut + + +- ++ + On + Pornit + + +- ++ + Off + Oprit + + +- ++ + audio + audio + + +- ++ + unused + nefolosit + + +- ++ + Unused + Nefolosit + + +- ++ + cpu + procesor + + +- ++ + vector + vector + + +- ++ + lcd + lcd + + +- ++ + joy4way + joy4way + + +- ++ + joy8way + joy8way + + +- ++ + trackball + trackball + + +- ++ + joy2way + joy2way + + +- ++ + doublejoy8way + doublejoy4way + + +- ++ + dial + apelare + + +- ++ + paddle + paleta + + +- ++ + pedal + pedala + + +- ++ + stick + bat + + +- ++ + vjoy2way + vjoy2way + + +- ++ + lightgun + arma usoara + + +- ++ + doublejoy4way + doublejoy4way + + +- ++ + vdoublejoy2way + vdoublejoy2way + + +- ++ + doublejoy2way + doublejoy2way + + +- ++ + printer + imprimanta + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + cartus + + +- ++ + cassette + caseta + + +- ++ + quickload + incarcare rapia + + +- ++ + floppydisk + floppydisk + + +- ++ + serial + serial + + +- ++ + snapshot + imagine instantanee + + +- ++ + original + original + + +- ++ + compatible + compatibil + + +- +- ++ ++ ++ + +- + N/A + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: nu pot deschide fisier iconita, va rog verificati permisiunile de acces pentru %1 + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + Astept date... + + +- ++ + determining emulator version and supported sets + determin versiune emulator si seturi suportate + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: nu pot porni executabil MAME intr-un interval de timp rezonabil, renunt + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + terminat (determin versiune emulator si seturi suportate, timp scurs = %1) + + +- +- ++ ++ + emulator info: type = %1, version = %2 + informatii emulator: tip = %1, versiune = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: nu pot determina tipul de emulator si versiunea + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL:nu pot determina numarul de seturi suportate + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + Date XML - %p% + + +- ++ + verifying ROM status for '%1' + verific status ROM pentru '%1' + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + EROARE: nu pot status ROM din cache pentru scriere, cale = %1 + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- +- +- ++ ++ ++ + ROM check - %p% + verificare ROM - %p% + + +- ++ + Name + Nume + + +- ++ + Source file + Fisier sursa + + +- ++ + Is BIOS? + Este BIOS? + + +- ++ + Is device? + Este dispozitiv? + + +- ++ + Runnable + Executabil + + +- ++ + Clone of + Clona a + + +- ++ + ROM of + ROM al + + +- ++ + Sample of + Mostra a + + +- ++ + Year + An + + +- ++ + Manufacturer + Producator + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8263,430 +8245,430 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Marime + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Imbina + + +- +- ++ ++ + Region + Regiune + + +- ++ + Offset + Ofset + + +- +- +- +- ++ ++ ++ ++ + Status + Status + + +- +- ++ ++ + Optional + Optional + + +- ++ + Device reference + Referinta dispozitiv + + +- ++ + Chip + Cip + + +- +- +- ++ ++ ++ + Tag + Tag + + +- +- ++ ++ + Type + Tip + + +- ++ + Clock + Ceas + + +- ++ + Display + Afisaj + + +- ++ + Rotate + Roteste + + +- ++ + Flip-X + Invarte X + + +- ++ + Width + Latime + + +- ++ + Height + Inaltime + + +- ++ + Refresh + Reimprospateaza + + +- ++ + Pixel clock + Ceas pixel + + +- ++ + H-Total + H-Total + + +- ++ + H-Bend + H-Indoaie + + +- ++ + HB-Start + HD-Start + + +- ++ + V-Total + V-Total + + +- ++ + V-Bend + V-Indoaie + + +- ++ + VB-Start + VB-Start + + +- +- ++ ++ + Sound + Sunet + + +- ++ + Channels + Chanale + + +- ++ + Input + Introducere + + +- ++ + Service + Serviciu + + +- ++ + Tilt + Inclinat + + +- ++ + Players + Jucatori + + +- +- ++ ++ + Buttons + Butoane + + +- ++ + Coins + Monede + + +- ++ + Control + Control + + +- ++ + Minimum + Minim + + +- ++ + Maximum + Maxim + + +- ++ + Sensitivity + Sensitivitate + + +- ++ + Key Delta + Cheie Delta + + +- ++ + Reverse + Invers + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + Comutare DIP + + +- ++ + DIP value + Valoare DIP + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Initial + + +- ++ + Updating + Actualizez + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + Configurare + + +- ++ + Mask + Masca + + +- ++ + Setting + Setari + + +- ++ + Value + Valoare + + +- ++ + Driver + Driver + + +- ++ + Emulation + Emulatie + + +- ++ + Color + Culoare + + +- ++ + Graphic + Grafic + + +- ++ + Cocktail + Cocktail + + +- ++ + Protection + Protectie + + +- ++ + Save state + Salveaza stare + + +- ++ + Palette size + Marime paleta + + +- ++ + BIOS set + Setare BIOS + + +- ++ + Description + Descriere + + +- ++ + Sample + Mostra + + +- ++ + Disk + Disk + + +- ++ + MD5 + MD5 + + +- ++ + Index + Index + + +- ++ + Adjuster + Reglare + + +- ++ + Software list + Lista software + + +- ++ + Category + Categorie + + +- ++ + Item + Obiecte + + +- ++ + Device + Dispozitiv + + +- ++ + Mandatory + Obligatoriu + + +- ++ + Interface + Interfata + + +- ++ + Instance + Instanta + + +- ++ + Brief name + Nume scurt + + +- ++ + Extension + Extensie + + +- ++ + RAM options + Optiuni RAM + + +- ++ + Option + Optiuni + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + AVERTIZARE: nu pot deschide stare ROM din cache, va rog verificati ROM-uri + + +- ++ + loading ROM state from cache + incarc stare ROM din cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + terminat (incarcarc stare ROM din cache, timp scurs = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n stari ROM incarcate din cache +@@ -8695,86 +8677,86 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + loading XML data and recreating cache + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- +- ++ ++ + ascending + ascendent + + +- +- ++ ++ + descending + descendent + + +- ++ + , %n BIOS set(s) + + , %n BIOS set(uri) +@@ -8783,7 +8765,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + si % dispozitive incarcate +@@ -8792,196 +8774,196 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Informatii stare ROM: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + AVERTIZARE: verificare stare cache ROM incompleta sau invechita, declansez o verificare ROM automata + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + AVERTIZARE: verificare stare cache ROM incompleta sau invechita, va rog reverificati ROM-urile + + +- ++ + machine description + + + +- ++ + tag + tag + + +- ++ + year + an + + +- ++ + manufacturer + producator + + +- ++ + machine name + + + +- ++ + ROM types + + + +- ++ + players + jucatori + + +- ++ + driver status + status driver + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + categorie + + +- ++ + version + versiune + + +- ++ + ROM state filter already active + filtru de stare ROM deja activ + + +- ++ + please wait for ROM verification to finish and try again + va rog asteptati finalizarea verificarii ROM si incercati din nou + + +- ++ + please wait for reload to finish and try again + va rog asteptati ca reincarcarea sa se termine si incercati din nou + + +- ++ + applying ROM state filter + aplic filtru de stare ROM + + +- ++ + State filter - %p% + Stare filtru - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + terminat (aplic filtru de stare ROM, timp scurs = %1) + + +- ++ + saving favorites + salvez favorite + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: nu pot deschide fisier favorite pentru scriere, cale = %1 + + +- ++ + saving play history + salvez istoric jocuri + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: nu pot deschide fisier istoric jocuri pentru scriere, cale = %1 + + +- ++ + L: + L: + + +- ++ + C: + C: + + +- ++ + M: + M: + + +- ++ + I: + I: + + +- ++ + N: + N: + + +- ++ + U: + U: + + +- ++ + S: + S: + + +- ++ + T: + T: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + AVERTIZARE: apel audit emulator nu s-a terminat curat - codExit = %1, Stareexit = %2 + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + picat + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + +@@ -8990,7 +8972,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + +@@ -8999,83 +8981,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + terminat (verific stare ROM pentru '%1', timp scurs = %2) + + +- +- ++ ++ + ROM state + stare ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + Stare ROM pentru '%1' este '%2' + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9084,47 +9066,47 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + Filtering, please wait... + + + +- ++ + pre-caching icons from ZIP archive + pre-caching iconite din arhiva ZIP + + +- ++ + Icon cache - %p% + Cache iconite - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + terminat (salvez iconite din fisier ZIP in cache, timp scurs = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + %n iconite incarcate +@@ -9133,124 +9115,124 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- ++ + pre-caching icons from directory + pre-caching iconite din director + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + terminat (salvez inconite dn director in cache, timp scurs = %1) + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading catver.ini + incarc catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + EROAREL nu po deschide '%1' pentru citire - niciun catver.ini valabil + + +- ++ + done (loading catver.ini, elapsed time = %1) + terminat (incarc catver.ini, timp scurs = %1) + + +- ++ + %1 category / %2 version records loaded + %1 categorie / %2 inregistrari versiune incarcate + + +- ++ + correct + corect + + +- ++ + mostly correct + majoritatea corecte + + +- ++ + incorrect + incorect + + +- ++ + not found + negasit + + +- ++ + Category view - %p% + Vedere pe categorii - %p% + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + %n category record(s) loaded + + +@@ -9259,7 +9241,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + Vedere versiune - %p% + +@@ -9598,16 +9580,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Tag + + + +- ++ + Icon / Value + Iconita / Valoare + +@@ -9616,10 +9598,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + An + +@@ -9628,10 +9610,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Producator + +@@ -9640,10 +9622,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + Nume + +@@ -9652,10 +9634,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Tip de ROM + +@@ -9664,10 +9646,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + Jucatori + +@@ -9676,10 +9658,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Status driver + +@@ -9688,9 +9670,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + Categorie + +@@ -9699,9 +9681,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + Versiune + +@@ -9722,9 +9704,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + Iconita + +@@ -9751,7 +9733,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + Emulatoare incorporate + +@@ -9975,9 +9957,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms total) + +@@ -10107,7 +10089,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + Note + +@@ -10164,11 +10146,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jucati + +@@ -10200,7 +10182,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + Despre Qt + +@@ -10282,10 +10264,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Catre &favorite + +@@ -10338,13 +10320,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10355,7 +10337,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10366,19 +10348,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10449,9 +10431,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10470,10 +10452,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10644,10 +10626,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + Fisier sursa + +@@ -10657,10 +10639,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10996,11 +10978,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jucati &incorporat + +@@ -11376,7 +11358,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -11581,12 +11563,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + ++ + + +- ++ + + +- + Lock ranks + + +@@ -11680,7 +11662,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11692,8 +11674,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + ultimul mesaj repetat de %n ori +@@ -11702,48 +11684,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Initial + + +- +- ++ ++ + Enter search string + Introduceti nume sir de cautare + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Comutati pauze automate pentru emulatoare incorporate (tineti apasat pentru meniu) + + +- ++ + Scan the pause key used by the emulator + Scanati tasta de pauza folosita de emulator + + +- ++ + Scan pause key... + Scanati tasta de pauza... + + +- ++ + Toggle maximization of embedded emulator windows + Comutati maximizarea ferestrelor mulatorului incorporat + + +- ++ + Dock / undock this widget + Andocati / detasati acest widget + +@@ -11754,265 +11736,265 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embed emulator widget + Incorporati windget emulator + + +- ++ + &Embed + &Incorporati + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Opreste emulatorul selectat (trimite semnalul KILL catre procesele emulatoarelor) + + +- ++ + &Kill + &Kill + + +- +- ++ ++ + Copy emulator command line to clipboard + Copiati linia de comanda din emulator in clipboard + + +- +- ++ ++ + &Copy command + &Comanda copiere + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Verifica stare &ROM + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analizeaza ROM... + + +- ++ + Remove from favorites + Sterge din favorite + + +- +- ++ ++ + &Remove + Ste&rge + + +- ++ + Clear all favorites + Sterge toate favoritele + + +- +- ++ ++ + &Clear + &Sterge + + +- ++ + Save favorites now + Salveaza favorite acum + + +- +- ++ ++ + &Save + &Salveaza + + +- ++ + Remove from played + Sterge din jucate + + +- ++ + Clear all played + Sterge toate jucate + + +- ++ + Save play-history now + Salveaza istoric de jucare acum + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- +- +- +- ++ ++ ++ ++ + Set tab position north + Seteaza pozitie tab catre nord + + +- +- +- +- ++ ++ ++ ++ + &North + &Nord + + +- +- +- +- ++ ++ ++ ++ + Set tab position south + Seteaza pozitie tab catre sud + + +- +- +- +- ++ ++ ++ ++ + &South + &Sud + + +- +- +- +- ++ ++ ++ ++ + Set tab position west + Seteaza pozitie tab catre vest + + +- +- +- +- ++ ++ ++ ++ + &West + &Vest + + +- +- +- +- ++ ++ ++ ++ + Set tab position east + Seteaza pozitie tab catre est + + +- +- +- +- ++ ++ ++ ++ + &East + &Est + + +- +- +- +- ++ ++ ++ ++ + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + sorry, devices cannot run standalone + scuze, dispozitivele nu pot rula singure + + +- ++ + No devices available + Niciun dispozitiv disponibil + + +- ++ + Default configuration + + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + va rog asteptati pentru filtrare de stare ROM si incercati din nou + + +- +- ++ ++ + please wait for ROM verification to finish and try again + va rog asteptati verificarea ROM sa se termine si incercati din nou + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + va rog asteptati verificarea imaginii sa se termine si incercati din nou + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + va rog asteptati sa se termine analiza ROMAlyzer si inercati din nou + + +- +- ++ ++ + ROM verification already active + Verificare ROM este deja activa + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + va rog asteptati pentru ca reincarcarea sa se termine si incercati din nou + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirma + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -12023,22 +12005,22 @@ Va rescrie date existente in cache. + CHiar doriti sa verificati stari ROM acum? + + +- ++ + automatic ROM check triggered + declansator automatic de verificare ROM + + +- ++ + image cache cleared + cache cu imagini curatat + + +- ++ + icon cache cleared + cache cu iconite curatat + + +- ++ + freed %n byte(s) in %1 + + am eliberat %n byte(s) in %1 +@@ -12047,7 +12029,7 @@ CHiar doriti sa verificati stari ROM acum? + + + +- ++ + %n entry(s) + + %n intrari +@@ -12056,7 +12038,7 @@ CHiar doriti sa verificati stari ROM acum? + + + +- ++ + removed %n byte(s) in %1 + + am sters %n byte(s) in %1 +@@ -12065,7 +12047,7 @@ CHiar doriti sa verificati stari ROM acum? + + + +- ++ + %n file(s) + + %n fisiere +@@ -12074,363 +12056,363 @@ CHiar doriti sa verificati stari ROM acum? + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + YouTube on-disk cache cleared (%1) + YouTube din cache disk curatat (%1) + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + implicit + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Jucati pe masina selectata (incorporat) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + AVERTIZARE: nu pot sterge fisier cache cu stare ROM '%1', va rog verificati permisiunile + + +- ++ + triggering an automatic ROM check on next reload + declansez o verificare ROM automata la urmatoarea reincarcare + + +- ++ + ERROR: no match found (?) + EROARE: nu am gasit niciun rezultat (?) + + +- ++ + ProjectMESS page for '%1' / '%2' + Pagina ProjectMESS pentru '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Incarc pagina ProjectMESS pentru '%1' / '%2', va rog asteptati... + + +- +- ++ ++ + Export to... + Exporta catre... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Alegeti fisier... + + +- +- ++ ++ + <p>No data available</p> + <p>Nu sunt date valabile</p> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Nu sunt date valabile + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + +- +- +- +- +- +- &Rebuild ROM... +- +- + + + + + ++ &Rebuild ROM... ++ ++ ++ ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + Reseteaza + + +- ++ + Negate search + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + ++ + + +- ++ + + +- + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- ++ + emulator #%1 is already embedded + emulatorul #%1 este deja incorporat + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + AVERTIZARE: ferestre multiple gasite pentru emulatorul #%1, aleg fereastra cu ID %2 pentru incorporare + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + incorporez emulator #%1, ID fereastra = %2 + + +- +- +- ++ ++ ++ + paused + pauzat + + +- ++ + Release emulator + Elibereaza emulator + + ++ + +- + Toggle embedder options (hold down for menu) + Comutati optiuni incorporator (tineti apasat pentru meniu) + + +- ++ + To favorites + La favorite + + +- ++ + Kill emulator + Termina emulator + + +- ++ + &Kill emulator + &Termina emulator + + +- ++ + WARNING: no matching window for emulator #%1 found + AVERTIZARE: nicio fereastra potrivita a fost gasita pentru emulatorul #%1 + + +- ++ + Embedding failed + Incorporarea a esuat + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12441,141 +12423,141 @@ Retry embedding? + Reincerc incorporare? + + +- ++ + Information + Informatii + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Scuze, emulatorul a murit intre timp de o moarte trista :(. + + ++ + +- + Scanning pause key + Scanez tasta de pauza + + +- ++ + Are you sure you want to clear the favorites list? + Sunteti sigur ca doriti sa curatati lista de favorite? + + +- ++ + Are you sure you want to clear the play history? + Sunteti sigur ca doriti sa curatati istoricul de jocuri? + + +- +- ++ ++ + Choose export file + Alegeti fisier de export + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Toate fisierele (*) + + +- +- ++ ++ + Choose import file + Alegeti fisierul de import + + +- +- ++ ++ + WARNING: invalid inipath + AVERTIZARE: cale ini invalida + + +- +- ++ ++ + stopping current processing upon user request + opresc procesare curenta la cererea utilizatorului + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Schimbarile de configurare nu au fost aplicate inca. + Sigur renuntati? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Sunt unul sau mai multe emulatoare care inca ruleaza. + Ar trebui sa le termin pe toate la iesire? + + +- ++ + There are one or more running downloads. Quit anyway? + Sunt unul sau mai multe descarcari in curs. Renunt oricum? + + +- ++ + cleaning up + fac curatenie + + +- ++ + aborting running downloads + abandonez descarcari curente + + +- ++ + disconnecting audio source from audio sink + deconectez sursa audio de la sincronizare audio + + +- ++ + destroying audio effects dialog + distrug dialog de efecte audio + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + distrug widget video YouTube + + +- ++ + saving main widget layout + salvez aspect widget principal + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + distrug manager de procese + + +- ++ + killing %n running emulator(s) on exit + + termin %n emulatoare active la iesire +@@ -12584,7 +12566,7 @@ Ar trebui sa le termin pe toate la iesire? + + + +- ++ + keeping %n running emulator(s) alive + + pastrez %n emulatoare active care ruleaza +@@ -12593,86 +12575,86 @@ Ar trebui sa le termin pe toate la iesire? + + + +- ++ + destroying network access manager + distrug manager de acces la retea + + +- ++ + so long and thanks for all the fish + la revedere si multumesc pentru tot pestele + + +- ++ + Welcome to QMC2 v%1! + Bun venit la QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + loading style sheet '%1' + incarc foaie de still '%1' + + +- ++ + removing current style sheet + sterg foaie de stil curenta + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + Index YouTube - %p% + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + %n inregistrari cu informatii video incarcate +@@ -12681,156 +12663,156 @@ Ar trebui sa le termin pe toate la iesire? + + + +- ++ + Select one or more audio files + Alegeti unul sau mai multe fisiere audio + + +- ++ + Add URL + Adaugati URL + + +- ++ + Enter valid MP3 stream URL: + Introduceti URL cu stream MP3 valid: + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + player audio: informatii piesa: titlu = '%1', artist = '%2', album = '%3', gen = '%4' + + +- ++ + Buffering %p% + Tamponare %p% + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + Alegeti fisierul in care sa stocati descarcarea + + +- +- ++ ++ + Play tagged - %p% + Redati etichetate - %p% + + +- ++ + Add favorites - %p% + Adaugati favorite - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + va rog asteptati ca activitatea curenta sa se termine si incercati din nou (aceasta operatie de mod de lot poate rula numai exclusiv) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + Unealta ROM etichetata - %p% + + +- +- ++ ++ + Tag - %p% + Eticheta - %p% + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + Dezeticheteaza - %p% + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + Inverseaza eticheta - %p% + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Detalii software + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12841,41 +12823,41 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + precosez configuratie globala emulator + + ++ + +- + Export global MAME configuration + Exporta configuratie MAME globala + + +- ++ + Import from... + Importa din... + + ++ + +- + Import global MAME configuration + Importa configuratie MAME globala + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + <inipath>/mame.ini + +@@ -14004,21 +13986,6 @@ Please check the 'rompath' option in the global emulator configuration + Browse system notes template + + +- +- +- Load software information database (from history.dat) +- +- +- +- +- Software information database - history.dat (read) +- +- +- +- +- Browse software information database (history.dat) +- +- + + + Define additional artwork classes for systems and software-list entries +@@ -14442,6 +14409,36 @@ Please check the 'rompath' option in the global emulator configuration + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ ++ ++ ++ ++ Browse software information database (history.xml) ++ ++ ++ ++ ++ Load MAME machine information database (history.xml) ++ ++ ++ ++ ++ Load software information database (from history.xml) ++ ++ ++ ++ ++ Browse MAME machine information database (history.xml) ++ ++ + + + System manual folder (read) +@@ -15413,11 +15410,6 @@ Please check the 'rompath' option in the global emulator configuration + Browse machine favorites file + + +- +- +- MAME machine information database - history.dat (read) +- +- + + + +@@ -15433,21 +15425,11 @@ Please check the 'rompath' option in the global emulator configuration + Machine favorites file (write) + + +- +- +- Load MAME machine information database (history.dat) +- +- + + + Machine info (MAME) + + +- +- +- Browse MAME machine information database (history.dat) +- +- + + + Machine description +@@ -17278,28 +17260,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + corect + + +- ++ + incorrect + incorect + + +- ++ + mostly correct + majoritatea corecte + + +- ++ + not found + negasit + + +- ++ + + + +@@ -17317,45 +17299,45 @@ Are you sure you want to do this? + Initial + + +- ++ + Import from... + Importa din... + + ++ + +- + Export machine-specific MAME configuration + + + ++ + +- + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + Setez Interfata Grafica, va rog asteptati... + + +- ++ + M.A.M.E. Catalog / Launcher II v + M.A.M.E. Catalog / Launcher II v + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + Caracteristi Phonon activate - folosesc Phonon v%1 + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Suport joystick SDL activat - folosesc SDL v%1.%2.%3 + +@@ -17463,19 +17445,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + da + + +- ++ + + no + nu + + +- ++ + + partially + +diff --git a/data/lng/qmc2_sv.qm b/data/lng/qmc2_sv.qm +index 679862ddb47fab91afb40526f36f8060a66351b2..13d3b823a619dc91a92ceef7f9546c9077663fbd 100644 +GIT binary patch +delta 40 +ycmV+@0N4NQ{{;5`1R6ZJWEjftoR!TX9KT?pz1^n(000GZc3)FPfe^J20o*^DhY`O3 + +delta 30 +ocmV+(0O9}k{{-y+1Q0y9WEjftoR!TX9KT?pz1@KtwHg83Kl|wqJpcdz + +diff --git a/data/lng/qmc2_sv.ts b/data/lng/qmc2_sv.ts +index 1cd009ea7..909cd46af 100644 +--- a/data/lng/qmc2_sv.ts ++++ b/data/lng/qmc2_sv.ts +@@ -3627,147 +3627,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + + + +- +- ++ ++ + machine info-texts + + + +- ++ + Machine info - %p% + + + +- +- WARNING: missing '$end' in machine info file %1 +- +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- +- +- +- +- WARNING: missing '$info' in machine info file %1 +- +- +- +- ++ + machine info + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -3775,82 +3760,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- ++ + Software info - %p% + + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + + + +- ++ + software info + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + %n software info record(s) imported + + +@@ -3858,43 +3840,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + Emu info - %p% + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + emu info + + + +- ++ + %n emulator info record(s) imported + + +@@ -3902,7 +3884,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + + +@@ -7800,460 +7782,460 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + okänt + + +- +- +- ++ ++ ++ + good + bra + + +- +- ++ ++ + bad + dålig + + +- +- +- ++ ++ ++ + preliminary + preliminär + + +- +- ++ ++ + supported + stöds + + +- +- ++ ++ + unsupported + stöds inte + + +- +- +- ++ ++ ++ + imperfect + ofullständig + + +- ++ + yes + ja + + +- ++ + no + nej + + +- ++ + baddump + + + +- ++ + nodump + + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + Okänt + + +- ++ + On + + + +- ++ + Off + Av + + +- ++ + audio + ljud + + +- ++ + unused + + + +- ++ + Unused + + + +- ++ + cpu + processor + + +- ++ + vector + vektor + + +- ++ + lcd + lcd + + +- ++ + joy4way + + + +- ++ + joy8way + + + +- ++ + trackball + + + +- ++ + joy2way + + + +- ++ + doublejoy8way + + + +- ++ + dial + + + +- ++ + paddle + + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + + + +- ++ + lightgun + ljuspistol + + +- ++ + doublejoy4way + + + +- ++ + vdoublejoy2way + + + +- ++ + doublejoy2way + + + +- ++ + printer + skrivare + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + cartridge + + +- ++ + cassette + kassett + + +- ++ + quickload + + + +- ++ + floppydisk + diskett + + +- ++ + serial + + + +- ++ + snapshot + + + +- ++ + original + + + +- ++ + compatible + kompatibel + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + Väntar på data... + + +- ++ + determining emulator version and supported sets + + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + + + +- +- ++ ++ + emulator info: type = %1, version = %2 + + + +- ++ + FATAL: couldn't determine emulator type and version + + + +- ++ + FATAL: couldn't determine the number of supported sets + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + XML-data - %p% + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + + + +- ++ + verifying ROM status for '%1' + + + +- +- +- ++ ++ ++ + ROM check - %p% + ROM-kontroll - %p% + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + Updating + Uppdaterar + + +- ++ + Name + Namn + + +- ++ + Source file + Källfil + + +- ++ + Is BIOS? + Är BIOS? + + +- ++ + Is device? + Är enhet? + + +- ++ + Runnable + Körbar + + +- ++ + Clone of + Klon av + + +- ++ + ROM of + ROM av + + +- ++ + Sample of + Sampling av + + +- ++ + Year + År + + +- ++ + Manufacturer + Tillverkare + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ ++ + +- + N/A + + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8261,552 +8243,552 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + loading XML data and recreating cache + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Storlek + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + + + +- +- ++ ++ + Region + Region + + +- ++ + Offset + Position + + +- +- +- +- ++ ++ ++ ++ + Status + Status + + +- +- ++ ++ + Optional + Valfritt + + +- +- ++ ++ + SHA-1 + + + +- ++ + Device reference + Enhetsreferens + + +- ++ + Chip + Chip + + +- +- +- ++ ++ ++ + Tag + Tagg + + +- +- ++ ++ + Type + Typ + + +- ++ + Clock + Klocka + + +- ++ + Display + + + +- ++ + Rotate + Rotera + + +- ++ + Flip-X + + + +- ++ + Width + Bredd + + +- ++ + Height + Höjd + + +- ++ + Refresh + Uppdatera + + +- ++ + Pixel clock + + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- ++ ++ + Sound + Ljud + + +- ++ + Channels + Kanaler + + +- ++ + Input + Inmatning + + +- ++ + Service + Tjänst + + +- ++ + Tilt + Tilt + + +- ++ + Players + Spelare + + +- +- ++ ++ + Buttons + Knappar + + +- ++ + Coins + Mynt + + +- ++ + Control + + + +- ++ + Minimum + Minimum + + +- ++ + Maximum + Maximum + + +- ++ + Sensitivity + Känslighet + + +- ++ + Key Delta + + + +- ++ + Reverse + Omvänd + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + tagg + + +- ++ + year + år + + +- ++ + manufacturer + tillverkare + + +- ++ + machine name + + + +- ++ + ROM types + ROM-typer + + +- ++ + players + spelare + + +- ++ + driver status + drivrutinsstatus + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + kategori + + +- ++ + version + version + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + correct + korrekta + + +- ++ + mostly correct + mestadels korrekta + + +- ++ + incorrect + felaktiga + + +- ++ + not found + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Standard + + +- ++ + Configuration + Konfiguration + + +- ++ + Mask + + + +- ++ + Setting + Inställning + + +- ++ + Value + Värde + + +- ++ + Driver + Drivrutin + + +- ++ + Emulation + Emulering + + +- ++ + Color + Färg + + +- ++ + Graphic + Grafik + + +- ++ + Cocktail + + + +- ++ + Protection + Skydd + + +- ++ + Save state + Spara tillstånd + + +- ++ + Palette size + Palettstorlek + + +- ++ + BIOS set + + + +- ++ + Description + Beskrivning + + +- ++ + Sample + + + +- ++ + Disk + Disk + + +- ++ + MD5 + MD5 + + +- ++ + Index + Index + + +- ++ + Adjuster + + + +- ++ + Software list + Programlista + + +- ++ + Category + Kategori + + +- ++ + Item + Objekt + + +- ++ + Device + Enhet + + +- ++ + Mandatory + Nödvändig + + +- ++ + Interface + Gränssnitt + + +- ++ + Instance + Instans + + +- ++ + Brief name + Kort namn + + +- ++ + Extension + Tillägg + + +- ++ + RAM options + RAM-alternativ + + +- ++ + Option + Alternativ + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + + + +- ++ + loading ROM state from cache + + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + + + +- ++ + %n cached ROM state(s) loaded + + +@@ -8814,54 +8796,54 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- +- ++ ++ + ascending + stigande + + +- +- ++ ++ + descending + fallande + + +- ++ + , %n BIOS set(s) + + +@@ -8869,7 +8851,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + and %n enhet inlästa +@@ -8877,136 +8859,136 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + + + +- ++ + ROM state filter already active + + + +- ++ + please wait for ROM verification to finish and try again + + + +- ++ + please wait for reload to finish and try again + + + +- ++ + applying ROM state filter + + + +- ++ + State filter - %p% + + + +- ++ + done (applying ROM state filter, elapsed time = %1) + + + +- ++ + saving favorites + sparar favoriter + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + + + +- ++ + saving play history + + + +- ++ + FATAL: can't open play history file for writing, path = %1 + + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + + + +- ++ + S: + + + +- ++ + T: + + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + +@@ -9014,7 +8996,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + +@@ -9022,83 +9004,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + + + +- +- ++ ++ + ROM state + ROM-tillstånd + + +- +- ++ ++ + ROM status for '%1' is '%2' + + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9106,42 +9088,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + pre-caching icons from ZIP archive + + + +- ++ + Icon cache - %p% + + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + +@@ -9149,77 +9131,77 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from directory + + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- ++ + loading catver.ini + läser in catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + + + +- ++ + done (loading catver.ini, elapsed time = %1) + + + +- ++ + %1 category / %2 version records loaded + + + +- ++ + Category view - %p% + + + +- ++ + %n category record(s) loaded + + +@@ -9227,7 +9209,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + + +@@ -9566,16 +9548,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Tagg + + + +- ++ + Icon / Value + Ikon / Värde + +@@ -9584,10 +9566,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + År + +@@ -9596,10 +9578,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Tillverkare + +@@ -9608,10 +9590,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + Namn + +@@ -9620,10 +9602,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + ROM-typer + +@@ -9632,10 +9614,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + Spelare + +@@ -9644,10 +9626,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Drivrutinsstatus + +@@ -9656,9 +9638,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + Kategori + +@@ -9667,9 +9649,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + Version + +@@ -9690,9 +9672,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + Ikon + +@@ -9719,7 +9701,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + + +@@ -9943,9 +9925,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms totalt) + +@@ -10075,7 +10057,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + + +@@ -10132,11 +10114,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Spela + +@@ -10168,7 +10150,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + Om Qt + +@@ -10250,10 +10232,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + + +@@ -10306,13 +10288,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10323,7 +10305,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10334,19 +10316,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10417,9 +10399,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10438,10 +10420,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10612,10 +10594,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + Källfil + +@@ -10625,10 +10607,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10964,11 +10946,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + + +@@ -11344,7 +11326,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -11549,12 +11531,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + ++ + + +- ++ + + +- + Lock ranks + + +@@ -11648,7 +11630,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11660,8 +11642,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + +@@ -11669,48 +11651,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Standard + + +- +- ++ ++ + Enter search string + + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + + + +- ++ + Scan the pause key used by the emulator + + + +- ++ + Scan pause key... + + + +- ++ + Toggle maximization of embedded emulator windows + + + +- ++ + Dock / undock this widget + + +@@ -11721,123 +11703,131 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embed emulator widget + + + +- ++ + &Embed + &Bädda in + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + + + +- ++ + &Kill + &Döda + + +- +- ++ ++ + Copy emulator command line to clipboard + + + +- +- ++ ++ + &Copy command + + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Kontrollera &ROM-tillstånd + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analysera ROM... + + +- ++ + Remove from favorites + Ta bort från favoriter + + +- +- ++ ++ + &Remove + &Ta bort + + +- ++ + Clear all favorites + Töm alla favoriter + + +- +- ++ ++ + &Clear + &Töm + + +- ++ + Save favorites now + Spara favoriter nu + + +- +- ++ ++ + &Save + &Spara + + +- ++ + Remove from played + Ta bort från spelade + + +- ++ + Clear all played + Töm alla spelade + + +- ++ + Save play-history now + Spara spelhistorik nu + + +- +- +- +- ++ ++ ++ ++ + Tab position + + ++ ++ ++ ++ ++ ++ Set tab position north ++ ++ + + + + + +- Set tab position north ++ &North + + + +- +- +- +- +- &North ++ ++ ++ ++ ++ Set tab position south + + + +@@ -11845,15 +11835,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position south ++ &South + + + +- +- +- +- +- &South ++ ++ ++ ++ ++ Set tab position west + + + +@@ -11861,15 +11851,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position west ++ &West + + + +- +- +- +- +- &West ++ ++ ++ ++ ++ Set tab position east + + + +@@ -11877,15 +11867,15 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position east ++ &East + + + +- +- +- +- +- &East ++ ++ ++ ++ ++ Component setup + + + +@@ -11893,93 +11883,85 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Component setup +- +- +- +- +- +- +- + Component setup... + + + +- ++ + sorry, devices cannot run standalone + + + +- ++ + No devices available + Inga enheter tillgängliga + + +- ++ + Default configuration + + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + + + +- +- ++ ++ + please wait for ROM verification to finish and try again + + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + + + +- +- ++ ++ + ROM verification already active + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Bekräfta + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11987,22 +11969,22 @@ Do you really want to check all ROM states now? + + + +- ++ + automatic ROM check triggered + + + +- ++ + image cache cleared + + + +- ++ + icon cache cleared + + + +- ++ + freed %n byte(s) in %1 + + +@@ -12010,7 +11992,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n entry(s) + + %n post +@@ -12018,7 +12000,7 @@ Do you really want to check all ROM states now? + + + +- ++ + removed %n byte(s) in %1 + + tog bort %n byte i %1 +@@ -12026,7 +12008,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n file(s) + + %n fil +@@ -12034,363 +12016,363 @@ Do you really want to check all ROM states now? + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + YouTube on-disk cache cleared (%1) + + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + standard + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + + + +- ++ + triggering an automatic ROM check on next reload + + + +- ++ + ERROR: no match found (?) + + + +- ++ + ProjectMESS page for '%1' / '%2' + + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + + + +- +- ++ ++ + Export to... + Exportera till... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Välj fil... + + +- +- ++ ++ + <p>No data available</p> + <p>Inget data tillgängligt</p> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Inget data tillgängligt + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + +- +- +- +- +- +- &Rebuild ROM... +- +- + + + + + ++ &Rebuild ROM... ++ ++ ++ ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + + + +- ++ + Negate search + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + ++ + + +- ++ + + +- + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- ++ + emulator #%1 is already embedded + + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + + + +- +- +- ++ ++ ++ + paused + + + +- ++ + Release emulator + + + ++ + +- + Toggle embedder options (hold down for menu) + + + +- ++ + To favorites + Till favoriter + + +- ++ + Kill emulator + Döda emulator + + +- ++ + &Kill emulator + &Döda emulator + + +- ++ + WARNING: no matching window for emulator #%1 found + + + +- ++ + Embedding failed + + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12398,140 +12380,140 @@ Retry embedding? + + + +- ++ + Information + Information + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + + + ++ + +- + Scanning pause key + + + +- ++ + Are you sure you want to clear the favorites list? + + + +- ++ + Are you sure you want to clear the play history? + + + +- +- ++ ++ + Choose export file + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Alla filer (*) + + +- +- ++ ++ + Choose import file + Välj importfil + + +- +- ++ ++ + WARNING: invalid inipath + + + +- +- ++ ++ + stopping current processing upon user request + + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Dina konfigurationsändringar har ännu inte tillämpats. + Verkligen avsluta? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + + + +- ++ + There are one or more running downloads. Quit anyway? + + + +- ++ + cleaning up + + + +- ++ + aborting running downloads + + + +- ++ + disconnecting audio source from audio sink + + + +- ++ + destroying audio effects dialog + + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + + + +- ++ + saving main widget layout + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + + + +- ++ + killing %n running emulator(s) on exit + + +@@ -12539,7 +12521,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + +@@ -12547,86 +12529,86 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + + + +- ++ + so long and thanks for all the fish + + + +- ++ + Welcome to QMC2 v%1! + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + loading style sheet '%1' + + + +- ++ + removing current style sheet + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + +@@ -12634,156 +12616,156 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + + + +- ++ + Add URL + Lägg till URL + + +- ++ + Enter valid MP3 stream URL: + + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + + + +- ++ + Buffering %p% + Buffrar %p% + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + + + +- +- ++ ++ + Play tagged - %p% + + + +- ++ + Add favorites - %p% + Lägg till favoriter - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + + + +- +- ++ ++ + Tag - %p% + + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12794,41 +12776,41 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + + + ++ + +- + Export global MAME configuration + + + +- ++ + Import from... + Importera från... + + ++ + +- + Import global MAME configuration + + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + <inipath>/mame.ini + +@@ -13927,16 +13909,6 @@ Please check the 'rompath' option in the global emulator configuration + Browse system notes template + + +- +- +- Load software information database (from history.dat) +- +- +- +- +- Software information database - history.dat (read) +- +- + + + Save machine selection on exit and before reloading the machine list +@@ -13957,16 +13929,6 @@ Please check the 'rompath' option in the global emulator configuration + Browse machine favorites file + + +- +- +- MAME machine information database - history.dat (read) +- +- +- +- +- Browse software information database (history.dat) +- +- + + + +@@ -14002,11 +13964,6 @@ Please check the 'rompath' option in the global emulator configuration + Select image formats... + + +- +- +- Load MAME machine information database (history.dat) +- +- + + + Machine info (MAME) +@@ -14415,6 +14372,36 @@ Please check the 'rompath' option in the global emulator configuration + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ ++ ++ ++ ++ Browse software information database (history.xml) ++ ++ ++ ++ ++ Load MAME machine information database (history.xml) ++ ++ ++ ++ ++ Load software information database (from history.xml) ++ ++ ++ ++ ++ Browse MAME machine information database (history.xml) ++ ++ + + + System manual folder (read) +@@ -15510,11 +15497,6 @@ Please check the 'rompath' option in the global emulator configuration + Import software information to DAT-info database + + +- +- +- Browse MAME machine information database (history.dat) +- +- + + + Machine description +@@ -17226,28 +17208,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + korrekta + + +- ++ + incorrect + felaktiga + + +- ++ + mostly correct + mestadels korrekta + + +- ++ + not found + hittade inte + + +- ++ + + + +@@ -17265,45 +17247,45 @@ Are you sure you want to do this? + Standard + + +- ++ + Import from... + Importera från... + + ++ + +- + Export machine-specific MAME configuration + + + ++ + +- + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + + +@@ -17411,19 +17393,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + ja + + +- ++ + + no + nej + + +- ++ + + partially + +diff --git a/data/lng/qmc2_us.qm b/data/lng/qmc2_us.qm +index e711399db9f3f470095730ae81c23f0878681349..864b23129a4375bcab08e8f2db2ff73b78eb2298 100644 +GIT binary patch +delta 34100 +zcmXV&cR)@5|HohNamF=6Mn*LsvHHdN?4RW7_;8>!Qu0-Mu +zQEAm6?_Y;V4kI>Yu0iqk6}XJpmvk@|#P7-F#J=M9>thJAr{Dd!GS& +z6DzjS!iHNd9RB|_kN$0WV-)5lxb +z4MU9AqNWr01@Eu3uv-s6=sSj(Cl*8j197DV9E3Xu`B&H}D6+eO +zH;5NZAkoIvD) +zD+O81T?^Bj8syc7TKE)K+`B*V7b)NqqF)P$`WDz4hCK+cE8~P9fA@;0-zgIJ-w+KQ +zM{EN|6cl4F5e>sgY&r=>k_e9`GLP~lCKnQoi6OSvmS}7^iOCO$CgDO-9^wP1h#fW? +z6jjd<-?fT(-+siCaI%;jgDfirJWH(PZ{mmXy({a9pEw177gayH3D|09aH3O7=nSXnocm>o9t9?5MHczxHP@Hjzo +z`wiH@7?L}-l89+UG9itGS6`C*))1Rsgk<7eV%K9yUcmypy~`l8>P+%l6tUCR7Jk?J +zle~oysPTv7-HOD@pR=&$5rbm2Gs*9biErU>OIRu8Cs}x4s6p2HvV{XLT9`J>!e5C7 +z`IcqTirU27raZ}CSUg?NSeS_GEO>pe2Pvje#AzKk8cYLWYV;gl?-;RpPe>_Kn#9_o +zq*M}EcyXlInn?UlC#C)t61g4*W!dSZG{t={2qeW5<8h!KDPGYq_-S>GU6URoH~$il?M2F1ET7Up#_D9aT=^lC;TZv!bqV@UkK +z2|;P|KX3=p?yCjFBJ1T$%J>-KN32Pi+=h7IQBtP9Akq5~DRVj!HK=8foqTMNmmF>3 +ziH)Sp-%G5@c~VxM#?0L#Ws^e8^q+-R_~4Rj~7=9Eu7 +zCy2D3o(M%P42mh?q+#e;@+;CXgko+8X{pJ?w22m`KPK%hM#`rfX$3cMxHst~zaRn( +zA-zll@ziZ(8ds0_&0S>Lo=>#;4w=q^tKN`Rt+&KiCX?0D=0qh+n5oQy6cWzksLUd8 +zOam&rqB@BRuc+)tEU#ky})?y?>6>l4VP%@>@YCfVF=Mtt#Js!$6z +zay*x8izksR*Nkj8M3HDvlqxR)e>9?M?{Q(pe^GTE{?vC4RWH#AZpb{7swa4ns9l0; +zR@#ZU+mC9Fsz@^MBGp>hgZQdIs+EKfzOP5M=i!IcK2&E+Y2qF&$iBc0mDo!51@5QB +zb+SLSh1iA9WPe1$-!&)u%aWvfb+Rv*nvz4w{#|`ymnxD&6-TfGIRwK6nccUN!x(6$ +zD<2H9tY-$rs~Y4`VBMv@l0$)YTX(nc@>Oz(%Z9A^M-B=7N!YuRLxGW5<8zncXs>)B +zhX=Tjt5wMH>p!A1eaXr1ItjPmL4|H?2HIMjhg)~Ms)u?HO~qrS){6kb>C8}(eUyUqset$&7U%$r!X@8ofP6N#2d?sT6P_ +zjmULA1zMTs;fvoXaClp|?!DBzFji0R+ZF~7G$>xIH7HpJ3oACGK0}U?_;Z{3L?#pM +ziLx+nxk0wvm-^&G=1l5BeSg75*V|Lj1YZ(kyHLM?N5mVJqJI595|8nq{^n}I#J_B% +z0hxIui=Cl?TcU}-Tuy^dLISNHO2M&>u^7Az@}grYM8Xl4UPMD1Le7L7r=f@cL01V1 +z6Vqd1K{5<{$ic{7FkZYPn_i^6*< +z#4q2V@rUul2RtYun;{gq)1Iy$BAW4pk)t2N%m4GdSMeZ1%gEDFL8oY0|W3)E51CiAs +zT5pSJ8sbG8%H=zV|MJh(LU_zT*a-iUbDowSp^L6-55b}p$!VxbM~Oof9TI@F+<75+%O5$MEI +z7uw@xLwx>I+Fy1iv8qm#TqTdhOY)jwPKYF*1ivO!$W79Ybjik-;3RN@>e5g~MD83a_h_wjl%_*}Ed8 +z9Y;_+!YRGFiTH+Tid(qH)}Sm}hECNVOEh9LojQg& +zZ`PVJn#1@i&Z4tEUy0YVp>rk2lHl%i{=`MxKqb1+DUtYv=5+Cv`2#WkOv-W!B9Y&L +zvOZoTKF&bcNIYWr&HKk`^xG={r^vt}}mUz2X +z^z7IL;zNtk^EOFDEsI)sX%=PEY-EeoDcc)A_|=_W1Z5H3NT3(l&>?ZxDaUFn@vTef +zRsYW<>~iTn#cNqUvon0U!z^tuu!ZWBSTv*EHIw=l>ne4y8FrXmG4llje9h~S!) +z>8*+(ZxcgrM-L^j)Q#ScnN0%u*2gznNxbu-2flc9Pvr +z(wBDCh_%{4-d_;LE7m&Fo(vROWiMxHFpA<@zxPyNB!#FQknd#?9 +zeBsj!`g>89 +zaRsM$VTvch{g?=*?G7cD^quMVN@3YqF;i(9#EciL&}bOvvhJ)<#3o{6&HY)?f`c&+ +zSkarAB$b-1`118c-*&JPj^l{+S#40fj5a81ePPzS-VxhVmz8!~MLZ#&m5umD{M8s% +zt`;)U7jIelI@3v1eZeYDaUpRhj8)7Ig!VkhD&4+8lstjiUcuB1pT{a!yFtSI$eLAk +zjl|G#a0@cAcdXjj55&FfS@rNi#J{Jp>KAi~Kk;BS6AutI8^mgv%941#kJYZfpTzC= +ztaiI_Vvi3S0iXdf%EFWV0?Z=Z6!>EC!Eb +z&L81OCe&xn-y!vyuV+n;JtwkX!dxo;AZ|O7HLEm$#PsH@nGe?c-4d)>EH2D9g0-|M +z`1=;-S_0O6=N@bQ5uWtH7uE(Up6(Q4Z9W$#-qeG+U*19#*NnN}#hvfTG$_`NVjgGf +zVEy+^WgeeGi2l82ZLc>VQS2S_+S`M;-FDXDFg#<42du*dsOcv+Shq_sqJThyqQiUE +zeKST(cVRtd;KJ&2=2z@BiGGEc-=xaKmla_F<=_e5Z)5?}f{8V0zye1WCDHy1>$_tG +zi5ZVr-(+(#QBB7BU4*pTzMA!~3@cwejSV>Ej=ISi3(wdagTD|f`hkTUf&g(#V4St7Z?6uCIxLunKEe{ub +zs|*`%ULAmh#+eOYmk*jXR&O +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 +zrB=GYDGnFb6`>_&_7&E*KcEgaQf1<*| +zA;dd26_s2IlD0@;YXweiCMtJ@mU-AqRE|l;tOkp!FYQPUTq&w0g_?pK~ +ziyGTdOUZT)nO>IIe+xy+H;srty)9h-LJAy?6K;90a3_yM>xEa~4Bv^?&z_MO +zculn7sSryqMH}aD#6CZRV!vn;1uyOVO1QT~MEYRQ6vNQh(R$>V;SGYpp6BuABsVH7*XSy +zX5)b0>tj%CI%!Z==p};3e#hR5od_w15onMkLb}467HK2~@54s9!)!5xMPuc*6hl@7 +zp%lVIXl=~t*kR(oM{y)ZlNfII2Bl6P5%vrM`tdt4^7(CIPDRDYk4eO{=8G|_5Q&}4 +zlf>BOxoDv}D#pgaH(dKF#+l$VI#m_pPJJb*4HgrQL_^~56BF(#@UlBZ#MZ4u|665H +zbj%VFA9As8mn9~Bz*+Cq6;mJuL`t+UzrYmORu|LC%_iCVqnI)1Hp!ODMdWZyL10Z0 +zd9?<7kXIiORW+MLnX)1(eHQfPC^54mJ}@d=%nX8W>1!?K&PQ12+R-5Q83tlX0%uw{ +zsDnX~T~o~K>4y!=xnf?ZEs2XEV&0#Gx^u|Ooo*Qv>yCm)Ld#C$^p|wuiziKRPLP3=bgw +zzqMj#E&^um29e;BLSkH|NO({hwUcpT*C{V}!i!?hsQ-u-?GpRk+LLV6LL^Sc4IL~g +z5?{?lg)vVY80rhPc3ULZHK!7HNEZj)1PPn#A|+3txu&v6-Cc0!5#sP1xbcsj#F13w +z9AW3hu~KJ=t*R}K-NuQ^xQpYD!%*6c5GR{mL)Y7EaViV$y}?v*x*lBc;ZNdR{wnlQ +zX(E$w!WG^I*}b0P{GX{LK2#Q$%thxDdvjD=0{N2r;&NU|lpgwuD=#$S<+8<*^yYR8Yq^TI6->xQri!=!rIPe(E#8G=d%ojH@u3Pz +z9gVt*kM(ikS7wXPi_nPWU=m-Z#1d5BQ_OiSNg7sf8;ZZR +z5v6wS6Mx;IGncxEf8#e|Ya&OYa7t{{VhhKoNXg&_zCV|Wv0BbcrC}z@RqLhFs4em2 +z`BIq(-yZWp>eZZ4ooXcu+vj5{+seX=s>6TivdBny+8 +zHH2qc9w4~x&L)5IFCCeS_4qbUjR=9VH +zDC3W;7+#BH(~Gj=Mi=7E2FOa~2V%9fTK0v?ztv%8ocPQX>B4cLm2XRz4j5^d_OfZ@ZR8*~ +zYRhITae@|;WD7LNi3dexi*`d$RSGgFI(o{MTka6qt(R^sGf-7pAzSZK`fY@K4E`v44r@k|-IqO|Ksaw&C;iPErV#(vO!hhe +zBbwh+_Cgl`t9Vfcbbd;rXrk<0uMUZ!FJM4V3;{qxN$>4DrM8Vf&@Line{uF5* +z(i4tgsxF5}cVyp}2> +z4LR0>!Dz>&$f$PMB))P)Mtw_0@pq)0)d25D?U1wj4@6C( +zf}HgktE7c_k(`Z=0^xjA&R(5?%Hnr9do6}&TcDgXU>R6S&fku9f_CelC}Z7f5S42tmmleiu9nMk`5(;T!o6~3`=i7P7q+lL +z6$^(~vT(Fw;RIWQvh^vsa(oaR)=9Z4G#8@wwOkd35!EipRXY=*73<5@l@KdzCmJ;K +z`%mN=7Z_jU0=Z`O3-GI48;ERc;!(NI4eyW5lIsg27K^c-Y6Mo9z?Q!SGlDVbj7#Va@!_o$DTdpj!yOQ{ZVp9-)N}k +zB{E*IL08EFMJ6nIO6>XnK*WOQ8$oQ&yzm4eqhAaIaVIYpgFnC|Fdw`N{sjMme~7)b +z17X!Ky+QO^yc{7D78AG(WMB%&!3Us#KVYC)BK!&*Xkcwn2Rnl%a14k}@;58wt^ym# +zs3UhJU}_dc$X(c?VABrD-RB`(el?VPxFz2?tItjox~ +zFApFZ{*(I`v?VrYh)jHk_+5iiazshrYu!R&`gZxVinYl8A`05|>VhF9@dx5x3dyXshv)i2jWw2d0o`T(3F?ge@7E*Jzd_i#}{lK8e~>s@>Vp$ +zW%>37Szw^Nm4WWx);r|gH87@qrQ|(4>L4n1m-kaKGAlpH`)84&Mei^ut$pSFJ21Zf +zQSxz9#DE>A?LlarfoxWCR6{1hT?kz8#C7t+^f4q9JNdbGD2W&E4NCjP +z@>|*<;-}Ba?}^=r^(!a8C!a-vb0$pwSUUsiHCO)pc7sHPL-JR*(b)N0D*rfmkkH1+ +zzr8o08*H70XD`ZsW2>M%R7nvn+K>!ct|;~pr#s6kieEG0$GRzMXBhSQ6H1{OUy*ir?XV5HeEiw+Imsu&%Hy*BbxKd*Faco^SR7!662JzEE +zDfO#>cNOb}>k;>}lrpUl$2T=p%52(*ewp!dR|a$Xf5Y-#&mSJ4~tBixd0ORjGM86&(htO08vh{b#;X +zr!)l4+XG6SHW0Z>-YfQl(@B>6rr7T?`(o~r6#Lzch%I+i94|Z};p?q9KC&ZLB~Nku +zTb%e&7o~28>*yT%tJFUNUw^l*Qa__Hdf#s<&a0MU;-nw5cfXJg}jyApCWgSb_i +zGI%-kK-)jc;EV_aFE?dKVL!-xXJyDf#Dse<46=on&B~AuA^5`@3u{(UhAzOAoD5Kg +zWx*RWb%_0H%Ts!AGDou3UhP +zz}jGAu(LAfK{evB<(2vK;GzQ;EAyWq-Y=b{ENFKcn8M2a +ziNZEfVY-DzW8bQJCzi#HOx7E$M<1d+iy~g`G<5J;VfeA7wcnxL`}KE6cA2 +zLpR)1R&2wC^ek6E=>JhZ#v8&n&BDYaWu+Hf^0MK|su{3>N=22`%kdacpV7*iIV-_f +z3;%Fst-}@)K{b@M=T<=-TPtgCpbUKMjo3Kk%ZrsOG<`nf%2qtP!n>AM +zwiS+mZFni$>}Fz@`KGe%2`;?aLS_3yT=;o!WryQfqACpx@~`uh9SgDAY+ounlF;Zg +zAYO@g-GVUaq$)e7V+iNfRd&ulMJ%R)L2lRGpcwc^NoWdxFkptVw=o<`aBpQV9*|*O +z9!B?VYHPM{sO(EbKd;*v5MS@KNZI$XBf8p#EBk)eBWn8H!V8MB|Ne2JJ7bjt*Wng& +z<|)Z;5W}`U%E1zdX+?)9M*oIK_D)4L?gFH%nSwIlw=Q8|g{|M&`BIT;W4vBFt7nUF%# +z?z(cyS0h>EoN{U}WI}Rp<@D5i6k-JouRK_rNqo&on6c0wM}k=x4q>R24Jrzr2kZlc(>K>65t +zJ+U&G$|pMrsbBHR=X=mCi*l4NrP{+yxhr@;axUCJj`B4NF20x9!U6A<+|`(?`gfE( +zw9!)bTjd9O#ktEI@K5bj$1oV3R^7tnRMqha=6=yzweAo6-7`?F=W>_0 +z=YF;Rv_T{iqtph)k+}u>sST@VVYL@k8(uhxhYQWiRA)SSC>k_ZojnSZNS?1Y3hj>~ +zcNevBW+;9r-om882Kj?xYLhBxEb{eNn+$D@&rMaEtVThk=U3I`B$i*>Lu%7tS8V2v +zR-0~wt<)Q*HY<{ZTJ}k`*^5k~VGq@oZO$VLsGznS(jNOB?(@}FUy!dT%~jXwFNj^X +zQeAIDLe5T5-9|Je8qvleD>7E~XoMJ-w@q!k^#Ib15vr#ZhVz3N}(>F5nHRV;`vp0zM +zt)cdehSl1ps{YU&qHR;P*L_6ucRkcV@eO%Rx*C{tm3WP&YM=Z%BxVJuef{Ae*S$8# +zKI~D0e&SKdt=H6kqi$du!cXn@bt}@5TWbH+nDaiVYVbp-`fumdki4-Z8ruN~@? +z?=ZDS?bN9k{=-(;P<84{)LUzMtLAm9P~@MJq|R7*m#AV*HL~J$qEp`LtagF!JSUY%nH%{)3)opbs*PMoFAxq(D+(=vmyLQM;u^VE6X2%QsM +z)cLy}5qbPn7xW7uwrP~QuyX{7K@-)*o;gVJpEp*Q89nOZYRn9D>r#$|O~BHY5iAL_bC-HFZc +zP}grcfK^>e-QaWpe#=JP&<{cW_jh%pT|C+oXQ-QI;D^NN*y!DEw&vE>>bC7q;SYDH +z+YdG)UddhE5gmXU{VjDz0u*d)ia}APrMlBS8I|fw>dqlSXnnO)cOLgA)}ywX(EBUa +zkfQFIUW3@Z7wSIe2}Dy4tNU}Xw#Iv_$)(Q{b=j>ZS3wc7@NPBbBi^6YNKGxV6)j)> +zMby+K(0BJctH&l<6KmR4Jux*^2}HfmZY%-FcUYTD2SBwbw9 +zv=K15e{d8uB#IF0OCx7~4H^o;?e`<&4@I%#8 +zJLaGO)j`c@HWf{LKDX4&Ts?sEp(0QRdF +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 +zp7_l%HTch_ +zQ^N<&BvPAq>H$GeMjfCYtY=3|?g{Ea$Hz!NEKv`Q!|4YdJk{gF`lAnKpc*LQ5woOg$9~X*kwQHJ|B@EoVK#)H6LH*U@*?sQ4O0 +z`ZPy9U)~CJq5kUmkbyAE)76WSh)Yao)r(252su$xz4Q_aC#{@%r6TrG{@Jd^baWxI +z^$s=WA)MFRW7KOVOjW%L2IY-c4Jw<~8Z=pbQm-wCYUWGK>UDVOq+%EKdfo{l+08L1 +zn;sZcer!==@j=o)W>C(pqQ*Wb4+mm`8rSm~k@GFo_ziWDE=W@2lkj_(vSP|Pch&eT +z+jDYC<0;BwWqyjSGdA +zs}JcIuHKjr))Z=D1vnC~Q`E!;8ftz$4Vttu>dkuzL<%XV-ZCR^dQ4YuU4|<*dA54{ +zWJSF0q~1PfNu))dYBI}5Wj#_&ZUX&aZud@2o`pM|=&Rn95HN+C44SI@t9MgfiCi^W +zy+5=7Ij*JZQztBOyhc4@n+U +z!`viXecu~mZ{1jZ@101bm_uq-fIt3joSKc@&GI5|HM{&gB#PqIj|GJY?mg5`^&<(n +zeoOuIbuh#}UHx2G0Yz1_no}y8Nbv*JoF>rtSy5_E_nSnXI$g~*Jw`14M9rIp|BrK2 +zzj_BEmcOL_^qhzIB>B7g%K|Rko||gXXc))iRn?*hXwH?x)qj&AT{cJ6|9&GmP`0;0 +zY=Yy{?=6*w!&y$qr%D;9je99nnK>D@j2KkP +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 +zE1TW +z!?{!z+#5m6nsBy$##F4OW(MW?X%nIohD|wl~{^{~(8l +z8kBmiW}9y{KumF!ZIM>N_a4i(podFZWyeAjdlM;j58H0HA2!dggh`v(j+N&L*=%i4 +zy7!muc!ISvJ&=WU8;T94HCfoOBSdkU!S?^=XydCrjD^>RW>(&?@K#+BQ2$^NfjYW$ +z?bv}Ck8$|NZ+5ViKiXkdvx8SKr^7wjp~QJ;7>HuW>tiiAs_b|R+{l|qcD$tt-7R0( +ziQOwOdT +zliBsSy+kT!#bWWZX-pQ2_3|N7Eh`phjWpAfiY(3-IZmH{S=`)d=>KWX;?3?wFmer9 +z{4ZGPpg5Lj4UaK&7rQw)pUB?U?AFnjghb3{w>KfGC>_G?mQ@LP5nxaj2ie_ibBIJf +zuzQ=!5XpT5yMG>2QQx|Ru`k&}6Q(lMWKeo;%~B#TLUS9k$5zlQ12{839$FWxygPf+ +z9Yg80kv(r*1G>L7dvOyA#`Yyk^K6gSh(GMrfYS&-GgwABI6y9aSw?3kg!uOCgG)v9 +zLkF|$&C`jg;}@3wZZwhp{AQmPLyVi*vrntxKvnW!pKU^*DOL8_3oiA6#Vkibu5{TY +zvvDEsYRz(S@T&AFmwjm*N2I~O*q5|z$oOAm-%>}TjrcXoA2xs}%NnxphxZ~Q-+>i4 +zt8n)Fu^-(bc5`2{UxTse8Wyr&_tAo-cVtE5Fr{W+_Ip$TAwH+re>u_c*-LY>CIA{W +zg_HMqU=OnmmnI>xUgi-mT@OR!vWu5qJB~;L*YVQZU5Qk4JTHSGm(D-sWps$)v441( +zx~V9l_T^=o7XKW|%S26CxCZ%#3mw^2bQJi(KMWVfk^A1>)|$P>V?8w{WZ2R8;!9@CwDJ +z4)hwqD>}jK-Z;-I+qQ;3lfo;*2FPYRUIpJtBh?+ut9oK_)$Yct569wbI-S>Q-~AxyYchxjqOt;@DT-CTj-#l&Rs|`Q%v` +zzel_s4*gZe+38uzkhx_IN)|RH-29J0 +zW#9D@J|6{QWUTB0k@0YomC<|-y +z0nL!CXnlnbSR92yU?CrPtsjv}C-TA8n}~8Yn-3lf*SECb!#ZQhG#|)Eb1NBvso-Nl>Csbz^4S0QI14DY;Wpgs8uX0T +zkNX6?Kt4T+`|Q$CWm?63pCuA9ymATsvkl6_Mswd>WGEdi49dxg29>?T4VtP9;J$@; +z-?)AT6>~Li_G=F*>NbT>EQjL*`$zGKJD0)(TVPNgGufc2{#rh%aR4%QVSMr-SXoyG +zKCL-a{iZ5>dX;Y|AWSIX^{ssR9{3;jmV5@ju!3}(#b=)MMBcq8pB);3CqK&PZ0Sm* +z8zw$CE+2F-8yBWd(R{uGLe5uf`1~udDXyM;0gkno_x0rqoz9@0cP3xxUx0?DO5D5% +ztzSFFasS~+@=i?ROBM$rQ#OnTH0_UYXA@txWg{`QSj7XILYiiz^C0ZYkg5&mL5E8r +z3uDiNQs2XUSi{#$!$`P5Ppw_G2~MuWgUe$PZp$-hvJT|y{P23E+kD-O;t$xw*H2i5 +zaOEW5;DIOh=*Ktu+Q0?0Ho(oDuvWHaSZ^ +zC-@OoNF>L#{HO}6yvxm?^f`kctvr;FoU;5FHaANTWBIX0c=CWD{KTvPB8`5-PsjI% +z?F->&cA+`G!2}*%CIgKCzWm~buGI*+;Lk5fGl(*#Ex$Cj2%2sfzg!JA>%K$C$f-5V +z`8hmsTQ5R}KH^DZ9f{<7ncv(4A!yyopcFgCpxivTgxMjWJzCV>@mmw?AoONDxk@P7 +zi&A;=Ka`m4yYsv0H;H_{G{4`YGm*Yk=MM)#KR2AfABJLvTb1Qc&J9LW%MzYyy&jI- +zXk5%GzVY)sbzV3z^*zX+z6ik%xJdrIwlgseWc>LA2+b49)2d^~jEmWzNhI-%NpOR@ +zAK>pl!P2~3#Xn4ig8jD~|FGs2f`JI0*)SeC&igzQy|hxDf)X|w!Lw_PgQGW(XFH?! +zQyMw5_=1@1?(vUp-@^vZXmcBdTxX->X5IGh=x{hatX)NrtH=o? +z)es~@L9@zHp;So414J7%HLw&)6{Kt26`>qMWEr0+N;%-?-tR@(nwZ+Y6@`js7Wrcb +z!CYMsZ{-Qi+!{|Z+gey;Ba>BqA*g_dKogiE$`2n+$c!t(Dil(9syCR6j`4;Dm7Pwa +z(tia=vz!){2OYuF@&b1yuTCKo`;8@Y#27cB0=c0XMOhwHHqCHBnWaJppp%ZSn-6_#wRvoCHJkepx +zc%oFZ5FKufLrrI@=rZ&x4&E@=!v$1zW?%3-xDfma{so~9vKoR#;6U&<=nq2AWE~Y< +zh7s@ys1PYz0!?6J5Slo9Fo=*fdnu@b$3Yz6k^NM3IfRyQ@1hc#H;gtelnW1pTbXhw +zD7F=Dz4pPXrV6*;7?GS;qU(>R=w-bj+_%8NYtv42Ylcwusf+L^wH8UlaN(gs|M+DI +zkIVJ3NDqnb8F;^6H_@~BK>W6MM6Zj7P%F+9y}RKXbgZ_DzAJ4}P5;NBS(?{O^xN@` +z$d5mZ{x-;5E&o^apIe8>l~#-XOQFJTpNfHgH__cPK@4j1A6mA$i=j;*Uc-8eVa01< +zMUWVo)tbmJmWffR>j-Hvtb~cH#h9QzM46r|#@b@YhY>OMhyx+hnDB&jkarb@=h^p= +z|I;~Qyb+9B39pH;CGPu#S9ojO$Wh^q1|x;e7Cty!Nl8o=KHZUK9(`Q+%nv7WtsLR= +zvj*}n{=!d9AxiXp;n%n;%1J`_wQ2*mqK@!$gP6sgFsS6;5q=5bM9O_7{GQvQkugI2 +z<8HRc2Xz(`u5Ko><#aKz?Q^17><|+ZS`s-lLQK4mxpi?86F-F#(x<+d)cPHf2UHM~ +zypb>QZ){NM*;hBPLgb!g5O!Q`VJ-)&3@?HN*|n++$GADI=!GRUlF)FEJw- +z4wB1$F~>|!KvxHd`J@otaZX}Bb}^gARu&7hFqgJPVv&^{e9i`9QE@MryjJ+f-9t;p +zXR*WzNy>ySVo4H){?k$skn|nJnF?ZA1&o~gGO^4bKC0aTgK{ZPgUXLYvFrt;B5$i$ +z-W41Chj3vozEIrk#qv*QiR5%nth^7^*yXcWnf3D$PPK#v{K&*9ZxrZucNC|qoFQn>87NNo>xKk#Q*rw6Kxn{*22B>D#MvTh7rpiDq^~0 +zj>pL2YVkMp6jl(|BHp6kdWwjB+k!~ScMyEx5Vx7n~0L#N!&?UN|dcx22B-wMe@_T#N;|#Jm?fllxeNSBMD*~-(Eag +z8UW`xN<3Efqt~RGNVS1t8gx*k9^Z#8EKNmf6w;kFL&Q@YeQP!iwGz)Nq!5zaNThXN +zMx^D_McU;h(CuYJdQ9=1CyJM)aWa@^ta!Z?tNT_3@piN&n$wPp_huhL<~$IY%n#=H +zw8(sl08kAPS!Z34GwUus9l>gk+$Qp7#}l&loA|Z_j!Nnm@eMtuQqEbCU*R-%0d^=Y +z^8X+e6*y9SuK}yqcd+=?1b6D$RTSd8Ur0zNgVN1SqG;e_By=B$-#6Z&C=sj?ONd$7 +zeIKq5{%Agn +zJ^Vge8LvR3s+u>!3Ai)k7k1nJQ3YZ|^X +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 +z|LIp|B%Vq`HzHro(;uySMo6r;o-+I(;+@(0 +z^8=;e)el&wzX;fjbY?$2Z9Im0npsb;_?^gKSL-ipOd_PwS^cFg#H`6({pC93s5)NL +zUuGu|(})rJtHZF4k<;{7k+`Adef5kuJjj>;{f&EVyxz&6ocGnBsbQ}EW(a;isJ}s3 +z9<0CZ5efV6y;je(Ers&zNj=m3J^DSY^ehX6d`G70pB6*@>&p7)FIX)8a}6qwdl)pi +zebjT79fUm}r03k7Nr**bJ#P>4mM#C$^Zv9a%8koA7A|>N^t3 +zfAxZv@bKan(4GrzwMe0|4v7)ex6kXUw-g!Ja^P9Y^Z1jbH<>pSI +nZ5)(+A+^#iv +ziR?{ge(&z*=bzX8+&<&p=Q+t{n*;vczaRv~ug09c23pD6Gj5{nlZl-4srFJcq-fX#@!y}%YkKI6c)#H!x{ +z{fRmE2RjpUDF${Us(|+_nq^~t@edKNO1$$bFp?<4pGdqSvQ-W8z72`wAYzl285HmE +zeR46e&zHdj@DsR%*cWSXDd-L^0|UV2;27{MvDqaIif_-sYeajS8#IfK=Wy_o*xbej +zMILTUDTLR{4T>MV!7{|=I~x=~ZNc^=?&1APcap*Tz#hb`c3S9`V&TyLGqSMdb#!rq +z($n%j*&H{f1e=M<{wO%W4;(Tmf-*te@$jD(#?>(>{`LXK5lhGbXA@h}*`QQMgXf9W +zEV%HiAZ9{qM*MS8usyN8r3{KHxPc;qU6wXtKoNyt%x)8avC*Hd&*n`Ms +zfrS-uqjAf5Idiw6#tGIh$RO{HJHi`zo}EEiFU&&U;Y2m7!ZzOUZ`Oe!u&Kue&Ac0o4JU**46oI65(x!woKDhq +zKarm|jBFn017hy{?hqR`h^X}mV)i>=dZ5Mv4o +z$9=@NFDD)xK|BRN7N2X7T|5PzCT3HZ_yK(G@_)pSX2M?u##t$L=BuAcMl^$)`bBd3 +zAQIN!NzTAx`gaM*`QwSAFT;yC5-Z(~BqoKKUy|Gujn^*>iWWObZoY;YpF(oWMiNUM +zNp3qvqP0KCT`P%AElYCGEMnJ^NM6Dq-#TcJmFP+GN-Pa#r>YnSEUy&F8@OMmA|!8@ +zBUbjNg-)0RycVnRzHjx3Z`=*96iifRoP~P_8f4xNEDX78;qhn-e;+rN*)@8Se~o>&X^o_>eMZC$UPmNm+K1 +z*r}JKtW$^;8fRe%yuaXeJboDDJ$oAzAstEC5K8non3QdOhXC`7=SxEfeUoJNy=?OEYX&f +zUsH)1#TaCX7`b3VUX=CZBSG`VBrK1W<~vcNOS!`{8c;By80saxRBNk +z2V!yLi3Xu$Hy<2biArHf3Wr-%>b)DuFhQkbI}_Dz +zYEZ1rq0$$t5With_THa}-#kP1w>^n33Z}A7xbEXi$-ydxWLal&NQ@=n_J=Ag1b;bF +z<+r$u5{1Z7k0LX5nMsZ%+QO~GljF9QBwQF(E58+iwKr88UXEn1L*z8CGx3!sa!SGb +zK2)IUv++fyw&Xn0mU#2lRHMMpluV%-1^%Vv6RNR4i5LP!jf0YywI9{EC`tO-P>q6# +zu#Tb{Z|V@sb|IIFHDOZOLF5vefHx$N%g9+om;V@K7e5*luWiYtz?N+}xfIy4Z66CS +zJtCL&Igl;y$pyA5YPph2fl1lneHY<3uP}1ChYPt;tE#0OSwBF~3zL@txb^LH_#d$*}k +zb|^`!5*F6EOaG35(;nwTO{O^!FTR+3u!@=OGV&SJ3O24#v#aY!cqNhVOjt_&>eM1U +z4{9it;2@xTitctPr(&Gl=-$hU8b# +zhop}W`9;GU_|zu96Ui`1-#Bw&yLvA!Qfn7jo~f>dBbQn@Hp!sa`yaKg4^KC_D79|j +zOYFp`xYLEJncJPk%LL-x(x~-6Ux^|HQ|ms^x09z*>ktShp8$hw@@5O4Bvb1s9|Vlo +z)OLA4;z9Eb$~MEu-z$Sy4=)QtHX9Vr-%-0cxcZGj)P6J~QayVM&*1f@&SYjjf;xCy +zhvuGSkomNu4z14+oBfG8_}3s|dy6^*o`6R$MIHaiBre0K)1iDKy&ZKva~+;L#h?hP +zMqRqkhUK=W0IvuVfA>+qASkm9M<`%bC8GU(sH?XPB0v&#oi&bx-45zHdm}8d(r6qU +zz_`w%u5%NJM%*#T3vV_kdQ7))-#ZFyEQxn?rN9%6SX@_wB6u6vnndY-)GZU*=fr&K +zmUV)7>HQX-_Aw~_Hlm=2K_u%&P|&$!L`~*U_u}T+_~3KuKBPI^@)7D$7;B~Ha|^>p +z7!)t&8kDk;g%zBs=YYc`=`{6>fmGZPYvK2e2HDaO>iJ_7?z9Q@`UQ(j^rYaZE+ob@ +zq256ch`Uv$-hJK^PxwTA%#}lle@&piS$QN&?4y23al~Ivr;y_i(Q5`$XhMCMepiFM +z*i;IGM`d=aX<)q^qOc=0@W5Y)qLLIYvPm3ULg71R5>*YL@bq3d|C0u3n1WZ^X%I|~ +zT0fyd1vZsmn+B!hbwWEb7aXuFy=X{G0^D_B3o}p95Ez#j|CWZGaXKx&7f!PKSBjgLM@(H#adDj3p2HL$u@sJeAuWxUL?5cr(j_q3U!`f; +zQyb#@iqnb}F+?F*v|=UBn;nbOs)W`=#rM-12Sm!SmXugJm)OsA-;o&8$d1{kQrHi5w@|(bAsyyoI#8)HGt1|E1K5c_beHqSV37 +zh^jxK)H{g8dHrZ#@fpO9WYfNZn6i?C>0tgE5;nK!@cLxpN1D^&l#?Vz-lU^ZU$DG4 +z(6M^Ei4KpaV~a6`gPIr=t&h{O#4t0-Hbv;z5rn|QpD4r8MEv78%1DieABZ$4)>fd5 +zG#JaCmj*@UzZUK;W>6MaDYFjpm7yCb^DySTaUD9*2*y`o44v-unRuP*bf#n^38fyL +zJ$fEDP?XNK-9!AsJvx8G{Ek?+Ta@h@OyYMV%6@-^_!w8ZdN+Xh+weVQATNj2@$%IqB(lTkRirm@Cs%r{V(7i&>Gg<#B;sq++mSOc +zHN)urtBoYy*QXEv!3YD|8sy!c(uXU^R<=H&kHa^U?7W*kwWv(2$qxDgLlZNe&{yB9 +zB1QCU^uiwcISe28Jd*NHB0Kvwp8lr6W%fGG +zC!{JYhE5-w@l`nAv(QC%(gvm5TmC{B=K8+6n38^Pj8?>K4NBIx9EPgT&q7 +zxTDr~=Ao}yh052ks3fb@BnAUj0!%_Wb&pk!d`G;MCvzMfLj1=r=6L=q@uzOA+Mc~c +zo*~T1REos&wXAxb-6ZbZXVqJbCiW=HAfHvAxx{P4Tkm5o7f-^!`7@W7jwJhzX0-+( +z)_rYh(9CAsWp4MQNQ8$nxA$-#QFWNxH^{kv=d%WfpF%t?WFFBDMze +z?1WW*k1@{#Tv)(N*4Vz_?|X6Wu;sgFS=0CMpAQ)GhAyYu_RRaE6>-l_%;#bf(Rxqj +za~meOdvF0!p-Ak*nw>^c*(aGb`w&KqezWFR>yjvOkG0&{nYiOV*7^YaAzrsW2gUsK +z1nY1CCeuCKpzy!XI&Q#-6?S5sr{coumS6$JUXtkhlLd^cKs@ds3n~r&_iiT(njA{Z +zqbch?tSE`LPgt)l=A|U2WwTzXsYKNn>wO;bZA&uiQvo);U^45Q>4Q?oDGN_~8sx`Y +zvXC$v;;cFgwX-Hl2Gd$W{>^5gIq-WQo3pU~sCE_m!@~AMb~L@n!oIB`R@I&Le}hHa +zag_b^z*hJ>RqGVKa!Qd$5_Est|paY}W0i +z#D0x1$TwW;!{%nA3>JHu%^QXg^F(C}PQicW&tnVMu7WV?z!vU867-}7ThwL?iCcFJ +z%GTa&$-ikt+Z(ba4=O<`*I`TTpORD_u%*rLzMDe~N0v20sLU6SGR*!FQr#KzZSyE~#7x{*f`6!~k&g}At +zE|5RdZP?Z73fxls37PxjjT8gY-I?DbVFrpmGG&D2grYqzntei)&tOW4~<&Lq0|u=ih~l8%|#hwiZb +zQ7hPo;7iuT`UJ8M*PMx6oytDXb|-SoWM4h)iKT64--d_6;cjN%5-iPcwfs6 +zEDxcPoegB)i-9*Tv7e!m*zXqXcO8W2O6ypD=WtBPlDI_sYUYQ2T)yf>QeDN>oR7pC +z4&(ZqWa6DpasBCLV#Ui?=swt>Y~GifqHU1Pt>mVRQN$B3@Iqsv5#hZp%s#^lcYh77 +zvX~d{je)P|!;92(g2kWYMdxFt$2aFzt6-8%mT;@A52zok>}VXYC!cw7dV$W#S6J!OM8T)|)ipWnyB9a-Z`uNl^5qRPJE*An6pq +zD^#mTynPCG+?i%rw +zSmU4E_027k?RN0Gept$r=rs0d4<<64h>YI +zHgD*SfHP+;Z&U$(z0N}Z&%-JRG=F*H-B<%1@AJmDI+6IpcoTEM9c0*YFRD-C;C=4Z +zs~xd#^Wpnn5-!n$y*ddh}`m-w?M(4-B`g}EQA+a +z*owEf4-<5HYmjeroX(#-Dx3w-(gM&UN8iQS_pWkp@N0Fbfwu7?jpld~2`=F|TC4 +zZQTaqe+uz!`N_n#2l4GSoH4*JQ~36VDJXZk^6d*tp)s7!w_~PcgT;Kuz%1hP%k!N> +zu}0tQ;Jbnlc{eZQyB|dn3wX`<*u<0A>C5*9O+elHhe6)EI^TQY6Y`L`JSBJ?yv#

"); +- if ( swInfoString.endsWith("

") ) +- swInfoString.remove(swInfoString.length() - 3, 3); +- foreach (QString gameName, gameNames) { +- foreach (QString systemName, systemNames) { +- setSoftwareInfo(systemName, gameName, swInfoString); +- pendingUpdates++; ++ while ( xsr.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xsr.name() == "item" && xsr.attributes().hasAttribute("list") && xsr.attributes().hasAttribute("name") ) { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { ++ qmc2MainWindow->progressBarMachineList->setValue(swInfoDB.pos()); ++ qApp->processEvents(); ++ } ++ systemNames << xsr.attributes().value("list").toString(); ++ gameNames << xsr.attributes().value("name").toString(); ++ xsr.skipCurrentElement(); ++ } ++ } ++ } else if ( xsr.name() == "text") { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { ++ qmc2MainWindow->progressBarMachineList->setValue(swInfoDB.pos()); ++ qApp->processEvents(); + } ++ swInfoString = xsr.readElementText(); ++ } else { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { ++ qmc2MainWindow->progressBarMachineList->setValue(swInfoDB.pos()); ++ qApp->processEvents(); ++ } ++ xsr.skipCurrentElement(); + } +- if ( pendingUpdates > QMC2_DATINFO_COMMIT ) { +- commitTransaction(); +- pendingUpdates = 0; +- beginTransaction(); ++ } ++ // format for display in frontend ++ swInfoString.replace(headerRx, "\\1

"); ++ swInfoString.replace(textEndRx, ""); ++ swInfoString.replace(doubleLineBreakRx, "

"); ++ swInfoString.replace(singleLineBreakRx, "
"); ++ foreach (QString gameName, gameNames) { ++ foreach (QString systemName, systemNames) { ++ setSoftwareInfo(systemName, gameName, swInfoString); ++ pendingUpdates++; + } + } +- } ++ if ( pendingUpdates > QMC2_DATINFO_COMMIT ) { ++ commitTransaction(); ++ pendingUpdates = 0; ++ beginTransaction(); ++ } ++ } else ++ xsr.skipCurrentElement(); + } +- } ++ } else ++ xsr.skipCurrentElement(); + } + commitTransaction(); + qmc2MainWindow->progressBarMachineList->setValue(swInfoDB.pos()); +@@ -886,62 +889,61 @@ void DatInfoDatabaseManager::importMachineInfo(QStringList pathList, QStringList + qmc2MainWindow->progressBarMachineList->setRange(0, machineInfoDB.size()); + qmc2MainWindow->progressBarMachineList->setValue(0); + qApp->processEvents(); +- QTextStream ts(&machineInfoDB); +- ts.setCodec(QTextCodec::codecForName("UTF-8")); ++ QXmlStreamReader xsr(&machineInfoDB); + quint64 recordsProcessed = 0, pendingUpdates = 0; +- QRegExp lineBreakRx("(
){2,}"); +- while ( !ts.atEnd() && !qmc2LoadingInterrupted ) { +- QString singleLineSimplified = ts.readLine().simplified(); +- bool startsWithDollarInfo = singleLineSimplified.startsWith("$info="); +- while ( !startsWithDollarInfo && !ts.atEnd() ) { +- singleLineSimplified = ts.readLine().simplified(); ++ QRegularExpression headerRx("^\n?(.*)\n{2,}"); ++ QRegularExpression textEndRx("\n\t{2}$"); ++ QRegularExpression doubleLineBreakRx("\n{2,}"); ++ QRegularExpression singleLineBreakRx("\n"); ++ if ( xsr.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xsr.name() == "history" ) { + if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { + qmc2MainWindow->progressBarMachineList->setValue(machineInfoDB.pos()); + qApp->processEvents(); + } +- startsWithDollarInfo = singleLineSimplified.startsWith("$info="); +- } +- if ( startsWithDollarInfo ) { +- QStringList gameNames = singleLineSimplified.mid(6).split(",", QString::SkipEmptyParts); +- bool startsWithDollarBio = false; +- while ( !startsWithDollarBio && !ts.atEnd() ) { +- singleLineSimplified = ts.readLine().simplified(); +- if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { +- qmc2MainWindow->progressBarMachineList->setValue(machineInfoDB.pos()); +- qApp->processEvents(); +- } +- startsWithDollarBio = singleLineSimplified.startsWith("$bio"); +- } +- if ( startsWithDollarBio ) { +- QString machineInfoString; +- bool firstLine = true; +- bool lastLineWasHeader = false; +- bool startsWithDollarEnd = false; +- while ( !startsWithDollarEnd && !ts.atEnd() ) { +- QString singleLine = ts.readLine(); +- singleLineSimplified = singleLine.simplified(); +- startsWithDollarEnd = singleLineSimplified.startsWith("$end"); +- if ( !startsWithDollarEnd ) { +- if ( !firstLine ) { +- if ( !lastLineWasHeader ) +- machineInfoString.append(singleLine + "
"); +- lastLineWasHeader = false; +- } else if ( !singleLine.isEmpty() ) { +- machineInfoString.append("

" + singleLine + "

"); +- firstLine = false; +- lastLineWasHeader = true; +- } +- } ++ while ( xsr.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xsr.name() == "entry" ) { ++ QStringList gameNames; ++ QString machineInfoString; + if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { + qmc2MainWindow->progressBarMachineList->setValue(machineInfoDB.pos()); + qApp->processEvents(); + } +- } +- if ( startsWithDollarEnd ) { +- // reduce the number of line breaks +- machineInfoString.replace(lineBreakRx, "

"); +- if ( machineInfoString.endsWith("

") ) +- machineInfoString.remove(machineInfoString.length() - 3, 3); ++ while ( xsr.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xsr.name() == "systems" ) { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { ++ qmc2MainWindow->progressBarMachineList->setValue(machineInfoDB.pos()); ++ qApp->processEvents(); ++ } ++ while ( xsr.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xsr.name() == "system" && xsr.attributes().hasAttribute("name") ) { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { ++ qmc2MainWindow->progressBarMachineList->setValue(machineInfoDB.pos()); ++ qApp->processEvents(); ++ } ++ gameNames << xsr.attributes().value("name").toString(); ++ xsr.skipCurrentElement(); ++ } ++ } ++ } else if ( xsr.name() == "text") { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { ++ qmc2MainWindow->progressBarMachineList->setValue(machineInfoDB.pos()); ++ qApp->processEvents(); ++ } ++ machineInfoString = xsr.readElementText(); ++ } else { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { ++ qmc2MainWindow->progressBarMachineList->setValue(machineInfoDB.pos()); ++ qApp->processEvents(); ++ } ++ xsr.skipCurrentElement(); ++ } ++ } ++ // format for display in frontend ++ machineInfoString.replace(headerRx, "

\\1

"); ++ machineInfoString.replace(textEndRx, ""); ++ machineInfoString.replace(doubleLineBreakRx, "

"); ++ machineInfoString.replace(singleLineBreakRx, "
"); + foreach (QString setName, gameNames) { + setMachineInfo(setName, machineInfoString, emulator); + pendingUpdates++; +@@ -952,11 +954,10 @@ void DatInfoDatabaseManager::importMachineInfo(QStringList pathList, QStringList + beginTransaction(); + } + } else +- qmc2MainWindow->log(QMC2_LOG_FRONTEND, tr("DAT-info database") + ": " + tr("WARNING: missing '$end' in machine info file %1").arg(QDir::toNativeSeparators(path))); +- } else +- qmc2MainWindow->log(QMC2_LOG_FRONTEND, tr("DAT-info database") + ": " + tr("WARNING: missing '$bio' in machine info file %1").arg(QDir::toNativeSeparators(path))); +- } else if ( !ts.atEnd() ) +- qmc2MainWindow->log(QMC2_LOG_FRONTEND, tr("DAT-info database") + ": " + tr("WARNING: missing '$info' in machine info file %1").arg(QDir::toNativeSeparators(path))); ++ xsr.skipCurrentElement(); ++ } ++ } else ++ xsr.skipCurrentElement(); + } + commitTransaction(); + qmc2MainWindow->progressBarMachineList->setValue(machineInfoDB.pos()); +diff --git a/src/options.cpp b/src/options.cpp +index 802ae5f18..00b20613e 100644 +--- a/src/options.cpp ++++ b/src/options.cpp +@@ -2015,7 +2015,7 @@ void Options::restoreCurrentConfig(bool useDefaultSettings) + lineEditSystemManualFolder->setText(QMC2_QSETTINGS_CAST(config)->value("MAME/FilesAndDirectories/SystemManualFolder", QMC2_DEFAULT_DATA_PATH + "/man/systems/").toString()); + lineEditSoftwareManualFolder->setText(QMC2_QSETTINGS_CAST(config)->value("MAME/FilesAndDirectories/SoftwareManualFolder", QMC2_DEFAULT_DATA_PATH + "/man/software/").toString()); + checkBoxUseSystemNotesTemplate->setChecked(config->value("MAME/FilesAndDirectories/UseSystemNotesTemplate", false).toBool()); +- lineEditMameHistoryDat->setText(QMC2_QSETTINGS_CAST(config)->value(QMC2_FRONTEND_PREFIX + "FilesAndDirectories/MameHistoryDat", QMC2_DEFAULT_DATA_PATH + "/cat/history.dat").toString()); ++ lineEditMameHistoryDat->setText(QMC2_QSETTINGS_CAST(config)->value(QMC2_FRONTEND_PREFIX + "FilesAndDirectories/MameHistoryDat", QMC2_DEFAULT_DATA_PATH + "/cat/history.xml").toString()); + lineEditMessSysinfoDat->setText(QMC2_QSETTINGS_CAST(config)->value(QMC2_FRONTEND_PREFIX + "FilesAndDirectories/MessSysinfoDat", QMC2_DEFAULT_DATA_PATH + "/cat/sysinfo.dat").toString()); + lineEditMameInfoDat->setText(QMC2_QSETTINGS_CAST(config)->value(QMC2_FRONTEND_PREFIX + "FilesAndDirectories/MameInfoDat", QMC2_DEFAULT_DATA_PATH + "/cat/mameinfo.dat").toString()); + lineEditMessInfoDat->setText(QMC2_QSETTINGS_CAST(config)->value(QMC2_FRONTEND_PREFIX + "FilesAndDirectories/MessInfoDat", QMC2_DEFAULT_DATA_PATH + "/cat/messinfo.dat").toString()); +@@ -2023,7 +2023,7 @@ void Options::restoreCurrentConfig(bool useDefaultSettings) + checkBoxUseCatverIni->setChecked(config->value(QMC2_FRONTEND_PREFIX + "MachineList/UseCatverIni", false).toBool()); + lineEditCategoryIniFile->setText(QMC2_QSETTINGS_CAST(config)->value("MAME/FilesAndDirectories/CategoryIni", QMC2_DEFAULT_DATA_PATH + "/cat/category.ini").toString()); + checkBoxUseCategoryIni->setChecked(config->value(QMC2_FRONTEND_PREFIX + "MachineList/UseCategoryIni", false).toBool()); +- lineEditSoftwareInfoDB->setText(QMC2_QSETTINGS_CAST(config)->value(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/SoftwareInfoDB", QMC2_DEFAULT_DATA_PATH + "/cat/history.dat").toString()); ++ lineEditSoftwareInfoDB->setText(QMC2_QSETTINGS_CAST(config)->value(QMC2_EMULATOR_PREFIX + "FilesAndDirectories/SoftwareInfoDB", QMC2_DEFAULT_DATA_PATH + "/cat/history.xml").toString()); + + // MachineList + checkBoxShowROMStatusIcons->setChecked(config->value(QMC2_FRONTEND_PREFIX + "MachineList/ShowROMStatusIcons", true).toBool()); +diff --git a/src/softwarelist.cpp b/src/softwarelist.cpp +index 70e1eb7fa..99f806da4 100644 +--- a/src/softwarelist.cpp ++++ b/src/softwarelist.cpp +@@ -1087,7 +1087,7 @@ QString &SoftwareList::lookupMountDevice(QString device, QString deviceInterface + + if ( briefNames.contains(device) ) + softwareListDeviceName = device; +- else for (int i = 0; i < briefNames.count() && softwareListDeviceName.isEmpty(); i++) { ++ else for ( int i = 0; i < briefNames.count() && softwareListDeviceName.isEmpty(); i++ ) { + softwareListDeviceName = briefNames.at(i); + if ( successfulLookups.contains(softwareListDeviceName) ) + softwareListDeviceName.clear(); +@@ -1110,20 +1110,19 @@ void SoftwareList::getXmlData() + QStringList softwareList(systemSoftwareListHash.value(systemName)); + if ( softwareList.isEmpty() || softwareList.contains("NO_SOFTWARE_LIST") ) { + softwareList.clear(); +- int i = 0; + QString filter; +- QStringList xmlLines = qmc2MachineList->xmlDb()->xml(systemName).split("\n", QString::SkipEmptyParts); +- while ( !interruptLoad && i < xmlLines.count() && !xmlLines[i].contains("") ) { +- QString line = xmlLines[i++]; +- if ( line.startsWith("= 0 ) { +- startIndex += 9; +- endIndex = line.indexOf("\"", startIndex); +- filter = line.mid(startIndex, endIndex - startIndex); ++ QXmlStreamReader xmlMachineEntry(qmc2MachineList->xmlDb()->xml(systemName)); ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ while ( !interruptLoad && xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "softwarelist" && xmlMachineEntry.attributes().hasAttribute("name") ) { ++ softwareList << xmlMachineEntry.attributes().value("name").toString(); ++ if ( xmlMachineEntry.attributes().hasAttribute("filter")) ++ filter = xmlMachineEntry.attributes().value("filter").toString(); ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ else ++ xmlMachineEntry.skipCurrentElement(); + } + } + } +diff --git a/ui/options.ui b/ui/options.ui +index bb152c381..dbd907d64 100644 +--- a/ui/options.ui ++++ b/ui/options.ui +@@ -1033,7 +1033,7 @@ + + + +- Software information database - history.dat (read) ++ Software information database - history.xml (read) + + + +@@ -1719,7 +1719,7 @@ + + + +- MAME machine information database - history.dat (read) ++ MAME machine information database - history.xml (read) + + + +@@ -1911,7 +1911,7 @@ + + + +- Browse software information database (history.dat) ++ Browse software information database (history.xml) + + + +@@ -3060,7 +3060,7 @@ + + + +- Load MAME machine information database (history.dat) ++ Load MAME machine information database (history.xml) + + + Machine info (MAME) +@@ -3100,7 +3100,7 @@ + + + +- Load software information database (from history.dat) ++ Load software information database (from history.xml) + + + Software info +@@ -3133,7 +3133,7 @@ + + + +- Browse MAME machine information database (history.dat) ++ Browse MAME machine information database (history.xml) + + + +-- +2.43.0 + diff --git a/0001-new-added-a-Brasilian-Portuguese-translation-thanks-.patch b/0001-new-added-a-Brasilian-Portuguese-translation-thanks-.patch new file mode 100644 index 0000000..d435f8c --- /dev/null +++ b/0001-new-added-a-Brasilian-Portuguese-translation-thanks-.patch @@ -0,0 +1,157006 @@ +From c5d915bc999bffca6993e139a9dc373fdd74de66 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ren=C3=A9=20Reucher?= +Date: Fri, 3 Jun 2022 12:45:47 +0200 +Subject: [PATCH] new: added a Brasilian Portuguese translation -- thanks to + Wellington Terumi Uemura + +--- + Makefile | 5 +- + data/lng/qmc2_de.qm | Bin 581350 -> 579493 bytes + data/lng/qmc2_de.ts | 4245 ++- + data/lng/qmc2_el.ts | 4233 ++- + data/lng/qmc2_es.qm | Bin 409615 -> 406838 bytes + data/lng/qmc2_es.ts | 4251 ++- + data/lng/qmc2_fr.qm | Bin 345045 -> 342718 bytes + data/lng/qmc2_fr.ts | 4251 ++- + data/lng/qmc2_it.qm | Bin 53859 -> 53802 bytes + data/lng/qmc2_it.ts | 4237 ++- + data/lng/qmc2_pl.qm | Bin 323580 -> 320805 bytes + data/lng/qmc2_pl.ts | 4241 ++- + data/lng/qmc2_pt.qm | Bin 555379 -> 552672 bytes + data/lng/qmc2_pt.ts | 4243 ++- + data/lng/qmc2_pt_BR.qm | Bin 0 -> 607609 bytes + data/lng/qmc2_pt_BR.ts | 24217 ++++++++++++++++ + data/lng/qmc2_ro.qm | Bin 251326 -> 249704 bytes + data/lng/qmc2_ro.ts | 4255 ++- + data/lng/qmc2_sv.qm | Bin 83770 -> 81900 bytes + data/lng/qmc2_sv.ts | 4235 ++- + data/lng/qmc2_us.qm | Bin 324884 -> 323761 bytes + data/lng/qmc2_us.ts | 4235 ++- + qmc2.pro | 1 + + src/arcade/arcadesettings.cpp | 21 +- + src/arcade/arcadesettings.h | 5 + + src/arcade/main.cpp | 6 +- + src/arcade/qmc2-arcade-common.qrc | 1 + + src/arcade/qmc2-arcade.pro | 1 + + src/arcade/translations/qmc2-arcade_de.qm | Bin 44184 -> 43766 bytes + src/arcade/translations/qmc2-arcade_de.ts | 450 +- + src/arcade/translations/qmc2-arcade_el.ts | 450 +- + src/arcade/translations/qmc2-arcade_es.ts | 450 +- + src/arcade/translations/qmc2-arcade_fr.ts | 450 +- + src/arcade/translations/qmc2-arcade_it.ts | 450 +- + src/arcade/translations/qmc2-arcade_pl.ts | 450 +- + src/arcade/translations/qmc2-arcade_pt.qm | Bin 41436 -> 41000 bytes + src/arcade/translations/qmc2-arcade_pt.ts | 450 +- + src/arcade/translations/qmc2-arcade_pt_BR.qm | Bin 0 -> 45782 bytes + src/arcade/translations/qmc2-arcade_pt_BR.ts | 1956 ++ + src/arcade/translations/qmc2-arcade_ro.ts | 450 +- + src/arcade/translations/qmc2-arcade_sv.ts | 450 +- + src/arcade/translations/qmc2-arcade_us.qm | Bin 23556 -> 23328 bytes + src/arcade/translations/qmc2-arcade_us.ts | 450 +- + src/options.cpp | 4 +- + src/setupwizard.cpp | 11 +- + src/tools/qchdman/main.cpp | 2 +- + src/tools/qchdman/preferencesdialog.cpp | 4 +- + src/tools/qchdman/preferencesdialog.ui | 11 +- + src/tools/qchdman/qchdman.pro | 1 + + src/tools/qchdman/qchdman.qrc | 1 + + src/tools/qchdman/qchdmansettings.h | 20 + + src/tools/qchdman/translations/qchdman_de.qm | Bin 67943 -> 68130 bytes + src/tools/qchdman/translations/qchdman_de.ts | 175 +- + src/tools/qchdman/translations/qchdman_el.ts | 169 +- + src/tools/qchdman/translations/qchdman_es.qm | Bin 54364 -> 54284 bytes + src/tools/qchdman/translations/qchdman_es.ts | 175 +- + src/tools/qchdman/translations/qchdman_fr.ts | 169 +- + src/tools/qchdman/translations/qchdman_it.ts | 169 +- + src/tools/qchdman/translations/qchdman_pl.ts | 169 +- + src/tools/qchdman/translations/qchdman_pt.qm | Bin 70659 -> 70579 bytes + src/tools/qchdman/translations/qchdman_pt.ts | 175 +- + .../qchdman/translations/qchdman_pt_BR.qm | Bin 0 -> 71923 bytes + .../qchdman/translations/qchdman_pt_BR.ts | 3200 ++ + src/tools/qchdman/translations/qchdman_ro.ts | 169 +- + src/tools/qchdman/translations/qchdman_sv.qm | Bin 20134 -> 20050 bytes + src/tools/qchdman/translations/qchdman_sv.ts | 175 +- + src/tools/qchdman/translations/qchdman_us.qm | Bin 32845 -> 32928 bytes + src/tools/qchdman/translations/qchdman_us.ts | 169 +- + src/welcome.cpp | 11 +- + ui/options.ui | 27 +- + 70 files changed, 53379 insertions(+), 24766 deletions(-) + create mode 100644 data/lng/qmc2_pt_BR.qm + create mode 100644 data/lng/qmc2_pt_BR.ts + create mode 100644 src/arcade/translations/qmc2-arcade_pt_BR.qm + create mode 100644 src/arcade/translations/qmc2-arcade_pt_BR.ts + create mode 100644 src/tools/qchdman/translations/qchdman_pt_BR.qm + create mode 100644 src/tools/qchdman/translations/qchdman_pt_BR.ts + +diff --git a/Makefile b/Makefile +index 6410c1fbd..7e0714ea1 100644 +--- a/Makefile ++++ b/Makefile +@@ -617,7 +617,7 @@ ifneq '$(GIT_REV)' '0' + endif + + # available translations +-QMC2_TRANSLATIONS = de es el fr it pl pt ro sv us ++QMC2_TRANSLATIONS = de es el fr it pl pt pt_BR ro sv us + + # process make options + ifeq '$(DEBUG)' '2' +@@ -1473,6 +1473,9 @@ data/lng/qmc2_pl.qm: data/lng/qmc2_pl.ts + data/lng/qmc2_pt.qm: data/lng/qmc2_pt.ts + $(LREL) + ++data/lng/qmc2_pt_BR.qm: data/lng/qmc2_pt_BR.ts ++ $(LREL) ++ + data/lng/qmc2_ro.qm: data/lng/qmc2_ro.ts + $(LREL) + +diff --git a/data/lng/qmc2_de.qm b/data/lng/qmc2_de.qm +index 3b0a5cae0692edc50d6e9a10b1b5f2ead943b588..476cdaae8c0b40c91bea673c506c65267bf316b0 100644 +GIT binary patch +delta 25697 +zcmXV&cR)`67st=NpLOqjBvRjGgi6T>Eh42t_J|}St0bFBvL0k_ZuTBgMrOz+N%l(i +z%-$o}e#h^99__Kh*hlu06GBV6-^9^cD)v4`-Svw +zj*qT`K3vb$a|sFDPQOtv$2E~Z7$k8Al#Vcnsk$Vh^iABis +zAea94_!{yifCvIMFbmlZ7(szSmjReqSBFJ-|0|ajb>a`Ae3U3&$JW^gUz#vQQSj><3 +zTJxG9T4o~q;_JFWTIr%eF3&|y1ry)$!T3RJ=%+U&&hoCF`e0%o@_Zyfhj_eku?D%9 +z4A3zQ1M +z+YP+U1CoG`>rZF3gLe{okJ*;!AJw=Dze +z`c1z_ovYXQ2_&fi;Kn1M^&$bjod!B22&8c_2Ib|*sRMwej?%qYt@7M-2k2(p^B<=H +zO-%uw-W=%G(&DSYw)O%T9s_LK +zMm*W`f$hZAKH3B61^iSi{jKoUTt)&r9tAwCf?iAUE*EtJ*w0D8&&)6=7QQd$zP|c6 +z#jnBX5x}2y0zMYsf=dUf7eTmv2Nr$`MCYb>h@Tqd6JLYCiWL?m05bB;%rW7 +z1ImAicuyvP8dn=wZFf*Ne+Q{_Sx|G3mi?fV%WI(9hC!(X4FJmQg8ydk2lnzR{5N+$ +z@Zmkcc8L?Pqr<@Vy$2{kp-^@*9hIK0ue;fbuTi +zp)dVw0(;B7Ahx{)`!$n+J>3A6=1&IE|1mhcO$3ts5S)|*fCcH`RJt|BUq5i#8Vu}e +z0ytOPf&pn6I1j4;iq~RrnbQ&I_FLex7jIa<-cW5O{=UU;^xvwREZ@{?Y4(968fuJ~ +z0aBvbAgK~;Pz1+9jafTDdi4crEX@Y#^<;y@VLH@UUjU-UeyD-Bj$MDD&(WN_(#GI6 +zBME4XBhRh!3>D>YF=Ia4$?nAv8jArTEp#J=8!1qz`dEfyMxE_3dl>}+d +zE@*Hu62#)dV&1leM#G;2joPAHm@0N-ztf@V^bC-l`a!dpB7jj_p;^K$Ogc9ViZ!pG +z+5Qlq6$7DpTfFH5ETDOU4@h^G8WeviG=DPyXwyJwQ8^IA@5|645qGZqRG(t$b+UJTY{PGu!k;L +z6M(Uc&?Wa2kd31aGHtm*G5j`!4;cXB_6rCbVwH4aW6@9zRn-zH$d567Vd> +za_AX;AINP7=-KN%&Fk~nN9^4X!#ODL7+zrE8hX5Hm7l!5f0xf$LVh>?Fj}M0UPMd*0 +zEd}wN88D~$F!JD7kUuqm!~zKq`eMDJrM>x%8OB~+4`h4?gY-czjQwZ^ICcic|8xOy +zvpkqBN{jFyMV$rv}P-h^r2H-IG0!;JGMLE1bIX5RS@TpJCu +z`jrNjQVr%*uL-nMJj{7931oR7%x!)YNafqG5W_lA>NM1kSUPLCR!g5)1AQ5&zqM>8 +zAI#LfN_m^t`@@#Zk^psAWPEV(4W=7(yqgi^=T-&BH+m0Y~X`tz_Elcxcg?n +zara#yb*u=-7cwxzzV*fr+d-T5>U__fANTPcp7mLqzRSbX#qy~6R+TTsT80&)8Iv~k0>zn;6>VcV8157 +zi``y8mQ{q86=fi)`{1SC)5_Z1vIo414FHnm4zD>b^}tAYJ-k2gv^MZ|#5CZq-oyJ> +zDX2)F!-wsg0Ty01NUL;&4_9Y^{P-$-9JU!0hkEd-nFGjmo#D%TR1FJeLSfTuARhmL +zqW$MU9^DSU{h9*g%V78cF(5UX4?n^@F_PHThaW>#5M3_ApKMfCy(Yrn{dk-M+DVXv +z`FnPNK{BhOK@qcBl4{}>cbY5_%XAQ9)=0#AH_*=367xfj%9U7CjM~FDOJaKr$c1^5 +za=Q%B7t2p;*4y5I{IZK=LqEyZmMa3kuumc1qC-FpBcOp=Rg3&OvxRISb~5H5?PYR%$-_{SKe(=4PK$pWZ& +zA=S8)4NQJ2)p+Ryitj9`)_~(69cpAyPHQK5w7r)Ayz6Ai<2`Ec%LgQnuLZ!qdrIC% +zP_Qm%0wM!1BRvwA3SY3Gi7n^>~|Fj`Yt&sc)1ukdd+!`Cl23s@;$x_csSl#!Ha} +zt3h;Xsb||b%T?d#Z*A<&tL&vgYuzylc9I4i`Hs>(TpINIA6H95d^dn>@kkm{fVXK) +zduiz4Fi>1Pr4bLJK^%^kVtfAqR?0;h`O_2lxWiI{J{P1f?WBZHHo)H2l19D2)lIdP +z64U#FaDF9?9$5&)D_5GZ7lU5%d1+#oy?7#~21*kz*8_IO-=J8vPfF_e5EQp@Qqtgm +zJS-)d|M91kbQd=gDh +z%i0QrZ;o_Y79jFROF5(RfSnAJa*pK!xphrC%TQ%D_#vHL@Dym9ozl6`9IWk!Nav1Q +z0y*O%onMB}4=2(EkGUX9E|V@*#80#7y>w-GC+LguQMy(QMg7*j2F1oADeph57fNlA +z@*3mwX-f=>^`oV{+n6>_c}e*r`U2T<#-NBRC*85A0rbl;=?>}%ad5SCcfBiC1$olF +zy=SrHJgi?R>)b#cC_U|N35u1k^b92s-=82odr<`P0XOOSQLLzMbd_E_#C>$JjP&A3 +zA7JnMO0WE%VzDzmJ{9#zg+ +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 +zL)u?bl;AQTd>j-7r>wyuSW)h{fE-N~Eu7d +zsq5Gq$qiCUx5Oj*hbd*I;%EJRQ2*V^&3(dErFvc+G}&e;HLBWR)47pBIxStP>F^lj +z5s3yx({QDx{~h2Dw&*=tmoq;>ljhGk#jC_dfYHfHy~(ctN)K1+n{WcwX@cSt;RLjC +zN5$t(9zd%w#kYG&tT+28{#_|Z^*1R2c71{M?ydwhM?HS+l@hR^36PH`mB5+S0O{|P +zz$$9c6_I0*_Q*#{>qr;iugB_*+Sr>fS5eyT#%_{ztkQl>FhIY#N~bpIKxXt( +zLWd>+_^wep+hEWfRa)u#9uwc4=1RAG3}RzuDm@+`!zL>c4cdaV%w36i5e~G_Tj}Y6 +ziBa0D^d5|Z7Qs7}-iftAskT+=GakEsjjWWucY=X$3{#?>r$IwnbAl3`(-cVEW=ix^ +zJAk4%Wq|!>Ua96pbvjoK-5 +z%Gp2=D%Ij3wQVSJz>mJIMx{*LXrYl>Xpqp0oUEki$tz}f4 +zvVC_ZK+lc_Ss&G)VjHWZ*K`Hwv`9(65Q4FNxUzFVb70}1?AnutW7EmXuFsCZyERjG +z+hNt$wUl19y|WygrnhNtFQ4kB4{mSYa?C{~$0Zw>T3^YDd4i?(V!fYm6|+;#(+Zzm@~>>%E@W-q}1sRjy%=inohXZs@2tJ`GZC +z_xTK@?^)&cqFCU5DM~@&Q;?6>QC`F_;BCe#uW@!9J`Pddr(xdd+E4jVGa2M+zRJg5 +zQ9vW-DxX%D!T#n>YJYY@C%1^Xc%TS+o${&IW +z;iIDbc^(36wXHsx!6wf4wR9ME~7*2x_KVo=Xw?kJ(U&&Lww$`sZ856Zi(RP~&67u)lZ2IaA9R4-FK +zkZNvI8(hUe0Gm|baeqJrS5|%V)1U?$QdMnafisIkQVh~_!&UzV*sIOIqXxKoq1Adv +z4XT1{bxohs(OFALP+LTQ2O7FsKhm+8c}Hor%^v(-MV>my^CIT3Y8}-T?lb-qFB-bWp@ +zDF>u_AJoCiB0zXqsY6z_2Wd}5HTK^P%qyeD`J!&$J6nx!iN`w7PL0Qv5Z7b>&tqyL +zoeXk+rI@2C7!-}JBQdj$h&3pOUQ-jj^$DTn%^@|^vHzTbsp=3%{ZLQU;!fg{9L>h`W3LD;ubcUUw5$*GY+l6h0z +zVS~T!jH2#}`3%xyCv{hRN01)mtGiC(j=cFs-O~zZSZ$ruJ#Er}eg-w;ls$H}9Ml6= +z)PdWB&UY}#`VUi2Uaz=6D?Xk+D +z#bm3HD;UW86*YSY7TR{5)YCTaAqbBDP)|F%0J+{vJv|z^Csoa{NdwXFqMGB1g68*W +zgJQ)>HTM#Rze97>vu3mwp59l_9xejjf3H5Si(B>6?&?J;3q*#udNCi<{dQ0n5Y_QNKY`bd3|Gy&88ef4EY26UK<`qC;9 +zo1S;{apCsn!I|n?wjW1HmaA`T<$`G5QGMGg7ihN|=N^~YKDeLTKi>W=!c-xM74 +zc2kS`Bm%26O#N0GzrTKDxB8+ZnF|k1dy8^F)islU2C#C$nyGVrph|nqGz`_)Rv&$E*Q)qE;Z~Z}@oT8+zH4Qi +zu(de6v{uF&b^5gqTA3EPz`Va}*2~jCe$Yp=@jVLUuA63u|H%YxuvM$L6l<#LLbK0# +z0ubKXpnPPAR_W{_pwlAtr(NC3t##2HaVlK0b}QyYYl9*bznR|6-W-;%)#(2Yn7N}? +zBPAF}*@;@MvH!l%;H|kGMloWLH%qu +zJ1tw*{JY?O+e`GfcuCoc)-(r`d&zHF(<``3O^I65mmh#-1ZvHX;f7d7wdNO!Kz69E +zwK`D=nDtt%^;HR^PV==8_Z$#syJ#KDq+!%vriC}d?y0g=3ty4|;zX*}^$7|o?`K-~ +z2t3^DEVQ0zZipKXv|i|HN)xsjG?8{EjUPm(gZiTG&V5c@(fXb$1Elm0EwVm#?}HKz +z(i!&+iWeKS$jcW%+Tmi5G#O@)&dW8(x1TpCHf3m0nW$}6r)d2wFpDHQYyIY;ueJWP +zUa^O>`E-C5GYe(ynL`GJUIAGEu=k`vo^GMV?8H0K`K%Um2cJLr+#t{VqQ(3y0Qu!D +zgY5KDgZ%m~gJMY?ZQxlnVcXbhgBxMB6SYtqJb4Ka7_ALy^9P3puV_P_&jk;*VvaU+ +z2d>-MHQMk6r%=~!*5a+lpn9lekcIx#M%Ee%yhU|wWNjbpS8dSW;&mt8))GdhfUFMI +z5*FaWaY@!jl|d#>)JCEABUeb$5?!&xJ``b4Y<;CA`eLI#FIG$Jk38n1jehtMv-%2c +z%pL;b?ptkaBtHI=s*T0w4b7~rjkCfw=FtZR#rEUcxL7<-K|$KMwV!~9wGR5Ch-MCp +zowez!uLB=h&7jajv>DD-0eTcZTW9?a_@j9JcTc~TW14GQ=0t#$cu3o_0Xcu1wmoMruoIuP?LVf0aF5l}-P3{n +zT&bl`{S4&6L~W;A6i7*RwViP@Kzz&5cH)))lM~9hTW~HTK08pv~2vKomqkhc*jD6qIYUBw?^x8dY998 +z^sZpuT}Qh#5~bUw{szUGk=msU^jb?T&@R2*0P@M-+U52KfWJMjU0t~ilx`DSISzA5Q|*R(5rEG)?Z(Taz@E5kw;o|<>dAcVcE2DXXQyj-uBsrC +zS8I1Z#sYmaN4xu_CbkI6^w92Qqas)g+WqM`iZL}pyMGBQlUMz<`+r}82z{hIP`!XP +z%h4X(MOVeIqd_`#i}rAITWp0j)E@3%1=yO`9+ztgY+Fa|@t8o6L$+v7kH>=KJXL!> +zr93DN?`bc}q9+hFNqgN)1t@#tANAZmEeBK@Z9GN2OB-a*3Jmhi+YAc(N5yRUw3zGW +z7*tGl#jILGdshz)opRr`!oYa^7SllOt7RV`(@u;zRld{?lqACSZ;PnH<8o0!`7smD91|X&tek|z^}S&dT3Hoo1!yz*Q8Z? +zgw9}1y<()jd-^z2iMQ6+Gyqe{{aER($TnGqCj-y0G$>NPnJkBf1MgGURBA#gVEdNp +zgCpJgjI}mZNXI#`<+V%|pGKiM^wv}*#t$nJVsdcA0xsFt29ia6lG@5b*5@JuqX~|VscHzBs%nvsm1_bkhgs>x!INhx-dfj9qH`u=4|r9 +zvR7XB$>hBrzgl+dy{X^Jh79| +z%+x%h4Dd$LrsijGaoo6e+cTO?2YN3Gi(AU)Zt3B{{CQ}>BdH~T! +zO>Oe0K@j03OkwvhN^BZ!3J(v%!sWB6TS5%Tfmx<*kMQFyI%SIRFT@kK&eZ$R7vO8R +zn)?2mXRhRHiu`v$dAIdO{p_oED`Sd|c@D6vvZ;UM9<-A!Ohby6;5V`xnueA_;b~XG +zG@@b)pb>TSIsNR-+bv9^arl#-Xl+m_ecUuw&%*Yey=i=5c_0f~nI`VQ|H7)nGE>sS +zY>>vSG$=2>U`l#|Wz(E5rlju}R@hL}WS<0pg>8$u*JP02+F_bLB@M)Y{-&8u*k7*c +zZ<EB!tacFCr9dQe2w-%<^+iZYc-)@?H9s|wm2BtZ6ut@lD +z%rv(hO0adaP4i=i0clXzAdOjRTIi616Du7|3zM-w-TzcENA)r&{8IEe(VauOlr*hw +z5srk|KWZLL}L1Nri)5iMffR>wYN||DbLiUqsQ*0j461k?$ +z^(SC|>9A?@5xlK~ewtEqP+G>%(Y^Y+b@jeu+U%S(z>e!gF`b!|2&ziDEVGrnnzv)!-9{`p|O{c!i +z0QkDbl=C0v%iT*%xnZAyHXLUbm7lX}>c+_-pv-qx|5vsZjQm^F +zO~cUpO-NIJ@W(3XOj~vHq~D<2w;yyD7fJ6uSx_>k2V*L%SEXnRK-qg2v=B>5AG# +zNK^X~^MoHjt{g@zrr}atR+DZ&M1$O7D6#H^`#Ld`*fKn_pvNU*Ct#}Y&}?G2$O#lq +z#iU1KI}p|YaoCI*%p}bI#186z@-T7fas(^GV@ZEB5ulw#2Do8h6;??Go-P7m`VBHD +z_Bkj|tuUZ!Z-~?s>!{oDg1Gx&B7W}~M0CktT_EnYXyZcKkzxA|f};2w8IDIG|J{j@sRt>Sj(amIx<$KHy%81Vl%&Sf-BR=bHV^(7?@tb1@%8mPp +z-_{aLSKT81wkShZ`^Y#~{Ck!glL>n<@mrlwg2J#(fe-GdiVL-KPij1Ue!HDXwWT_y*(Olk- +zq`M}9te^);KZb5L&m{|5QEQx%OOF!lb#K3t9H(Fq4pfrd!gZi}+J`K5LYYeQA}f#^ +zCHwd*Sy3i}!gB#xQG-!IP$5~FjKhyVK~^pM31qd-WVH#d*C6tFQvM`wNlYUc+-NekKL2s3cA1l0w@k +z5GF^H!m+L(^w~!W_h6ACyP6bY)m`@4jOg1O;c@On|J(~yxe;W&3|Tv->4^6ceNb +z180Ll?!J)xw$TMt*Q-f|>IsO=H_6epJ|Oe0C4b0LK^c%w{)qg9TXeH@H7QItbvU`W +z#S!FR)#OqfRv0t`$yIYb2&RGL>a6xiL@Odyk1)1rOd{6+FHEtIZU?kF|=O~|(@A5a}% +zLg56e;;!FQc%ndedOB5@qGyv_VnEfkZ&GE7y-7p{ReNFO=I%$zhT!vlydkxwIO-mD +zpq=y$pgbB)yRG@oh?eUHNSm}*YE +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 +z5G_P&mkfwJH!VB6o{SQH+MTM+Iq%yoo65ii5 +zOSD!e;r%Bh#%WVydR4Txh%aTL9bQb+hh>SqX;NC-#gw$!(X;VkTkXV-PJV4yAp$%h +z2&|zeVhTh;Dn2O=Uy+c2UsLh)%9yrsg0+5fme|9>GAS*>GswE9XG&zcHclIvVEupZ +zs(z*F*Q7PK#I2f;lXu|~L +i6@C@*rK~9YsNyL|0k_H6vjj1odt +zviF|Zd;N~vU(fF6)1z+h`+lGEIzl&@Jd`C@#BCX-Vpajc?>jCHhkXHs86rBqf=J|y6 +zJA_wPK=S!ykk>1V`~mWwlLkfH9ss6+yf@UK7}yqB1>}r4gJRIX_uGT0{}tH{l;#ig +zaLLtN{0lF;gTjlDQFwQ649b~S2Dwir5^rYaj}jhiWKbl{Mvejb2;MoHh0HK0rVl`# +z1G(J4>q6vp01*IeL~~?&kl)oe$j;3ID0LBZS+z@tEk$6vdO`UETWLNEwlR>&+Yfz5F1;cB0wKaf408r;x0H^jqUDxX4WgoLE{&=VE +zc-P?u#e)?F6(tM6xeh+1K?X(YNPxgeAkTdU&@vTh(>cf!_`p6Hlvm=Ph}UcP=oA5RllcaD(~8K6K%Z9w=sX-`KerMN#M}ROJ*JXDmW&S;uSL)U{SL8_edg-F +ziH&7OG(dzm@WAoNGobkR=`Pe>3x5L8y*IF4HT9ma_x@75hsJ&(V{XnMR!@c?dXjvPeHHBW9*~mLz=`PI0j#i!rbW<|$a_xX_#;yK- +zI?yd?z%vd3-F^(Xb%LJA+G&S-1O4Iw^vpWFfO*Pi-|39|SUML0{fSTU!R-=0f2xOb +zd$*%ofK?~>KnDP`QGuuU0c(&7BHprud+mWWSqXA_60jirU61bnU58(Mn^djM@Ik^Kn77M(`e7%C=StVg3u%DBG7yL3PmPMEF +z&{aKF@o9P%Z|rGj;FCTB$EAcV=RvrB2Nt~$M3*2u!%+tLbR^!q{52NDznk0OsozoT +z&D)NFQZX6mpNXK3tPiYlHmIAwgH*0EsHcz?{h+MFE1>B$q3pt@0Oj{W#X0+cy$ynj +z^Y#HBbrC8ptqm;q5mb8X4oa&@P&uU&K&x2>c}@XTzF-H;Z39^QeE{Y;1gvj(0bLDH +z)!{qzWugPvSY(1o?+rFI|0p@2@aX~;D)$D-C6kaR`t@KsIE1haQhr3}wX$VR30_oN=g9=T8kkxtTd4Rv_T%kTe}Wj<}3loJ8h86@-oQ%(@OaG5kxen +zK+Dg9h!YaX2fG>MA>WX#!OSujLf71hz{-?|uK6c`q>eGjEbkct&U|EUKZQv)M)gC~%L4hD29tGV^bwD0`u7qPl4T_M`C7g7rga>?}M_e|D +zF}BcSN|wI9bd{!)Z$QtVTR^^a3!;+nkd97A792b?9y&Xi1-Xr;9f`=LV>rLPvx2sRHBPn*olVh6z6%K-`%JW~UXvQmtT8{Wh3!E5f8iS74=jL&{;1Ga4?%&q4PG_p6$eLflY@<5muas)`t +zo3QA1JP^fWm%iGS|| +z3l6(lS_56u682V_3ew*xkW~{`u(=Fb0|NlOM?%)kAP{lA;D2SO0}=nh|N1i^OSi(I +zKWl*PZVA~NwgQu*AUiV;_^@AaH0cxWzL{{$Z7)cjs>88G49xJq4aOI|N=-PnHWq_r +z1ROik68QVMkdw6-x2JVjjjbxqRxXfu_ioujFJ7+19(<84QRnhc;5Rxu*)IveCr0_ +z(nsCH(muNVMR+;F4@j;XyyCci17qOTu>Qbz9fLQ+rvrZ%4R2qjfe7yg?{;nmSai`K +zty31>U7iW@!^`k~=w?tHw!w#BTaX*t!>0wP5&ruPpMwfPJRhcKTiTdw<-(64Du}26 +z_>+esDfScm-G?VII7fmhn3L!D86>ki85BdxNs=?}%GxOsvDgJ-lBGmE(}8yTD={DB +z_)LifVW3T_B8i>xAb&2Bl$+&&7N3&T3f3SW3Y4^AxR3TMlC7slPv!+WH|E&S(a4)Hx^GJ|~m<)-Z7RXfKFY+bZ5ye1>w^Tc^FFxLKQtfk}frY)6?9(#B%@lKYp(!2WEOJhM@QwkVbwSNjGey@ljey$|rYlH?VJajHeM +z?eZ(TjLQk`@H$OQk`QJdbbj()@IOPaRix4T`T`Wiilcm7I +zhQPLZOD%VI0+QW8YJCukit;0+)@PG}bsi{nD3}VgZYhJj)&QyF##CTyx=5WSV`M10 +zAcdEC0lfW8DSS)~pc}lU$jTK!+UqMtPK*KB!A9pHgBY!Tb2S}@LLbB;9|%4 +zNvUtF6_8P~6jQN0NOiADG5bO=r@ohB9-*R%o`R;gVwo$@I56B +z%KnaOJW?9;`ybax3C%ZxT>62O@E9LcYOXY7a0DpMo2B9R;y@gKE{*7e!m{!pY1Gd~ +zm^SN6N%}mHKDC#UK2!kqVVyMkIj-)`SyJ+@z95`?N@GTS2I7$~P0Yl2wZd1L)HM^+ +z;_NJG(#6KW3epXVjgHckPWM4^eA$&CK^rNS=b=N5ncUwr?TuuRb +zcvjk821}g#q0;u8hM)K%2<8^Q)i@8NArQ) +zD3s2y$C%^>OJ^270UEYaIvaipSX?vd>@f=DutVK(?JW +zD3a$&w@N!qIwcGE +z;g|ZI$~OL=u1YU`pJ2w3q*s1dfINC7y((M-G6YMnCx?Ml#ZG$DDj(>$d(xW;j=-CB +zm)?GE3{uxZ>0LM6+KDf8Z)Y +zFsCVU!_|0l=RKDjW>^DvJSDrkP6hVOV9+pyTzsSw^wgkm?vE2N67>MDPvd_QU>)uNC1q_U@&*=qK+gavk$iZJ-fi_t$ +zhvcOL&z`TlRI@i%=_I$xy#~C7k3rGxwL!(rQEuCA304vlR`wpk9mQZd*Em2<;_zE5>4Wl2LV~WT8;|Gns!~Z+^g(NJpM!FUR~B=f!|f`v$z6~ip6r@ +z^Q}O>?=8nxP62**sNCy@nKl4tL^1MEq(%jR;;^J4~};BkVnv5 +z^pl1e72X; +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 +zSJ$Ahk1(i|ugog`C#8Ua_E#`doK5(x|%=s?L +zi@!F^`HuxKqMviG5#6~eb3Zv9MDzmIDEbOetrhc}iQ?m85oMSFlb#nCrdSHP*w~=eT2Q^t&XAh79d$1li(1gu+$a?%%fmu~yQK3tKu3N^UF3khJ +zB}9MHD8U@?nDx)k#BqTPHb_%J92G3#XCz1`dLz-Z$yvaLu0_e!?E@Re3vuEqj170i +zF@%+)+3@*zP_vq`5%VhmO?t;hd_^Vjzoje@r?})%PAqXczTSB?8`TS+N%dMRnM8mT +z{FWt$pf;S^jU~rTfHtC10ZV?K5Ay5vY+MGK%P)M{L{H4vIXP@fKa66Py0K|inc-lo6gZcS@YQ-Qy;MDMeg`4_UhF=eZsbNXR~KT0d;)OX5Wtj`9K7llDX`Vi^*HHb5r>psHf3|cJ +ze%E6A66V%3$eVhX@L?=l))HIe2WPV7lQVIU>oZ&NpEH^Rfo$cBWysM6#pqE%F|USzATGz6)O%GPvNKsdM=RLZBYHQRmx9X^DuDOiH0RM2|1?w{6gUyZFx +zI1lVzH@5D;R=lCO66Ovv$eXSz;lmAV!^R#UuRh5({A;9lInL5DPvH@AWt&XNAX4o0 +zCynhblS{KLb58&`hOsS~*t-gus#kAfZ`n19ZEu1*Z`3um+XHuS_n~@t6Bn~WO>9qk +zE*iSAY|q;^*fM><_WZ(`xSoLqr6JAP-djgNnm&MK6k^ +zc8CrKey0;V>=XlXvl;AgBLVVI3xlHY7CYQ&36No%SvE@oy3&nhPr<#MXlB{RE17|> +zZ_SQ8xB=pS<=F9_cEINDX2*Lw0^PNm9p9=VpR(iI_klP)lI3<5AXYDDxx2B)_wfVE +zoA4bcq9(9B-1YKNOLh{6vq~yJEV17s0=^O@h)K8W_Y6?i(vkZz5UzUFlm-|2v +z%YSJ`J-VeOD=1qAlnOIg!RtVPgW>G_!sWmRZe|yD)B}b3v5VjLfmClSyCee9mxyCm +zn|q+y7Qk-Z!8B8MFuV2M4#@CQ2I&=z-CmUsbpLsF7ef^LQJ&p%MnON~F}q(A)7g9{ +z_8`n1UCV6t$fpIK_657yqwDQ}Ty!$XdM;y+KcheN)|ow@lLm6nj_hR!_I3Sy*vnOZ +zpj0F5l-+L&stqyc@>hHdd4l0i1Nm#My*rJGg)d4e4; +z{Sc4u@=-|iNwy8<7IVr0TmFcbJ9!P*yN|p=o0&lNhH~rE7@5mf;no-M?|RVHAh&PI +ztzSIGCT<6A{qqmLKap4cH6Km&8@&3(mLONC!D~LV1u4Edws$Rq#^m- +zIRPu5DLoC+Pb>87W;W)B<#|I3J2W6(bGO*v0T0OaYfC8?mo{aLb +zyh)4?$ZgN_ChKBweC#3jD)p~hxtnsYC;0&Tw({nFXF%LL$D7BsLQ(#Xdw)P1?Mi*_ +zGwBJCT4TA-wPC>5ROY^en*d}VHz?hk$O9TxKrxuh1Jg24h_&TGWg7vp-p+#$l?T?f +zC2x5Ih1{m9y!F@f!2dkqZDds3%_j3UjY6?1=+c{q;^dc<|Bbi%f`NTjH{Sl;C)7jh +zdFNACa7uDK@1hrh^s@(#z_i3Io%GV)Hu8#3x{J5Hd6x(8y#k-lnsPkm&T|lP*LdvL +z5g;BP5Am3iVhXEeQu`_k%V;>z5%||$g0Y81qpx9rUk1D`8d}IetzPcR9oFx9Q +zV3EgO=VMM4fpB_nP^q|vkCl@_>OG&2ROeUZ(>LH~)-!*DJgGIGVTa}KoOygk +z-XoA=?D&i;SdX6eH7NECEaA(`d{zjiiOcbP_Kv#%Lli!zS1ia^+wi%e$-pBW`23(} +z;6#G&@Bu=Mn;!C~afR{b5hx^)Fnw#;}cRPZ- +z;Wb~Ant}F4Wqq!%ja>GNzSGy!e03w=vVA&6+13VG))T(<(*sb#>hNv;XlA;W?(J-F#zz(3&8=kvm23BlY{Djv896RX4^XlFO +z>B9$}*Z&EcY<~Kk7M@y@()|2qlug-GukPn+9^Qgq`I?CSMkQV(@HDN-vaziS5OwbJ}iSL`WW +zdcq$?VvDm@B7bZ#8J}M>{)A(5=XR1og@y2^6(YfjKAO&-KE{o5#(_Wml??QeD}VNN +z9yW9C@E5CbDMuIc7x&Tc-u*`Z?B`=n8O-0m@c_y@@Q+LJ_hx4E&%-|exn<^GZ(ah1 +z(d1j@nIJ~*;NQU&n`8d`yZe10m+SK%>$ZXtupDP>(?Plz%zp*l1s?Cpe?{W)t^9%i +z8jMk?Q7!&E9n<1#SN_)q!&+b}|J!^xz{v&tZ*VTg`9mP22AFpy{U;<3YbuA&9;QKun2+b4;>{@f7rOXEE+Ei%Ua5Oz&rYLg&~G(fKU>jiPo(ya8G75#WhUv}dC3uUz1HrI3$shA>_@0{ZvO +z*9u3EL>vNoDe8G-0Uy9cy<;Om{`pNf{Vxcg$9>^qG69)YDBQjB@CfV_?lHbXwpN++J=qy@pP=Rc1Ct9t- +z`u^}^gW~2z(Z;PFmeqenC`aMccYsqMW0r~FwcG#eO^xo +zNE|9+$`k>;_({Y}UIz44y6AW07_hU$MO<}kf0a2W;=E^KS81e(Yo81z5mID)A#V8U +ztAjkv)2&5(=?oCJwu<-@1i1GV5nosdSimz8{}_!M-xAWgyjAI${*mpjTl&~ +zF}eeD#K3mBSUU_9gA#IpyxAfK-$0+SrKL!~t~za;FA`!X@F~B=(0^l=dxnW&v5q*y +zkSRvY@W8g5b%989Kmqa7LX29Uf|Dih#VFh`V$#AA?vD|p?&Ajfv0Nmn{y_Vrilq1) +zpeX~z=r!?Z^81S9DL+AeUM$AuV+5IXPmCMC5o_nKV%+irKyO8e@zq-5!hRIvU*Htm +z-%Db`8eG_;PlOqQn&ZgzJz;Kuso>x@F{#66w3ge8sTU{XgNw)U_@1a(&x#q_u+aOu +zP|WF*hkd`AVopI4urU+$(k*RlgZqm)7xsZ1aoiwVXclw+)&|jFvY1=R3utghJ+!60 +z`DCtGh+d);P+lyu*a>WMX`!#f{rvckSnT10s^N}U9D&ch+-ZX%Fj6cXi0jpOpjciV +zjp^1~#Byw=@cIYE^5Qg{L*beCKgiVYv|+}!XM8?6&D6P^~SmP>$!ZxpExd(cQ;EYfP?0hatkT6$lQ*b0Nh +zCe|QzaS~~-tbv=?iA~*bPTnz3Y|6&~Fzu)w8WODiuSo1_k8-NYQhjxZjXCd$*b^KJ +zFzT4t)2AB9nS;chzSXcv+EwgbQXcr*ID_I=1Cco~3+R}sVqZU;FR~se4k-~JcHR?* +zDnA2AI4%xb^#i$&A`Uxm2JtIGNc)!(}I+GMGbJSW47W{rveZ^Z-aEsa>d#9 +zA;`m%4T{$16ldRCz@Jptf48Yp2FD{OI@qn8RBs +zfeFn39ye1$0@AQ8`d0~=jz2%EmqF&TO=%^s1^&MfrEM?+*5fh~rA+sxNNeOeWOaO< +zBW;j_l(sPrIH&wp39U96n}C;<(0Nla!*S74ck4T`avGV|S3fGU*@QvasP+$t3yfLZt`x>YrxH+m{deC#kT +ze^i!Lx&eIrBxTu=k03WWpsbuc7}${!%G#%HK(=>P)}O)goJt!F(uTSEn|7}C8tqiJ +z7I=Vsg(}-zP#brCu54=<1N7?~W!oe4$^L#vJ_h=W>E7*KTMy`^>`XrZ(5sU{HsGp3 +zrP@w(QAsH)!tqX +zt)|~;ZzJcQ*MGOSX+6nLIpvTCtlW6zRQx0K*us@l_vQoL%9Z>{3`A18awZeqwMumi +z%Ka)Cr1k3?WMd91XTDScMUK{EJJ_33J}HIRSmK?ZDOYvW2p3c@Gxnu;2 +z&C1H-5>YoI)jXTZbWDz9*m8{Q`s-my6AkgR-IQywR; +zZY!T)Cc45clut2Uz?<|{zTcV-JS0u|@u3JfSx3(W0{T51)VAvV3$QmLrPe$-LROv?x9oUWGHg@e^a7gP(Y +zParM@s%71e;U`05)UpGLfDW6cTGqSVCvssXi-9ggVL +zJK1a7UaGC)z60$xQxEMFY|czkLo@J$hsD*@b_pW^wq8@)cd*9zlct6h?Ez_JX@jCq +ztl9}%#v-<(+Nmr09FtzC;aNDtP^ZwKXn9nPSh*MES*~hV_ZL_~ZBx6(VHDy +z)xK2)@DH`sn0Q>z;$3RYjc|~T9#>;KrUQG^O^uxyiL)<9k@4sddaM0Ib&%WdR{KA~ +zNHwIL8t)p3`RA`XaNk>?wL=W@(jn@gM&~gR)$ODX>VvaVjtdOZ#-Zw#w#H-KI#o@?l@K?cmhh&VnoLtb?yr<^ +zbTxxmh#*q|hL12PhZm~Jo_g8vs^*9_>bQTN(U`L8xW^2@EnJ;Y)e-2W_v*yqIACgV +zO`UA97{rYK)Tynm0qj0)kk7fGPHltND{a)N6D$D+g{ss1A^`3ct26dtj=Dclo&72c +z#8@A7_WM8}yZqESqtIU2BCGS7<6q`qsLs0)gQ>maXm#E#l$mq4=vm>eRSKG_E1tgv +zsX{-4Bz%p!a&ZbqzheD&xQ%5}lDcN`LjbGq>bg<~fYqF+yL7QPKX0R^hNEP6HmjRT +z1JD&M)XnyFaVmU(y17vidVG!4EqzO4Z+WV^vs)(+b~)VU%ZE!-g+EO(mbSu#BzG~J98|+%ys{1Xifbi8# +z^`b8J^4PWd?=Ci$shWC>UIU)l!l2l3Om~T}HxC@4=HScnHCuyh=pQxbk|nV4UFwO2 +zbx^?PsV7e3`_#sHEzZj&|_v(YYVlT9= +zdUN-8khVToZ>>ND^EOw#z4RzZV;t1m->@cj*3~1tz6v{YYMCS%X?vikBfO4Hlx)mIL?LF&;-ef2&9NXkp~_4f+s96PIT*ghQfSfRdg +z$p;a7Qhn1VA86M(YB9xZA)is-CgS^LZ>jJ5O~tusSM_UjGBAgq>bG(sKy$aMKYC$D +z!7WSuk%q^6?N#+>K_ZyRfhhI&FMpf|xoJ=gzNh|8K>^V1kotE~A&AXu)W6R#Z7n&d +z!D38r9z!*`yN;uZbu}VvK-74qk&)6hWDgag2Oukt-b97lV +zb!h@r>7bd0q5#|TLM!ugv#xfl)rreTG|OYy^{X;SEANS#`uYj2e5-t5zA2j3imf2u +zi`FVMKZ1+ns#(Y00P6dnR(%-`G1n8C&8bHKk!=mi*$G;WGfRNZX|GT1=2|6fg=UAN +z)smHK2`5<@6y4_Q1>J1SJzHx|{fmL6oYb7sS^}v&Npl&89|S1gs<|FUH|>k6x&Qlz +z0rMAV?z?o5s^n>n_7{UFw?u377R{Ijky_(DSXGb|t;vxC_;LI_npbHI1DUV1X3+t_ +z)M%}_18TIG2(9_-0F00gH1D*tAiei8s1N9Ft({5Ke7oXaJ1|P0+ug=|=C2lX3UhcR +zZ!PE&?od;*7WCpBu!C7z$Wh!SYh1OEg0CRk*3;S?uK}#Olh*dK1XAY(TA14@5EssB +zoyu>;xye#mWH7ctm1SDw(j*Y4s%qUHpo6W=)#buQVo$WP7dOJoKHmcTGdeDaK#&x@BsSR6r0%h!GEzxQ$ii8>lS=2Ob +zl*Fw66ou=a@DNu>I6t7GFq8u&+B>mLp@akRGfDlYr{8QOZQ +zV*CdS&-JukKCLGn(zeZw0x21}5xHQzw)0dbuv7iCoj<07X#7;$<+cmBWTEYv_7TXv +zN!lLQSdgYP)b@--Tlr5@ZO=LEmOQl4U3%Ng&Y$)0-k$Z=*=dL8j0CnzH^{A*85B-+ +zOZfDUL8W4CJ*&69xm6qO=rwGWWu|$b7eW`VSTL4`|fKOMxm(Ne#@XpeW6{*LL0U0LhZtvjUeaz)-HC~ +z5B#IAc6rqfZ2SGu3J0MSjcu-7xv&!3h0V00%_D(p`?afXUje+vYgbsvERBd8ifs1MTh%9K)CvrQN-N +zHOt#u+TFh|Ky>e{-BWR6wGY$o-A2>Ir;|ZCdx>^`OgsD|n`!s=tp;{{jrOogYhZg% +zY7fWygB-R^dva_9NcPjTXH%HbSr|B&s}c +z|C^?e)3|)DXH2dB%})>AX=?qU51y5&rZ%k<9Q0^zYWu|o_x%J@s6}IdxFe>}YtvDp +zmNG@$!8o%$)f5>Sfi=%ZQ}?8Jko|K_-5=oJzhbv3%J;Jw5AA(ZpF^L3Z?ZA<{Wri| +zd$%d(-woZiHubA}8OY^AQ$O#2&##3ku5Kd$_Y6~)0}e{-(EE}&24~1$(KK-dF@dLZu)ClFk&c> +zrVS0!gz2V5w)m%iTwq$X7(3nlPn2+UZ-XMRvR*x|OIVNZrZuf1fj(|xTGMSCjzn)V +zZTwXVWa)t^)fPj~`0b|DCTN@1B&M{fIP3N<*0gCv5ztckrp-+z0?Vy$+MJC~V$e_1 +zmQ$#2$AX?0=i04#J5#zX{_CdF`KI(-6yf9VnbNC#cJDtI!EQ(FvJ}3n7JRj!CJSWfPvm$EUG;E+Z%O&s9VX3}Dv +zIl%F)q{SJO&)>3%DJDRO<{JpBA0a_UKvf$}*jVg|>Ar;Nf=!}j}S}TdH}hXiIoqkTirThySB}ifmIt_b%t!6L0Iopni3fbV0=f@smk6AN1~`%E?!!3qgoGO1dXhf%@DR +z8KwQ_4f7H_^*cE64Mz6*kIo7v0avb}9!Zf=3d}{ULp@SSdO293o7Rr>Zil|d@T;Wv{Blr}v!u_&k)V`( +zNS|3HARO330^8h#1mR=>>1SUD>b{vII0pIL*dIvn${Wa{>>>lFI)l2{nGD=eg5zOL +z2DL*Oa@5A{O^b-l&g@p5cB?*thy)4(~-Nf00qTWmJJ0ZHD1deWkZq^WF>rS3`6yiq@Fu_EcVbzlzO +zww2=J4zg&g2&%vtWYKMOQ%0DO#cB8&NhipX?|%Tr^Uh?c8IIkN2Qo^#CXr?F`1d+9 +zvMdAdZ%~ot3EzV>+CWwetOLk;Nmj1z}k48d;^lJRr+##CwQ4 +z$f~(7KdR43e(6nqT>lhxM-%z+HX9AsoyQRX5ok{ks@doME08%FX3gVX_^3#f7Pz-oZ +zjwmvanpct|(M>ps7aAf{qm;2N45g`f5)&a657Fyt+(jw}BNH;Zf?SJAM$NaJTr+-; +zTkj{5TL+Pf@!m^rw_c80?Q_WOY0XdhgWS$4!9B1Va_7DQgf~iZ&&dxrVI`7#33;IM +zNFoo~Tm@A_g^bd=QRG)VS_Eb;B~M@7MxygqQk}XN%%#i(QoZ;Q+DXsJvkqrL@?T~c +zljf?wafiJ8`YA4{X5?jMH&EaGj=Xkh1YyVbq(+$oqWvRMGo(36T1sk8VkhTUlefFw +z05(RGIzQyse~ut^acJ%Q>mhk}azB8ZNZ#AGLnhms)c4wkyP`&sdQ2x*r<#xtQCRPz +zdh%hhGY-Z!(zxq9bX2+)lP2qys1M>uQ~$%b4TX}X#pnh;?Ls~~q1gD$BY#!|gLJ0R +z;F0d2yqRwJCf(I6ZXh)c!U)lwkCgSqYIR2q^U^)_kB3kTBl>hF?osQ{^=Klsr8bdh +zX9upQcH5CZ`o0ylU%)`JsHFDI3;$9jbvW=Xip~z|aN;S5?<%QdPz)#w@~E~1M?+Xn +z+qS+A>e6)T)C)(cMJR1I8EMW}bE&iUSrC6Hq;8lpB|2WEZeI*I85;a(`-eE&s(aB+ +z&Zj|Wdxv_NdxFA#9rf;f8dSfxrClPBFWwYHyBsbAb^blt^;uug4DLg_ZNUdw|3rN> +z7NAx}QJ*LjgN$nGlZ(v!L@U~(qX6O`8);7`)M!85mQmVyhJL-+69dQHsh{?$VNXVv +z77HC{uYwp5&vr7@WE2dnWwgJ9N0WNAqy0mRKrvrS`+ve3_xwbIKimPS!*)8L0CnQW +zFdEVsl|;ZnI#65!(r-W0fhH*Kc?vr4s2fP-DTZG%9h~+pphLfNM#8&9MrHmZ8vY~d +zk{%H>qAfaUtCJ0Mii7^xQTnY1ibLT6IubiZxxF(T^Smdfv;9uT-d+YU#8*Z|te%cv +z6b9;P+iA4(L=f7$(&%knF~B{CPS}B@!kUwG!v3cimP)5FvdyfZxIo=nwlg8h32J!B0I(Yzg@Iil?a3UX6Kl;O9LMF-5<1Jm9U0%pbXGXhDKiGs*=HiJpyRWS=2{#FsbyE1+aFh+)u(9g +z1ss9|H#+CSdk{CL)47(|g?5p2?rhZdWQdHa+3jSM5-!mB!QLRaOqWq@meM8n@1p*xqRW3mE`&?yASZ{w)tzTgOTC +z$vE^Z4nC$&^|1g~&(mjj901iKeZIdhsK*_muePCZyjn|Zr=A7)qdTq3HG=4$KZZR}MC3ZYy^l^vx`kvE~8&^D5O +zI#&hCfg2c@qg1YQkx}vwW>7H@50J7llxMjr8!ZhrSq{nn1D#L6RC9_Ct2N2SQSu`_~ +z)#=RQOd%-m^kS9?HmD;%u+|Ii;}lxPtStpl&Z}c~9fLriZ<(X%T{I_0F{dk=!LT>m +zCcMu;)?vYRP`@ibWE9RQe9oj>XK=1$!u`ka@1Sj@vJSWE8G%XP$kWZ|$9cB?Vy0vXAw_oJ3)4ItxM*TDdBp1ue2BH2bOR?RE4$mc)cHs?3>;apGu7jr6Tb6YLyS*xl%{X=k$-nVzrb}NC +zE6%f7xjq2zyqVtnB9h=GqnLgiYTy>pOrKkV$&GGoHg1^`7VcrWABSV)*OuirppWz2 +zp9XQ3r@ogpTRsbotB^Nrg$?%4WCynLWd*3>16ls%!MG`VB+Gxi9#oZEWE97mu~oH5 +zaz8lC*3K>l<;lgY*xiU8e^!p +zNgmshi$?m>r);Zl7P3Y!zhm3&H-o0#4YvJPOct3llI^+V1?sX4w)dhXD4J~9-Zz^8 +z{_M#1Z$R@Ujj;nhW3fV0cChdTrV71ghwS=+dg^R;Xn!Oo1&i#+M0A%&)v@EF@xI+^ +zcD(5wDEs}!PWrS$H+uj(8QcX~aSc12jwgPK{_ol8OV0on?_p;tYQDgDRz44p?A&S2 +zE;KDgp1PV{w!lddb&_3PJqSsLd#u9!3`hmv8phO!1~7do?Nwo^d3GKRhCl#VHwoYmyT0POT&H9uQ{nDd_1JSqdY +z@rujzZt*I%wQk>ECj*Ljy2rEMm^qUn5TC&+Z4;e +zc{3=w@8OE?aFMqa49E1IEeh>8%iapY{6s^&-c?_-l3N^Z1Tpc1j8fNH88vNuxK$HI +zwkIFq)+3IC^5Yq9-JDZ0B!}Bneh-S0yWG~XF9u;;hq{5{ +z?hx*N9F4KKK;GUDGs7n>;_XkB;Fxyh?VEQfsAusGZ@)!9xjpw>jnv5ZF}!n16{vc< +z@XmVF8ZBCK?_5JTO0|Kc~e^XLHYe=Hn#{IvcHpDyLWcId}{dx{4S(Eot3urNM= +z?m-_oNJi1EvyAHV<7Jc%bm9Y8Pk^@Xc*rmKCIJmRG!2)t4LLk?iWMfBXn6QwG*3fA +zc*H^@Xk2&jVJR;_@pUziY}<%?sV4BK#{Hn4eut0P{SKtpfAFyf(aGH0mXFupnhTn+ +z!+bnCg&NPpTz3PRxKmml*ZC%hfrUJ-v=NlAKl1pIRruY8$44Ipsi>MK-3tQ6!s{}s +z^0x8hWjMcYz2M1BC|VP@@YKr!s)1fSZ4f5hOfBYV-_+wg@5s{uWn#?&p3$74w=jyw +zPC+wDd_R^?yNLo`zKT!Bqq>wcU+}Cw7>(++j%WXw4=`AiQF-u^jG}ms&+LXW@$N03 +zIrJU=zFJ1*p$#&sj43jTnl>`3&*d3D=k?cT_TUTa@jWtg_~Pb3_3$+^N-jznHLb4j +z#jkMr7+S`c3~5&Md-=+(xV~P#!t*!Ag49sSjZW7<*=`yye7+I&(`*@~EtB{fk8>FF +z7|7S?Hi9tHp05?Vf@+QlU;EGu^-d^X*YYd|)#lV0%I5^=tr~by(pj8S&b%1YKBQF_ +zd5J5UX;+>2)}rCKZg1wL4{^?nxW#vMMQTNr$oDiLcRla}-+Or&#%RXzeWz3)?CHe! +zXAcLBOHY1K@fdT)C-P$%=aESp%uhH{5D!)H6V5|G6#@KY3X`|~p^dgJL;b8W(F +zuJT{j;TYA~^2*o==yDeFN?ajqg@LCYHsph&pbx|JefZp +z;DmoCGK%SMWR&h2_~Q{+e)nq`RoSoklfk<{=#$2uIipKAD}p~8fSz)3Xa2lZJg9FR +z=C5+zV4U?4fBhDRaK>91CAWDpw$qqj=QVRTqiUGXYbr7U%)0T~_2@*ti{`ao0zfj) +zHI&Ztbo{p?Z#vfo)Ps`w=fLxz98k}{^!@^pm1{g`MvR%$G;cxEJOzG~_)(QL%@bBy +z8`n=&wlhB6AXu2#LLkILBE%R|FG_YTTJ%jx&CRwgEL>A%~9&-qVl@d^L` +zbF8iYzBA!}JtntE_*P{Gp#|=Ojie6OC8k8j{PimLiiAlDPvdw`rM+?YdC9I-%ZTWy +z*h=hT?6nL}PtU*F==pamjK8fC?TlsTC5x6^E{Y9J_#Y*Wy^Dn?RZHk&d>bfOi9$qX +zN~&B%SwXSzsHNh#F-&w>yo$x|Uh-eGFjX#_0TUq(1?H1niw>_cp{-o1`8jDTC9B9` +zev?v?GqoA<**bqG4{xUczX<`u`-F#vga-R+Gcr@sburr1=!}eMDd{m8+URth)^AF{ +zG+lH;VwRuRlmM+Rd1882YNjrxt)JI~06(wh+5*aA_6w=;9@fwgg0PwHh|R)~iOpzk +zPzcL}!zr!T4LcPM2Uz%M~q*<2=N2 +z{7+SaAi~(OR@5qkB8=bEigsnro}$DHf<-|QZcM5bT}}IkYu)>&W5eRwm)ZJ@`ApQJ +z{0=i7dn>wXLWXJGLo%ZijaTbM%d%aA#8sZ1Y#|H>w7H#Okb<3*jGg#@S{jC}2}?;d +z_WmeZnmA+0Va<0KH@p{J7!Si*!&1^Sr^HUtWf)Jj5zUPu+2X5SEwS9+LzvP$g#Wy` +zChR|*Dq%NBLsB#2Q<5_jD*Uqgzwa^P&hc<#?PA(%|O#mwHU&Sa$G`rj+11HXLu!$v35=R7c~i(1C~1^CoIm>!|n`U5Yj}F*<8P +v^u&ZR|8mVw#Q4Vzjf3%hAHhQLS1~K?)PIWU(tZCaZp7lQWgo9 + + +- +- ++ ++ + Artwork name + Name der Bildklasse + +@@ -310,183 +310,183 @@ p, li { white-space: pre-wrap; } + Ausgewählte Bildklassen entfernen + + +- +- ++ ++ + Select / deselect this artwork class for removal + Diese Bildklasse zum Entfernen selektieren / deselektieren + + +- +- ++ ++ + Enter a name for this artwork class (required) + Name dieser Bildklasse (erforderlich) + + +- +- ++ ++ + Choose... + Auswählen... + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + Auswahl einer Icon Datei zur Verwendung für diese Bildklasse (optional) + + +- +- ++ ++ + System + System + + +- +- ++ ++ + Software + Software + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + Auswahl des <i>Ziels</i> (System oder Software) für Bilder dieser Klasse + + +- +- ++ ++ + On + An + + +- +- ++ ++ + Off + Aus + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + Legt fest ob Bilder dieser Klasse skaliert werden oder nicht + + +- +- ++ ++ + Folder + Ordner + + +- +- +- +- ++ ++ ++ ++ + Archive + Archiv + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + Legt fest ob Bilder dieser Klasse aus einem Verzeichnis oder aus einem Archiv geladen werden + + +- +- ++ ++ + ZIP + ZIP + + +- +- ++ ++ + 7z + 7z + + +- +- ++ ++ + Select archive format + Archivformat auswählen + + +- +- ++ ++ + Supported archives + Unterstützte Archive + + +- +- ++ ++ + ZIP archives + ZIP Archive + + +- +- ++ ++ + 7z archives + 7z Archive + + +- +- ++ ++ + Image archive + Bild Archiv + + +- +- ++ ++ + Image archive for this artwork class (required) + Archivdatei für diese Bildklasse (erforderlich) + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + um mehrere Archive anzugeben, kann als Trennzeichen Semikolon (;) verwendet werden + + +- +- ++ ++ + Browse image archive + Bild Archiv auswählen + + +- +- +- ++ ++ ++ + All files (*) + Alle Dateien (*) + + +- +- ++ ++ + Image folder + Bild Verzeichnis + + +- +- ++ ++ + Image folder for this artwork class (required) + Verzeichnis für diese Bildklasse (erforderlich) + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + um mehrere Order anzugeben, kann als Trennzeichen Semikolon (;) verwendet werden + + +- +- ++ ++ + Browse image folder + Bild Verzeichnis auswählen + + +- ++ + Choose icon file + Icon Datei auswählen + + +- ++ + PNG files (*.png) + PNG Dateien (*.png) + +@@ -1218,7 +1218,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + Musterfarbe auswählen + +@@ -1341,17 +1341,17 @@ p, li { white-space: pre-wrap; } + &Ok + + +- ++ + Choose image file + Bild Datei auswählen + + +- ++ + Supported image files (%1) + Unterstützte Bild-Dateien (%1) + + +- ++ + All files (*) + Alle Dateien (*) + +@@ -3444,42 +3444,42 @@ p, li { white-space: pre-wrap; } + Schließen + + +- ++ + Name + Name + + +- ++ + Domain + Domäne + + +- ++ + Path + Pfad + + +- ++ + Value + Wert + + +- ++ + Expiry date + Ablaufdatum + + +- ++ + Secure? + Sicher? + + +- ++ + HTTP only? + Nur HTTP? + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + WARNUNG: Cookie konnte nicht von der Datenbank entfernt werden: Abfrage = '%1', Fehler = '%2' + +@@ -4375,7 +4375,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + %1. Variante von + +@@ -4459,7 +4459,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + &Archiv öffnen + +@@ -4503,7 +4503,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + Keine Geräte verfügbar + +@@ -4562,7 +4562,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + N/A + +@@ -4572,27 +4572,27 @@ p, li { white-space: pre-wrap; } + Standard Geräte-Verzeichnis für '%1' auswählen + + +- ++ + &Close archive + &Archiv schließen + + +- ++ + Choose a unique configuration name + Eindeutiger Name für Geräte-Konfiguration + + +- ++ + Unique configuration name: + Eindeutiger Name der Geräte-Konfiguration: + + +- ++ + Name conflict + Namenskonflikt + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5280,25 +5280,25 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + Größe + + +- +- ++ ++ + KB + KB + + +- +- ++ ++ + MB + MB + + +- +- ++ ++ + GB + GB + + +- ++ + TB + TB + +@@ -5444,42 +5444,42 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + FtpReply + +- ++ + FTP directory listing for %1 + FTP Verzeichnis-Liste für %1 + + +- ++ + Name + Name + + +- ++ + Type + Typ + + +- ++ + Size + Größe + + +- ++ + Parent directory + Übergeordnetes Verzeichnis + + +- ++ + File + Datei + + +- ++ + Folder + Ordner + + +- ++ + Unknown + Unbekannt + +@@ -5976,212 +5976,212 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + HtmlEditor + +- +- ++ ++ + HTML + HTML + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + Gängige Grafikformate (*.png *.jpg *.jpeg *.gif);; + + +- ++ + Portable Network Graphics (PNG) (*.png);; + Portable Network Graphics (PNG) (*.png);; + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + Graphics Interchange Format (GIF) (*.gif);; + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Alle Dateien (*) + + +- ++ + WYSIWYG + WYSIWYG + + +- ++ + &Load... + &Laden... + + +- ++ + Load notes from file + Notizen aus Datei laden + + ++ + +- + Load notes from an HTML file + Notizen aus einer HTML Datei laden + + ++ + + +- + Save current notes + Aktuelle Notizen sichern + + ++ + +- + Page load progress + Lade-Fortschritt + + +- ++ + Hide menu + Menü ausblenden + + +- ++ + Read only + Nur lesen + + +- ++ + Show HTML + HTML anzeigen + + +- +- ++ ++ + HTML files (*.html *.htm) + HTML-Dateien (*.html *.htm) + + +- ++ + Select file to load + Zu ladende Datei auswählen + + +- ++ + Select file to open + Zu öffnende Datei auswählen + + +- ++ + Save a copy + Kopie speichern + + +- ++ + Open image... + Bilddatei öffnen... + + +- ++ + Insert image from URL + Bild aus URL einfügen + + +- +- ++ ++ + Enter URL: + URL eingeben: + + +- ++ + Create link + Link erzeugen + + +- ++ + Font + Schriftart + + +- ++ + Select font: + Schriftart auswählen: + + +- ++ + XS + XS + + +- ++ + S + S + + +- +- ++ ++ + M + M + + +- ++ + L + L + + +- ++ + XL + XL + + +- ++ + XXL + XXL + + +- ++ + Font size + Schriftgröße + + +- ++ + Font size: + Schriftgröße: + + +- ++ + Zoom: %1% + Zoom: %1% + + +- ++ + Select color + Farbe auswählen + + +- ++ + Choose image file + Bild Datei auswählen + + +- +- +- ++ ++ ++ + No data available + Keine Daten verfügbar + + +- +- ++ ++ + Manual selection + Handbuch auswählen + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + Es existieren mehrere PDF Handbücher. Auswahl zu öffnender Dokumente: + +@@ -7097,55 +7097,55 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + Aktive Grafikformate + + +- ++ + Preview + Vorschau + + +- ++ + Flyer + Flyer + + +- ++ + Cabinet + Gehäuse + + +- ++ + Controller + Controller + + +- ++ + Marquee + Marquee + + +- ++ + Title + Titel + + +- ++ + PCB + PCB + + +- ++ + Software snap + Software Snap + + +- +- ++ ++ + deactivated + deaktiviert + + +- ++ ++ + +- + activated + aktiviert + +@@ -7573,42 +7573,42 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + JoystickCalibrationWidget + +- ++ + Axis %1: + Achse %1: + + +- ++ + Current value of axis %1 + Aktueller Wert der Achse %1 + + +- ++ + DZ: + TZ: + + +- ++ + Deadzone of axis %1 + Todeszone der Achse %1 + + +- ++ + S: + S: + + +- ++ + Sensitivity of axis %1 + Empfindlichkeit der Achse %1 + + +- ++ + Reset calibration of axis %1 + Kalibrierung der Achse %1 zurücksetzen + + +- ++ + Enable/disable axis %1 + Achse %1 ein-/ausschalten + +@@ -7662,67 +7662,67 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + JoystickTestWidget + +- ++ + A%1: %v + A%1: %v + + +- ++ + Current value of axis %1 + Aktueller Wert der Achse %1 + + +- ++ + B%1 + K%1 + + +- ++ + Current state of button %1 + Aktueller Status von Knopf %1 + + +- ++ + H%1: 0 + H%1: 0 + + +- ++ + Current value of hat %1 + Aktueller Wert von Coolie-Hat %1 + + +- ++ + T%1 DX: 0 + T%1 DX: 0 + + +- ++ + Current X-delta of trackball %1 + Aktuelles X-Delta von Trackball %1 + + +- ++ + T%1 DY: 0 + T%1 DY: 0 + + +- ++ + Current Y-delta of trackball %1 + Aktuelles Y-Delta von Trackball %1 + + +- ++ + H%1: %2 + H%1: %2 + + +- ++ + T%1 DX: %2 + T%1 DX: %2 + + +- ++ + T%1 DY: %2 + T%1 DY: %2 + +@@ -7782,528 +7782,528 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + MachineList + +- ++ + Waiting for data... + Warte auf Daten... + + +- ++ + determining emulator version and supported sets + Ermittle Emulator Version und unterstützte Sets + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: kann ausführbare MAME Datei nicht in einem angemessenen Zeitraum starten, gebe auf + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + Fertig (Ermittle Emulator Version und unterstützte Sets, benötigte Zeit = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL: konnte die Anzahl unterstützter Sets nicht ermitteln + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + WARNUNG: XML Daten Cache ist unvollständig, invalidiere XML Daten Cache + + +- ++ + verifying ROM status for all sets + Prüfe ROM Status aller Sets + + +- ++ + Name + Name + + +- ++ + Source file + Quelldatei + + +- ++ + Clone of + Klon von + + +- ++ + ROM of + ROM von + + +- ++ + Year + Jahr + + +- ++ + Manufacturer + Hersteller + + +- +- ++ ++ + ROM + ROM + + +- ++ + Size + Größe + + +- ++ + CRC + CRC + + +- +- ++ ++ + Region + Region + + +- ++ + Offset + Offset + + +- ++ + Chip + Chip + + +- +- ++ ++ + Type + Typ + + +- ++ + Clock + Taktung + + +- ++ + Width + Breite + + +- ++ + Height + Höhe + + +- ++ + Refresh + Aktualisierung + + +- +- ++ ++ + Sound + Sound + + +- ++ + Channels + Kanäle + + +- ++ + Input + Eingabe + + +- ++ + Players + Spieler + + +- +- ++ ++ + Buttons + Feuerknöpfe + + +- ++ + Coins + Münzen + + +- ++ + Service + Service + + +- ++ + Driver + Treiber + + +- +- +- +- ++ ++ ++ ++ + Status + Status + + +- ++ + Emulation + Emulation + + +- ++ + Color + Farbe + + +- ++ + Graphic + Grafik + + +- ++ + Save state + Zustand speichern + + +- ++ + Palette size + Größe der Farbpalette + + +- +- +- ++ ++ ++ + good + gut + + +- +- ++ ++ + bad + schlecht + + +- +- ++ ++ + unsupported + nicht unterstützt + + +- +- ++ ++ + supported + unterstützt + + +- +- +- ++ ++ ++ + imperfect + unvollständig + + +- +- +- ++ ++ ++ + preliminary + vorläufig + + +- ++ + L: + L: + + +- ++ + C: + K: + + +- ++ + I: + I: + + +- ++ + N: + N: + + +- ++ + U: + U: + + +- ++ + S: + S: + + +- ++ + DIP switch + DIP Schalter + + +- ++ + DIP value + DIP Wert + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Standard + + +- ++ + yes + ja + + +- ++ + no + nein + + +- ++ + baddump + schlechter Dump + + +- ++ + nodump + kein Dump + + +- ++ + BIOS + BIOS + + +- +- ++ ++ + Merge + Merge + + +- ++ + Tilt + Tilt + + +- ++ + Cocktail + Cocktail + + +- ++ + Protection + Schutz + + +- ++ + BIOS set + BIOS Set + + +- ++ + Description + Beschreibung + + +- ++ + Sample + Sample + + +- ++ + Disk + Festplatte + + +- ++ + MD5 + MD5 + + +- ++ + Index + Index + + +- ++ + Sample of + Sample von + + +- ++ + loading ROM state from cache + Lade ROM Status aus dem Cache + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + WARNUNG: kann ROM-Status Cache nicht öffnen, bitte ROMs verifizieren + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + WARNUNG: ROM-Status Cache ist nicht vollständig oder nicht aktuell, bitte ROMs neu verifizieren + + +- ++ + Filtering, please wait... + Filtere, bitte warten... + + +- ++ + saving favorites + Speichere Favoriten + + +- ++ + saving play history + Speichere Spiel-Historie + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: kann Spiel-Favoriten Datei nicht zum Schreiben öffnen, Pfad = %1 + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: kann Spiel-Historien Datei nicht zum Schreiben öffnen, Pfad = %1 + + +- ++ + vertical + vertikal + + +- ++ + horizontal + horizontal + + +- ++ + raster + Raster + + +- ++ + Unknown + Unbekannt + + +- ++ + On + An + + +- ++ + Off + Aus + + +- ++ + audio + Audio + + +- ++ + Unused + Unbenutzt + + +- ++ + processing machine list + Verarbeite Maschinenliste + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + WARNUNG: konnte Emulator Version des Maschinenlisten Caches nicht ermitteln + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + INFORMATION: der Maschinenlisten Cache wird nun wegen eines neues Formats aktualisiert + + +- ++ + loading machine data from machine list cache + Lade Maschinendaten aus dem Maschinenlisten Cache + + +- +- ++ ++ + Machine data - %p% + Maschinendaten - %p% + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + Fertig (Lade Maschinendaten aus dem Maschinenlisten Cache, benötigte Zeit = %1) + + +- ++ + parsing machine data and recreating machine list cache + Lese Maschinendaten und erzeuge Maschinenlisten Cache neu + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + FEHLER: Kann Maschinenlisten Cache nicht zum Schreiben öffnen, Pfad = %1 + + +- +- ++ ++ + ascending + aufsteigend + + +- +- ++ ++ + descending + absteigend + + +- +- ++ ++ + sorting machine list by %1 in %2 order + Sortiere Maschinenliste nach %1 in %2er Reihenfolge + + +- +- ++ ++ + restoring machine selection + Restauriere Maschinen-Selektion + + +- ++ + done (processing machine list, elapsed time = %1) + Fertig (Verarbeite Maschinenliste, benötigte Zeit = %1) + + +- ++ + %n machine(s) + + %n Maschine +@@ -8311,134 +8311,134 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + WARNUNG: Maschinenliste nicht vollständig gelesen, invalidiere Maschinenlisten Cache + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + WARNUNG: Maschinenlisten Cache ist nicht aktuell, invalidiere Maschinenlisten Cache + + +- ++ + M: + B: + + +- ++ + ROM state filter already active + ROM Status Filter bereits aktiv + + +- ++ + applying ROM state filter + Filtere ROM Status + + +- ++ + done (applying ROM state filter, elapsed time = %1) + Fertig (Filtere ROM Status, benötigte Zeit = %1) + + +- ++ + please wait for ROM verification to finish and try again + Bitte warte bis die ROM Verifikation abgeschlossen wurde und versuche es dann erneut + + +- ++ + please wait for reload to finish and try again + Bitte warte bis die Spieleliste aktualisiert wurde und versuche es dann erneut + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + Fertig (Lade ROM Status aus dem Cache, benötigte Zeit = %1) + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: kann Icon-Archiv nicht öffnen, bitte Zugriffsrechte für %1 überprüfen + + +- ++ + pre-caching icons from ZIP archive + Lade Icons aus ZIP Archiv + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + Fertig (Lade Icons aus ZIP Archiv, benötigte Zeit = %1) + + +- ++ + pre-caching icons from directory + Lade Icons aus Verzeichnis + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + Fertig (Lade Icons aus Verzeichnis, benötigte Zeit = %1) + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + FEHLER: Kann ROM-Status Cache nicht zum Schreiben öffnen, Pfad = %1 + + +- ++ + verifying ROM status for '%1' + Prüfe ROM Status für '%1' + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + Fertig (Prüfe ROM Status für '%1'; benötigte Zeit = %2) + + +- +- ++ ++ + ROM status for '%1' is '%2' + ROM Status für '%1' ist '%2' + + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + unbekannt + + +- ++ + State filter - %p% + Status Filter - %p% + + +- +- +- ++ ++ ++ + ROM check - %p% + ROM Prüfung - %p% + + +- ++ + XML data - %p% + XML Daten - %p% + + +- +- ++ ++ + ROM state + ROM-Status + + +- ++ + %n cached ROM state(s) loaded + + %n ROM Status aus dem Cache geladen +@@ -8446,7 +8446,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + %n icon(s) loaded + + %n Icon geladen +@@ -8454,253 +8454,253 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + Icon cache - %p% + Icon Cache - %p% + + +- ++ + unused + unbenutzt + + +- ++ + cpu + CPU + + +- ++ + vector + Vektor + + +- ++ + lcd + LCD + + +- ++ + Is BIOS? + Ist BIOS? + + +- ++ + Runnable + Ausführbar + + +- ++ + Display + Anzeige + + +- ++ + Rotate + Rotieren + + +- ++ + Flip-X + Flip-X + + +- ++ + Pixel clock + Pixel Clock + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- +- ++ ++ ++ + Tag + Markierung + + +- ++ + Control + Steuerung + + +- ++ + Minimum + Minimum + + +- ++ + Maximum + Maximum + + +- ++ + Sensitivity + Empfindlichkeit + + +- ++ + Key Delta + Tasten Delta + + +- ++ + Reverse + Umkehrung + + +- ++ + joy4way + 4-Wege-Joystick + + +- ++ + joy8way + 8-Wege-Joystick + + +- ++ + trackball + Trackball + + +- ++ + joy2way + 2-Wege-Joystick + + +- ++ + doublejoy8way + Doppelter 8-Wege-Joystick + + +- ++ + dial + Lenkrad + + +- ++ + paddle + Paddel + + +- ++ + pedal + Pedal + + +- ++ + stick + Joystick + + +- ++ + vjoy2way + Vertikaler 2-Wege-Joystick + + +- ++ + lightgun + Lichtpistole + + +- ++ + doublejoy4way + Doppelter 4-Wege-Joystick + + +- ++ + vdoublejoy2way + Doppelter vertikaler 2-Wege-Joystick + + +- ++ + doublejoy2way + Doppelter 2-Wege-Joystick + + +- ++ + printer + Drucker + + +- ++ + cdrom + CD-ROM + + +- ++ + cartridge + Steckmodul + + +- ++ + cassette + Kassette + + +- ++ + quickload + Schnelllader + + +- ++ + floppydisk + Floppy Disk + + +- ++ + serial + Serieller Port + + +- ++ + snapshot + Schnappschuss + + +- +- +- +- ++ ++ ++ ++ + N/A + N/A + + +- ++ + libarchive error + Libarchive Fehler + + +- +- ++ ++ + %n supported set(s) + + %n unterstütztes Set +@@ -8708,267 +8708,267 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + WARNUNG: die Ausgabe von -listfull hat sich geändert, erzwinge Aktualisierung aller Emulators-Caches + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + Lade, bitte warten... + + +- +- ++ ++ + loading favorites and play history + Lade Favoriten und Spiel-Historie + + +- +- ++ ++ + done (loading favorites and play history) + Fertig (Lade Favoriten und Spiel-Historie) + + +- +- ++ ++ + total start-up time: %1 + Gesamt benötigte Start-Zeit: %1 + + +- ++ + WARNING: couldn't find machine information for '%1' + WARNUNG: konnte keine Maschinen-Informationen für '%1' finden + + +- +- ++ ++ + SHA-1 + SHA-1 + + +- ++ + Player + Spieler + + +- ++ + Ways + Wege + + +- ++ + Device + Gerät + + +- ++ + Instance + Instanz + + +- ++ + Brief name + Kurzname + + +- ++ + Extension + Erweiterung + + +- ++ + Mandatory + Erforderlich + + +- ++ + original + original + + +- ++ + compatible + kompatibel + + +- +- ++ ++ + error text = %1 + Fehler Text = %1 + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + FATAL: kann %1 nicht ausführen, Datei '%2' existiert nicht + + +- +- ++ ++ + emulator info: type = %1, version = %2 + Emulator Info: Typ = %1, Version = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: konnte Emulator-Typ und ~-Version nicht ermitteln + + +- ++ + Updating + Aktualisierung + + +- ++ + Is device? + Ist Gerät? + + +- +- ++ ++ + Optional + Optional + + +- ++ + Device reference + Geräte-Referenz + + +- ++ + Configuration + Konfiguration + + +- ++ + Mask + Maske + + +- ++ + Setting + Einstellung + + +- ++ + Value + Wert + + +- ++ + Adjuster + Einsteller + + +- ++ + Software list + Software Liste + + +- ++ + Category + Kategorie + + +- ++ + Item + Gegenstand + + +- ++ + Interface + Schnittstelle + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + WARNUNG: XML Bug: der Name '%1' wird für mehrere Sets verwendet -- bitte MAME Entwickler informieren + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + Fertig (Prüfe ROM Status aller Sets, benötigte Zeit = %1) + + +- ++ + correct + korrekt + + +- ++ + mostly correct + beinahe korrekt + + +- ++ + incorrect + inkorrekt + + +- ++ + not found + nicht gefunden + + +- ++ + ? + ? + + +- +- ++ ++ + FATAL: can't open icon file %1 + FATAL: kann Icon Datei %1 nicht öffnen + + +- ++ + 7z error + 7z Fehler + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + WARNUNG: die verwendete ausführbare Datei kann nicht als MAME identifiziert werden + + +- ++ + loading XML data and recreating cache + Lade XML Daten und erzeuge Cache neu + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + WARNUNG: Maschinenlisten Cache ist ungültig, erzwinge eine Aktualisierung + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + WARNUNG: Maschinenlisten Datenbank ist ungültig, erzwinge eine Aktualisierung + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + WARNUNG: Attribut 'name' ist leer auf XML Zeile %1 (Set wird ignoriert!) -- bitte MAME Entwickler informieren und die fehlerhaften Ausgaben von -listxml anfügen + + +- ++ + and %n device(s) loaded + + und %n Gerät geladen +@@ -8976,7 +8976,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + , %n BIOS set(s) + + , %n BIOS Set +@@ -8984,88 +8984,88 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + ROM Status Info: L:%1 K:%2 B:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + WARNUNG: ROM-Status Cache ist nicht vollständig oder nicht aktuell, automatsche ROM Prüfung aktiviert + + +- ++ + machine description + Maschinen-Beschreibung + + +- ++ + tag + Markierung + + +- ++ + year + Jahr + + +- ++ + manufacturer + Hersteller + + +- ++ + machine name + Maschinenname + + +- ++ + ROM types + ROM Typen + + +- ++ + players + Spieler + + +- ++ + driver status + Treiberstatus + + +- ++ + source file + Quelldatei + + +- ++ + rank + Rang + + +- ++ + category + Kategorie + + +- ++ + version + Version + + +- ++ + T: + M: + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + Fertig (Lade XML Daten und erzeuge Cache neu, benötigte Zeit = %1) + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + Prüfe echten Status eines Sets, welches während der Analyse nicht erwähnt wurde +@@ -9073,7 +9073,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + Fertig (Prüfe echten Status eines Sets, welches während der Analyse nicht erwähnt wurde) +@@ -9081,99 +9081,99 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + pre-caching icons from 7z archive + Lade Icons aus 7z Archiv + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + Fertig (Lade Icons aus 7z Archiv, benötigte Zeit = %1) + + +- ++ + pre-caching icons from archive + Lade Icons aus Archiv + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + Fertig (Lade Icons aus Archiv, benötigte Zeit = %1) + + +- ++ + loading icons from cache database + Lade Icons aus der Cache Datenbank + + +- ++ + done (loading icons from cache database, elapsed time = %1) + Fertig (Lade Icons aus der Cache Datenbank, benötigte Zeit = %1) + + +- ++ + loading category.ini + Lade category.ini + + +- ++ + Category.ini - %p% + Category.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + FEHLER: kann '%1' nicht zum Lesen öffnen -- keine category.ini Daten verfügbar + + +- ++ + done (loading category.ini, elapsed time = %1) + Fertig (Lade category.ini, benötigte Zeit = %1) + + +- +- ++ ++ + System / BIOS + System / BIOS + + +- +- ++ ++ + System / Device + System / Gerät + + +- ++ + loading catver.ini + Lade catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + FEHLER: kann '%1' nicht zum Lesen öffnen -- keine catver.ini Daten verfügbar + + +- ++ + done (loading catver.ini, elapsed time = %1) + Fertig (Lade catver.ini, benötigte Zeit = %1) + + +- ++ + %1 category / %2 version records loaded + %1 Kategorie- / %2 Versions-Datensätze geladen + + +- ++ + Category view - %p% + Kategorieansicht - %p% + + +- ++ + %n category record(s) loaded + + %n Kategorie-Datensatz geladen +@@ -9181,35 +9181,35 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + Version view - %p% + Versionsansicht - %p% + + +- ++ + RAM options + RAM Optionen + + +- ++ + Option + Option + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + WARNUNG: Emulator-Aufruf zur Auditierung wurde nicht ordentlich beendet -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + abgestürzt + +@@ -9378,18 +9378,18 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + Version + + +- +- +- +- ++ ++ ++ ++ + true + wahr + + +- +- +- +- ++ ++ ++ ++ + false + falsch + +@@ -9532,8 +9532,8 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + MainWindow + + ++ + +- + M.A.M.E. Catalog / Launcher II + M.A.M.E. Catalog / Launcher II + +@@ -9582,7 +9582,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + &Notes + No&tizen + +@@ -9599,7 +9599,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + About Qt + Über Qt + +@@ -9678,7 +9678,7 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- ++ + cleaning up + Räume auf + +@@ -9692,11 +9692,11 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + S&pielen + +@@ -9722,28 +9722,28 @@ Lokale Einstellung für Option '%1' verwenden, mit globaler Einstellun + Programm beenden / Aktive Verarbeitung stoppen + + +- ++ + so long and thanks for all the fish + Macht's gut, und danke für den Fisch + + +- ++ + saving main widget layout + Speichere Hauptfenster-Layout + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Bestätigen + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Ihre Konfigurationsänderungen wurden noch nicht übernommen. +@@ -9762,28 +9762,28 @@ Wirklich beenden? + + + +- ++ + image cache cleared + Bild-Zugriffsspeicher geleert + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + Bitte warte bis die Spieleliste aktualisiert wurde und versuche es dann erneut + + +- ++ + &Kill + &Töten + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Ausgewählte(n) Emulator(en) töten (sendet KILL Signal an betreffende(n) Emulator(en)) + +@@ -9803,19 +9803,19 @@ Wirklich beenden? + + + ++ + +- + ROM verification already active + ROM-Überprüfung wird bereits durchgeführt + + +- +- ++ ++ + please wait for ROM verification to finish and try again + Bitte warte bis die ROM Verifikation abgeschlossen wurde und versuche es dann erneut + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9827,63 +9827,63 @@ Willst Du wirklich jetzt den ROM-Status aller Spiele überprüfen? + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Zu &Favoriten + + +- ++ + Remove from favorites + Von Favoriten entfernen + + +- +- ++ ++ + &Remove + Entfe&rnen + + +- ++ + Clear all favorites + Alle Favoriten entfernen + + +- +- ++ ++ + &Clear + L&eeren + + +- ++ + Remove from played + Von Gespielten entfernen + + +- ++ + Clear all played + Alle Gespielten entfernen + + +- ++ + Save favorites now + Favoriten jetzt speichern + + +- +- ++ ++ + &Save + &Speichern + + +- ++ + Save play-history now + Spiel-Historie jetzt speichern + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Einer oder mehrere Emulatoren laufen noch. +@@ -9895,19 +9895,19 @@ Sollen diese beim Beenden geschlossen werden? + Fl&yer + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Standard + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + Bitte warte bis nach ROM Status gefiltert wurde und versuche es dann erneut + +@@ -9932,20 +9932,20 @@ Sollen diese beim Beenden geschlossen werden? + &ROMs prüfen... + + +- ++ ++ + +- + please wait for image check to finish and try again + Bitte warte bis die Bild-Überprüfung abgeschlossen wurde und versuche es dann erneut + + +- ++ + icon cache cleared + Icon-Zugriffsspeicher geleert + + + +- ++ + Icon / Value + Icon / Wert + +@@ -9953,9 +9953,9 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- ++ ++ ++ + Icon + Icon + +@@ -9970,10 +9970,10 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- +- ++ ++ ++ ++ + Year + Jahr + +@@ -9982,10 +9982,10 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Hersteller + +@@ -9995,8 +9995,8 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- ++ ++ + stopping current processing upon user request + Beende aktuelle Verarbeitung auf Wunsch des Benutzers + +@@ -10011,10 +10011,10 @@ Sollen diese beim Beenden geschlossen werden? + Toolbar + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + &ROM-Status prüfen + +@@ -10029,15 +10029,15 @@ Sollen diese beim Beenden geschlossen werden? + + + +- ++ + destroying process manager + Zerstöre Prozess-Manager + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + ROM &analysieren... + +@@ -10057,54 +10057,54 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- ++ ++ + Choose export file + Export-Datei auswählen + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Alle Dateien (*) + + +- +- ++ ++ + Export to... + Exportieren nach... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Datei auswählen... + + +- +- ++ ++ + Choose import file + Import-Datei auswählen + + +- ++ + automatic ROM check triggered + Automatische ROM Überprüfung wird gestartet + + +- ++ + ERROR: no match found (?) + FEHLER: kein passender Eintrag gefunden (?) + +@@ -10131,13 +10131,13 @@ Sollen diese beim Beenden geschlossen werden? + Frontend Einstellungen und globale Emulator-Konfiguration + + +- +- ++ ++ + WARNING: invalid inipath + WARNUNG: ungültiger ini-Pfad + + +- ++ + killing %n running emulator(s) on exit + + Töte %n Emulator beim Beenden +@@ -10145,7 +10145,7 @@ Sollen diese beim Beenden geschlossen werden? + + + +- ++ + keeping %n running emulator(s) alive + + Lasse %n laufenden Emulator am Leben +@@ -10153,13 +10153,13 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + Bitte warte bis der ROMAlyzer die aktuelle Analyse abgeschlossen hat und versuche es dann erneut + +@@ -10173,227 +10173,227 @@ Sollen diese beim Beenden geschlossen werden? + + + +- +- +- +- ++ ++ ++ ++ + Name + Name + + +- ++ + Are you sure you want to clear the favorites list? + Bist Du sicher, dass Du alle Einträge der Spiel-Historie löschen möchtest? + + +- ++ + Are you sure you want to clear the play history? + Bist Du sicher, dass Du alle Favoriten löschen möchtest? + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Keine Daten verfügbar + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Automatisches Pausieren eingebetteter Emulatoren ein-/ausschalten (oder gedrückt halten um Menü anzuzeigen) + + +- ++ + Scan the pause key used by the emulator + Taste zum Pausieren des Emulators scannen + + +- ++ + Scan pause key... + Pause-Taste scannen... + + +- +- ++ ++ + Enter search string + Such-Zeichenkette eingeben + + +- ++ + Dock / undock this widget + Zwischen 'unabhängigem Fenster' und 'eingebettetem Objekt' hin und herschalten + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + beachten: die Sonderzeichen $, (, ), *, +, ., ?, [, ], ^, {, |, } und \ müssen durch \ eingeleitet werden, wenn sie buchstäblich gemeint sind! + + +- +- +- +- ++ ++ ++ ++ + Reset + Zurücksetzen + + +- ++ + Negate search + Suche negieren + + +- ++ + sorry, devices cannot run standalone + Sorry, Geräte können nicht allein stehend ausgeführt werden + + +- ++ + No devices available + Keine Geräte verfügbar + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + Standard + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + Zeige Maschinen- oder Softwaretitel nur an, wenn die Maschinenliste aufgrund des aktuellen Layouts nicht sichtbar ist + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + ROM neu &erzeugen... + + +- ++ + Include BIOS sets + BIOS-Sets einschließen + + +- ++ + Include device sets + Geräte-Sets einschließen + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + Ränge entsperren + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + N/A + + +- ++ + ERROR: can't load HTML file '%1' + FEHLER: kann HTML Datei '%1' nicht laden + + +- ++ + ERROR: can't load PDF viewer from '%1' + FEHLER: kann PDF Viewer nicht von '%1' laden + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + Bitte warte bis der ROMAlyzer die aktuelle Neu-Erzeugung abgeschlossen hat und versuche es dann erneut + + +- ++ + YouTube on-disk cache cleared (%1) + YouTube Festplatten-Cache geleert (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + WARNUNG: kann ROM-Status Cache Datei '%1' nicht entfernen, bitte Zugriffsrechte prüfen + + +- ++ + triggering an automatic ROM check on next reload + Automatische ROM Überprüfung wird nach dem nächsten Laden ausgeführt + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + INFORMATION: Der Arcade-Modus muss zuerst eingerichtet werden, starte stattdessen den entsprechenden Dialog + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + Arcade-Modus: Starte QMC2 Arcade, Kommando = '%1' + + +- ++ + WARNING: failed launching QMC2 Arcade + WARNUNG: Fehler beim Starten von QMC2 Arcade + + +- ++ + ProjectMESS page for '%1' / '%2' + ProjectMESS Seite für '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Lade ProjectMESS Seite für '%1' / '%2, bitte warten... + + +- ++ + please wait for sorting to finish and try again + Bitte warte bis die Sortierung abgeschlossen wurde und versuche es dann erneut + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + Embedder Optionen ein-/ausschalten (oder gedrückt halten um Menü anzuzeigen) + + +- ++ + To favorites + Zu Favoriten + + +- ++ + Kill emulator + Emulator töten + + +- ++ + &Kill emulator + Emulatoren &töten + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -10405,187 +10405,187 @@ Zeitspanne nicht finden. + Einbettung wiederholen? + + +- ++ + Information + Information + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Sorry, der Emulator ist in der Zwischenzeit von uns gegangen :(. + + +- ++ + There are one or more running downloads. Quit anyway? + Ein oder mehrere Downloads sind noch aktiv. Trotzdem beenden? + + +- ++ + aborting running downloads + Breche aktive Downloads ab + + +- ++ + destroying media player + Zerstöre Media Player + + +- ++ + Welcome to QMC2 v%1! + Willkommen bei QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Lade, bitte warten... + + +- ++ + WARNING: can't open style sheet '%1' + WARNUNG: kann Style-Sheet '%1' nicht öffnen + + +- ++ + using default color palette for GUI style '%1' + Verwende Standard-Farbpalette für GUI Style '%1' + + +- ++ + using custom color palette + Verwende angepasste Farbpalette + + +- ++ + loading YouTube video info cache + Lade YouTube Video Info Cache + + +- ++ + done (loading YouTube video info cache) + Fertig (Lade YouTube Video Info Cache) + + +- +- ++ ++ + running + rennt + + +- +- ++ ++ + Play tagged - %p% + Markierte spielen - %p% + + +- ++ + Add favorites - %p% + Favoriten hinzufügen - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + Bitte warten bis die aktuelle Verarbeitung beendet ist (diese Batch-Mode Operation kann nur exklusiv ausgeführt werden) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + Es ist wahrscheinlich sehr viel schneller eine vollständige ROM Prüfung durchzuführen als %1 Sets individuell zu prüfen. Willst Du wirklich fortfahren? + + +- ++ + ROM tool tagged - %p% + ROM Tool (markierte) - %p% + + +- +- ++ ++ + Tag - %p% + Markierungen setzen - %p% + + +- +- ++ ++ + Tagging, please wait... + Setze Markierungen, bitte warten... + + +- +- ++ ++ + Untag - %p% + Markierungen aufheben - %p% + + +- +- ++ ++ + Untagging, please wait... + Entferne Markierungen, bitte warten... + + +- +- ++ ++ + Invert tag - %p% + Markierungen umkehren - %p% + + +- +- ++ ++ + Inverting tags, please wait... + Invertiere Markierungen, bitten warten... + + +- ++ + External browser + Externer Browser + + +- ++ + External PDF viewer + Externer PDF Viewer + + +- ++ + Manual selection + Handbuch auswählen + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + Es existieren mehrere PDF Handbücher. Auswahl zu öffnender Dokumente: + + +- +- ++ ++ + Software detail + Software-Details + + +- ++ + Choose overlay color + Overlay-Farbe auswählen + + +- ++ + WARNING: ROM path '%1' doesn't exist + WARNUNG: ROM Pfad '%1' existiert nicht + + +- ++ + WARNING: ROM path '%1' isn't accessible + WARNUNG: ROM Pfad '%1' kann nicht verwendet werden + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! +@@ -10594,7 +10594,7 @@ Please check the 'rompath' option in the global emulator configuration + Bitte die 'rompath' Option in den globalen Emulator Einstellungen überprüfen, um dies zu korrigieren. Andernfalls werden die ROMs vermutlich nicht für den Emulator verfügbar sein! + + +- ++ + The ROM paths + + %1 +@@ -10611,46 +10611,46 @@ existieren nicht oder können nicht verwendet werden. + Bitte die 'rompath' Option in den globalen Emulator Einstellungen überprüfen, um dies zu korrigieren. Andernfalls werden die ROMs vermutlich nicht für den Emulator verfügbar sein! + + +- ++ + Check ROM path + ROM Pfad prüfen + + +- ++ + processing global emulator configuration + Verarbeite globale Emulator-Konfiguration + + +- +- ++ ++ + Export global MAME configuration + Globale MAME Konfiguration exportieren + + +- ++ + Import from... + Importieren von... + + +- +- ++ ++ + Import global MAME configuration + Globale MAME Konfiguration importieren + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + Verarbeitung von MAME Ausgabe Mitteilungen aktivieren (forciert '-output console') + + +- +- ++ ++ + <inipath>/mame.ini + <inipath>/mame.ini + + +- ++ + destroying audio effects dialog + Zerstöre Audio Effekt Dialog + +@@ -10661,82 +10661,82 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + ProjectMESS Cache leeren + + +- ++ + Default configuration + Standard Konfiguration + + +- ++ + ProjectMESS in-memory cache cleared (%1) + Speicher-residenter ProjectMESS Cache geleert (%1) + + +- ++ + ROM state cache file '%1' removed + ROM-Status Cache Datei '%1' entfernt + + +- ++ + ProjectMESS page for system '%1' + ProjectMESS Seite für '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Lade ProjectMESS Seite für System '%1', bitte warten... + + +- ++ + destroying YouTube video widget + Zerstöre YouTube Video WIdget + + +- ++ + destroying emulator configuration instances + Zerstöre Emulator Konfigurationsinstanzen + + +- ++ + destroying image widgets + Zerstöre Bild Objekte + + +- ++ + destroying open dialogs + Zerstöre offene Dialogfenster + + +- ++ + destroying network access manager + Zerstöre Netzwerk-Access-Manager + + +- ++ + setting GUI style to '%1' + Setze GUI Style auf '%1' + + +- ++ + WARNING: GUI style '%1' not found + WARNUNG: GUI Style '%1' nicht gefunden + + +- ++ + loading style sheet '%1' + Lade Style Sheet '%1' + + +- ++ + removing current style sheet + Entferne aktuelles Style Sheet + + +- ++ + YouTube index - %p% + YouTube Index - %p% + + +- ++ + %n video info record(s) loaded + + %n Video-Info Datensatz geladen +@@ -10769,10 +10769,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Tag + Markierung + +@@ -10781,10 +10781,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + ROM types + ROM Typen + +@@ -10793,10 +10793,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Players + Spieler + +@@ -10805,10 +10805,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Treiberstatus + +@@ -10817,9 +10817,9 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- ++ ++ ++ + Category + Kategorie + +@@ -10828,9 +10828,9 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- ++ ++ ++ + Version + Version + +@@ -11040,10 +11040,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Source file + Quelldatei + +@@ -11053,10 +11053,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Rank + Rang + +@@ -11098,13 +11098,13 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Machine / Attribute + Maschine / Attribut + + + +- ++ + Machine / Clones + Maschine / Klone + +@@ -11115,7 +11115,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Category / Machine + Kategorie / Maschine + +@@ -11126,19 +11126,19 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Version / Machine + Version / Maschine + + + +- ++ + Search for machines (not case-sensitive) + Nach Maschinen suchen (Groß-/Kleinschreibung wird nicht beachtet) + + + +- ++ + Search for machines + Nach Maschinen suchen + +@@ -11255,9 +11255,9 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- ++ ++ ++ + Add current machine to favorites + Aktuelle Maschine zu Favoriten hinzufügen + +@@ -11270,10 +11270,10 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + ROM-Status der aktuellen Maschine überprüfen + +@@ -11671,7 +11671,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Internal browser + Interner Browser + +@@ -11876,12 +11876,12 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + Ränge sperren + +@@ -11975,7 +11975,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Internal PDF viewer + Interner PDF Viewer + +@@ -12142,9 +12142,9 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms gesamt) + +@@ -12212,168 +12212,168 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Kommando + + +- +- +- ++ ++ ++ + paused + pausiert + + +- ++ + Searching machines - %p% + Suche Maschinen - %p% + + +- ++ + Show machine/software titles + Maschinen- / Software-Titel anzeigen + + +- ++ + Show machine- or software-titles at the bottom of all images + Maschinen- oder Software-Titel am unteren Rand jedes Bilds anzeigen + + +- +- ++ ++ + Copy emulator command line to clipboard + Emulator Kommandozeile in Zwischenablage kopieren + + +- +- ++ ++ + &Copy command + &Kommando kopieren + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + Ausgewählte Maschine spielen + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Ausgewählte Maschine spielen (eingebettet) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + ROM-Set der aktuellen Maschine mit dem ROMAlyzer analysieren + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + ROM-Set der aktuellen Maschine mit dem ROMAlyzer neu erzeugen + + +- +- +- +- ++ ++ ++ ++ + Tab position + Tab Position + + +- +- +- +- ++ ++ ++ ++ + Component setup + Komponenten Einstellung + + +- +- +- +- ++ ++ ++ ++ + Component setup... + Komponenten Einstellung... + + +- ++ + machine list reload is already active + Maschinenliste wird bereits neu geladen + + +- +- ++ ++ + saving machine selection + Speichere Maschinen-Selektion + + +- ++ + machine list cache file '%1' removed + Maschinenlisten-Cache Datei '%1' entfernt + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + WARNUNG: kann Maschinenlisten Cache Datei '%1' nicht entfernen, bitte Zugriffsrechte prüfen + + +- ++ + Emulator for this machine + Emulator für diese Maschine + + +- ++ + emulator #%1 is already embedded + Emulator #%1 ist bereits eingebettet + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + WARNUNG: mehrere Fenster für Emulator #%1 gefunden, wähle Fenster ID %2 für Einbettung + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + Emulator #%1 wird eingebettet, Fenster ID = %2 + + +- ++ + saving YouTube video info cache + Speichere YouTube Video Info Cache + + +- ++ + done (saving YouTube video info cache) + Fertig (Speichere YouTube Video Info Cache) + + +- +- ++ ++ + failed (saving YouTube video info cache) + Fehlgeschlagen (Speichere YouTube Video Info Cache) + + +- ++ + saving current machine's favorite software + Speichere favorisierte Software der aktuellen Maschine + + +- ++ + saving current machine's device configurations + Speichere Geräte-Konfigurationen der aktuellen Maschine + + +- ++ + destroying machine list + Zerstöre Maschinenliste + +@@ -12455,7 +12455,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Schneller Vorlauf innerhalb des Stücks + + +- ++ + Select one or more audio files + Eine oder mehrere Audio Dateien auswählen + +@@ -12484,7 +12484,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Auotmatisch ein- und ausblenden beim Pausieren / Fortsetzen + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + Audio Player: Track Info: Titel = '%1', Künstler = '%2', Album = '%3', Genre = '%4' + +@@ -12588,67 +12588,67 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Toggle full screen / windowed mode + Vollbild- / Fenster-Modus umschalten + ++ ++ ++ ++ ++ ++ Set tab position north ++ Tabulator Position 'Norden' setzen ++ ++ ++ ++ ++ ++ ++ &North ++ &Norden ++ + + + + + +- Set tab position north +- Tabulator Position 'Norden' setzen ++ Set tab position south ++ Tabulator Position 'Süden' setzen + + + + + + +- &North +- &Norden ++ &South ++ &Süden + + + + + + +- Set tab position south +- Tabulator Position 'Süden' setzen ++ Set tab position west ++ Tabulator Position 'Westen' setzen + + + + + + +- &South +- &Süden ++ &West ++ &Westen + + + + + + +- Set tab position west +- Tabulator Position 'Westen' setzen ++ Set tab position east ++ Tabulator Position 'Osten' setzen + + + + + + +- &West +- &Westen +- +- +- +- +- +- +- Set tab position east +- Tabulator Position 'Osten' setzen +- +- +- +- +- +- + &East + &Osten + +@@ -12673,7 +12673,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Tit&el + + +- ++ + freed %n byte(s) in %1 + + %n Byte in %1 freigegeben +@@ -12681,7 +12681,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + %n entry(s) + + %n Eintrag +@@ -12694,7 +12694,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + removed %n byte(s) in %1 + + %n Byte in %1 gelöscht +@@ -12702,7 +12702,7 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + %n file(s) + + %n Datei +@@ -12739,13 +12739,13 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Ausgewählte Downloads anhalten + + +- ++ + Choose file to store download + Datei zum Speichern auswählen + + +- +- ++ ++ + last message repeated %n time(s) + + letzte Meldung %n-mal wiederholt +@@ -12753,80 +12753,80 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- ++ + Toggle maximization of embedded emulator windows + Maximierung eingebetteter Emulatoren ein-/ausschalten + + +- ++ + Embed emulator widget + Emulator Fenster einbetten + + +- ++ + &Embed + &Einbetten + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Spielen (&eingebettet) + + +- +- ++ ++ + <p>No data available</p> + <p>Keine Daten verfügbar</p> + + + +- ++ + Embedded emulators + Eingebettete Emulatoren + + +- ++ + Release emulator + Emulator freigeben + + +- ++ + WARNING: no matching window for emulator #%1 found + WARNUNG: es konnte kein Fenster für Emulator #%1 gefunden werden + + +- ++ + Embedding failed + Einbetten fehlgeschlagen + + +- +- ++ ++ + Scanning pause key + Scanne Pause-Taste + + +- ++ + disconnecting audio source from audio sink + Trenne Audio-Quelle von Audio-Ausgabe + + +- ++ + Add URL + URL hinzufügen + + +- ++ + Enter valid MP3 stream URL: + Gültige MP3 Stream URL eingeben: + + +- ++ + Buffering %p% + Pufferung %p% + +@@ -12983,14 +12983,12 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- + Go back + Gehe zurück + + + + +- + Go forward + Gehe vorwärts + +@@ -13008,8 +13006,8 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + + + +- +- ++ ++ + Enter search string + Such-Zeichenkette eingeben + +@@ -13069,88 +13067,28 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + Zur ersten Seite zurückkehren + + +- ++ + Enter URL + URL eingeben + + +- +- Open link +- Link öffnen +- +- +- +- Open link in new window +- Link in neuem Fenster öffnen +- +- +- +- Open image in new window +- Bild in neuem Fenster öffnen +- +- +- +- Save link as... +- Link speichern unter... +- +- +- +- Copy link +- Link kopieren +- +- +- +- Save image as... +- Bild speichern unter... +- +- +- +- Copy image +- Bild kopieren +- +- +- +- Copy image address +- Bild Adresse kopieren +- +- +- +- Reload +- Neu laden +- +- +- +- Stop +- Anhalten +- +- +- +- Copy +- Kopieren +- +- +- +- Inspect +- Inspizieren +- +- +- ++ + WARNING: invalid network reply and/or network error + WARNUNG: ungültige Netzwerk Antwort und/oder Netzwerk Fehler + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + MiniWebBrowser + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + PDF Viewer + +@@ -13294,2723 +13232,2723 @@ Bitte die 'rompath' Option in den globalen Emulator Einstellungen übe + &GUI + + +- +- DE (German) +- DE (Deutsch) +- +- +- +- US (English) +- US (Englisch) +- +- +- ++ + Browse preview directory + Vorschau-Verzeichnis auswählen + + +- +- +- ++ ++ ++ + Preview directory + Vorschau-Verzeichnis + + +- +- PT (Portuguese) +- PT (Portugiesisch) +- +- +- ++ + Log font + Schriftart in Logs + + +- ++ + Font used in logs (= application font if empty) + Schriftart, die in Logs verwendet wird (= Anwendungs-Schriftart, falls leer) + + +- ++ + Browse font used in logs + Schriftart in Logs auswählen + + +- ++ + PCB directory (read) + PCB Verzeichnis (lesen) + + +- ++ + Browse PCB directory + PCB Verzeichnis auswählen + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + Verwendung von catver.ini aktivieren -- die neueste Version erhälst Du unter http://www.progettoemma.net/?catlist + + +- ++ + Use catver.ini + Benutze catver.ini + + +- ++ + Path to catver.ini (read) + Pfad zu catver.ini (lesen) + + +- ++ + Browse path to catver.ini + Pfad zu catver.ini auswählen + + +- ++ + ROM types + ROM Typen + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + Emulation direkt starten, wenn ein Eintrag in einer der Unterlisten aktiviert wird (anstatt in die Hauptliste zu springen) + + +- +- +- ++ ++ ++ + SW snap folder + SW Snap Ordner + + +- ++ + Software snap-shot directory (read) + Software Snapshot Verzeichnis (lesen) + + +- ++ + Browse software snap-shot directory + Software Snapshot Verzeichnis auswählen + + +- ++ + Players + Spieler + + +- ++ + Play on sub-list activation + Bei Unterlisten-Aktivierung starten + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + Auswahl der Cursor-Position, die QMC2 verwendet, wenn es automatisch zum aktuellen Eintrag scrollt (diese Einstellung gilt für alle Ansichten und Listen!) + + +- ++ + Visible + Sichtbar + + +- ++ + Top + Oben + + +- ++ + Bottom + Unten + + +- ++ + Center + Zentrum + + +- ++ + Cursor position + Cursor Position + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + Gemeinsame Werkzeug- und Titel-Leiste unter Mac OS X verwenden + + +- ++ + Unify with title + Gemeinam mit Titel + + +- ++ + Minimize when launching emulators? + Minimieren beim Start eines Emulators? + + +- ++ + Minimize on emulator launch + Minimieren beim Start der Emulation + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + Alle Meldungen unterdrücken, die entweder über die QDebug Klasse oder eine der qDebug() / qCritical() / qWarning() / qFatal() Funktionen gesendet wurde + + +- ++ + Suppress Qt messages + Qt Meldungen unterdrücken + + +- ++ + Show splash screen when starting up? + Startbild während Initialisierung anzeigen? + + +- ++ + Show splash screen + Startbild anzeigen + + +- ++ + Software notes folder + Ordner für SW-Notizen + + +- ++ + Folder used to store personal notes about any software titles (write) + Ordner zum Speichern persönlicher Notizen über jegliche Software-Titel (schreiben) + + +- ++ + Browse software notes folder + Ordner für SW-Notizen auswählen + + +- ++ + Driver status + Treiberstatus + + +- ++ + Display ROM status icons in master lists? + ROM Status Icons in den Hauptlisten anzeigen? + + +- ++ + Show ROM status icons + ROM Status Icons anzeigen + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + Position zur Anzeige der Software-Snapshots innerhalb der Software-Liste auswählen + + +- ++ + Disable snaps + Keine Snaps + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + Software-Snapshots anzeigen, wenn mit dem Maus-Zeiger darüber gefahren wird + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + SW Snaps automatisch ausschalten, wenn die Software-Details sichtbar sind (könnte sonst stören) + + +- +- ES (Spanish) +- ES (Spanisch) +- +- +- +- IT (Italian) +- IT (Italienisch) +- +- +- +- RO (Romanian) +- RO (Rumänisch) +- +- +- +- SV (Swedish) +- SV (Schwedisch) +- +- +- ++ + Customize the tool-bar + Werkzeugleiste anpassen + + +- ++ + Tool-bar... + Werkzeugleiste... + + +- ++ + Force QMC2's working directory to be the same as the executable's path + Erzwingen, dass QMC2's Arbeitsverzeichnis gleich dem Installationspfad der ausführbaren Datei ist + + +- ++ + Set working directory from executable + Arbeitsverzeichnis gleich Programm-Pfad + + +- ++ + Default palette + Standard Farbpalette + + +- ++ + Edit the color palette + Eigene Farbpalette anpassen + + +- ++ + Edit color palette... + Farbpalette anpassen... + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + Native Datei-Dialoge des Systems verwenden, ansonsten werden die in Qt eingebauten Dialoge benutzt + + +- ++ + Compressed cabinet file (read) + Komprimierte Gehäuse-Datei (lesen) + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + Kompressionsformat wählen + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + ZIP + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + 7z + + +- ++ + Browse compressed cabinet file + Komprimierte Gehäuse-Datei auswählen + + +- ++ + Compressed controller file (read) + Komprimierte Controller-Datei (lesen) + + +- ++ + Browse compressed controller file + Komprimierte Controller-Datei auswählen + + +- ++ + Compressed marquee file (read) + Komprimierte Marquee-Datei (lesen) + + +- ++ + Browse compressed marquee file + Komprimierte Marquee Datei auswählen + + +- ++ + Switch between specifying a title directory or a compressed title file + Zwischen der Angabe eines Titel-Verzeichnisses oder einer komprimierten Titel-Datei umschalten + + +- ++ + MAME emulator information database - mameinfo.dat (read) + MAME Emulator Informations Datenbank - mameinfo.dat (lesen) + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + MAME Emulator Informations Datenbank auswählen (mameinfo.dat) + + +- ++ + Switch between specifying a preview directory or a compressed preview file + Zwischen der Angabe eines Vorschau-Verzeichnisses oder einer komprimierten Vorschau-Datei umschalten + + +- ++ + Compressed preview file (read) + Komprimierte Vorschau-Datei (lesen) + + +- ++ + Browse compressed preview file + Komprimierte Vorschau-Datei auswählen + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + Zwischen der Angabe eines Flyer-Verzeichnisses oder einer komprimierten Flyer-Datei umschalten + + +- ++ + Compressed flyer file (read) + Komprimierte Flyer-Datei (lesen) + + +- ++ + Browse compressed flyer file + Komprimierte Flyer-Datei auswählen + + +- ++ + Switch between specifying an icon directory or a compressed icon file + Zwischen der Angabe eines Icon-Verzeichnisses oder einer komprimierten Icon-Datei umschalten + + +- ++ + Compressed icon file (read) + Komprimierte Icon-Datei (lesen) + + +- ++ + Browse compressed icon file + Komprimierte Icon-Datei auswählen + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + Zwischen der Angabe eines Gehäuse-Verzeichnisses oder einer komprimierten Gehäuse-Datei umschalten + + +- ++ + Switch between specifying a controller directory or a compressed controller file + Zwischen der Angabe eines Controller-Verzeichnisses oder einer komprimierten Controller-Datei umschalten + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + Zwischen der Angabe eines Marquee-Verzeichnisses oder einer komprimierten Marquee-Datei umschalten + + +- ++ + Compressed title file (read) + Komprimierte Titel-Datei (lesen) + + +- ++ + Browse compressed title file + Komprimierte Titel-Datei auswählen + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + Zwischen der Angabe eines PCB-Verzeichnisses oder einer komprimierten PCB-Datei umschalten + + +- ++ + Compressed PCB file (read) + Komprimierte PCB-Datei (lesen) + + +- ++ + Browse compressed PCB file + Komprimierte PCB-Datei auswählen + + +- ++ + Compressed software snap-shot file (read) + Komprimierte Software Snapshot Datei (lesen) + + +- ++ + Browse compressed software snap-shot file + Komprimierte Software Snapshot Datei auswählen + + +- ++ + Load MAME emulator information database (mameinfo.dat) + MAME Emulator Informations Datenbank laden (mameinfo.dat) + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + Zwischen der Angabe eines Software Snap Verzeichnisses oder einer komprimierten Software Snap Datei umschalten + + +- ++ + Enable the use of a template for (empty) software notes + Verwendung einer Vorlage für (leere) Software-Notizen aktivieren + + +- ++ + Software notes template + Vorlage für SW-Notizen + + +- ++ + HTML file used as a template for software-notes (read) + HTML Datei, welche als Vorlage für Software-Notizen herangezogen wird (lesen) + + +- ++ + Browse software notes template + Vorlage für SW-Notizen auswählen + + +- ++ + Enable the use of category.ini + Verwendung von category.ini aktivieren + + +- ++ + Use category.ini + Benutze category.ini + + +- ++ + Path to category.ini (read) + Pfad zu category.ini (lesen) + + +- ++ + Browse path to category.ini + Pfad zu category.ini auswählen + + +- ++ + System notes folder + Ordner für System-Notizen + + +- ++ + Enable the use of a template for (empty) system notes + Verwendung einer Vorlage für (leere) System-Notizen aktivieren + + +- ++ + System notes template + Vorlage für System-Notizen + + +- ++ + HTML file used as a template for system-notes (read) + HTML Datei, welche als Vorlage für System-Notizen herangezogen wird (lesen) + + +- ++ + Folder used to store personal notes about any systems (write) + Ordner zum Speichern persönlicher Notizen über jegliche Systeme (schreiben) + + +- ++ + Browse system notes folder + Ordner für System-Notizen auswählen + + +- ++ + Browse system notes template + Vorlage für System-Notizen auswählen + + +- ++ + Load software information database (from history.dat) + Software Informations Datenbank laden (aus MAME history.dat) + + +- ++ + Software information database - history.dat (read) + Software Informations Datenbank - MAME history.dat (lesen) + + +- ++ + Browse software information database (history.dat) + Software Informations Datenbank auswählen (MAME history.dat) + + +- ++ + Define additional artwork classes for systems and software-list entries + Definition zusätzlicher Bildklassen für Systeme und Software-Listen Einträge + + +- ++ + Set up additional artwork classes... + Zusätzliche Bildklassen festlegen... + + +- ++ + Choose active image formats and their priorities (per artwork class) + Aktive Grafikformate und ihre Prioritäten einstellen (pro Bildklasse) + + +- ++ + Select image formats... + Grafikformate auswählen... + + +- ++ + Load MESS emulator information database (messinfo.dat) + MESS Emulator Informations Datenbank laden (messinfo.dat) + + +- ++ + MESS emulator information database - messinfo.dat (read) + MESS Emulator Informations Datenbank - messinfo.dat (lesen) + + +- ++ + Show machine's description at the bottom of any images + Maschinenbeschreibung am unteren Rand jedes Bildes anzeigen + + +- ++ + Show machine name + Zeige Maschinennamen + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + Zeige Maschinenbeschreibung nur an, wenn die Maschinenliste aufgrund des aktuellen Layouts nicht sichtbar ist + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + Rückgriff auf Bild / Video des Originals sofern ein individuelles Bild / Video fehlt, aber eines für das Original vorhanden ist + + +- ++ + Parent image / video fallback + Original Bild / Video Rückgriff + + +- ++ + Open the component setup dialog + Komponenten Einstellungen vornehmen + + +- ++ + Component setup... + Komponenten Einstellung... + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + Zeige Maschinen Status Indikator nur an, wenn die Maschinenliste aufgrund des aktuellen Layouts nicht sichtbar ist + + +- ++ + Restore saved machine selection at start and after reloading the machine list + Gespeicherte Maschinenlauswahl beim Start und nach dem Neuladen der Maschinenliste wiederherstellen + + +- ++ + Restore machine selection + Maschinen-Selektion wiederherstellen + + +- ++ + Show vertical machine status indicator in machine details + Zeige vertikalen Maschinen Status Indikator in den Maschinen-Details + + +- ++ + Machine status indicator + Maschinen Status Indikator + + +- ++ + Save machine selection on exit and before reloading the machine list + Ausgewählte Maschine beim Beenden und vor dem Neuladen der Maschinenliste speichern + + +- ++ + Save machine selection + Maschinen-Selektion speichern + + +- ++ + Show animation when loading, filtering or tagging the machine list? + Animation beim Laden, Filtern oder Markieren der Maschinenliste anzeigen? + + +- ++ + Show loading animation + Ladeanimation anzeigen + + +- ++ + Scaled software snapshot + Software Snap skalieren + + +- ++ + Select individual fallback settings per artwork class + Rückgriff auf Original für jede Bildklasse individuell einstellen + + +- ++ + Individual fallback settings... + Original-Rückgriff individuell einstellen... + + +- ++ + Import MAME machine information to DAT-info database + MAME Maschinen Informationen in DAT-Info Datenbank importieren + + +- ++ + Browse machine favorites file + Maschinen-Favoriten Datei auswählen + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + Archiv + + +- ++ + MAME machine information database - history.dat (read) + MAME Maschinen Informations Datenbank - history.dat (lesen) + + +- ++ + Browse MESS emulator information database (messinfo.dat) + MESS Emulator Informations Datenbank auswählen (mameinfo.dat) + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + Option erfordert eine Aktualisierung der Maschinenliste um wirksam zu werden + + +- ++ + Machine favorites file (write) + Maschinen-Favoriten Datei (schreiben) + + +- ++ + Load MAME machine information database (history.dat) + MAME Maschinen Informations Datenbank laden (history.dat) + + +- ++ + Machine info (MAME) + Maschinen Info (MAME) + + +- ++ + Browse MAME machine information database (history.dat) + MAME Maschinen Informations Datenbank auswählen (history.dat) + + +- ++ + Video snap folder + Video Snap Verzeichnis + + +- ++ + Video snap folder (read) + Video Snap Verzeichnis (lesen) + + +- ++ + Browse video snap folder + Video Snap Verzeichnis auswählen + + +- ++ + Optimize catver.ini for faster loading + Catver.ini für schnelleres Laden optimieren + + +- ++ + Setup the icon cache database + Einstellungen der Icon Cache Datenbank anpassen + + +- ++ + No SW snaps for visible details + Keine SW Snaps bei sichtbaren Details + + +- ++ + Machine description + Maschinen-Beschreibung + + +- ++ + Machine name + Maschinenname + + +- ++ + Source file + Quelldatei + + +- ++ + Rank + Rang + + +- ++ + Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) + Anzahl der Objekt-Einfügungen zwischen Updates der Maschinenliste beim Laden (höhere Werte sind schneller, beeinflussen jedoch die Ansprechbarkeit der GUI negativ) + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + Standard Start-Modus festlegen (unabhängiges oder eingebettetes Fenster), der bei Aktivierung eines Eintrags in jeglicher Liste Anwendung findet + + +- ++ + independent + unabhängig + + +- ++ + embedded + eingebettet + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + Aktualisierung der Maschinen-Details (Vorschau, Flyer, Info, Konfiguration, ...) um wie viele Millisekunden verzögern? + + +- ++ + Default launch-mode + Standard Start-Modus + + +- ++ + Display (or hide) device sets in master lists? + Geräte-Sets in Hauptlisten anzeigen (oder verstecken)? + + +- ++ + Show device sets + Geräte-Sets anzeigen + + +- ++ + Display (or hide) BIOS sets in master lists? + BIOS-Sets in Hauptlisten anzeigen (oder verstecken)? + + +- ++ ++ de (German) ++ de (Deutsch) ++ ++ ++ ++ es (Spanish) ++ es (Spanisch) ++ ++ ++ ++ el (Greek) ++ el (Griechisch) ++ ++ ++ ++ fr (French) ++ fr (Französisch) ++ ++ ++ ++ it (Italian) ++ it (Italienisch) ++ ++ ++ ++ pl (Polish) ++ pl (Polnisch) ++ ++ ++ ++ pt (Portuguese) ++ pt (Portugiesisch) ++ ++ ++ ++ pt_BR (Brazilian Portuguese) ++ pt_BR (Brasilianisches Portugiesisch) ++ ++ ++ ++ ro (Romanian) ++ ro (Rumänisch) ++ ++ ++ ++ sv (Swedish) ++ sv (Schwedisch) ++ ++ ++ ++ us (American English) ++ us (Amerikanisches Englisch) ++ ++ ++ + Show BIOS sets + BIOS-Sets anzeigen + + +- ++ + ROM tool + ROM Werkzeug + + +- ++ + External ROM tool (it's completely up to you...) + Externes ROM Werktzeug (es steht Dir völlig frei...) + + +- ++ + Browse ROM tool + ROM Werkzeug auswählen + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + Argumentliste für das ROM Werkzeug (z. B. "$ID$ $DESCRIPTION$") + + +- ++ + Browse working directory of the ROM tool + Arbeitsverzeichnis des ROM Werkzeugs auswählen + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + Werkzeug Ausgaben auch im Frontend Log mitführen (zur Fehlersuche) + + +- ++ + Copy tool output to front end log + Werkzeug Ausgaben in Frontend Log + + +- ++ + Automatically close the tool-executor dialog when the external process finished + Werzeug-Ausführungsdialog automatisch nach Beenden des externes Programmes schließen + + +- ++ + Close dialog automatically + Dialog automatisch schließen + + +- ++ + Browser settings + Browser-Einstellungen + + +- ++ + Browse cookie database + Cookie-Datenbank auswählen + + +- ++ + Cookie database file (write) + Datei der Cookie-Datenbank (schreiben) + + +- ++ + Cookie database + Cookie-Datenbank + + +- ++ + Save and restore cookies used on web pages? + Von Web-Seiten verwendete Cookies speichern und wiederherstellen? + + +- ++ + Remove all cookies by recreating the database + Alle Cookies löschen (Datenbank wird neu erzeugt) + + +- ++ + 7-zip tool + 7-Zip Werkzeug + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + Externes 7-Zip Werkzeug, z. B. "7za" (lesen und ausführen) + + +- ++ + Browse for 7-zip tool + 7-Zip Werkzeug auswählen + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + Argumentliste für 7-Zip Werkzeug zum Löschen von Einträgen aus einem 7-Zip Archiv (z. B. "$ARCHIVE$ -d $FILELIST$") + + +- ++ + &Global configuration + &Globale Konfiguration + + +- +- ++ ++ + Executable file + Ausführbare Datei + + +- ++ + Clean up user data database (removes obsolete entries) + Benutzerdaten Datenbank säubern (entfernt nicht mehr verwendete Einträge) + + +- +- +- +- ++ ++ ++ ++ + Working directory + Arbeitsverzeichnis + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + Arbeitsverzeichnis das zur Ausführung des Emulators verwendet wird (wenn leer, wird QMC2's aktuelles Arbeitsverzeichnis verwendet) + + +- +- ++ ++ + Browse working directory + Arbeitsverzeichnis auswählen + + +- ++ + General software folder + Allg. Software-Verzeichnis + + +- ++ + Use native file dialogs + Native Datei-Dialoge verwenden + + +- ++ + Kill emulators when QMC2 exits? + Emulatoren beim Beenden von QMC2 schließen? + + +- ++ + Kill emulators on exit + Emulatoren beim Beenden schließen + + +- ++ + Terminate all other emulator instances when launching a new one? + Alle anderen Emuatoren schließen, wenn eine neue Instanz gestartet wird? + + +- ++ + One emulator at a time + Nur ein aktiver Emulator + + +- ++ + Load MESS machine information database (sysinfo.dat) + MESS Maschinen Informations Datenbank laden (sysinfo.dat) + + +- ++ + MESS machine information database - sysinfo.dat (read) + MESS Maschinen Informations Datenbank - sysinfo.dat (lesen) + + +- ++ + Browse MESS machine information database (sysinfo.dat) + MESS Maschinen Informations Datenbank auswählen (sysinfo.dat) + + +- ++ + Network / &Tools + Net&zwerk / Werkzeuge + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + Arbeitsverzeichnis das zur Ausführung des ROM Werkzeugs verwendet wird (wenn leer, wird QMC2's aktuelles Arbeitsverzeichnis verwendet) + + +- ++ + Restore cookies + Cookies speichern + + +- ++ + Manage cookies stored in database + In Datenbank gespeicherte Cookies verwalten + + +- ++ + Manage stored cookies + Gespeicherte Cookies verwalten + + +- ++ + Clear database + Datenbank leeren + + +- ++ + Machine list cache + Maschinenlisten-Cache + + +- ++ + Browse machine list cache file + Cache Datei für Maschinenliste auswählen + + +- ++ + Software list cache DB + Software-Listen Cache DB + + +- ++ + Browse software list cache database file + Datei für Software-Listen Cache Datenbank auswählen + + +- ++ + Recreate user data database (removes <b>all</b> entries) + Benutzerdaten Datenbank neu erzeugen (entfernt <b>alle</b> Einträge) + + +- ++ + Browse general software folder + Allgmeines Software-Verzeichnis auswählen + + +- ++ + Software state cache + Software Status Cache + + +- ++ + Directory used to store individual state cache files for each software-list (write) + Verzeichnis das zum Speichern individueller Status Cache Dateien für jede einzelne Software-Liste verwendet wird (schreiben) + + +- ++ + Browse software state cache directory + Software Status Cache Verzeichnis auswählen + + +- ++ + XML cache database + XML Cache Datenbank + + +- ++ + Database file for caching the output from -listxml (write) + Datenbank Datei zum Cachen der Ausgabe von -listxml (schreiben) + + +- ++ + Browse XML cache database file + Datei für XML Cache Datenbank auswählen + + +- ++ + User data database + Benutzerdaten Datenbank + + +- ++ + Database file for storing/retrieving user data (write) + Datenbank Datei zum Speichern/Abfragen von Benutzerdaten (schreiben) + + +- ++ + Browse user data database file + Datei für Benutzerdaten Datenbank auswählen + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + Zeigt an, ob der $ID$ Platzhalter in der Kommandozeile fehlt (gelb) oder nicht (grün) + + +- ++ + Replace + Ersetzen + + +- ++ + Icon + Icon + + +- ++ + Name + Name + + +- ++ + Executable + Ausführbare Datei + + +- ++ + Custom IDs + Fremde IDs + + +- ++ + Register emulator + Emulator registrieren + + +- ++ + Emulator name + Emulator Name + + +- ++ + Deregister emulator + Emulator deregistrieren + + +- ++ + Registered emulator's name + Name des registrierten Emulators + + +- ++ + Command to execute the emulator (path to the executable file) + Kommando zum Ausführen des Emulatzors (Pfad der ausführbaren Datei) + + +- ++ + Replace emulator registration + Emulator Registrierung ersetzen + + +- ++ + Machine list cache file (write) + Cache Datei für die Maschinenliste (schreiben) + + +- ++ + Database file for caching the ouput from -listsoftware (write) + Datenbank Datei zum Cachen der Ausgabe von -listsoftware (schreiben) + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + Automatisch alle Emulator Caches neu erzeugen wenn sich die Ausgabe von '-listfull' ändert + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + Emulator Identifikation überspringen wenn die Modifikationszeit der Datei unverändert ist + + +- ++ + Machine list database + Maschinenlisten Datenbank + + +- ++ + Machine list database file (write) + Maschinenlisten Datenbank Datei (schreiben) + + +- ++ + Browse machine list database file + Datei für Maschinenlisten Datenbank auswählen + + +- ++ + Foreign &emulators + Fremde &Emulatoren + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + Registrierte Emulatoren -- diese lassen sich in den Maschinen-spezifischen Emulator Einstellungen auswählen + + +- ++ + Add + Hinzufügen + + +- ++ + Apply settings + Einstellungen übernehmen + + +- ++ + &Apply + &Anwenden + + +- ++ + Close and apply settings + Schließen und Einstellungen übernehmen + + +- ++ + &Ok + &Ok + + +- ++ + Close and discard changes + Schließen und Änderungen verwerfen + + +- ++ + &Cancel + Abbre&chen + + +- ++ + Restore currently applied settings + Aktuell gesicherte Einstellungen restaurieren + + +- ++ + &Restore + &Restaurieren + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + WARNUNG: Konfiguration ist nicht beschreibbar, bitte überprüfe Zugriffsrechte für + + +- ++ + Preview directory (read) + Vorschau-Verzeichnis (lesen) + + +- ++ + Browse frontend data directory + Vorschau-Verzeichnis auswählen + + +- ++ + Data directory + Daten-Verzeichnis + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + Alle Dateien (*) + + +- ++ + Browse application font + Anwendungs-Schriftart auswählen + + +- ++ + Application font (= system default if empty) + Anwendungs-Schriftart (= System-Standard, falls leer) + + +- ++ + Browse options template file + Optionsvorlage-Datei auswählen + + +- ++ + Options template file + Optionsvorlage-Datei + + +- ++ + Options template file (read) + Optionsvorlage-Datei (lesen) + + +- ++ + Choose preview directory + Vorschau-Verzeichnis auswählen + + +- ++ + Choose options template file + Optionsvorlage-Datei auswählen + + +- ++ + Choose data directory + Daten-Verzeichnis auswählen + + +- +- ++ ++ + Confirm + Bestätigen + + +- ++ + &Local + &Lokal + + +- ++ + &Overwrite + &Überschreiben + + +- ++ + Do&n't apply + &Nicht anwenden + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + Bild automatisch an Rahmen-Größe anpassen (andernfalls Original-Größe benutzen) + + +- ++ + Scaled preview + Vorschaubilder skalieren + + +- ++ + Image cache size in MB + Größe des Bild-Zugriffsspeichers in MB + + +- ++ + MB + MB + + +- ++ + Application language + Anwendungs-Sprache + + +- ++ + Language + Sprache + + +- ++ + image cache size set to %1 MB + Größe des Bild-Zugriffsspeichers auf %1 MB gesetzt + + +- ++ + Browse ROM state cache file + ROM-Status Cache Datei auswählen + + +- ++ + ROM state cache + ROM-Status Cache + + +- ++ + Choose ROM state cache file + ROM-Status Cache Datei auswählen + + +- ++ + immediate + sofort + + +- ++ + Responsiveness + Änderungssensibilität + + +- ++ + Smooth scaling + Kantenglättung + + +- ++ + ROM state cache file (write) + ROM Status Cache Datei (schreiben) + + +- ++ + Browse play history file + Spiel-Historien Datei auswählen + + +- ++ + Play history file (write) + Spiel-Historien Datei (schreiben) + + +- ++ + Play history file + Spiel-Historien Datei + + +- ++ + Favorites file + Favoriten-Datei + + +- ++ + Choose play history file + Spiel-Historien Datei auswählen + + +- ++ + Sort order + Sortierreihenfolge + + +- ++ + Sort criteria + Sortier-Kriterium + + +- ++ + Select sort order + Sortierreihenfolge auswählen + + +- ++ + Ascending + Aufsteigend + + +- ++ + Descending + Absteigend + + +- ++ + Select sort criteria + Sortier-Kriterium auswählen + + +- ++ + ROM state + ROM-Status + + +- ++ + ascending + aufsteigend + + +- +- ++ ++ + No style sheet + Kein Style Sheet + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + Eine geöffnete Maschinen-spezifische Emulator-Konfiguration wurde entdeckt. + Lokale Maschinen-Einstellungen verwenden, mit globalen Einstellungen überschreiben oder Änderungen nicht anwenden? + + +- ++ + please reload machine list for some changes to take effect + Bitte Maschinenliste neu laden um einige der Änderungen wirksam werden zu lassen + + +- ++ + descending + absteigend + + +- ++ + libarchive error + Libarchive Fehler + + +- ++ + Choose flyer directory + Flyer Verzeichnis auswählen + + +- ++ + Browse flyer directory + Flyer Verzeichnis auswählen + + +- ++ + Flyer directory (read) + Flyer Verzeichnis (lesen) + + +- +- +- ++ ++ ++ + Flyer directory + Flyer Verzeichnis + + +- ++ + Scaled flyer + Flyer-Bilder skalieren + + +- ++ + Smooth image scaling (nicer, but slower) + Sanfte Kantenglättung bei Bild-Skalierungen (schöner, aber langsamer) + + +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- <font size="-1"><b>WARNUNG: gespeicherte Passwörter sind <i>mäßig</i> verschlüsselt!</b></font> +- +- +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + Standard Software-Verzeichnis, das bei der MESS Geräte-Konfiguration verwendet wird (sofern dort ein Unterverzeichnis mit dem Namen der aktuell ausgewählten Maschine existiert, wird dieses stattdessen verwendet) + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + Argumente, die an den Emulator übergeben werden -- verwende $ID$ als Platzhalter für die eindeutige Set ID, $DESCRIPTION$ für dessen Beschreibung + + +- ++ + Remove + Entfernen + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + Auf Standard-Einstellungen zurücksetzen (klicke auf <i>Restaurieren</i> um die gespeicherte Konfiguration wiederherzustellen) + + +- ++ + &Default + Stan&dard + + +- ++ ++ + +- +- +- ++ ++ + Default + Standard + + +- ++ + ROM state filter + ROM Status Filter + + +- ++ + Show ROM state C (correct)? + Zeige ROM Status K (korrekt)? + + +- ++ + Show ROM state M (mostly correct)? + Zeige ROM Status B (beinahe korrekt)? + + +- ++ + Show ROM state I (incorrect)? + Zeige ROM Status I (inkorrekt)? + + +- ++ + Show ROM state N (not found)? + Zeige ROM Status N (nicht gefunden)? + + +- ++ + Show ROM state U (unknown)? + Zeige ROM Status U (unbekannt)? + + +- +- ++ ++ + Preview file + Vorschau Datei + + +- +- ++ ++ + Flyer file + Flyer Datei + + +- ++ + Frontend data directory (read) + Frontend Daten-Verzeichnis (lesen) + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: kann Icon-Archiv nicht öffnen, bitte Zugriffsrechte für %1 überprüfen + + +- ++ + triggering automatic reload of machine list + Löse automatische Aktualisierung der Maschinenliste aus + + +- +- ++ ++ + Icon file + Icon Datei + + +- +- +- ++ ++ ++ + Icon directory + Icon Verzeichnis + + +- ++ + Choose icon directory + Icon Verzeichnis auswählen + + +- ++ + Icon directory (read) + Icon Verzeichnis (lesen) + + +- ++ + Browse icon directory + Icon Verzeichnis auswählen + + +- ++ + Year + Jahr + + +- ++ + Manufacturer + Hersteller + + +- ++ + Retry loading images which weren't found before? + Bilder, die zuvor nicht gefunden wurden, erneut laden? + + +- ++ + Retry loading images + Bild laden wiederholen + + +- ++ + GUI style + GUI Style + + +- ++ + Application font + Anwendungs-Schriftart + + +- ++ + Image cache size + Bild-Cache Größe + + +- ++ + Use standard or custom color palette? + Standard oder angepasste Farbpalette benutzen? + + +- +- ++ ++ + F&iles / Directories + Date&ien / Verzeichnisse + + +- ++ + &Shortcuts / Keys + Ta&staturkürzel + + +- ++ + Check all ROM states + Alle ROM Stati prüfen + + +- ++ + About QMC2 + Über QMC2 + + +- ++ + Analyze tagged sets + Markierte Sets analysieren + + +- ++ + Copy tagged sets to favorites + Markierte Sets den Favoriten hinzufügen + + +- ++ + Online documentation + Online Dokumentation + + +- ++ + Clear image cache + Bild-Zugriffsspeicher leeren + + +- ++ + Clear ProjectMESS cache + ProjectMESS Cache leeren + + +- +- ++ ++ + Open options dialog + Options-Dialog öffnen + + +- ++ + About Qt + Über Qt + + +- ++ + Recreate template map + Abbildungsvorlage neu erzeugen + + +- +- ++ ++ + Stop processing / exit QMC2 + Verarbeitung anhalten / QMC2 beenden + + +- ++ + Hierarchical view + Hierarchische Ansicht + + +- ++ + Cursor down + Cursor runter + + +- ++ + Cursor left + Cursor links + + +- ++ + Minus (-) + Minus (-) + + +- ++ + Page down + Seite runter + + +- ++ + Page up + Seite rauf + + +- ++ + Plus (+) + Plus (+) + + +- ++ + Reload machine list + Maschinenliste neu laden + + +- ++ + Check machine's ROM state + ROM Status der aktuellen Maschine prüfen + + +- ++ + Rebuild current machine + Aktuelle Maschine neu erzeugen + + +- ++ + Rebuild tagged machines + Alle markierten Maschinen neu erzeugen + + +- ++ + Cursor right + Cursor rechts + + +- ++ + Tabulator + Tabulator + + +- ++ + Cursor up + Cursor rauf + + +- ++ + Custom + Angepasst + + +- ++ + Enter key + Eingabetaste + + +- ++ + Reset key sequence to default + Tastaturkürzel auf Standard zurücksetzen + + +- +- ++ ++ + Redefine key sequence + Tastaturkürzel neu festlegen + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + Aktive Tastaturkürzel; Doppel-Klick zur Festlegung eines neuen Tastaturkürzels + + +- ++ + Clear icon cache + Icon-Zugriffsspeicher leeren + + +- ++ + Auto-trigger ROM check + Automatische ROM-Prüfung + + +- ++ + Update delay + Verzögerung + + +- ++ + ms + ms + + +- ++ + WARNING: shortcut map contains duplicates + WARNUNG: Tastaturkürzel-Definition enthält Duplikate + + +- ++ + shortcut map is clean + Tastaturkürzel-Definition ist in Ordnung + + +- ++ + Reset + Zurücksetzen + + +- ++ + End + Ende + + +- ++ + Escape + Escape + + +- ++ + Home + Pos1 + + +- ++ + Zip tool + Zip Werkzeug + + +- ++ + Browse for zip tool + Zip Werkzeug auswählen + + +- ++ + Choose zip tool + Zip Werkzeug auswählen + + +- ++ + External zip tool, i.e. "zip" (read and execute) + Externes Zip Werkzeug, z. B. "zip" (lesen und ausführen) + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + Argumentliste für Zip Werkzeug zum Löschen von Einträgen aus einem ZIP Archiv (z. B. "$ARCHIVE$ -d $FILELIST$") + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + Argumente + + +- ++ + Show short description of current processing in progress bar + Anzeige einer Kurz-Beschreibung der aktuellen Verarbeitung in Fortschritts-Anzeige + + +- +- ++ ++ + Choose emulator executable file + Ausführbare Emulator Datei auswählen + + +- ++ + Choose emulator log file + Emulator Log Datei auswählen + + +- ++ + E&mulator + E&mulator + + +- ++ + Browse emulator log file + Emulator Log Datei auswählen + + +- ++ + Emulator log file (write) + Emulator Log Datei (schreiben) + + +- ++ + Emulator log file + Emulator Log Datei + + +- +- ++ ++ + Browse emulator executable file + Ausführbare Emulator Datei auswählen + + +- ++ + Emulator executable file (read and execute) + Ausführbare Emulator Datei (lesen und ausführen) + + +- +- PL (Polish) +- PL (Polnisch) +- +- +- +- FR (French) +- FR (Französisch) +- +- +- ++ + Tag + Markierung + + +- ++ + SW snap position + SW Snap Position + + +- ++ + Above / Left + Drüber / Links + + +- ++ + Above / Center + Drüber / Zentrum + + +- ++ + Above / Right + Drüber / Rechts + + +- ++ + Below / Left + Drunter / Links + + +- ++ + Below / Center + Drunter / Zentrum + + +- ++ + Below / Right + Drunter / Rechts + + +- ++ + Enable ROM state filtering? + ROM Status Filterung aktivieren? + + +- +- EL (Greek) +- EL (Griechisch) +- +- +- ++ + Import MESS emulator information to DAT-info database + MESS Emulator Informationen in DAT-Info Datenbank importieren + + +- ++ + Import MAME emulator information to DAT-info database + MAME Emulator Informationen in DAT-Info Datenbank importieren + + +- ++ + Import MESS machine information to DAT-info database + MESS Maschinen Informationen in DAT-Info Datenbank importieren + + +- ++ + DAT-info database file + DAT-Info Datenbank Datei + + +- ++ + Browse DAT-info database file + Datei für DAT-Info Datenbank auswählen + + +- ++ + Browse system manual folder + System Handbuch Verzeichnis auswählen + + +- ++ + DAT-info database file (write) + DAT-Info Datenbank Datei (schreiben) + + +- ++ + Machine info (MESS) + Maschinen Info (MESS) + + +- ++ + Emu info (MAME) + Emu Info (MAME) + + +- ++ + Emu info (MESS) + Emu Info (MESS) + + +- ++ + Software info + Software Info + + +- ++ + Import software information to DAT-info database + Software Informationen in DAT-Info Datenbank importieren + + +- ++ + System manual folder (read) + System Handbuch Verzeichnis (lesen) + + +- ++ + Software manual folder (read) + Software Handbuch Verzeichnis (lesen) + + +- ++ + Browse software manual folder + Software Handbuch Verzeichnis auswählen + + +- ++ + System manual folder + System Handbuch Verzeichnis + + +- ++ + Software manual folder + Software Handbuch Verzeichnis + + +- ++ + Scan available software manuals + Verfügbare Software Handbücher scannen + + +- ++ + Scan available system manuals + Verfügbare System Handbücher scannen + + +- ++ + Machine- / Software-&lists + Maschinen- / Software-&Listen + + +- ++ + Save the latest software selection (per system) + Zuletzt ausgewählte Software speichern (je System) + + +- ++ + Save software selection + Software-Selektion speichern + + +- ++ + Restore the latest software selection (per system) + Zuletzt ausgewählte Software wiederherstellen (je System) + + +- ++ + Restore software selection + Software-Selektion wiederherstellen + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + <html><head/><body><p><span style=" font-weight:600;">Allgemeine Einstellungen</span></p></body></html> + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + <html><head/><body><p><span style=" font-weight:600;">Maschinen Listen</span></p></body></html> + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + <html><head/><body><p><span style=" font-weight:600;">Software Listen</span></p></body></html> + + +- ++ + Software snaps on mouse hover + Software Snaps mit Maus-Zeiger + + +- ++ + Apply the state filter dynamically during a full ROM audit? + Status Filter dynamisch während der ROM Prüfung anwenden? + + +- ++ + Apply state filter dynamically when checking ROMs + Filter dynamisch während der ROM Prüfung anwenden + + +- ++ + &Joystick + &Joystick + + +- ++ + Enable GUI control via joystick + GUI Steuerung via Joystick aktivieren + + +- ++ + Enable joystick control + Joystick-Steuerung aktivieren + + +- ++ + Rescan available joysticks + Verfügbare Joysticks suchen + + +- ++ + Rescan joysticks + Joysticks suchen + + +- ++ + Select joystick + Joystick auswählen + + +- ++ + List of available joysticks - select the one you want to use for GUI control + Liste der verfügbaren Joysticks - wähle denjenigen aus, den Du für die GUI Steuerung verwenden möchtest + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + Keine Joysticks gefunden + + +- ++ + Joystick information and settings + Joystick Informationen und Einstellungen + + +- ++ + Number of joystick axes + Anzahl der Joystick Achsen + + +- +- +- +- ++ ++ ++ ++ + 0 + + + +- ++ + Buttons: + Knöpfe: + + +- ++ + Number of joystick buttons + Anzahl der Joystick Knöpfe + + +- ++ + Hats: + Hats: + + +- ++ + Number of coolie hats + Anzahl der Coolie-Hats + + +- ++ + Trackballs: + Trackballs: + + +- ++ + Number of trackballs + Anzahl der Trackballs + + +- ++ + Calibrate joystick axes + Joystick Achsen kalibrieren + + +- ++ + Test all joystick functions + Alle Joystick Funktionen testen + + +- ++ + Axes: + Achsen: + + +- ++ + Automatically repeat joystick functions after specified delay + Joystick Funktionen nach angegebener Zeitspanne automatisch wiederholen + + +- ++ + Auto repeat after + Wiederholung nach + + +- ++ + Repeat all joystick functions after how many milliseconds? + Joystick Funktionen nach wie vielen Millisekunden wiederholen? + + +- +- ++ ++ + ms + ms + + +- ++ + Event timeout + Verzögerung + + +- ++ + Process joystick events after how many milliseconds? + Joystick Ereignisse nach wie vielen Millisekunden verarbeiten? + + +- +- ++ ++ + Function / Key + Funktion / Taste + + +- ++ + Calibrate + Kalibrieren + + +- ++ + Test + Testen + + +- ++ + Map + Abbilden + + +- ++ + Remap + Zuweisen + + +- ++ + Remove + Entfernen + + +- ++ + Active joystick mappings; double-click to remap joystick function + Aktive Joystick-Zuweisungen; doppelt klicken um neue Zuweisung festzulegen + + +- ++ + Joystick function + Joystick Funktion + + +- ++ + Map joystick functions to GUI functions + Joystick Zuweisungen für GUI Funktionen festlegen + + +- ++ + Remap a joystick function to the selected GUI function + Joystick Funktion für ausgewählte GUI Funtion neu zuweisen + + +- ++ + Remove joystick mapping from selected GUI function + Joystick Zuweisung von ausgewählter GUI Funktion entfernen + + +- +- ++ ++ + SW snap file + SW Snap Datei + + +- +- +- ++ ++ ++ + Custom IDs... + IDs festlegen... + + +- ++ + Choose software snap directory + Software Snapshot Verzeichnis auswählen + + +- ++ + Choose software notes folder + Ordner für SW-Notizen auswählen + + +- ++ + Choose software notes template + Vorlage für SW-Notizen auswählen + + +- +- ++ ++ + HTML files (*.html *.htm) + HTML-Dateien (*.html *.htm) + + +- ++ + Choose system notes folder + Ordner für System-Notizen auswählen + + +- ++ + Choose system notes template + Vorlage für System-Notizen auswählen + + +- ++ + Choose video snap folder + Video Snap Verzeichnis auswählen + + +- ++ + Choose system manual folder + Ordner für System Handbücher auswählen + + +- ++ + Choose software manual folder + Ordner für Software Handbücher auswählen + + +- ++ + Choose image file + Bild Datei auswählen + + +- ++ + Supported image files (%1) + Unterstützte Bild-Dateien (%1) + + +- ++ + ERROR: couldn't initialize SDL joystick support + FEHLER: konnte SDL Joystick Unterstützung nicht initialisieren + + +- ++ + joystick map is clean + Joystick-Abbildung ist in Ordnung + + +- ++ + WARNING: joystick map contains duplicates + WARNUNG: Joystick-Abbildung enthält Duplikate + + +- ++ + please restart QMC2 for some changes to take effect + Bitte QMC2 neu starten um einige der Änderungen wirksam werden zu lassen + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + Option erfordert einen Neustart von QMC2 um wirksam zu werden + + +- ++ + restart required + Neustart erforderlich + + +- +- +- ++ ++ ++ + reload required + Neu laden erforderlich + + +- ++ + none + keine + + +- +- ++ ++ + unlimited + unbegrenzt + + +- +- ++ ++ + lines + Zeilen + + +- ++ + Emulator log size + Emulator Log Größe + + +- ++ + Maximum number of lines to keep in emulator log browser + Maximale Anzahl von Zeilen, die im Emulator Log Browser gehalten werden + + +- ++ + Previous track (audio player) + Vorheriges Stück (Audio Player) + + +- ++ + Next track (audio player) + Nächstes Stück (Audio Player) + + +- ++ + Fast backward (audio player) + Schneller Rücklauf (Audio Player) + + +- ++ + Fast forward (audio player) + Schneller Vorlauf (Audio Player) + + +- ++ + Stop track (audio player) + Stück anhalten (Audio Player) + + +- ++ + Pause track (audio player) + Stück pausieren (Audio Player) + + +- ++ + Play track (audio player) + Stück abspielen (Audio Player) + + +- ++ + Raise volume (audio player) + Laustärke anheben (Audio Player) + + +- ++ + Lower volume (audio player) + Lautstärke absenken (Audio Player) + + +- ++ + Export ROM Status + ROM Status exportieren + + +- +- ++ ++ + Only when required + Nur wenn benötigt + + +- ++ + Show the menu bar + Menüzeile anzeigen + + +- ++ + Show menu bar + Zeige Menüzeile + + +- +- ++ ++ + Show status bar + Zeige Statuszeile + + +- +- ++ ++ + Show tool bar + Zeige Werzeugleiste + + +- ++ + Toggle ROM state C + ROM Status K ein-/ausblenden + + +- ++ + Toggle ROM state M + ROM Status B ein-/ausblenden + + +- ++ + Toggle ROM state I + ROM Status I ein-/ausblenden + + +- ++ + Toggle ROM state N + ROM Status N ein-/ausblenden + + +- ++ + Toggle ROM state U + ROM Status U ein-/ausblenden + + +- ++ + Check for other instances of this QMC2 variant on startup + Beim Start prüfen, ob eine andere Instanz dieser QMC2-Variante bereits ausgeführt wird + + +- ++ + Check single instance + Einzel-Instanz Prüfung + + +- ++ + Setup arcade mode + Acade Modus einstellen + +@@ -16020,262 +15958,247 @@ Lokale Maschinen-Einstellungen verwenden, mit globalen Einstellungen überschrei + &Frontend + + +- ++ + Application style (Default = use system's default style) + Anwendungs-Stil (Standard = verwende Standard-Stil des Systems) + + +- ++ + Automatically trigger a ROM check if necessary + ROM Prüfung automatisch auslösen, wenn benötigt + + +- +- +- ++ ++ ++ + Command + Kommando + + +- ++ + Launch emulation on double-click events (may be annoying) + Emulation bei Doppel-Klick Ereignissen starten (könnte nervig sein) + + +- ++ + Double-click activation + Aktivierung bei Doppel-Klick + + +- ++ + Toggle full screen + Vollbild-Modus umschalten + + +- ++ + Minimize when launching (non-embedded) emulators? + Minimieren beim Start eines (nicht eingebetteten) Emulators? + + +- +- +- +- ++ ++ ++ ++ + Category + Kategorie + + +- +- +- +- ++ ++ ++ ++ + Version + Version + + +- ++ + Check images and icons + Bilder und Icons überprüfen + + +- ++ + Analyze current machine + Aktuelle Maschine analysieren + + +- ++ + Copy machine to favorites + Maschine zu Favoriten hinzufügen + + +- ++ + Play (independent) + Spielen (unabhängig) + + +- ++ + Play (embedded) + Spielen (eingebettet) + + +- ++ + Check states of tagged ROMs + ROM Status markierter Sets prüfen + + +- ++ + Check template map + Abbildungsvorlage überprüfen + + +- ++ + Clear YouTube cache + YouTube Cache leeren + + +- ++ + Open ROMAlyzer (system mode) + ROMAlyzer öffnen (System Modus) + + +- ++ + Open ROMAlyzer (software mode) + ROMAlyzer öffnen (Software Modus) + + +- ++ + Tag current set + Aktuelles Sets markieren + + +- ++ + Untag current set + Markierung aufheben + + +- ++ + Toggle tag mark + Markierung umkehren + + +- ++ + Toggle tag / cursor down + Markierung umkehren / Cursor runter + + +- ++ + Toggle tag / cursor up + Markierung umkehren / Cursor rauf + + +- ++ + Tag all sets + Alle Sets markieren + + +- ++ + Untag all sets + Alle Markierungen aufheben + + +- ++ + Invert all tags + Alle Markierungen umkehren + + +- ++ + Tag visible sets + Markierung sichtbarer Sets setzen + + +- ++ + Untag visible sets + Markierung sichtbarer Sets aufheben + + +- ++ + Invert visible tags + Markierung sichtbarer Sets umkehren + + +- ++ + Full detail view + Detailansicht + + +- +- +- +- ++ ++ ++ ++ + Category view + Kategorieansicht + + +- +- +- +- ++ ++ ++ ++ + Version view + Versionsansicht + + +- ++ + Custom view + Angepasste Ansicht + + +- ++ + Run external ROM tool + Externes ROM Werkzeug ausführen + + +- ++ + Run ROM tool for tagged sets + Externes ROM Werkzeug für alle markierten Sets ausführen + + +- ++ + Check software-states + Software-Stati prüfen + + +- ++ + Launch arcade mode + Arcade Modus ausführen + + +- ++ + Software-list view-mode flat + Bekannte Software als Liste anzeigen + + +- ++ + Software-list view-mode tree + Bekannte Software als Baum anzeigen + + +- ++ + Increase rank + Rang erhöhen + + +- ++ + Decrease rank + Rang verringern + + +- ++ + Return key + Return-Taste + + +- ++ + Activate item + Element aktivieren + + +- +- ++ ++ + Reset to default font + Auf Standard-Schriftart zurücksetzen + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- um mehrere Order anzugeben, kann als Trennzeichen Semikolon (;) verwendet werden +- +- ++ + + + +@@ -16285,541 +16208,546 @@ Lokale Maschinen-Einstellungen verwenden, mit globalen Einstellungen überschrei + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ um mehrere Order anzugeben, kann als Trennzeichen Semikolon (;) verwendet werden ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + um mehrere Dateien anzugeben, kann als Trennzeichen Semikolon (;) verwendet werden + + +- ++ + sorting machine list by %1 in %2 order + Sortiere Maschinenliste nach %1 in %2er Reihenfolge + + +- ++ + 7z error + 7z Fehler + + +- +- ++ ++ + FATAL: can't open icon file %1 + FATAL: kann Icon Datei %1 nicht öffnen + + +- +- ++ ++ + Cabinet file + Gehäuse Datei + + +- ++ + &Foreign emulators + &Fremde Emulatoren + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + Vordefinierte fremde IDs für diesen Emulator festlegen, diese können dann direkt aus der Liste der 'fremden Emulatoren' gestartet werden + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + Icon für diesen fremde Emulator auswählen (oder gedrückt halten um Menü anzuzeigen) + + +- +- ++ ++ + Default icon + Standard Icon + + +- +- ++ ++ + No icon + Kein Icon + + +- ++ + N/A + N/A + + +- ++ + Choose XML cache database file + Datei für XML Cache Datenbank auswählen + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + Diese Aktion entfernt <b>alle</b> existierenden Benutzerdaten und erstellt die Datenbank neu. + Bist Du sicher, dass Du das tun willst? + + +- ++ + &Yes + &Ja + + +- ++ + &No + &Nein + + +- ++ + Choose user data database file + Datei für Benutzerdaten Datenbank auswählen + + +- ++ + Choose 7-zip tool + 7-Zip Werkzeug auswählen + + +- ++ + Choose machine list database file + Datei für Maschinenlisten Datenbank auswählen + + +- ++ + Choose software list cache database file + Datei für Software-Listen Cache Datenbank auswählen + + +- ++ + Choose dat-info database file + Datei für DAT-Info Datenbank auswählen + + +- ++ + Choose MESS machine info DB + MESS Maschinen Info DB auswählen + + +- ++ + Choose MAME emulator info DB + MAME Emulator Info DB auswählen + + +- ++ + Choose MESS emulator info DB + MESS Emulator Info DB auswählen + + +- ++ + Choose compressed preview file + Komprimierte Vorschau-Datei auswählen + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + ZIP Archive + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + 7z Archive + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + Alle Dateien + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + Unterstützte Archive + + +- ++ + Choose compressed flyer file + Komprimierte Flyer-Datei auswählen + + +- ++ + Choose compressed icon file + Komprimierte Icon-Datei auswählen + + +- ++ + Choose compressed cabinet file + Komprimierte Gehäuse-Datei auswählen + + +- ++ + Choose compressed controller file + Komprimierte Controller-Datei auswählen + + +- ++ + Choose compressed marquee file + Komprimierte Marquee Datei auswählen + + +- ++ + Choose compressed title file + Komprimierte Titel-Datei auswählen + + +- ++ + Choose compressed PCB file + Komprimierte PCB-Datei auswählen + + +- ++ + Choose compressed software snap file + Komprimierte Software Snapshot Datei auswählen + + +- +- +- ++ ++ ++ + Cabinet directory + Gehäuse-Verzeichnis + + +- +- ++ ++ + Controller file + Controller Datei + + +- +- +- ++ ++ ++ + Controller directory + Controller-Verzeichnis + + +- +- ++ ++ + PCB file + PCB Datei + + +- +- +- ++ ++ ++ + PCB directory + PCB Verzeichnis + + +- ++ + Choose Qt style sheet file + Qt Style Sheet Datei auswählen + + +- ++ + Qt Style Sheets (*.qss) + Qt Style Sheets (*.qss) + + +- ++ + Choose cabinet directory + Gehäuse-Verzeichnis auswählen + + +- ++ + Choose controller directory + Controller-Verzeichnis auswählen + + +- ++ + Choose PCB directory + PCB Verzeichnis auswählen + + +- ++ + Choose cookie database file + Datei für Cookie-Datenbank auswählen + + +- ++ + Choose ROM tool + ROM Werkzeug auswählen + + +- +- +- ++ ++ ++ + Choose working directory + Arbeitsverzeichnis auswählen + + +- ++ + Choose machine favorites file + Maschinen-Favoriten Datei auswählen + + +- ++ + Choose machine list cache file + Cache Datei für Maschinenliste auswählen + + +- ++ + Choose software state cache directory + Software Status Cache Verzeichnis auswählen + + +- ++ + Choose general software folder + Allgmeines Software-Verzeichnis auswählen + + +- ++ + Choose MAME machine info DB + MAME Maschinen Info DB auswählen + + +- ++ + Choose software info DB + Software Info DB auswählen + + +- ++ + Choose catver.ini file + Datei catver.ini auswählen + + +- ++ + Choose category.ini file + Datei category.ini auswählen + + +- ++ + Scaled cabinet + Gehäusebilder skalieren + + +- ++ + Style sheet + Style Sheet + + +- ++ + Scaled controller + Controller-Bilder skalieren + + +- ++ + Show progress texts + Fortschrittstexte anzeigen + + +- ++ + Scaled PCB + PCB-Bilder skalieren + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + Qt Style Sheet datei (*.qss, leer bedeutet kein Style Sheet) + + +- ++ + Browse Qt style sheet file + Qt Style Sheet Datei auswählen + + +- ++ + Cabinet directory (read) + Gehäuse-Verzeichnis (lesen) + + +- ++ + Browse cabinet directory + Gehäuse-Verzeichnis auswählen + + +- ++ + Controller directory (read) + Controller-Verzeichnis (lesen) + + +- ++ + Browse controller directory + Controller-Verzeichnis auswählen + + +- +- ++ ++ + Marquee file + Marquee Datei + + +- +- +- ++ ++ ++ + Marquee directory + Marquee Verzeichnis + + +- +- ++ ++ + Title file + Titel Datei + + +- +- +- ++ ++ ++ + Title directory + Titel Verzeichnis + + +- ++ + Choose marquee directory + Marquee-Verzeichnis auswählen + + +- ++ + Choose title directory + Titel-Verzeichnis auswählen + + +- ++ + Scaled marquee + Marqueebilder skalieren + + +- ++ + Scaled title + Titelbilder skalieren + + +- ++ + Marquee directory (read) + Marquee-Verzeichnis (lesen) + + +- ++ + Browse marquee directory + Marquee-Verzeichnis auswählen + + +- ++ + Title directory (read) + Titel Verzeichnis (lesen) + + +- ++ + Browse title directory + Titel-Verzeichnis auswählen + + +- ++ + Front end log size + Frontend Log Größe + + +- ++ + Maximum number of lines to keep in front end log browser + Maximale Anzahl von Zeilen, die im Frontend Log Browser gehalten werden + + +- ++ + Front end log file + Frontend Log Datei + + +- ++ + Front end log file (write) + Frontend Log Datei (schreiben) + + +- ++ + Browse front end log file + Frontend Log Datei auswählen + + +- ++ + Choose front end log file + Frontend Log Datei auswählen + + +- ++ + Use HTTP proxy + HTTP Proxy verwenden + + +- ++ + Host / IP + Host / IP + + +- ++ + Hostname or IP address of the HTTP proxy server + Hostname oder IP Adresse des HTTP Proxy Servers + + +- ++ + Port + Port + + +- ++ + Port to access the HTTP proxy service + Port zum Zugriff auf den HTTP Proxy Dienst + + +- ++ + User ID + Benutzer ID + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + Benutzer ID zum Zugriff auf den HTTP Proxy Dienst (leer = keine Authentifikation) + + +- +- Password +- Passwort +- +- +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + Verwendung eines HTTP Proxies beim Zugriff auf das Web aktivieren/deaktivieren + +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- Passwort zum Zugriff auf den HTTP Proxy Dienst (leer = keine Authentifikation) +- + + + PCB +@@ -17307,42 +17235,42 @@ Bist Du sicher, dass Du das tun willst? + + QObject + +- ++ + M.A.M.E. Catalog / Launcher II v + M.A.M.E. Catalog / Launcher II v + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + Standard + + +- +- ++ ++ + correct + korrekt + + +- ++ + incorrect + inkorrekt + + +- ++ + mostly correct + beinahe korrekt + + +- ++ + not found + nicht gefunden + + +- ++ + + + +@@ -17351,29 +17279,29 @@ Bist Du sicher, dass Du das tun willst? + unbekannt + + +- ++ + Import from... + Importieren von... + + +- +- ++ ++ + Export machine-specific MAME configuration + Maschinen-spezifische MAME Konfiguration exportieren + + +- +- ++ ++ + Import machine-specific MAME configuration + Maschinen-spezifische MAME Konfiguration importieren + + +- ++ + Setting up the GUI, please wait... + GUI wird eingerichtet, bitte warten... + + +- ++ + GIT %1 + GIT %1 + +@@ -17414,18 +17342,18 @@ Bist Du sicher, dass Du das tun willst? + kein / schlechter Dump + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + SDL Joystick Unterstützung aktiviert - verwende SDL v%1.%2.%3 + + +- ++ + Phonon features enabled - using Phonon v%1 + Phonon Features aktiviert - verwende Phonon v%1 + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + Videospieler: XML-Fehler: fataler Fehler in Zeile %1, Spalte %2: %3 + +@@ -17497,19 +17425,19 @@ Bist Du sicher, dass Du das tun willst? + Status-Info für Software-Liste '%1': L:%2 K:%3 B:%4 I:%5 N:%6 U:%7 + + +- ++ + + yes + ja + + +- ++ + + no + nein + + +- ++ + + partially + teilweise +@@ -21038,7 +20966,7 @@ Bist Du sicher, dass Du das tun willst? + + + +- ++ + Choose mame.ini + Andere mame.ini Datei auswählen + +@@ -21055,7 +20983,7 @@ Bist Du sicher, dass Du das tun willst? + + + +- ++ + Choose ui.ini + Andere ui.ini Datei auswählen + +@@ -21178,178 +21106,179 @@ Bist Du sicher, dass Du das tun willst? + Einstellungen vollständig + + +- +- ++ ++ + &Next > + &Weiter > + + +- +- ++ ++ + < &Back + < &Zurück + + +- +- ++ ++ + &Cancel + Abbre&chen + + +- +- ++ ++ + &Finish + &Abschließen + + +- +- +- ++ ++ ++ + Yes + Ja + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + Nein + + +- ++ + %1.%2+ required + %1.%2+ erforderlich + + +- ++ ++ + +- ++ + +- + Unknown + Unbekannt + + +- ++ + can't parse version info + kann Versions-Info nicht parsen + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + Emulator startet nicht + + +- +- ++ ++ + No ini-file found + Keine Ini-Datei gefunden + + ++ + +- + Couldn't determine ini-path + Kann den Ini-Pfad nicht ermitteln + + +- +- ++ ++ + incompatible binary + inkompatible Datei + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + Kein Ergebnis + + +- ++ + importing emulator settings from '%1' + Importiere Emulator Einstellungen von '%1' + + +- +- ++ ++ + option '%1' with value '%2' ignored + Option '%1' mit Wert '%2' ignoriert + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + WARNUNG: unbekannte Option '%1' in Zeile %2 ignoriert + + +- +- ++ ++ + option '%1' with value '%2' imported + Option '%1' mit Wert '%2' importiert + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + WARNUNG: fehlender Wert in Zeile %1, Option '%2' ignoriert + + +- +- ++ ++ + ERROR: can't open '%1' for reading + FEHLER: kann '%1' nicht zum Lesen öffnen + + +- ++ + done (importing emulator settings from '%1') + Fertig (Importiere Emulator Einstellungen von '%1') + + +- ++ + importing front-end settings from '%1' + Importiere Frontend Einstellungen von '%1' + + +- ++ + done (importing front-end settings from '%1') + Fertig (Importiere Frontend Einstellungen von '%1') + + ++ + + + +@@ -21357,74 +21286,73 @@ Bist Du sicher, dass Du das tun willst? + + + +- + Check result pending... + Prüfresultat ausstehend... + + +- +- ++ ++ + Import emulator settings from %1 + Emulator-Einstellungen von %1 importieren + + +- +- ++ ++ + Import front-end settings from %1 + Frontend-Einstellungen von %1 importieren + + +- ++ + Import both emulator and front-end settings + Emulator- und Frontend-Einstellungen importieren + + +- ++ + Import nothing + Nichts importieren + + +- ++ + Default + Standard + + +- +- ++ ++ + Choose emulator executable file + Ausführbare Emulator Datei auswählen + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Alle Dateien (*) + + +- ++ + Choose working directory + Arbeitsverzeichnis auswählen + + +- ++ + Choose ROM path + ROM Pfad auswählen + + +- ++ + Choose sample path + Sample Verzeichnis auswählen + + +- ++ + Choose hash path + Hash Verzeichnis auswählen + + +- +- ++ ++ + Ini files (*.ini) + Ini Dateien (*.ini) + +@@ -23571,23 +23499,23 @@ Bist Du sicher, dass Du das tun willst? + + Welcome + +- ++ + Error + Fehler + + +- ++ + The specified file isn't executable! + Die angegebene Datei ist nicht ausführbar! + + +- +- ++ ++ + All files (*) + Alle Dateien (*) + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23643,7 +23571,7 @@ Jetzt beenden, einmalig akzeptieren oder vollständig ignorieren? + Abbre&chen + + +- ++ + Choose ROM path + ROM Pfad auswählen + +@@ -23653,7 +23581,7 @@ Jetzt beenden, einmalig akzeptieren oder vollständig ignorieren? + ROM Pfad auswählen + + +- ++ + Choose sample path + Sample Verzeichnis auswählen + +@@ -23663,8 +23591,8 @@ Jetzt beenden, einmalig akzeptieren oder vollständig ignorieren? + Sample Verzeichnis auswählen + + +- +- ++ ++ + Choose emulator executable file + Ausführbare Emulator Datei auswählen + +@@ -23679,37 +23607,37 @@ Jetzt beenden, einmalig akzeptieren oder vollständig ignorieren? + Ausführbare Emulator Datei auswählen + + +- ++ + Default + Standard + + +- ++ + Choose working directory + Arbeitsverzeichnis auswählen + + +- ++ + Choose hash path + Hash Verzeichnis auswählen + + +- ++ + Single-instance check + Einzel-Instanz Prüfung + + +- ++ + &Exit + &Beenden + + +- ++ + &Once + &Einmal + + +- ++ + &Ignore + &Ignorieren + +@@ -23902,49 +23830,49 @@ Jetzt beenden, einmalig akzeptieren oder vollständig ignorieren? + + + +- ++ + FLV 240P + FLV 240P + + + +- ++ + FLV 360P + FLV 360P + + + +- ++ + MP4 360P + MP4 360P + + + +- ++ + FLV 480P + FLV 480P + + + +- ++ + MP4 720P + MP4 720P + + + +- ++ + MP4 1080P + MP4 1080P + + + +- ++ + MP4 3072P + MP4 3072P + + + +- ++ + Start / pause / resume video playback + Video Wiedergabe starten / pausieren / fortsetzen + +@@ -23955,20 +23883,16 @@ Jetzt beenden, einmalig akzeptieren oder vollständig ignorieren? + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + Verbleibend + + + +- ++ + Volume + Lautstärke + +@@ -24013,286 +23937,261 @@ Jetzt beenden, einmalig akzeptieren oder vollständig ignorieren? + Suchzeichenkette vorschlagen (gedrückt halten für Menü) + + +- ++ + Mute / unmute audio output + Audio-Ausgabe stummschalten / aktivieren + + +- ++ + Volume level + Lautstärke + + +- ++ + Video progress + Video-Fortschrittsanzeige + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + Puffer-Füllstand: %1% + + +- +- ++ ++ + Play this video + Dieses Video abspielen + + +- +- +- ++ ++ ++ + Copy video URL + Video-URL kopieren + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + Video-URL kopieren (kein Länderfilter) + + +- +- +- ++ ++ ++ + Copy author URL + Home-URL des Autors kopieren + + +- +- ++ ++ + Paste video URL + Video-URL einfügen + + +- +- ++ ++ + Local movie file... + Lokale Video Datei... + + +- ++ + Remove selected videos + Ausgewählte Videos entfernen + + +- +- +- ++ ++ + Full screen (return with toggle-key) + Vollbild (Rückkehr mit Umschalt-Taste) + + +- +- ++ ++ + Attach this video + Dieses Video zuordnen + + +- ++ + Auto-suggest a search pattern? + Suche-Zeichenkette automatisch vorschlagen? + + +- ++ + Auto-suggest + Autom. vorschlagen + + +- ++ + Enter string to be appended + Angefügte Zeichenkette eingeben + + +- ++ + Append... + Anhängen... + + +- ++ + Enter search string + Such-Zeichenkette eingeben + + +- ++ + Appended string + Angehängte Zeichenkette + + +- ++ + Enter the string to be appended when suggesting a pattern: + Zeichenkette, die dem Vorschlag immer angehängt werden soll: + + +- ++ + Valid placeholder macros: + Gültige Platzhalter: + + +- +- ++ ++ + All files (*) + Alle Dateien (*) + + +- +- ++ ++ + Choose movie file + Lokale Video Datei auswählen + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + Vollbild-Modus -- %1 drücken, um in den Fenstermodus zurückzukehren + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + Vollbild-Modus -- Umschalttaste drücken, um in den Fenstermodus zurückzukehren + + +- ++ + video player: the local movie file '%1' is already attached, ignored + Videospieler: die lokale Video Datei '%1' ist bereits zugeordnet, ignoriert + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + Videospieler: ein Video mit der ID '%1' ist bereits zugeordnet, ignoriert + + +- ++ + Buffering: %1% + Pufferung: %1% + + +- +- Loading +- Lade Video-Stream +- +- +- +- ++ + Playing + Wiedergabe + + +- +- ++ + Paused + Pausiert + + +- +- video player: playback error: %1 +- Videospieler: Wiedergabe-Fehler: %1 +- +- +- +- Video playback error: %1 +- Wiedergabe-Fehler: %1 +- +- +- ++ + Fetching info for video ID '%1' + Ermittle Infos für Video ID '%1' + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + Videospieler: Video-Info Fehler: ID= '%1', Status = '%2', Fehler-Code = '%3', Fehler-Text = '%4' + + +- +- +- ++ ++ ++ + Video info error: %1 + Video-Info Fehler: %1 + + +- ++ + video player: video info error: timeout occurred + Videospieler: Video-Info Fehler: Zeitüberschreitung der Anfrage + + +- ++ + video info error: timeout occurred + Video-Info Fehler: Zeitüberschreitung der Anfrage + + +- ++ + video info error: unknown reason + Video-Info Fehler: Grund unbekannt + + +- ++ + video player: video info error: %1 + Videospieler: Video-Info Fehler: %1 + + +- +- ++ + Return to windowed mode + Zu Fenster-Modus zurückkehren + + +- +- ++ + Full screen (press %1 to return) + Vollbild (Rückkehr mit %1) + + +- ++ + video player: video image info error: %1 + Videospieler: Videobild-Info Fehler: %1 + + +- ++ + video player: search request error: %1 + Videospieler: Suchanfrage-Fehler: %1 + + +- ++ + video player: search error: can't parse XML data + Videospieler: Suchanfrage-Fehler: kann XML Daten nicht parsen + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + Videospieler: kann die Video ID nicht aus der Antwort URL '%1' ermitteln -- bitte Entwickler informieren + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + Videospieler: kann die erhaltenen Bilddaten nicht mit der Video ID '%1' assoziieren -- bitte Entwickler informieren + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + Videospieler: kann das Bild für Video ID '%1' nicht im YouTube Cache Verzeichnis '%2' abspeichern -- bitte Berechtigungen prüfen + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + Videospieler: kann das Bild für Video ID '%1' nicht abspeichern, da das YouTube Cache Verzeichnis '%2' nicht existiert -- bitte korrigieren + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + Videospieler: der Download des Bildes für Video ID '%1' ist fehlgeschlagen, da die erhaltenen Bilddaten nicht gültig sind + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + Videospieler: der Download des Bildes für Video ID '%1' ist fehlgeschlagen, Fehlertext = '%2' + +diff --git a/data/lng/qmc2_el.ts b/data/lng/qmc2_el.ts +index a70789b7a..b28021bb6 100644 +--- a/data/lng/qmc2_el.ts ++++ b/data/lng/qmc2_el.ts +@@ -234,8 +234,8 @@ p, li { white-space: pre-wrap; } + + + +- +- ++ ++ + Artwork name + + +@@ -310,183 +310,183 @@ p, li { white-space: pre-wrap; } + + + +- +- ++ ++ + Select / deselect this artwork class for removal + + + +- +- ++ ++ + Enter a name for this artwork class (required) + + + +- +- ++ ++ + Choose... + + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + + + +- +- ++ ++ + System + + + +- +- ++ ++ + Software + + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + + + +- +- ++ ++ + On + + + +- +- ++ ++ + Off + + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + + + +- +- ++ ++ + Folder + + + +- +- +- +- ++ ++ ++ ++ + Archive + + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + + + +- +- ++ ++ + ZIP + + + +- +- ++ ++ + 7z + + + +- +- ++ ++ + Select archive format + + + +- +- ++ ++ + Supported archives + + + +- +- ++ ++ + ZIP archives + + + +- +- ++ ++ + 7z archives + + + +- +- ++ ++ + Image archive + + + +- +- ++ ++ + Image archive for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + + + +- +- ++ ++ + Browse image archive + + + +- +- +- ++ ++ ++ + All files (*) + + + +- +- ++ ++ + Image folder + + + +- +- ++ ++ + Image folder for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + + + +- +- ++ ++ + Browse image folder + + + +- ++ + Choose icon file + + + +- ++ + PNG files (*.png) + + +@@ -1218,7 +1218,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + + +@@ -1341,17 +1341,17 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + All files (*) + + +@@ -3444,42 +3444,42 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Name + + + +- ++ + Domain + + + +- ++ + Path + + + +- ++ + Value + + + +- ++ + Expiry date + + + +- ++ + Secure? + + + +- ++ + HTTP only? + + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + + +@@ -4459,7 +4459,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + + +@@ -4503,7 +4503,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + + +@@ -4550,7 +4550,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + + +@@ -4562,7 +4562,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + + +@@ -4572,27 +4572,27 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Close archive + + + +- ++ + Choose a unique configuration name + + + +- ++ + Unique configuration name: + + + +- ++ + Name conflict + + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5282,25 +5282,25 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + +@@ -5441,42 +5441,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + FtpReply + +- ++ + FTP directory listing for %1 + + + +- ++ + Name + + + +- ++ + Type + + + +- ++ + Size + + + +- ++ + Parent directory + + + +- ++ + File + + + +- ++ + Folder + + + +- ++ + Unknown + + +@@ -5973,212 +5973,212 @@ Use local value for option '%1', overwrite with global value or don&ap + + HtmlEditor + +- ++ + WYSIWYG + + + +- +- ++ ++ + HTML + + + +- ++ + &Load... + + + +- ++ + Load notes from file + + + ++ + +- + Load notes from an HTML file + + + ++ + + +- + Save current notes + + + ++ + +- + Page load progress + + + +- ++ + Hide menu + + + +- ++ + Read only + + + +- ++ + Show HTML + + + +- +- ++ ++ + HTML files (*.html *.htm) + + + +- +- +- +- ++ ++ ++ ++ + All files (*) + + + +- ++ + Select file to load + + + +- ++ + Select file to open + + + +- ++ + Save a copy + + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + + + +- ++ + Portable Network Graphics (PNG) (*.png);; + + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + + + +- ++ + Open image... + + + +- ++ + Insert image from URL + + + +- +- ++ ++ + Enter URL: + + + +- ++ + Create link + + + +- ++ + Font + + + +- ++ + Select font: + + + +- ++ + XS + + + +- ++ + S + + + +- +- ++ ++ + M + + + +- ++ + L + + + +- ++ + XL + + + +- ++ + XXL + + + +- ++ + Font size + + + +- ++ + Font size: + + + +- ++ + Zoom: %1% + + + +- ++ + Select color + + + +- ++ + Choose image file + + + +- +- +- ++ ++ ++ + No data available + + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7094,55 +7094,55 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Preview + + + +- ++ + Flyer + + + +- ++ + Cabinet + + + +- ++ + Controller + + + +- ++ + Marquee + + + +- ++ + Title + + + +- ++ + PCB + + + +- ++ + Software snap + + + +- +- ++ ++ + deactivated + + + +- ++ ++ + +- + activated + + +@@ -7570,42 +7570,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickCalibrationWidget + +- ++ + Enable/disable axis %1 + + + +- ++ + Axis %1: + + + +- ++ + Reset calibration of axis %1 + + + +- ++ + Current value of axis %1 + + + +- ++ + DZ: + + + +- ++ + Deadzone of axis %1 + + + +- ++ + S: + + + +- ++ + Sensitivity of axis %1 + + +@@ -7659,67 +7659,67 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickTestWidget + +- ++ + A%1: %v + + + +- ++ + Current value of axis %1 + + + +- ++ + B%1 + + + +- ++ + Current state of button %1 + + + +- ++ + H%1: 0 + + + +- ++ + Current value of hat %1 + + + +- ++ + T%1 DX: 0 + + + +- ++ + Current X-delta of trackball %1 + + + +- ++ + T%1 DY: 0 + + + +- ++ + Current Y-delta of trackball %1 + + + +- ++ + H%1: %2 + + + +- ++ + T%1 DX: %2 + + + +- ++ + T%1 DY: %2 + + +@@ -7779,460 +7779,460 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + + + +- +- +- ++ ++ ++ + good + + + +- +- ++ ++ + bad + + + +- +- +- ++ ++ ++ + preliminary + + + +- +- ++ ++ + supported + + + +- +- ++ ++ + unsupported + + + +- +- +- ++ ++ ++ + imperfect + + + +- ++ + yes + + + +- ++ + no + + + +- ++ + baddump + + + +- ++ + nodump + + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + + + +- ++ + On + + + +- ++ + Off + + + +- ++ + audio + + + +- ++ + unused + + + +- ++ + Unused + + + +- ++ + cpu + + + +- ++ + vector + + + +- ++ + lcd + + + +- ++ + joy4way + + + +- ++ + joy8way + + + +- ++ + trackball + + + +- ++ + joy2way + + + +- ++ + doublejoy8way + + + +- ++ + dial + + + +- ++ + paddle + + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + + + +- ++ + lightgun + + + +- ++ + doublejoy4way + + + +- ++ + vdoublejoy2way + + + +- ++ + doublejoy2way + + + +- ++ + printer + + + +- ++ + cdrom + + + +- ++ + cartridge + + + +- ++ + cassette + + + +- ++ + quickload + + + +- ++ + floppydisk + + + +- ++ + serial + + + +- ++ + snapshot + + + +- ++ + original + + + +- ++ + compatible + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + + + +- ++ + determining emulator version and supported sets + + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + + + +- +- ++ ++ + emulator info: type = %1, version = %2 + + + +- ++ + FATAL: couldn't determine emulator type and version + + + +- ++ + FATAL: couldn't determine the number of supported sets + + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + + + +- ++ + verifying ROM status for '%1' + + + +- +- +- ++ ++ ++ + ROM check - %p% + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + Updating + + + +- ++ + Name + + + +- ++ + Source file + + + +- ++ + Is BIOS? + + + +- ++ + Is device? + + + +- ++ + Runnable + + + +- ++ + Clone of + + + +- ++ + ROM of + + + +- ++ + Sample of + + + +- ++ + Year + + + +- ++ + Manufacturer + + + +- +- ++ ++ + ROM + + + +- +- +- +- ++ ++ ++ ++ + N/A + + + +- +- ++ ++ + error text = %1 + + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8240,552 +8240,552 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + loading XML data and recreating cache + + + +- ++ + BIOS + + + +- ++ + Size + + + +- ++ + CRC + + + +- +- ++ ++ + Merge + + + +- +- ++ ++ + Region + + + +- ++ + Offset + + + +- +- +- +- ++ ++ ++ ++ + Status + + + +- +- ++ ++ + Optional + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Device reference + + + +- ++ + Chip + + + +- +- +- ++ ++ ++ + Tag + + + +- +- ++ ++ + Type + + + +- ++ + Clock + + + +- ++ + Display + + + +- ++ + Rotate + + + +- ++ + Flip-X + + + +- ++ + Width + + + +- ++ + Height + + + +- ++ + Refresh + + + +- ++ + Pixel clock + + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- ++ ++ + Sound + + + +- ++ + Channels + + + +- ++ + Input + + + +- ++ + Service + + + +- ++ + Tilt + + + +- ++ + Players + + + +- +- ++ ++ + Buttons + + + +- ++ + Coins + + + +- ++ + Control + + + +- ++ + Minimum + + + +- ++ + Maximum + + + +- ++ + Sensitivity + + + +- ++ + Key Delta + + + +- ++ + Reverse + + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + + + +- ++ + year + + + +- ++ + manufacturer + + + +- ++ + machine name + + + +- ++ + ROM types + + + +- ++ + players + + + +- ++ + driver status + + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + + + +- ++ + version + + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + + + +- ++ + Configuration + + + +- ++ + Mask + + + +- ++ + Setting + + + +- ++ + Value + + + +- ++ + Driver + + + +- ++ + Emulation + + + +- ++ + Color + + + +- ++ + Graphic + + + +- ++ + Cocktail + + + +- ++ + Protection + + + +- ++ + Save state + + + +- ++ + Palette size + + + +- ++ + BIOS set + + + +- ++ + Description + + + +- ++ + Sample + + + +- ++ + Disk + + + +- ++ + MD5 + + + +- ++ + Index + + + +- ++ + Adjuster + + + +- ++ + Software list + + + +- ++ + Category + + + +- ++ + Item + + + +- ++ + Device + + + +- ++ + Mandatory + + + +- ++ + Interface + + + +- ++ + Instance + + + +- ++ + Brief name + + + +- ++ + Extension + + + +- ++ + RAM options + + + +- ++ + Option + + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + + + +- ++ + loading ROM state from cache + + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + + + +- ++ + %n cached ROM state(s) loaded + + +@@ -8793,54 +8793,54 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + + + +- ++ + CHD + + + +- ++ + ? + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- +- ++ ++ + ascending + + + +- +- ++ ++ + descending + + + +- ++ + , %n BIOS set(s) + + +@@ -8848,7 +8848,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + +@@ -8856,136 +8856,136 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + + + +- ++ + ROM state filter already active + + + +- ++ + please wait for ROM verification to finish and try again + + + +- ++ + please wait for reload to finish and try again + + + +- ++ + applying ROM state filter + + + +- ++ + State filter - %p% + + + +- ++ + done (applying ROM state filter, elapsed time = %1) + + + +- ++ + saving favorites + + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + + + +- ++ + saving play history + + + +- ++ + FATAL: can't open play history file for writing, path = %1 + + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + + + +- ++ + S: + + + +- ++ + T: + + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + +@@ -8993,7 +8993,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + +@@ -9001,83 +9001,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + + + +- +- ++ ++ + ROM state + + + +- +- ++ ++ + ROM status for '%1' is '%2' + + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9085,42 +9085,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + pre-caching icons from ZIP archive + + + +- ++ + Icon cache - %p% + + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + +@@ -9128,77 +9128,77 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from directory + + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- ++ + loading catver.ini + + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + + + +- ++ + done (loading catver.ini, elapsed time = %1) + + + +- ++ + %1 category / %2 version records loaded + + + +- ++ + Category view - %p% + + + +- ++ + %n category record(s) loaded + + +@@ -9206,7 +9206,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + + +@@ -9375,18 +9375,18 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + true + + + +- +- +- +- ++ ++ ++ ++ + false + + +@@ -9529,8 +9529,8 @@ Use local value for option '%1', overwrite with global value or don&ap + MainWindow + + ++ + +- + M.A.M.E. Catalog / Launcher II + + +@@ -9545,16 +9545,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + + + + +- ++ + Icon / Value + + +@@ -9563,10 +9563,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + + +@@ -9575,10 +9575,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + + +@@ -9587,10 +9587,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + + +@@ -9599,10 +9599,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + + +@@ -9611,10 +9611,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + + +@@ -9623,10 +9623,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + + +@@ -9635,9 +9635,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + + +@@ -9646,9 +9646,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + + +@@ -9669,9 +9669,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + + +@@ -9698,7 +9698,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + + +@@ -9922,9 +9922,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -10054,7 +10054,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + + +@@ -10111,11 +10111,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + + +@@ -10147,7 +10147,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + + +@@ -10229,10 +10229,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + + +@@ -10285,13 +10285,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10302,7 +10302,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10313,19 +10313,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10396,9 +10396,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10417,10 +10417,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10591,10 +10591,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + + +@@ -10604,10 +10604,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10943,11 +10943,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + + +@@ -11323,7 +11323,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -11528,12 +11528,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + + +@@ -11627,7 +11627,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11639,8 +11639,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + +@@ -11648,48 +11648,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + + + +- +- ++ ++ + Enter search string + + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + + + +- ++ + Scan the pause key used by the emulator + + + +- ++ + Scan pause key... + + + +- ++ + Toggle maximization of embedded emulator windows + + + +- ++ + Dock / undock this widget + + +@@ -11700,115 +11700,131 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embed emulator widget + + + +- ++ + &Embed + + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + + + +- ++ + &Kill + + + +- +- ++ ++ + Copy emulator command line to clipboard + + + +- +- ++ ++ + &Copy command + + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + + + +- ++ + Remove from favorites + + + +- +- ++ ++ + &Remove + + + +- ++ + Clear all favorites + + + +- +- ++ ++ + &Clear + + + +- ++ + Save favorites now + + + +- +- ++ ++ + &Save + + + +- ++ + Remove from played + + + +- ++ + Clear all played + + + +- ++ + Save play-history now + + + +- +- +- +- ++ ++ ++ ++ + Tab position + + ++ ++ ++ ++ ++ ++ Set tab position north ++ ++ ++ ++ ++ ++ ++ ++ &North ++ ++ + + + + + +- Set tab position north ++ Set tab position south + + + +@@ -11816,7 +11832,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &North ++ &South + + + +@@ -11824,7 +11840,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position south ++ Set tab position west + + + +@@ -11832,7 +11848,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &South ++ &West + + + +@@ -11840,7 +11856,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position west ++ Set tab position east + + + +@@ -11848,15 +11864,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &West +- +- +- +- +- +- +- +- Set tab position east ++ &East + + + +@@ -11864,101 +11872,93 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &East +- +- +- +- +- +- +- + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + sorry, devices cannot run standalone + + + +- ++ + No devices available + + + +- ++ + Default configuration + + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + + + +- +- ++ ++ + please wait for ROM verification to finish and try again + + + +- ++ ++ + +- + please wait for image check to finish and try again + + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + + + ++ + +- + ROM verification already active + + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11966,22 +11966,22 @@ Do you really want to check all ROM states now? + + + +- ++ + automatic ROM check triggered + + + +- ++ + image cache cleared + + + +- ++ + icon cache cleared + + + +- ++ + freed %n byte(s) in %1 + + +@@ -11989,7 +11989,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n entry(s) + + +@@ -11997,7 +11997,7 @@ Do you really want to check all ROM states now? + + + +- ++ + removed %n byte(s) in %1 + + +@@ -12005,7 +12005,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n file(s) + + +@@ -12013,363 +12013,363 @@ Do you really want to check all ROM states now? + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + YouTube on-disk cache cleared (%1) + + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + + + +- ++ + triggering an automatic ROM check on next reload + + + +- ++ + ERROR: no match found (?) + + + +- ++ + ProjectMESS page for '%1' / '%2' + + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + + + +- +- ++ ++ + Export to... + + + +- +- ++ ++ + <inipath>/%1.ini + + + +- +- +- +- ++ ++ ++ ++ + Select file... + + + +- +- ++ ++ + <p>No data available</p> + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + + + +- ++ + Negate search + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- ++ + emulator #%1 is already embedded + + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + + + +- +- +- ++ ++ ++ + paused + + + +- ++ + Release emulator + + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + + + +- ++ + To favorites + + + +- ++ + Kill emulator + + + +- ++ + &Kill emulator + + + +- ++ + WARNING: no matching window for emulator #%1 found + + + +- ++ + Embedding failed + + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12377,139 +12377,139 @@ Retry embedding? + + + +- ++ + Information + + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + + + +- +- ++ ++ + Scanning pause key + + + +- ++ + Are you sure you want to clear the favorites list? + + + +- ++ + Are you sure you want to clear the play history? + + + +- +- ++ ++ + Choose export file + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + + + +- +- ++ ++ + Choose import file + + + +- +- ++ ++ + WARNING: invalid inipath + + + +- +- ++ ++ + stopping current processing upon user request + + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + + + +- ++ + There are one or more running downloads. Quit anyway? + + + +- ++ + cleaning up + + + +- ++ + aborting running downloads + + + +- ++ + disconnecting audio source from audio sink + + + +- ++ + destroying audio effects dialog + + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + + + +- ++ + saving main widget layout + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + + + +- ++ + killing %n running emulator(s) on exit + + +@@ -12517,7 +12517,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + +@@ -12525,86 +12525,86 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + + + +- ++ + so long and thanks for all the fish + + + +- ++ + Welcome to QMC2 v%1! + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + loading style sheet '%1' + + + +- ++ + removing current style sheet + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + +@@ -12612,156 +12612,156 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + + + +- ++ + Add URL + + + +- ++ + Enter valid MP3 stream URL: + + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + + + +- ++ + Buffering %p% + + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + + + +- +- ++ ++ + Play tagged - %p% + + + +- ++ + Add favorites - %p% + + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + + + +- +- ++ ++ + Tag - %p% + + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12772,41 +12772,41 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + + + +- +- ++ ++ + Export global MAME configuration + + + +- ++ + Import from... + + + +- +- ++ ++ + Import global MAME configuration + + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + + +@@ -12963,14 +12963,12 @@ Please check the 'rompath' option in the global emulator configuration + + + +- + Go back + + + + + +- + Go forward + + +@@ -13023,8 +13021,8 @@ Please check the 'rompath' option in the global emulator configuration + + + +- +- ++ ++ + Enter search string + + +@@ -13049,88 +13047,28 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Enter URL + + + +- +- Open link +- +- +- +- +- Open link in new window +- +- +- +- +- Open image in new window +- +- +- +- +- Save link as... +- +- +- +- +- Copy link +- +- +- +- +- Save image as... +- +- +- +- +- Copy image +- +- +- +- +- Copy image address +- +- +- +- +- Reload +- +- +- +- +- Stop +- +- +- +- +- Copy +- +- +- +- +- Inspect +- +- +- +- ++ + WARNING: invalid network reply and/or network error + + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + + +@@ -13279,2782 +13217,2757 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Language + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + + + +- ++ + Show machine's description at the bottom of any images + + + +- ++ + Show machine name + + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + + + +- ++ + Restore saved machine selection at start and after reloading the machine list + + + +- ++ + Restore machine selection + + + +- ++ + Scaled preview + + + +- ++ + Show vertical machine status indicator in machine details + + + +- ++ + Machine status indicator + + +- +- +- Application language +- +- +- +- +- DE (German) +- +- + + +- ES (Spanish) +- +- +- +- +- EL (Greek) +- +- +- +- +- FR (French) +- +- +- +- +- IT (Italian) +- +- +- +- +- PL (Polish) +- +- +- +- +- PT (Portuguese) +- +- +- +- +- RO (Romanian) +- +- +- +- +- SV (Swedish) +- +- +- +- +- US (English) ++ Application language + + + +- ++ + Scaled cabinet + + + +- ++ + Scaled controller + + + +- ++ + Scaled marquee + + + +- +- ++ ++ + Show status bar + + + +- ++ + Show the menu bar + + + +- ++ + Show menu bar + + + +- ++ + Show short description of current processing in progress bar + + + +- ++ + Show progress texts + + + +- +- ++ ++ + Only when required + + + +- ++ + Retry loading images which weren't found before? + + + +- ++ + Retry loading images + + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + + + +- ++ + restart required + + + +- ++ + Scaled title + + + +- ++ + Scaled flyer + + + +- ++ + Application font (= system default if empty) + + + +- ++ + Browse application font + + + +- ++ + Scaled PCB + + + +- ++ + Emulator log size + + + +- ++ + Maximum number of lines to keep in emulator log browser + + + +- +- ++ ++ + unlimited + + + +- +- ++ ++ + lines + + + +- ++ + Front end log size + + + +- ++ + Maximum number of lines to keep in front end log browser + + + +- ++ + Application font + + + +- ++ + Style sheet + + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + + + +- ++ + Browse Qt style sheet file + + + +- ++ + GUI style + + + +- ++ + Application style (Default = use system's default style) + + + +- ++ + Smooth image scaling (nicer, but slower) + + + +- ++ + Smooth scaling + + + +- ++ + Image cache size + + + +- ++ + Image cache size in MB + + + +- ++ + MB + + + +- ++ + Use standard or custom color palette? + + + +- ++ + Log font + + + +- ++ + Font used in logs (= application font if empty) + + + +- ++ + Browse font used in logs + + + +- +- ++ ++ + Show tool bar + + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + + + +- ++ + Unify with title + + + +- ++ + Minimize when launching emulators? + + + +- ++ + Minimize on emulator launch + + + +- ++ + Check for other instances of this QMC2 variant on startup + + + +- ++ + Check single instance + + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + + + +- ++ + Suppress Qt messages + + + +- ++ + Show splash screen when starting up? + + + +- ++ + Show splash screen + + + +- ++ + Customize the tool-bar + + + +- ++ + Tool-bar... + + + +- +- ++ ++ + F&iles / Directories + + + +- ++ + Front end log file + + + +- ++ + Front end log file (write) + + + +- ++ + Browse front end log file + + + +- ++ + Favorites file + + + +- ++ + Force QMC2's working directory to be the same as the executable's path + + + +- ++ + Set working directory from executable + + + +- ++ + Play history file + + + +- ++ + Play history file (write) + + + +- ++ + Browse play history file + + + +- ++ + Data directory + + + +- ++ + Frontend data directory (read) + + + +- ++ + Browse frontend data directory + + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + + + +- ++ + Use catver.ini + + + +- ++ + Path to catver.ini (read) + + + +- ++ + Browse path to catver.ini + + + +- +- +- ++ ++ ++ + Preview directory + + + +- ++ + Preview directory (read) + + + +- ++ + Browse preview directory + + + +- +- +- ++ ++ ++ + Flyer directory + + + +- ++ + Flyer directory (read) + + + +- ++ + Browse flyer directory + + + +- +- +- ++ ++ ++ + Icon directory + + + +- ++ + Icon directory (read) + + + +- ++ + Browse icon directory + + + +- +- +- ++ ++ ++ + Cabinet directory + + + +- ++ + Cabinet directory (read) + + + +- ++ + Browse cabinet directory + + + +- +- +- ++ ++ ++ + Controller directory + + + +- ++ + Controller directory (read) + + + +- ++ + Browse controller directory + + + +- +- +- ++ ++ ++ + Marquee directory + + + +- ++ + Marquee directory (read) + + + +- ++ + Default palette + + + +- ++ + Edit the color palette + + + +- ++ + Edit color palette... + + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + + + +- ++ + Browse marquee directory + + + +- +- +- ++ ++ ++ + Title directory + + + +- ++ + Title directory (read) + + + +- ++ + Browse title directory + + + +- +- +- ++ ++ ++ + PCB directory + + + +- ++ + PCB directory (read) + + + +- ++ + Browse PCB directory + + + +- ++ + Software snap-shot directory (read) + + + +- ++ + Browse software snap-shot directory + + + +- +- +- ++ ++ ++ + reload required + + + +- +- +- ++ ++ ++ + SW snap folder + + + +- ++ + Software notes folder + + + +- ++ + Folder used to store personal notes about any software titles (write) + + + +- ++ + Browse software notes folder + + + +- ++ + Enable the use of a template for (empty) software notes + + + +- ++ + Software notes template + + + +- ++ + HTML file used as a template for software-notes (read) + + + +- ++ + Browse software notes template + + + +- ++ + Enable the use of category.ini + + + +- ++ + Use category.ini + + + +- ++ + Path to category.ini (read) + + + +- ++ + Browse path to category.ini + + + +- ++ + System notes folder + + + +- ++ + Enable the use of a template for (empty) system notes + + + +- ++ + System notes template + + + +- ++ + HTML file used as a template for system-notes (read) + + + +- ++ + Folder used to store personal notes about any systems (write) + + + +- ++ + Browse system notes folder + + + +- ++ + Browse system notes template + + + +- ++ + Load software information database (from history.dat) + + + +- ++ + Software information database - history.dat (read) + + + +- ++ + Save machine selection on exit and before reloading the machine list + + + +- ++ + Save machine selection + + + +- ++ + Import MAME machine information to DAT-info database + + + +- ++ + Browse machine favorites file + + + +- ++ + MAME machine information database - history.dat (read) + + + +- ++ + Browse software information database (history.dat) + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + + + +- ++ + Machine favorites file (write) + + + +- ++ + Define additional artwork classes for systems and software-list entries + + + +- ++ + Set up additional artwork classes... + + + +- ++ + Choose active image formats and their priorities (per artwork class) + + + +- ++ + Select image formats... + + + +- ++ + Load MAME machine information database (history.dat) + + + +- ++ + Machine info (MAME) + + + +- ++ + Load MESS emulator information database (messinfo.dat) + + + +- ++ + MESS emulator information database - messinfo.dat (read) + + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + + + +- ++ + Parent image / video fallback + + + +- ++ + Open the component setup dialog + + + +- ++ + Component setup... + + + +- ++ + Show animation when loading, filtering or tagging the machine list? + + + +- ++ + Show loading animation + + + +- ++ + Scaled software snapshot + + + +- ++ + Select individual fallback settings per artwork class + + + +- ++ + Individual fallback settings... + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + + + +- ++ + Browse MESS emulator information database (messinfo.dat) + + + +- ++ + Video snap folder + + + +- ++ + Video snap folder (read) + + + +- ++ + Browse video snap folder + + + +- ++ + Optimize catver.ini for faster loading + + + +- ++ + Setup the icon cache database + + + +- ++ + Enable ROM state filtering? + + + +- ++ + ROM state filter + + + +- ++ + Update delay + + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + + + +- ++ + No SW snaps for visible details + + + +- ++ + Select sort criteria + + + +- ++ + ROM state + + + +- ++ + Tag + + + +- ++ + Year + + + +- ++ + Manufacturer + + + +- ++ + ROM types + + + +- ++ + Players + + + +- ++ + Driver status + + + +- ++ + Source file + + + +- ++ + Rank + + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + + + +- ++ + Sort order + + + +- ++ + Select sort order + + + +- ++ + Ascending + + + +- ++ + Descending + + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + + + +- ++ + Play on sub-list activation + + + +- ++ + Display ROM status icons in master lists? + + + +- ++ + Show ROM status icons + + + +- ++ + Cursor position + + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + + + +- ++ + Visible + + + +- ++ + Top + + + +- ++ + Bottom + + + +- ++ + Center + + + +- ++ + Responsiveness + + + +- ++ + immediate + + + +- ++ + Show ROM state C (correct)? + + + +- ++ + Show ROM state M (mostly correct)? + + + +- ++ + Show ROM state I (incorrect)? + + + +- ++ + Show ROM state N (not found)? + + + +- ++ + Show ROM state U (unknown)? + + + +- ++ + Sort criteria + + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + + + +- ++ + independent + + + +- ++ + embedded + + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + + + +- ++ + Above / Left + + + +- ++ + Above / Center + + + +- ++ + Above / Right + + + +- ++ + Below / Left + + + +- ++ + Below / Center + + + +- ++ + Below / Right + + + +- ++ + Disable snaps + + + +- ++ + none + + + +- ++ + ms + + + +- ++ + Launch emulation on double-click events (may be annoying) + + + +- ++ + Double-click activation + + + +- ++ + SW snap position + + + +- ++ + Default launch-mode + + + +- ++ + Automatically trigger a ROM check if necessary + + + +- ++ + Auto-trigger ROM check + + + +- ++ + Display (or hide) device sets in master lists? + + + +- ++ + Show device sets + + + +- ++ + Display (or hide) BIOS sets in master lists? + + + +- ++ + Browse system manual folder + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + Show BIOS sets + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + &Shortcuts / Keys + + + +- +- ++ ++ + Redefine key sequence + + + +- ++ + Reset key sequence to default + + + +- ++ + Reset + + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + + + +- +- ++ ++ + Function / Key + + + +- ++ ++ + +- +- +- ++ ++ + Default + + + +- ++ + Custom + + + +- ++ + &Joystick + + + +- ++ + Enable GUI control via joystick + + + +- ++ + Enable joystick control + + + +- ++ + Rescan available joysticks + + + +- ++ + Rescan joysticks + + + +- ++ + Select joystick + + + +- ++ + List of available joysticks - select the one you want to use for GUI control + + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + + + +- ++ + Joystick information and settings + + + +- ++ + Axes: + + + +- ++ + Number of joystick axes + + + +- +- +- +- ++ ++ ++ ++ + 0 + + + +- ++ + Buttons: + + + +- ++ + Number of joystick buttons + + + +- ++ + Hats: + + + +- ++ + Number of coolie hats + + + +- ++ + Trackballs: + + + +- ++ + Number of trackballs + + + +- ++ + Automatically repeat joystick functions after specified delay + + + +- ++ + Auto repeat after + + + +- ++ + Repeat all joystick functions after how many milliseconds? + + + +- +- ++ ++ + ms + + + +- ++ + Event timeout + + + +- ++ + Process joystick events after how many milliseconds? + + + +- ++ + Calibrate joystick axes + + + +- ++ + Calibrate + + + +- ++ + Test all joystick functions + + + +- ++ + Test + + + +- ++ + Map joystick functions to GUI functions + + + +- ++ + Map + + + +- ++ + Remap a joystick function to the selected GUI function + + + +- ++ + Remap + + + +- ++ + Remove joystick mapping from selected GUI function + + + +- ++ + Remove + + + +- ++ + Active joystick mappings; double-click to remap joystick function + + + +- ++ + Joystick function + + + +- ++ + Network / &Tools + + + +- ++ + Zip tool + + + +- +- +- ++ ++ ++ + Command + + + +- ++ + External zip tool, i.e. "zip" (read and execute) + + + +- ++ + Browse for zip tool + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + + + +- ++ + ROM tool + + + +- ++ + External ROM tool (it's completely up to you...) + + + +- ++ + Browse ROM tool + + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + + + +- +- +- +- ++ ++ ++ ++ + Working directory + + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + + + +- ++ + Browse working directory of the ROM tool + + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + + + +- ++ + Copy tool output to front end log + + + +- ++ + Automatically close the tool-executor dialog when the external process finished + + + +- ++ + Close dialog automatically + + + +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + + + +- ++ + Use HTTP proxy + + + +- ++ + Host / IP + + + +- ++ + Hostname or IP address of the HTTP proxy server + + + +- ++ + Port + + + +- ++ + Port to access the HTTP proxy service + + + +- ++ + User ID + + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + + + +- +- Password +- +- +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- +- +- +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- +- +- +- ++ + Browser settings + + + +- ++ + Browse cookie database + + + +- ++ + Cookie database file (write) + + + +- ++ + Cookie database + + + +- ++ + Save and restore cookies used on web pages? + + + +- ++ + Restore cookies + + + +- ++ + Manage cookies stored in database + + + +- ++ + Manage stored cookies + + + +- ++ + Clear database + + + +- ++ + 7-zip tool + + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + + + +- ++ + Browse for 7-zip tool + + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + + + +- ++ + Machine list cache + + + +- ++ + Browse machine list cache file + + + +- ++ + Software list cache DB + + + +- ++ + Browse software list cache database file + + + +- ++ + Clean up user data database (removes obsolete entries) + + + +- ++ + Database file for caching the ouput from -listsoftware (write) + + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + + + +- ++ + Machine list database + + + +- ++ + Machine list database file (write) + + + +- ++ + Browse machine list database file + + + +- ++ + Foreign &emulators + + + +- ++ + Remove all cookies by recreating the database + + + +- ++ + Use native file dialogs + + + +- ++ + Kill emulators when QMC2 exits? + + + +- ++ + Kill emulators on exit + + + +- ++ + Terminate all other emulator instances when launching a new one? + + + +- ++ + One emulator at a time + + + +- ++ + Compressed cabinet file (read) + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + + + +- ++ + Browse compressed cabinet file + + + +- ++ + Compressed controller file (read) + + + +- ++ + Browse compressed controller file + + + +- ++ + Compressed marquee file (read) + + + +- ++ + Browse compressed marquee file + + + +- ++ + Switch between specifying a title directory or a compressed title file + + + +- ++ + MAME emulator information database - mameinfo.dat (read) + + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a preview directory or a compressed preview file + + + +- ++ + Compressed preview file (read) + + + +- ++ + Browse compressed preview file + + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + + + +- ++ + Compressed flyer file (read) + + + +- ++ + Browse compressed flyer file + + + +- ++ + Switch between specifying an icon directory or a compressed icon file + + + +- ++ + Compressed icon file (read) + + + +- ++ + Browse compressed icon file + + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + + + +- ++ + Switch between specifying a controller directory or a compressed controller file + + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + + + +- ++ + Compressed title file (read) + + + +- ++ + Browse compressed title file + + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + + + +- ++ + Compressed PCB file (read) + + + +- ++ + Browse compressed PCB file + + + +- ++ + Compressed software snap-shot file (read) + + + +- ++ + Browse compressed software snap-shot file + + + +- ++ + Load MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + + + +- ++ + Load MESS machine information database (sysinfo.dat) + + + +- ++ + MESS machine information database - sysinfo.dat (read) + + + +- ++ + Browse MESS machine information database (sysinfo.dat) + + + +- ++ + E&mulator + + + +- ++ + &Global configuration + + + +- +- ++ ++ + Executable file + + + +- ++ + Recreate user data database (removes <b>all</b> entries) + + + +- ++ + Emulator executable file (read and execute) + + + +- +- ++ ++ + Browse emulator executable file + + + +- ++ + Emulator log file + + + +- ++ + Emulator log file (write) + + + +- ++ + Browse emulator log file + + + +- ++ + Options template file + + + +- ++ + Options template file (read) + + + +- ++ + Browse options template file + + + +- ++ + ROM state cache + + + +- ++ + ROM state cache file (write) + + + +- ++ + Browse ROM state cache file + + + +- ++ + General software folder + + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + + + +- ++ + Browse general software folder + + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + + + +- +- ++ ++ + Browse working directory + + + +- ++ + Software state cache + + + +- ++ + Directory used to store individual state cache files for each software-list (write) + + + +- ++ + Browse software state cache directory + + + +- ++ + XML cache database + + + +- ++ + Database file for caching the output from -listxml (write) + + + +- ++ + Browse XML cache database file + + + +- ++ + User data database + + + +- ++ + Database file for storing/retrieving user data (write) + + + +- ++ + Browse user data database file + + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + + + +- ++ + Registered emulator's name + + + +- ++ + Replace emulator registration + + + +- ++ + Replace + + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + + + +- ++ + Icon + + + +- ++ + Name + + + +- ++ + Executable + + + +- ++ + Custom IDs + + + +- ++ + Register emulator + + + +- ++ + Emulator name + + + +- ++ + Deregister emulator + + + +- ++ + Import MESS emulator information to DAT-info database + + + +- ++ + Import MAME emulator information to DAT-info database + + + +- ++ + Import MESS machine information to DAT-info database + + + +- ++ + DAT-info database file + + + +- ++ + Browse DAT-info database file + + + +- ++ + DAT-info database file (write) + + + +- ++ + Machine info (MESS) + + + +- ++ + Emu info (MAME) + + + +- ++ + Emu info (MESS) + + + +- ++ + Software info + + + +- ++ + Import software information to DAT-info database + + + +- ++ + Browse MAME machine information database (history.dat) + + + +- ++ + Machine description + + + +- +- Machine name ++ ++ Machine name ++ ++ ++ ++ ++ Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) ++ ++ ++ ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) ++ ++ ++ ++ ++ pt_BR (Brazilian Portuguese) ++ ++ ++ ++ ++ ro (Romanian) ++ ++ ++ ++ ++ sv (Swedish) + + + +- +- Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) ++ ++ us (American English) + + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + + + +- ++ + Machine list cache file (write) + + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + + + +- ++ + Add + + + +- ++ + Remove + + + +- ++ + Command to execute the emulator (path to the executable file) + + + +- ++ + Apply settings + + + +- ++ + &Apply + + + +- ++ + Restore currently applied settings + + + +- ++ + &Restore + + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + + + +- ++ + &Default + + + +- ++ + Close and apply settings + + + +- ++ + &Ok + + + +- ++ + Close and discard changes + + + +- ++ + &Cancel + + + +- ++ + Minimize when launching (non-embedded) emulators? + + + +- +- +- +- ++ ++ ++ ++ + Category + + + +- +- +- +- ++ ++ ++ ++ + Version + + + +- ++ + Check all ROM states + + + +- ++ + Check images and icons + + + +- ++ + About QMC2 + + + +- ++ + Analyze tagged sets + + + +- ++ + Export ROM Status + + + +- ++ + Copy tagged sets to favorites + + + +- ++ + Online documentation + + + +- ++ + Clear image cache + + + +- ++ + Setup arcade mode + + + +- ++ + Clear ProjectMESS cache + + + +- ++ + Clear icon cache + + + +- +- ++ ++ + Open options dialog + + + +- ++ + Play (independent) + + + +- ++ + Play (embedded) + + + +- ++ + About Qt + + + +- ++ + Check states of tagged ROMs + + + +- ++ + Recreate template map + + + +- ++ + Check template map + + + +- +- ++ ++ + Stop processing / exit QMC2 + + + +- ++ + Clear YouTube cache + + + +- ++ + Toggle ROM state C + + + +- ++ + Toggle ROM state M + + + +- ++ + Toggle ROM state I + + + +- ++ + Toggle ROM state N + + + +- ++ + Toggle ROM state U + + + +- ++ + Tag current set + + + +- ++ + Untag current set + + + +- ++ + Toggle tag mark + + + +- ++ + Toggle tag / cursor down + + + +- ++ + Toggle tag / cursor up + + + +- ++ + Tag all sets + + + +- ++ + Untag all sets + + + +- ++ + Invert all tags + + + +- ++ + Tag visible sets + + + +- ++ + Untag visible sets + + + +- ++ + Invert visible tags + + + +- ++ + Hierarchical view + + + +- ++ + Run external ROM tool + + + +- ++ + Run ROM tool for tagged sets + + + +- ++ + Toggle full screen + + + +- ++ + Software-list view-mode flat + + + +- ++ + Software-list view-mode tree + + + +- ++ + Previous track (audio player) + + + +- ++ + Next track (audio player) + + + +- ++ + Fast backward (audio player) + + + +- ++ + Fast forward (audio player) + + + +- ++ + Stop track (audio player) + + + +- ++ + Pause track (audio player) + + + +- ++ + Play track (audio player) + + + +- ++ + Raise volume (audio player) + + + +- ++ + Lower volume (audio player) + + + +- ++ + Plus (+) + + + +- ++ + Minus (-) + + + +- ++ + Cursor down + + + +- ++ + End + + + +- ++ + Escape + + + +- ++ + Cursor left + + + +- ++ + Home + + + +- ++ + Page down + + + +- ++ + Page up + + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- +- +- ++ + + + +@@ -16064,737 +15977,752 @@ Please check the 'rompath' option in the global emulator configuration + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + + + +- ++ + please reload machine list for some changes to take effect + + + +- ++ + sorting machine list by %1 in %2 order + + + +- ++ + triggering automatic reload of machine list + + + +- ++ + Enter key + + + +- ++ + Analyze current machine + + + +- ++ + Copy machine to favorites + + + +- ++ + Reload machine list + + + +- ++ + Check machine's ROM state + + + +- ++ + Open ROMAlyzer (system mode) + + + +- ++ + Open ROMAlyzer (software mode) + + + +- ++ + Rebuild current machine + + + +- ++ + Rebuild tagged machines + + + +- ++ + Check software-states + + + +- ++ + Launch arcade mode + + + +- ++ + Increase rank + + + +- ++ + Decrease rank + + + +- ++ + Return key + + + +- ++ + Cursor right + + + +- ++ + Tabulator + + + +- ++ + Cursor up + + + +- ++ + Activate item + + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + + + +- +- ++ ++ + Reset to default font + + + +- +- ++ ++ + No style sheet + + + +- ++ + image cache size set to %1 MB + + + +- +- ++ ++ + Confirm + + + +- ++ + &Local + + + +- ++ + &Overwrite + + + +- ++ + Do&n't apply + + + +- ++ + please restart QMC2 for some changes to take effect + + + +- ++ + ascending + + + +- ++ + descending + + + +- ++ + 7z error + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- +- ++ ++ + Preview file + + + +- +- ++ ++ + Flyer file + + + +- +- ++ ++ + Icon file + + + +- +- ++ ++ + Cabinet file + + + +- +- ++ ++ + Controller file + + + +- +- ++ ++ + Marquee file + + + +- +- ++ ++ + Title file + + + +- +- ++ ++ + PCB file + + + +- +- ++ ++ + SW snap file + + + +- +- +- ++ ++ ++ + Custom IDs... + + + +- ++ + Full detail view + + + +- +- +- +- ++ ++ ++ ++ + Category view + + + +- +- +- +- ++ ++ ++ ++ + Version view + + + +- ++ + libarchive error + + + +- ++ + Choose Qt style sheet file + + + +- ++ + Qt Style Sheets (*.qss) + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + + + +- ++ + Choose preview directory + + + +- ++ + Custom view + + + +- ++ + N/A + + + +- ++ + Choose flyer directory + + + +- ++ + Choose icon directory + + + +- ++ + Choose cabinet directory + + + +- ++ + Choose controller directory + + + +- ++ + Choose marquee directory + + + +- ++ + Choose title directory + + + +- ++ + Choose PCB directory + + + +- ++ + Choose options template file + + + +- +- ++ ++ + Choose emulator executable file + + + +- ++ + Choose emulator log file + + + +- ++ + Choose XML cache database file + + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + + + +- ++ + &Yes + + + +- ++ + &No + + + +- ++ + Choose user data database file + + + +- ++ + Choose cookie database file + + + +- ++ + Choose zip tool + + + +- ++ + Choose 7-zip tool + + + +- ++ + Choose ROM tool + + + +- +- +- ++ ++ ++ + Choose working directory + + + +- ++ + Choose play history file + + + +- ++ + Choose machine list database file + + + +- ++ + Choose ROM state cache file + + + +- ++ + Choose software state cache directory + + + +- ++ + Choose general software folder + + + +- ++ + Choose front end log file + + + +- ++ + Choose data directory + + + +- ++ + Choose dat-info database file + + + +- ++ + Choose MAME machine info DB + + + +- ++ + Choose software info DB + + + +- ++ + Choose catver.ini file + + + +- ++ + Choose category.ini file + + + +- ++ + Choose compressed preview file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + + + +- ++ + Choose compressed flyer file + + + +- ++ + Choose compressed icon file + + + +- ++ + Choose compressed cabinet file + + + +- ++ + Choose compressed controller file + + + +- ++ + Choose compressed marquee file + + + +- ++ + Choose compressed title file + + + +- ++ + Choose compressed PCB file + + + +- ++ + Choose compressed software snap file + + + +- ++ + Choose software snap directory + + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + + + +- +- ++ ++ + Default icon + + + +- +- ++ ++ + No icon + + + +- ++ + &Foreign emulators + + + +- ++ + Choose machine favorites file + + + +- ++ + Choose machine list cache file + + + +- ++ + Choose software list cache database file + + + +- ++ + Choose MESS machine info DB + + + +- ++ + Choose MAME emulator info DB + + + +- ++ + Choose MESS emulator info DB + + + +- ++ + Choose software notes folder + + + +- ++ + Choose software notes template + + + +- +- ++ ++ + HTML files (*.html *.htm) + + + +- ++ + Choose system notes folder + + + +- ++ + Choose system notes template + + + +- ++ + Choose video snap folder + + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + shortcut map is clean + + + +- ++ + WARNING: shortcut map contains duplicates + + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + ERROR: couldn't initialize SDL joystick support + + + +- ++ + joystick map is clean + + + +- ++ + WARNING: joystick map contains duplicates + + +@@ -17276,28 +17204,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + + + +- ++ + incorrect + + + +- ++ + mostly correct + + + +- ++ + not found + + + +- ++ + + + +@@ -17306,54 +17234,54 @@ Are you sure you want to do this? + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + + + +- ++ + Import from... + + + +- +- ++ ++ + Export machine-specific MAME configuration + + + +- +- ++ ++ + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + + +@@ -17461,19 +17389,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + + + +- ++ + + no + + + +- ++ + + partially + +@@ -17521,7 +17449,7 @@ Are you sure you want to do this? + + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + + +@@ -20998,7 +20926,7 @@ Are you sure you want to do this? + + + +- ++ + Choose mame.ini + + +@@ -21012,7 +20940,7 @@ Are you sure you want to do this? + + + +- ++ + Choose ui.ini + + +@@ -21121,178 +21049,179 @@ Are you sure you want to do this? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21300,74 +21229,73 @@ Are you sure you want to do this? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + + + +- +- ++ ++ + Choose emulator executable file + + + +- +- +- +- ++ ++ ++ ++ + All files (*) + + + +- ++ + Choose working directory + + + +- ++ + Choose ROM path + + + +- ++ + Choose sample path + + + +- ++ + Choose hash path + + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23627,59 +23555,59 @@ Are you sure you want to do this? + + + +- ++ + Default + + + +- ++ + Error + + + +- ++ + The specified file isn't executable! + + + +- +- ++ ++ + Choose emulator executable file + + + +- +- ++ ++ + All files (*) + + + +- ++ + Choose working directory + + + +- ++ + Choose ROM path + + + +- ++ + Choose sample path + + + +- ++ + Choose hash path + + + +- ++ + Single-instance check + + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23687,17 +23615,17 @@ Exit now, accept once or ignore completely? + + + +- ++ + &Exit + + + +- ++ + &Once + + + +- ++ + &Ignore + + +@@ -23840,49 +23768,49 @@ Exit now, accept once or ignore completely? + + + +- ++ + FLV 240P + + + + +- ++ + FLV 360P + + + + +- ++ + MP4 360P + + + + +- ++ + FLV 480P + + + + +- ++ + MP4 720P + + + + +- ++ + MP4 1080P + + + + +- ++ + MP4 3072P + + + + +- ++ + Start / pause / resume video playback + + +@@ -23893,20 +23821,16 @@ Exit now, accept once or ignore completely? + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + + + + +- ++ + Volume + + +@@ -23951,286 +23875,261 @@ Exit now, accept once or ignore completely? + + + +- ++ + Mute / unmute audio output + + + +- ++ + Volume level + + + +- ++ + Video progress + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + + + +- +- ++ ++ + Play this video + + + +- +- +- ++ ++ ++ + Copy video URL + + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + + + +- +- +- ++ ++ ++ + Copy author URL + + + +- +- ++ ++ + Paste video URL + + + +- +- ++ ++ + Local movie file... + + + +- ++ + Remove selected videos + + + +- +- +- ++ ++ + Full screen (return with toggle-key) + + + +- +- ++ ++ + Attach this video + + + +- ++ + Auto-suggest a search pattern? + + + +- ++ + Auto-suggest + + + +- ++ + Enter string to be appended + + + +- ++ + Append... + + + +- ++ + Enter search string + + + +- ++ + Appended string + + + +- ++ + Enter the string to be appended when suggesting a pattern: + + + +- ++ + Valid placeholder macros: + + + +- +- ++ ++ + All files (*) + + + +- +- ++ ++ + Choose movie file + + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + + + +- ++ + video player: the local movie file '%1' is already attached, ignored + + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + + + +- ++ + Buffering: %1% + + + +- +- Loading +- +- +- +- +- ++ + Playing + + + +- +- ++ + Paused + + + +- +- video player: playback error: %1 +- +- +- +- +- Video playback error: %1 +- +- +- +- ++ + Fetching info for video ID '%1' + + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + + + +- +- +- ++ ++ ++ + Video info error: %1 + + + +- ++ + video player: video info error: timeout occurred + + + +- ++ + video info error: timeout occurred + + + +- ++ + video info error: unknown reason + + + +- ++ + video player: video info error: %1 + + + +- +- ++ + Return to windowed mode + + + +- +- ++ + Full screen (press %1 to return) + + + +- ++ + video player: video image info error: %1 + + + +- ++ + video player: search request error: %1 + + + +- ++ + video player: search error: can't parse XML data + + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + + +diff --git a/data/lng/qmc2_es.qm b/data/lng/qmc2_es.qm +index 88ad61ee0e060da46d3cb2b84ce21485ae30b787..dc5dc7a1280d805f406bf743cbf7a70f4da9169e 100644 +GIT binary patch +delta 18750 +zcmXAxcR)>V7{{M;-uJ!d?wf|JLK?J$ilUN|j6%wmRT5=~tSiahr+&%E4A~+{W&=^# +zqcS2{*~!TIJx+gpy7$(-=e+Oxtnc&O)-G&(@=c@eT~38Hy82;DQgO>>=SS^0`=}eh +znC}2!0rVIzk#)Y0Yz2G+Kco}zkBg9<@%3vGS(k(ByN@%h*bG1?0C(10BI5_IKkM4- +z-`~(X0O{cpX=nHN03OzeM90!92#2BvVYG{0M;}BIS05$dgKb=9(zh;mamaTzy-EP +z-bM}p5PX2Ve1hx?JXa@?I@<%NZ-5@=Ob4*c0M4REJ>$wH(#{n58K0k2&qYik?Q8{L +zWr)uw)pJo>iG0~7iL^7WkJTc49q;oW7Y&g}J4XQ6_yAuX17L?2@@O@3m>9{s>mOzO +z`w_^Sl@i&+$a=1M4`6SF+tNlN>%sx}#sPQC1)#@n;GY*G^8vi^9+BMHt`cdJf3N2Q +z^|c1@AB)eAl}P*lLM{P%a)w0KwGTi~ZxAg=OMUP#fc`PKZPgO#SiH;ugMbUe_eRpO +zhRB6LVoLymrvVp*`++2H@UxKgyB2u|_z67$LN4JxMoHvu?~_Q!T>u#50WffjMDFez +ziPS7xqKZzyjU03pSk^JIm{{wt)c_0|1>`Q?(};ijiPs!j0i^N-!1x)!y=@|qF53z) +z0k8W*b7VZwRk)o~f`K#Z05B~PxW9t|rpEwH#J`&}3wQ+{YJDE?YFrB>?KlYdgDJp2 +zyaxPSWKfB^G>IBSO0d&I{U{1S%8JgD9|D~vr1qPM%1LlwKsgIOMFS|%&#!u?m^AE7` +ziNG2P_3YCZiTjY+M`kX2oQEvNz-Jxn|#Gv^a0h{ZDN_GL?f?O;HsHUYLP +z4B!PC(t%L`v2nl-?gmn#0(R6HE$;!+1!zf6(Lr!kmYoB3AslGTMlo7&Y*LB0@^cZ; +z+xXi^*6u|;gWHOkf~USiEXZC216}6?g5wV$55|HpusfRRZ;3R?2ZUw4ffwRI_;)df +zG$3SW0@u=4B5#1NED|n-hJ2JU4>YD;86rs$pWS+?rprMl@5HyRS6^yJ^b-F6T((8~aP7f2zQ4 +zVWvw5# +z9)gFi0Cr+Kgm_ItkAD#cdK&{>Uj_r0&jH%(4Gdh72AoF(@-(p3{b1m#B!ETZB=QqV +zB+|$&^?be^2IcnxYMuy#^U#we+ri+%eBkHSN+etQOJq$=V92Bi(3?%Lgdx|^ZAII_ +zP=ggfn@@tFQNF-EYyrbmR=_33)^pngiL|c%dDhZhdd&KJ!|;f+Xwh#(Gqt(xdM%9j +ziEI021BA}PqrZG6j2!g=h@T&fF8l_}?I(=cEdsf>O$=8D@@t2PnQBM0CSFPM*r3s=Kj05xO9nZLLMymX#*@` +z1nBKH0d4RE;@b8`gLwjr6MF*}#9(<*F2L7Au%i42(2&Qla$EzTrd?pQtvxg)-~g*% +zVI1?efi?c;fNxX@8y=$LIod~@ud!BsE`*Jh#z5lS#X}l%zKx?;tg+UA4uHcw8Uu07 +zfMcc!zQuSR_W>J|*I(su&wQ!ZNRto7V}cr)D__#|hjmf-?S +z+XK~8#{)f)1Rvg{0pqLT)0DlycFu;+eip!umMZ^ +z0Mm%Q)lfIc8Si^K)J;|ZQ|y611$n>>;^1!<9>R$M9K@rOFOQd~=O;zE^Z?7EIpI(w@UpI)yvzv5!U>$hq%m-1FF57Y0?aYCa?02p +zn5$HB8i^x0&D}y^RzEo1f2qI;fm{Ro8NemwN~AxR|Dzt*@DH5v!MDKuG2u+SQh>w^ +z;!I<|04X!!8re((__&8__8gNB`In#B3uZU@xl7uVy+0N~fn=6ap(g^?+c>sO3BR=PzZ9XgF0 +zfVn2WH-rn(zDC1ezzu0+0`S|H8?rDAxB+q8h<(XGx7vwY8<;oQ(3Tq;ZVdcLH5b;< +z2tZuPg=P5z4Kfq&HgHrLRC7_=+XMY#x%lXR +zyv)Vx|M4rgH~>#YDCHJMVDz7`om&>v3OK$ux2nV&^xP#&ZtW#J{&jM0-BApaFa5do +zz4rlq{aPXuO}YO(vH&)Z;F23x0<(1Fl6~;?m+2DOx@vA?whh4kw_NJ=Bp@amxotgs +zfEy*}c8p#Rw9`Xw7rhPewkfx3P7v^KZgaa+(Gh9FxV_CtGa!rVxb(x9F%L50_B&h# +z{>W|aKyEu=*WJYcBXhlDI+vB0fZpvdcPh08v%PNInKJYX7mc{H_OF4Pbco9{HU#=* +zDtCz&fQ>uHU7mdxs8cX^mEppDzQkQ!Uj_X4lialnI^a{Tb44jtKpH>eZnwrfCd*GE +z^UmV#cE!ghsw6TmfA0RYvCxW-tN($Sd2{74J%A1F$35KH1{0g(+@lj$f!v)aYK*Oi +zZZ_nqhU+kdrgAUhGlAxw<6gY_2HXQv?o~xC@Z0)wuPVm??Uv2G@v6dLIgqRN#`OG{ +zj;p?n=I3R|z3W*Bq@|jBx1bHsu +z_T(2^iB=|_O?u?>7Vc>C>REiNMwpwArhF@><3KN;5a*j%>rXY|?LGPfM^bqELo)!@ +zzn93B-;~H&9OfM^>;~G%fOq)30C@dV-f>bTa6>-vj&CukOfl!%^&~(J$@z9$*8n^^ +z!#ihUDi!;lcQIH1)Hs>%e>%({Re%~B{ +ze|DAkFUSCzHV|I6_cT9f{SY8F75t#m?!Z?T^F#Ly03Z6-lpp%u8Mw`dCDPwlB(gC( +z_+j5(1NnQMAMTHCU`{+A+5!J?<^Vo4Li0A&sA3o;rQJ~Jf_?cJ=(iL6#St?A%M>z1a-s8C%F_WLY?KbfC^CS|3c=3>_ +zZNpEv)e|@HD>~rrH3*c*__<=OsiQJ>122j^(1KHi(4C+>$~jW_q*cy91D`jx;XF$cI*Q34f!V>xVpCdL0de&_c{JxrxU<8 +z4CW7hSpaNCB7b;1p1+RQ_+u5bfLq>&&oE8|`tT-ye8@b2pFR@#M-%zu#h)>Lx$q}K +zF%dOA&SysM!z?6@&&1S5bZ^{J@1fyOIgA3{xFLT!3SVnd$e&Kaz3ID*&l%SNLzn}9 +zw$&|Q=l<~LO0bmH-;~Igwv$K)$MEM9u)4q0fIol06KLBd{Dp_60RLI>d4thctqkV# +z6P^Lz_6?u^aTT!h)qDZk3b$(?e~DLMvXQuwFN_Pp%f;k_m%?uS|pM5+{u@fMgoZ#!moJq_CeG$xFHQhDljGl26dD7q`N+RF%LV?fihq9#SGC(HF{X*N +zUfY7NtHYNU8S=jtKgQx}3jga{DHrK#!CVYJ$#b{5V3p;?|#@Es^t%cl=G{n{h=0 +zE)m@bV_<1T#9+&E;G$!RVOuXC^Q(zzycMuxH%a5d?!cxlBTWaE0{49wX}UTB`0G1} +znJ31)E&jyZ0Qp}uY5AfRu>5dhaRS552Y+I@4|hucl349QwJJ~Xk77#GCf!U7h_yZH +z7@;A=kx-x;I}=AI{MCSAr0wO$0EN-SIsG|scBhD|h?i0tMO;7QJ@2?hIvN}SvS5!` +z+tgZLG>3FueFN*&p~Snx7vTL&iFd$tASr)|_u}1H82OQIT?SyTpF(^JFdpscL3*6W +zGI7Ok(sR>M;7;r$J>UGJH|ZOK`P!Wxq;Gg8@XlW)633Y&=p_27;k!xj8q8`8-bMo(!GT7w8#ZGHgl}a2M0b@Mad6N5+%T9+?1rf0EFk#z5wzl95LE2F!+x +zw85oct|222pcZiaHyQN?6Ty4FWNg$Fe7uc}-TsdyWb9$ol}3J%NOI&7X>ntTtZzOE +zoBkC~`*~L~?q~+Eu)ZXM!!ku1LMA@m2{hpjiE8x*b&wfk(lbnZI&ft22TU0b*oh%# +z*1YXgkLcCaDW~Ha! +zZjcpguweD5BP$Qi0P>;@S$P;u>R5BKN`qNm8w;|k$6}y%Z^@b`p}38;WG#IM+^w@j +zoMi?4Z6lIg6asv^YLfi@CT3j=NlK$#zz07hTX(0R|8yg%>50Ha){<>waKDECB|H8; +z!}33Y>|ELk(@^WrWKVOvz0hp3Hxg~=T`}1gH3W$99-Hq;8$o%?on#-v3%s?3oL+{u_u@Or +z$!-jE@kny^KK{K^DLMBf1k2qP?j)}Sjc`yUDQKIHVvUwu`H=$D{W2+pV1Q+568Sa> +zq*${Oc&|GWiI*R_{>>1W1Kwm6=C^t+x$XJ~$eq`sM|1O`n|71u%Q1lL`9fa!mI6DH +zNnQkH1AUM{UOG9Uq?$(F6rsOgR3VWLN+Z=x)WCI0t*5^UscxzO68eZ#Ps~PT$c(&= +zLH%T7ikR8lb3*VK@^wWnaD9f8uV<&>$58UE`)7c~Ey=fNjO`oWkZ;HAQBGM-zRyI- +zvqnMc!qb5Nl|_EG#@pX$NPdk*7dU1L`TY#@xLSYmr}bW-WgE$#Zs;-}+$4WzZU^eP +zKpfG+T5oDinX@mD#gwwy1AylAqH>E40M%Wo%Jv8F^8=}BjV17oFR6Mms$>llsCMc= +z;O>v7M(y#C_9~<%Q!pui+K-yds6~Ctk(y3y1H{>nnyw88II@H`I@=#Z$7b5JEDzxL +zQ`#)X2H3p4wAuEK(3{U(Ma`Ow0b;b3ws1=W$jG2pI!9oQJ*d^3Y#^f-QR}A|@20Pz +zHZubQE0H1t~E_RCnB81b$eyCVnj-rddWCDM2HIr6Kk#I3EYgU$uh%^h(qt%~WEp}FV} +z>*!W5e9Y$4)cx2`IAK7yEr|s(eIVVw3~!Ib(;YFs7}Q_U9baw%`80y=)Q<%g^?~l$ +zVFCQTa?!-{utn!<^dJ^C+{I{m=qfs-9|81mKlIKe +zPN6w{(flTipgEgS_dL3q<{UZ>+^Zk-4CR4*e@SyaJ^^>xL?Rh{isr7}349L+iS&$& +z=H{p1J>H_ZB^hWC8))u>P#}Ac(fnAv_lZ|%;l^+v!8x=j9J?V#qiNBT_jot2MRB#2 +zIj@*39XdJBMpnT&My23B-{ +zF +zYcL`m$Z$^7*jVeG*RqCZoUqAomok-jpK$kyZIIxY6hvL%u@#!UA+<0`u| +z^G4W&aXZ1xL$Jzy5h9VT-Nnq)hXen$4>Qlk>Mdw8vve7YYL+3h+&dbp+n>yOFb{n1 +zLS|i%4L-!;53|{TPYg|FZM@N&A1`FK<8py@oy}|y1_M`;%4`o|5Pve8*L8zF~!y`bHwT?aq97ylv0H%%?dv +z*FGF)K3(xp?n)LzT3Z`_?96(9#aL(dfDLfOWgYlNT;1AQxpfr_4M3;R)lfX!I@EAN +z02^O;0+sPB7NtZNlR<3yS`$>@lx+GpbkX-Fv6u+7!mS1@W~mAAbywNU +zk+>#zidd{a#>ZCcS?sGq;Nd8ncN`1(lU{70>vNPeYT1(2H9*c=u%$Ar3TA(iND>pp +zLv1{5{o~lmicsK6o!KhC0_=&*k;oflNF*EoJzs@wIs?(n)>R*)W6684#Wn9@Jr|yq +zNXK@lXJs1O*aPL(G6%MK*+%RPxk_Zsyx5j2DL^_sXQ{z*ps!X-Wa}@p)cwDJG;G6C +zi&3l|Fr973w1WR~mu=5Z$5dNg&p4UHR&?xt(hs!qE!(+kIHqAyZ0A3fxTu)zQN;qY +z!0OG`n!or~G_x~TPHV`HxTFJ}ksx-rbJVYnXGb&gfSWsm9sST7$UbX!^cVIk!-mxJ +zd^I~(eh%Q?26p^5ZrFokEYoWY&~`)E89UUP#uc$M&H_fQ8xq-wzwFF_B;bdKva|8| +zXx2;E*^8z?4-RDKo?D+oNI>Q?Tm?ZBgsb +zVK;uDOqA4&-4xKNuG`J-b;0<4{wOPdgl?Q*3&c7dkOjNOlThKcXv|x|X +zf~enHR?!0eVnzge8q@*n)f`sY6<46$ZdUmq5cnMl63Oi??A59?;1Z13n=R-$QcBpH +zXN`f(yujW~x{GS!5cVMe^%O@#_OaCrV2uy5&qh7*lrmORB7U^*Ff{9_jP%1)BQ8}& +zmbC%arc5S_OTbXrQYNcR1oGNPCO@|bh{8su?ukWY;D0i;egP2osWOebDR4W&WtwN` +zI^B;V&jEL>NTyrW0I0%BobO<*%y5&n%)}mBO1OB)!BKzQOXgCDx^L|9dLD?8NY3q( +zxwb%ED}A`kb$nM$`zOoX)F*&8?I`Qwja}EsWLcL843Z&ZWgeduz?s|2Jmb&|8qbz_ +z-bc@xu9f*Xqji2Nkol&e)HC(Cth<3T@P?)`zZ@fM3U-wBIQI$cs8K^%Z|4AD)Ik=2 +z4Jyufqb%_2aP*wlWqm(>!9emz7JM0nsE4AM;AqXK<%@?L%`JLY%fi1+2R7-fY@8+= +z&jpc1U`U47i)E3mFnLW572i3Uw|CB!MK`wun)J1v6;Tpdrv|cUn~j)dR?4EiEHQa) +zDv@5ED0;Lt=bJAUN3=B$${8V>ZXX1+c(z2=&ssLKcnFZ8k+M0L?*e_ZMIuYwESt;6 +zVy*E;Hdlt-*vx4XNy19m+@6>??9s{Q&sqm$=_9ci-~B+A_^z#ax1tBKWp{Q0>$|X? +zG5uvL4`P8i^QvssNYsDdpOdW)hy^;$PqyJ-E98TXEO8O)+yO$Fb)G~n;O}%m$)y= +z1G3B(m>9aWkY#k<7w6j(|>mnB!y&`+ATZBvXTlVrBW^C=VWv?r+nC`Jt_IC6i^m*T9Z^xR0 +z*uH&B{f0HNnq+*h6}htSjg|w$_xJ%Q^qJg|{pe5u{I0#Sy6x$}&JL6Pw8Av3$q(7D +zXgt`Xon(Lg@_-B;DsWEAfmpf-913^bw`l^|f}b_>j39Kv=ZPRF7h^f~$WKu2$9atY +z!vr0Kpujp%Flyfud?53n(CE`O;8rCGO*}EQCUuZV>pn|l!$%5c|GmaS{I}4`?m3Wi +zI-%7(^qB!fu&mpugMZT`U4trlE2U{c&DP;mQ=TBx0q;67>wa)sdW;4Z-IDxs?q{aKNP +z&{a1b<>Kc;SFcjwYib1V_4s>v1wywY=+Ca(3qINs)Gyiye%H_uFO3p<>{I~1uuAB; +z1=G)mTO_iuT|)2nwqOJ{M}z>G08CRZ^m}j-D7Qg$a5m>-ZNva)*D(!R3j@V@XqdMo +zvW{3LfE2>DE!P5#+|zWw1c4#VTOWG +z@7_X$$8w;_zl4asXe@OXB(kv+#VTiOeUeg$)EoyEzDS6?jde=S4I%P5hJkY^A(oD)bKW_Bp(rG?pO?L +zh`liL0($Wlf9lz9tT3};1~yek3A0lpQR!Q0AjHQ11n&1)VQwLw?7A#r-uzwIj#wzn +zZ-ys1`js&MHSXea6JbFr-uJM>f*w%Na&0N-ozMxCr3!KVY5|tk2?;kafpv_*DF@Wo +zFL(;e_UGcb!!cpi=mHeHnhC3lXW?|s1!2|oWPn-k{!vu8Hqg`W>+$C-;1=dfq+DNN +zwW%BMZ}Wt8{+QDZ%NN!S&A|6k29%KJ2IRos)vy7>xQ)?$ZQzERjVE*@R^hn>QX-v@D3N`##^ +zuo`@{N!a-SFEYhK*!dY(waa*6w;`VRpLN1+tfSbB20~g3T$B|FLR!XHfF(yH@(q8~ +z^Pz{3R^1rr>PKR&YoPvYm~gl+hL|Cpg(EGFq0Bl+I6Ar+aCasON5?ip@vozBED60& +zRZod5oCqftW&$z)Amqpg0qZ_o$Z7Nvy-B2S#&{fX%dCVm_IrUP3=(qN;rdJ-Dip|q +zfj@9w_?L_D${69&Y&_BZehGzbV_+D$yFs{WQ3&)(L*Z&dH{kCc7p@%`gTMGmC~lvM +z{{Oo~;&nwR#6B;5RhL2S)X;Z}H&IxC|>g36C-`1n18Xp8Zo}OXdod?iN@?cniLRDA +zOCb;VVFQGh%W-{1oEP4t;qQ%63e`pEF-ALyhdP-D4V*31R$%0A{XqC$?FiKBk?`Z6 +zGp^AHKaMzKhI(A6)8qqf*--dtgh#e8MEE&zGnyWe!$5RMDU0P$^8xQZP9p2IRy1?7 +zR^D`%%X{Eee#{jE+|2bYqvQtvvX(Xua)UdVXKgB#H|T{2etnwUXbE1-`e3=y#xKAv +zikCOSUJke~mD?W1HTdcwx4r9xmDqW?os|jdpPMBTM{~Ko#WUbif+f;ld*x1-G4UH- +zEN|Bo9mCf%@{Wt&0JO1@cTyb(6?Ez^cMG+|KKm;1H(t-$|#BCNTj?czYS&7oAN$>49Kl}NFyLO{g923`;lh&ycTJWoF)%w +zhK5>oP9Cr(0buPMiF}w+9+*)JBzk~EJxflP_uGa7R`fV|aKK^UCouWY52Zk6ZI_3- +z2Lin6Cl7sv?thtDKC%Nk;{Gk=qoa+1UEVAo9orVzzD@Em3owN~GhZJ5G9CCQ?c@=c +zy8~|(C7+V95;&h6`3!iCefW*?m;-l#8?{|N%Qq7Egd+K@O^IUT&b{>S&E#Lw;YHja~v +z#?63CSs>qNS_*Vkt$gFT8XN_jCEvU#8mLXIeA|omz{l0ecU<)WXxm<*4_}cjPh%zk +zH@eIBBwhe+(_Z;L?>Ye6qw;hcbO1-J={q4fgO<$AmuM7pU +zqEd9|;;7f=%MWE_1B^41NS;`o0 +zJo#mt0w9|n$uCD%qL-i8NPhXrTAa-JB`=I)z?#mGUp?Uh;8-n@TfIgi|G1?@QZ18T +z{fg6aEBDKb3Jb8d949aOA!46rm%RARdf*NYm6yCm$;bMt{GNzWuw5s4*%)*j{Wr*; +z$5vrgUM2sK9*^bM5BW#?L_Ki9$K;-L5D|2p+=cAqw^GG<4x#6xt<) +zfCCi@?cwGq$DCFeOu+XsF;EzezzaWnL1A1Ko(Sy3Jw@Ya)IHXjDVp@hIe^`x6ip3- +zffbKan7u^#*6^spT!C@$=`e-4F`8Fh4~2z!4UoqniZ(sb$Bw*#MBmkEs={u9J>Fq| +zh26zZK+n5NWWEbU4^L}-&T552QZ^8}OyM{j7r^nhqOH6YkS&~|?aUD1*N;{>72>dB +zW1*gXmMGel7Xu9F7{YQ6hQjmVy)eS)?kNTg#w6@Uu_7cBCHf6r +zCDI?46oWQnBs;W1G5Bc-Ffv0i_$PY)@_vfpDJVGBo>GJ^zYY9UE5#UFEMLl^6k(CA +za9DA$BCIq7n?K5EMRCgfEZ8Dz&v@d;lJ>*aeF5m1yBZ2Pr0IeE|OcZ;5ok +zaz&JL3GmH(DxyYz0lvlIdOnR(MD4i@urpQ>oe~Q4?H|RYE&Txg$`#Z9t@oa@iWyxn +z9c$&Fi0OqEk*iX~WCjlhHg@yBACNVQSh^Uvwae?7DwjxW7a?~8%t?~SEqJS#)8{4d +z;a3%NPNG=D5)|`L5uz)eD&{?BsBh;h7Bp=GBvLOHcQrSxl`Gbih5?4fOuZEn~!UXhyk3@3hWDz>ZfwCoNPM|hj-V}B}khs*$O@D0Tt4FKu9O0n0v +zHI76?D2`}+0oM1G$gfr_j+kTvb>S4pa&h-!Dip_iV>@`$7{&2`bRbLGDl+rUf%k5w +zIAv&z!@Hdnr$lrgZ|5maUwMKGQHCPtF-oM51jSiXOlO*d;#^lB9MyB50lRWTp6Nx_#MlJ!_JCF&oNgqXr`#>WrgE#Hj1aM +z%5a$JvEq5VZ@|W%QdITDbK;;L*Q}D_r{1L_l|bpB8Yt+?Skl^u^_mKQij+36e}df!x~ +zo5mc2^&4du8(d*+u2|*kIN`cX=`|QPw*OqE*WWF`b@f*Ia6541ewotuX*V3HjaPQR +ziHD=-RAu+qAJMYQmHy{(eLbcqdtbx|uxq(;XytUE@6RYlVkO1KSt&=EO#-++Tq57K +zKq8Y}6X$og4jLD#4C_RJcO4~>I9W(!vrCm>H}KmCKR-+4T@xh|S1XA$`-(*7b4VGU +zjk){WI%K6hX +zf#fw+&foqSm9=x=at)B) +z%amKgQ7SyUQn{^L2$05O#AttO_ce9O{i{QCbl<*h9Tf$bloydC8NL~%$o +z>t(L*uuWP1X*!Ta%ajklU_P`{u6$Hb15o9we7p>s7wPwukN>^~CO1|-QQ)6l3Q<0J +zh(%euxe|#3udJ982%Ps*WkuFjptc#xXH9T6y;)=Bv$@?+uuoT3U6_s;#3tp-gr+!? +z>Z^R!C=I{;Vy~?BQ=m`p)n9*qtMoHpqV?5bzRt$J4dlE}C}_4Mpp&$WT|Op8+1 +zc8dXGP_6vhEfm+pSowXH52pDal;5)|@ftcQ{|rn6wkAgfu}`ttmW#v^%|(Z-1aU?0 +zHcgzLtH=b5q4$TVsJA!DQY9*7^QWkPyc3Iio44;>u2R1<1}^c4N}Gk=xod<uq-uQ*i@ktjs@C@~Pm0M^wb_ThyU{|G-GnZ{mCRB(ni^sAWrWIcB&sS7fvWbs +z2-Zx4RL*B_0k`d!EiTrXFbom +zs63jY&}n3<@_bSWoR`e_W`PIGip#(V=A8t6ZG!?seCgdum~(v`E6_rWa=iB +zAI>O~%j;GCZqC3h9-;CNH3Ax0sPeyp>oSa~dU{U7p^{drUY|z;cT=MZ&~Dz +z=n>jz&kEJBr+6n_1XZY4Es)vsRHJjg;N+IQYV5zUh+$=_uzw#kZML{Nz+5?Nk7}A( +zPi&Fbif04NyPbNcnu8s3GPajQmgJ~fP}>yv$-b(%Blw*l`cxHPQ2=o5nMCf)UR8W0 +zt|u{5ElWTRwc&TsEYQ50Oi-;lXady3L$#_1jndXawQl+p;O$>ZB!+!d8!Yf}#s{f3 +zByIq1T}VAsdr72UL&W)kezv|nRJ(rRBuUp~Ra$}$sJBYBx6?wP_Ptem&*EZ;zf}7! +zV`!@O72gF~>%*N?85SNmYtT%Uk%vq0zNPBKdHj@wbE?dJ=#TvLs#6?(Pby}ED!T>? +z=BO*GoG?7bLrhdTg+qYMa8jN3#4&--om3Y(;FrB}%2gNha3I~Xhbk8zvkUW8x#3tN +zbvdBQ8_%K4)KHZ-dn!=38>)Q&x_^r2c-7^G=(Nx6RTU0G$M` +zY&%tj0s6t1t*Yt;YcLiZP*txu4Aio->TOFAg%TUp+i;8-w`Z%~5lsFsACO3f^isXY +z0eIf~nChc_9&l?6RiE#V#16_CRn5>~pxbg(U($B~yLL|XwRav6U2E0%L8oxAsITh# +z4HbUXX6kTN-B?@*v-fJKs>RIZp_+^S1k7%unAFcrufhfh+1fy@?w$ku>HpN)(8mCm +z!qmpO_kqqTSDSWR0FY&6ti+@-50)a?}jFlDCNB{u~tT8-Lu;&T)w*Ggo4^2LPy*7{yO)b2e{e9Ae7MBnr4 +zvD*FBbW95mskfWtz +z7aRGi13KV!It@_wJAztDMW#Av;2PkpKGySbm_%BVCyoem?B?o-4{_6vn$`1}RwC=1 +zq7HhQ1XN5>2RmH`rf;DRUXY2(z%_Nqg&^QsOjQpWtpL_~l2{z%$v?FfH3Q7M?W<9b +ze~(FEQLIE3a77*IX$kzbUh1fS;|@9b68Va+64`KTb+kQ}&8fH5Q`@15bpIg63~+2e +zmRHYPSPR_JDQf-vgTTFbuUiD(;FzDr}7yq{b*fgR}Xp4o>isjos4+}|J_{-33jwCZ>!$ohxYPwxRH#p8ALP)P>s}fmeH|izg_tuUV=tc~po+UXJ=!@^YZv +z8>#P|#IJl>6{+txT!)h+diDKT__m|_s_)0{2DbZ_`a!vfjp`(InMD_j`xn$@6BpsZ +z_fS7Hy9xY-1c|Iuh`Op84eH$h^@~+cfE?ATU)tuQcJ$%2`sLfDsMi_PGf=I5-343d +z$rmKD(2wdjH=Kb!X{vt5FTe!cMg8u=VxVk+`g4~KK-(3nzcfQ1{HK$;)@wgbo;6p0 +zU4>`BwMhNr$YtPy9;)ja8K7I(qOSA9&HL`Gf%9m|4bE$zf`~l_8d{9ps3A?TsJnVu +zBX8~uT)c@!@goMvBSE8e`+>beH*x+zYyE2rP16Hd8b$8bH2dcpHhXH!Glu{vAEz-t +zUxohpfTnqO-2d!pnwAZ3<4j3AjfK~8AW14ss|f?JW2Vtqw!@^Ix@c_vh}dtquW9p$ +z0e`%u#@-U6?!915J11mLPfh#m6rkJhX*#_00aoxp(@}1WIah$crsF`|gH10r9pg|o +zIk834$&Lc`AFpw<=#E)JtVHG)ECviZsa!Zi(~GUfM02O88EmaQ*+4U(34ZK&um +z*j#UYNi!6$f-7398S%;u8=r}q(EDovhLqRy)O*dSmHmJ&%h!xKcpEF=8JaLDf*NbW +zce?@Ivr#h+H92aKqKWus4*cqGn#fM>0M?T=k$xz09vd!^HBf3I3wGlG@Iy^x8G4W| +zw>1;|9dXuq)o{(k^GU$Z`mKrTT!xu%ttP4fU2C5|ny4F?d_?$ZqTQYYfBTXq8lx!* +zc%YeNx&ZhqCp1%S@dG^M5=rH4&9podOvBWg>BU%z&otA_g2O7u(^s={?o>QZ +zcA8cH;qRqsG^@)?(QRaE)}2P5`>?rY(^P#d@ZDWCo4cS`aNAz9{j~*@9K4Jz*T9RKL;YicYq(5v$+gfF-C2aH$VIU#;%dXW+-L)*85AOlj+-ZSeIRW}f}EhHcR+bU3Ls60)#;G)`;$uf&}a +zt2NF;asA^at;s}uzojy5!=>eTyjN)(nc!NbPt!J6l>#AckBTFPTk9w6(>jXSz_Glg +zZ8zyT_B;A&om=GtAD60id3_wC$OLW2hAu!)jna0UnF%!WgSK-6Jk9Bx)t(l9eRpq9|Z+8_l6RlPsw;P)cRoaC( +zo<{7Qv~k}Cp>(@Y8}}VEoc}7c|AH{zYnwK~!UZe25iRvb9km=+81%}?#gl-Hmq(Ra0{ +zn)(7=dRu$yL6Ne9w;o>)B6e9UYgopCmvl&2dd(&}*%*=Cu}v<^pZjNa%PVRMA9_0ToGu^gc0 +zovul99~>pSrfY^@J>uqHl}KaH>6(4FK^Ztq*St6rPv$P2#a0D&30{c-qs;a5N_A~6 +z;(=JYMAruAgJ{1MI@^y!fCO#TIc~wa;NT6N(`1Yb9U^q?Dy@JIZmn}p@dx^PsYJFR +zTj%l!4~%N3&ePl&IK1qx4wa~EzR-2uF$4Iyopjwo@$k&Mrt|&X9Y}$T&Tkhgi|*fa +zJ(@Pd&4omrzvdXgi1rf6zF3L$TCGGD;H~RfjN$f^l`e29T2O4LZorCUU^|xRf+xSm +zc6Wd-q$RFX#0lNNADGfFzor{}v{wt9@iQK*I63KcK-Ms!N!VHR% +z$URtxG^qi8#$V|PBJPn$uQe5akG9q~QtDRJ;)KpCJKZXje)&Jn66uQ*64}~6x>eP$ +zf&X?%w;>%8!IRNNjm2PJ=`b43dZWlH> +zm~)tJx3vX!(VFOvbO^%nw#mATBJ3+wCF_n~MBf&;M0aA&AYj|=bSJrIINmZ;cXs+^ +zfRlT5=bLMAdeU5X-m)+7KJ9fECR^f-_~u$I0 +z31sbF-R-p)EDl%b?hM-t+>-OUvOU-UO~0ipk52-we?#5FFkFcxRk}x}IL!Czs~A4k +z(V|SPt6uOP_zfL&Z$DxR-@Ha5ef3r%+h8GPj_oYm`uDF*43-?fHg7K%pBlb2HJr;z +z4d*MaXQjImUy|I`oxDsQ(1my^e +i_Dh>~qghS6vCfaO5}V7~sk8j;Wf#<0humaiWd8$JZWY!5 + +delta 20751 +zcmZv^1y~f(yTJXW4IFW%zJ`{g<3ZR#EAx4Pth +zJAeVV0KgXL{v4Ssa4^yi_*%ip#=t*bjcg6{K&(s_h*#W +zuMU>C@!d6mO$jn-q8sujaF@MgvO3cMm`2qfL!D!yq;RaiA*L9 +z*azTXjMs54t2wceO#Z=1nKS_B$6+G={!k4k_LNBj@Qa-SfPdHlz!f|4s6Vool*G3( +zJi;k+?FHmBPBfBb{H|ecHh`N0E*sto$pRMv1ZD%bt2sc(I^bVkKpqG1$1x(glD0Cb +z?dckJ+7Hlv0A3#;lg7+LP6c`d=Mc%-KLiN%2g#P$7-Gx-x@O|Cy_QLnl>m{^z{TUe +zk#tA_asrSEB0#rv;F57YkmM777m@*Pp>EfJ9~=r0g;UWYStfUNqfDBH_la%;(0#c~ +z?)od4)UlIHHO(-_7iWMSohY3rj)rUP0ebZVav!I;PxX2Z2Z*fz@&=b_&~V`1)R9RS +zGzJ)q{eIs7ISFWv0$^x2;OaL6NM8ipza9V?nLt-yyU`sTRI?5K{Ku)UOa#e>U;(M2sU^;2B?u0@VBl5O$`7zTP%}1)C=g;!9Z=F +zODm{DUHywKGK) +z{t8Jio|eh#phb9#r8VsK7>VnW-$^D-XTU}*00J5@W^0&VL+qw?Ojefv(dg6(^g~VRmxF?wj +zUaAKYu4w|$@vc&o;8Eud4(ZoKpm+0SvQ}9&>|H9Y5PX~ZXh89-8_*?XAb9)$Qt=gp +z?m>8b=gXukZh$boBk;l`5UM*>v`W${tql9^L0LNs$bz;Y4sQgc63CN*^V0qgcNV{05 +z>xA7{`UI@>dvGStK!f>{aZ%oa?b|Hi(_4XktxnL4e|#A1w}b!<3`2C +zfE{)Nr#X>8x~~SOJ)Lm-u7`#*Cj&KkC*4;%w#u~umrD-7IhBCR8x+LmdEjd8hAaoy +z_#9xlJHa)52EeILeTUg;JR#p;E}gcO-zx=f|4M(I0EYOw--YDa0h^4&d~nNVBo8MLa22+ +zU^#A5eU&f&`m)qV<;CAim2y;$b>g-_r@a2aR;+?BzfzPOts#8YU_22j={kPOzO$rN +zI~vmLp!t(gdXL`fge*PldKyoli6*Ao~eT&lBE|z&$CAX +zQk)>hXeQ8x9K;Oy0{r!F5R)7T+&ydPrN*UOlvTr(gJm*)cMYA-*Rba`=$%*s%yFFb +zM{VVjw;KBV!a07m5MoE-MqemG-+u3bbes%v<==p{n+yHdNkASpm4Y8RoodGGfgb@eE0#9ne=pD;Y%C&|u)t$@UB$H)y +zhw;ChfTeu^gX>bDb@b)$uoln;7h#Tz +z8`LGt1LnLyt>*6pbK4&V-l7r~-b(_u@1fL3>!|wG80-2U6&Cy!%O^!+1w2p?K +z6|g~3Hw6^k2|_XE1$zfE;4}T8WX&cZIpJ_*U9l|eTJv8sI@N~f~QYVz9c<`7yUj0^?wd8Hmv~~l`1j4qe0aMUS;?L +zpW_Ly6*vLu>*4jVK|o6y!uwYRz|`a64Wzz;bo +zzhGA79Os71UH3glyl~!6IaStbv{))Rt<1ih_If!mkJ+4laXvN<=W4kP2QH^nCZqMLX#kcmku%-;2Draw +zoS9!9kTDB6^Q}!;CgrB +zY%|^gUp|+!&l~{c`)1DmTosTjtvDyq9Oyp-*DyE}_@*0VlBPpB*F^&GXD@NC7o$!9 +z$v5I$U)lpZUdFi(J_?+|tA=Oxan0_J1ZpVcntgo&G*ZKPl~e+RFXUR(`wsl{F`Re( +zIF!XNIBz^vTzqkRpfNk8ZM8fMmgBkPRZY>5 +zFW{0(e&D>n8UAVEqfZ5x+cv=6&Nv +zN^^m07Q~Hufzx6;lbf&y_2IV7Ty~E=K&cm(eW?Y|HkW0xfM(pJ$O>S^uH2-Q3NWzZ +z7;ciG`oauuav1KYSjtUKL^~m)88_V_3GKk=-1G=L;P{T*>g{ZYI??u`;yq;ffbc0k(f3w=e%Qnv3nYLw8V=ln>%c++G5g +zx{WI{H3s^JawmBKC39Eq)F?D9TR!K`Fr2_&J-IUro&x`;m^*t^4}9K5?p)qeAXb&! +z)rM&J9Jwu%b?CrdZ;S6sM#*F$ce$JC1Hg{YZZE%J4%fK5nIXXXRdV;%IHQR)hr7S$ +z3{L1#>As0$%vx9OX>UES{3hJ9Nku@D +zz>z%OZQF2w1@B~XcQ4Ci&i=gnQQVZ)YkBui|aZAL2cW&?uXj%{Mn15464u-_kz|NDC*v^+P+L<^jCVE}W_jQ+dBW;UIl7 +z^EV7x!3Tfy0RH(|zWs?ppywzbT6PoQ$^n@ioRi6ik{Vv^DU=Ljgb(*gw1@+J5S)2 +zZI{Uuy=pkblkfEnC4#a)-@83ZkkOO)*k;&pL?j;@^&1DXgYVmYC6EI|s;ceV;b9#< +zgQC9^Sht3+m+~1Ca)8{9t3eziG`+|A<1_xHm^{MMFxfUn(+-}+@duyIcO_Ce*)jQE`6cU6o8 +zZbm1*&~y>dr}6ymo?`)i1<2$dwdHr8|Ab0%Cch^ZtzPS3smj8`5VVTl=iU$dQ=31K +zyb=Aua{fRLE?AGc{K0|EP&K;qC3aVUosQrSUvNgJ^0G|+zCtFAQ}RcqVC>*zE&j+B +zUp(NJ{Ly>n0E->?vL4<*BoF@hl*hm~dc`0AFdJC8AAbT55Vv+Cf07r$m9DVj%d?}< +zVm!v58;}jOZEyZkPdp8`Rs7{qThX;>%3n=w4#cBSI&Wze5njRHxt#?=-f|}Nrvs_AKQySy7K(X$y3ljTg1PuCFz4z_#}#M$2aamy$({8~Fj5>`2TfIRHBlPb|xWFh*3D)a`y7xbMA4 +z-8qTCUtCS<`=Z8Ncb8ZhA@PXVJhKCKem}9@gNo-%D6!v&>oV1rIIPEjOqp0ssb}3f +z?dq>3j&2weiH#y2gaTc4fp|2=k4Bo2MyDPCl&28SO;3Px-ABA6?8>8m#Oo7|dG!_2 +z!e|F}?U7Ve7egBtN!vM>(8qmC{F{9NKG>Z2hg}4+#)9}yUWaa0Flpx#i5`O+2{?fo +zX?+L@If727G@pbn-3i>DH6-*^HT_BFC=uwrJEU_$5%8X0Ws+tiNyJ_hRS7Lfx4CE= +z8NHK9$DSt98Hd5Z1-vKGJI#R|>_=i!I|Ds_lk^(;6u4uXNbh>KXqAp7u_0(obpAzR +zBP=oIbDQ)v!5c9r($@)>V8JTVcMHZ74qYJqUZGj};3gT6JQUv#B?DGfb0rzDodf9m +zMJ6fhBa>d=T1_8dJ)%i`##i8uc#(lS3xOp+CW#z6Jtp1BkOymk&P^oAcCUci2_*F~ +z8c)qQlJYsSUy^$+3iu|kN$&T{ +zXw;dIJd3r!ce_Vctjhy(Yc9#(vOyXXqJnj+M{cjP19;|2?)sn&wYCL$G6R*&j!^O}@HTpj?a8x<{XidC +zkmrpX1Dn*6ygG-vU}A+#+OH*fT}K04%lsO)HzTj>ieN(GZ;;nR_5<6!lf22qc+F}z +zDW!q0p?4MeIH{Z`P3SBQU`FYdQIu +zPymG6M}9TL@h>qZzvEC=4oV__9;2;S)t>xqxB+OTEBV`Q4;n$2$-fb+fVQYbfw#gS +z^zRz(xk4$&KytCJWn9mRGS5IDGyNzV6^VlHz7%F{WoTeQb;G&?cXJRmX^LC7O8_++ +ziU$A7N@_M7!+3j+QS%|rK)ge!`Md;x9aE`ANmpQ}l4;#LWdOS$(R!Iqz^1gK^;We2 +zzGybBU#CA1i+pPBT>wy6NFDSZz-%s2htd0iB#xnuk5Ju>wV_TUwnJTRaWnY^qd7H9 +z_(EOvnLzm660`Ae>GqrYth)u!&V>5;97or-9rfoufczDy|626mKG&v!D=;=xv`^|| +z<7H@gk#_hN1aQukc1ggKdeDSMU{sV$kD=WrqZP9FCyiQV2mGsC8ohEHP}OeQV>fD# +zR;y@_%D=$12%tT~9s#Y_fc9#HHpAq`v{zqqAim#duQfRQh-4aj(-T<7SQ_X11W)`) +z8g~+v8|7jf^yw~z+1eOJ +zG(wTJ$i5o&E9K@qqFP&zucnEy%SvuJp +zXGb%TP7cOE2rk3qFDO&D-=R~R;B~i1I`tzi!@gg1+ENS~DG$?G$L0dBAk10jL_=~Ra!}qH3G=Fm;ihd)ya%vWktOaz{ +zbR4E~GF_b+h{}EpUH#<>1|&YvHHHDeGAGjYt8Ib5vr{@@x81hwIlA>?4hs4dy6wzk +zpj-vr-US7D_8PkV;3@Q7?nycJj)q%9>3$6!tJ0zLU}rpS=^yC9Wf)c6_n02swi~z? +zKj{QU> +zSvd9~r)l|;1Ryb)^jyLx;7sD^xrgt7kWY?M8wV@in3wuE_;zT1m)_lvUmvxF-aYjK +zBk7_{*6}sHd#f={RR{{UmTYBo? +zVKDAVKQ>GPMr><1h6?VmbK$nBR&rnP0}n>|tJ&SO>ppv^L_V1CR^gg +ztTy!q{#O{Y+K(PxFP_;qMEyN2kx#)4B +z^gh&^xeUa>ZK#^LZ0!czg?#3+4K3D(qnO*-3QQGcGPehI818dnZh!Sa7Vnn|oG_0t +zgSD6*1bn~uGD*f^*6tg6ZTYWclDqR*0FT2CSj++%VCL@qZWhoMH|16ri8XXIuJU0W +zzoKq)9Ks?!a9Vq>liDL!X9$<&3vt*SBtnWkVenYGN +zN9L;R+*`In50Ce`ncj|&{)7jKHpMjhj$)+jLDH!!dCRx5s>f`L&H0%hQRS^r^ZBI74`Ebk? +zEoZZXPXOePmdP6x$|S48kWYbs@KieC>}43!f#t4m4lwpu4JRCsNr#-Q;hUChNeD)B +z@3^yN)0Y4pQ7)6&Ut!Bn=K*Q+l;w9*0{v($lP!&5`I~&!Y_4b~M>penHroaTd~B7Z2mbwb{->{MeY`Z0GxqcnV~0Ei;1*w!$p$WDhaz);?;XoZCLPD)J(ZOlGY7ioB|H2G +zjfn0!>{uT=po)g9teXJLZ!|00fl_0}b9Q3<4Ok|HD +zngNAyR@v4YLrq=QMD}oQ20J$++5pwt=`oncMDLQ(F0n;2+gkc_%GhLzx|JobH=Osnw +z4_{E5hKqp*hEFL3C@ml14T*$d*Jy|GHIKr8s^Wa +z;fsGVS=)7r6sIM)-6mHmQvB@E$gL}rUi_;_)h`6Dov$Lz1t+587RAte-oRCvDTV=V +zANwhaVYBuCzr|HC4BbB1FiVl)76H(&t4vZ>D3jh$%Va(FD@L5}38Y_t#pqMlfqrfz +zldbSjjN!8k=*GNKj8R|~xhP#GnRQYzCKOGS^?Jp)k@JDfU9K4S6<0L2mSX(bA;8BU +zR*Zjk2e{yE3d0IK4|_T&CN8-R(BiFPQoXAHJJ%_u+ieGK#}&o&Yv{FHA0m_WFsb3V +zCyH5H(H$OfMlrju0|vX_9ahW<%fcnStyn1Me-0=XO~l}S*g3`G2()3(?3St;dGM=} +zC5OfyhK6a1O-=p$z`vtk{~3YTo&? +zV%KxrIQp%MB5Sl*+w4{pzsL8Db}IJIZwll@x}s#1DR5Cg6h~G#13#dj;^-g@)K1bW +zj;1UGzRw}W(KO8boBvQ8LtjWb)3{ch7MB#qz0sQ9k*_$>@Bwg5&L~a{dWspV+fr3y +zN7eH-iVIb!UHZI`9GZ9--j^z_eai%X<2=Q6!2~UYD#dl(WAr0GDX#ZihnesonXG3k +z#lvx^RlYS;JpAE+`SxH%MdtwE;{p{GJ#fpjiHgb|V}YxeuBhx80&IOR#S{HRoX9_l +z=ikuSY~4xmvH}AGU79Q2#QjAv{ax{9fE7qrn%EeY*(g5e;=N{;D!yCH0Or6HKLF#F +zX4e!ynpFV5c7x*Qs!hO7x+#7+paogyhvIh%9>=6I#lK)Q&P=E1DAlWSiJJ%;bPR0v%V^Q3P5y8GIZsSE5Bx&kp +zkai0Vf0qHh5`(P7%%+#%3>dRG(p_+Fo{9OHD}qb&BB0Z*3NA-c)v7!NceNV$Au&QT +zZ&bN{dj!vw?Sa0(Ba`J>3tkJ+;J1Dxc>lrJZ?iI?Rlnir)7KZ;U`YpzdMdP4H3M>O +zq|jEM0S58_U-;by{`(ife*u2*To0k$4iwTC-Gl($1t6>23BhL*aJ(CYkToLk6P^m8 +z%TYPrTP~BOcnKYwx&S!s5W*CwrfR1OU2Yvi&&WaO+N#=g2o$ +z6k+>>_=!t^Oez)z9zKfur9eomkD;-S9fia;GcaB?Pe|;H>YPN@aL8Y2oTsB<#R?%w +zyBk=lnUHi9eX`>YLedk|dtp;#^7kLfqyv(LAvP`0(_JYH3CE?O*MyYY7tr@vBcxWB +zBR%^lq{dTB(H9HD5}YxtzEc>ndNQ!MBfe+gArqdaW8T07i<*9=i|8JHV6j5(4OxesZVn& +zL-|5s`sPxs3E3sgjyr)7zIwv!^CPjGDpHtzF&ALuTbbO#%QakSDwA>c$YS6o9G6MO +z$HE+QZ{R;37v{G|`?VJ`rV#Hd3JYon0liu!EYxp94Ygia)Z7;p%u!)cv^}Po`%aZ# +z(0>ht+#&fuN=6HL^#jqT8zSVrD*$>lNha%XQ&>I^v-HX(!peb@Fe%wwSp8=!PQ(Ra +z%_VeppScTbZefS>Y=t$Sa3TYL3G0k=fB+JGMmBbxP+*PoAXx|ng#!Sl?x?0I#=3vV +z7x)Teq2RS8dgDW-IbPw06W@gGol&mDT@ZFy@4}FBw6HU-9&p!&2s;PV!+mu|*p-9w +z>g_$5EM>8&)v95NjUn2-|=xorS8=ao>} +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 +z>jq7800` +z4P@DG-TFhrfot7BxBf6{{f1X`>pwYTQproVr6K~8E-|`YXBz=Mxms6v2DhfSPPb?E +zetc%r`kbz)MJ#YmzjS-^UIH0zq}x|F5a|4Yx_x`1Fe*4qcW^*HR+4hM!#_V`p14wX +zv_&nMgrS7uV&2IP{LW=HY9lYUCBi-%zOyI<0x{8R#=yTN9Jx&^mimgOf +zxwZ-qm4mMGNd&M_^L5W$aTPj_*1dL1$ASZQ-P>}kc=)zK_j$(@Amq3d7VE`3%#xA`*jz-l)=HyuUL#=cTXtfQ({J-u%9CLr$Pq_?qF{U_Yeo9@S*^U75w{rp2F +zTbrjh|A}Qw^~UKfFhj)u^wnEl!Z^w2xB5B_0x)x=(AOJW2HdzaGU>#w`g-4;Fw`Bd +zZ*aZ{ckEid?Ftc7B&AYHUn|3uWWDn-+#vHU_0H8rS3T?NT|V?gqc~dcu^j!7t(WwT +z(@=9XOVl^1bO63vL%nAn*1vqJBatU#v<>=dMccB^ER3_PZK_U-?`3~Yj* +zK6Y^h)NxQ2dY)3f?P+kT)%;dJ_xJ3;u|+h>`4LSKFA +zPh1DBK|ib`Iy1+w>xYF^0a@@=pHZC`z8$a6tX6#;?&(Kf_WVA%)Nd%te;&S$|lWa()S@U*^&kN*{@#$|NE4F;U=^f?u6)b3KH>;77ftn+Fk*! +z^Add?{sjYi7-X{c{q!r`Pht>hsD4F40cwh``uzLG7`*?bUukq4$nP}$s$Dk$=9J1b +z@a--2t1U(XB#zOqo)rnSU%q}#3d%~MoqjDQbC}OJ{W?cm^!m2xcQlItn4G3BJcmiO +zr@8vw#|V&aZS{LbM+4hsniXFCJ%N-YETjbFA3>I76D!-^2FtO8x8c?|@&}O#kKsPNe-8ne?MU +zCRE=TRz1Z3b+25dH|a0s-m{Tc +zyLhlSxuJ4C1U@iOp8nx@w+x)!(KwVg_;=6Tp$Y!<#ozbGpR05I+fs8w8h*qY*DVg2 +z0VAXdm +z*vPM{zqb0ye|OJU3BCVodvx;|n3g)+IwNUxLK|E6Cbqsl{e7eTBf>+&Lt0s93{Oi> +zh_@aZmyt0tEj>QNIxaoI+9%U@WJ27KrDod2_0>cAlDh9L>*DRHUJ#SW{;0j+Co +zY|u$=5`sfa!bXWW$p2}g3hIPS(i0MfIOks2MlLn7zy^_WgCLx}>N)+04U+#?6HQR0 +zb;HP^aj8iegPe1__9Q07tG1JeIu8p7#w}OfyTrfYQCoWs1^pDhYn9lOU>X=gu!C$%>UVax%1wW@Z6`q)L#tx +z?^d}Uel)z;_B9bjkJ>m>o#jzSU`JB^KO@#gbhd67k%lW-J>=X4`8dn&U&x?ZuBNy= +z-Q|{%*s@ww{qIq0BD>?_j7*5HUYz2|jM_JIuZ_jMHA`A8;1Y3$|L>qRQMjN%sfpE7 +z8<|LG#8sX7GLvF^jG{pC<6`{ + +diff --git a/data/lng/qmc2_es.ts b/data/lng/qmc2_es.ts +index 6480a1da5..9ba3ffe3b 100644 +--- a/data/lng/qmc2_es.ts ++++ b/data/lng/qmc2_es.ts +@@ -253,8 +253,8 @@ p, li { white-space: pre-wrap; } + + + +- +- ++ ++ + Artwork name + Nombre de arte + +@@ -329,183 +329,183 @@ p, li { white-space: pre-wrap; } + Eliminar las clases de arte seleccionadas + + +- +- ++ ++ + Select / deselect this artwork class for removal + Seleccionar / deseleccionar esta clase de arte para eliminar + + +- +- ++ ++ + Enter a name for this artwork class (required) + Introduce un nombre para esta clase de arte (necesario) + + +- +- ++ ++ + Choose... + Seleccionar... + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + Selecciona un archivo de icono para ser usado por esta clase de arte (opcional) + + +- +- ++ ++ + System + Sistema + + +- +- ++ ++ + Software + + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + Seleccionar un sistema o software como <i>objetivo</i> para esta clase de arte + + +- +- ++ ++ + On + Activado + + +- +- ++ ++ + Off + Desactivado + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + + + +- +- ++ ++ + Folder + Carpeta + + +- +- +- +- ++ ++ ++ ++ + Archive + + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + + + +- +- ++ ++ + ZIP + + + +- +- ++ ++ + 7z + + + +- +- ++ ++ + Select archive format + + + +- +- ++ ++ + Supported archives + Archivos soportados + + +- +- ++ ++ + ZIP archives + Archivos ZIP + + +- +- ++ ++ + 7z archives + Archivos 7z + + +- +- ++ ++ + Image archive + + + +- +- ++ ++ + Image archive for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + + + +- +- ++ ++ + Browse image archive + + + +- +- +- ++ ++ ++ + All files (*) + Todos los archivos (*) + + +- +- ++ ++ + Image folder + Carpeta de imagen + + +- +- ++ ++ + Image folder for this artwork class (required) + Carpeta de imagen para esta clase de arte (necesario) + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + + + +- +- ++ ++ + Browse image folder + Navegar a carpeta de imagen + + +- ++ + Choose icon file + Seleccionar archivo de icono + + +- ++ + PNG files (*.png) + Archivos PNG (*.png) + +@@ -1237,7 +1237,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + Seleccionar color de patrón + +@@ -1360,17 +1360,17 @@ p, li { white-space: pre-wrap; } + &Aceptar + + +- ++ + Choose image file + Seleccionar archivo de imagen + + +- ++ + Supported image files (%1) + Archivos de imagen soportados (%1) + + +- ++ + All files (*) + Todos los archivos (*) + +@@ -3463,42 +3463,42 @@ p, li { white-space: pre-wrap; } + Cerrar + + +- ++ + Name + Nombre + + +- ++ + Domain + Dominio + + +- ++ + Path + Ruta + + +- ++ + Value + Valor + + +- ++ + Expiry date + Expira + + +- ++ + Secure? + ¿Segura? + + +- ++ + HTTP only? + ¿Sólo HTTP? + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + ATENCIÓN: fallo al eliminar cookie de la base de datos: petición = '%1', error = '%2' + +@@ -4472,7 +4472,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + &Abrir archivo + +@@ -4516,7 +4516,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + No hay dispositivos disponibles + +@@ -4569,7 +4569,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + + +@@ -4581,7 +4581,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + %1 variante de + +@@ -4591,27 +4591,27 @@ p, li { white-space: pre-wrap; } + Seleccionar directorio de dispositivo predeterminado para '%1' + + +- ++ + &Close archive + &Cerrar archivo + + +- ++ + Choose a unique configuration name + Seleccionar un nombre no existente para la configuración + + +- ++ + Unique configuration name: + Nombre único de la configuración: + + +- ++ + Name conflict + Conflicto de nombre + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5303,25 +5303,25 @@ Use local value for option '%1', overwrite with global value or don&ap + Fecha de modificación + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + +@@ -5462,42 +5462,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + FtpReply + +- ++ + FTP directory listing for %1 + Listado de directorio FTP para %1 + + +- ++ + Name + Nombre + + +- ++ + Type + Tipo + + +- ++ + Size + Tamaño + + +- ++ + Parent directory + Directorio raíz + + +- ++ + File + Archivo + + +- ++ + Folder + Carpeta + + +- ++ + Unknown + Desconocido + +@@ -5994,212 +5994,212 @@ Use local value for option '%1', overwrite with global value or don&ap + + HtmlEditor + +- ++ + WYSIWYG + + + +- +- ++ ++ + HTML + + + +- ++ + &Load... + &Cargar... + + +- ++ + Load notes from file + Cargar notas desde archivo + + ++ + +- + Load notes from an HTML file + Cargar notas desde un archivo HTML + + ++ + + +- + Save current notes + Guardar las notas actuales + + ++ + +- + Page load progress + Progreso de carga de página + + +- ++ + Hide menu + Ocultar menú + + +- ++ + Read only + Sólo lectura + + +- ++ + Show HTML + Mostrar HTML + + +- +- ++ ++ + HTML files (*.html *.htm) + Archivos HTML (*.html *.htm) + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Todos los archivos (*) + + +- ++ + Select file to load + Seleccionar archivo a cargar + + +- ++ + Select file to open + Seleccionar archivo a abrir + + +- ++ + Save a copy + Guardar una copia + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + Formatos de imagen comunes (*.png *.jpg *.jpeg *.gif);; + + +- ++ + Portable Network Graphics (PNG) (*.png);; + + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + + + +- ++ + Open image... + Abrir imagen... + + +- ++ + Insert image from URL + Insertar imagen desde URL + + +- +- ++ ++ + Enter URL: + Introducir URL: + + +- ++ + Create link + Crear enlace + + +- ++ + Font + Fuente + + +- ++ + Select font: + Seleccionar fuente: + + +- ++ + XS + + + +- ++ + S + + + +- +- ++ ++ + M + + + +- ++ + L + + + +- ++ + XL + + + +- ++ + XXL + + + +- ++ + Font size + Tamaño de fuente + + +- ++ + Font size: + Tamaño de fuente: + + +- ++ + Zoom: %1% + + + +- ++ + Select color + Seleccionar color + + +- ++ + Choose image file + Seleccionar archivo de imagen + + +- +- +- ++ ++ ++ + No data available + Sin datos disponibles + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7116,55 +7116,55 @@ Use local value for option '%1', overwrite with global value or don&ap + Formatos de imagen activos + + +- ++ + Preview + Previsualización + + +- ++ + Flyer + + + +- ++ + Cabinet + Cabina + + +- ++ + Controller + Mando + + +- ++ + Marquee + Marquesina + + +- ++ + Title + Título + + +- ++ + PCB + + + +- ++ + Software snap + + + +- +- ++ ++ + deactivated + desactivado + + +- ++ ++ + +- + activated + activado + +@@ -7592,42 +7592,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickCalibrationWidget + +- ++ + Enable/disable axis %1 + Activar/desactivar eje %1 + + +- ++ + Axis %1: + Eje %1: + + +- ++ + Reset calibration of axis %1 + Reiniciar calibración del eje %1 + + +- ++ + Current value of axis %1 + Valor actual del eje %1 + + +- ++ + DZ: + ZM: + + +- ++ + Deadzone of axis %1 + Zona muerta del eje %1 + + +- ++ + S: + + + +- ++ + Sensitivity of axis %1 + Sensibilidad del eje %1 + +@@ -7681,67 +7681,67 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickTestWidget + +- ++ + A%1: %v + + + +- ++ + Current value of axis %1 + Valor actual del eje %1 + + +- ++ + B%1 + + + +- ++ + Current state of button %1 + Estado actual del botón %1 + + +- ++ + H%1: 0 + + + +- ++ + Current value of hat %1 + Valor actual del hat %1 + + +- ++ + T%1 DX: 0 + + + +- ++ + Current X-delta of trackball %1 + X-delta actual del trackball %1 + + +- ++ + T%1 DY: 0 + + + +- ++ + Current Y-delta of trackball %1 + Y-delta actual del trackball %1 + + +- ++ + H%1: %2 + + + +- ++ + T%1 DX: %2 + + + +- ++ + T%1 DY: %2 + + +@@ -7801,460 +7801,460 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + desconocido + + +- +- +- ++ ++ ++ + good + bueno + + +- +- ++ ++ + bad + malo + + +- +- +- ++ ++ ++ + preliminary + preliminar + + +- +- ++ ++ + supported + soportado + + +- +- ++ ++ + unsupported + sin soporte + + +- +- +- ++ ++ ++ + imperfect + imperfecto + + +- ++ + yes + + + +- ++ + no + + + +- ++ + baddump + mal dump + + +- ++ + nodump + sin dump + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + desconocido + + +- ++ + On + Activado + + +- ++ + Off + Desactivado + + +- ++ + audio + sonido + + +- ++ + unused + sin uso + + +- ++ + Unused + Sin uso + + +- ++ + cpu + + + +- ++ + vector + + + +- ++ + lcd + + + +- ++ + joy4way + joy4dir + + +- ++ + joy8way + joy8dir + + +- ++ + trackball + + + +- ++ + joy2way + joy2dir + + +- ++ + doublejoy8way + doblejoy8dir + + +- ++ + dial + + + +- ++ + paddle + pala + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + vjoy2dir + + +- ++ + lightgun + + + +- ++ + doublejoy4way + doblejoy4dir + + +- ++ + vdoublejoy2way + vdoblejoy2dir + + +- ++ + doublejoy2way + doblejoy2dir + + +- ++ + printer + impresora + + +- ++ + cdrom + + + +- ++ + cartridge + cartucho + + +- ++ + cassette + + + +- ++ + quickload + carga rápida + + +- ++ + floppydisk + + + +- ++ + serial + + + +- ++ + snapshot + captura + + +- ++ + original + + + +- ++ + compatible + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + ERROR: no se puede abrir el archivo de icono, por favor comprueba los permisos de acceso para %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + ERROR: no se puede abrir archivo de icono %1 + + +- ++ + 7z error + error 7z + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + Esperando datos... + + +- ++ + determining emulator version and supported sets + determinando la versión del emulador y los sets soportados + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + ERROR: no se puede iniciar el ejecutable de MAME en un tiempo razonable, abandonando + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + ERROR: no se puede iniciar el ejecutable %1, el archivo '%2' no existe + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + hecho (determinando la versión del emulador y los sets soportados, tiempo transcurrido = %1) + + +- +- ++ ++ + emulator info: type = %1, version = %2 + info emulador: tipo= %1, versión = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + ERROR: no se pudo determinar versión ni tipo de emulador + + +- ++ + FATAL: couldn't determine the number of supported sets + ERROR: no se pudo determinar el número de sets soportados + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + Cargando, por favor espere... + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + datos XML - %p% + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERROR: no se puede abrir caché de estado de ROMs para su escritura, ruta = %1 + + +- ++ + verifying ROM status for '%1' + verificando el estado de ROMs para '%1' + + +- +- +- ++ ++ ++ + ROM check - %p% + comprobación de ROM - %p% + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + Updating + Actualizando + + +- ++ + Name + Nombre + + +- ++ + Source file + Archivo original + + +- ++ + Is BIOS? + ¿Es BIOS? + + +- ++ + Is device? + ¿Es dispositivo? + + +- ++ + Runnable + Ejecutable + + +- ++ + Clone of + Clon de + + +- ++ + ROM of + ROM de + + +- ++ + Sample of + Muestra de + + +- ++ + Year + Año + + +- ++ + Manufacturer + Fabricante + + +- +- ++ ++ + ROM + + + +- +- +- +- ++ ++ ++ ++ + N/A + + + +- +- ++ ++ + error text = %1 + + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8262,552 +8262,552 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + loading XML data and recreating cache + cargando datos XML y recreando caché + + +- ++ + BIOS + + + +- ++ + Size + Tamaño + + +- ++ + CRC + + + +- +- ++ ++ + Merge + Mezclar + + +- +- ++ ++ + Region + Región + + +- ++ + Offset + + + +- +- +- +- ++ ++ ++ ++ + Status + Estado + + +- +- ++ ++ + Optional + Opcional + + +- +- ++ ++ + SHA-1 + + + +- ++ + Device reference + Referencia de dispositivo + + +- ++ + Chip + + + +- +- +- ++ ++ ++ + Tag + Etiqueta + + +- +- ++ ++ + Type + Tipo + + +- ++ + Clock + Reloj + + +- ++ + Display + Pantalla + + +- ++ + Rotate + Rotar + + +- ++ + Flip-X + Invertir X + + +- ++ + Width + Largo + + +- ++ + Height + Alto + + +- ++ + Refresh + Actualizar + + +- ++ + Pixel clock + Reloj de píxel + + +- ++ + H-Total + + + +- ++ + H-Bend + H Curvatura + + +- ++ + HB-Start + HB comienzo + + +- ++ + V-Total + + + +- ++ + V-Bend + V Curvatura + + +- ++ + VB-Start + VB comienzo + + +- +- ++ ++ + Sound + Sonido + + +- ++ + Channels + Canales + + +- ++ + Input + Entrada + + +- ++ + Service + Servicio + + +- ++ + Tilt + Inclinación + + +- ++ + Players + Jugadores + + +- +- ++ ++ + Buttons + Botones + + +- ++ + Coins + Monedas + + +- ++ + Control + + + +- ++ + Minimum + Mínimo + + +- ++ + Maximum + Máximo + + +- ++ + Sensitivity + Sensibilidad + + +- ++ + Key Delta + + + +- ++ + Reverse + Inverso + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + Interruptor DIP + + +- ++ + DIP value + Valor DIP + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + etiqueta + + +- ++ + year + año + + +- ++ + manufacturer + fabricante + + +- ++ + machine name + + + +- ++ + ROM types + Tipos de ROM + + +- ++ + players + jugadores + + +- ++ + driver status + estado del driver + + +- ++ + source file + archivo fuente + + +- ++ + rank + rango + + +- ++ + category + categoría + + +- ++ + version + versión + + +- ++ + Filtering, please wait... + Filtrando, por favor espere... + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + ATENCIÓN: error de XML: el nombre '%1' se usa en múltiples sets -- por favor informa a los desarrolladores de MAME + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + hecho (verificando estado de ROM para todos los sets, (tiempo transcurrido = '%1') + + +- ++ + pre-caching icons from 7z archive + pre-cacheando iconos desde archivo 7z + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + hecho (pre-cacheando iconos desde archivo 7z, tiempo transcurrido = %1) + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + Sistema / Dispositivo + + +- ++ + correct + correcto + + +- ++ + mostly correct + mayormente correcto + + +- ++ + incorrect + incorrecto + + +- ++ + not found + no encontrado + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Predeterminado + + +- ++ + Configuration + Configuración + + +- ++ + Mask + Máscara + + +- ++ + Setting + Configuración + + +- ++ + Value + Valor + + +- ++ + Driver + + + +- ++ + Emulation + Emulación + + +- ++ + Color + + + +- ++ + Graphic + Gráfico + + +- ++ + Cocktail + Cóctel + + +- ++ + Protection + Protección + + +- ++ + Save state + Estado guardado + + +- ++ + Palette size + Tamaño paleta + + +- ++ + BIOS set + + + +- ++ + Description + Descripción + + +- ++ + Sample + Muestra + + +- ++ + Disk + Disco + + +- ++ + MD5 + + + +- ++ + Index + Índice + + +- ++ + Adjuster + Ajustador + + +- ++ + Software list + Lista de software + + +- ++ + Category + Categoría + + +- ++ + Item + Objeto + + +- ++ + Device + Dispositivo + + +- ++ + Mandatory + Mandatorio + + +- ++ + Interface + Interfaz + + +- ++ + Instance + Instancia + + +- ++ + Brief name + Nombre breve + + +- ++ + Extension + Extensión + + +- ++ + RAM options + Opciones RAM + + +- ++ + Option + Opción + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + ATENCIÓN: no se puede abrir caché de estado de ROM, por favor comprueba las ROMs + + +- ++ + loading ROM state from cache + cargando estado de ROM desde caché + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + hecho (cargando estado de ROM desde caché, tiempo transcurrido = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n estado de ROM cargado +@@ -8815,54 +8815,54 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + + + +- ++ + CHD + + + +- ++ + ? + ¿? + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + ATENCIÓN: caché de datos XML incompleta, invalidando caché + + +- ++ + verifying ROM status for all sets + verificando estado de ROM para todos los sets + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + ATENCIÓN: el resultado de -listfull ha cambiado, forzando una recarga de todos los caches de emuladores + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + ATENCIÓN: atributo de nombre vacío en XML línea %1 (¡el set será ignorado!) -- por favor, informa a los desarrolladores de MAME y adjunta el archivo resultante de --listxml + + +- +- ++ ++ + ascending + ascendente + + +- +- ++ ++ + descending + descendente + + +- ++ + , %n BIOS set(s) + + , %n set BIOS +@@ -8870,7 +8870,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + y %n dispositivo cargado +@@ -8878,136 +8878,136 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Info estado de ROM: L:%1 C:%2 M:%3 I:%4 N:%5 D:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + ATENCIÓN: caché de estado de ROM incompleta o antigua, activando comprobación automática de ROM + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + ATENCIÓN: caché de estado de ROM incompleta o antigua, por favor vuelve a comprobar ROMs + + +- ++ + ROM state filter already active + filtro estado de ROM todavía activo + + +- ++ + please wait for ROM verification to finish and try again + por favor espera a que finalice la verificación ROM y vuelve a intentarlo + + +- ++ + please wait for reload to finish and try again + por favor espera a que finalice la recarga y vuelve a intentarlo + + +- ++ + applying ROM state filter + aplicando filtro estado de ROM + + +- ++ + State filter - %p% + Filtro estado - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + hecho (aplicando filtro estado de ROM, tiempo transcurrido = %1) + + +- ++ + saving favorites + guardando favoritos + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + ERROR: no se puede abrir el archivo de favoritos para su escritura, ruta = %1 + + +- ++ + saving play history + guardando historial de juego + + +- ++ + FATAL: can't open play history file for writing, path = %1 + ERROR: no se puede abrir el archivo de historial de juego para su escritura, ruta =%1 + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + D: + + +- ++ + S: + B: + + +- ++ + T: + E: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + ATENCIÓN: la auditoría del emulador no finalizó correctamente -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + caído + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + hecho (cargando datos XML y recreando caché, tiempo transcurrido = %1) + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + comprobando estado real de %n set no indicado en la auditoría completa +@@ -9015,7 +9015,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + hecho (comprobando estado real de %n set no indicado en la auditoría completa) +@@ -9023,83 +9023,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + hecho (verificando estado de ROM para '%1', tiempo transcurrido = %2) + + +- +- ++ ++ + ROM state + estado de ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + estado de ROM para '%1' es '%2' + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9107,42 +9107,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + pre-caching icons from ZIP archive + pre-cacheando iconos desde archivo ZIP + + +- ++ + Icon cache - %p% + caché iconos - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + hecho (pre-cacheando iconos desde archivo ZIP, tiempo transcurrido = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + %n icono cargado +@@ -9150,77 +9150,77 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from directory + pre-cacheando iconos desde directorio + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + hecho (pre-cacheando iconos desde directorio, tiempo transcurrido = %1) + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + cargando category.ini + + +- ++ + Category.ini - %p% + Category.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + ERROR: no se puede abrir '%1' para su lectura -- no hay datos de category.ini disponibles + + +- ++ + done (loading category.ini, elapsed time = %1) + hecho (cargando category.ini, tiempo transcurrido = %1) + + +- ++ + loading catver.ini + cargando catver.ini + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + ERROR: no se puede abrir '%1' para su lectura -- no hay datos de catver.ini disponibles + + +- ++ + done (loading catver.ini, elapsed time = %1) + hecho (cargando catver.ini, tiempo transcurrido = %1) + + +- ++ + %1 category / %2 version records loaded + categoría %1 / %2 registros de versión cargados + + +- ++ + Category view - %p% + Vista por categorías - %p% + + +- ++ + %n category record(s) loaded + + %n registro de categorías cargado +@@ -9228,7 +9228,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + Vista versión - %p% + +@@ -9397,18 +9397,18 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + true + verdadero + + +- +- +- +- ++ ++ ++ ++ + false + falso + +@@ -9551,8 +9551,8 @@ Use local value for option '%1', overwrite with global value or don&ap + MainWindow + + ++ + +- + M.A.M.E. Catalog / Launcher II + + +@@ -9567,16 +9567,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Etiqueta + + + +- ++ + Icon / Value + Icono / Valor + +@@ -9585,10 +9585,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + Año + +@@ -9597,10 +9597,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Fabricante + +@@ -9609,10 +9609,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + Nombre + +@@ -9621,10 +9621,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Tipos de ROM + +@@ -9633,10 +9633,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + Jugadores + +@@ -9645,10 +9645,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Estado del driver + +@@ -9657,9 +9657,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + Categoría + +@@ -9668,9 +9668,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + Versión + +@@ -9691,9 +9691,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + Icono + +@@ -9720,7 +9720,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + Emuladores empotrados + +@@ -9944,9 +9944,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -10076,7 +10076,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + &Notas + +@@ -10133,11 +10133,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jugar + +@@ -10169,7 +10169,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + Acerca de Qt + +@@ -10251,10 +10251,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + A &favoritos + +@@ -10307,13 +10307,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10324,7 +10324,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10335,19 +10335,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10418,9 +10418,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10439,10 +10439,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10613,10 +10613,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + Archivo original + +@@ -10626,10 +10626,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + Rango + +@@ -10965,11 +10965,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jugar &empotrado + +@@ -11345,7 +11345,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + Navegador interno + +@@ -11550,12 +11550,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + Bloquear rangos + +@@ -11649,7 +11649,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11661,8 +11661,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + último mensaje repetido %n vez +@@ -11670,48 +11670,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Predeterminado + + +- +- ++ ++ + Enter search string + Introducir texto de búsqueda + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Cambiar el pausado automático de emuladores empotrados (mantener pulsado para menú) + + +- ++ + Scan the pause key used by the emulator + Escanear tecla de pausa usada por el emulador + + +- ++ + Scan pause key... + Escanear tecla de pausa... + + +- ++ + Toggle maximization of embedded emulator windows + Cambiar la maximización de la ventana de emuladores empotrados + + +- ++ + Dock / undock this widget + Acoplar / desacoplar este widget + +@@ -11722,265 +11722,265 @@ Use local value for option '%1', overwrite with global value or don&ap + Eliminar caché de ProjectMESS + + +- ++ + Embed emulator widget + Empotrar widget de emulador + + +- ++ + &Embed + &Empotrar + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Matar emulador(es) seleccionado(s) (manda señal KILL a proceso(s) de emulador(es)) + + +- ++ + &Kill + Ma&tar + + +- +- ++ ++ + Copy emulator command line to clipboard + Copiar el comando del emulador al portapapeles + + +- +- ++ ++ + &Copy command + &Copiar comando + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Comprobar estado de &ROM + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analizar ROM... + + +- ++ + Remove from favorites + Eliminar de favoritos + + +- +- ++ ++ + &Remove + &Eliminar + + +- ++ + Clear all favorites + Borrar todos los favoritos + + +- +- ++ ++ + &Clear + &Borrar + + +- ++ + Save favorites now + Guardar favoritos ahora + + +- +- ++ ++ + &Save + &Guardar + + +- ++ + Remove from played + Eliminar de jugados + + +- ++ + Clear all played + Borrar todos los jugados + + +- ++ + Save play-history now + Guardar historial de juego ahora + + +- +- +- +- ++ ++ ++ ++ + Tab position + + ++ ++ ++ ++ ++ ++ Set tab position north ++ Fijar posición de pestaña norte ++ ++ ++ ++ ++ ++ ++ &North ++ &Norte ++ + + + + + +- Set tab position north +- Fijar posición de pestaña norte ++ Set tab position south ++ Fijar posición de pestaña sur + + + + + + +- &North +- &Norte ++ &South ++ &Sur + + + + + + +- Set tab position south +- Fijar posición de pestaña sur ++ Set tab position west ++ Fijar posición de pestaña oeste + + + + + + +- &South +- &Sur ++ &West ++ &Oeste + + + + + + +- Set tab position west +- Fijar posición de pestaña oeste ++ Set tab position east ++ Fijar posición de pestaña este + + + + + + +- &West +- &Oeste +- +- +- +- +- +- +- Set tab position east +- Fijar posición de pestaña este ++ &East ++ &Este + + + + + + +- &East +- &Este +- +- +- +- +- +- + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + sorry, devices cannot run standalone + lo siento, los dispositivos no se pueden ejecutar por sí solos + + +- ++ + No devices available + Sin dispositivos disponibles + + +- ++ + Default configuration + Configuración predeterminada + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + por favor espera a que finalice el filtro de estado de ROM y vuelve a intentarlo + + +- +- ++ ++ + please wait for ROM verification to finish and try again + por favor espera a que finalice la verificación de las ROM y vuelve a intentarlo + + +- ++ ++ + +- + please wait for image check to finish and try again + por favor espera a que finalice la comprobación de imágenes y vuelve a intentarlo + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + por favor espera a que finalice el análisis actual de ROMAlyzer y vuelve a intentarlo + + ++ + +- + ROM verification already active + Verificación de ROM todavía activa + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + por favor espera a que finalice la recarga y vuelve a intentarlo + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirmar + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11991,22 +11991,22 @@ Se sobrescribirá los datos existentes en caché. + ¿Realmente quieres comprobar todos los estados de ROM ahora? + + +- ++ + automatic ROM check triggered + Comprobación automática de ROM activada + + +- ++ + image cache cleared + Borrada caché de imágenes + + +- ++ + icon cache cleared + Borrada caché de iconos + + +- ++ + freed %n byte(s) in %1 + + Liberado %n byte en %1 +@@ -12014,7 +12014,7 @@ Se sobrescribirá los datos existentes en caché. + + + +- ++ + %n entry(s) + + %n entrada +@@ -12022,7 +12022,7 @@ Se sobrescribirá los datos existentes en caché. + + + +- ++ + removed %n byte(s) in %1 + + eliminado %n byte en %1 +@@ -12030,7 +12030,7 @@ Se sobrescribirá los datos existentes en caché. + + + +- ++ + %n file(s) + + %n archivo +@@ -12038,363 +12038,363 @@ Se sobrescribirá los datos existentes en caché. + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + Borrada caché en memoria de ProjectMESS (%1) + + +- ++ + ROM state cache file '%1' removed + Archivo de estado de cache de ROM '%1' eliminado + + +- ++ + ProjectMESS page for system '%1' + Página ProjectMESS para sistema '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Descargando página ProjectMESS para sistema '%1', por favor espera... + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + Estableciendo el estilo de GUI a '%1' + + +- ++ + WARNING: GUI style '%1' not found + ATENCIÓN: estilo de GUI '%1' no encontrado + + +- ++ + WARNING: can't open style sheet '%1' + ATENCIÓN: no se puede abrir la capa de estilos '%1' + + +- ++ + YouTube on-disk cache cleared (%1) + Borrada caché en disco de YouTube (%1) + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + predeterminado + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Jugar a la máquina seleccionada (empotrado) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + ATENCIÓN: no se puede eliminar el archivo de caché de estado de ROM '%1', por favor comprueba los permisos + + +- ++ + triggering an automatic ROM check on next reload + activando una comprobación automática de ROM en el próximo inicio + + +- ++ + ERROR: no match found (?) + ERROR: no se ha encontrado ningún resultado (¿?) + + +- ++ + ProjectMESS page for '%1' / '%2' + Página ProjectMESS para '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Descargando página ProjectMESS para '%1' / '%2', por favor espera... + + +- +- ++ ++ + Export to... + Exportar a... + + +- +- ++ ++ + <inipath>/%1.ini + + + +- +- +- +- ++ ++ ++ ++ + Select file... + Seleccionar archivo... + + +- +- ++ ++ + <p>No data available</p> + <p>Sin datos disponibles</p> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Sin datos disponibles + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + nota: ¡los caracteres especiales $, (, ), *, +, ., ?, [, ], ^, {, |, } y \ deben ser precedidos por escape cuando se usan literalmente! + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + Reiniciar + + +- ++ + Negate search + Negar búsqueda + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + Desbloquear rangos + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + ERROR: no se puede cargar el archivo HTML '%1' + + +- ++ + ERROR: can't load PDF viewer from '%1' + ERROR: no se puede cargar el visor PDF desde '%1' + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + INFORMACIÓN: el modo arcade tiene que ser configurado primero, lanzando el diálogo de configuración + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + modo arcade: lanzando QMC2 Arcade, comando = '%1' + + +- ++ + WARNING: failed launching QMC2 Arcade + ATENCIÓN: fallo lanzando QMC2 Arcade + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + por favor espera a que finalice la clasificación y vuelve a intentarlo + + +- ++ + emulator #%1 is already embedded + emulador #%1 ya está empotrado + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + ATENCIÓN: encontradas múltiples ventanas del emulador #%1, escogiendo ID de ventana %2 para empotrar + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + empotrando emulador #%1, ID ventana = %2 + + +- +- +- ++ ++ ++ + paused + pausado + + +- ++ + Release emulator + Liberar emulador + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + Cambiar opciones de empotrado (mantener pulsado para menú) + + +- ++ + To favorites + A favoritos + + +- ++ + Kill emulator + Matar emulador + + +- ++ + &Kill emulator + &Matar emulador + + +- ++ + WARNING: no matching window for emulator #%1 found + ATENCIÓN: no se ha encontrado ventana para emulador #%1 + + +- ++ + Embedding failed + Empotrado fallido + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12405,141 +12405,141 @@ emulador(es) en un tiempo razonable. + ¿Volver a intentar el empotrado? + + +- ++ + Information + Información + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + lo siento, en este tiempo el emulador ha tenido una muerte horrible :(. + + +- +- ++ ++ + Scanning pause key + Escaneando tecla de pausa + + +- ++ + Are you sure you want to clear the favorites list? + ¿Estás seguro de que quieres borrar la lista de favoritos? + + +- ++ + Are you sure you want to clear the play history? + ¿Estás seguro de que quieres borrar el historial de juego? + + +- +- ++ ++ + Choose export file + Seleccionar archivo de exportado + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Todos los archivos (*) + + +- +- ++ ++ + Choose import file + Seleccionar archivo de importado + + +- +- ++ ++ + WARNING: invalid inipath + ATENCIÓN: ruta ini inválida + + +- +- ++ ++ + stopping current processing upon user request + parando el procesado actual a petición del usuario + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Los cambios en la configuración todavía no han sido aplicados. + ¿Realmente quieres salir? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Hay uno o mas emuladores ejecutándose todavía. + ¿Deberían ser cerrados al salir? + + +- ++ + There are one or more running downloads. Quit anyway? + Hay una o más descargas en curso. ¿Salir de todas formas? + + +- ++ + cleaning up + limpiando + + +- ++ + aborting running downloads + cancelando descargas en curso + + +- ++ + disconnecting audio source from audio sink + desconectando fuente de sonido del mezclador de audio + + +- ++ + destroying audio effects dialog + destruyendo la ventana de efectos de sonido + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + destruyendo el widget de video YouTube + + +- ++ + saving main widget layout + guardando el diseño de widget principal + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + destruyendo monitor de procesos + + +- ++ + killing %n running emulator(s) on exit + + matando %n emulador activo al salir +@@ -12547,7 +12547,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + manteniendo %n emulador activo +@@ -12555,86 +12555,86 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + destruyendo el gestor de acceso a la red + + +- ++ + so long and thanks for all the fish + hasta luego y gracias por el pescado + + +- ++ + Welcome to QMC2 v%1! + ¡Bienvenido a QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Cargando, por favor espere... + + +- ++ + loading style sheet '%1' + cargando capa de estilos '%1' + + +- ++ + removing current style sheet + eliminando la capa de estilos actual + + +- ++ + using default color palette for GUI style '%1' + usando la paleta de colores predeterminada para el estilo de GUI '%1' + + +- ++ + using custom color palette + usando paleta de colores personalizada + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + Índice YouTube - %p% + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + %n registro de información de video cargado +@@ -12642,149 +12642,149 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + Selecciona uno o más archivos de audio + + +- ++ + Add URL + Añadir URL + + +- ++ + Enter valid MP3 stream URL: + Introducir URL de flujo MP3 válido: + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + reproductor de sonido: info pista: título = '%1', artista = '%2', album = '%3', género = '%4' + + +- ++ + Buffering %p% + Almacenando %p% + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + Seleccionar archivo para almacenar descarga + + +- +- ++ ++ + Play tagged - %p% + Jugar etiquetados - %p% + + +- ++ + Add favorites - %p% + Añadir favoritos - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + por favor espera a que la actividad actual finalice y vuelve a intentarlo (esta operación en lote solo puede ejecutarse exclusivamente) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + Herramienta ROM (etiquetados) - %p% + + +- +- ++ ++ + Tag - %p% + Etiquetar - %p% + + +- +- ++ ++ + Tagging, please wait... + Etiquetando, por favor espere... + + +- +- ++ ++ + Untag - %p% + Desetiquetar - %p% + + +- +- ++ ++ + Untagging, please wait... + Desetiquetando, por favor espere... + + +- +- ++ ++ + Invert tag - %p% + Invertir etiqueta - %p% + + +- +- ++ ++ + Inverting tags, please wait... + Invirtiendo etiquetas, por favor espere... + + +- ++ + External browser + Navegador externo + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Detalle de software + + +- ++ + Choose overlay color + Elegir color de superposición + + +- ++ + WARNING: ROM path '%1' doesn't exist + ATENCIÓN: la ruta de ROM '%1' no existe + + +- ++ + WARNING: ROM path '%1' isn't accessible + ATENCIÓN: la ruta de ROM '%1' no es accesible + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! +@@ -12793,7 +12793,7 @@ Please check the 'rompath' option in the global emulator configuration + Por favor, revisa la opción 'rompath' en la configuración global del emulador para arreglarlo, ¡de lo contrario las ROMs no estarán disponibles para el emulador! + + +- ++ + The ROM paths + + %1 +@@ -12808,41 +12808,41 @@ no existen o no son accesibles + Por favor, revisa la opción 'rompath' en la configuración global del emulador para arreglarlo, ¡de lo contrario las ROMs no estarán disponibles para el emulador! + + +- ++ + Check ROM path + Comprobar la ruta ROM + + +- ++ + processing global emulator configuration + procesando configuración de emulador global + + +- +- ++ ++ + Export global MAME configuration + Exportar configuración MAME global + + +- ++ + Import from... + Importar desde... + + +- +- ++ ++ + Import global MAME configuration + Importar configuración MAME global + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + + +@@ -12999,14 +12999,12 @@ Por favor, revisa la opción 'rompath' en la configuración global del + + + +- + Go back + Anterior + + + + +- + Go forward + Siguiente + +@@ -13059,8 +13057,8 @@ Por favor, revisa la opción 'rompath' en la configuración global del + + + +- +- ++ ++ + Enter search string + Introducir texto de búsqueda + +@@ -13085,88 +13083,28 @@ Por favor, revisa la opción 'rompath' en la configuración global del + Resaltar coincidencias + + +- ++ + Enter URL + Introducir URL + + +- +- Open link +- Abrir enlace +- +- +- +- Open link in new window +- Abrir enlace en una nueva ventana +- +- +- +- Open image in new window +- Abrir imagen en una nueva ventana +- +- +- +- Save link as... +- Guardar enlace como... +- +- +- +- Copy link +- Copiar enlace +- +- +- +- Save image as... +- Guardar imagen como... +- +- +- +- Copy image +- Copiar imagen +- +- +- +- Copy image address +- Copiar la ruta de la imagen +- +- +- +- Reload +- Recargar +- +- +- +- Stop +- Detener +- +- +- +- Copy +- Copiar +- +- +- +- Inspect +- Inspeccionar +- +- +- ++ + WARNING: invalid network reply and/or network error + ATENCIÓN: respuesta de red incorrecta y/o error de red + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + MiniNavegadorWeb + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + Visor PDF + +@@ -13315,2782 +13253,2757 @@ Por favor, revisa la opción 'rompath' en la configuración global del + + + +- ++ + Language + Idioma + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + Escalar la imagen para que quepa en el marco (o usar el tamaño original) + + +- ++ + Show machine's description at the bottom of any images + + + +- ++ + Show machine name + + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + + + +- ++ + Restore saved machine selection at start and after reloading the machine list + + + +- ++ + Restore machine selection + + + +- ++ + Scaled preview + Previsualización escalada + + +- ++ + Show vertical machine status indicator in machine details + + + +- ++ + Machine status indicator + + + +- ++ + Application language + Idioma de la aplicación + + +- +- DE (German) +- DE (Alemán) +- +- +- +- ES (Spanish) +- ES (Español) +- +- +- +- EL (Greek) +- EL (Griego) +- +- +- +- FR (French) +- FR (Francés) +- +- +- +- IT (Italian) +- IT (Italiano) +- +- +- +- PL (Polish) +- PL (Polaco) +- +- +- +- PT (Portuguese) +- PT (Portugués) +- +- +- +- RO (Romanian) +- RO (Rumano) +- +- +- +- SV (Swedish) +- SV (Sueco) +- +- +- +- US (English) +- US (Inglés) +- +- +- ++ + Scaled cabinet + Cabina escalada + + +- ++ + Scaled controller + Mando escalado + + +- ++ + Scaled marquee + Marquesina escalada + + +- +- ++ ++ + Show status bar + Mostrar barra de estado + + +- ++ + Show the menu bar + Mostrar la barra de menús + + +- ++ + Show menu bar + Mostrar barra de menús + + +- ++ + Show short description of current processing in progress bar + Mostrar una descripción breve del proceso actual en la barra de progreso + + +- ++ + Show progress texts + Mostrar textos de progreso + + +- +- ++ ++ + Only when required + Solo cuando sea necesario + + +- ++ + Retry loading images which weren't found before? + ¿Volver a intentar cargar las imágenes que no se encontraron previamente? + + +- ++ + Retry loading images + Volver a cargar imágenes + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + La opción necesita que QMC2 se reinicie para surtir efecto + + +- ++ + restart required + Reinicio necesario + + +- ++ + Scaled title + Título escalado + + +- ++ + Scaled flyer + Flyer escalado + + +- ++ + Application font (= system default if empty) + Tipografía de la aplicación (= usa la tipografía del sistema si se deja en blanco) + + +- ++ + Browse application font + Navegar a la tipografía de la aplicación + + +- ++ + Scaled PCB + PCB escalada + + +- ++ + Emulator log size + Tamaño de log del emulador + + +- ++ + Maximum number of lines to keep in emulator log browser + Número máximo de líneas a mantener en el visor de log del emulador + + +- +- ++ ++ + unlimited + ilimitado + + +- +- ++ ++ + lines + líneas + + +- ++ + Front end log size + Tamaño de log de la interfaz + + +- ++ + Maximum number of lines to keep in front end log browser + Número máximo de líneas a mantener en el visor de log de la interfaz + + +- ++ + Application font + Tipografía de la aplicación + + +- ++ + Style sheet + Capa de estilos + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + Archivo de capa de estilos de Qt (*.qss, dejar en blanco para dejar sin capa de estilos) + + +- ++ + Browse Qt style sheet file + Navegar al archivo de capa de estilos Qt + + +- ++ + GUI style + Estilo GUI + + +- ++ + Application style (Default = use system's default style) + Estilo de aplicación (Predeterminado = usar el estilo predeterminado del sistema) + + +- ++ + Smooth image scaling (nicer, but slower) + Escalado suave de imágenes (mejor, pero más lento) + + +- ++ + Smooth scaling + Escalado suave + + +- ++ + Image cache size + Tamaño de caché de imagen + + +- ++ + Image cache size in MB + Tamaño de caché de imagen en MB + + +- ++ + MB + + + +- ++ + Use standard or custom color palette? + ¿Usar la paleta de colores estándar o personalizada? + + +- ++ + Log font + Tipografía del log + + +- ++ + Font used in logs (= application font if empty) + Tipografía utilizada en los logs (= tipografía de la aplicación si se deja en blanco) + + +- ++ + Browse font used in logs + Navegar a tipografía utilizada en logs + + +- +- ++ ++ + Show tool bar + Mostrar barra de herramientas + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + Usar una barra de herramientas y título unificada en Mac OS X + + +- ++ + Unify with title + Unificar con título + + +- ++ + Minimize when launching emulators? + ¿Minimizar cuando se lancen emuladores? + + +- ++ + Minimize on emulator launch + Minimizar al lanzar emulador + + +- ++ + Check for other instances of this QMC2 variant on startup + Comprobar si existen otras instancias de esta variante de QMC2 al iniciar + + +- ++ + Check single instance + Comprobar instancia única + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + No mostrar los mensajes enviados a traves de QDebug o de alguna de las funciones qDebug() / qCritical() / qWarning() / qFatal() + + +- ++ + Suppress Qt messages + Ocultar mensajes Qt + + +- ++ + Show splash screen when starting up? + ¿Mostrar pantalla de inicio al abrir? + + +- ++ + Show splash screen + Mostrar pantalla de inicio + + +- ++ + Customize the tool-bar + Personalizar la barra de herramientas + + +- ++ + Tool-bar... + Barra de herramientas... + + +- +- ++ ++ + F&iles / Directories + Arch&ivos / Directorios + + +- ++ + Front end log file + Log de la interfaz + + +- ++ + Front end log file (write) + Archivo de log de la interfaz (escritura) + + +- ++ + Browse front end log file + Navegar al archivo de log de la interfaz + + +- ++ + Favorites file + Favoritos + + +- ++ + Force QMC2's working directory to be the same as the executable's path + Forzar que el directorio de trabajo de QMC2 sea el mismo que la ruta del ejecutable + + +- ++ + Set working directory from executable + Establecer el directorio de trabajo del ejecutable + + +- ++ + Play history file + Historial de juego + + +- ++ + Play history file (write) + Archivo de historial de juego (escritura) + + +- ++ + Browse play history file + Navegar al archivo de historial de juego + + +- ++ + Data directory + Directorio de datos + + +- ++ + Frontend data directory (read) + Directorio de datos de la interfaz (lectura) + + +- ++ + Browse frontend data directory + Navegar al directorio de datos de la interfaz + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + Habilitar el uso de catver.ini -- consigue la última versión en http://www.progettoemma.net/?catlist + + +- ++ + Use catver.ini + Usar catver.ini + + +- ++ + Path to catver.ini (read) + Ruta a catver.ini (lectura) + + +- ++ + Browse path to catver.ini + Navegar a la ruta a catver.ini + + +- +- +- ++ ++ ++ + Preview directory + Directorio de previsualizaciones + + +- ++ + Preview directory (read) + Directorio de previsualizaciones (lectura) + + +- ++ + Browse preview directory + Navegar al directorio de previsualizaciones + + +- +- +- ++ ++ ++ + Flyer directory + Directorio de flyers + + +- ++ + Flyer directory (read) + Directorio de flyers (lectura) + + +- ++ + Browse flyer directory + Navegar al directorio de flyers + + +- +- +- ++ ++ ++ + Icon directory + Directorio de iconos + + +- ++ + Icon directory (read) + Directorio de iconos (lectura) + + +- ++ + Browse icon directory + Navegar al directorio de iconos + + +- +- +- ++ ++ ++ + Cabinet directory + Directorio de cabinas + + +- ++ + Cabinet directory (read) + Directorio de cabinas (lectura) + + +- ++ + Browse cabinet directory + Navegar al directorio de cabinas + + +- +- +- ++ ++ ++ + Controller directory + Directorio de mandos + + +- ++ + Controller directory (read) + Directorio de mandos (lectura) + + +- ++ + Browse controller directory + Navegar al directorio de mandos + + +- +- +- ++ ++ ++ + Marquee directory + Directorio de marquesinas + + +- ++ + Marquee directory (read) + Directorio de marquesinas (lectura) + + +- ++ + Default palette + Paleta predeterminada + + +- ++ + Edit the color palette + Editar la paleta de color + + +- ++ + Edit color palette... + Editar paleta de color... + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + Usar los diálogos de archivo del sistema (nativos), o usar los diálogos propios de Qt + + +- ++ + Browse marquee directory + Navegar al directorio de marquesinas + + +- +- +- ++ ++ ++ + Title directory + Directorio de títulos + + +- ++ + Title directory (read) + Directorio de títulos (lectura) + + +- ++ + Browse title directory + Navegar al directorio de títulos + + +- +- +- ++ ++ ++ + PCB directory + Directorio de PCB + + +- ++ + PCB directory (read) + Directorio de PCB (lectura) + + +- ++ + Browse PCB directory + Navegar al directorio de PCB + + +- ++ + Software snap-shot directory (read) + Directorio de instantáneas de software (lectura) + + +- ++ + Browse software snap-shot directory + Navegar al directorio de instantáneas + + +- +- +- ++ ++ ++ + reload required + Recarga necesaria + + +- +- +- ++ ++ ++ + SW snap folder + Carpeta de instantáneas SW + + +- ++ + Software notes folder + Carpeta de notas de software + + +- ++ + Folder used to store personal notes about any software titles (write) + Carpeta usada para almacenar notas personales sobre cualquier título de software (escritura) + + +- ++ + Browse software notes folder + Navegar a la carpeta de notas de software + + +- ++ + Enable the use of a template for (empty) software notes + Habilitar el uso de una plantilla para las notas de software (vacías) + + +- ++ + Software notes template + Plantilla de notas de software + + +- ++ + HTML file used as a template for software-notes (read) + Archivo HTML usado como plantilla para las notas de software (lectura) + + +- ++ + Browse software notes template + Navegar a la plantilla de notas de software + + +- ++ + Enable the use of category.ini + Habilitar el uso de category.ini + + +- ++ + Use category.ini + Usar category.ini + + +- ++ + Path to category.ini (read) + Ruta a category.ini (lectura) + + +- ++ + Browse path to category.ini + Navegar a la ruta a category.ini + + +- ++ + System notes folder + Carpeta de notas de sistema + + +- ++ + Enable the use of a template for (empty) system notes + Habilitar el uso de una plantilla para las notas de sistema (vacías) + + +- ++ + System notes template + Plantilla de notas de sistema + + +- ++ + HTML file used as a template for system-notes (read) + Archivo HTML usado como plantilla para las notas de sistema (lectura) + + +- ++ + Folder used to store personal notes about any systems (write) + Carpeta usada para almacenar notas personales sobre cualquier título de sistema (escritura) + + +- ++ + Browse system notes folder + Navegar a la carpeta de notas de sistema + + +- ++ + Browse system notes template + Navegar a la plantilla de notas de sistema + + +- ++ + Load software information database (from history.dat) + Cargar la base de datos de información del software (desde history.dat) + + +- ++ + Software information database - history.dat (read) + Base de datos de información de software - history.dat (lectura) + + +- ++ + Save machine selection on exit and before reloading the machine list + + + +- ++ + Save machine selection + + + +- ++ + Import MAME machine information to DAT-info database + + + +- ++ + Browse machine favorites file + + + +- ++ + MAME machine information database - history.dat (read) + + + +- ++ + Browse software information database (history.dat) + Navegar a la base de datos de información de software (history.dat) + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + + + +- ++ + Machine favorites file (write) + + + +- ++ + Define additional artwork classes for systems and software-list entries + Definir clases de arte adicionales para las entradas de listas de sistemas y software + + +- ++ + Set up additional artwork classes... + Configurar clases de arte adicionales... + + +- ++ + Choose active image formats and their priorities (per artwork class) + Escoge los formatos de imagen activos y sus prioridades (por arte) + + +- ++ + Select image formats... + Seleccionar formatos de imagen... + + +- ++ + Load MAME machine information database (history.dat) + + + +- ++ + Machine info (MAME) + + + +- ++ + Load MESS emulator information database (messinfo.dat) + Cargar la base de datos de información de emulador MESS (messinfo.dat) + + +- ++ + MESS emulator information database - messinfo.dat (read) + Base de datos de información de emulador MESS - messinfo.dat (lectura) + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + + + +- ++ + Parent image / video fallback + + + +- ++ + Open the component setup dialog + + + +- ++ + Component setup... + + + +- ++ + Show animation when loading, filtering or tagging the machine list? + + + +- ++ + Show loading animation + + + +- ++ + Scaled software snapshot + + + +- ++ + Select individual fallback settings per artwork class + + + +- ++ + Individual fallback settings... + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + + + +- ++ + Browse MESS emulator information database (messinfo.dat) + Navegar a la base de datos de información de emulador MESS (messinfo.dat) + + +- ++ + Video snap folder + + + +- ++ + Video snap folder (read) + + + +- ++ + Browse video snap folder + + + +- ++ + Optimize catver.ini for faster loading + + + +- ++ + Setup the icon cache database + + + +- ++ + Enable ROM state filtering? + ¿Habilitar el filtrado de estado de ROM? + + +- ++ + ROM state filter + Filtro de estado de ROM + + +- ++ + Update delay + Retraso de actualización + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + Deshabilitar automáticamente las instantáneas de software cuando el detalle de software sea visible (puede ser molesto) + + +- ++ + No SW snaps for visible details + Sin instantánea de SW para los detalles visibles + + +- ++ + Select sort criteria + Seleccionar el criterio de ordenación + + +- ++ + ROM state + Estado de ROM + + +- ++ + Tag + Etiqueta + + +- ++ + Year + Año + + +- ++ + Manufacturer + Fabricante + + +- ++ + ROM types + Tipos de ROM + + +- ++ + Players + Jugadores + + +- ++ + Driver status + Estado del driver + + +- ++ + Source file + Archivo fuente + + +- ++ + Rank + Rango + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + Mostrar las instantáneas de software al pasar el cursor del ratón por la lista de software + + +- ++ + Sort order + Orden + + +- ++ + Select sort order + Seleccionar el orden de organización + + +- ++ + Ascending + Ascendente + + +- ++ + Descending + Descendente + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + Lanzar la emulación diréctamente cuando se seleccione algún elemento en la búsqueda-, favoritos-, o la lista de jugados (en vez de saltar a la lista maestra) + + +- ++ + Play on sub-list activation + Jugar al activar en sub-lista + + +- ++ + Display ROM status icons in master lists? + ¿Mostrar los iconos de estado de ROM en las listas maestras? + + +- ++ + Show ROM status icons + Mostrar iconos estado ROM + + +- ++ + Cursor position + Posición del cursor + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + Seleccionar la posición del cursor que QMC2 utiliza al moverse automáticamente al objeto actual (¡esta opción se activa en todas las vistas y listas!) + + +- ++ + Visible + + + +- ++ + Top + Arriba + + +- ++ + Bottom + Abajo + + +- ++ + Center + Centro + + +- ++ + Responsiveness + Sensibilidad + + +- ++ + immediate + inmediato + + +- ++ + Show ROM state C (correct)? + ¿Mostrar estado de ROM C (correcto)? + + +- ++ + Show ROM state M (mostly correct)? + ¿Mostrar estado de ROM M (mayormente correcto)? + + +- ++ + Show ROM state I (incorrect)? + ¿Mostrar estado de ROM I (incorrecto)? + + +- ++ + Show ROM state N (not found)? + ¿Mostrar estado de ROM N (no encontrado)? + + +- ++ + Show ROM state U (unknown)? + ¿Mostrar estado de ROM D (desconocido)? + + +- ++ + Sort criteria + Criterio de ordenación + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + Seleccionar el modo de lanzamiento predeterminado (independiente de la ventana empotrada) cuando se inicie la emulación activando una entrada en cualquier lista + + +- ++ + independent + independiente + + +- ++ + embedded + empotrado + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + Seleccionar la posición donde se muestran las instantáneas de software en las listas de software + + +- ++ + Above / Left + Encima / Izquierda + + +- ++ + Above / Center + Encima / Centro + + +- ++ + Above / Right + Encima / Derecha + + +- ++ + Below / Left + Abajo / Izquierda + + +- ++ + Below / Center + Abajo / Centro + + +- ++ + Below / Right + Abajo / Derecha + + +- ++ + Disable snaps + Desactivar instantáneas + + +- ++ + none + ninguno + + +- ++ + ms + + + +- ++ + Launch emulation on double-click events (may be annoying) + Lanzar la emulación al hacer doble-click (puede ser molesto) + + +- ++ + Double-click activation + Activación por doble-click + + +- ++ + SW snap position + Posición inst. de SW + + +- ++ + Default launch-mode + Modo predeterminado + + +- ++ + Automatically trigger a ROM check if necessary + Iniciar una comprobación de ROM automática si es necesario + + +- ++ + Auto-trigger ROM check + Auto-inicio comprobación ROM + + +- ++ + Display (or hide) device sets in master lists? + ¿Mostrar (ocultar) sets de dispositivos en las listas maestras? + + +- ++ + Show device sets + Mostrar sets de dispositivos + + +- ++ + Display (or hide) BIOS sets in master lists? + ¿Mostrar (ocultar) sets de BIOS en las listas maestras? + + +- ++ + Browse system manual folder + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + Show BIOS sets + Mostrar sets BIOS + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + &Shortcuts / Keys + &Atajos / Teclas + + +- +- ++ ++ + Redefine key sequence + Redefinir la secuencia de teclas + + +- ++ + Reset key sequence to default + Vover a secuencia de teclas predeterminada + + +- ++ + Reset + Reiniciar + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + Activar definiciones de atajos; doble-click para redefinir la secuencia de teclas + + +- +- ++ ++ + Function / Key + Función / Tecla + + +- ++ ++ + +- +- +- ++ ++ + Default + Predeterminado + + +- ++ + Custom + Personalizado + + +- ++ + &Joystick + + + +- ++ + Enable GUI control via joystick + Habilitar control de GUI con joystick + + +- ++ + Enable joystick control + Habilitar control con joystick + + +- ++ + Rescan available joysticks + Escanear joysticks disponibles + + +- ++ + Rescan joysticks + Escanear joysticks + + +- ++ + Select joystick + Seleccionar joystick + + +- ++ + List of available joysticks - select the one you want to use for GUI control + Lista de joysticks disponibles - selecciona el que quieras utilizar para controlar la GUI + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + No se encontraron joysticks + + +- ++ + Joystick information and settings + Información de joystick y configuración + + +- ++ + Axes: + Ejes: + + +- ++ + Number of joystick axes + Numero de ejes del joystick + + +- +- +- +- ++ ++ ++ ++ + 0 + + + +- ++ + Buttons: + Botones: + + +- ++ + Number of joystick buttons + Número de botones del joystick + + +- ++ + Hats: + + + +- ++ + Number of coolie hats + + + +- ++ + Trackballs: + + + +- ++ + Number of trackballs + Número de trackballs + + +- ++ + Automatically repeat joystick functions after specified delay + Repetir automáticamente las funciones del joystick tras un tiempo determinado + + +- ++ + Auto repeat after + Auto-repetir tras + + +- ++ + Repeat all joystick functions after how many milliseconds? + ¿Repetir todas las funciones del joystick tras cuantos milisegundos? + + +- +- ++ ++ + ms + + + +- ++ + Event timeout + Tiempo de espera de evento + + +- ++ + Process joystick events after how many milliseconds? + ¿Procesar los eventos de joystick tras cuantos milisegundos? + + +- ++ + Calibrate joystick axes + Calibrar los ejes del joystick + + +- ++ + Calibrate + Calibrar + + +- ++ + Test all joystick functions + Probar todas las funciones del joystick + + +- ++ + Test + Probar + + +- ++ + Map joystick functions to GUI functions + Asignar funciones de joystick a funciones de GUI + + +- ++ + Map + Asignar + + +- ++ + Remap a joystick function to the selected GUI function + Reasignar una función de joystick a la función de GUI seleccionada + + +- ++ + Remap + Reasignar + + +- ++ + Remove joystick mapping from selected GUI function + Eliminar la asignación de joystick de la función de GUI seleccionada + + +- ++ + Remove + Eliminar + + +- ++ + Active joystick mappings; double-click to remap joystick function + Activar asignaciones de joystick; doble-click para reasignar la función de joystick + + +- ++ + Joystick function + Función de joystick + + +- ++ + Network / &Tools + Red / Herramien&tas + + +- ++ + Zip tool + Herramienta ZIP + + +- +- +- ++ ++ ++ + Command + Comando + + +- ++ + External zip tool, i.e. "zip" (read and execute) + Herramienta zip externa, p.ej. "zip" (lectura y ejecutar) + + +- ++ + Browse for zip tool + Navegar a herramienta zip + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + Argumentos + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + Lista de argumentos de la herramienta zip para eliminar entradas del archivo ZIP (p.ej. "$ARCHIVE$ -d $FILELIST$") + + +- ++ + ROM tool + Herramienta ROM + + +- ++ + External ROM tool (it's completely up to you...) + Herramienta ROM externa (usa la que te apetezca...) + + +- ++ + Browse ROM tool + Navegar a herramienta ROM + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + Lista de argumentos de la herramienta ROM (p.ej. "$ID$ $DESCRIPTION$") + + +- +- +- +- ++ ++ ++ ++ + Working directory + Directorio de trabajo + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + Directorio de trabajo a utilizar cuando se ejecute la herramienta ROM (se usa el directorio de trabajo actual de QMC2 si se deja en blanco) + + +- ++ + Browse working directory of the ROM tool + Navegar al directorio de trabajo de la herramienta ROM + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + Copiar la salida de la herramienta al log de la interfaz (manteniéndola para depuración) + + +- ++ + Copy tool output to front end log + Copiar salida a log de interfaz + + +- ++ + Automatically close the tool-executor dialog when the external process finished + Cerrar automáticamente la ventana de la ejecución de la herramienta cuando el proceso externo finalice + + +- ++ + Close dialog automatically + Cerrar ventana automáticamente + + +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + Habilitar / Deshabilitar el uso de un proxy HTTP para las búsquedas web + + +- ++ + Use HTTP proxy + Usar proxy HTTP + + +- ++ + Host / IP + + + +- ++ + Hostname or IP address of the HTTP proxy server + Nombre de host o dirección IP del servidor proxy HTTP + + +- ++ + Port + Puerto + + +- ++ + Port to access the HTTP proxy service + Puerto para acceder al servicio de proxy HTTP + + +- ++ + User ID + ID usuario + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + ID de usuario para acceder al servicio de proxy HTTP (vacío = sin autenticación) + + +- +- Password +- +- +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- Password para acceder al servicio de proxy HTTP (vacío = sin autenticación) +- +- +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- <font size="-1"><b>¡ATENCIÓN: los passwords se guardan con un cifrado <u>débil</u>!</b></font> +- +- +- ++ + Browser settings + Configuración del navegador + + +- ++ + Browse cookie database + Inspeccionar la base de datos de cookies + + +- ++ + Cookie database file (write) + Archivo de base de datos de cookies (lectura) + + +- ++ + Cookie database + Base de datos de cookies + + +- ++ + Save and restore cookies used on web pages? + ¿Guardar y restaurar las cookies utilizadas en las páginas web? + + +- ++ + Restore cookies + Restaurar cookies + + +- ++ + Manage cookies stored in database + Administrar las cookies almacenadas en la base de datos + + +- ++ + Manage stored cookies + Administrar cookies guardadas + + +- ++ + Clear database + Borrar la base de datos + + +- ++ + 7-zip tool + herramienta 7-zip + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + Herramienta 7-zip externa, p. ej. "7za" (lectura y ejecución) + + +- ++ + Browse for 7-zip tool + Navegar a herramienta 7-zip + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + Lista de argumentos de la herramienta 7-zip para eliminar entradas del archivo 7-zip (p.ej. "$ARCHIVE$ -d $FILELIST$") + + +- ++ + Machine list cache + + + +- ++ + Browse machine list cache file + + + +- ++ + Software list cache DB + + + +- ++ + Browse software list cache database file + + + +- ++ + Clean up user data database (removes obsolete entries) + Limpiar la base de datos de usuario (elimina entradas obsoletas) + + +- ++ + Database file for caching the ouput from -listsoftware (write) + + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + + + +- ++ + Machine list database + + + +- ++ + Machine list database file (write) + + + +- ++ + Browse machine list database file + + + +- ++ + Foreign &emulators + &Emuladores externos + + +- ++ + Remove all cookies by recreating the database + Eliminar todas las cookies volviendo a crear la base de datos + + +- ++ + Use native file dialogs + Usar diálogos de archivo nativos + + +- ++ + Kill emulators when QMC2 exits? + ¿Salir de los emuladores cuando se cierre QMC2? + + +- ++ + Kill emulators on exit + Matar emuladores al salir + + +- ++ + Terminate all other emulator instances when launching a new one? + ¿Cerrar las demás instancias del emulador cuando se lance una nueva? + + +- ++ + One emulator at a time + Un emulador a la vez + + +- ++ + Compressed cabinet file (read) + Archivo cabinet comprimido (lectura) + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + Seleccionar formato de compresión + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + + + +- ++ + Browse compressed cabinet file + Navegar a archivo cabinet comprimido + + +- ++ + Compressed controller file (read) + Archivo de mandos comprimido (lectura) + + +- ++ + Browse compressed controller file + Navegar al archivo de mandos comprimido + + +- ++ + Compressed marquee file (read) + Archivo de marquesinas comprimido (lectura) + + +- ++ + Browse compressed marquee file + Navegar al archivo de marquesinas comprimido + + +- ++ + Switch between specifying a title directory or a compressed title file + Cambiar entre especificar un directorio de títulos o un archivo comprimido de títulos + + +- ++ + MAME emulator information database - mameinfo.dat (read) + Base de datos de información de emulador MAME - mameinfo.dat (lectura) + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + Navegar a la base de datos de información de emulador MAME (mameinfo.dat) + + +- ++ + Switch between specifying a preview directory or a compressed preview file + Cambiar entre especificar un directorio de previsualizaciones o un archivo comprimido de previsualizaciones + + +- ++ + Compressed preview file (read) + Archivo comprimido de previsualizaciones (lectura) + + +- ++ + Browse compressed preview file + Navegar a archivo comprimido de previsualizaciones + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + Cambiar entre especificar un directorio de flyers o un archivo comprimido de flyers + + +- ++ + Compressed flyer file (read) + Archivo comprimido de flyers (lectura) + + +- ++ + Browse compressed flyer file + Navegar a archivo comprimido de flyers + + +- ++ + Switch between specifying an icon directory or a compressed icon file + Cambiar entre especificar un directorio de iconos o un archivo comprimido de iconos + + +- ++ + Compressed icon file (read) + Archivo comprimido de iconos (lectura) + + +- ++ + Browse compressed icon file + Navegar a archivo comprimido de iconos + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + Cambiar entre especificar un directorio de cabinas o un archivo comprimido de cabinas + + +- ++ + Switch between specifying a controller directory or a compressed controller file + Cambiar entre especificar un directorio de mandos o un archivo comprimido de mandos + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + Cambiar entre especificar un directorio de marquesinas o un archivo comprimido de marquesinas + + +- ++ + Compressed title file (read) + Archivo comprimido de títulos (lectura) + + +- ++ + Browse compressed title file + Navegar a archivo comprimido de títulos + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + Cambiar entre especificar un directorio de PCB o un archivo comprimido de PCB + + +- ++ + Compressed PCB file (read) + Archivo comprimido de PCB (lectura) + + +- ++ + Browse compressed PCB file + Navegar a archivo comprimido de PCB + + +- ++ + Compressed software snap-shot file (read) + Directorio de instantáneas de software comprimido (lectura) + + +- ++ + Browse compressed software snap-shot file + Navegar al directorio de instantáneas de software comprimido + + +- ++ + Load MAME emulator information database (mameinfo.dat) + Cargar la base de datos de información de emulador MAME (mameinfo.dat) + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + Cambiar entre especificar un directorio de instantáneas de software o un archivo comprimido de instantáneas + + +- ++ + Load MESS machine information database (sysinfo.dat) + Cargar la base de datos de información de maquinas MESS (sysinfo.dat) + + +- ++ + MESS machine information database - sysinfo.dat (read) + Base de datos de información de maquinas MESS - sysinfo.dat (lectura) + + +- ++ + Browse MESS machine information database (sysinfo.dat) + Navegar a la base de datos de información de máquinas MESS (sysinfo.dat) + + +- ++ + E&mulator + E&mulador + + +- ++ + &Global configuration + Configuración &global + + +- +- ++ ++ + Executable file + Archivo ejecutable + + +- ++ + Recreate user data database (removes <b>all</b> entries) + Recrear base de datos de datos de usuario (elimina <b>todas<b> las entradas) + + +- ++ + Emulator executable file (read and execute) + Archivo ejecutable del emulador (lectura y ejecutar) + + +- +- ++ ++ + Browse emulator executable file + Navegar al archivo ejecutable del emulador + + +- ++ + Emulator log file + Archivo log del emulador + + +- ++ + Emulator log file (write) + Archivo log del emulador (escritura) + + +- ++ + Browse emulator log file + Navegar al archivo log del emulador + + +- ++ + Options template file + Archivo de plantilla de opciones + + +- ++ + Options template file (read) + Archivo de plantilla de opciones (lectura) + + +- ++ + Browse options template file + Navegar al archivo de plantilla de opciones + + +- ++ + ROM state cache + Caché de estado ROM + + +- ++ + ROM state cache file (write) + Archivo de caché de estado ROM (escribir) + + +- ++ + Browse ROM state cache file + Navegar al archivo de caché de estado ROM + + +- ++ + General software folder + Carpeta de software general + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + Directorio a usar como carpeta predeterminada de software para el configurador de dispositivos de MESS ( si existe una sub-carpeta con el mismo nombre que la máquina, se usará esa carpeta) + + +- ++ + Browse general software folder + Navegar a la carpeta de software general + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + Directorio de trabajo a utilizar cuando se ejecute el emulador (se usa el directorio de trabajo actual de QMC2 si se deja en blanco) + + +- +- ++ ++ + Browse working directory + Navegar al directorio de trabajo + + +- ++ + Software state cache + Caché de estado de software + + +- ++ + Directory used to store individual state cache files for each software-list (write) + Directorio a usar para almacenar archivos individuales de caché de estado para cada lista de software (escritura) + + +- ++ + Browse software state cache directory + Navegar al directorio de caché de estado de software + + +- ++ + XML cache database + Base de datos de cache XML + + +- ++ + Database file for caching the output from -listxml (write) + Archivo de base de datos para almacenar la salida de -listxml (escritura) + + +- ++ + Browse XML cache database file + Navegar al archivo de caché de base de datos XML + + +- ++ + User data database + Base de datos de datos de usuario + + +- ++ + Database file for storing/retrieving user data (write) + Archivo de base de datos para almacenar/recuperar datos de usuario (escritura) + + +- ++ + Browse user data database file + Navegar al archivo de base de datos de datos de usuario + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + Recrear automáticamente todos los caches de emulador cuando el resultado de '-listfull' cambie + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + Indica si el $ID$ está ausente en la línea de comandos enviada (amarillo) o no (verde) + + +- ++ + Registered emulator's name + Nombre registrado del emulador + + +- ++ + Replace emulator registration + Sustituir el registro del emulador + + +- ++ + Replace + Sustituir + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + Argumentos enviados al emulador -- usa $ID$ como comodín para la ID única del set, $DESCRIPTION$ para su descripción + + +- ++ + Icon + Icono + + +- ++ + Name + Nombre + + +- ++ + Executable + Ejecutable + + +- ++ + Custom IDs + IDs personalizadas + + +- ++ + Register emulator + Registrar emulador + + +- ++ + Emulator name + Nombre de emulador + + +- ++ + Deregister emulator + Des-registrar emulador + + +- ++ + Import MESS emulator information to DAT-info database + + + +- ++ + Import MAME emulator information to DAT-info database + + + +- ++ + Import MESS machine information to DAT-info database + + + +- ++ + DAT-info database file + + + +- ++ + Browse DAT-info database file + + + +- ++ + DAT-info database file (write) + + + +- ++ + Machine info (MESS) + + + +- ++ + Emu info (MAME) + + + +- ++ + Emu info (MESS) + + + +- ++ + Software info + Info software + + +- +- Import software information to DAT-info database ++ ++ Import software information to DAT-info database ++ ++ ++ ++ ++ Browse MAME machine information database (history.dat) ++ ++ ++ ++ ++ Machine description ++ ++ ++ ++ ++ Machine name ++ ++ ++ ++ ++ Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) ++ ++ ++ ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) + + + +- +- Browse MAME machine information database (history.dat) ++ ++ pt_BR (Brazilian Portuguese) + + + +- +- Machine description ++ ++ ro (Romanian) + + + +- +- Machine name ++ ++ sv (Swedish) + + + +- +- Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) ++ ++ us (American English) + + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + + + +- ++ + Machine list cache file (write) + + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + + + +- ++ + Add + Añadir + + +- ++ + Remove + Eliminar + + +- ++ + Command to execute the emulator (path to the executable file) + Comando para ejecutar el emulador (ruta al archivo ejecutable) + + +- ++ + Apply settings + Aplicar cambios + + +- ++ + &Apply + &Aplicar + + +- ++ + Restore currently applied settings + Restaurar la configuración guardada + + +- ++ + &Restore + &Restaurar + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + Volver a la configuración predeterminada (¡pulsa <i>Restaurar</i> para recuperar la configuración actual!) + + +- ++ + &Default + Pre&determinado + + +- ++ + Close and apply settings + Cerrar y guardar los cambios + + +- ++ + &Ok + &Aceptar + + +- ++ + Close and discard changes + Cerrar y descartar los cambios + + +- ++ + &Cancel + &Cancelar + + +- ++ + Minimize when launching (non-embedded) emulators? + ¿Minimizar cuando se lancen emuladores (no empotrados)? + + +- +- +- +- ++ ++ ++ ++ + Category + Categoría + + +- +- +- +- ++ ++ ++ ++ + Version + Versión + + +- ++ + Check all ROM states + Comprobar todos los estados de ROM + + +- ++ + Check images and icons + Comprobar imágenes e iconos + + +- ++ + About QMC2 + Acerca de QMC2 + + +- ++ + Analyze tagged sets + Analizar los sets etiquetados + + +- ++ + Export ROM Status + Exportar el estado de ROM + + +- ++ + Copy tagged sets to favorites + Copiar los sets etiquetados a favoritos + + +- ++ + Online documentation + Documentación online + + +- ++ + Clear image cache + Borrar caché de imágenes + + +- ++ + Setup arcade mode + Configurar modo arcade + + +- ++ + Clear ProjectMESS cache + Eliminar caché de ProjectMESS + + +- ++ + Clear icon cache + Borrar caché de iconos + + +- +- ++ ++ + Open options dialog + Abrir la ventana de opciones + + +- ++ + Play (independent) + Jugar (independiente) + + +- ++ + Play (embedded) + Jugar (empotrado) + + +- ++ + About Qt + Acerca de Qt + + +- ++ + Check states of tagged ROMs + Comprobar el estado de las ROM etiquetadas + + +- ++ + Recreate template map + Volver a crear el mapa de plantilla + + +- ++ + Check template map + Comprobar mapa de plantilla + + +- +- ++ ++ + Stop processing / exit QMC2 + Parar el proceso / salir de QMC2 + + +- ++ + Clear YouTube cache + Borrar caché YouTube + + +- ++ + Toggle ROM state C + Alternar el estado de ROM C + + +- ++ + Toggle ROM state M + Alternar el estado de ROM M + + +- ++ + Toggle ROM state I + Alternar el estado de ROM I + + +- ++ + Toggle ROM state N + Alternar el estado de ROM N + + +- ++ + Toggle ROM state U + Alternar el estado de ROM D + + +- ++ + Tag current set + Etiquetar set actual + + +- ++ + Untag current set + Desetiquetar set actual + + +- ++ + Toggle tag mark + Cambia la marca de etiquetado + + +- ++ + Toggle tag / cursor down + Alternar etiqueta / cursor abajo + + +- ++ + Toggle tag / cursor up + Alternar etiqueta / cursor arriba + + +- ++ + Tag all sets + Etiquetar todos los sets + + +- ++ + Untag all sets + Desetiquetar todos los sets + + +- ++ + Invert all tags + Invertir todas las etiquetas + + +- ++ + Tag visible sets + Etiquetar sets visibles + + +- ++ + Untag visible sets + Desetiquetar sets visibles + + +- ++ + Invert visible tags + Invertir las etiquetas visibles + + +- ++ + Hierarchical view + + + +- ++ + Run external ROM tool + Ejecutar herramienta de ROM externa + + +- ++ + Run ROM tool for tagged sets + Ejecutar herramienta de ROM en los sets etiquetados + + +- ++ + Toggle full screen + Alternar pantalla completa + + +- ++ + Software-list view-mode flat + + + +- ++ + Software-list view-mode tree + + + +- ++ + Previous track (audio player) + Pista anterior (reproductor de sonido) + + +- ++ + Next track (audio player) + Pista siguiente (reproductor de sonido) + + +- ++ + Fast backward (audio player) + Retroceso rápido (reproductor de sonido) + + +- ++ + Fast forward (audio player) + Avance rápido (reproductor de sonido) + + +- ++ + Stop track (audio player) + Parar pista (reproductor de sonido) + + +- ++ + Pause track (audio player) + Pausar pista (reproductor de sonido) + + +- ++ + Play track (audio player) + Reproducir pista (reproductor de sonido) + + +- ++ + Raise volume (audio player) + Aumentar volumen (reproductor de sonido) + + +- ++ + Lower volume (audio player) + Disminuir volumen (reproductor de sonido) + + +- ++ + Plus (+) + Más (+) + + +- ++ + Minus (-) + Menos (-) + + +- ++ + Cursor down + Cursor abajo + + +- ++ + End + Fin + + +- ++ + Escape + + + +- ++ + Cursor left + Cursor izquierda + + +- ++ + Home + Inicio + + +- ++ + Page down + Av Pág + + +- ++ + Page up + Re pág + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- +- +- ++ + + + +@@ -16100,738 +16013,753 @@ Por favor, revisa la opción 'rompath' en la configuración global del + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + + + +- ++ + please reload machine list for some changes to take effect + + + +- ++ + sorting machine list by %1 in %2 order + + + +- ++ + triggering automatic reload of machine list + + + +- ++ + Enter key + Tecla enter + + +- ++ + Analyze current machine + + + +- ++ + Copy machine to favorites + + + +- ++ + Reload machine list + + + +- ++ + Check machine's ROM state + + + +- ++ + Open ROMAlyzer (system mode) + + + +- ++ + Open ROMAlyzer (software mode) + + + +- ++ + Rebuild current machine + + + +- ++ + Rebuild tagged machines + + + +- ++ + Check software-states + Comprobar los estados de software + + +- ++ + Launch arcade mode + Lanzar modo arcade + + +- ++ + Increase rank + Incrementar rango + + +- ++ + Decrease rank + Reducir rango + + +- ++ + Return key + Tecla de retorno + + +- ++ + Cursor right + Cursor derecha + + +- ++ + Tabulator + Tabulador + + +- ++ + Cursor up + Cursor arriba + + +- ++ + Activate item + Activar objeto + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + ATENCIÓN: la configuración no se puede escribir, por favor comprueba los permisos de acceso para + + +- +- ++ ++ + Reset to default font + Volver a la tipografía predeterminada + + +- +- ++ ++ + No style sheet + Sin capa de estilos + + +- ++ + image cache size set to %1 MB + Fijar el tamaño de la caché de imágenes en %1 MB + + +- +- ++ ++ + Confirm + Confirmar + + +- ++ + &Local + + + +- ++ + &Overwrite + S&obrescribir + + +- ++ + Do&n't apply + &No aplicar + + +- ++ + please restart QMC2 for some changes to take effect + por favor reinicia QMC2 para que algunos cambios surtan efecto + + +- ++ + ascending + ascendente + + +- ++ + descending + descendente + + +- ++ + 7z error + error 7z + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + ERROR: no se puede abrir el archivo de icono, por favor comprueba los permisos de acceso para %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + ERROR: no se puede abrir archivo de icono %1 + + +- +- ++ ++ + Preview file + Archivo de previsualización + + +- +- ++ ++ + Flyer file + Archivo de flyer + + +- +- ++ ++ + Icon file + Archivo de icono + + +- +- ++ ++ + Cabinet file + Archivo de cabina + + +- +- ++ ++ + Controller file + Archivo de mando + + +- +- ++ ++ + Marquee file + Archivo de marquesina + + +- +- ++ ++ + Title file + Archivo de título + + +- +- ++ ++ + PCB file + Archivo de PCB + + +- +- ++ ++ + SW snap file + Archivo de captura de SW + + +- +- +- ++ ++ ++ + Custom IDs... + IDs personalizadas... + + +- ++ + Full detail view + + + +- +- +- +- ++ ++ ++ ++ + Category view + + + +- +- +- +- ++ ++ ++ ++ + Version view + + + +- ++ + libarchive error + + + +- ++ + Choose Qt style sheet file + Seleccionar archivo de capa de estilos Qt + + +- ++ + Qt Style Sheets (*.qss) + Capas de estilo Qt (*.qss) + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + Todos los archivos (*) + + +- ++ + Choose preview directory + Seleccionar directorio de previsualizaciones + + +- ++ + Custom view + + + +- ++ + N/A + + + +- ++ + Choose flyer directory + Seleccionar directorio de flyers + + +- ++ + Choose icon directory + Seleccionar directorio de iconos + + +- ++ + Choose cabinet directory + Seleccionar directorio de cabinas + + +- ++ + Choose controller directory + Seleccionar directorio de mandos + + +- ++ + Choose marquee directory + Seleccionar directorio de marquesinas + + +- ++ + Choose title directory + Seleccionar directorio de títulos + + +- ++ + Choose PCB directory + Seleccionar directorio de PCB + + +- ++ + Choose options template file + Seleccionar archivo de plantilla de opciones + + +- +- ++ ++ + Choose emulator executable file + Seleccionar el archivo ejecutable del emulador + + +- ++ + Choose emulator log file + Seleccionar el archivo log del emulador + + +- ++ + Choose XML cache database file + Seleccionar archivo de base de datos de caché XML + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + Esto eliminará <b>todos<b> los datos de usuario actuales y creará una nueva base de datos. + ¿Estás seguro de querer hacerlo? + + +- ++ + &Yes + &Sí + + +- ++ + &No + &No + + +- ++ + Choose user data database file + Seleccionar archivo de base de datos de datos de usuario + + +- ++ + Choose cookie database file + Seleccionar archivo de base de datos de cookies + + +- ++ + Choose zip tool + Seleccionar herramienta zip + + +- ++ + Choose 7-zip tool + Seleccionar herramienta 7-zip + + +- ++ + Choose ROM tool + Seleccionar herramienta ROM + + +- +- +- ++ ++ ++ + Choose working directory + Seleccionar directorio de trabajo + + +- ++ + Choose play history file + Seleccionar archivo de historial de jugados + + +- ++ + Choose machine list database file + + + +- ++ + Choose ROM state cache file + Seleccionar archivo de caché de estado de ROM + + +- ++ + Choose software state cache directory + Seleccionar el directorio de caché de estado de software + + +- ++ + Choose general software folder + Seleccionar carpeta de software general + + +- ++ + Choose front end log file + Seleccionar archivo de log de la interfaz + + +- ++ + Choose data directory + Seleccionar directorio de datos + + +- ++ + Choose dat-info database file + + + +- ++ + Choose MAME machine info DB + + + +- ++ + Choose software info DB + Seleccionar BD info de software + + +- ++ + Choose catver.ini file + Seleccionar archivo catver.ini + + +- ++ + Choose category.ini file + Seleccionar archivo category.ini + + +- ++ + Choose compressed preview file + Seleccionar archivo comprimido de previsualización + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + Archivos ZIP + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + Archivos 7z + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + Todos los archivos + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + Archivos soportados + + +- ++ + Choose compressed flyer file + Seleccionar archivo comprimido de flyers + + +- ++ + Choose compressed icon file + Seleccionar archivo comprimido de iconos + + +- ++ + Choose compressed cabinet file + Seleccionar archivo comprimido de cabinas + + +- ++ + Choose compressed controller file + Seleccionar archivo comprimido de mandos + + +- ++ + Choose compressed marquee file + Seleccionar archivo comprimido de marquesinas + + +- ++ + Choose compressed title file + Seleccionar archivo comprimido de títulos + + +- ++ + Choose compressed PCB file + Seleccionar archivo comprimido de PCB + + +- ++ + Choose compressed software snap file + Seleccionar archivo comprimido de instantánea de software + + +- ++ + Choose software snap directory + Seleccionar el directorio de capturas de software + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + Especificar IDs externos predefinidos para este emulador, ejecutable desde la vista 'emuladores externos' + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + Elegir icono para este emulador externos (mantener para menu) + + +- +- ++ ++ + Default icon + Icono por defecto + + +- +- ++ ++ + No icon + Sin icono + + +- ++ + &Foreign emulators + Emuladores e&xternos + + +- ++ + Choose machine favorites file + + + +- ++ + Choose machine list cache file + + + +- ++ + Choose software list cache database file + + + +- ++ + Choose MESS machine info DB + Seleccionar BD de info de máquina MESS + + +- ++ + Choose MAME emulator info DB + Seleccionar BD de info de emulador MAME + + +- ++ + Choose MESS emulator info DB + Seleccionar BD de info de emulador MESS + + +- ++ + Choose software notes folder + Seleccionar carpeta de notas de software + + +- ++ + Choose software notes template + Seleccionar plantilla de notas de software + + +- +- ++ ++ + HTML files (*.html *.htm) + Archivos HTML (*.html *.htm) + + +- ++ + Choose system notes folder + Seleccionar carpeta de notas de sistema + + +- ++ + Choose system notes template + Seleccionar plantilla de notas de sistema + + +- ++ + Choose video snap folder + + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + shortcut map is clean + el mapa de atajos está limpio + + +- ++ + WARNING: shortcut map contains duplicates + ATENCIÓN: el mapa de atajos contiene duplicados + + +- ++ + Choose image file + Seleccionar archivo de imagen + + +- ++ + Supported image files (%1) + Archivos de imagen soportados (%1) + + +- ++ + ERROR: couldn't initialize SDL joystick support + ERROR: no se pudo inicializar el soporte para joystick SDL + + +- ++ + joystick map is clean + el mapa de joystick está limpio + + +- ++ + WARNING: joystick map contains duplicates + ATENCIÓN: el mapa de joystick contiene duplicados + +@@ -17322,28 +17250,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + correcto + + +- ++ + incorrect + incorrecto + + +- ++ + mostly correct + mayormente correcto + + +- ++ + not found + no encontrado + + +- ++ + + + +@@ -17352,54 +17280,54 @@ Are you sure you want to do this? + desconocido + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + Predeterminado + + +- ++ + Import from... + Importar desde... + + +- +- ++ ++ + Export machine-specific MAME configuration + + + +- +- ++ ++ + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + Creando la GUI, por favor espera... + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + Funciones Phonon activadas - usando Phonon v%1 + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Soporte de joystick SDL activado - usando SDL v%1.%2.%3 + +@@ -17507,19 +17435,19 @@ Are you sure you want to do this? + info de estado de la lista de software '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 + + +- ++ + + yes + + + +- ++ + + no + + + +- ++ + + partially + parcialmente +@@ -17567,7 +17495,7 @@ Are you sure you want to do this? + + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + reproductor de vídeo: error XML: error fatal en la línea %1, columna %2: %3 + +@@ -21044,7 +20972,7 @@ Are you sure you want to do this? + + + +- ++ + Choose mame.ini + + +@@ -21058,7 +20986,7 @@ Are you sure you want to do this? + + + +- ++ + Choose ui.ini + + +@@ -21167,178 +21095,179 @@ Are you sure you want to do this? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + &Cancelar + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21346,74 +21275,73 @@ Are you sure you want to do this? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + Predeterminado + + +- +- ++ ++ + Choose emulator executable file + Seleccionar el archivo ejecutable del emulador + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Todos los archivos (*) + + +- ++ + Choose working directory + + + +- ++ + Choose ROM path + Seleccionaro la ruta ROM + + +- ++ + Choose sample path + Seleccionar la ruta de muestras + + +- ++ + Choose hash path + Seleccionaro la ruta hash + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23674,59 +23602,59 @@ Are you sure you want to do this? + Ruta ROM + + +- ++ + Default + Predeterminado + + +- ++ + Error + + + +- ++ + The specified file isn't executable! + ¡El archivo especificado no es ejecutable! + + +- +- ++ ++ + Choose emulator executable file + Seleccionar el archivo ejecutable del emulador + + +- +- ++ ++ + All files (*) + Todos los archivos (*) + + +- ++ + Choose working directory + Seleccionar el directorio de trabajo + + +- ++ + Choose ROM path + Seleccionaro la ruta ROM + + +- ++ + Choose sample path + Seleccionar la ruta de muestras + + +- ++ + Choose hash path + Seleccionaro la ruta hash + + +- ++ + Single-instance check + Comprobación única-instancia + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23737,17 +23665,17 @@ Aunque puede que sean los restos de una caida previa. + ¿Salir ahora, aceptar una vez o ignorar completamente? + + +- ++ + &Exit + &Salir + + +- ++ + &Once + &Una vez + + +- ++ + &Ignore + &Ignorar + +@@ -23890,49 +23818,49 @@ Aunque puede que sean los restos de una caida previa. + + + +- ++ + FLV 240P + + + + +- ++ + FLV 360P + + + + +- ++ + MP4 360P + + + + +- ++ + FLV 480P + + + + +- ++ + MP4 720P + + + + +- ++ + MP4 1080P + + + + +- ++ + MP4 3072P + + + + +- ++ + Start / pause / resume video playback + Comenzar / pausar / resumir reproducción de vídeo + +@@ -23943,20 +23871,16 @@ Aunque puede que sean los restos de una caida previa. + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + Restante + + + +- ++ + Volume + Volumen + +@@ -24001,286 +23925,261 @@ Aunque puede que sean los restos de una caida previa. + R: + + +- ++ + Mute / unmute audio output + Silenciar / no silenciar el sonido + + +- ++ + Volume level + Nivel de volumen + + +- ++ + Video progress + Progreso de vídeo + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + Nivel de llenado del buffer: %1% + + +- +- ++ ++ + Play this video + Reproducir este vídeo + + +- +- +- ++ ++ ++ + Copy video URL + Copiar URL del vídeo + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + Ver juegos por categoría (sin filtro de país) + + +- +- +- ++ ++ ++ + Copy author URL + Copiar URL del autor + + +- +- ++ ++ + Paste video URL + Pegar URL del vídeo + + +- +- ++ ++ + Local movie file... + Archivo de película local... + + +- ++ + Remove selected videos + Eliminar vídeos seleccionados + + +- +- +- ++ ++ + Full screen (return with toggle-key) + Pantalla completa (volver con la tecla de alternado) + + +- +- ++ ++ + Attach this video + Agregar este vídeo + + +- ++ + Auto-suggest a search pattern? + ¿Auto-sugerir un patrón de búsqueda? + + +- ++ + Auto-suggest + Auto-sugerir + + +- ++ + Enter string to be appended + Introducir el texto que será anexado + + +- ++ + Append... + Anexar... + + +- ++ + Enter search string + Introducir texto de búsqueda + + +- ++ + Appended string + Texto anexado + + +- ++ + Enter the string to be appended when suggesting a pattern: + Introducir el texto que será anexado cuando se sugiera una búsqueda: + + +- ++ + Valid placeholder macros: + Macros de sustitución válidos: + + +- +- ++ ++ + All files (*) + Todos los archivos (*) + + +- +- ++ ++ + Choose movie file + Seleccionar archivo de película + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + Modo pantalla completa -- pulsa '%1' para volver a ventana + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + Modo pantalla completa -- pulsa la tecla de alternado para volver a ventana + + +- ++ + video player: the local movie file '%1' is already attached, ignored + reproductor de vídeo: el archivo de película local '%1' ya está agregado, ignorando + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + reproductor de vídeo: un vídeo con la ID '%1' ya está agregado, ignorado + + +- ++ + Buffering: %1% + + + +- +- Loading +- Cargando +- +- +- +- ++ + Playing + Reproduciendo + + +- +- ++ + Paused + Pausado + + +- +- video player: playback error: %1 +- reproductor de vídeo: error de reproducción: %1 +- +- +- +- Video playback error: %1 +- Error de reproducción de vídeo: %1 +- +- +- ++ + Fetching info for video ID '%1' + Obteniendo info para el vídeo ID '%1' + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + reproductor de vídeo: error de info de vídeo: ID = '%1', estado = '%2', errorCode = '%3', errorText = '%4' + + +- +- +- ++ ++ ++ + Video info error: %1 + error info vídeo: %1 + + +- ++ + video player: video info error: timeout occurred + reproductor de vídeo: error de info de vídeo: tiempo de espera agotado + + +- ++ + video info error: timeout occurred + error info vídeo: tiempo de espera agotado + + +- ++ + video info error: unknown reason + error info vídeo: razón desconocida + + +- ++ + video player: video info error: %1 + reproductor de vídeo: error de info de vídeo: %1 + + +- +- ++ + Return to windowed mode + + + +- +- ++ + Full screen (press %1 to return) + Pantalla completa (pulsa %1 para volver) + + +- ++ + video player: video image info error: %1 + reproductor de vídeo: error de info de imagen de vídeo: %1 + + +- ++ + video player: search request error: %1 + reproductor de vídeo: error de petición de búsqueda: %1 + + +- ++ + video player: search error: can't parse XML data + reproductor de vídeo: error de búsqueda: no se puede procesar los datos XML + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + reproductor de vídeo: no se puede determinar la ID del vídeo con la URL '%1' -- por favor informa a los desarrolladores + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + reproductor de vídeo: no se puede asociar la imagen devuelta para el vídeo ID '%1' -- por favor informa a los desarrolladores + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + reproductor de vídeo: no se puede guardar la imagen para el vídeo ID '%1' al directorio de caché de YouTube '%2' -- por favor comprueba los permisos + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + reproductor de vídeo: no se puede guardar la imagen para el vídeo ID '%1', el directorio de caché YouTube '%2' no existe -- por favor corregir + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + reproductor de vídeo: descarga de imagen fallida para el vídeo ID '%1', la imagen obtenida no es válida + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + reproductor de vídeo: descarga de imagen fallida para el vídeo ID '%1', error text = '%2' + +diff --git a/data/lng/qmc2_fr.qm b/data/lng/qmc2_fr.qm +index f30d192629816918f1ad6f5977910581b1bc7b5b..f57d46c6a25db4d30b71f8174caafbef34102225 100644 +GIT binary patch +delta 15927 +zcmXY&cR)@5|HohF{eGW&?m2f+85yCes7OUVkt7L)2-zbgDyysyu9dw{$qFGOqcmit +zG$dsAwRiUVh$Qp(a{B%C=-hj{_q@kzJzwuzzO>$%Dl=ct<((1^`Q-S^p|z&XbTCB!w+>%LGIo1? +zZfBz*924Q3Tq%ALl1}ddpuGw(VGw|I25?S8YB>xa7_aHSUy+pq +z@QtN^{{U{--y14{&S?r@V}h^agZ$;N6$;5D{9?SObGjiH;`>i(IqalDI%gt)oez*n +z+vNb#**IkzK&zoZ9oi~n(VJ_TfZyNR1{ZISLgtL)?6v^7#ZCZzMF2g|7D1=90R3Wd@$fs4RNjG`XAp3M +zLKRZE19Co)8v?+9srY(HEhDehG6tUsU#IrCSbzC_tvr`nkoYV)iCUP9#2Fsc3FyW! +z10eDsg49TsX0c^f|X +z?Cq|{RmK&-zZ$MLp}&c6oULIiry7Wg)M +zfYphprROcVm=6q!ngVj?1Gyy+u +zdOVPd4B+Q@1Bv=Bk5k#YMC0wrJkZUHfZvVtQQaH(gQEZA!|5ymLe2+rbGQO66v*ZB5-7Jdf+^$ +ze%JscbOK?ZFIvjQS{_~}rwC5Q%=@6OKMTl{A`oMofvU5ij@?@zIg_EzdbHx!$xwe) +z4p8F_sJ{le`#dyAv<4dO4-G!H19rOuG`wO3RMiyBz0rPz{$PH`14wEyG`6b&@}?9l +z3|YWB*M(;576UV#1J>#p0COV1wrMK*E$fS5JGlw4(tBXHx<8QPFTpOWH&Dw`Xt`oB +zQ2+nrShX#QKPM-tEjlLjfmTzO13W5L$UR!2kZ~8G)yg#B+#W%zO~t^uH?8I4Kxl8+4y>2Yqa;Le^#`bk7L_G9d+e1ma|mo(MhOO#rf>8TdEv +z3T#6q_!k`jd5bujL=KgIiM9@rpP~2WF~D{|g#fPt;38Ysa@r(?^m|hXT!|lX-XI4^ +z?qt{xIZna>EQJ9>R^V*4gkY~|V2w;+ptl*&)V(lp`D~yg*22IQDZq6PL7oIAr@_Eg +z2>`q86_OS`6w-vmTD}+qgNk|r9W@sQ7osnC{|E+`76EaJt7YW|h0J^?ghWq(UMy+= +zgj_^h9{w*3sj~v;=tLM2*$udZH(;p72Dqs9wT#)Xkp4WSkXbCOWw!?~EIb!j6OiX> +zEG!TF2g85h1ZTa55i@YN?n!`=qdo#j)4}M{YG96Wa;|1z#{(*ea$5|X{cMQ(J6UZs +zwH#^+Q7=P)-WdnclNiuV4^g-9G}>^f&|Dqh_$-egv?hO(4qzql+^n#xvk_ +z^C58~eqFmhu<4l@kh?x|nbwI+xGn$E+8V#ih9iFFKvGUacJpeW{|$!hyS~5-)o^S) +z55#^4ocg^T=um&i-E{!S^9ztS;|s2t4Ea08;f~Ni{uw`@ubx3cc09nY6$!17;JDVfTu*H|>W<@GzJ%jDXMmAxb>?_qG}ApMoNzb-xUyxO`mQOE +zJ99a)o;h%-$(%H$80g97oHQ#Lqi`jsQ#gXtm6rl*;lLR-ZU@fnG*`EE3~ug;3hD2e +z3fagE&g{@T;EES=^}IF%xpswXXory$(zqrSLyQ29n>dTB7(f;UbC%OS02y10ghGN?+}Lrra~mDzLhG9XWWMJ@b9w+>?39L^`Y0S&Kqfc+hby|F&fE-n4RBtqxtXul?)n#wsHaT!>&v^j-XDYWYJr&>^<<|Gw5A=O!g)I3#x3N#14xsD^w>1pI(3DQx_A3cMHYRY%qt^qS-JRRbZs5xO^yGHWMvp$H +z3%6%G8uR)I+`c9h$o*#Afg>frCPs0ojwL{PAL9-dv;|gS!R5rq0W0?6j&J{r*~>z% +z(98tr*S*|1BB1MW=SpUl1D*1fyTIeje0k4Z%r^k(;>cZTiVq@>=Wevbl{|SC>Bs|f +zo6D7V!55DARmfZ_xqGpGz1ro +zK#TuyFJ4sxx9>go>Twki-_P6|ujfFAf8^eJ-vkoyoqKx&x3*s+?!A90kS$%g|AycS +z?s_68nAn5YwjhNnb?x$TjVN}&L#t!krvVwAn8kqRhvwp7pi4n +zQ>U&LPQ)=EcgLVX#IbT75SPuw>D_J2#_o}}{uC(ZNL;fq)X#ZE-0I8&+J7GT=Mm-( +z0sj!sqd2tm$#S--yGh9|(!JUVNK69hQJewvT)zCv)WRstApV87faSj?y#o_4_NJ0R +zRX^ZN>_|{oH1Y*c$e{HhKz8JjL3ezC#I7Sl_V)+I{USp?xB`P`wH&vQ46S|*)O#}- +z)&mm`M@mMt!}}dJlM%r`@o9FDkpp)CWf^4rQ+t4(O-b~Gx){67>|G{BlWD9FtAGu) +zeBOpkn~%?8W=3L&+CBDZ@x+StYttJ;@q@$;-eO +zBs&6Q?!!EiJ)scfA@y4r=O&Tkj-!CPdz+k$#P^=4$;kwq)D`2%sjzl{Ll#0<_r1lU%ZKcq>#2eQ_IYhT2{{Tp~rW>i+&<*HRnX0$qOa*e(Fx(8- +zi80i~*$c?6P-?o#*dAa5N6l`107zU%8!WN`cCG<6FZBf$v!6B|h%=HuhFa7~1bW1d +zws>I$>`pSZ%)*&5PNvrTaq91Asm)$22k$LZ$Xy(xkPN>|o!a30*&)=q!e||V=u36Xkj$zMZMd70U}(b-T`RrAHUJAo@h^v +zQ)t&aZor*?LVb#{KAZi7`sHC}zrF|c-;xg8G8^ju2Dx-Q?Gubk|G)dR&$w*hzNrouZ{tTm2H^0WMR7R)m!Y%TA35_ZI+zptuC!KLh1{e}Ujn8oe-7eGl +z4VR+YkxCbiMNhPEvlq(z3}y2UUHSWV`KU~gswak +z1Jt^dt~`R9{+f!e@>>ivs+-)Yk%e(U5>48(8K`L=n*8S}mQrzaUxXRZk4NbK$Pge2 +zCunL_Ah5cW9&De3&gBg~ROp90=^{<{@&~s17R`1%0i@eCddv&m>;yt{swqC^D|&Jn +zx_q03H1`(X?=q7XJ0Ad2F^`_F!SDO`EG>lrUiBb +z^hLKjnEnd%MbHVL_w@8-n>N7ao~3UaX@T>(Sj)a$=-b93kius4?Zgwn@|@|rSgZ~A +zo5;b9ZHM@!)33Qxf&4JgYTrtL6dzh0^*1c6q}4}TV~Mz$ew&V3NxRkbM@xLp6W!_0 +z(YUdTUFff;sPV9o^mogBKp$}QcUN=~`=jZf={tc=c9F{)+Zyj*Vf@VgK+nW6wPibi +zACzevYJfOjW|}qDzfE6j~%WR*Z +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 +zv)Jk^rojb$6tWH-`s8%eVB08(BfK+xAou>x_ +z>2ytOQ#uuk2%B1V87#W|#`x#iP;^~*ALTw{En{1WZkqN0$Nv#KUdI$+B_~I@*-BX| +z(LcNf$g&r5l3RDV-YM~Hp;qUU;CCI*$KV~%}OA=7je`}agotalOn4=x9I +zwNebu9srQ>OCd^t;-IbQ;phJr2me6N`5;>y>S_nfcugF(*$rrQjW}ZY4Ip--#W4<; +zYkxc`j%_ReeH|u--U$XH*U(-Z*DnK4uJGdcXBfH~d=eu^qsw~nL?JeA#K^rR=x%Jp +zsLdmQez+$_Z|e)3uDv+z?{xU5i!q*L*v($TksEEl)D`Ur5SmPA-CZjE1z7J6UY +z*2oK>zco@G)xL4hntEdLyb9EE7KnR%C`#*X#JxJe#(%cB&$cBt3nzGax|KU5ixV^2hX>;*R7at(4?ZkYB58gXiAvxr#kmi0@ +z$l8Av^OxYpwtOa@J%g#W>teA0@8?chDx}tH#e!=lm`f&!Md$JLW9AB}^C*?;)4nd)`45a$31O;dpSXTVs#hKMtv14+E!zk3gYuVxFb3|7GEuzkKR3B +ze68oPsg?Lld~GrdHM2M3n<_Moo*TsXj-|lJF!6n_QXoqz#19NT!;3Cr^%%VGSDg5L +zBo<0}F5-`}SRfwJ;-AInVYc)Y|7^Gc%q23#g0bR5Q)Y_5}=l +zJ3wZBk}OJ|0SxS_kUMlmYCavqRz`wkg&jvYm{rS{s}wRpEm^<31*GLXsbzh1NL#(6 +zR^vYab?YiQ&iUKuoglTF-2h3Yl*`$?MNH;Cd{Ox;^O%;$9{r?mXG@&apFh^zqEsaHsIdrA@MIAy{4Qp7!c +zJ=sMeJ-=Uy_)&qy!ViTs_G~Sm+A3tNu1HaxGEs6akfH;A1EijmqF=7TJ=v9REpJ`{R_meMv6t!`g7!}e{6@Ofiw#fS6Vt!A?u`S|2WAN`V2cOyTWNry`?xJ=n39a)08L9aSey3;s-H+7}-7_9nNQz`vY +zIgYlel+mIOw#xeFDu2N3iPGs6@mLSFmdiW28xNXGr&q;bYjLGQ7Bi`qyY5T5+j^qP +z+eJF_YB|7oCn+yG8@P}pg*35;ly?jB!4yX+|C$R5SbFJfWfpMF`bkBdHltqERw}-U +zEv3Yd()mP89dMPT-h +z(!Ed9u=|uI-T#7GdUb*H@XFt#T>;YL*@0*PJ?l!3bCOUmXed2xga-nRmeO}Y7CP? +zfbPiG)R|ugXt=)|)y3BMxj@q*0$0JOxyI6}6rgIl#`5=TY{>4>*epRC+Lotjc?JWs +z;k>5R1W)WVjL+Mg^HLkhWFoRg6al?$2OUTl6T!h|eUW}&mqh~6RUi=b@WvdU&`(D{jOaO^*?#Kog2IJu628mt02^U}%pw +zywePNum(uR0nN}S_=TyhR5g!dT6Qc$73Jj;iG}ONI2?Cb?-> +zcZUTrn%zIKMcm_#W={t{V22AeDRBm%^P6h+b(oJ$svVmBC9_bXxGvA_YSGBCN|TkB +zf{DgbP4<4=o(ror$GHx`W}cR_yV^RGpVbtO=djv8q$!*^1y5-eXo`A#2eA9CDXEW6 +z=j=I6=^!-US=VIVr~8#* +zXR3KmF~!{6R3SN&tNC&u8Q2q|`P!=xn~fbb->#x&X184n&#Qopi`8;bpMcqnmJj>1 +z6*MUElFy;?dmnd)S*hCQ_PAo<0r{P37 +zpqs5_S)tZN1b|Unv~C4x=j%UmT3dpZ3Ye5(^uO!Z2|Vki5%c- +zAziz#4H}3B@gY!-^>ykvGX^hlUNfiGvcg*-bN0{Ff3KWuGmI~>WbqbmH67BdJ%+nLy6wq4pGq>B?q*?Wxh|PSl!jEYy}w +zkg)wMYA-*)82czvdp&VETE{=y{~a3y+&e*gYX*K?=m71lS$lvTAEmu(>4{GKg7)r2 +zoSE12w9nt(!h<9(+83)H0j1X3mkyYFd@9zye76+EiY~S6e^dL~6Z>G3(i9rm=o;;t +ztFAzw%+tOn^MHIS)V|MO4Ai%o_P=z@Zq}dCR(iI>+P;tWbAA?pcZ&8)6Dwfc6m6AP +zDjuDP(tcfKjak(e?e~Ut(2x#kzjw#U{+_4(a~ZuspX)lv!zgomhYlX2denBVj@H9M +zVDjL<#8Q0BZXIoe;dShPI(0Kw;D)czi8UzCHTg%U_o%_9vc1kM@iK7d=jhCXw*#3i +z>nyU-u{Zjvv&egnZsvrpnJ+HiYI|La`Zs_c%hFj*=#Of=x6ZmP&VbK5o!xKL3a>uzz`W)4@ZBqbb;CG!%e|e|B#`2y@*IsP~bXikf`vq8@-U!ioSo&fp*{hIsbdk&a +zElBh_`MrNMc@ZxU?`dI-TdwQLuf~IY=XE{B{=m)VbUjbo0qZwF*T)}E=Z}oi^;>3* +zC1R>VZq;mE&{nilv6rs@Oe-L5R_KBwaG@=ebOSs7LQ(IoF2oV%H_l8q5^?R##x +zF7ltdn5GoyB8%OCWL4@S-zEY~x~z-xr~ncHx+rw^B>SOmiUZ0?-M%QKmdkb1%CJBR +z>#v&uM}RyYtD6lqn9V)b&0bW5{UVia&MO?}psTvMW-YN_XRlju-UBAmX5Dm)&VRv^ +zp02vZ_3**h4bUyS{}hk^ZPBd=!+~b?(yjb=3a;}o-KveaVP@^qtvlHO=))ztEmLLz +zQT@?v^{fGSOLRM5V+AIr>UK4}3taudy1m!!QKEUN+yCD}ppqyz?QP-k%~^Le3{Qro +z1?Vywp>iSh*JT_C#^u*3WNi=Wj*0mCsa$znZ~OKI&(K62`shkKm}4xNqPqw?un|8` +zcQF*z8Ct2kbQ3?iAXOpjut|4=!!`PpFPHVUFe$In-O9$e>0hY3jpq^GgQ{>-z1iQaeOjj8tPsVyQvv#V6Y>8aozT}` +zdJo9>B7HN>9sIu(`B#8b*GpsdPVyU6fi3iHqbpGL)aYHUih#J<>fK&vV)o~vZ(koZ +zm{X_p?Wbqsug}8toiuH+IGCgF925$4Ns1g5Xm0FnRs&>HAANwH0id6iv+OtNwFZ9BL3j +z^4z}e4x5YgHE#I!rF8v|I%xX8|LA{rKu?lUWB_Y?s=^BfZW*exUkA$%`q~=1R~pO& +zU*P)XDJ0Dz4Q8|Pp;~rACIb66#9(#;Jw)>Yg)Ftk(BM0^j7@?J4gYGP3yTenn)%=? +zh=yimm?G>6F<2&vK%R6q*ler@(%i>ja~vJNv)*9u`4H E1H?T)f?m27Bye8|lhf +z2B&R*}? +zSs~8BhVHvRpcH0l@N0~z(9$o49=fBLg#;=jKaVM-R~ji~-a11My$8zI^X3E9CY@D3Adby?i +zAjo1!;v~b0stWuyV3lFjUtuV&P$ApC*0Aa=?#{)>3>yyM^52X#B&37`TdFf`euWK- +z;|~?Gc8d&2j_0t0Wb)4bRf$iw8`x>71 +zu*4s_{8mV9hbm-Y{~2EPcn+}E!|#$7geA3WkT{_uosd({la5#CoashYPD|M|n!~2C$7wmXR=k%k=YAW0 +Mzc!~qXZ{TTe~0$ASO5S3 + +delta 17301 +zcmZ|01z1&E_vk&=oOA89dn2J>AR!@Jb1 +z-YhEd(bwOGN7n$(TS%nKPa=N+x1pOv)*upqSK@K1MAooAvLSGrWD;4!j>rMPu3SP6 +z1a9I%19RFNIQybRmV@8mhXD9AlE`g3E>TZc{lGu4S(DEim{%x~S?xiN2X1!~ayD># +z%q21hXXJU{ddrblkuCs208p2s$R5B|o{&f<4g^qRqek}yXjTB6>i`1>IZ32BI7rPt +z_r?n|>iz(3P~8omf#$RXurtQ<*pNC7nk|uxT_us`;0x`h;PuA_4mvE6=1c-`2mq2| +zErt>weOglh=Yc?5b(YA|cNw@E2dsr1PF}G@=8666oDJMmSAd{X0KqX5xrJ#G=`b89 +zJWpp1!)qgO`qoG!iTE5IQ?V6tI?xkLBI{rc5aI`-l3Ir!4+rR#j+2K?N79uA01l-bRuEa@>m<;4*6$(`fp06-4{<48-*d{zrTV9dKxQ*gOYDrdAh-;{&@kkuuz8!(C +z$wHn5cFjq=KrLIF=K%~H2DHfzfWdVWg^d{U2s>FSkve7qj7kIUK#oMZGfQm3T$PiT +z1KG6#NUE(E$!si*EP=!~2bLHB@U%uEw;&VP^wB_vRg3djlSX7z7_hBbK$kTJw(S~l +z-aUbB-vad1aiu2tWhTegIXiE1C&mZNLS*NdH$aXY0Ha0iQAjsH +z{kg?Jr$2}K^N~C5LWA69K+^|7gAZ+hJz`*f(H5xsBUt$1`qA2h#ceMjdn%!kLoJX` +ztHDxN2rRG}G+j6qSi=R-OpY=zAr95?6AZPtU++m^sRFa>9;7D#_^j$R6E^>A=bnFa8$Tq5^ywnQd> +zAeP82$utY`zT95FJP%r4F$K6-}5+8+A&nF8H+2>Q$#4>V>Y^qIW{xGw#Xhw;NF +zq0ii<0Gk{o66;`zboCAc-=#y}Q(b|^E`)w%s0+RpK)=dUKwPI8SQ{geStUaM#L*DJ +z(qf_iIb6$w|A7HUvw@D<0RzT-1u}XZ42bUx+|H{oP=)i9(AL1T?GhQSGSF_Rf!#jB +zpx6>%wkG0Wm8H!-3WI;*Ko`D(A(<$(JGaBoVIP3(uLn_;-+{R=7uTrzw9mJI1dpk} +zIgW>fx?B)sSk^wBs-OkzOSeS*aFn*cNYAi2^TNSv|gqP85KE`v!w9e|C! +z1$yU|K>Lc2?bZ#oaTLtHTMKll7t9%159r{jFz+QQ`H(o6AAAhBhfQJey*Oa!c7iAp +zv@&jxyMzI!nGCth@N?~l!}6!5KprZ^-D+1d_KkR7ZLj}15B3CE0Ljxsk=1vg-^W1F +zoj_DJN;oiz2jaL6j{I2*bod}B*_a39?I1Xw`4#6*gwk~}C>fSedMpU&hi`DQXbHf^ +z*%IkxUpQI31Y40Hkxo<@_-edF*5(?Nl{kQ&&DsQ~+GF!F7Q?yj1wgrMsB#?wtnmq` +z`fvrvq9$-H7S+^lPq>rphr)9e?quWeEbxPeO(z2PvKc&n5eu~40C;9bfLpzrU( +z$KBfiCRRu!N%i4V@-|>cpFvIFRbUfd!N0$z0qH*men1?+*&_JS*B#sK3_p?-z;vzP +zPk9+Iv-ce2p#JSIZW8lbg&UDvX;L4|PX1*(c+*rn$JD^2{yAOGh)_wm0XXXaEfQam~A+$*wshk!*?JoG+FG`I5#tziI~T))>xZ +zbSZEqrwv@?&b9eg4Rme<*S7J$Ksx-SPLJW@f7fw6msq_S=)v1uQbJ!~CoQ>@hq1tVpXM@t;*9O<#bt`~f%9#_jeCjh +z8+Ya<=FNtjX2X0x% +zVt^7iF4y8IF#FM5ZUA2Y93_!$&E=LKasarnhg&rg&C=M8+}evvfvoJuZHQW=2b$fV +z+r+K{{PN~DjYkbXnR1)g;-X&a!fk6zfjoN7!;Zgyl`vGp}$yUJLPUMQ0 +zOapd4oIAMo3wkkAxH3~?puZ1sr-^_nD1@sRcO7V!f;-FO2>k-?T&WI7Cl~Hw6Kse$ +zio4p}1E=!DHT;7I=Dm=+-U*M7kC4dP^W5F^AYkG5xqBNO(SUE@?iZd#$Lq3KQ_sHZ +zziRH;ARVxsSGeanML;hYbI)IX2X5Ot?&YHzAc0@F*S^ni%@gj8-!&kiKe#tnQN)89 +za_>Safvn}Zj{|Tf^S+8P#`ea)MiDYSH%k^mU``M5>j>( +zSj8{WJ!~o3;t~=j>jj*#0}1!X#Xj>Z>AR>ukWEua-`jyevLeWU?GeBfMr6QycVNOd +z1LK#Hf!|*N4caBwx)m#?XwQ3Y8n~!#1Wut6OuT(9*Cn& +z9b1q6L{eE9Mh#mGd>cSgCu3V0z98v)@_|m&lZ+r7fnD(=^F2=9a#yk3bcpii5>jVJ +z=p|Rt#jKAqr3=}f=>;s^O`KU4{X7=N35}kJlc{$>F6qsEfvt +zBO}}3@i0h|>xxnu0NI8lV +zH?9*oP0;b)|CXH2Z3Oh6mZUN}61bwqx6T6>a0ZOQ%YGzHNfOz12?UaNZl?Qc=(`!Zx%>oeKt|{G95^h +zWmK-~j0#{Ym9N4P3*)G6uqm+8bZYDt>I>waGc{S>7GN<)O>e#j$X!Sqgf{AfBU3t@S{mg7Eox7#pW6a^oIq^~afEW(&}Q3l3hrMOHRhK3L+hwp#RGuH +zGpKuBHE?ZnsHf-))Y^`Ee#Z8n%AjqH_Tpzh()N>90oSvTdiO-5->#Z^pKJi!Kc}hp +zYg7mpmejA!S0KVA>KBS@{@Xd~?~TjK<{4kJ)@-yI;6w^VC +zZGfD;LWhK-=DoFt4&8~t*Tq|OSY3mfs_BUMWIP@~N35^o3OZsB2N3BZk(wN>BdYS7 +z5z-0PwUS1segkfCXF4*!09cZe#&RN%Wll8S_BGI`J~Z(O#@gSS(4-HAKxJ+;WyLEL +ztqU}DBZ|ti=`^kE3oz#%H1miEFd&WUpJ7KjSJBDlGcXzQmrfahib)(ybK+57t+`F7 +zTAQJcA9a^bJvkk?oX>PxH@uJ+E*4q1G-6ylowF+qsPjEKXAdrd%Q8AQXe!XOzT$5S +zOZ~unx@PkVR4O)f!`~-BHT~$eI8&hCPSEY~sNhyipgU?X7&fm@cece4ZP#zQt1Jj5 +z>Kx7Y4FR^~H7#;E1f=t2dcYUe?pQNg{G9^3+L0cfi6)@MQd)8o?{7Vhmb>L))M`Y} +z)Z+K1T%(oH8%!YYf%FIWp%=aQ-58k5H*t4Ey8ud_)90OUqg&jNJ`Xkt +z0k#Ct?+JBgVlDl?uLXvX!|1;mm`iEDp8jl(?L5?l{)$2YuRKJ5KfxRj8%qB)-v+eW +zl>YHYm9agM{>@kqG&4|K+Q?r2cp2lzMF1^d&g3?20De-Ya;gR5R>f5Fn*sM_08=M< +zU@(7-X~*_K3+c^FS{DK-Uc$_h(NlW8m6@es4x&QO8Z3wbxcHr!m-GU5w-al0rwriA +zLe@Cl0ocr;%*tyE&falmr*j2nnau3Q9|Bu)<|ea$jQV-vQs$7c2ffGF5}C}{z}P@> +zaAQ}e`9aKk^DRu{Tw=c7r_eITF+bu8w4)32+hhS;NhRyN24mAR$zoAspRVh^u&&<& +z0jkHao-rZ@;5jV(co{k*^;qP3TOi}VuzpYf0Oy~``iDLS+CPI0bVIALc_AA(v;mNv +zrEJJeG=m)%iXEG{>Mt&0NwZ!7Iq`)hkHB8+o5fOE-ayybh-J9ps{2sE#^;vE%mhn +z@Z8Uq9T^N{+Dp;Q(slHzF>HCp5a6=+uoXKBP`f;0E1TE?1k9F5&5p2DZ7YFnc*#}| +zK)t{00$byY#|u}mwbK3l+4`B~K;}PZ8`3+YF?44ezFxtY=Mvkf9|0_rv8@|W`y|X4 +zcU!Kt*|J9qp{c$8%^7w`jq&NyDeOoO +zl=QUC?8qw2t|(L3QHI9D&!3%Kun~y-r9^tVCp&p+1%TIbcCrd1m*Ro!R2Fu2P;*wf +zJO;?|)9ifAXW*>svGWh#19cn3svcslHh+#pV%&>e#Do)sPL)WR_J?R@<>{2+%z +z6+9p51?2sCUKWaR^WDX~a>^Ir0&mr9jz_(6R+^~kG2F_=*-u@g|~^LC9-Yx`1(Jzn8qF}kvzD}Tbg5{yVGjkG7`Q0 +zPg5kaEgg8vyg?X-E#NH=q2?3w`DPv?fCR7Ln{A5%_-(^G`k^8_)}MD8c@kKM2;ON| +zZ{XI7ywh%X2;lZc^DX}9fV^A8yL3g>)1m?IJ{-O0kxzKfS$RMoF6aHfqo*6VL?Uhc +zg%4o-WG@0#%aT6h3dmGOga)L(JrQ@^8P+v?3{48`7$F66UN8Cxn&v$faX=*Q=7#a`%54BU_|k*-YPmj_|WDDNJ>VoD*-+F*Xw%;iAW +z{*cJ55AdtctN^m(EWZ}>{`B)hiEP^}e(jE57^~go*Voy>=|=qeLwWfAXahGKmq=IM +z<~ME{gnn%^M}12fzkME#aAzxidm#qY4=wo}*|?t9J>+-HDFbfT8i~Zaw?w+34WGZG +z1l7r7K7SAPaerTl#NUz6FTgz9%AZJlZh$YJ{{b^ev>m_ysuxhJn|zV)aP;o}@JHPR +z;1V}U)U(*X{Lu)UG7H8ZdyKX-M8TgJYzwqYJO0GZVqgQ8^JTpSU~Mes~KoI``Wu4AWMP%vJm*5lII +z6(iF;L8;oc5qS)_)%G&o+p`Y4!n5@yS1!(W&GV3B0wsVBo(cWHPbwlP+ +zi8-UV6$Vy?NTl_t%+m_v@Kbu3=crET9h%F$)P`WdZJH +zK)r%xoww`=V#_KV;q9LxHJ{Wuch6=WN=^!oCdx +z6S9TKdVKtfs`|66cf~a<1icb#>^=44zR5;vP^Fky%VN=-L2XA_ob4YVU!Te1y8c0p +z-$fR0g5C5ml_fMqZ{%!WiFA_6z{0-W+st5Z6f<81nu;h3faWWg+QLY5;e{3yWTXC&Ahe|Sl1i_ +z^>bx&c44?N^0jR4P|Q0WijXa?OM?CzAX^rW-q8cSY*|HrfD!hxH4iXqUv^BkcJqE< +zdqTvC%`FGS8Oid#J_h!(O12{wQ|^$b(9J4F{qd*!%#vZ@+XpgoR>gB|UMw>T@iE}#rV7|X6}(df4@ +zl3nk=83T&f5?QyAvWK;H=s3sA9`y(S(s-uqQ9qQSz)7;F{V?!$vXDLP9|Y_`n5QlE7|H&2DFbqHi@>#<1!R41fv(2aO#Ued?eKX1a6vhB4%X7P3p$7ddcHs~ +zX&r(y7%DV)lZ7+pB$$6X2i$0x(9owhTKkt0ZP`c%p~P&D3hVu_Qd{`Etl`L8mdSAQa(V&2L{a0Cq8u1paeJ;$ddXA-C8>VG!GF%WvF9KGK8MDP5|v1CG={K2G6Nl=rto8)3z2u +zuX#BD$15a~n>r!9=~N)L--XDyCE_P%r|>=}g+Ag0^h7R7WbO_^-%c2OX3h}?9z+Xm +zxl$OqDi>JRbRl{Q);90v3nPz}0-fL|#CDtowAe<7?U99JzudrtA~B(by}ody5U0Ua +zknAkPRipL}JtmPP?U6`xKM7;3(TjfkRTvY7Q_%UekZ`*Sz337l5%WwW^PG?v&4BLv +zDJ0jG7DfybGB!*F7EvZ-JgS=#xsa9f6BE^@!atREKm$4n6DDrL^ryElv2hTV493|C +z6JOz6F8wP^TAPQCSE8VAiOY9Kq>$aS1|ZKxn05(0!uFknncXlCct1>-xdR>Di-Ius +zLMG5wNy6NV=&i^8l*q;ZH85?YL`IyE#lQ_Llt{a_7UnhZ0+Rhjm|s&YE^=w8zdl7+ +ztlN#6c)75|!w1E@AUXG!a%W +zz*Tptxv*|z4p7g1!iL|wu_^WSWVRkn;r5oeb!vqV$}dt +zEVoS9^2P$_-u9x0tB<~7yRfGRuIAiE!d|O=z-7J@@}n99x4EgXZ>b5;cV8v4q=Q27 +zNM|6U&I(85eSvlI5RRCmVH~+iIBGf)xR}nu(H7f)E&47M~rnwg^w#+hA^Pt?(>57T`#w@M6|}Oq?vw6kczM#DKfM@a8-&@H45x`>*I4 +zEQ%67*H{4QsSs*hFlJhMQK)(J47m4Y!oP1Ya!s-qYWKQhH7;BDp*aO~^gH3F3F^V; +z0m9EQm|_Y~mqQC^*u>gjqNb&# +z{^N4F$#iVU#~``M@~^l_)hGwq1o;qYiPt;GyGJ`w*9VAC^ZYm;$SwBag~*16DRsK710omA4zpV=DrId$UbG+VTs~X#`b +zy<=8iSOm2X=5PQz2(ar+y=TQT)zAmifZ5a@>Nq3fF@6pZ#WwO +z&{C90(!0txeoa9$Z7<)#n?W0R$;r3-{lGmkOXPVDsDI9;$n!3E09V{xzN1w%kSG1+ +zJDv^!^6C?^8pv}?F`>1qep#-3cflcmehCt(JxFBxj>z|1z-rAjjXWRg_SC9@eBb^& +ztds4O7g(eMGs>11I9>xz`(1wcNF;FPRr164SD-g{L4MTyGtluD%Q#E0$ZV$pRX*(n8!qZzE%XTpQZf5>qWrn56Y`vUBPt8F!>D;?MTO_ +z@;k#Z3u`<@UY&(YYwrd5r(tN~madb3UTdO9zdlv|6=nfhH%0yvLqqaUPx&8;+Ue{P +z`JWfzK>K``|6PO1A}vP2EsF&%!(KrnafY0X73$4fP)jaWXs4rcXm(YhGyMuIMy4=o +zQwn5kLxs`k>zG`8t}q^q4P68Z(`QR?<3W+aB4H;G?`eug#*yefyndyyRG>-O=b*5u +zleA{56}H6=7{fXkxW1c2`u4n{*=}5$af1|&A-2HvX{B%;jT<=jx+$DbpkrM*Tq5%g +z6%*X;^`^cGm!+uG7Gx+~2ju|Snx$|PFheqRtinxh3#3+~aLb4U(($sQWn~J6CG89h +z8l!0a2Q6rTv%-DKJav#wdK-2jYG%xgsE& +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 +zo13`VBvAc)?nBgR-_l}-iPy|wyd +zz5~FbW9rY|Z7`r7uKrSrwLQNr>aUG$fyt+;YkYSAyK_?gZEiF4mR72Nm>U7fO;Z2p +zatIiAMg6x5HBFyqVnQ%}=75GaM1wlwqekA;9k{`>HHuoync0SEv|hES4Bu)@bE|Ok +z(FBb}Z3k_wIO=m<=i_trFPg}v$e +zS9}+2@BieArmfr*ebbhjw%HiLUG1;&vI#^xa!4Zc3)Fa9UB)2#2=WRlDz(PP8~ubi +zZ8g5jqOm@{NsJ6h)W6%N=^_~64|hs5UBWg3ynU_d@(Z04)k#h8vbMnHuGVzr=iz?8 +zyPB?w2;jzZnyyD3fc1;j^a#OC{39o8dd+Nxan}xs+}!b+@Kw0JjVv`0<7|PnoUMtB +z!@0Csqv_NBH|E*iY5Ke1;7&8u4EQ60id$Wy8T`@;G(5{xGkF%K2)m~peNfTF& +z%Uv#N;_fuV#OHWTe1|*emR#4wmwNy?)J_xsCKn*7N|WGKjTOFAnuJ|u=*c(JjCI1~ +zP3Nx?spD!*>V-&5Y({7@VGoATg_`kDi$2;H&G?*Cm=nIDneY<3GvujeqG@w1t$Ay* +zyHsMXBUtydf|2eL!6 +z{o@ooe^0ZkVh)Cvr!~8KWr?%889V(Yntda2bJ*TcO+iCU6Vw~2DaeaNfv}Ru+8x&% +zP~iEKm&EdJj`|a-I3Q&|G$)_pLUih(scdI~=4hw+)N%+b{P;zp`%Od@xumljNnG4Y#i;J=HtP}LQ85@>tl}O +zWR)XK@lk&T@o!WZ<%&pZ1q6y>{Y|;kK%f`)G +zd$rw7Yk{mb)`n^+?s0gi4ePfQOI>5a0_|} +zMcPbT5!ek!?F2iVJN-eez7=lM?t4e8&)$qRz|Y$3?|s#np}nTf{uhmZ(SC7Sn5*7= +zvv%=otZkVc(k?xZ3E$H-+La$LZhBLtT{{_tDc@1M`K|(^(=zSWu3kVsZ`N)-nuc3y +z_Gz~sL+j&SqTTu#*TSo4?as#AfE~Q6-FFUmAe{-;7Mw-d=^Uah+<=O#gAmf(ylm?B~q^8>PY4{VG +zD6RIqDNgRpTJ8DO-LOWsLVMX0qw&_9_I7kShWlf+PvVkMQ|q-)H`So*Zqq)k4o6|> +zqkYpN1-Mhr+ILf;F_W&;zN^GF?y1mz**gvM6=vEmPXj?b+oP4!ni<+!54`7mzV@dP +zDxyDswSU@u!HmF79W>hpP7dSOb?-2a=0#$6{vL$ +zeqbrtB1UIkm)V>?Q`fL*0FcXZ>KsqtjP2;8bHqwFT|8I3(9=@?<+{#&MKG}KnYvCcPcct&Lf2_S8g3)MqVvZe +z#SphhU6)PoaX-T|T~H%*!sZm~f;Icl{|S>w=_~_pxJYEdR=QxV7p9!A>q0J|?fEfS +z7dG}J?#8*K3rlYRu=F2Y#Oz#PN3QC6C%wYdd8I}dX^o;?m96Vji%#{<-@1PJUw~y_ +z*A2UYwZ9jWbi=9xaR)>*UCcFf)>Dp%YkJx1U)JbS04?;a#=6w@VYu^pk1q4NEB;vM +zi*6ilM(5IVbXof_l3s1E8~=AHK+j}}+}1>iF*-u}=K(eZ}Zgx#IP*=HbZe7A?)^v$%%SPSYHzE=&e+`&Gu+4vbDOsZEzpN7E!nV1V!t1LsvMyFR;TybO*R6 +zz^IX~B((zIy1(vtQw`8DCA!ii^gm~O)tw%k1>CV)y7OzNViGo2cPVx_dOX3pOND3+ +z-8H(aZXrP4$Lg*wxQ%}1#s0c$1GfP;LZQ2}6-xuBUg+*cV}J5C>Fzf`>*snz_h13~ +zGy}%y9=s~Y?YM_^5A)WdR`02M5^Mw9=|2*wOQJ-UNOdoQp8+iJ(!Hz~2lVM|-P?~i +zZfj%`>6e}o*|u-GcU5U(WrQ2~&^YHu#Ec&iT=9>PGa>h!9bSXYAaZKHnhQ(n=Ni^5Y7(yTs +zQXv^)U<9P$|5M}`-vItB9E6a>)Z~~EX@)lyl#ov*jiCpmLk6Tk9R9O{c!N!+lMKc>Hb*B<3FP!7Pk)(yevh{2zCU8O6rAMzfhbx8xY< +z-arl!*sCN+{%@~XL|RgE@uy=XNX}i#EqTQ(G%nBze~0e_-Y^_|azCx44Xm+aI4V|< +zfX}8$e?{XND;%dNJW9oGFZ844dOVYgcO>FHR`_^2zGNic5r;3TdqYB9WAU0dxJlQn +zq~j4dB3byRy1HE|SW8#&!xBgS=WRa!ZEtVykx7YZR;h90V>;Tnw6gK>9`4iEFFY(H +zEU3MgRccyNN=&p>a#U(+W>QLYs#R1 +z!+pHn>R#uQn|+;_6t}M+v)Z~ggw7C%?Qaf#*lI(&qp;o4;P~HGs5%E)H4lnONr=k* +zltfK(Lt|;<;)j38Xho}r_;7^ucp!GCZh&I(;Us*~|Npo;Fv6;NL~>MOT|t^5^mMJOA2-YAKPF;S14S}QDS>bkA>g}M&V~9 +zk@z1EsY7~OH4jOPijOliwzz#0>d-*n5PCv)>A{{->*}VhZmRyb@Ad3%)x2j?d|fkz +zx+TyfIV~}vY|^%7lA{C>}*l(h8N^qAC`|GX%-k2_6| +zG>1@pwoY394|)3UNXvWvXDv!V+7&1+G53Am=m>4S!*^K66XmRr~?9*P + + +- +- ++ ++ + Artwork name + Nom de l'illustration + +@@ -329,183 +329,183 @@ p, li { white-space: pre-wrap; } + Supprimer les catégories d'illustrations sélectionnées + + +- +- ++ ++ + Select / deselect this artwork class for removal + Sélectionner ou déselectionner cette catégorie d'illustrations en vue de sa suppression + + +- +- ++ ++ + Enter a name for this artwork class (required) + Entrer un nom pour cette catégorie d'illustrations (requis) + + +- +- ++ ++ + Choose... + Sélectionner... + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + Choisir une icône à utiliser avec cette catégorie d'illustrations (optionnel) + + +- +- ++ ++ + System + Système + + +- +- ++ ++ + Software + Logiciel + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + Sélectionner le système ou le logiciel <i>cible</i> de cette catégorie d'illustrations + + +- +- ++ ++ + On + Activé + + +- +- ++ ++ + Off + Désactivé + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + Activer ou désactiver la mise à l'échelle des images de cette catégorie d'illustrations + + +- +- ++ ++ + Folder + Dossier + + +- +- +- +- ++ ++ ++ ++ + Archive + Archive + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + Charger les images de cette catégorie d'illustrations depuis un dossier ou une archive + + +- +- ++ ++ + ZIP + ZIP + + +- +- ++ ++ + 7z + 7z + + +- +- ++ ++ + Select archive format + Sélectionner le format de compression + + +- +- ++ ++ + Supported archives + Formats gérés + + +- +- ++ ++ + ZIP archives + Archives ZIP + + +- +- ++ ++ + 7z archives + Archives 7z + + +- +- ++ ++ + Image archive + Archive des images + + +- +- ++ ++ + Image archive for this artwork class (required) + Archive d'images pour cette catégorie d'illustrations (requis) + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + utiliser un point-virgule (;) pour séparer les archives multiples + + +- +- ++ ++ + Browse image archive + Parcourir l'archive d'images + + +- +- +- ++ ++ ++ + All files (*) + Tous les fichiers (*) + + +- +- ++ ++ + Image folder + Dossier des images + + +- +- ++ ++ + Image folder for this artwork class (required) + Dossier d'images pour cette catégorie d'illustrations (requis) + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + utiliser un point-virgule (;) pour séparer les dossiers multiples + + +- +- ++ ++ + Browse image folder + Parcourir le dossier d'images + + +- ++ + Choose icon file + Choisir une icône + + +- ++ + PNG files (*.png) + Fichiers PNG (*.png) + +@@ -1237,7 +1237,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + Choisir la couleur du motif + +@@ -1360,17 +1360,17 @@ p, li { white-space: pre-wrap; } + &OK + + +- ++ + Choose image file + Choisir un fichier d'image + + +- ++ + Supported image files (%1) + Fichiers d'images reconnus (%1) + + +- ++ + All files (*) + Tous les fichiers (*) + +@@ -3463,42 +3463,42 @@ p, li { white-space: pre-wrap; } + Fermer + + +- ++ + Name + Nom + + +- ++ + Domain + Domaine + + +- ++ + Path + Chemin d'accès + + +- ++ + Value + Valeur + + +- ++ + Expiry date + Date d'expiration + + +- ++ + Secure? + Sécurisé ? + + +- ++ + HTTP only? + HTTP simple ? + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + ATTENTION : échec de la suppression du témoin de connexion depuis la base de données : requête = '%1', erreur = '%2' + +@@ -4394,7 +4394,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + %1. variante de + +@@ -4478,7 +4478,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + &Ouvrir l'archive + +@@ -4522,7 +4522,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + Pas de périphériques disponibles + +@@ -4581,7 +4581,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + + +@@ -4591,27 +4591,27 @@ p, li { white-space: pre-wrap; } + Choisir le répertoire du périphérique par défaut pour '%1' + + +- ++ + &Close archive + &Fermer l'archive + + +- ++ + Choose a unique configuration name + Choisir un nom unique de configuration + + +- ++ + Unique configuration name: + Nom unique de configuration: + + +- ++ + Name conflict + Confit de nom + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5298,25 +5298,25 @@ Use local value for option '%1', overwrite with global value or don&ap + Taille + + +- +- ++ ++ + KB + Ko + + +- +- ++ ++ + MB + Mo + + +- +- ++ ++ + GB + Go + + +- ++ + TB + To + +@@ -5462,42 +5462,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + FtpReply + +- ++ + FTP directory listing for %1 + Contenu du dossier FTP pour %1 + + +- ++ + Name + Nom + + +- ++ + Type + Type + + +- ++ + Size + Taille + + +- ++ + Parent directory + Dossier parent + + +- ++ + File + Fichier + + +- ++ + Folder + Dossier + + +- ++ + Unknown + Inconnu + +@@ -5994,212 +5994,212 @@ Use local value for option '%1', overwrite with global value or don&ap + + HtmlEditor + +- +- ++ ++ + HTML + HTML + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + Fichier graphiques communs (*.png *.jpg *.jpeg *.gif);; + + +- ++ + Portable Network Graphics (PNG) (*.png);; + Portable Network Graphics (PNG) (*.png);; + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + Graphics Interchange Format (GIF) (*.gif);; + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Tous les fichiers (*) + + +- ++ + WYSIWYG + WYSIWYG + + +- ++ + &Load... + + + +- ++ + Load notes from file + + + ++ + +- + Load notes from an HTML file + + + ++ + + +- + Save current notes + + + ++ + +- + Page load progress + + + +- ++ + Hide menu + + + +- ++ + Read only + + + +- ++ + Show HTML + + + +- +- ++ ++ + HTML files (*.html *.htm) + Fichiers HTML (*.html *.htm) + + +- ++ + Select file to load + + + +- ++ + Select file to open + + + +- ++ + Save a copy + Sauvegarder une copie + + +- ++ + Open image... + Ouvrir une image... + + +- ++ + Insert image from URL + Insérer une image depuis une URL + + +- +- ++ ++ + Enter URL: + Saisir l'URL: + + +- ++ + Create link + Créer un lien + + +- ++ + Font + Police + + +- ++ + Select font: + Choisir la police: + + +- ++ + XS + XS + + +- ++ + S + S + + +- +- ++ ++ + M + M + + +- ++ + L + L + + +- ++ + XL + XL + + +- ++ + XXL + XXL + + +- ++ + Font size + Taille de police + + +- ++ + Font size: + Taille de police: + + +- ++ + Zoom: %1% + Zoom: %1% + + +- ++ + Select color + + + +- ++ + Choose image file + Choisir un fichier d'image + + +- +- +- ++ ++ ++ + No data available + Pas de données disponibles + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7115,55 +7115,55 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Preview + Aperçu + + +- ++ + Flyer + Flyer + + +- ++ + Cabinet + Borne + + +- ++ + Controller + Contrôleur + + +- ++ + Marquee + Marquee + + +- ++ + Title + Titre + + +- ++ + PCB + PCB + + +- ++ + Software snap + + + +- +- ++ ++ + deactivated + + + +- ++ ++ + +- + activated + + +@@ -7591,42 +7591,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickCalibrationWidget + +- ++ + Axis %1: + Axe %1: + + +- ++ + Current value of axis %1 + Valeur actuelle de l'axe %1 + + +- ++ + DZ: + DZ: + + +- ++ + Deadzone of axis %1 + Zone Morte de l'axe %1 + + +- ++ + S: + S: + + +- ++ + Sensitivity of axis %1 + Sensibilité de l'axe %1 + + +- ++ + Reset calibration of axis %1 + Ré-initialiser la calibration de l'axe %1 + + +- ++ + Enable/disable axis %1 + Active/Désactive l'axe %1 + +@@ -7680,67 +7680,67 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickTestWidget + +- ++ + A%1: %v + A%1: %v + + +- ++ + Current value of axis %1 + Valeur actuelle de l'axe %1 + + +- ++ + B%1 + B%1 + + +- ++ + Current state of button %1 + Valeur actuelle du bouton %1 + + +- ++ + H%1: 0 + H%1: 0 + + +- ++ + Current value of hat %1 + Valeur actuelle du hat %1 + + +- ++ + T%1 DX: 0 + T%1 DX: 0 + + +- ++ + Current X-delta of trackball %1 + Valeur actuelle X-delta du trackball %1 + + +- ++ + T%1 DY: 0 + T%1 DY: 0 + + +- ++ + Current Y-delta of trackball %1 + Valeur actuelle Y-delta du trackball %1 + + +- ++ + H%1: %2 + H%1: %2 + + +- ++ + T%1 DX: %2 + T%1 DX: %2 + + +- ++ + T%1 DY: %2 + T%1 DY: %2 + +@@ -7801,245 +7801,245 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + inconnu + + +- +- +- ++ ++ ++ + good + valide + + +- +- ++ ++ + bad + invalide + + +- +- +- ++ ++ ++ + preliminary + préliminaire + + +- +- ++ ++ + supported + pris en charge + + +- +- ++ ++ + unsupported + non pris en charge + + +- +- +- ++ ++ ++ + imperfect + imparfait + + +- ++ + yes + oui + + +- ++ + no + non + + +- ++ + baddump + mauvais dump + + +- ++ + nodump + pas de dump + + +- ++ + vertical + vertical + + +- ++ + horizontal + horizontal + + +- ++ + raster + raster bitmap + + +- ++ + Unknown + Inconnu + + +- ++ + On + Activé + + +- ++ + Off + Désactivé + + +- ++ + audio + audio + + +- ++ + Unused + Inutilisé + + +- ++ + original + original + + +- ++ + compatible + compatible + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: Impossible d'ouvrir le fichier des icônes, vérifiez les permissions d'accès pour %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + erreur 7z + + +- ++ + Waiting for data... + En attente de données... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + XML data - %p% + données XML - %p% + + +- ++ + verifying ROM status for '%1' + vérification du statut de ROM pour '%1' + + +- ++ + Updating + Mise à jour en cours + + +- ++ + Name + Nom + + +- ++ + Source file + Fichier source + + +- ++ + Clone of + Clone de + + +- ++ + ROM of + ROM de + + +- ++ + Sample of + Échantillon de + + +- ++ + Is device? + Est un périphérique ? + + +- ++ + Year + Année + + +- ++ + Manufacturer + Fabricant + + +- +- ++ ++ + ROM + ROM + + +- +- +- +- ++ ++ ++ ++ + N/A + + + +- +- ++ ++ + error text = %1 + Texte d'erreur : %1 + + +- +- ++ ++ + %n supported set(s) + + +@@ -8047,219 +8047,219 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Taille + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Merge + + +- +- ++ ++ + Region + Région + + +- ++ + Offset + Offset + + +- +- +- +- ++ ++ ++ ++ + Status + Statut + + +- ++ + Device reference + Périphérique de référence + + +- ++ + Chip + Puce + + +- +- ++ ++ + Type + Type + + +- ++ + Clock + Horloge + + +- ++ + Width + Largeur + + +- ++ + Height + Hauteur + + +- ++ + Refresh + Rafraîchir + + +- +- ++ ++ + Sound + Son + + +- ++ + Channels + Canaux + + +- ++ + Input + Entrée + + +- ++ + Service + Service + + +- ++ + Tilt + Tilt + + +- ++ + Players + Joueurs + + +- +- ++ ++ + Buttons + Boutons + + +- ++ + Coins + Pièces + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + DIP switch + + +- ++ + DIP value + DIP valeur + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -8267,266 +8267,266 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + Système / BIOS + + +- +- ++ ++ + System / Device + Système / Dispositif + + +- ++ + correct + correct + + +- ++ + mostly correct + globalement correct + + +- ++ + incorrect + incorrect + + +- ++ + not found + non trouvé + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Défaut + + +- ++ + libarchive error + erreur libarchive + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + loading XML data and recreating cache + + + +- ++ + verifying ROM status for all sets + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + Configuration + + +- ++ + Mask + Masque + + +- ++ + Setting + Paramètre + + +- ++ + Value + Valeur + + +- ++ + Driver + Pilote + + +- ++ + Emulation + Émulation + + +- ++ + Color + Couleur + + +- ++ + Graphic + Graphique + + +- ++ + Cocktail + Cocktail + + +- ++ + Protection + Protection + + +- ++ + Save state + Sauvegarde d'état + + +- ++ + Palette size + Dimension de palette + + +- ++ + BIOS set + BIOS set + + +- ++ + Description + Description + + +- ++ + Sample + Samples + + +- ++ + Disk + Disque + + +- ++ + MD5 + MD5 + + +- ++ + Index + Index + + +- ++ + Adjuster + Ajuster + + +- ++ + Software list + Liste des logiciels + + +- ++ + Category + Catégorie + + +- ++ + Item + Objet + + +- ++ + Interface + Interface + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + ATTENTION: impossible d'ouvrir le cache d'état de ROM, vérifiez les ROMS + + +- ++ + loading ROM state from cache + chargement des états de ROM depuis le cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + fait (chargement d'état de ROM depuis le cache, temps écoulé = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n état de ROM chargé depuis le cache +@@ -8534,7 +8534,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + et %n périphérique chargé +@@ -8542,7 +8542,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + , %n BIOS set(s) + + , %n set BIOS +@@ -8550,255 +8550,255 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Infor de statut ROM: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + ATTENTION: le cache de ROM est incomplet ou périmé, lancement d'une vérification de ROM automatique + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + ATTENTION: le cache de ROM est incomplet ou périmé, re-vérifiez les ROMS + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- +- ++ ++ + ascending + ascendant + + +- +- ++ ++ + descending + descendant + + +- ++ + machine description + description de la machine + + +- ++ + tag + étiquette + + +- ++ + year + année + + +- ++ + manufacturer + fabricant + + +- ++ + machine name + nom de la machine + + +- ++ + ROM types + + + +- ++ + players + joueurs + + +- ++ + driver status + état du pilote + + +- ++ + source file + fichier source + + +- ++ + rank + rang + + +- ++ + category + catégorie + + +- ++ + version + version + + +- ++ + ROM state filter already active + Le filtre d'état de ROM est déjà actif + + +- ++ + please wait for ROM verification to finish and try again + Patientez SVP durant la vérification des ROMS puis recommencez + + +- ++ + please wait for reload to finish and try again + attendez SVP la fin du rechargement puis recommencez + + +- ++ + applying ROM state filter + Application du filtre d'état de ROM + + +- ++ + State filter - %p% + Filtre d'état - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + fait (application du filtre d'état de ROMS, temps écoulé = %1) + + +- ++ + saving favorites + sauvegarde des favoris + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: impossible d'ouvrir le fichier des favoris en écriture, répertoire = %1 + + +- ++ + saving play history + sauvegarde de l'historique des jeux joués + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: impossible d'ouvrir l'historique des jeux joués en écriture, répertoire = %1 + + +- ++ + L: + L : + + +- ++ + C: + C : + + +- ++ + M: + M : + + +- ++ + I: + I : + + +- ++ + N: + N : + + +- ++ + U: + U : + + +- ++ + S: + S : + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERREUR: impossible d'ouvrir le cache d'état de ROM en écriture, répertoire = %1 + + +- +- +- ++ ++ ++ + ROM check - %p% + vérification de ROM - %p% + + +- ++ + T: + T : + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + fait (vérification du statut de ROM pour '%1', temps écoulé = %2) + + +- +- ++ ++ + ROM state + statut de ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + Le statut de ROM pour '%1' est '%2' + + +- ++ + pre-caching icons from ZIP archive + mise en cache des icônes depuis l'archive ZIP + + +- ++ + Icon cache - %p% + Cache d'icônes - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + fait (mise en cache des icônes depuis l'archive ZIP, temps écoulé = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + %n icône chargé +@@ -8806,77 +8806,77 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from directory + mise en cache des icônes depuis le répertoire + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + fait (mise en cache des icônes depuis le répertoire, temps écoulé = %1) + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- ++ + loading catver.ini + Chargement de catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + ERREUR: impossible d'ouvrir '%1' en liecture - pas de données catver.ini disponibles + + +- ++ + done (loading catver.ini, elapsed time = %1) + fait (Chargement de catver.ini, temps écoulé = %1) + + +- ++ + %1 category / %2 version records loaded + categorie %1 / %2 enregistrements de version chargés + + +- ++ + Category view - %p% + Vue par catégorie - %p% + + +- ++ + %n category record(s) loaded + + +@@ -8884,312 +8884,312 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + Vue par version - %p% + + +- ++ + unused + inutilisé + + +- ++ + cpu + CPU + + +- ++ + vector + vecteur + + +- ++ + lcd + lcd + + +- ++ + Is BIOS? + est BIOS ? + + +- ++ + Runnable + Jouable + + +- ++ + Display + Affichage + + +- ++ + Rotate + Rotation + + +- ++ + Flip-X + Flip-X + + +- ++ + Pixel clock + Horloge de Pixel + + +- ++ + H-Total + H-Total + + +- ++ + H-Bend + H-Bend + + +- ++ + HB-Start + HB-Start + + +- ++ + V-Total + V-Total + + +- ++ + V-Bend + V-Bend + + +- ++ + VB-Start + VB-Start + + +- +- +- ++ ++ ++ + Tag + Tag + + +- ++ + Control + Contrôle + + +- ++ + Minimum + Minimum + + +- ++ + Maximum + Maximum + + +- ++ + Sensitivity + Sensibilité + + +- ++ + Key Delta + Key Delta + + +- ++ + Reverse + Inversé + + +- ++ + joy4way + joy4way + + +- ++ + joy8way + joy8way + + +- ++ + trackball + trackball + + +- ++ + joy2way + joy2way + + +- ++ + doublejoy8way + doublejoy8way + + +- ++ + dial + dial + + +- ++ + paddle + paddle + + +- ++ + pedal + pedal + + +- ++ + stick + stick + + +- ++ + vjoy2way + vjoy2way + + +- ++ + lightgun + lightgun + + +- ++ + doublejoy4way + doublejoy4way + + +- ++ + vdoublejoy2way + vdoublejoy2way + + +- ++ + doublejoy2way + doublejoy2way + + +- ++ + printer + imprimante + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + carte + + +- ++ + cassette + cassette + + +- ++ + quickload + quickload + + +- ++ + floppydisk + floppydisk + + +- ++ + serial + serial + + +- ++ + snapshot + snapshot + + +- ++ + determining emulator version and supported sets + Détermine la version de l'émulateur et les sets supportés + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + fait (détermine la version de l'émulateur et les sets supportés, temps écoulé = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL: impossible de déterminer le nombre de sets supportés + + +- ++ + Device + Device + + +- ++ + Instance + Instance + + +- ++ + Brief name + Nom court + + +- ++ + Extension + Extension + + +- ++ + Mandatory + Mandatory + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: impossible de démarrer MAME en un temps raisonnable, abandon + + +- +- ++ ++ + emulator info: type = %1, version = %2 + info émulateur: type = %1, version = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: n'a pas pu déterminer le type et version de l'émulateur + + +- +- ++ ++ + Optional + Optionnel + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + Vérification du vrai statut de %n set non signalé durant l'audit complet +@@ -9197,7 +9197,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + fait (vérification du vrai statut de %n set non signalé durant l'audit complet) +@@ -9205,30 +9205,30 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + RAM options + options de RAM + + +- ++ + Option + Option + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + ATTENTION: l'audit de test de l'émulateur n'a pas fini proprement -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + planté + +@@ -9397,18 +9397,18 @@ Use local value for option '%1', overwrite with global value or don&ap + Version​‎ + + +- +- +- +- ++ ++ ++ ++ + true + vrai + + +- +- +- +- ++ ++ ++ ++ + false + faux + +@@ -9550,161 +9550,161 @@ Use local value for option '%1', overwrite with global value or don&ap + + MainWindow + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Par défaut + + +- ++ + Toggle maximization of embedded emulator windows + Bascule la maximisation de fenêtre de l'émulateur embarqué + + +- ++ + Searching machines - %p% + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- ++ + Embed emulator widget + Embarquement de l'émulateur + + +- ++ + &Embed + &Embarqué + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Tue l'émulateur sélectionné (envoit un signal KILL aux processus de l'émulateur) + + +- ++ + &Kill + &Tuer + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jouer + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jouer &embarqué + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Ajouter le jeu aux &favoris + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Vérifie l'état de &ROM + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analyse ROM... + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Remove from favorites + Retirer des favoris + + +- +- ++ ++ + &Remove + &Retirer + + +- ++ + Clear all favorites + Vide tous les favoris + + +- +- ++ ++ + &Clear + &Nettoyer + + +- ++ + Save favorites now + Enregistre les favoris maintenant + + +- +- ++ ++ + &Save + &Sauvegarder + + +- ++ + Remove from played + Retirer de la liste des jeux joués + + +- ++ + Clear all played + Vider toute la liste des jeux joués + + +- ++ + Save play-history now + Enregistrer l'historique des jeux joués maintenant + +@@ -9717,66 +9717,66 @@ Use local value for option '%1', overwrite with global value or don&ap + En attente de données... + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + patientez SVP durant le filtrage par état des ROMS puis recommencez + + +- +- ++ ++ + please wait for ROM verification to finish and try again + patientez SVP durant la vérification des ROMS puis recommencez + + +- ++ ++ + +- + please wait for image check to finish and try again + patientez SVP durant la vérification des images puis recommencez + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + patientez pendant que ROMAlyzer finit l'analyse en cours et recommencez + + ++ + +- + ROM verification already active + vérification de ROM déjà en cours + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + patientez SVP durant le rechargement puis recommencez + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirmer + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9787,187 +9787,187 @@ Ceci effacera toutes les données existantes en cache. + Etes-vous sûr(e) de vouloir vérifier les ROMS ? + + +- ++ + automatic ROM check triggered + vérification automatique des ROMS + + +- ++ + image cache cleared + cache d'images nettoyé + + +- ++ + icon cache cleared + cache d'icônes nettoyé + + + +- ++ + About Qt + A propos de Qt + + +- ++ + ERROR: no match found (?) + ERREUR: pas de correspondance trouvée (?) + + +- +- ++ ++ + Export to... + Exporter vers... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Choisir le fichier... + + +- +- ++ ++ + <p>No data available</p> + <p>Aucune donnée disponible</p> + + + +- ++ + Embedded emulators + Emulateurs embarqués + + +- ++ + Release emulator + Relâcher l'émulateur + + +- ++ + WARNING: no matching window for emulator #%1 found + ATTENTION: pas de fenêtre correspondante à l'émulateur #%1 + + +- ++ + Embedding failed + Embarquement échoué + + +- +- ++ ++ + Scanning pause key + En attente de la touche Pause + + +- +- ++ ++ + Choose export file + Choisir le fichier d'export + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Tous les fichiers (*) + + +- +- ++ ++ + Choose import file + Choisir le fichier d'import + + +- +- ++ ++ + WARNING: invalid inipath + ATTENTION: répetoire ini non valide + + +- +- ++ ++ + stopping current processing upon user request + Arrêt du processus en cours à la demande de l'utilisateur + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Vos changements de configuration n'ont pas encore été appliqués. + Voulez-vous vraiment quitter ? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Il y a un ou plusieurs émulateurs encore en fonctionnement. + Faut-il les tuer à la sortie ? + + +- ++ + There are one or more running downloads. Quit anyway? + Il y a un ou plusieurs téléchargements en cours. Quitter quand même? + + +- ++ + cleaning up + nettoyage + + +- ++ + aborting running downloads + annulation des téléchargements en cours + + +- ++ + saving main widget layout + sauvegarde du layout principal + + +- ++ + disconnecting audio source from audio sink + déconnecte l'audio du mixer audio + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Jouer la machine sélectionnée (embarqué) + + +- ++ + destroying YouTube video widget + destruction du widget de vidéo YouTube + + +- ++ + destroying process manager + destruction du manager de processus + + +- ++ + killing %n running emulator(s) on exit + + tue %n émulateur(s) en fonctionnement à la sortie +@@ -9975,7 +9975,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + keeping %n running emulator(s) alive + + conserve %n émulateur(s) en fonctionnement +@@ -9983,19 +9983,19 @@ Faut-il les tuer à la sortie ? + + + +- ++ + destroying network access manager + destruction du manager de connection réseau + + +- ++ + so long and thanks for all the fish + Salut, et encore merci pour le poisson + + + ++ + +- + M.A.M.E. Catalog / Launcher II + M.A.M.E. Catalog / Launcher II + +@@ -10004,16 +10004,16 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Tag + Tag + + + +- ++ + Icon / Value + Icône / Valeur + +@@ -10022,10 +10022,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Year + Année + +@@ -10034,10 +10034,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Fabricant + +@@ -10046,10 +10046,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Statut du driver + +@@ -10057,9 +10057,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + Icon + Icône + +@@ -10253,10 +10253,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Source file + Fichier source + +@@ -10266,10 +10266,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10726,7 +10726,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Internal browser + + +@@ -10931,12 +10931,12 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + + +@@ -11030,7 +11030,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Internal PDF viewer + + +@@ -11108,13 +11108,13 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -11125,7 +11125,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Category / Machine + + +@@ -11136,19 +11136,19 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -11306,9 +11306,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -11347,10 +11347,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -11513,90 +11513,90 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Name + Nom + + +- ++ + Are you sure you want to clear the favorites list? + Etes-vous sûr(e) de vouloir vider la liste des favoris ? + + +- ++ + Are you sure you want to clear the play history? + Etes-vous sûr(e) de vouloir vider l'historique des jeux joués ? + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Pas de données disponibles + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- ++ + Default configuration + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + +@@ -11626,10 +11626,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + ROM types + types de ROM + +@@ -11638,10 +11638,10 @@ Faut-il les tuer à la sortie ? + + + +- +- +- +- ++ ++ ++ ++ + Players + Joueurs + +@@ -11650,9 +11650,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + Category + Catégorie + +@@ -11661,9 +11661,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + Version + Version​‎ + +@@ -11756,7 +11756,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + &Notes + &Notes + +@@ -11815,9 +11815,9 @@ Faut-il les tuer à la sortie ? + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms total) + +@@ -11885,21 +11885,21 @@ Faut-il les tuer à la sortie ? + Commande + + +- +- +- ++ ++ ++ + paused + en pause + + +- +- ++ ++ + Copy emulator command line to clipboard + Copier la ligne de commande de l'émulateur dans le presse-papier + + +- +- ++ ++ + &Copy command + &Copier la commande + +@@ -11976,7 +11976,7 @@ Faut-il les tuer à la sortie ? + Avance rapide dans le morceau + + +- ++ + Select one or more audio files + Sélectionner un ou plusieurs fichiers audio + +@@ -12005,7 +12005,7 @@ Faut-il les tuer à la sortie ? + Baisser / Monter le volume sur pause / reprise + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + lecteur audio: info du morceau: titre = '%1', artiste = '%2', album = '%3', genre = '%4' + +@@ -12109,119 +12109,119 @@ Faut-il les tuer à la sortie ? + Toggle full screen / windowed mode + Basculer en plein écran / fenêtre + ++ ++ ++ ++ ++ ++ Set tab position north ++ Positionner le nord ++ ++ ++ ++ ++ ++ ++ &North ++ &Nord ++ + + + + + +- Set tab position north +- Positionner le nord ++ Set tab position south ++ Positionner le sud + + + + + + +- &North +- &Nord ++ &South ++ &Sud + + + + + + +- Set tab position south +- Positionner le sud ++ Set tab position west ++ Positionner l'ouest + + + + + + +- &South +- &Sud ++ &West ++ &Ouest + + + + + + +- Set tab position west +- Positionner l'ouest ++ Set tab position east ++ Positionner l'est + + + + + + +- &West +- &Ouest +- +- +- +- +- +- +- Set tab position east +- Positionner l'est ++ &East ++ &Est + + + + + + +- &East +- &Est +- +- +- +- +- +- + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + +@@ -12246,7 +12246,7 @@ Faut-il les tuer à la sortie ? + Titr&e + + +- ++ + freed %n byte(s) in %1 + + %n bit libéré en %1 +@@ -12254,7 +12254,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + %n entry(s) + + %n entrée +@@ -12267,7 +12267,7 @@ Faut-il les tuer à la sortie ? + Ctrl+M + + +- ++ + removed %n byte(s) in %1 + + %n bit supprimé en %1 +@@ -12275,7 +12275,7 @@ Faut-il les tuer à la sortie ? + + + +- ++ + %n file(s) + + %n fichier +@@ -12312,23 +12312,23 @@ Faut-il les tuer à la sortie ? + Stopper les téléchargements sélectionnés + + +- ++ + Choose file to store download + Choisir le fichier pour stocker le téléchargement + + +- ++ + loading style sheet '%1' + chargement de la feuille de style '%1' + + +- ++ + removing current style sheet + enlever la feuille de style actuelle + + +- +- ++ ++ + last message repeated %n time(s) + + dernier message répété %n fois +@@ -12336,17 +12336,17 @@ Faut-il les tuer à la sortie ? + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Bascule la pause automatique des émulateurs embarqués (maintenir pour menu) + + +- ++ + Scan the pause key used by the emulator + En attente de la touche Pause utilisée par l'émulateur + + +- ++ + Scan pause key... + En attente de la touche Pause... + +@@ -12357,187 +12357,187 @@ Faut-il les tuer à la sortie ? + + + +- +- ++ ++ + Enter search string + Entrer une chaîne de recherche + + +- ++ + Dock / undock this widget + Accroche / Décroche ce widget + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + Reset + Ré-initialise + + +- ++ + Negate search + + + +- ++ + sorry, devices cannot run standalone + désolé, les périphériques ne peuvent fonctionner seuls + + +- ++ + No devices available + Pas de périphériques disponibles + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + défaut + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + YouTube on-disk cache cleared (%1) + Cache disque YouTube nettoyé (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + ATTENTION: n'a pas pu enlever le fichier de cache d'état de ROM '%1', vérifiez les permissions + + +- ++ + triggering an automatic ROM check on next reload + actionner la vérification automatique de ROM au prochain rafraîchissement + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + ProjectMESS page for '%1' / '%2' + page ProjectMESS de '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Récupération de la page ProjectMESS de '%1' / '%2', patientez svp... + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + Basculer les options d'embarquement (maintenir pour le menu) + + +- ++ + To favorites + Ajouter aux favoris + + +- ++ + Kill emulator + Tuer l'émulateur + + +- ++ + &Kill emulator + Tu&er l'émulateur + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12548,91 +12548,91 @@ ou plusieurs émulateurs dans un délai raisonnable. + Re-essayer l'embarquement? + + +- ++ + Information + Information + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Désolé, l'émulateur est mort durant ce temps :(. + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + destroying audio effects dialog + destruction de la fenêtre des effets audio + + +- ++ + destroying media player + + + +- ++ + Welcome to QMC2 v%1! + Bienvenue dans QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + YouTube index - %p% + + +- ++ + %n video info record(s) loaded + + %n information de vidéo chargée +@@ -12640,142 +12640,142 @@ Re-essayer l'embarquement? + + + +- ++ + Add URL + + Ajouter une URL + + +- ++ + Enter valid MP3 stream URL: + Entrer une URL de stream MP3 valide: + + +- ++ + Buffering %p% + Mise en cache %p% + + +- +- ++ ++ + running + + + +- +- ++ ++ + Play tagged - %p% + Jouer taggé - %p% + + +- ++ + Add favorites - %p% + Ajouter aux favoris - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + merci de patienter pendant l'activité en cours et tenter de nouveau (cette opération ne peut fonctionner qu'exclusivement) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + outil de ROM taggé - %p% + + +- +- ++ ++ + Tag - %p% + Tagger - %p% + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + Enlever le tag - %p% + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + Inverser le tag - %p% + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Détail du logiciel + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12786,58 +12786,58 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + traitement de la configuration globale de l'émulateur + + +- +- ++ ++ + Export global MAME configuration + Exporter la configuration globale de MAME + + +- ++ + Import from... + Importer depuis... + + +- +- ++ ++ + Import global MAME configuration + Importer la configuration globale de MAME + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + <rep.ini>/mame.ini + + +- ++ + emulator #%1 is already embedded + l'émulateur #%1 est déjà embarqué + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + ATTENTION: plusieurs fenêtres trouvées pour l'émulateur #%1, choix de la fenêtre ID %2 pour embarquement + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + embarquement de l'émulateur #%1, ID de fenêtre = %2 + +@@ -12994,14 +12994,12 @@ Please check the 'rompath' option in the global emulator configuration + + + +- + Go back + Précédent + + + + +- + Go forward + Suivant + +@@ -13019,8 +13017,8 @@ Please check the 'rompath' option in the global emulator configuration + + + +- +- ++ ++ + Enter search string + + +@@ -13080,88 +13078,28 @@ Please check the 'rompath' option in the global emulator configuration + Aller à l'accueil (première page) + + +- ++ + Enter URL + + + +- +- Open link +- Ouvrir le lien +- +- +- +- Open link in new window +- +- +- +- +- Open image in new window +- +- +- +- +- Save link as... +- Sauvegarder le lien sous... +- +- +- +- Copy link +- Copier le lien +- +- +- +- Save image as... +- Sauvegarder l'image sous... +- +- +- +- Copy image +- Copier l'image +- +- +- +- Copy image address +- +- +- +- +- Reload +- Recharger +- +- +- +- Stop +- Stop +- +- +- +- Copy +- Copier +- +- +- +- Inspect +- Inspecter +- +- +- ++ + WARNING: invalid network reply and/or network error + ATTENTION: réponse réseau invalide et/ou erreur réseau + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + MiniNavigateurWeb + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + + +@@ -13295,376 +13233,361 @@ Please check the 'rompath' option in the global emulator configuration + + Options + +- ++ + Check all ROM states + Vérifier l'état de toutes les ROMS + + +- ++ + About QMC2 + A propos de QMC2 + + +- ++ + Online documentation + Documention en ligne + + +- ++ + Clear image cache + Nettoyer le cache d'images + + +- ++ + Clear icon cache + Nettoyer le cache des icônes + + +- +- ++ ++ + Open options dialog + Ouvrir la fenêtre d'options + + +- ++ + About Qt + A propos de Qt + + +- ++ + Check states of tagged ROMs + Vérifier les états des ROMS taggées + + +- ++ + Recreate template map + Re-créer le template + + +- ++ + Check template map + Vérifier le template + + +- +- ++ ++ + Stop processing / exit QMC2 + Arrêter le processus / quitter QMC2 + + +- ++ + Clear YouTube cache + Nettoyer le cache YouTube + + +- ++ + Tag current set + Tagger le set actuel + + +- ++ + Untag current set + Enlever le tag du set actuel + + +- ++ + Toggle tag mark + Bascule la marque de tag + + +- ++ + Toggle tag / cursor down + + + +- ++ + Toggle tag / cursor up + + + +- ++ + Tag all sets + Tagger tous les sets + + +- ++ + Untag all sets + Enlever le tag de tous les sets + + +- ++ + Invert all tags + Inverser tous les tags + + +- ++ + Tag visible sets + + + +- ++ + Untag visible sets + + + +- ++ + Invert visible tags + + + +- ++ + Full detail view + + + +- +- +- +- ++ ++ ++ ++ + Category view + + + +- +- +- +- ++ ++ ++ ++ + Version view + + + +- ++ + Run external ROM tool + Lancer un outil de ROM externe + + +- ++ + Run ROM tool for tagged sets + Exécuter l'outil de ROM pour les sets taggés + + +- ++ + Software-list view-mode flat + + + +- ++ + Software-list view-mode tree + + + +- ++ + Plus (+) + Plus (+) + + +- ++ + Minus (-) + Moins (-) + + +- ++ + Cursor down + Curseur Bas + + +- ++ + End + Fin + + +- ++ + Escape + Echap + + +- ++ + Cursor left + Curseur gauche + + +- ++ + Home + Home + + +- ++ + Page down + Page Bas + + +- ++ + Page up + Page Haut + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + + + +- +- ++ ++ + Default icon + Icône par défaut + + +- +- ++ ++ + No icon + Pas d'icône + + +- ++ + &Foreign emulators + + + +- ++ + Choose image file + Choisir un fichier d'image + + +- ++ + Supported image files (%1) + Fichiers d'images reconnus (%1) + + +- ++ + Enter key + Appuyer sur la touche + + +- ++ + Analyze current machine + + + +- ++ + Copy machine to favorites + + + +- ++ + Reload machine list + + + +- ++ + Check machine's ROM state + + + +- ++ + Open ROMAlyzer (system mode) + + + +- ++ + Open ROMAlyzer (software mode) + + + +- ++ + Rebuild current machine + + + +- ++ + Rebuild tagged machines + + + +- ++ + Hierarchical view + + + +- ++ + Custom view + + + +- ++ + Check software-states + + + +- ++ + Launch arcade mode + + + +- ++ + Increase rank + + + +- ++ + Decrease rank + + + +- ++ + Return key + + + +- ++ + Cursor right + Curseur Droit + + +- ++ + Tabulator + Tabulation + + +- ++ + Cursor up + Curseur Haut + + +- ++ + Activate item + + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + ATTENTION: la configuration n'est pas accessible en écriture, vérifiez les permissions de + + +- +- ++ ++ + Reset to default font + Revenir à la police par défaut + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- utiliser un point-virgule (;) pour séparer les dossiers multiples +- +- ++ + + + +@@ -13674,584 +13597,599 @@ Please check the 'rompath' option in the global emulator configuration + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ utiliser un point-virgule (;) pour séparer les dossiers multiples ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + + + +- ++ + image cache size set to %1 MB + taille du cache d'images réglé à %1 MB + + +- +- ++ ++ + Confirm + Confirmer + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + + + +- ++ + &Local + Config. &Locale + + +- ++ + &Overwrite + &Ecraser + + +- ++ + Do&n't apply + &Ne pas appliquer + + +- ++ + ascending + ascendant + + +- ++ + descending + descendant + + +- ++ + sorting machine list by %1 in %2 order + + + +- ++ + 7z error + erreur 7z + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: Impossible d'ouvrir l'icône, vérifiez les permissions d'accès pour %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + libarchive error + erreur libarchive + + +- ++ + triggering automatic reload of machine list + + + +- +- ++ ++ + SW snap file + fichier SW snap + + +- +- +- ++ ++ ++ + Custom IDs... + IDs personnalisés... + + +- ++ + Choose XML cache database file + + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + + + +- ++ + &Yes + + + +- ++ + &No + + + +- ++ + Choose user data database file + + + +- ++ + Choose cookie database file + + + +- ++ + Choose 7-zip tool + + + +- ++ + Choose ROM tool + Choisir l'outil de ROM + + +- +- +- ++ ++ ++ + Choose working directory + Choisir le répertoire de travail + + +- ++ + Choose machine favorites file + + + +- ++ + Choose machine list cache file + + + +- ++ + Choose machine list database file + + + +- ++ + Choose software state cache directory + + + +- ++ + Choose general software folder + Choisir le répertoire des logiciels général + + +- ++ + Choose dat-info database file + + + +- ++ + Choose MESS machine info DB + + + +- ++ + Choose MAME emulator info DB + + + +- ++ + Choose MESS emulator info DB + + + +- ++ + Choose software info DB + + + +- ++ + Choose catver.ini file + Choisir le fichier catver.ini + + +- ++ + Choose compressed preview file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + Archives ZIP + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + Archives 7z + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + Tous les fichiers + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + Formats gérés + + +- ++ + Choose compressed flyer file + + + +- ++ + Choose compressed icon file + + + +- ++ + Choose compressed cabinet file + + + +- ++ + Choose compressed controller file + + + +- ++ + Choose compressed marquee file + + + +- ++ + Choose compressed title file + + + +- ++ + Choose compressed PCB file + + + +- ++ + Choose compressed software snap file + + + +- ++ ++ + +- +- +- ++ ++ + Default + Défaut + + +- +- ++ ++ + Preview file + Fichier Capture + + +- ++ + Minimize when launching (non-embedded) emulators? + Minimiser lors de l'exécution d'émulateurs (non embarqués) ? + + +- +- +- +- ++ ++ ++ ++ + Category + Catégorie + + +- +- +- +- ++ ++ ++ ++ + Version + Version​‎ + + +- ++ + Check images and icons + + + +- ++ + Analyze tagged sets + Analyse des sets taggés + + +- ++ + Copy tagged sets to favorites + Ajouter les jeux taggés aux favoris + + +- ++ + Clear ProjectMESS cache + + + +- ++ + Play (independent) + Jouer (indépendant) + + +- ++ + Play (embedded) + Jouer (embarqué) + + +- +- ++ ++ + No style sheet + Pas de feuille de style + + +- +- +- ++ ++ ++ + Preview directory + Répertoire des captures + + +- +- ++ ++ + Flyer file + fichier Flyer + + +- +- +- ++ ++ ++ + Flyer directory + Répertoire des flyers + + +- +- ++ ++ + Icon file + Fichier des icônes + + +- +- +- ++ ++ ++ + Icon directory + Répertoire des icônes + + +- +- ++ ++ + PCB file + Fichier des PCB + + +- +- +- ++ ++ ++ + PCB directory + Répertoire des PCB + + +- ++ + Choose Qt style sheet file + Choisir le fichier de style QT + + +- ++ + Qt Style Sheets (*.qss) + fichiers Qt Style (*.qss) + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + Tous les fichiers (*) + + +- ++ + Choose preview directory + Choisir le répertoire des captures + + +- ++ + N/A + + + +- ++ + Choose flyer directory + Choisir le répertoire des flyers + + +- ++ + Choose icon directory + Choisir le répertoire des icônes + + +- ++ + Choose PCB directory + Choisir le répertoire des PCB + + +- ++ + Choose options template file + Choisir les options du fichier template + + +- +- ++ ++ + Choose emulator executable file + Choisir l'exécutable de l'émulateur + + +- ++ + Choose emulator log file + Choisir le fichier log de l'émulateur + + +- ++ + Choose zip tool + Choisir l'outil zip + + +- ++ + Choose play history file + Choisir le fichier de l'historique des jeux joués + + +- ++ + Choose ROM state cache file + Choisir le fichier cache d'état de ROM + + +- ++ + Choose software list cache database file + + + +- ++ + Choose data directory + Choisir le répertoire des données + + +- ++ + Choose MAME machine info DB + + + +- ++ + Choose category.ini file + + + +- ++ + Choose software snap directory + Choisir le répertoire des captures des logiciels + + +- ++ + Choose software notes folder + Choisir le répertoire des notes des logiciels + + +- ++ + Choose software notes template + Choisir le template des notes des logiciels + + +- +- ++ ++ + HTML files (*.html *.htm) + fichiers HTML (*.html *.htm) + + +- ++ + Choose system notes folder + + + +- ++ + Choose system notes template + + + +- ++ + Choose video snap folder + + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + shortcut map is clean + La carte des raccourcis est propre + + +- ++ + WARNING: shortcut map contains duplicates + ATTENTION: la carte des raccourcis contient des doublons + +@@ -14261,2317 +14199,2317 @@ Are you sure you want to do this? + Options + + +- +- &GUI +- &GUI +- +- +- +- Application language +- Langue de l'application +- +- +- +- DE (German) +- DE (Allemand) +- +- +- +- US (English) +- US (Anglais) ++ ++ &GUI ++ &GUI + + +- +- PL (Polish) +- PL (Polonais) ++ ++ Application language ++ Langue de l'application + + +- ++ + Language + Langue + + +- ++ + Image cache size in MB + Taille du cache d'images en MB + + +- ++ + MB + MB + + +- ++ + Image cache size + Taille du cache d'images + + +- ++ + Application font + Police de l'application + + +- ++ + Show short description of current processing in progress bar + Affiche une courte description du processus en cours dans la barre de progression + + +- ++ + Smooth image scaling (nicer, but slower) + Redimensionnement doux des images (plus joli, mais plus lent) + + +- ++ + Smooth scaling + Redimensionnement doux + + +- ++ + Retry loading images which weren't found before? + Retenter de charger les images qui n'ont pas été trouvées précédemment? + + +- ++ + Retry loading images + Retente de charger les images + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + Redimensionner l'image pour remplir la frame (sinon, utilise la taille d'origine) + + +- ++ + Scaled preview + Captures redimensionnées + + +- ++ + Use standard or custom color palette? + Utiliser la palette standard ou personnalisée? + + +- ++ + Scaled flyer + Flyers redimensionnés + + +- ++ + GUI style + style du GUI + + +- ++ + Application font (= system default if empty) + Police de l'application (= défaut système si vide) + + +- ++ + Browse application font + Parcourir pour la police de l'application + + +- +- ++ ++ + F&iles / Directories + F&ichiers / Répertoires + + +- ++ + Browse frontend data directory + Parcourir pour le répertoire de données du frontend + + +- ++ + Frontend data directory (read) + Répertoire de données du frontend (lecture) + + +- ++ + Data directory + Répertoire de données + + +- ++ + Browse ROM state cache file + Parcourir le cache d'état de ROM + + +- ++ + ROM state cache file (write) + Cache d'état de ROM (écriture) + + +- ++ + ROM state cache + Cache d'état de ROM + + +- ++ + Play history file (write) + Fichier historique des jeux joués (écriture) + + +- ++ + Favorites file + Fichier des favoris + + +- ++ + Play history file + Fichier historique des jeux joués + + +- ++ + Browse play history file + Parcourir pour le fichier historique des jeux joués + + +- ++ + Icon directory (read) + Répertoire d'icônes (lecture) + + +- ++ + Browse icon directory + Parcourir pour le répertoire d'icônes + + +- ++ + Flyer directory (read) + Répertoire de flyers (lecture) + + +- ++ + Browse flyer directory + Parcourir pour le répertoire de flyers + + +- ++ + Preview directory (read) + Répertoire des captures (lecture) + + +- ++ + Browse preview directory + Parcourir pour le répertoire de captures + + +- ++ + Auto-trigger ROM check + Vérification automatique de ROM + + +- ++ + Update delay + Délai de mise à jour + + +- ++ + immediate + immédiat + + +- ++ + ms + ms + + +- ++ + Responsiveness + Répondant + + +- ++ + Select sort order + Sélectionner l'ordre de tri + + +- ++ + Ascending + Ascendant + + +- ++ + Descending + Descendant + + +- ++ + Select sort criteria + Sélectionner le critère de tri + + +- ++ + ROM state + statut de ROM + + +- ++ + Year + Année + + +- ++ + Manufacturer + Fabricant + + +- ++ + Sort order + Ordre de tri + + +- ++ + Sort criteria + Critère de tri + + +- ++ + ROM state filter + filtre d'état de ROM + + +- ++ + Show ROM state C (correct)? + Affiche l'état de ROM C (correct)? + + +- ++ + Show ROM state M (mostly correct)? + Affiche l'état de ROM M (presque correct)? + + +- ++ + Show ROM state I (incorrect)? + Affiche l'état de ROM I (incorrect)? + + +- ++ + Show ROM state N (not found)? + Affiche l'état de ROM N (non trouvé)? + + +- ++ + Show ROM state U (unknown)? + Affiche l'état de ROM U (inconnu)? + + +- ++ + &Shortcuts / Keys + &Raccourcis / Touches + + +- ++ + Reset key sequence to default + Ré-initialiser la séquence de touche par défaut + + +- ++ + Reset + Ré-initialise + + +- +- ++ ++ + Redefine key sequence + Redéfinir la séquence de touches + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + Définitions des raccourcis actifs: double-clic pour redéfinir la séquence de touches + + +- ++ + Custom + Personnalisé + + +- ++ + Zip tool + outil ZIP + + +- ++ + External zip tool, i.e. "zip" (read and execute) + Outil ZIP externe, ex: "zip" (lecture et exécution) + + +- ++ + Browse for zip tool + Parcourir pour l'outil zip + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + Liste d'arguments de l'outil zip pour supprimer des entrées depuis l'archive ZIP (ex "$ARCHIVE$ -d $FILELIST$") + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + Arguments + + +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- <font size="-1"><b>ATTENTION: les mots de passe enregistrés sont <u>faiblement</u> encryptés!</b></font> +- +- +- ++ + E&mulator + E&mulateur + + +- ++ + &Global configuration + Confi&guration globale + + +- ++ + Browse emulator log file + Parcourir pour le fichier de log de l'émulateur + + +- ++ + Emulator log file (write) + Fichier de log de l'émulateur (écriture) + + +- ++ + Emulator log file + Fichier de log de l'émulateur + + +- +- ++ ++ + Browse emulator executable file + Parcourir pour l'exécutable de l'émulateur + + +- ++ + Emulator executable file (read and execute) + Exécutable de l'émulateur (lecture et exécution) + + +- +- ++ ++ + Executable file + Exécutable + + +- ++ + Browse options template file + Parcourir pour le fichier template d'options + + +- ++ + Options template file (read) + Fichier template d'options (lecture) + + +- +- PT (Portuguese) +- PT (Portuguais) +- +- +- ++ + Show progress texts + Afficher les textes de progression + + +- ++ + Scaled PCB + PCB redimensionnés + + +- ++ + Style sheet + Feuille de style + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + Feuille de style Qt ($.qss, laisser vide pour ne pas utiliser de feuille de style) + + +- ++ + Browse Qt style sheet file + Parcourir pour un fichier Feuille de style Qt + + +- ++ + Log font + Police de log + + +- ++ + Font used in logs (= application font if empty) + Police utilisée dans les logs (= police de l'application si vide) + + +- ++ + Browse font used in logs + Parcourir pour la police utilisée dans les logs + + +- ++ + PCB directory (read) + Répertoire des PCB (lecture) + + +- ++ + Browse PCB directory + Parcourir pour le répertoire des PCB + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + Active l'utilisation de catver.ini - Trouvez la nouvelle version sur http://www.progettoemma.net/?catlist + + +- ++ + Use catver.ini + Utilise catver.ini + + +- ++ + Path to catver.ini (read) + Chemin de catver.ini (lecture) + + +- ++ + Browse path to catver.ini + Parcourir pour le répertoire de catver.ini + + +- ++ + ROM types + types de ROM + + +- ++ + SW snap position + Position du SW snap + + +- ++ + Above / Left + Dessus / Gauche + + +- ++ + Above / Center + Dessus / Centre + + +- ++ + Above / Right + Dessus / Droite + + +- ++ + Below / Left + Dessous / Gauche + + +- ++ + Below / Center + Dessous / Centre + + +- ++ + Below / Right + Dessous / Droite + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + Répertoire utilisé comme répertoire par défaut des logiciels pour le configurateur de périphériques MESS (si un sous-répertoire nommé comme la machine actuelle existe, il sera sinon sélectionné) + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + Démarrer l'émulation directement quand un élément est sélectionné dans la recherche, les favoris ou la liste des jeux joués (plutôt que basculer à la liste principale) + + +- +- +- ++ ++ ++ + SW snap folder + Répertoire SW snap + + +- ++ + Software snap-shot directory (read) + Répertoire pour les captures d'écran (lecture) + + +- ++ + Browse software snap-shot directory + Parcourir pour le répertoire des captures d'écran + + +- ++ + Players + Joueurs + + +- ++ + Play on sub-list activation + Lancer les jeux dans les sous-listes + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + Sélectionner la position du curseur que QMC2 utilise lors du défilement automatique vers l'élément actuel (ce paramètre s'applique à toutes les vues et listes!) + + +- ++ + Visible + Visible + + +- ++ + Top + Haut + + +- ++ + Bottom + Bas + + +- ++ + Center + Centre + + +- ++ + Cursor position + Position du curseur + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + Utiliser un outil unifié- et une barre d'outils sur Mac OS X + + +- ++ + Unify with title + Unifier avec le titre + + +- ++ + Minimize when launching emulators? + Minimiser au lancement d'émulateurs? + + +- ++ + Minimize on emulator launch + Minimiser au lancement d'émulateur + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + Supprimer tous les messages envoyés vers la classe QDedug ou autre fonction qDebug() / qCritical() / qWarning() / qFatal() + + +- ++ + Suppress Qt messages + Supprimer les messages de QT + + +- ++ + Show splash screen when starting up? + Afficher l'écran de démarrage au lancement? + + +- ++ + Show splash screen + Afficher l'écran de démarrage + + +- ++ + Software notes folder + Répertoire des notes logicels + + +- ++ + Folder used to store personal notes about any software titles (write) + Répertoire utilisé pour stocker les notes personnelles au sujet de tout les titres de logiciels (écriture) + + +- ++ + Browse software notes folder + Parcourir pour le répertoire des notes logiciels + + +- ++ + Tag + Tag + + +- ++ + Driver status + Statut du driver + + +- ++ + Display ROM status icons in master lists? + Afficher les icônes de statut de ROM dans les listes? + + +- ++ + Show ROM status icons + Afficher l'icône de statut ROM + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + Sélectionner la position où les captures d'écran des logiciels sont affichées dans les listes des logiciels + + +- ++ + Disable snaps + Désactive les captures + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + Afficher les captures d'écran des logiciels par survol de la souris sur la liste des logiciels + + +- ++ + Enable ROM state filtering? + Activer le filtrage d'état de ROM? + + +- +- ES (Spanish) +- ES (Espagnol) +- +- +- +- IT (Italian) +- IT (Italien) +- +- +- +- RO (Romanian) +- RO (Roumain) +- +- +- +- SV (Swedish) +- +- +- +- ++ + Customize the tool-bar + + + +- ++ + Tool-bar... + + + +- ++ + Force QMC2's working directory to be the same as the executable's path + + + +- ++ + Set working directory from executable + + + +- ++ + Default palette + + + +- ++ + Edit the color palette + + + +- ++ + Edit color palette... + + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + + + +- ++ + Compressed cabinet file (read) + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + ZIP + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + 7z + + +- ++ + Browse compressed cabinet file + + + +- ++ + Compressed controller file (read) + + + +- ++ + Browse compressed controller file + + + +- ++ + Compressed marquee file (read) + + + +- ++ + Browse compressed marquee file + + + +- ++ + Switch between specifying a title directory or a compressed title file + + + +- ++ + MAME emulator information database - mameinfo.dat (read) + + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a preview directory or a compressed preview file + + + +- ++ + Compressed preview file (read) + + + +- ++ + Browse compressed preview file + + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + + + +- ++ + Compressed flyer file (read) + + + +- ++ + Browse compressed flyer file + + + +- ++ + Switch between specifying an icon directory or a compressed icon file + + + +- ++ + Compressed icon file (read) + + + +- ++ + Browse compressed icon file + + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + + + +- ++ + Switch between specifying a controller directory or a compressed controller file + + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + + + +- ++ + Compressed title file (read) + + + +- ++ + Browse compressed title file + + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + + + +- ++ + Compressed PCB file (read) + + + +- ++ + Browse compressed PCB file + + + +- ++ + Compressed software snap-shot file (read) + + + +- ++ + Browse compressed software snap-shot file + + + +- ++ + Load MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + + + +- ++ + Enable the use of a template for (empty) software notes + Active l'utilisation d'un template pour les notes logiciels (vide) + + +- ++ + Software notes template + Template des notes logiciels + + +- ++ + HTML file used as a template for software-notes (read) + fichier HTML utilisé comme template pour les notes de logiciels (lecture) + + +- ++ + Browse software notes template + Parcourir pour le template des notes logiciels + + +- ++ + Enable the use of category.ini + + + +- ++ + Use category.ini + + + +- ++ + Path to category.ini (read) + + + +- ++ + Browse path to category.ini + + + +- ++ + System notes folder + + + +- ++ + Enable the use of a template for (empty) system notes + + + +- ++ + System notes template + + + +- ++ + HTML file used as a template for system-notes (read) + + + +- ++ + Folder used to store personal notes about any systems (write) + + + +- ++ + Browse system notes folder + + + +- ++ + Browse system notes template + + + +- ++ + Load software information database (from history.dat) + + + +- ++ + Software information database - history.dat (read) + + + +- ++ + Browse software information database (history.dat) + + + +- ++ + Define additional artwork classes for systems and software-list entries + + + +- ++ + Set up additional artwork classes... + + + +- ++ + Choose active image formats and their priorities (per artwork class) + + + +- ++ + Select image formats... + + + +- ++ + Load MESS emulator information database (messinfo.dat) + + + +- ++ + MESS emulator information database - messinfo.dat (read) + + + +- ++ + Show machine's description at the bottom of any images + + + +- ++ + Show machine name + + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + + + +- ++ + Parent image / video fallback + + + +- ++ + Open the component setup dialog + + + +- ++ + Component setup... + + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + + + +- ++ + Restore saved machine selection at start and after reloading the machine list + + + +- ++ + Restore machine selection + + + +- ++ + Show vertical machine status indicator in machine details + + + +- ++ + Machine status indicator + + + +- ++ + Save machine selection on exit and before reloading the machine list + + + +- ++ + Save machine selection + + + +- ++ + Show animation when loading, filtering or tagging the machine list? + + + +- ++ + Show loading animation + + + +- ++ + Scaled software snapshot + + + +- ++ + Select individual fallback settings per artwork class + + + +- ++ + Individual fallback settings... + + + +- ++ + Import MAME machine information to DAT-info database + + + +- ++ + Browse machine favorites file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + Archive + + +- ++ + MAME machine information database - history.dat (read) + + + +- ++ + Browse MESS emulator information database (messinfo.dat) + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + + + +- ++ + Machine favorites file (write) + + + +- ++ + Load MAME machine information database (history.dat) + + + +- ++ + Machine info (MAME) + + + +- ++ + Browse MAME machine information database (history.dat) + + + +- ++ + Video snap folder + + + +- ++ + Video snap folder (read) + + + +- ++ + Browse video snap folder + + + +- ++ + Optimize catver.ini for faster loading + + + +- ++ + Setup the icon cache database + + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + Désactive automatiquement les snaps SW quand les détails des logciels sont visibles (peut être dérangeant) + + +- ++ + No SW snaps for visible details + Pas de snaps SW pour les détails visibles + + +- ++ + Machine description + + + +- ++ + Machine name + + + +- ++ + Source file + Fichier source + + +- ++ + Rank + + + +- ++ + Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) + + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + Choisir le mode de lancement par défaut (indépendant ou embarqué) à utiliser lorsque l'émulation est démarrée par l'activation d'une entrée dans une liste + + +- ++ + independent + indépendant + + +- ++ + embedded + embarqué + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + + + +- ++ + Default launch-mode + Mode de lancement + + +- ++ + Display (or hide) device sets in master lists? + Afficher (ou masquer) les sets de périphériques dans les listes? + + +- ++ + Show device sets + Voir les sets de périphériques + + +- ++ + Display (or hide) BIOS sets in master lists? + Afficher (ou masquer) les sets BIOS dans les listes? + + +- ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) ++ ++ ++ ++ ++ pt_BR (Brazilian Portuguese) ++ ++ ++ ++ ++ ro (Romanian) ++ ++ ++ ++ ++ sv (Swedish) ++ ++ ++ ++ ++ us (American English) ++ ++ ++ ++ + Show BIOS sets + Afficher les sets BIOS + + +- ++ + ROM tool + outil de ROM + + +- ++ + External ROM tool (it's completely up to you...) + outil de ROM externe (c'est totalement sous votre contrôle...) + + +- ++ + Browse ROM tool + Parcourir pour l'outil de ROM + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + liste d'arguments de l'outil de ROM (ex. "$ID$ $DESCRIPTION$") + + +- ++ + Browse working directory of the ROM tool + Parcourir pour le répertoire de travail de l'outil de ROM + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + Copier la sortie de l'outil vers le log du Front-End (conservé pour débug) + + +- ++ + Copy tool output to front end log + Copier la sortie de l'outil dans le log du Front-End + + +- ++ + Automatically close the tool-executor dialog when the external process finished + Fermer automatiquement la fenêtre de l'outil quand le processus externe est terminé + + +- ++ + Close dialog automatically + Fermer la fenêtre automatiquement + + +- ++ + Browser settings + + + +- ++ + Browse cookie database + + + +- ++ + Cookie database file (write) + + + +- ++ + Cookie database + + + +- ++ + Save and restore cookies used on web pages? + + + +- ++ + Remove all cookies by recreating the database + + + +- ++ + 7-zip tool + + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + + + +- ++ + Browse for 7-zip tool + + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + + + +- ++ + Options template file + Fichier template d'options + + +- ++ + Clean up user data database (removes obsolete entries) + + + +- ++ + Software state cache + + + +- ++ + Directory used to store individual state cache files for each software-list (write) + + + +- ++ + Browse software state cache directory + + + +- ++ + XML cache database + + + +- ++ + Database file for caching the output from -listxml (write) + + + +- ++ + Browse XML cache database file + + + +- ++ + User data database + + + +- ++ + Database file for storing/retrieving user data (write) + + + +- ++ + Browse user data database file + + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + Indique si l'$ID$ est manquant dans la ligne de commande envoyée (jaune) or pas (vert) + + +- ++ + Replace + Remplacer + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + Arguments passés à l'émulateur -- utiliser $ID$ comme base pour un set unique ID, $DESCRIPTION$ pour sa description + + +- +- +- +- ++ ++ ++ ++ + Working directory + Répertoire de travail + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + Répertoire de travail utilisé quand l'émulateur est exécuté (si vide, utilise le répertoire de travail actuel de QMC2) + + +- +- ++ ++ + Browse working directory + Parcourir pour le répertoire de travail + + +- ++ + General software folder + Répertoire général des logiciels + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + Répertoire de travail utilisé quand l'outil de ROM est exécuté (si vide, utilise le répertoire de travail actuel de QMC2) + + +- ++ + Software list cache DB + + + +- ++ + Browse software list cache database file + + + +- ++ + Browse general software folder + Parcourir pour le répertoire général des logiciels + + +- ++ + Database file for caching the ouput from -listsoftware (write) + + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + + + +- ++ + Name + Nom + + +- ++ + Executable + Exécutable + + +- ++ + Custom IDs + IDs personnalisés + + +- ++ + Register emulator + Enregistrer l'émulateur + + +- ++ + Add + + + +- ++ + Deregister emulator + Retire l'émulateur + + +- ++ + Registered emulator's name + nom des émulateurs enregistrés + + +- ++ + Command to execute the emulator (path to the executable file) + Commande pour exécuter l'émulateur (chemin vers l'exécutable) + + +- ++ + Replace emulator registration + Retirer l'enregistrement de l'émulateur + + +- ++ + Network / &Tools + + + +- ++ + Restore cookies + + + +- ++ + Manage cookies stored in database + + + +- ++ + Manage stored cookies + Gérer les témoins de connexion enregistrés + + +- ++ + Clear database + + + +- ++ + Recreate user data database (removes <b>all</b> entries) + + + +- ++ + Foreign &emulators + + + +- ++ + Icon + Icône + + +- ++ + Emulator name + Nom de l'émulateur + + +- ++ + Remove + Enlever + + +- ++ + Machine list cache + + + +- ++ + Browse machine list cache file + + + +- ++ + Machine list cache file (write) + + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + + + +- ++ + Machine list database + + + +- ++ + Machine list database file (write) + + + +- ++ + Browse machine list database file + + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + + + +- ++ + Apply settings + Appliquer les paramètres + + +- ++ + &Apply + &Appliquer + + +- ++ + Restore currently applied settings + Restaurer les paramètres appliqués en cours + + +- ++ + &Restore + &Restaurer + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + Remettre au paramètres par défaut (cliquer <i>Restaurer</i> pour restaurer les paramètres appliqués en cours) + + +- ++ + &Default + Par &défaut + + +- ++ + Close and apply settings + Fermer et appliquer les paramètres + + +- ++ + &Ok + &Ok + + +- ++ + Close and discard changes + Fermer et annuler les changements + + +- ++ + &Cancel + &Annuler + + +- +- FR (French) +- FR (Français) +- +- +- ++ + Use native file dialogs + + + +- +- EL (Greek) +- +- +- +- ++ + Kill emulators when QMC2 exits? + + + +- ++ + Kill emulators on exit + + + +- ++ + Terminate all other emulator instances when launching a new one? + + + +- ++ + One emulator at a time + + + +- ++ + Load MESS machine information database (sysinfo.dat) + + + +- ++ + MESS machine information database - sysinfo.dat (read) + + + +- ++ + Browse MESS machine information database (sysinfo.dat) + + + +- ++ + Import MESS emulator information to DAT-info database + + + +- ++ + Import MAME emulator information to DAT-info database + + + +- ++ + Import MESS machine information to DAT-info database + + + +- ++ + DAT-info database file + + + +- ++ + Browse DAT-info database file + + + +- ++ + Browse system manual folder + + + +- ++ + DAT-info database file (write) + + + +- ++ + Machine info (MESS) + + + +- ++ + Emu info (MAME) + + + +- ++ + Emu info (MESS) + + + +- ++ + Software info + + + +- ++ + Import software information to DAT-info database + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + &Joystick + &Joystick + + +- ++ + Enable GUI control via joystick + Active le contrôle du GUI par le joystick + + +- ++ + Enable joystick control + Active le contrôle au joystick + + +- ++ + Rescan available joysticks + Rescanne les joysticks disponibles + + +- ++ + Rescan joysticks + Rescanne les joysticks + + +- ++ + Select joystick + Choisir le joystick + + +- ++ + List of available joysticks - select the one you want to use for GUI control + Liste des joysticks disponibles - sélectionnez celui que vous voulez pour contrôler le GUI + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + Aucun joystick détecté + + +- ++ + Joystick information and settings + Informations et paramètres du joystick + + +- ++ + Number of joystick axes + Nombre d'axes du joystick + + +- +- +- +- ++ ++ ++ ++ + 0 + 0 + + +- ++ + Buttons: + Boutons: + + +- ++ + Number of joystick buttons + Nombre de boutons du joystick + + +- ++ + Hats: + Hats: + + +- ++ + Number of coolie hats + Nombre coolie hats + + +- ++ + Trackballs: + Trackballs: + + +- ++ + Number of trackballs + Nombre de trackballs + + +- ++ + Calibrate joystick axes + Calibrer les axes du joystick + + +- ++ + Test all joystick functions + Tester toutes les fonctions du joystick + + +- ++ + Axes: + Axes: + + +- ++ + Automatically repeat joystick functions after specified delay + Répète automatiquement les fonctions de joystick après le délai spécifié + + +- ++ + Auto repeat after + Recommencer automatiquement après + + +- ++ + Repeat all joystick functions after how many milliseconds? + Répète automatiquement les fonctions de tous les joysticks après combien de millisecondes ? + + +- +- ++ ++ + ms + ms + + +- ++ + Event timeout + Temps pour l'évènement écoulé + + +- ++ + Process joystick events after how many milliseconds? + Exécute les évènements de joystick après combien de millisecondes ? + + +- +- ++ ++ + Function / Key + Fonction / Touche + + +- ++ + Calibrate + Calibrer + + +- ++ + Test + Tester + + +- ++ + Map + Carte + + +- ++ + Remap + Re-mapper + + +- ++ + Remove + Enlever + + +- ++ + Active joystick mappings; double-click to remap joystick function + Active le mapping de joystick: double-clic pour remapper les fonctions joystick + + +- ++ + Joystick function + Fonction joystick + + +- ++ + Map joystick functions to GUI functions + Mapper les fonctions de joystick pour les fonctions du GUI + + +- ++ + Remap a joystick function to the selected GUI function + Remapper une fonction du joystick pour la fonction du GUI sélectionnée + + +- ++ + Remove joystick mapping from selected GUI function + Enlever une fonction du joystick pour la fonction du GUI sélectionnée + + +- ++ + ERROR: couldn't initialize SDL joystick support + ERREUR: Impossible d'initialiser le support joystick SDL + + +- ++ + joystick map is clean + Mapping de joystick nettoyé + + +- ++ + WARNING: joystick map contains duplicates + ATTENTION: La carte de joystick contient des doublons + + +- ++ + please restart QMC2 for some changes to take effect + SVP redémarrer QMC2 pour appliquer les changements + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + L'option nécessite un redémarrage de QMC2 pour prendre effet + + +- ++ + restart required + redémarrage requis + + +- +- +- ++ ++ ++ + reload required + rechargement requis + + +- ++ + none + aucun + + +- +- ++ ++ + unlimited + illimité + + +- +- ++ ++ + lines + lignes + + +- ++ + Emulator log size + Taille du log de l'émulateur + + +- ++ + Maximum number of lines to keep in emulator log browser + Nombre maximum de lignes à garder dans le navigateur du fichier log de l'émulateur + + +- ++ + Previous track (audio player) + Piste précédente (lecteur audio) + + +- ++ + Next track (audio player) + Piste suivante (lecteur audio) + + +- ++ + Fast backward (audio player) + Retour rapide (lecteur audio) + + +- ++ + Fast forward (audio player) + Avance rapide (lecteur audio) + + +- ++ + Stop track (audio player) + Stopper la piste (lecteur audio) + + +- ++ + Pause track (audio player) + Mettre en pause la piste (lecteur audio) + + +- ++ + Play track (audio player) + Lire la piste (lecteur audio) + + +- ++ + Raise volume (audio player) + Monter le volume (lecteur audio) + + +- ++ + Lower volume (audio player) + Baisser le volume (lecteur audio) + + +- ++ + Export ROM Status + Exporte le statut de ROM + + +- +- ++ ++ + Only when required + Uniquement si nécessaire + + +- ++ + Show the menu bar + Affiche la barre de menus + + +- ++ + Show menu bar + Affiche la barre de menus + + +- +- ++ ++ + Show status bar + Affiche la barre de statut + + +- +- ++ ++ + Show tool bar + Affiche la barre d'outils + + +- ++ + Toggle ROM state C + Basculer en ROM state C + + +- ++ + Toggle ROM state M + Basculer en ROM state M + + +- ++ + Toggle ROM state I + Basculer en ROM state I + + +- ++ + Toggle ROM state N + Basculer en ROM state N + + +- ++ + Toggle ROM state U + Basculer en ROM state U + + +- ++ + Check for other instances of this QMC2 variant on startup + Tester pour d'autres instances de cette variante QMC2 au démarrage + + +- ++ + Check single instance + Tester l'instance unique + + +- ++ + Setup arcade mode + Configurer le mode arcade + +@@ -16581,254 +16519,244 @@ Are you sure you want to do this? + &Front end + + +- ++ + Application style (Default = use system's default style) + Style d'application (Défaut = utiliser le style par défaut du système) + + +- ++ + Automatically trigger a ROM check if necessary + Effectue automatiquement une vérification de ROM si nécessaire + + +- +- +- ++ ++ ++ + Command + Commande + + +- ++ + Launch emulation on double-click events (may be annoying) + Lancer l'émulation par double-clic (peut-être ennuyeux) + + +- ++ + Double-click activation + Activation du double-clic + + +- ++ + Toggle full screen + Basculer en plein écran + + +- ++ + please reload machine list for some changes to take effect + + + +- +- ++ ++ + Cabinet file + Fichier Borne (cabinet) + + +- +- +- ++ ++ ++ + Cabinet directory + Répertoire des bornes + + +- +- ++ ++ + Controller file + Fichier Contrôleur + + +- +- +- ++ ++ ++ + Controller directory + Répertoire des contrôleurs + + +- ++ + Choose cabinet directory + Choisir le répertoire des bornes + + +- ++ + Choose controller directory + Choisir le répertoire des contrôleurs + + +- ++ + Scaled cabinet + Bornes redimensionnées + + +- ++ + Scaled controller + Contrôleurs redimensionnés + + +- ++ + Cabinet directory (read) + Répertoire des bornes (lecture) + + +- ++ + Browse cabinet directory + Parcourir pour le répertoire de bornes + + +- ++ + Controller directory (read) + Répertoire de contrôleurs (lecture) + + +- ++ + Browse controller directory + Parcourir pour le répertoire de contrôleurs + + +- +- ++ ++ + Marquee file + Fichier Marquee + + +- +- +- ++ ++ ++ + Marquee directory + Répertoire des marquees + + +- +- ++ ++ + Title file + Fichier titre + + +- +- +- ++ ++ ++ + Title directory + Répertoire des titres + + +- ++ + Choose marquee directory + Choisir le répertoire des marquees + + +- ++ + Choose title directory + Choisir le répertoire des titres + + +- ++ + Scaled marquee + Marquees redimensionnés + + +- ++ + Scaled title + Titres redimensionnés + + +- ++ + Marquee directory (read) + Répertoire des marquees (lecture) + + +- ++ + Browse marquee directory + Parcourir pour le répertoire de marquees + + +- ++ + Title directory (read) + Répertoire des titres (lecture) + + +- ++ + Browse title directory + Parcourir pour le répertoire de titres + + +- ++ + Front end log size + Taille du log du Frontend + + +- ++ + Maximum number of lines to keep in front end log browser + Nombre maximum de lignes à garder dans le navigateur du fichier log du front-end + + +- ++ + Front end log file + Fichier de log du front-end + + +- ++ + Front end log file (write) + Fichier de log du front-end (écriture) + + +- ++ + Browse front end log file + Parcourir pour le fichier de log du front-end + + +- ++ + Choose front end log file + Choisir le fichier log du front-end + + +- ++ + Use HTTP proxy + Utiliser un proxy HTTP + + +- ++ + Host / IP + Hôte/IP + + +- ++ + Hostname or IP address of the HTTP proxy server + Nom d'hôte ou adresse IP du serveur proxy HTTP + + +- ++ + Port + Port + + +- ++ + Port to access the HTTP proxy service + Port pour l'accès au service du proxy HTTP + + +- ++ + User ID + Compte Utilisateur + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + Compte Utilisateur pour accéder au service de proxy HTTP (vide = pas d'authentification) + + +- +- Password +- Mot de passe +- +- +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + Active / Désactive l'utilisation d'un proxy HTTP pour tout accès web + +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- Mot de passe pour accéder au service de proxy HTTP (vide = pas d'authentification) +- + + + PCB +@@ -17316,28 +17244,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + correct + + +- ++ + incorrect + incorrect + + +- ++ + mostly correct + globalement correct + + +- ++ + not found + introuvable + + +- ++ + + + +@@ -17346,43 +17274,43 @@ Are you sure you want to do this? + inconnu + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + Par défaut + + +- ++ + Import from... + Importer depuis... + + +- +- ++ ++ + Export machine-specific MAME configuration + Exporter la configuration MAME spécifique à la machine + + +- +- ++ ++ + Import machine-specific MAME configuration + Importer la configuration MAME spécifique à la machine + + +- ++ + Setting up the GUI, please wait... + Configuration de l'interface, veuillez patienter... + + +- ++ + M.A.M.E. Catalog / Launcher II v + M.A.M.E. Catalog / Launcher II v + + +- ++ + GIT %1 + + +@@ -17423,18 +17351,18 @@ Are you sure you want to do this? + pas de / mauvais dump + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Support SDL du joystick activé - utilise SDL v%1.%2.%3 + + +- ++ + Phonon features enabled - using Phonon v%1 + Phonon actif - utilise Phonon v%1 + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + lecteur vidéo : erreur XML : erreur fatale ligne %1, colonne %2: %3 + +@@ -17506,19 +17434,19 @@ Are you sure you want to do this? + information d'état pour la software-list '%1' : L :%2 C :%3 M :%4 I :%5 N :%6 U :%7 + + +- ++ + + yes + oui + + +- ++ + + no + non + + +- ++ + + partially + partiellement +@@ -21038,7 +20966,7 @@ Are you sure you want to do this? + + + +- ++ + Choose mame.ini + + +@@ -21052,7 +20980,7 @@ Are you sure you want to do this? + + + +- ++ + Choose ui.ini + + +@@ -21161,178 +21089,179 @@ Are you sure you want to do this? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + &Annuler + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + Inconnu + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21340,74 +21269,73 @@ Are you sure you want to do this? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + + + +- +- ++ ++ + Choose emulator executable file + Choisir l'exécutable de l'émulateur + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Tous les fichiers (*) + + +- ++ + Choose working directory + + + +- ++ + Choose ROM path + Choisir le chemin d'accès aux ROM + + +- ++ + Choose sample path + Choisir le chemin d'accès aux échantillons sonores + + +- ++ + Choose hash path + Choisir le chemin d'accès aux hachages + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23552,54 +23480,54 @@ Are you sure you want to do this? + + Welcome + +- ++ + Default + Défaut + + +- ++ + Error + Erreur + + +- ++ + The specified file isn't executable! + Le fichier spécifié n'est pas un exécutable ! + + +- +- ++ ++ + Choose emulator executable file + Choisir l'exécutable de l'émulateur + + +- +- ++ ++ + All files (*) + Tous les fichiers (*) + + +- ++ + Choose working directory + Choisir le dossier de travail + + +- ++ + Choose ROM path + Choisir le chemin d'accès aux ROM + + +- ++ + Choose sample path + Choisir le chemin d'accès aux échantillons sonores + + +- ++ + Choose hash path + Choisir le chemin d'accès aux hachages + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23704,22 +23632,22 @@ Il est fortement recommandé que vous spécifiez le chemin de ROM que vous allez + Parcourir l'exécutable de l'émulateur + + +- ++ + Single-instance check + Vérification d'instance unique + + +- ++ + &Exit + &Quitter + + +- ++ + &Once + &Une fois + + +- ++ + &Ignore + &Ignorer + +@@ -23887,49 +23815,49 @@ Il est fortement recommandé que vous spécifiez le chemin de ROM que vous allez + + + +- ++ + FLV 240P + FLV 240P + + + +- ++ + FLV 360P + FLV 360P + + + +- ++ + MP4 360P + MP4 360P + + + +- ++ + FLV 480P + FLV 480P + + + +- ++ + MP4 720P + MP4 720P + + + +- ++ + MP4 1080P + MP4 1080P + + + +- ++ + MP4 3072P + MP4 3072P + + + +- ++ + Start / pause / resume video playback + Lecture / pause / reprise de la lecture vidéo + +@@ -23940,20 +23868,16 @@ Il est fortement recommandé que vous spécifiez le chemin de ROM que vous allez + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + Restant + + + +- ++ + Volume + Volume + +@@ -23998,286 +23922,261 @@ Il est fortement recommandé que vous spécifiez le chemin de ROM que vous allez + Suggérer un modèle de recherche (laisser appuyé pour le menu) + + +- ++ + Mute / unmute audio output + Ferme / Ouvre la sortie audio + + +- ++ + Volume level + Volume + + +- ++ + Video progress + Progression de la vidéo + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + Niveau de cache actuel : %1% + + +- +- ++ ++ + Play this video + Lire cette vidéo + + +- +- +- ++ ++ ++ + Copy video URL + Copier l'URL de la vidéo + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + Copier l'URL de la vidéo (pas de filtre géographique) + + +- +- +- ++ ++ ++ + Copy author URL + Copier l'URL de l'auteur + + +- +- ++ ++ + Paste video URL + Coller l'URL de la vidéo + + +- +- ++ ++ + Local movie file... + Fichier vidéo local... + + +- ++ + Remove selected videos + Enlever les vidéos sélectionnées + + +- +- +- ++ ++ + Full screen (return with toggle-key) + Plein écran (retour avec la touche de bascule) + + +- +- ++ ++ + Attach this video + Lier cette vidéo + + +- ++ + Auto-suggest a search pattern? + Suggérer automatiquement un modèle de recherche ? + + +- ++ + Auto-suggest + Suggestion automatique + + +- ++ + Enter string to be appended + Entrer la chaîne à ajouter + + +- ++ + Append... + Ajouter... + + +- ++ + Enter search string + Entrer la chaîne de recherche + + +- ++ + Appended string + Ajouter une chaîne + + +- ++ + Enter the string to be appended when suggesting a pattern: + Entrer la chaîne à ajouter quand un modèle est suggéré: + + +- ++ + Valid placeholder macros: + Macros de remplissage valides : + + +- +- ++ ++ + All files (*) + Tous les fichiers (*) + + +- +- ++ ++ + Choose movie file + Choisir un fichier vidéo + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + Mode plein écran -- presser %1 pour retourner au mode fenêtré + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + Mode plein écran -- presser la touche de bascule pour retourner au mode fenêtré + + +- ++ + video player: the local movie file '%1' is already attached, ignored + lecteur vidéo : le fichier vidéo '%1' est déjà lié, ignoré + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + lecteur vidéo : une vidéo avec l'ID '%1' est déjà liée, ignoré + + +- ++ + Buffering: %1% + Mise en cache : %1% + + +- +- Loading +- Chargement +- +- +- +- ++ + Playing + Lecture en cours + + +- +- ++ + Paused + En pause + + +- +- video player: playback error: %1 +- lecteur vidéo : erreur de lecture : %1 +- +- +- +- Video playback error: %1 +- Erreur de lecture vidéo : %1 +- +- +- ++ + Fetching info for video ID '%1' + Récupération des informations de la vidéo ID '%1' + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + lecteur vidéo : info erreur vidéo ID = '%1', statut = '%2', errorCode = '%3', errorText = '%4' + + +- +- +- ++ ++ ++ + Video info error: %1 + Info de l'erreur vidéo: %1 + + +- ++ + video player: video info error: timeout occurred + lecteur vidéo : info de l'erreur vidéo : délai expiré + + +- ++ + video info error: timeout occurred + erreur d'information vidéo : dépassement de délais + + +- ++ + video info error: unknown reason + erreur d'information vidéo : raison inconnue + + +- ++ + video player: video info error: %1 + lecteur vidéo : info de l'erreur vidéo : %1 + + +- +- ++ + Return to windowed mode + Retourner au mode fenêtré + + +- +- ++ + Full screen (press %1 to return) + Plein écran (presser %1 pour revenir) + + +- ++ + video player: video image info error: %1 + lecteur vidéo : info de l'erreur d'image vidéo : %1 + + +- ++ + video player: search request error: %1 + lecteur vidéo : erreur de recherche : %1 + + +- ++ + video player: search error: can't parse XML data + lecteur vidéo : erreur de recherche : n'a pas pu parcourir les données XML + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + lecteur vidéo : impossible de déterminer l'ID de la vidéo depuis l'URL '%1' -- merci d'informer les développeurs + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + lecteur vidéo : impossible d'associer l'image retournée pour la vidéo ID '%1' -- merci d'informer les développeurs + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + lecteur vidéo : impossible d'enregistrer l'image pour la vidéo ID '%1' dans le répertoire de cache Youtube '%2' -- vérifiez les permissions svp + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + lecteur vidéo : impossible d'enregistrer l'image pour la vidéo ID '%1', le répertoire de cache Youtube '%2' n'existe pas -- merci de corriger + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + lecteur vidéo : le téléchargement de l'image pour la vidéo ID '%1' a échoué, l'image reçue n'est pas valide + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + lecteur vidéo : le téléchargement de l'image pour la vidéo ID '%1' a échoué, texte de l''erreur = '%2' + +diff --git a/data/lng/qmc2_it.qm b/data/lng/qmc2_it.qm +index 6244fa5de94d2be49c575ead4b1bbb82479d3cee..784e911c3e18aeb49fa0b6ba3fba7986440bb2bf 100644 +GIT binary patch +delta 914 +zcmXZZYez#Xw95XO>CfElf;AGD9ND%qY6V4MPy#6nGy^jxvDKj^R<_$-hd +z3wYujE(6=^n95n}wXFhhhe#(1*8NQ;X2?1NSSQ8#&p>_+&~#qv6t~uDuL=~1{nNw1 +zkw)P9AL)Re8km8dAR9BUy;+tG3@nk0Sz9o= +zD@tCPa|LStPQXynPwLcN>|bfwagV&N4~AB$-Q1r&{U@O8qUK1#J^!j7q{R +zd|0iU@dAM$*}|->fM&yd{90)0zn5azdb0B>ULM+7CVq0XnpU`vy&{*+%=^P$dqptr +zOq$p2=F>dm_)VZ^l{SQ1Su<6JpNz5d$?1nY)g`^{lEjDZ$>&&Eu9EocZ^o`W_FBB5h-cUKk3Hq +zh`)5VO1&=W$Pej6vouge4H0Hur<=Y%C6Y2xTg27eEZwg>F2+xndPq8yA|2_Fj*d$G +zucU#E>$X!#q?I+&!$>oWBY$KS@75nJy(=P1qU5Md<0(<~0zS8NWV6(Nh#I0&l|9}ry(6*W`SZKf5S1dT|n;lTs31QmOzC2n*2^vk(7_ne#m312Y1ykI&q%>EWY +z0kFLnNO=e>ILo%!LlbTG1fcH%sviTXB|z;L_S%k+-)8>-j8zA#$Ff_Nun{8^w8?+K +zxS>E~PN>NyHinV~1HC4!0Gg+;U6pM27&3${PmT5T0MRU9?rNZ7E8C!64b;)8zARrw=oC$T=l!AYPM}X+xe7D9D}}lHqf|?UTH3Q2>Ll)O)I3~rUKau +zy}Mjh7s+p$WcNe=y&q^d*!V&=(MxqEmn??)wF)by(IZoX_(*}2vg|cjdaw@Id>_7^ +z`M@?k3tD(;E#NiSNDbRMSjRge +zkIWT9OeSxdOTN?B-Hrk`3<{)qL?tEDVzN1P{GXeu?`f)%WwJW;s84OQqlWrqO#Gxe +zi$lIlyAxHxG_Rt&mTB^rbgw)BTyj%})g!`GYF(S1kUh7asIW(~SF7l*)vYxc^w(;$ +zS6ZCk_5icqu*=V|oik`+da)LBQy|?py3}%F-WlL(KigizcFi2LkG`in#6cRKk&}Db +zYUwaPc58LWv+k4rL +z4{ZD=+wB?jHhD8WqMm9q9byi(WR}Ti>5G>hR*{vGku}MFN>x|Xc3-gVC2TxE + + +- +- ++ ++ + Artwork name + + +@@ -330,183 +330,183 @@ p, li { white-space: pre-wrap; } + + + +- +- ++ ++ + Select / deselect this artwork class for removal + + + +- +- ++ ++ + Enter a name for this artwork class (required) + + + +- +- ++ ++ + Choose... + + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + + + +- +- ++ ++ + System + + + +- +- ++ ++ + Software + + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + + + +- +- ++ ++ + On + Acceso + + +- +- ++ ++ + Off + Spento + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + + + +- +- ++ ++ + Folder + + + +- +- +- +- ++ ++ ++ ++ + Archive + + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + + + +- +- ++ ++ + ZIP + + + +- +- ++ ++ + 7z + + + +- +- ++ ++ + Select archive format + + + +- +- ++ ++ + Supported archives + + + +- +- ++ ++ + ZIP archives + + + +- +- ++ ++ + 7z archives + + + +- +- ++ ++ + Image archive + + + +- +- ++ ++ + Image archive for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + + + +- +- ++ ++ + Browse image archive + + + +- +- +- ++ ++ ++ + All files (*) + Tutti i file (*) + + +- +- ++ ++ + Image folder + + + +- +- ++ ++ + Image folder for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + + + +- +- ++ ++ + Browse image folder + + + +- ++ + Choose icon file + + + +- ++ + PNG files (*.png) + + +@@ -1238,7 +1238,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + + +@@ -1361,17 +1361,17 @@ p, li { white-space: pre-wrap; } + &Ok + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + All files (*) + Tutti i file (*) + +@@ -3464,42 +3464,42 @@ p, li { white-space: pre-wrap; } + Chiudi + + +- ++ + Name + Nome + + +- ++ + Domain + + + +- ++ + Path + + + +- ++ + Value + Valore + + +- ++ + Expiry date + + + +- ++ + Secure? + + + +- ++ + HTTP only? + + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + + +@@ -4473,7 +4473,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + + +@@ -4517,7 +4517,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + + +@@ -4570,7 +4570,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + + +@@ -4582,7 +4582,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + + +@@ -4592,27 +4592,27 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Close archive + + + +- ++ + Choose a unique configuration name + + + +- ++ + Unique configuration name: + + + +- ++ + Name conflict + + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5302,25 +5302,25 @@ Use local value for option '%1', overwrite with global value or don&ap + Data modifica + + +- +- ++ ++ + KB + KB + + +- +- ++ ++ + MB + MB + + +- +- ++ ++ + GB + GB + + +- ++ + TB + TB + +@@ -5461,42 +5461,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + FtpReply + +- ++ + FTP directory listing for %1 + + + +- ++ + Name + Nome + + +- ++ + Type + Tipo + + +- ++ + Size + Dimensione + + +- ++ + Parent directory + + + +- ++ + File + + + +- ++ + Folder + + + +- ++ + Unknown + Sconosciuto + +@@ -5993,212 +5993,212 @@ Use local value for option '%1', overwrite with global value or don&ap + + HtmlEditor + +- ++ + WYSIWYG + WYSIWYG + + +- +- ++ ++ + HTML + HTML + + +- ++ + &Load... + + + +- ++ + Load notes from file + + + ++ + +- + Load notes from an HTML file + + + ++ + + +- + Save current notes + + + ++ + +- + Page load progress + + + +- ++ + Hide menu + + + +- ++ + Read only + + + +- ++ + Show HTML + + + +- +- ++ ++ + HTML files (*.html *.htm) + + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Tutti i file (*) + + +- ++ + Select file to load + + + +- ++ + Select file to open + + + +- ++ + Save a copy + + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + + + +- ++ + Portable Network Graphics (PNG) (*.png);; + + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + + + +- ++ + Open image... + + + +- ++ + Insert image from URL + + + +- +- ++ ++ + Enter URL: + + + +- ++ + Create link + + + +- ++ + Font + + + +- ++ + Select font: + + + +- ++ + XS + + + +- ++ + S + + + +- +- ++ ++ + M + + + +- ++ + L + + + +- ++ + XL + + + +- ++ + XXL + + + +- ++ + Font size + + + +- ++ + Font size: + + + +- ++ + Zoom: %1% + + + +- ++ + Select color + + + +- ++ + Choose image file + + + +- +- +- ++ ++ ++ + No data available + + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7114,55 +7114,55 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Preview + + + +- ++ + Flyer + + + +- ++ + Cabinet + + + +- ++ + Controller + + + +- ++ + Marquee + + + +- ++ + Title + + + +- ++ + PCB + + + +- ++ + Software snap + + + +- +- ++ ++ + deactivated + + + +- ++ ++ + +- + activated + + +@@ -7590,42 +7590,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickCalibrationWidget + +- ++ + Enable/disable axis %1 + + + +- ++ + Axis %1: + + + +- ++ + Reset calibration of axis %1 + + + +- ++ + Current value of axis %1 + + + +- ++ + DZ: + + + +- ++ + Deadzone of axis %1 + + + +- ++ + S: + + + +- ++ + Sensitivity of axis %1 + + +@@ -7679,67 +7679,67 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickTestWidget + +- ++ + A%1: %v + + + +- ++ + Current value of axis %1 + + + +- ++ + B%1 + + + +- ++ + Current state of button %1 + + + +- ++ + H%1: 0 + + + +- ++ + Current value of hat %1 + + + +- ++ + T%1 DX: 0 + + + +- ++ + Current X-delta of trackball %1 + + + +- ++ + T%1 DY: 0 + + + +- ++ + Current Y-delta of trackball %1 + + + +- ++ + H%1: %2 + + + +- ++ + T%1 DX: %2 + + + +- ++ + T%1 DY: %2 + + +@@ -7799,438 +7799,438 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + sconosciuto + + +- +- +- ++ ++ ++ + good + buono + + +- +- ++ ++ + bad + cattivo + + +- +- +- ++ ++ ++ + preliminary + preliminare + + +- +- ++ ++ + supported + supportato + + +- +- ++ ++ + unsupported + non supportato + + +- +- +- ++ ++ ++ + imperfect + imperfetto + + +- ++ + yes + si + + +- ++ + no + no + + +- ++ + baddump + dump cattivo + + +- ++ + nodump + no dump + + +- ++ + vertical + verticale + + +- ++ + horizontal + orizzontale + + +- ++ + raster + raster + + +- ++ + Unknown + Sconosciuto + + +- ++ + On + Acceso + + +- ++ + Off + Spento + + +- ++ + audio + audio + + +- ++ + unused + non utilizzato + + +- ++ + Unused + Non utilizzato + + +- ++ + cpu + cpu + + +- ++ + vector + vettore + + +- ++ + lcd + lcd + + +- ++ + joy4way + joy4vie + + +- ++ + joy8way + joy8vie + + +- ++ + trackball + trackball + + +- ++ + joy2way + joy2vie + + +- ++ + doublejoy8way + doppiojoy8vie + + +- ++ + dial + chiama + + +- ++ + paddle + paddle + + +- ++ + pedal + pedale + + +- ++ + stick + stick + + +- ++ + vjoy2way + vjoy2vie + + +- ++ + lightgun + pistolaottica + + +- ++ + doublejoy4way + doppiojoy4vie + + +- ++ + vdoublejoy2way + vdoppiojoy2vie + + +- ++ + doublejoy2way + doppiojoy2vie + + +- ++ + printer + stampante + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + cartuccia + + +- ++ + cassette + cassetta + + +- ++ + quickload + caricamento veloce + + +- ++ + floppydisk + floppydisk + + +- ++ + serial + seriale + + +- ++ + snapshot + snapshot + + +- ++ + original + originale + + +- ++ + compatible + compatibile + + +- +- +- +- ++ ++ ++ ++ + N/A + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATALE: impossibile aprire file icona, per favore controlla permessi d'accesso per %1 + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + Aspettando i dati... + + +- ++ + determining emulator version and supported sets + determinando versione emulatore e set supportati + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATALE: impossibile avviare eseguibile MAME in un tempo ragionevole, mi arrendo + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + terminato (determinazione versione emulatore e set supportati, tempo impiegato = %1) + + +- +- ++ ++ + emulator info: type = %1, version = %2 + info emulatore: tipo = %1, versione = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATALE: impossibile determinare tipo e versione emulatore + + +- ++ + FATAL: couldn't determine the number of supported sets + FATALE: impossibile determinare il numero di set supportati + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + dati XML - %p% + + +- ++ + verifying ROM status for '%1' + verifica stato ROM per '%1' + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERRORE: impossibile aprire cache stato ROM in scrittura, percorso = %1 + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- +- +- ++ ++ ++ + ROM check - %p% + controllo ROM - %p% + + +- ++ + Name + Nome + + +- ++ + Source file + File origina + + +- ++ + Is BIOS? + È un BIOS? + + +- ++ + Is device? + È un device? + + +- ++ + Runnable + Eseguibile + + +- ++ + Clone of + Clone di + + +- ++ + ROM of + ROM di + + +- ++ + Sample of + Esempio di + + +- ++ + Year + Anno + + +- ++ + Manufacturer + Produttore + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8238,435 +8238,435 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Dimensione + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Merge + + +- +- ++ ++ + Region + Regione + + +- ++ + Offset + Offset + + +- +- +- +- ++ ++ ++ ++ + Status + Stato + + +- +- ++ ++ + Optional + Opzionale + + +- ++ + Device reference + + + +- ++ + Chip + Chip + + +- +- +- ++ ++ ++ + Tag + Tag + + +- +- ++ ++ + Type + Tipo + + +- ++ + Clock + Clock + + +- ++ + Display + DIsplay + + +- ++ + Rotate + + + +- ++ + Flip-X + Inverti-X + + +- ++ + Width + Larghezza + + +- ++ + Height + Altezza + + +- ++ + Refresh + Aggiornamento + + +- ++ + Pixel clock + Clock pixel + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- ++ ++ + Sound + Suono + + +- ++ + Channels + Canali + + +- ++ + Input + Input + + +- ++ + Service + Servizio + + +- ++ + Tilt + Tilt + + +- ++ + Players + Giocatori + + +- +- ++ ++ + Buttons + Tasti + + +- ++ + Coins + Coins + + +- ++ + Control + Controllo + + +- ++ + Minimum + Minimo + + +- ++ + Maximum + Massimo + + +- ++ + Sensitivity + Sensibilità + + +- ++ + Key Delta + + + +- ++ + Reverse + + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Predefinito + + +- ++ + loading XML data and recreating cache + + + +- ++ + Updating + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + Configurazione + + +- ++ + Mask + + + +- ++ + Setting + Impostazioni + + +- ++ + Value + Valore + + +- ++ + Driver + Driver + + +- ++ + Emulation + Emulazione + + +- ++ + Color + Colore + + +- ++ + Graphic + Grafica + + +- ++ + Cocktail + Cocktail + + +- ++ + Protection + Protezione + + +- ++ + Save state + Stato salvataggio + + +- ++ + Palette size + Dimensione paletta + + +- ++ + BIOS set + + + +- ++ + Description + Descrizione + + +- ++ + Sample + Esempio + + +- ++ + Disk + Disco + + +- ++ + MD5 + MD5 + + +- ++ + Index + Indice + + +- ++ + Adjuster + + + +- ++ + Software list + Lista software + + +- ++ + Category + Categoria + + +- ++ + Item + Oggetto + + +- ++ + Device + Device + + +- ++ + Mandatory + Obbligatorio + + +- ++ + Interface + Interfaccia + + +- ++ + Instance + + + +- ++ + Brief name + + + +- ++ + Extension + Estensione + + +- ++ + RAM options + Opzioni RAM + + +- ++ + Option + Opzione + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + ATTENZIONE: impossibile aprire cache stato ROM, per favore controlla la ROM + + +- ++ + loading ROM state from cache + caricamento stato ROM dalla cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + completato (caricamento stato ROM dalla cache, tempo impiegato = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n stato(i) ROM caricati +@@ -8674,81 +8674,81 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- +- ++ ++ + ascending + ascendente + + +- +- ++ ++ + descending + discendente + + +- ++ + , %n BIOS set(s) + + , %n set BIOS +@@ -8756,7 +8756,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + e %n periferiche caricate +@@ -8764,196 +8764,196 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + + + +- ++ + machine description + + + +- ++ + tag + + + +- ++ + year + + + +- ++ + manufacturer + + + +- ++ + machine name + + + +- ++ + ROM types + + + +- ++ + players + + + +- ++ + driver status + + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + + + +- ++ + version + + + +- ++ + ROM state filter already active + + + +- ++ + please wait for ROM verification to finish and try again + per favore aspetta la fine della validazione della ROM e riprova + + +- ++ + please wait for reload to finish and try again + per favore aspetta la fine del caricamento e riprova + + +- ++ + applying ROM state filter + + + +- ++ + State filter - %p% + + + +- ++ + done (applying ROM state filter, elapsed time = %1) + + + +- ++ + saving favorites + + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + + + +- ++ + saving play history + + + +- ++ + FATAL: can't open play history file for writing, path = %1 + + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + + + +- ++ + S: + + + +- ++ + T: + T: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + +@@ -8961,7 +8961,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + +@@ -8969,83 +8969,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + + + +- +- ++ ++ + ROM state + + + +- +- ++ ++ + ROM status for '%1' is '%2' + + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9053,47 +9053,47 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + Filtering, please wait... + + + +- ++ + pre-caching icons from ZIP archive + + + +- ++ + Icon cache - %p% + + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + +@@ -9101,124 +9101,124 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- ++ + pre-caching icons from directory + + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading catver.ini + + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + + + +- ++ + done (loading catver.ini, elapsed time = %1) + + + +- ++ + %1 category / %2 version records loaded + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + Category view - %p% + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + %n category record(s) loaded + + +@@ -9226,7 +9226,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + + +@@ -9395,18 +9395,18 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + true + + + +- +- +- +- ++ ++ ++ ++ + false + + +@@ -9549,8 +9549,8 @@ Use local value for option '%1', overwrite with global value or don&ap + MainWindow + + ++ + +- + M.A.M.E. Catalog / Launcher II + + +@@ -9565,16 +9565,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Tag + + + +- ++ + Icon / Value + + +@@ -9583,10 +9583,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + Anno + +@@ -9595,10 +9595,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Produttore + +@@ -9607,10 +9607,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + Nome + +@@ -9619,10 +9619,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + + +@@ -9631,10 +9631,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + Giocatori + +@@ -9643,10 +9643,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + + +@@ -9655,9 +9655,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + Categoria + +@@ -9666,9 +9666,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + + +@@ -9689,9 +9689,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + + +@@ -9718,7 +9718,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + + +@@ -9942,9 +9942,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -10074,7 +10074,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + + +@@ -10131,11 +10131,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + + +@@ -10167,7 +10167,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + + +@@ -10249,10 +10249,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + + +@@ -10305,13 +10305,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10322,7 +10322,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10333,19 +10333,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10416,9 +10416,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10437,10 +10437,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10611,10 +10611,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + File origina + +@@ -10624,10 +10624,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10963,11 +10963,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + + +@@ -11343,7 +11343,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -11548,12 +11548,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + + +@@ -11647,7 +11647,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11659,8 +11659,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + +@@ -11668,48 +11668,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Predefinito + + +- +- ++ ++ + Enter search string + + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + + + +- ++ + Scan the pause key used by the emulator + + + +- ++ + Scan pause key... + + + +- ++ + Toggle maximization of embedded emulator windows + + + +- ++ + Dock / undock this widget + + +@@ -11720,115 +11720,131 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embed emulator widget + + + +- ++ + &Embed + + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + + + +- ++ + &Kill + + + +- +- ++ ++ + Copy emulator command line to clipboard + + + +- +- ++ ++ + &Copy command + + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + + + +- ++ + Remove from favorites + + + +- +- ++ ++ + &Remove + + + +- ++ + Clear all favorites + + + +- +- ++ ++ + &Clear + + + +- ++ + Save favorites now + + + +- +- ++ ++ + &Save + &Salva + + +- ++ + Remove from played + + + +- ++ + Clear all played + + + +- ++ + Save play-history now + + + +- +- +- +- ++ ++ ++ ++ + Tab position + + ++ ++ ++ ++ ++ ++ Set tab position north ++ ++ ++ ++ ++ ++ ++ ++ &North ++ ++ + + + + + +- Set tab position north ++ Set tab position south + + + +@@ -11836,7 +11852,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &North ++ &South + + + +@@ -11844,7 +11860,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position south ++ Set tab position west + + + +@@ -11852,7 +11868,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &South ++ &West + + + +@@ -11860,7 +11876,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position west ++ Set tab position east + + + +@@ -11868,15 +11884,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &West +- +- +- +- +- +- +- +- Set tab position east ++ &East + + + +@@ -11884,101 +11892,93 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &East +- +- +- +- +- +- +- + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + sorry, devices cannot run standalone + + + +- ++ + No devices available + + + +- ++ + Default configuration + + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + + + +- +- ++ ++ + please wait for ROM verification to finish and try again + per favore aspetta la fine della validazione della ROM e riprova + + +- ++ ++ + +- + please wait for image check to finish and try again + + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + + + ++ + +- + ROM verification already active + + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + per favore aspetta la fine del caricamento e riprova + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11986,22 +11986,22 @@ Do you really want to check all ROM states now? + + + +- ++ + automatic ROM check triggered + + + +- ++ + image cache cleared + + + +- ++ + icon cache cleared + + + +- ++ + freed %n byte(s) in %1 + + +@@ -12009,7 +12009,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n entry(s) + + +@@ -12017,7 +12017,7 @@ Do you really want to check all ROM states now? + + + +- ++ + removed %n byte(s) in %1 + + +@@ -12025,7 +12025,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n file(s) + + +@@ -12033,363 +12033,363 @@ Do you really want to check all ROM states now? + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + YouTube on-disk cache cleared (%1) + + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + + + +- ++ + triggering an automatic ROM check on next reload + + + +- ++ + ERROR: no match found (?) + + + +- ++ + ProjectMESS page for '%1' / '%2' + + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + + + +- +- ++ ++ + Export to... + + + +- +- ++ ++ + <inipath>/%1.ini + + + +- +- +- +- ++ ++ ++ ++ + Select file... + + + +- +- ++ ++ + <p>No data available</p> + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + + + +- ++ + Negate search + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- ++ + emulator #%1 is already embedded + + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + + + +- +- +- ++ ++ ++ + paused + + + +- ++ + Release emulator + + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + + + +- ++ + To favorites + + + +- ++ + Kill emulator + + + +- ++ + &Kill emulator + + + +- ++ + WARNING: no matching window for emulator #%1 found + + + +- ++ + Embedding failed + + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12397,139 +12397,139 @@ Retry embedding? + + + +- ++ + Information + + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + + + +- +- ++ ++ + Scanning pause key + + + +- ++ + Are you sure you want to clear the favorites list? + + + +- ++ + Are you sure you want to clear the play history? + + + +- +- ++ ++ + Choose export file + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Tutti i file (*) + + +- +- ++ ++ + Choose import file + + + +- +- ++ ++ + WARNING: invalid inipath + + + +- +- ++ ++ + stopping current processing upon user request + + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + + + +- ++ + There are one or more running downloads. Quit anyway? + + + +- ++ + cleaning up + + + +- ++ + aborting running downloads + + + +- ++ + disconnecting audio source from audio sink + + + +- ++ + destroying audio effects dialog + + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + + + +- ++ + saving main widget layout + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + + + +- ++ + killing %n running emulator(s) on exit + + +@@ -12537,7 +12537,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + +@@ -12545,86 +12545,86 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + + + +- ++ + so long and thanks for all the fish + + + +- ++ + Welcome to QMC2 v%1! + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + loading style sheet '%1' + + + +- ++ + removing current style sheet + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + +@@ -12632,156 +12632,156 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + + + +- ++ + Add URL + + + +- ++ + Enter valid MP3 stream URL: + + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + + + +- ++ + Buffering %p% + + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + + + +- +- ++ ++ + Play tagged - %p% + + + +- ++ + Add favorites - %p% + + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + + + +- +- ++ ++ + Tag - %p% + + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12792,41 +12792,41 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + + + +- +- ++ ++ + Export global MAME configuration + + + +- ++ + Import from... + + + +- +- ++ ++ + Import global MAME configuration + + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + + +@@ -12983,14 +12983,12 @@ Please check the 'rompath' option in the global emulator configuration + + + +- + Go back + + + + + +- + Go forward + + +@@ -13043,8 +13041,8 @@ Please check the 'rompath' option in the global emulator configuration + + + +- +- ++ ++ + Enter search string + + +@@ -13069,88 +13067,28 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Enter URL + + + +- +- Open link +- +- +- +- +- Open link in new window +- +- +- +- +- Open image in new window +- +- +- +- +- Save link as... +- +- +- +- +- Copy link +- +- +- +- +- Save image as... +- +- +- +- +- Copy image +- +- +- +- +- Copy image address +- +- +- +- +- Reload +- +- +- +- +- Stop +- +- +- +- +- Copy +- Copia +- +- +- +- Inspect +- +- +- +- ++ + WARNING: invalid network reply and/or network error + + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + MiniWebBrowser + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + + +@@ -13299,3028 +13237,3003 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Language + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + + + +- ++ + Show machine's description at the bottom of any images + + + +- ++ + Show machine name + + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + + + +- ++ + Restore saved machine selection at start and after reloading the machine list + + + +- ++ + Restore machine selection + + + +- ++ + Scaled preview + + + +- ++ + Show vertical machine status indicator in machine details + + + +- ++ + Machine status indicator + + +- +- +- Application language +- +- +- +- +- DE (German) +- +- + + +- ES (Spanish) +- +- +- +- +- FR (French) +- +- +- +- +- IT (Italian) +- +- +- +- +- PL (Polish) +- +- +- +- +- PT (Portuguese) +- +- +- +- +- RO (Romanian) +- +- +- +- +- SV (Swedish) +- +- +- +- +- US (English) ++ Application language + + + +- ++ + Scaled cabinet + + + +- ++ + Scaled controller + + + +- ++ + Scaled marquee + + + +- +- ++ ++ + Show status bar + + + +- ++ + Show the menu bar + + + +- ++ + Show menu bar + + + +- ++ + Show short description of current processing in progress bar + + + +- ++ + Show progress texts + + + +- +- ++ ++ + Only when required + + + +- ++ + Retry loading images which weren't found before? + + + +- ++ + Retry loading images + + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + + + +- ++ + restart required + + + +- ++ + Scaled title + + + +- ++ + Scaled flyer + + + +- ++ + Application font (= system default if empty) + + + +- ++ + Browse application font + + + +- ++ + Scaled PCB + + + +- ++ + Emulator log size + + + +- ++ + Maximum number of lines to keep in emulator log browser + + + +- +- ++ ++ + unlimited + + + +- +- ++ ++ + lines + + + +- ++ + Front end log size + + + +- ++ + Maximum number of lines to keep in front end log browser + + + +- ++ + Application font + + + +- ++ + Style sheet + + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + + + +- ++ + Browse Qt style sheet file + + + +- ++ + GUI style + + + +- ++ + Application style (Default = use system's default style) + + + +- ++ + Smooth image scaling (nicer, but slower) + + + +- ++ + Smooth scaling + + + +- ++ + Image cache size + + + +- ++ + Image cache size in MB + + + +- ++ + MB + MB + + +- ++ + Use standard or custom color palette? + + + +- ++ + Log font + + + +- ++ + Font used in logs (= application font if empty) + + + +- ++ + Browse font used in logs + + + +- +- ++ ++ + Show tool bar + + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + + + +- ++ + Unify with title + + + +- ++ + Minimize when launching emulators? + + + +- ++ + Minimize on emulator launch + + + +- ++ + Check for other instances of this QMC2 variant on startup + + + +- ++ + Check single instance + + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + + + +- ++ + Suppress Qt messages + + + +- ++ + Show splash screen when starting up? + + + +- ++ + Show splash screen + + + +- ++ + Customize the tool-bar + + + +- ++ + Tool-bar... + + + +- +- ++ ++ + F&iles / Directories + + + +- ++ + Front end log file + + + +- ++ + Front end log file (write) + + + +- ++ + Browse front end log file + + + +- ++ + Favorites file + + + +- ++ + Use native file dialogs + + + +- ++ + Force QMC2's working directory to be the same as the executable's path + + + +- ++ + Set working directory from executable + + + +- ++ + Kill emulators when QMC2 exits? + + + +- ++ + Kill emulators on exit + + + +- ++ + Terminate all other emulator instances when launching a new one? + + + +- ++ + One emulator at a time + + + +- ++ + Play history file + + + +- ++ + Play history file (write) + + + +- ++ + Browse play history file + + + +- ++ + Data directory + + + +- ++ + Frontend data directory (read) + + + +- ++ + Browse frontend data directory + + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + + + +- ++ + Use catver.ini + + + +- ++ + Path to catver.ini (read) + + + +- ++ + Browse path to catver.ini + + + +- +- +- ++ ++ ++ + Preview directory + + + +- ++ + Preview directory (read) + + + +- ++ + Browse preview directory + + + +- +- +- ++ ++ ++ + Flyer directory + + + +- ++ + Flyer directory (read) + + + +- ++ + Browse flyer directory + + + +- +- +- ++ ++ ++ + Icon directory + + + +- ++ + Icon directory (read) + + + +- ++ + Browse icon directory + + + +- +- +- ++ ++ ++ + Cabinet directory + + + +- ++ + Cabinet directory (read) + + + +- ++ + Browse cabinet directory + + + +- +- +- ++ ++ ++ + Controller directory + + + +- ++ + Controller directory (read) + + + +- ++ + Browse controller directory + + + +- +- +- ++ ++ ++ + Marquee directory + + + +- ++ + Marquee directory (read) + + + +- ++ + Default palette + + + +- ++ + Edit the color palette + + + +- ++ + Edit color palette... + + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + + + +- ++ + Browse marquee directory + + + +- +- +- ++ ++ ++ + Title directory + + + +- ++ + Title directory (read) + + + +- ++ + Browse title directory + + + +- +- +- ++ ++ ++ + PCB directory + + + +- ++ + PCB directory (read) + + + +- ++ + Browse PCB directory + + + +- ++ + Software snap-shot directory (read) + + + +- ++ + Browse software snap-shot directory + + + +- +- +- ++ ++ ++ + reload required + + + +- +- +- ++ ++ ++ + SW snap folder + + + +- ++ + Software notes folder + + + +- ++ + Folder used to store personal notes about any software titles (write) + + + +- ++ + Browse software notes folder + + + +- ++ + Enable the use of a template for (empty) software notes + + + +- ++ + Software notes template + + + +- ++ + HTML file used as a template for software-notes (read) + + + +- ++ + Browse software notes template + + + +- ++ + Enable the use of category.ini + + + +- ++ + Use category.ini + + + +- ++ + Path to category.ini (read) + + + +- ++ + Browse path to category.ini + + + +- ++ + System notes folder + + + +- ++ + Enable the use of a template for (empty) system notes + + + +- ++ + System notes template + + + +- ++ + HTML file used as a template for system-notes (read) + + + +- ++ + Folder used to store personal notes about any systems (write) + + + +- ++ + Browse system notes folder + + + +- ++ + Browse system notes template + + + +- ++ + Load software information database (from history.dat) + + + +- ++ + Software information database - history.dat (read) + + + +- ++ + Browse software information database (history.dat) + + + +- ++ + Define additional artwork classes for systems and software-list entries + + + +- ++ + Set up additional artwork classes... + + + +- ++ + Choose active image formats and their priorities (per artwork class) + + + +- ++ + Select image formats... + + + +- ++ + Load MESS emulator information database (messinfo.dat) + + + +- ++ + MESS emulator information database - messinfo.dat (read) + + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + + + +- ++ + Parent image / video fallback + + + +- ++ + Open the component setup dialog + + + +- ++ + Component setup... + + + +- ++ + Show animation when loading, filtering or tagging the machine list? + + + +- ++ + Show loading animation + + + +- ++ + Scaled software snapshot + + + +- ++ + Select individual fallback settings per artwork class + + + +- ++ + Individual fallback settings... + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + + + +- ++ + Browse MESS emulator information database (messinfo.dat) + + + +- ++ + Video snap folder + + + +- ++ + Video snap folder (read) + + + +- ++ + Browse video snap folder + + + +- ++ + Optimize catver.ini for faster loading + + + +- ++ + Setup the icon cache database + + + +- ++ + Enable ROM state filtering? + + + +- ++ + ROM state filter + Filtro stato ROM + + +- ++ + Update delay + + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + + + +- ++ + No SW snaps for visible details + + + +- ++ + Select sort criteria + + + +- ++ + ROM state + + + +- ++ + Tag + Tag + + +- ++ + Year + Anno + + +- ++ + Manufacturer + Produttore + + +- ++ + ROM types + + + +- ++ + Players + Giocatori + + +- ++ + Driver status + + + +- ++ + Source file + File origina + + +- ++ + Rank + + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + + + +- ++ + Sort order + + + +- ++ + Select sort order + + + +- ++ + Ascending + + + +- ++ + Descending + + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + + + +- ++ + Play on sub-list activation + + + +- ++ + Display ROM status icons in master lists? + + + +- ++ + Show ROM status icons + + + +- ++ + Cursor position + + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + + + +- ++ + Visible + + + +- ++ + Top + + + +- ++ + Bottom + + + +- ++ + Center + + + +- ++ + Responsiveness + + + +- ++ + immediate + + + +- ++ + Show ROM state C (correct)? + + + +- ++ + Show ROM state M (mostly correct)? + + + +- ++ + Show ROM state I (incorrect)? + + + +- ++ + Show ROM state N (not found)? + + + +- ++ + Show ROM state U (unknown)? + + + +- ++ + Sort criteria + + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + + + +- ++ + independent + + + +- ++ + embedded + + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + + + +- ++ + Above / Left + + + +- ++ + Above / Center + + + +- ++ + Above / Right + + + +- ++ + Below / Left + + + +- ++ + Below / Center + + + +- ++ + Below / Right + + + +- ++ + Disable snaps + + + +- ++ + none + + + +- ++ + ms + + + +- ++ + Launch emulation on double-click events (may be annoying) + + + +- ++ + Double-click activation + + + +- ++ + SW snap position + + + +- ++ + Default launch-mode + + + +- ++ + Automatically trigger a ROM check if necessary + + + +- ++ + Auto-trigger ROM check + + + +- ++ + Display (or hide) device sets in master lists? + + + +- ++ + Show device sets + + + +- ++ + Display (or hide) BIOS sets in master lists? + + + +- ++ + Browse system manual folder + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + Show BIOS sets + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + &Shortcuts / Keys + + + +- +- ++ ++ + Redefine key sequence + + + +- ++ + Reset key sequence to default + + + +- ++ + Reset + + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + + + +- +- ++ ++ + Function / Key + + + +- ++ ++ + +- +- +- ++ ++ + Default + Predefinito + + +- ++ + Custom + + + +- ++ + &Joystick + + + +- ++ + Enable GUI control via joystick + + + +- ++ + Enable joystick control + + + +- ++ + Rescan available joysticks + + + +- ++ + Rescan joysticks + + + +- ++ + Select joystick + + + +- ++ + List of available joysticks - select the one you want to use for GUI control + + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + + + +- ++ + Joystick information and settings + + + +- ++ + Axes: + + + +- ++ + Number of joystick axes + + + +- +- +- +- ++ ++ ++ ++ + 0 + + + +- ++ + Buttons: + + + +- ++ + Number of joystick buttons + + + +- ++ + Hats: + + + +- ++ + Number of coolie hats + + + +- ++ + Trackballs: + + + +- ++ + Number of trackballs + + + +- ++ + Automatically repeat joystick functions after specified delay + + + +- ++ + Auto repeat after + + + +- ++ + Repeat all joystick functions after how many milliseconds? + + + +- +- ++ ++ + ms + + + +- ++ + Event timeout + + + +- ++ + Process joystick events after how many milliseconds? + + + +- ++ + Calibrate joystick axes + + + +- ++ + Calibrate + + + +- ++ + Test all joystick functions + + + +- ++ + Test + + + +- ++ + Map joystick functions to GUI functions + + + +- ++ + Map + + + +- ++ + Remap a joystick function to the selected GUI function + + + +- ++ + Remap + + + +- ++ + Remove joystick mapping from selected GUI function + + + +- ++ + Remove + + + +- ++ + Active joystick mappings; double-click to remap joystick function + + + +- ++ + Joystick function + + + +- ++ + Zip tool + + + +- +- +- ++ ++ ++ + Command + + + +- ++ + External zip tool, i.e. "zip" (read and execute) + + + +- ++ + Browse for zip tool + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + + + +- ++ + ROM tool + + + +- ++ + External ROM tool (it's completely up to you...) + + + +- ++ + Browse ROM tool + + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + + + +- +- +- +- ++ ++ ++ ++ + Working directory + + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + + + +- ++ + Browse working directory of the ROM tool + + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + + + +- ++ + Copy tool output to front end log + + + +- ++ + Automatically close the tool-executor dialog when the external process finished + + + +- ++ + Close dialog automatically + + + +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + + + +- ++ + Use HTTP proxy + + + +- ++ + Host / IP + + + +- ++ + Hostname or IP address of the HTTP proxy server + + + +- ++ + Port + + + +- ++ + Port to access the HTTP proxy service + + + +- ++ + User ID + + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + + + +- +- Password +- +- +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- +- +- +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- +- +- +- ++ + Browser settings + + + +- ++ + Browse cookie database + + + +- ++ + Cookie database file (write) + + + +- ++ + Cookie database + + + +- ++ + Save and restore cookies used on web pages? + + + +- ++ + Remove all cookies by recreating the database + + + +- ++ + 7-zip tool + + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + + + +- ++ + Browse for 7-zip tool + + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + + + +- ++ + E&mulator + + + +- ++ + &Global configuration + + + +- +- ++ ++ + Executable file + + + +- ++ + Machine list cache + + + +- ++ + Browse machine list cache file + + + +- ++ + Software list cache DB + + + +- ++ + Browse software list cache database file + + + +- ++ + Clean up user data database (removes obsolete entries) + + + +- ++ + Machine list cache file (write) + + + +- ++ + Emulator executable file (read and execute) + + + +- +- ++ ++ + Browse emulator executable file + + + +- ++ + Emulator log file + + + +- ++ + Emulator log file (write) + + + +- ++ + Browse emulator log file + + + +- ++ + Options template file + + + +- ++ + Options template file (read) + + + +- ++ + Browse options template file + + + +- ++ + ROM state cache + + + +- ++ + ROM state cache file (write) + + + +- ++ + Browse ROM state cache file + + + +- ++ + General software folder + + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + + + +- ++ + Browse general software folder + + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + + + +- +- ++ ++ + Browse working directory + + + +- ++ + Software state cache + + + +- ++ + Directory used to store individual state cache files for each software-list (write) + + + +- ++ + Browse software state cache directory + + + +- ++ + XML cache database + + + +- ++ + Database file for caching the output from -listxml (write) + + + +- ++ + Browse XML cache database file + + + +- ++ + User data database + + + +- ++ + Database file for storing/retrieving user data (write) + + + +- ++ + Browse user data database file + + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + + + +- ++ + Replace + + + +- ++ + Icon + + + +- ++ + Name + Nome + + +- ++ + Executable + + + +- ++ + Custom IDs + + + +- ++ + Register emulator + + + +- ++ + Emulator name + + + +- ++ + Deregister emulator + + + +- ++ + Registered emulator's name + + + +- ++ + Command to execute the emulator (path to the executable file) + + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + + + +- +- EL (Greek) +- +- +- +- ++ + Compressed cabinet file (read) + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + + + +- ++ + Browse compressed cabinet file + + + +- ++ + Compressed controller file (read) + + + +- ++ + Browse compressed controller file + + + +- ++ + Compressed marquee file (read) + + + +- ++ + Browse compressed marquee file + + + +- ++ + Switch between specifying a title directory or a compressed title file + + + +- ++ + MAME emulator information database - mameinfo.dat (read) + + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a preview directory or a compressed preview file + + + +- ++ + Compressed preview file (read) + + + +- ++ + Browse compressed preview file + + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + + + +- ++ + Compressed flyer file (read) + + + +- ++ + Browse compressed flyer file + + + +- ++ + Switch between specifying an icon directory or a compressed icon file + + + +- ++ + Compressed icon file (read) + + + +- ++ + Browse compressed icon file + + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + + + +- ++ + Switch between specifying a controller directory or a compressed controller file + + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + + + +- ++ + Compressed title file (read) + + + +- ++ + Browse compressed title file + + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + + + +- ++ + Compressed PCB file (read) + + + +- ++ + Browse compressed PCB file + + + +- ++ + Compressed software snap-shot file (read) + + + +- ++ + Browse compressed software snap-shot file + + + +- ++ + Load MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + + + +- ++ + Load MESS machine information database (sysinfo.dat) + + + +- ++ + MESS machine information database - sysinfo.dat (read) + + + +- ++ + Save machine selection on exit and before reloading the machine list + + + +- ++ + Save machine selection + + + +- ++ + Import MAME machine information to DAT-info database + + + +- ++ + Browse MESS machine information database (sysinfo.dat) + + + +- ++ + Browse machine favorites file + + + +- ++ + MAME machine information database - history.dat (read) + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + + + +- ++ + Machine favorites file (write) + + + +- ++ + Load MAME machine information database (history.dat) + + + +- ++ + Machine info (MAME) + + + +- ++ + Browse MAME machine information database (history.dat) + + + +- ++ + Machine description + + + +- ++ + Machine name + + + +- ++ + Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) + + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + + + +- ++ + Network / &Tools + + + +- ++ + Restore cookies + + + +- ++ + Manage cookies stored in database + + + +- ++ + Manage stored cookies + + + +- ++ + Clear database + + + +- ++ + Recreate user data database (removes <b>all</b> entries) + + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + + + +- ++ + Machine list database + + + +- ++ + Machine list database file (write) + + + +- ++ + Browse machine list database file + + + +- ++ + Foreign &emulators + + + +- ++ + Replace emulator registration + + + +- ++ + Remove + + + +- ++ + Import MESS emulator information to DAT-info database + + + +- +- Import MAME emulator information to DAT-info database ++ ++ Import MAME emulator information to DAT-info database ++ ++ ++ ++ ++ Import MESS machine information to DAT-info database ++ ++ ++ ++ ++ DAT-info database file ++ ++ ++ ++ ++ Browse DAT-info database file ++ ++ ++ ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) ++ ++ ++ ++ ++ pt_BR (Brazilian Portuguese) + + + +- +- Import MESS machine information to DAT-info database ++ ++ ro (Romanian) + + + +- +- DAT-info database file ++ ++ sv (Swedish) + + + +- +- Browse DAT-info database file ++ ++ us (American English) + + + +- ++ + DAT-info database file (write) + + + +- ++ + Machine info (MESS) + + + +- ++ + Emu info (MAME) + + + +- ++ + Emu info (MESS) + + + +- ++ + Software info + + + +- ++ + Import software information to DAT-info database + + + +- ++ + Database file for caching the ouput from -listsoftware (write) + + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + + + +- ++ + Add + + + +- ++ + Apply settings + Applica impostazioni + + +- ++ + &Apply + &Applica + + +- ++ + Restore currently applied settings + Ripristina impostazioni correnti + + +- ++ + &Restore + &Ripristina + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + Ripristina le impostazioni di default (clicca <i>Ripristina</i> per ripristinare le impostazioni correnti!) + + +- ++ + &Default + &Default + + +- ++ + Close and apply settings + Chiudi e applica le impostazioni + + +- ++ + &Ok + &Ok + + +- ++ + Close and discard changes + Chiudi e annulla modifiche + + +- ++ + &Cancel + &Cancella + + +- ++ + Minimize when launching (non-embedded) emulators? + + + +- +- +- +- ++ ++ ++ ++ + Category + Categoria + + +- +- +- +- ++ ++ ++ ++ + Version + + + +- ++ + Check all ROM states + + + +- ++ + About QMC2 + Riguardo QMC2 + + +- ++ + Analyze tagged sets + + + +- ++ + Export ROM Status + + + +- ++ + Copy tagged sets to favorites + + + +- ++ + Online documentation + + + +- ++ + Clear image cache + + + +- ++ + Setup arcade mode + + + +- ++ + Clear icon cache + + + +- +- ++ ++ + Open options dialog + + + +- ++ + Play (independent) + + + +- ++ + Play (embedded) + + + +- ++ + About Qt + + + +- ++ + Check states of tagged ROMs + + + +- ++ + Recreate template map + + + +- ++ + Check template map + + + +- +- ++ ++ + Stop processing / exit QMC2 + + + +- ++ + Clear YouTube cache + + + +- ++ + Toggle ROM state C + + + +- ++ + Toggle ROM state M + + + +- ++ + Toggle ROM state I + + + +- ++ + Toggle ROM state N + + + +- ++ + Toggle ROM state U + + + +- ++ + Tag current set + + + +- ++ + Untag current set + + + +- ++ + Toggle tag mark + + + +- ++ + Tag all sets + + + +- ++ + Untag all sets + + + +- ++ + Invert all tags + + + +- ++ + Check images and icons + + + +- ++ + Analyze current machine + + + +- ++ + Copy machine to favorites + + + +- ++ + Clear ProjectMESS cache + + + +- ++ + Reload machine list + + + +- ++ + Check machine's ROM state + + + +- ++ + Toggle tag / cursor down + + + +- ++ + Toggle tag / cursor up + + + +- ++ + Tag visible sets + + + +- ++ + Untag visible sets + + + +- ++ + Invert visible tags + + + +- ++ + Run external ROM tool + + + +- ++ + Run ROM tool for tagged sets + + + +- ++ + Toggle full screen + + + +- ++ + Previous track (audio player) + + + +- ++ + Next track (audio player) + + + +- ++ + Fast backward (audio player) + + + +- ++ + Fast forward (audio player) + + + +- ++ + Stop track (audio player) + + + +- ++ + Pause track (audio player) + + + +- ++ + Play track (audio player) + + + +- ++ + Raise volume (audio player) + + + +- ++ + Lower volume (audio player) + + + +- ++ + Plus (+) + + + +- ++ + Minus (-) + + + +- ++ + Cursor down + + + +- ++ + End + + + +- ++ + Escape + + + +- ++ + Cursor left + + + +- ++ + Home + + + +- ++ + Page down + + + +- ++ + Page up + + + +- ++ + Enter key + + + +- ++ + Open ROMAlyzer (system mode) + + + +- ++ + Open ROMAlyzer (software mode) + + + +- ++ + Full detail view + + + +- +- +- +- ++ ++ ++ ++ + Category view + + + +- +- +- +- ++ ++ ++ ++ + Version view + + + +- ++ + Check software-states + + + +- ++ + Launch arcade mode + + + +- ++ + Software-list view-mode flat + + + +- ++ + Software-list view-mode tree + + + +- ++ + Increase rank + + + +- ++ + Decrease rank + + + +- ++ + Return key + + + +- ++ + Cursor right + + + +- ++ + Tabulator + + + +- ++ + Cursor up + + + +- ++ + Activate item + + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + + + +- +- ++ ++ + Reset to default font + + + +- +- ++ ++ + No style sheet + + + +- ++ + image cache size set to %1 MB + + + +- +- ++ ++ + Confirm + + + +- ++ + &Local + + + +- ++ + &Overwrite + + + +- ++ + Do&n't apply + + + +- ++ + please restart QMC2 for some changes to take effect + + + +- ++ + ascending + ascendente + + +- ++ + descending + discendente + + +- ++ + 7z error + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATALE: impossibile aprire file icona, per favore controlla permessi d'accesso per %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- +- ++ ++ + Preview file + + + +- +- ++ ++ + Flyer file + + + +- +- ++ ++ + Icon file + + + +- +- ++ ++ + Cabinet file + + + +- +- ++ ++ + Controller file + + + +- +- ++ ++ + Marquee file + + + +- +- ++ ++ + Title file + + + +- +- ++ ++ + PCB file + + + +- +- ++ ++ + SW snap file + + + +- +- +- ++ ++ ++ + Custom IDs... + + + +- ++ + Rebuild current machine + + + +- ++ + Rebuild tagged machines + + + +- ++ + Hierarchical view + + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- +- +- ++ + + + +@@ -16330,491 +16243,506 @@ Please check the 'rompath' option in the global emulator configuration + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + + + +- ++ + please reload machine list for some changes to take effect + + + +- ++ + sorting machine list by %1 in %2 order + + + +- ++ + libarchive error + + + +- ++ + triggering automatic reload of machine list + + + +- ++ + Choose Qt style sheet file + + + +- ++ + Qt Style Sheets (*.qss) + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + Tutti i file (*) + + +- ++ + Choose preview directory + + + +- ++ + Custom view + + + +- ++ + N/A + + + +- ++ + Choose flyer directory + + + +- ++ + Choose icon directory + + + +- ++ + Choose cabinet directory + + + +- ++ + Choose controller directory + + + +- ++ + Choose marquee directory + + + +- ++ + Choose title directory + + + +- ++ + Choose PCB directory + + + +- ++ + Choose options template file + + + +- +- ++ ++ + Choose emulator executable file + + + +- ++ + Choose emulator log file + + + +- ++ + Choose XML cache database file + + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + + + +- ++ + &Yes + + + +- ++ + &No + + + +- ++ + Choose user data database file + + + +- ++ + Choose cookie database file + + + +- ++ + Choose zip tool + + + +- ++ + Choose 7-zip tool + + + +- ++ + Choose ROM tool + + + +- +- +- ++ ++ ++ + Choose working directory + + + +- ++ + Choose play history file + + + +- ++ + Choose machine list database file + + + +- ++ + Choose ROM state cache file + + + +- ++ + Choose software state cache directory + + + +- ++ + Choose general software folder + + + +- ++ + Choose front end log file + + + +- ++ + Choose data directory + + + +- ++ + Choose dat-info database file + + + +- ++ + Choose MAME machine info DB + + + +- ++ + Choose software info DB + + + +- ++ + Choose catver.ini file + + + +- ++ + Choose category.ini file + + + +- ++ + Choose compressed preview file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + + + +- ++ + Choose compressed flyer file + + + +- ++ + Choose compressed icon file + + + +- ++ + Choose compressed cabinet file + + + +- ++ + Choose compressed controller file + + + +- ++ + Choose compressed marquee file + + + +- ++ + Choose compressed title file + + + +- ++ + Choose compressed PCB file + + + +- ++ + Choose compressed software snap file + + + +- ++ + Choose software snap directory + + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + + + +- +- ++ ++ + Default icon + + + +- +- ++ ++ + No icon + + + +- ++ + &Foreign emulators + + + +- ++ + Choose machine favorites file + + + +- ++ + Choose machine list cache file + + + +- ++ + Choose software list cache database file + + + +- ++ + Choose MESS machine info DB + + + +- ++ + Choose MAME emulator info DB + + + +- ++ + Choose MESS emulator info DB + + + +- ++ + Choose software notes folder + + + +- ++ + Choose software notes template + + + +- +- ++ ++ + HTML files (*.html *.htm) + + + +- ++ + Choose system notes folder + + + +- ++ + Choose system notes template + + + +- ++ + Choose video snap folder + + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + shortcut map is clean + + + +- ++ + WARNING: shortcut map contains duplicates + + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + ERROR: couldn't initialize SDL joystick support + + + +- ++ + joystick map is clean + + + +- ++ + WARNING: joystick map contains duplicates + + +@@ -17296,28 +17224,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + + + +- ++ + incorrect + + + +- ++ + mostly correct + + + +- ++ + not found + + + +- ++ + + + +@@ -17326,54 +17254,54 @@ Are you sure you want to do this? + sconosciuto + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + Predefinito + + +- ++ + Import from... + + + +- +- ++ ++ + Export machine-specific MAME configuration + + + +- +- ++ ++ + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + + +@@ -17481,19 +17409,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + si + + +- ++ + + no + no + + +- ++ + + partially + +@@ -17541,7 +17469,7 @@ Are you sure you want to do this? + + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + + +@@ -21018,7 +20946,7 @@ Are you sure you want to do this? + + + +- ++ + Choose mame.ini + + +@@ -21032,7 +20960,7 @@ Are you sure you want to do this? + + + +- ++ + Choose ui.ini + + +@@ -21141,178 +21069,179 @@ Are you sure you want to do this? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + &Cancella + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + Sconosciuto + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21320,74 +21249,73 @@ Are you sure you want to do this? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + Predefinito + + +- +- ++ ++ + Choose emulator executable file + + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Tutti i file (*) + + +- ++ + Choose working directory + + + +- ++ + Choose ROM path + + + +- ++ + Choose sample path + + + +- ++ + Choose hash path + + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23647,59 +23575,59 @@ Are you sure you want to do this? + &Cancella + + +- ++ + Default + Predefinito + + +- ++ + Error + + + +- ++ + The specified file isn't executable! + + + +- +- ++ ++ + Choose emulator executable file + + + +- +- ++ ++ + All files (*) + Tutti i file (*) + + +- ++ + Choose working directory + + + +- ++ + Choose ROM path + + + +- ++ + Choose sample path + + + +- ++ + Choose hash path + + + +- ++ + Single-instance check + + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23707,17 +23635,17 @@ Exit now, accept once or ignore completely? + + + +- ++ + &Exit + + + +- ++ + &Once + + + +- ++ + &Ignore + + +@@ -23860,49 +23788,49 @@ Exit now, accept once or ignore completely? + + + +- ++ + FLV 240P + + + + +- ++ + FLV 360P + + + + +- ++ + MP4 360P + + + + +- ++ + FLV 480P + + + + +- ++ + MP4 720P + + + + +- ++ + MP4 1080P + + + + +- ++ + MP4 3072P + + + + +- ++ + Start / pause / resume video playback + + +@@ -23913,20 +23841,16 @@ Exit now, accept once or ignore completely? + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + + + + +- ++ + Volume + + +@@ -23971,286 +23895,261 @@ Exit now, accept once or ignore completely? + + + +- ++ + Mute / unmute audio output + + + +- ++ + Volume level + + + +- ++ + Video progress + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + + + +- +- ++ ++ + Play this video + + + +- +- +- ++ ++ ++ + Copy video URL + + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + + + +- +- +- ++ ++ ++ + Copy author URL + + + +- +- ++ ++ + Paste video URL + + + +- +- ++ ++ + Local movie file... + + + +- ++ + Remove selected videos + + + +- +- +- ++ ++ + Full screen (return with toggle-key) + + + +- +- ++ ++ + Attach this video + + + +- ++ + Auto-suggest a search pattern? + + + +- ++ + Auto-suggest + + + +- ++ + Enter string to be appended + + + +- ++ + Append... + + + +- ++ + Enter search string + + + +- ++ + Appended string + + + +- ++ + Enter the string to be appended when suggesting a pattern: + + + +- ++ + Valid placeholder macros: + + + +- +- ++ ++ + All files (*) + Tutti i file (*) + + +- +- ++ ++ + Choose movie file + + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + + + +- ++ + video player: the local movie file '%1' is already attached, ignored + + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + + + +- ++ + Buffering: %1% + + + +- +- Loading +- +- +- +- +- ++ + Playing + + + +- +- ++ + Paused + In Pausa + + +- +- video player: playback error: %1 +- +- +- +- +- Video playback error: %1 +- +- +- +- ++ + Fetching info for video ID '%1' + + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + + + +- +- +- ++ ++ ++ + Video info error: %1 + + + +- ++ + video player: video info error: timeout occurred + + + +- ++ + video info error: timeout occurred + + + +- ++ + video info error: unknown reason + + + +- ++ + video player: video info error: %1 + + + +- +- ++ + Return to windowed mode + + + +- +- ++ + Full screen (press %1 to return) + + + +- ++ + video player: video image info error: %1 + + + +- ++ + video player: search request error: %1 + + + +- ++ + video player: search error: can't parse XML data + + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + + +diff --git a/data/lng/qmc2_pl.qm b/data/lng/qmc2_pl.qm +index 8c64b0e6b0225736b09d990e72423e95010f2a45..fc214084d26b998dc478d183f729e602dfea0eee 100644 +GIT binary patch +delta 15353 +zcmXAwcR)@58^@o|ICq@8Xh=qA+*HbFDTIiILR5&Xva_;BS1Nm-LcZCBY?17dLN@U; +zvno3)d;T7$zh3v$?cQ@fpXYf$>(j4C=Ghm_16m)7t$pELX8Pqu^-d1hc)ZjfpnD(y +z*aF*bCX?5Hj8%e%=bW&H3d4oy@ww1>hrqL|l@|-Y;0bwoM58 +zZHt#T0fvOjWKngHKY$FoE0g_x2q1`f{Z}T3smMA&Mr6w5unE}*__R-w197wMCE#T= +z@V*oogSVrSNk+!WWc^*FiNt8q|H4bWk-P+0F)hoS>T^5y8>BtOeSkS9>6{q +z;KFp7#BqsC*0K-sBmR7wOyYP#CTp1l;9!P7za^76;zQ##4Vx>IwZ!*3%!ayf5$_LQ +zkjD7MNY)b9%&`N|u7c!A{hYg10=Ps2t94r@57AV!Zvj9P2VB}#GP#Ypw3gbma5@Um +zxe!?UaR7mXfkf7oNkgqER)-Ikt(Utc^$54_lZD;JIZ9y#Q;5`fapvz +zS#&q#ETBieNNt!+pIW$vJ;wuk?uWbyJNoMjK=c4$tPr3dZqAnu0K+B#NeYn363e9D%uV#z +z19WEwF4bSjliSuBjqfs1;7HQ*1MoQ`fH^&uCUOUJ)}tZtt!P}g4*}nn4J>z_l*j$V +zBOQT%@dUcNwe*{N(LH{Wr{HJSdp+=?Dq-~tdPr2)P4 +z5`-D;frh@4;uOXfVf8`SC;%JY7=+ES0BH<_9RmRT@nd#o0sYewguNa>Cfr4O0z2D5 +zDpGifVUZx5iUSruKoXR0b!zkj;U`+xg~c+tmA;yulci9lpKY_lpm^33*j#&1x_t+x +z_yEet0Q3UKYA$*t?NZv9auPsQYbwwSO+h`ODbSB=poZgXplf`g#&TZ(=PIbRC?A-g +z7t~sUOl%KU@7#f>WQ1Y`Z}s4Vt5U>sWy_|!?@xVQ(<|MI}`Ko?*&lA-Z}6kv@S +zO7SYAZ{Gpne9Zyi$^~$K(+tS2_TbX63342`#HOPrJO`KY^8uzekx6!+l*uZ`NtabN +zw3U@qsWO@pE<;nBp}>|Ogl0D^0B&9fFU2MR*CyaS96dC17PMSe0_<>i@Ok78;64+4 +ze(3=gRe|r7Sm4(0s~PwX{QqtA^^M>^A`sw37<4Gv2rOhZ1kB3=_%;JNO}-0kM-7?W +z<`ZO_M)MkrTU`LIW!5nWDEj6@GXS4 +zEdbIyrj^Er88? +z0g-6mtjRryT!3C#?uR@AJlY76i_!st@qI}0<+V&U@JKZuOoFJwU|?>Cpw}4`id$cx +zS8*Xw!LOS4%4KrJQRqE-1hnEoC!qJmQviNjp-+tkz?x=3pHUrwB+P@v$ +zrCXXXI;XkhpmnQrWf+Ve!+{NL4r7a31MO@M6C(wnZ<A#`2(xVEPxio!*H|S?Vunp4IpT~Om^ZW6y&Gj +zcgMduP4CL# +z^|)ccb}fdFoos<9%iz;8)Xt1z_#99Iy!#gT_A3>r$7l5Q;Q+BW;YXAQ-o_mGF$UlF +z`8@n7Is@!ifB2h^`#X3cfn-#_MdmWeHzt#l0z#VL((el(%nKi5Xfq=CYh2!(+7##(i+J4a3YQ?!ax{B#HkyB1kEA3e+>LZbhnCu*U%Hg +z%5?zymXexHF!Z=LmdReXlF9uzvDog9>eB;$)sL6 +zCI>Fhh|M(&3j^~=Bfn%Iij~AR;Vsa1D~O}o3fMChY1|1z?^!pQbap%9apg}p( +zaf6Z0+$U8SjKM<}k>0f}0k*y)y=UP<{=7>1ZCeE_t%M9b;}75&Qq9pE0YNnY`XklHB7l@bU2^IsPB< +z+VqdFNlGa0-dlH)G8Dttpi5Hynl`23#5j|?(-Ofp%0 +z7*m;{)5yB3=|CsWA{z%TMNdIz2oIrdZ|(pe;z*kZ;VQqbOFi;1i1%tjTRpPFhqYfWWt;n% +zc5R}azPbVJv4I8_= +z-sH>V{*3kw#B77BXpB4l0V$+05x;;rXlVb)^+4b0q_q}a{$aOi0!Phi`K6loifFqP$fRAJW%A$^H0SkyKyoh8?JihSZ1AuI4!H&3`rnwerz;3Rh`+Ls-$S#*jyB($bFMmY!ZX!*r#P>^PSyc{yvOwJ*1KSWtxoa_nl_f+ +zyE`1{o?*1~?{Ezpw=%qrOd +zb*6w>7Y6|EHjCAbybEM;3ajsj>MfmOHZ_ooOIf35c3ASfXSN4)_{1@KX1@)W^t89+ +zS=-oR>1pQH3@=wZv8LzHf@U0J9y#RzH_k9GsVy+&Qs(s$uLn3X?;3mXd*4cnYdg5m +z->IzK;%itJbYtz^KLNRy$l8Zq1$t*0YoC&ZsjD^fZ`}j9DpxA4ZDYDv!n(%g0Xg4U +zCQbHX;Rn%^Bet=qgcAU-F0ekMy8=5fg+-680MchJ>s!wj=#GsnCfpk6(Ic$CV@J&9 +zqFDbOSSn4iU;|#EUh$i3@TjrCC$D6KH~ix*Hh4Dy@EIYKe!VTz#EO*i3*NjBi%s|f +zq*om_WN$9;jyg7!NVtLT*(keLz?@ZV^iwR4&n{qN-W>q?vM)>6gd2U}IGdnW0%_ES +zO*m5p++5ElAC<6oafz8KFjap%fhCW^2O2D}lt#F(O>eQ3f;pHqEMuu5xg6Mx?UGQ( +zX!h(ATd<@ASgZAH;m!%b%%Y_>b!<$5zHHScH0YuUY;9Hs)^5+)x|}p1=H6`mAgo%I +zo!Q2}Pq9wA!nQQPWGc#!Z5!1a=!8tR{c{*roSWGW?|fiMhuDq>7|ie8V0o^Gf!3eJ +z^1m{ypBu5myUxJMm~Vn7GD;6*bL4Ps?NHzh|ISHDJZi +z6CkWqCONT(UHxhX+;R-NR-pu{%3vj4e^8>QvpYc;$6c1OyIFQvgnF^^`6zAAtk|=T +zcY!AquxH_ifn96Bo;Sm)xi?|2E}=pNPnXGhY-O+OXzc+WZT$BF;9W=dx~>}NR{X`t +z!@$P?dovL$#ke$SW?iGN=XUmG0cP5tnzJv*#{;c!U|-`ggv32zU-vb^f^ii4H4x2w +z`zH4LDF*cQW$aJmt-x-?N~Lw(OogRfn9>8-{@Gk*>khCgk!zg4167>knkDu?&g|pb +zF`mGwf$PUb0vUaPo3}tSNZ-LN$2JFc=Nq@2@EQ16OK!C^4q*6uUi)}=;7PA|-Fs&M +zMos4peXu$jnadpvZov6V?l2AaA*YZVpCm#D9^R6>7$yQ8T*RANWdNkR@TNU5KbX6o +zw@k*6HtP`gS&jA+be6YmU5J5u6>q;8v(g1FyyIFd9mi4Way_p>(`WJEuL0QAn9aMz +zq4~Zy@bHsofSwt}d#1bumg>zTHrN4;Y|o?C&jeQ6ocAjG1Mo10M>j=5AOD_5_qPH% +ze+rMe?E&0=KOg8<4&+=YA9xmJqr0yZSKlb^UCGDHe+hKsN-4d5BU55?3t;un@>zW` +z)@7aGNoyYgt@W6v_}~+bJjYWy;m%Ae<#U?jbz&x;^T8WvvsQfWnnED!YVw7rmjLTD +zj4xgn1nh;SOz!W+m)*MHa5oa +z=wiNlQVftzemrCNXMp$1dB*l!AYEekf8NDFXExxOeNeH-&F5>|;`N9IeBHm_hur2H +z<`n@QHj!^K4F=w&H{Y@m6{d?I<=O16vv45ai3uU;6UujYLxG7(;=7Mx!nb^hG_!%x +zw5%mRti>8S+K(UYiq;tPlOO%BDbUKdykO}jAothEWCwhC!IfOJmkGRZssliq0lav1 +z9MJWH`K37QeI4)2FFkq-%<>Gs@(33zqJvEGOwF%iiwE2TWU|i^FJX;=#8&Z=UlO$^FJ5zz-#_;P*uDcYxq}~noUR0zQ^cQ57zA`lxD?UQXlk&We`q`$ +z*effU+&`0lIyD$*=^Xwob2h;JJ^Z%|HZ^U#@jub)0lW`XbKEcfH=!X0V2!|9wFkar +zlOQ;wUR--32oXL&ueBExp&SEwo*>SyLisx_=v$#5&Dt&0xV!_%(+=!Qa*hbUkbHH9XB3_!2i3$DQ^Am>$r$Do@) +zJKhnz=H~#ryg=}t7XajgQ6}C0T=4&jIjxP8Ohz6E9U5Tnmik2K^hEmB$j&V0i4gLI +zVV(R`=;4NIx8a85YHJi9XoQ$hRLaE~sh@3_*`Rn~Sn&aDU|kSKiE7|23#H?>Hl}HD +zLc&)RqWD5#Qh$8DV5KlM5Zf}kG-2wCVjwFA2{ZO%LE<`9nB`Rty!B#X&f+Sd-@gfS +z6$60MjB4JD6Xt0wvD$4U%zJ=lFLf6dK1MehyG>ZssR(dp>8#_bUPo3|R+kXV^qxm(CQp8<4UimEsxRDo^KVlmSUh3yN^U>CHDOllD? +zlZ|L1?D53?9OWs++uN9;`wM$>@okO12z%d!VEh^*?7NTlIp18^U*dy#PzT|dODvEY +zTsY=|d4T&;ncT0naI6P@O=TV7_-QL(*>1v#Cm8pdt`W}k#Coqzyl`d@7WIXxLQ&#( +zpr_^uMYzpm;u@iNQZhjHFqtOy@_|tNDjQ%^J>kmo3}93IgsVH9vA>osTvv9)L~E09 +z|AQTVQIbrWnH`D!jLw09@!Rd^8WjWqIwfOJrCHznt{|Pq!(+^*KtHpa2}m@aee<)(t~o +z!DR)T=LFnrq(YIDiYcw2P?V*ilucHsPRs^6>Zw8-6oD=IkqWH|9b$o{Licn6vM2Hc +zkiml#hD9}j*}PF$pZCBBK1pHy6GPIcdy2ZhOiQs?N>en-)8HMCRWvz@Pde(SqN(>? +zpsg1wT3kF0q+?x$$M6A|!BE6 +zx<6C+-5v*QW16C4Hde30k1GOdpvP}rujq8t9CNH#MTkczu=o2Ep{9S0^AkN4VPDY4 +zlIAG7zDF%uzg*Gt9J+qjB1NQh3*bq6MX&oP9e22*5BmgA607L@-3faZ_Z0o25^z59 +zMkcxURMCIzO-yRrDEe1r16_Gh5%)C#c$iKxM0XhI*Vc-mS1_kef2>4J)vJT%{P}tOlrB +zp%@1k`=-oNj60cvJ+wqcLX&XJiqFWT-x|wgMT2DW=7&s*Nte+JH}6tRJ9i7%lZ!I> +zz&VQP3I;GbSSCH&Q87ITWA)&UikXv_0X?6lNW3@_$R`g);1yFInY_8SnmsBMi~7d_Njaui96A-)2vaXb+Uz$tY@4rG8IE~VN-f3O +zhuwkni&3o0+7CSTreb~nbljqbiY?2rFclvuw(XdUZgf*7Yi6O?J~RgSj0DBbB$T0( +z4HS6|FXXm20rGJW9{c^>v-dVtk4$0&#dMh4%cfcNPO~vD`9WZz#Dav|bnOyWq@$zvG +z;7+5YP$xIj`~pSQst!O6?uu`<=VR~viQ+rB0oid?@!kC~P}|*#9~*Lj&$_1g>5vOh +z7^V0XkCxuMMDe%N8K9fOm898xpwml~EE7LAqM1_J60e6brI@l1Xtxxl0V1$lG)ZaR +zA_%uNQCa)LMIcS*D(m?5#4Mx5F8Kv}bx0;}b6#10Fj2@G)LL^7xp(!??;va$?#G-ffWv1_bQz{F%`TuOX=*H2W-+zrSqu? +zK-O1c`4e@`}$AzPIl +z^jCo1eyHqp5woiE8fE8AYH*=q7iCZ;-dDmGnY?3fWk?HW0LKz#s6q+s`x#}oJEwtJ +zjgfRNHuOl4m9Tt&Yt|+5Bnqz|Qz7(>(pqMjVxCQTD)k +zL{_sRSGj8BI-KaWQ)blfh=IC}GUIJFu)PCha(jPe=F%BJ)?QU^{Jj(Rwz+cCwN+4; +z-HKFh`iPI^Yfxr6?gbvcOPT%J8dyrUwWupW?+ +z=al=>(Ul&&lgT^gD-X=dLoH*A&{O+3CtMUt3@c +zFDT1*p>8c!E1xUR0C{6jKA(>_7uiSoDmwzJ$=1r(m(Y-NVwII!BrMAdm2W>`P>pJ? +z{P@`#sLK@PXV)7z_qne8{I~+h2}kAkJsy|^-B$iI?+kW);WXvXk^cdFT%v+V^pxd; +zRZ#T~Z#zjQZ{j0Wy4jdkJW;7|MgtD+Dlyy}NRz25%~)$Rh3Tpq|6;7^h^od-Olqy4 +zscHtJEnMHEGM|I@b-laF`BpPb*So1)94xVn`y`XjeyM6=`xJrp;EhUyi%o;*HAxIxfJkKB~YDxa&T* +zRe^IYQK9my`R1A`h^_~gC#bq~5`d9eNL*MjL*iz`C}e%)d87^g-d+`24;zp(TvVY; +zQnCJ-CX-a1P=)1w?g@1N;eRhs@VBVCt?!Iez-OwM7pOGni&XvHQ3}Eys|Lnf0H6Ot +zHE?QE;G=e^1|?#?HH)f-o(lkScvs4oRm22p3DXy8H>GT^_vV9@2vFB7N +zfBk@5?ys7237==rZkgO}fok4(%qkb>tLEo_#c5@kOs;;ST3iR8_qK~lvZx0%U!huU +zbr)Fj0M+UfRX}w6RoQ|i7O$Y%*8T^8b8S_QBPw5lvnuDZC!R}qtlI9{0w=aVzpJ)4 +zk45KSt=e7|1N7o-sZDb?-*G)uyK)Z$_}-MsbRIJK&`qk{m&0+udr7qyC&NtPt=hLg +z2Uws{m1~^-Zf&E!L>(bngr-v!lAMSx+1oFZEH|sDA>PvO#TYQ-!u`rgjQK +zg%evM(WyO;s$E9ljDJ!ewae)b!15=_x$?ww5ggVdq>`vGfHQ{A;2N=I>Pb@;8l04vAIWZ#ad +zdjw;{>gQf{k6yRXvL>h_@_GXFx+s&qbW=zDhk6;XLEY;oN?D1Gx^IRju<}>xnE53@ +ze)m)la>m?n!5?+(a69~-Tk6=m5da6qtK+(3gOat5ma;vJIPj1zd)Syd_^2o1$MX&w +z)l+#2kY;HSnDE6+t{;h~ZunZ&-cdfLI!z&?CX&%k1qB@I<4)^);a;E#IY2NVp= +zZS|r_nE7qIuU>LD7TB;&>LvG)E83}-e2)RR4Qk2c4X|N_dgZ8fAdT>}rUPQ7R8OO+ +z%u~HFu^dQQh&rprZh$5J>Z}e7d%q6qtO(2+Xpwr04uCGSRc|#m#@SaF^&VYEJRg)R +zlh#a9@3B0Lqr*7${tz4@4DF}hABrM*_Pjc;&<4o=4yzBDSpeIxL48PyK;PV|K63sM +zo+GkUAAOjC;+Et4Ca)TicPv*TN) +zx&YrtQnO_;Gdp#`bu$#rlj_3r`14u!WwM%Y)rBwc^O}3hqSUF>4s+NdwaeE +zY`&;|u<9h9VJT3TmSb=;I;tNBI{-OYpnhV9NxDl;wb +zqSapqO$GWqRsF4IAkb~o)Ia)TDH}ai{UaN*ug%lcKQB)NT2rb1n}Qxc^1S-*iW14!iMZBnqYzfrAO4N)+ +z*~=iJ{^wSJ@Bo?Q{&lg&O{}917{!_;%YlWsi)N?ri{d;)b1x5I|I>-qad&}6eG?m8 +zNC!GQLu@z+qr%pF(GJI2&~0%wXa9!`NCZ}uB-%g69sKh{Y+TD7N9$Ii>kJ%FM*UB8 +zJBE3FyThW#J4|>LFGTOX`|%5Zi#|FGb4_cDtsOCp{MarPwKN8wGZWkP!ku()Ah!LR +z3GnQX*zt)!p1fHv23#+~CKwk(PB#Ghbcoo$JRdW~>*4?`LSVM1O!B{InXIaj2U-XEFBLWq>W&GD&f=Oq%*yCd*aHg2T|G;+Q=cyDsI6#}IDJ0@9#SmMh{fwJnc|EJG|Mb^ +zai$qsbGd6S*u%ncubH)tZ=^7RXD7$eSGcN5s`-7>k=IC07NH2}sSap?f8?n$7y +ze2_bk*IA-;Y%Q>lgT(aynCqR16j#MN0lVrat}4Yi)^MBDuT>}Ct}){3piCU(ZK!5x +zluRCct(twCiWyZD=%N31t*osh+1ZlkUMEuU92 +z!BsrAAPrj&OQklgy-bVlh{qO9K!*sH$-8wBk7ou0DZL_|%*z8(cb7~SS1g{qjp@y( +zGvcZ1E%2PuO7Zl^0{}<6h=sLU1MPH6ENqj3oeg`j=;m%9F;m6!t1!k6O_#}jhsfm4 +zA!6|a0pO*dSp4f9n8+|Q`31>}7B8mZFRp(SFZ~>hm1%$RNRrca^!X@TxrUq1*tgrS;Ah1Nj5KWL`ut^g^I)=Vq2 +z2ez-RX4Yn5hR +zDy|%zErqtT@g0$*S+vs+0Mq)Z;9r>$!ts`#%c1lp^0}mpgBZZ0`FJ!9G!{+b)f3Ip;@&_H)z+N!D*#w4XbRka0Z(qJDTu>mEnBTQGmK!NyFqhi +z$~cs-dYZyOEEycihdN&|ou>-e0HH1{?+2{Jd5l^AKyv4_b?Y+rY+5lVJ+4DJqu7_#+=f6jV#Bu +z!c>{uElm3CZ#1R5YJEGO!TIY;B>K&Yep=rb=d%iX}X +z{jBEQ0-3!29&PyZbZivpwLKG2aK{B`BTivQ_52fU)Iij&nnbef=;j+Vn$>ulNI)m$(y=qhx_4L`%l!yH%Z2fCrmr8IeN~r&r)hfH`9)WTGLGIq0EfZ +z&Wi30#J^OV+_VQyjHYW-R;~cv?WH!gDQ38{Zfh5Ahy^I!qg^~d4d9Bqc8M82?crlG +zdE+PArNi;(cU-hf6YzZxRoWH98UgQ>td-tf#inMKHvRWhppVkEEA3Emh9A|g48rt= +zc2AT%1B}k<(b~*TahOQh%cR}SwCl#k0bAKwyWY12KxR$thS{hzGlHbl05{ti`P$sV +z9w>%CwE4=%z&dx+9wiBw`@hv59ry!nVV-m=pi{WGQCqyh4amlC+RGzE?9(S`uasiE +zKG#xvW7T|M{=K#TJBVrK(eB#Yld(73?y&aGeF;Y@ +z!E@zADZZ19sjav6)in=H?yhPpX(G@kZ?%=DQh?Qs(0;0iB2j6j{oHmt@T7U#FN^Fk +zYdWg^zULgk&*s`6wQB$!@1XtB2^aNwiVjXle>r~Bg<8=cTcEck!qHfSm3`?t5 +z>f*9|fUP^B8-g`IGj7)n{b~c$Y_)E9OJB6{&AQ>8I^a=<7Bbnd7rNm^SvU&!)(yXh +z#^^gmHzE+rXL5MHHL{+jU~ExpK_pqmAZJ8ZMu4$ZnPC{ +zVB7P$@nyL +zX>pK^X_cdH;q-C1U!J-}D{;U5_URVizl)V>1KqMCC?O?fx;5jb0=c_U_g`x)ms0oZ +zHoUY2T9vHZRQnzt1^b}ea>EJx7GHGR-p|IL-_-3qw-C$H4Z2<3rvjX+r`vN7o#u&N +zw{Hj@HR@@n%dN8?*w@Rt+?)t7XFE2@FL*;g-9a_>2S)yo+623eh+L&BC`0Et>!vGO +zhROZHNxI^e)~Npm-9^CvE19OzU5rfw_AXL)>E>)~Q=F5@ji+=a#14BrzjU|QW`GUt +zbhjIEY}z-{-QKkc=<)Nq+j$rSz0c_G;1M=HX}44wY&7-gt$T5x1C}h?bg#GLYNkKc +zeN0*f^i!#>$}$&QJ}-4ue=u17$93Oa@ngbA>%O=B2+&0>ljKa({W@EYC*4ByU~Yz^ +zjjU>xJ=epPVBq5x=~<3FR*zHkiX~``9SnNKD-62X2E8)zBMhd;D)i!O+|GJbulKM9 +zdQhX+&v3*d?xJ3Q(*a1RjlPB_YGCpoea$Z?Fnf5SH&^Ck&ooVM@h`3Kx5WDfd#qh+qQDSlsQD-9%l)3*du)a +zMivrLU*E+7-F)&&eW;!R{Sm1T>y?h9kmdTY|byBtxR&e +zNI!UKf1q#2>4$z!#50QFGO2Sj{jg~nxB(9OQ5VXv;bSM0M(oi~wv&L*9IT(=fE(t1 +zS#N5NCw&`t)hB(80@k{wKIt2V%q88V-(6fy?5~x6#VgF7UJli#U+RJfq|){2Pd8vY +z%26hx2lZ>-VL5a!Sif!-rrwjM=(hy>04*ukZ#gyr;HjwJasq?H)e`-dk7(x?t@S$| +zhXb9Ns^539Ddr(v^tl%-@kob3e_-Qb;H*TS=N*IZr}~2#FD-x`XsbU|wF}|@G)!N%`7;`9Uwv75IPQOd{&f?a$gS9>uiBFeGoE=tGFV^33C_B0hB^&8VE5U}P;bN;Aa)@#*|;D>gUcB1M=^u#S~QO0 +zT?U7hU$GNXU~o9(0dTRY!Kw8_U=wN^oK9!qlB_d0;k?tt!h8(Q?|Wl@(#GJHiHTar +zH-=_o(3{S_H#9Fp<9`uu@W{Zv?&BPpe1Oj2S&AWaW0b+q26Jtj3PU^BGJLF|hISh# +z-~rh=MBc0?vSQ}K@-fx8_ygpDh}^B-Rg +zJ;%JniS2AdM5FIO_iQ&rem{UIgtej9-YVdc7KWIEm?CU=U>NYf6yS@N8U~c(dD3`i +zsZBSd?}hV*1Yaz#7Su6J{HM8X(+pGafHCpyZufjdcC%^ +zwwsNqWV2yLcZ?kcRR+^FH$0Zu+>q2A=MPT(Si>sY8vtLY8!}#C`+j$KnY_^>!&+DTw?dZ$!`irP +zphE%-8}{ACmR^r*@(c1{fnnpq9vCAW4V&T%aq6|ouvv@7U3-Zk%ZNQP&#{KwOFgm7 +zTy5BY8ofOu&~T7ogXhIr!|?=67RF3BoEn3P+n`m3v;8o5Ec7*8T9<;(S!lR6bPxuE +zX@-)fL3nEDp`m2yT|5`q*l;s?D+W2IM}~V_uoEAD-*7(}7wX#w!-H6Sl9|jn=aZ+^paYNcM4P)SebPkBo_=<@&k +zq{}t=mzAu6^{NSt*s%OcTh>Fh%Ig$qlE24=T`=SyZN=)?&9&~&@~!*xIpg!ouJb*b +QeBmJZM(5NjLQ?LslIyA?s~#G@G4 +zN3j*K(PLoY(f6_V-*fN%-#gwL&oSh;*JiD`W_xhjKOYlV;eis_&~wNiKt_~Gf +zf{;_830$Jm2V#vc#xGcxaR9A+fChdMU8t9B@FM`bLBN_%mB@n*)-ommptU7VJx(=} +zTb&SBQ`2_sh6DH)0qfBepj#A>&?XXTKO8+?v;OhO8Ndp0s7P-6Rji~|wwula^cw>t +zu9ZXh#_2Lj!-0%*`*q6;@Stz!x_;63m}yxTw}lHd=(XN&~aZmyWXEt^ok +z+rYPE0vmJ*_*N9QJBNU8+YIcelen3C31{%}FD^jy{l!Y|N(*L+mNKt;kv)J{<6M{B +zuVuv`ag5BW@gE&PW~u_V#1dp}HUXFKtEH2NSRm^i*l!ESx?x-Al@i(cFA}*by_U{l +zARCblT=1x+>m(#f(ct|O*+>_VrDp@ZbqQn>x&ZBWUks63c?9Y}wq6Eo^i7a$j0VVN +zAlo?%z|8ZU +z-OctAdGo`y^fDJ+6kZ1RXplb-2Db1jC>*{6)8~RB)E9Thjan|91B$~10L6vw~y-^obX^udv3Djxz2Ix8pbryR7*nWZr^9q6aJ%t7fkTc#w +z!}m_W7gR%|s}>MNzdZz#E+2t@F9nlQcc6>!LX%eCf!=!qruux~&I_RVqAcL5&0t=c +z3FKE8wA|^ByXZPtHQRw(aXVNgHw8X523pMz0=j-8w94-V%)|k#=VSr1xg>@tt!Ru| +zoTxPQh*<)5DX3<~x0XouoRrAEGzGi4djYOhg57ddOV?v0lD%PIhjY(-&WN{_R)(?H +zz|k}o*vbfKbHfqlHw-lg&yYxz7Gr>^%-bSKNuL_6-er27^KEc`q4)sH~vz~ +z4ohHg>~Y|A^TY(TsqLcEFr<1L5W{{5&p^qZH5!Hvdk=KkIEX0z3cTe8h}{o*b`{CKo}D$1NwQH7@#pV1W}k&-3oZ0Jz%g~39QWl +znBv$I#eWfGW%mU5(F|r^J_E2m6z1H=Z8Y#3%zudr{lybl(Cq|}J%O;~K^*W2UqBQo +z8l9GqotOjU_e99a<^bD&!SXU=pcf9p%2gbw(SFEX+5^C5C9G}q0>sxE8^hd8*xztE +zKt(hZ-19|k)D8}gz%IfmIKE*!(A&4+WX5M)pmaF3HU@ZH37jd&2IxLpB0HZAX9~0N +z-O&=6dvPtF43NkzO5l9pC!j6s!G(IMz%2dYQm;IqmF`gD5Drba`Vy49zX3G48{CRT +zy|wTu+)M6)l5tSntu-|t<_Z+=)LPa_5|lHN=w}W@Q3jtEp_1K@235W{fe-8l-+oR9>RbgsAPyk<7W@cv2Ku%Vek9?2 +zzf$4XxwF90Q}|to>l^P%U>d5)c}5b+Hztt_352x9so(EQm@5t=-igS(^3ZM=wh@^x +zZmyXgM6o*#$g1r`dCv&d_-~@BZvrGGkO-sC0XsyAkhva6_ZdW6!)`x`_I5GwMu&-h +z*&2ZT3rXG9XtSKGC9+S?C33&L#CX?RAYwkL-)RNVlOssO%+J8;JS2@;rJ%iCHH|ba +zABa}|IWfJ4_G9=V(!6~M(B3^r3$JNFN}vFmylMfhQQt(Al80pyZ>;INN4&G +zyQ}AbKBypeuUZ11l|t-C;>Ou0N+gjZiPOUjU>VDZ)0c8!eWQq5({DgE4~To97A59) +z8{)n+3TTg);!?d8ov}_luD9xu>_!GOst>UBJsB_=C$#!18L}-0*y>3n;;c7-OV3&+ +zmPn-cx{#32$I2L%L~a>IrUg9#KE4r|mQX{yHatOb9lwlZ1>pL=b0S%>XaPrMkXe>- +z=yNO-E9;mVUgeR+J-6XDsYh~5%78a0CpkXbfW0^(k;gia<%iK*iXBJRTwMxu+%&R2 +zVlgnUJ7gnA=W2NevT(4nPd(;5??W9pHuO&QRO6Ug>G=YjW)COhoU1GNq!JI}NQ +zzVZ>-HEt7-z`A6AKO2aGFgH?|JstSOz2wlEPXLovk>jmj0ckjg{6Q6{YwD6qr}RJ@ +zm5`g(GL*+0iM(|>x!oDB56+XwZ5xvNWBh@8k0%c{*q|xyPafu9#Bm0Sm36HKKHWzu +z2J3;3>P((bD*$$OJbC`|E0Cm#Ys +z#4;efCv|vx7hS#^v~72sety{9Hf9c86}ZC94nD_%ah24{Ho>8xe|G1AKI(;QnbK-(SU4JuDc%6-g4~k +zUL_6mM&;3C8x31L0BDvC4J-8pI$$3ixGe}eurIynz<21Cx#=Xbsz`~v#~wPk8~P_) +zNyDA+0a8T6Lw*9YKS+m$t_AuvO-wL$^$xs1Q~6nRZ`RkcESaWG#(pR*>6ktHfO&MG +z>HfHDX1mjjcPIqmMRe@in?O!yOQd5}Vui7-uHILmy)x*m54d3Q8DjnV4#H^}tua09 +zj|4HGesA-Ii|95-3_Y$S(rp>;06j}2(x4_1c~D33czx4I@Aq_vYt1~=m&mRDqC0$0BWiU~?AXA;;4^?8vL6Oy2cbve(RlAeF2!jMIYEyOcf#vbdfeg$@VO`H +z$>}nH%$4+Pf3z_-U(j0XLBF52MD1{b +z{`g@GY|1tIGwTuh*FEVkTO(lm0~oJgVE}q?CgYuPd5*?Nl6h6*p`XR=^Qvz9?+}S`Hq_KLAoq(Q8WDTcb*f=SHnG~b9Fu;yA2`vRO +zKZ`Za)29WnXA|dt(pgO{fO7YS~0gedx8GpCI&RJv}3Zjtn>V97+6%ZE>53; +z+?&L@1Y8CBq=0qF+Jr8y3G?<0La%LzxVn+4;npP9C#C?%1%HWjmM055i2FA@h=rw| +z0C;_oh3#ty+%SL*OzZ>fxCI-OTmfX@Og6ZwIne#PSa_fb&@+q;ZPgXMKFWsf#Mo;J +zW5Zsfw$d6{RD3e<$K7pW8?)j2@__d` +z#A1nv3;Bt~Tf9bdbbuv3!}$A;IV|aYKF|+mS?UH{@ciQ}O{DudSG +zD|^!fx9ILX_GZ*!;2AsF+c6k&CUz2Cnpk;wg|IJk&{hB3mVG&%g6{1+_BEl#vLN@j +z#=vti`x$}zVBc=`_cOHfYs=U#>#e}<>&2x_9E3|&TsAfc*fD$YN)yva;Rx4_4h52! +z&yCul7_74A^^@BId%BU=Ppbkx_7rcpFa{v*FW%^QKj3ppd6Ro*0piDVGk1)pM&)r! +zy#sJWfK{sl0Ct3hB3W9(eLB(Bc9fob?LW{AWC5odwWAU3u8riNMTG +z@cw1L03L<&L5`@!$FJgphBgGcU_1}M;|$zBoJV+-134eSBmO`oF`zSZU5j6P4 +z(Ol#%z)~1rc612Pn0&FKnL}W78eg6s4#dxkuZXJx_-ip=u_F&iuW-J~tr+N3bDld8 +z^>g|>zPb}$Czrs#N`69-c?rFRzn(soVj|>dp +zd-|dp8P=NbIf_o*s_CMAb1TD2M}Am?k@X-iezXsYR^S$Xbd@8}FCqNQ!VN&~uawA+ +zRq!(cF_=O-?$0kjeuqjvk(WHiNec0iNS>?sRm=>5 +zldnYf%ZuM+)+m^9l8KtzCtFm#l2rTPbLd-Mqz8r@v^!@wgcVSUsiV}s`(F3W%bs6#!w|*W>k&T +zo{=>;)&||4<+WVOWex74)TR1JWG{^+^4KhyX$U&+&*wsrl}W)kneFg1!0l{gw!4CX#8k^{ccUYbzE;-y(i31&mt?IUp*E_h +zD{K8r5A=>)X5Ry~!3CwvIr0|Ju6Jdwv$q5L(?#Ys%NNK8D~a?-8=3c4^jl4BBr?HA +z=F=Sgv*}M|eow`1EiCFqmCJg5VZdDH%Yqzm?zXHHAGWX(%G=1o1C|0^(ofWy_pUdp +zk!(b9KBlz}%i;wU@GePWg1M<-TCgnjE2^7>B3b%S9AD1~vdnI%d>eFua^1&S0EOmX1eOt(8JwUNvo+F$41h-N0 +zHrYIvG|aLdlFjowhpEa6iDXNjL^XYEg&!&~dA(ZHS~wU^n#ppuxBzthUdwJN5?OTX +zT9zBjmit=*8NE}sYSwa0ujnQ6Is;_67ghkBKU20QSPAT9xYRvsbSuyHV&=^nBTHCY|Gk9ftxlrGSVl@_LklsmG$ +zF1Si*Ph@+?VeE-{+V4i_T^#DD_TIFMWg*iw(osUG(CUH_TNWwoNXjK +zaMK;LqVHtK?4p6x;j&}SXxyC^O5}boWXFO~O;k3P9Y5U=*zQulEo{4O@1Z2 +zy2}(F4f$q$r0NMQy7Wkqm66vAyvPWAZfb}YoJu&+Lq(>cD+1=hi&GtxS!dBVq +z+%A|KNXn8`Cf-K3;F0Woz#4$t_Oib$(tzs}vX4gHF$It$+FP0$vewI4-+a`v4diT= +z4SFpN5`vM>yJ0!UP( +zTtBZauvR&8lMBvhWYgs))o5rw-;+1_xe%kAYI%zSHFm3sy!BBWPkgo9(XAB3iY-rCX+p309_tTu~nLH5GX1A^C9aVN958l*g8!le_eZJkH`5 +z<}$;iK)0siR^-{JW;;{^S+i?;sQjGuBY;x9{M?8N;PS`v3rBIGI?R+PMp~N){k8IvDpaAJ28+|Jt-PBm +z<+l|mCU$?yZ|k0+AL}Wy9frNzw34CeV^CibfwUK?mYEQ_2 +zHv<{IRpFy6!MKkp{4SyEQxdH3-=Kn?ROqGXo{RlT{UVVEa7E8{wg9beDgxw~{-TMB +zzIRWfui9AA&!fh4=@tEE;+9zXRnc!gs?NbmiS*PG@tmz|q~jAss5k-RStE(OWh+Hk +zXAJa0G8KdTwqrK>m15ALB7h?^6+>6$01s=Yh@QF}Xi=47_=!^(hgBLlilq)&TvnRk5O3S2VB96f53s26k92 +zk+-f?^0jD#PgwIUqn+Nqs}Y#FU7r9u~H%rh*acHEDn1L}WF +zaa4)9U&qH{fW2wGuwIH{$1#|>ys5ZoUW`e^o8m-!t9pML6gSMS0gqHEZrpML`hAjE +zU~gq;y+ZNe?J=|$ +zV<(5o6t6djV1VbZcyk#geQ%PYa*K$Oa*^WQXEc>zZ51D@On};rRaDvEz)JE2Mb(oE +zASYTWzVCHLA7-ke+Q=U)c=iKD^{7>t$zGs@P~1u@bxQd39$0Z}iQKtdoalhYsu-7)Y#Ol&^0xAuB_Vwm%jA8(r5pe5-72{tSq#N+SClqHNm)Ge7f6luk9NsaH-)x2)G#JL;lz4{r&h +z=&*gtP6IhWM6$ArNffa9eU)7nf__!aAp +z3ncP-^OW-&W*DQ9{aDHtmrb` +zGv)pR+p+d?U72T+3hXx?G-zvOSg25*Z*>mn(<#dHab=jBWy?^R9e1w#kEqK(Q_g}QI-I+eNU +zCt$|MRW{vGiwW(KxM979tL#R$##n5i%I@?BV5eG0%UXADNezh%HUeM9#*wmgf)Q{A64ysq3&*%qjH}5024+7 +zBodD%Dvui|n4u{u&nn!2C1qkWCkG*~o2q;4cc7z=iXl#ZhNGWV0SATv^F5~O(-+ml +zbyHQ~Z9GG?Y_vp9VpTyswgTsaR6+gGt(=yo3MmK%=zmEf`%tP1TZOvOcb%$#HL9!o +z#j3$8T!2+BRfW&S2=VV=Ritf8fH}WZ(Qy{Q{3ffSOVQQNPf^A6%fkwXuUu^AY-I@Z +zRmE>Pj|tZzRbnn4tJz+lO05~SWfRpHd>`*wUdvv+RGB;rNSnR2bbBU|RSrRJ!s8_8 +zB$Af?s&NMsf&Iu;O~81R&8erF)Wim8p}%VG2h;YKdt=i%i +z^^AdS?oWR)6PL672iu_NAo3ehg+&sGcW`3Emw60?<3PU +zOJt2pRA;W&L$}3BRdfNrpL|~;YrH~L^b*@^>n4#7-6D|{bd<<#=BduDl7VRJYD1^_ +ziXpC6hHI}>CFCq{&+n?cZqKkVSR#@3vQ^zJ$_8@zf$E+mE@Zop66xk|s(X9C18lsc +zdXRGxVEh@?!*aA&4mVU!dRPKEct-Wq0)2D4U{!hBuNe2pR26-)@UV%XdO2+}D!!en +zS2`Kc3GS*_^)fN3vh%a*HJ)yxR$WwYK7;|O@>EsYqxt-@RaM!u80g4ms&^bW=${=` +zUn4VtzJIIwR<|3_J=0Y`hGNh;C{y)gvjW&IOI7uiF+l4oRKK%uqo<{+elNKR+~%_C +z_X~90=Drl@Ak?tWL11addajg1S=yrc`eU>d^K;y*~-+WYl(R +zipAA#c!=VWQ12ABm+)9Ha&-pw=#XF%Qwnr&wb18b3u^hqSRyySDe;A-S!-?qn>#=vH)|@c_AqT+treCIMQ7}6sF0Ij1MJQ#A?G0)Bby-cwuj%qpgzL# +z?zwnqvS%%yQ;9rid@ZBz2`fHPpo?9EmETag7A+8Rg#|!!+X<^<;s8?j3Tyuy59CKn +zVN*~zz``lQ_H}iEEto5g>0s43xV@0qq7Oj(7qv{a7mm%z#+1Qiv7m#iVTq}5Y+f4H +zfT|?&{_lk2xjle9ED=r?6aZ#}z;~y%o;g+5;p!Q@D_W7BqILL@xVM%XVLc;xrk+D=(q==X(%GdTI<8>!N=j +zN`y<<_>1cwh0E1Z7<>*DN(yl&ZO#*}rsreTwx2}a%2BvlfU%WzlyJ3jBaqBb!j0Tr +zm}>bY+>CbtnleBred-QmL9}phIBL}>yV*09%@ZdAnMqX|a9-jLI +zAogr8Jo^0#*v~TI@q-FXFKHyw8IOb~<9cIaBUgCVxCb64*dkP%O2vemi|}H46W}v1 +zi&msYGtmrj{{BYdQLxP~|-a=-61{i+4DV +zTPA$V@ByN87rqsu253{9jw+=VBqfBRIMvSt+ym!tsjt$UPzfl-X=kqinW6? +zebvs#uVd=wnc4+iJ~B97?P0bNW1^vIug7ITt5&ML)6hFQdraN6AQqsLzq*^dGZ5=L +z>Tcmiz(%fAce`LL*6q~Tu;QnB&{J%BQLZ|?Qx%>#dZUgw`WY4J3iWVn^ad?Ps^b@L +z#-;^zO0({m#p|n1FERn@_CY;PTLPqfka}Dh>hZ&`)#E-F0NtMbKYNcCv- +zl)YGV{UKLRdx8qm;3AQP1gNK#S)fbM;(&VAbeuD_y|}xRsYgKWFn>oe +zptGrAxVt+4B#z?p5p}^f6z*O_)rUxX;DfKL4}aQ@CjPhjXfz7L>!<3Y#RGtzh)|#O +z!lKG*nfi>=PxNh=Q@4>Q!~8=#^(xkOzY +z_6g{aE9w%Z3Si!FiQ?bEhd6mM=;S2A?!hOUxGx5ca9;n^^9 +zr-S;_z+hnOTB|>AUyu2(BK4P^XR!=*ME&g=W>Nm0seuYyDW50}N%#P~X`VQ-i@QNF +z4uj%euQh5+7Sgh_8jbH!plvT`bm5re%KV@)K63}ySW8VqH#Cn)k2EGN-Ep(7)HF^U +z1n_3Brb#4@r=vk*p|img0S7cKCp!W;yjWwIgqv-yg{IY7tQF{%X{^glQQLIZSXZK1 +zJ2+Qk{i88}m9d$oO%+b;rA```GpLr*&T3pol>@unQX+T#E(UmG@hes1;eQq@pxH>= +zY)gh{JYJ%b7@48*+?S6oS)Qh21+J5!t;Xx>4b*xUYFSxd)5#Q*RIHd89#sDpKy~cmZEr1<9njYyWm3ww+daTF$$~-gyPAi}Zozqa$ +zcP}39cnX@p&;^)GkCMo)P7t*|RvwO`I1lkM|f& +zLhETjD^fM18E&SlMVirVaT6}D2AwbLw2#rqy9 +zHA_acz|5$FMtpx2cv>IL(!Vo-zBr;;W)Xuy(Fx76?&uuRkR)+>S1a3kCYoHo81zC~ +zN~9r7vnDwP*qV=;wI1yNa_ef=O+5#6N-yztR|oScM>KgwL8wW8XbKfiuq<1xIZ9IT +zF!~D3(TE=?6LUpNU%x=3UYg={4nWp_(_9%T01q_PlsrUZe`Sj1M$T+tJ-O!3gXoGL +z?WehufqC5S(VDyWMLbl}PIJ%P6KnFJntP+B0y%V7^L!pwi>n@p$9+u={?9b8uQ>yI +zJWli0@;lZ|KWHlHB=p2WG?k~afVBk8=ccGztIlYuI_fFDh +zE1hy(+vsoHmwwS&lMqalg$HY!*6g`e9kiwesPyag*P5QJK$Ub@+uS!ANZ)d8iv~A= +z<-gWij0^%k#9Q04Z4of@OWIbyL`S~sOJE_={Ot=klg9uxX&+uLzqy$5UE&3%EL?kbVDxh_`u?V&*x;%0v< +zp?bA8s0D`Z+XBSf{+3RRtks6!S%`I8n_7-e(GHv27ud`KZR9SrZOfNwV>Y=1+Zv}G +zj%fkr7$VwtYi8gwQ5$z|6V|QWv~l;a7d{r+k=-z2t|MyWJKRGD-&z}g&IRb|Y;F8C +zhIOz7+64DO)Ekb +zT&kUDY>np$60}qNP+S%-)lRwKt^wA-R-08HJ2qsTc%>Vr%-(C~jvtNdXVS}lR +z@7isDO$GY1gLc>Xxfq^ZcJD#lEU(6B_YcQYK*1K;yvCRrfU(-V?IB>q +z@&lv~-1?RFpbCGHwppCm-9Z@Ytv#)d1G;^TxVyV)kEuVjm!h+QeIwe-x2B?tkRp*g +zj?&&F7MPG|p}oy8xx22j_D%~9#Ic3;&h8DEbFQnsQ-J2ObE5Vx9xmgC)nfe~R_*!^ +z*1pX50hSS@eX|2+ap^Pd$0<2L|L&^&R6h@sKH1t&ztF61+^hX&kIjUQ7881y8d~?! +zff0tXZ!1_f;9@nUI-N5r +zu4BPE-Go+H^lYco-NN`Yz*JYq1r^(DqO1Gm1bP+aIwM6P<~=*)$^`!?;mRXjgPHg7WY9ZZb9E^`7%evIX=OMRt#c4D583j$u5DsD&f#~Rvqce5 +zVXw~R)dAF4KXh&lT+r*t)VZY>04p4>>!@yvfy7LmS70=-es^`9I@qE2+*8*DD+V;- +zna&sO1qo@U^PN8h&jR++^)f~!F=2%+K*vzy9oO~lzZ44}_jJ9dtpo#czo!dL#d&(z +zR~PoYCQYTHIPV%!RpmU+7Pi)EPEv5-gy=IJsl +zMEoH|5(|EIm}~YE(RV+)_8)+(mTn)xy9P +zXLL(mql@(_R=4zWFFX&_S-14rI?P42lE~D}bSvL~0QRg(w`TH2AQ@wI8?AB81G?%q +z-N!)}bk}X^;f`m$Rk|(5(g2JH_HpgZa$R`xQD{QIk} +zNb7_OubJ+$F|Of=p}NbtJ%M~5sk`oa2TyB#*4=4b7ubkUU1{_ffCD#l4=+yx2rbY( +zi%Uigx<^;Gu?l5Zp(`s7#PZ5tx;L${V7FwO?$h4sK;w3c2?4Hj(ok`8fK|PHpY_mk +zE5Ok4dNK>spU;1Y4+Bi8)d%tK08_)zaJ}(i)EW)9)$)ylM4r4{-|z<(5tZZhjcO8( +z!+YsXu3^b$%{G1G<~~3V8}v;_o&{pjQzFa!tZ#k=4ShV*o3F;XyuMIxx$G(lVe?@qlp{$&J} +zJLvs3zQbzya=m{O^mImk(s$GDM;D`oM0R;m4Z8w&8=>z#`V7{*zUqUMUSaumsy?K} +zca(-t`q1y_q0K7N_uuykc=$-S^Q~2X20E&ne%<~%SOpKd +zCVe0e=IGbY4Z*x;> +zObC4#tv{ZMZb8y`{i!5$*2m$cx^cknjnTjT3uk2F6N&8Qb%}h0yJ+9fiLTx`EwbOt$bO_SvL7w=lj$G` +zM&-1zCQWlB4T55B9_xezW@JC)cemS%p#(rQ({t6Ynp28^?&P2G$cY28H7LM{#$=kQe*LP +ziKC?M6n0on+c8rO48-2oj3xp`{?m6w_r%oXn5Z=A&YXl*w7OY)=mTkx0iSTFfsTTh{-SD5M|Cc^B*I`@HIBOX=YcXWP +zKTpX6W8#w{qNR>Ew8qJbkc1%hzs^C4(lv6Y4d4mGah_^tE){z}4ri_-n1emE +z#h+gI`$+s50%6bv{PDkscy&*G!w4KmD)GjjW=I+S^hC+_`qy`n*rF#mO5d1ai+C^o +z%)~dPNNW;-?~8#J(mge;*WCLbz3}>H?t(psCncttrN)hm>1b}>*4)c8(krY>VDIj| +z{XIO)Qqz)BVxrBGBT`c{l2W2m%_34_%sj_7O`iOo~+BLwIdP!}?O8ffXTM>MFVJj&yF{5mjy`a~e +zP4WI9>HZP;wwl>Vh6vIXKmGT&YkY&utb>vx65~=w8lc5Pg5%5int)0ad`>D~)MIo$kQ3%gUVGSTG +zXYoT~oU>{ZQz;d_P}jsI#^!uD!kZQvU*LPyDrfK}-nc`fbA|@cCN{(IE%7x21P|=C +zCA9r#3LAySMaLwWCC5i(Mn*)9$|-rqtqRZH + + +- +- ++ ++ + Artwork name + + +@@ -329,183 +329,183 @@ p, li { white-space: pre-wrap; } + + + +- +- ++ ++ + Select / deselect this artwork class for removal + + + +- +- ++ ++ + Enter a name for this artwork class (required) + + + +- +- ++ ++ + Choose... + + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + + + +- +- ++ ++ + System + + + +- +- ++ ++ + Software + + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + + + +- +- ++ ++ + On + Włączony + + +- +- ++ ++ + Off + Wyłączony + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + + + +- +- ++ ++ + Folder + + + +- +- +- +- ++ ++ ++ ++ + Archive + + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + + + +- +- ++ ++ + ZIP + + + +- +- ++ ++ + 7z + 7z + + +- +- ++ ++ + Select archive format + + + +- +- ++ ++ + Supported archives + + + +- +- ++ ++ + ZIP archives + + + +- +- ++ ++ + 7z archives + + + +- +- ++ ++ + Image archive + + + +- +- ++ ++ + Image archive for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + + + +- +- ++ ++ + Browse image archive + + + +- +- +- ++ ++ ++ + All files (*) + Wszystkie pliki (*) + + +- +- ++ ++ + Image folder + + + +- +- ++ ++ + Image folder for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + + + +- +- ++ ++ + Browse image folder + + + +- ++ + Choose icon file + + + +- ++ + PNG files (*.png) + + +@@ -1238,7 +1238,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + + +@@ -1361,17 +1361,17 @@ p, li { white-space: pre-wrap; } + &Ok + + +- ++ + Choose image file + Wybierz plik obrazu + + +- ++ + Supported image files (%1) + + + +- ++ + All files (*) + Wszystkie pliki (*) + +@@ -3469,42 +3469,42 @@ p, li { white-space: pre-wrap; } + Zamknij + + +- ++ + Name + Nazwa + + +- ++ + Domain + Domena + + +- ++ + Path + Ścieżka + + +- ++ + Value + Wartość + + +- ++ + Expiry date + Data wygaśnięcia + + +- ++ + Secure? + Bezpieczne? + + +- ++ + HTTP only? + Tylko HTTP? + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + UWAGA: nie udało się usunąć ciasteczka z bazy danych: kwerenda = '%1', błąd = '%2' + +@@ -4404,7 +4404,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + %1 wariant + +@@ -4488,7 +4488,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + &Otwórz archiwum + +@@ -4532,7 +4532,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + Brak dostępnych urządzeń + +@@ -4591,7 +4591,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + + +@@ -4601,27 +4601,27 @@ p, li { white-space: pre-wrap; } + Wybierz domyślny katalog urządzeń '%1' + + +- ++ + &Close archive + Za&mknij archiwum + + +- ++ + Choose a unique configuration name + Proszę wybrać unikalną nazwę konfiguracji + + +- ++ + Unique configuration name: + Unikalna nazwa konfiguracji: + + +- ++ + Name conflict + Konflikt nazw + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5309,25 +5309,25 @@ Use local value for option '%1', overwrite with global value or don&ap + Rozmiar + + +- +- ++ ++ + KB + KB + + +- +- ++ ++ + MB + MB + + +- +- ++ ++ + GB + GB + + +- ++ + TB + TB + +@@ -5473,42 +5473,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + FtpReply + +- ++ + FTP directory listing for %1 + + + +- ++ + Name + Nazwa + + +- ++ + Type + Typ + + +- ++ + Size + Rozmiar + + +- ++ + Parent directory + + + +- ++ + File + Plik + + +- ++ + Folder + + + +- ++ + Unknown + + +@@ -6005,212 +6005,212 @@ Use local value for option '%1', overwrite with global value or don&ap + + HtmlEditor + +- +- ++ ++ + HTML + HTML + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + Popularne formaty plików graficznych (*.png *.jpg *.jpeg *.gif);; + + +- ++ + Portable Network Graphics (PNG) (*.png);; + Portable Network Graphics (PNG) (*.png);; + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + Graphics Interchange Format (GIF) (*.gif);; + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Wszystkie pliki (*) + + +- ++ + WYSIWYG + WYSIWYG + + +- ++ + &Load... + &Wczytaj... + + +- ++ + Load notes from file + Wczytaj notatki z pliku + + ++ + +- + Load notes from an HTML file + Wczytaj notatki z pliku HTML + + ++ + + +- + Save current notes + Zapisz bieżące notatki + + ++ + +- + Page load progress + Postęp wczytywania strony + + +- ++ + Hide menu + Ukryj menu + + +- ++ + Read only + Tylko do odczytu + + +- ++ + Show HTML + Pokaż HTML + + +- +- ++ ++ + HTML files (*.html *.htm) + Pliki HTML (*.html *.htm) + + +- ++ + Select file to load + Wybierz plik do wczytania + + +- ++ + Select file to open + Wybierz plik do otwarcia + + +- ++ + Save a copy + Zapisz kopię + + +- ++ + Open image... + Otwórz obraz... + + +- ++ + Insert image from URL + Wstaw obraz z adresu URL + + +- +- ++ ++ + Enter URL: + Podaj URL: + + +- ++ + Create link + Utwórz dowiązanie + + +- ++ + Font + Czcionka + + +- ++ + Select font: + Wybierz czcionkę: + + +- ++ + XS + XS + + +- ++ + S + S + + +- +- ++ ++ + M + + + +- ++ + L + L + + +- ++ + XL + XL + + +- ++ + XXL + XXL + + +- ++ + Font size + Rozmiar czcionki + + +- ++ + Font size: + Rozmiar czcionki: + + +- ++ + Zoom: %1% + Powiększenie: %1% + + +- ++ + Select color + Wybierz kolor + + +- ++ + Choose image file + Wybierz plik obrazu + + +- +- +- ++ ++ ++ + No data available + Brak dostępnych danych + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7138,55 +7138,55 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Preview + Podgląd + + +- ++ + Flyer + Ulotka + + +- ++ + Cabinet + Automat + + +- ++ + Controller + Kontroler + + +- ++ + Marquee + Plansza tytułowa + + +- ++ + Title + + + +- ++ + PCB + Płytka drukowana + + +- ++ + Software snap + + + +- +- ++ ++ + deactivated + + + +- ++ ++ + +- + activated + + +@@ -7614,42 +7614,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickCalibrationWidget + +- ++ + Axis %1: + Oś %1: + + +- ++ + Current value of axis %1 + Bieżąca wartość osi %1 + + +- ++ + DZ: + MS: + + +- ++ + Deadzone of axis %1 + Martwa strefa osi %1 + + +- ++ + S: + Cz: + + +- ++ + Sensitivity of axis %1 + Czułość osi %1 + + +- ++ + Reset calibration of axis %1 + Zresetuj kalibrację osi %1 + + +- ++ + Enable/disable axis %1 + Włącz/wyłącz oś %1 + +@@ -7703,67 +7703,67 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickTestWidget + +- ++ + A%1: %v + O%1: %v + + +- ++ + Current value of axis %1 + Bieżąca wartość osi %1 + + +- ++ + B%1 + P%1 + + +- ++ + Current state of button %1 + Bieżący stan przycisku %1 + + +- ++ + H%1: 0 + K%1: 0 + + +- ++ + Current value of hat %1 + Bieżąca wartość kapturka %1 + + +- ++ + T%1 DX: 0 + T%1 OX: 0 + + +- ++ + Current X-delta of trackball %1 + Bieżące odchylenie X trackballa %1 + + +- ++ + T%1 DY: 0 + T%1 OY: 0 + + +- ++ + Current Y-delta of trackball %1 + Bieżące odchylenie Y trackballa %1 + + +- ++ + H%1: %2 + K%1: %2 + + +- ++ + T%1 DX: %2 + T%1 OX: %2 + + +- ++ + T%1 DY: %2 + T%1 OY: %2 + +@@ -7823,186 +7823,186 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + nieznany + + +- +- +- ++ ++ ++ + good + dobry + + +- +- ++ ++ + bad + zły + + +- +- +- ++ ++ ++ + preliminary + wstępny + + +- +- ++ ++ + supported + obsługiwana + + +- +- ++ ++ + unsupported + nieobsługiwana + + +- +- +- ++ ++ ++ + imperfect + niedoskonały + + +- ++ + yes + tak + + +- ++ + no + nie + + +- ++ + baddump + zły zrzut + + +- ++ + nodump + brak zrzutu + + +- ++ + vertical + pionowa + + +- ++ + horizontal + pozioma + + +- ++ + raster + rastrowy + + +- ++ + Unknown + Nieznany + + +- ++ + On + Włączony + + +- ++ + Off + Wyłączony + + +- ++ + audio + dźwięk + + +- ++ + Unused + Nieużywany + + +- ++ + original + oryginalne + + +- ++ + compatible + kompatybilne + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATALNIE: nie można otworzyć pliku ikony, proszę sprawdzić uprawnienia dostępu dla %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + Waiting for data... + Oczekiwanie na dane... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + FATALNIE: uruchamianie '%1' nie powiodło się, plik '%2' nie istnieje + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -8011,103 +8011,103 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + XML data - %p% + dane XML - %p% + + +- ++ + verifying ROM status for '%1' + sprawdzanie stanu ROM-ów dla '%1' + + +- ++ + Updating + Aktualizacja + + +- ++ + Name + Nazwa + + +- ++ + Source file + Plik źródłowy + + +- ++ + Clone of + Klon + + +- ++ + ROM of + ROM + + +- ++ + Sample of + Sampel + + +- ++ + Is device? + Jest urządzeniem? + + +- ++ + Year + Rok + + +- ++ + Manufacturer + Producent + + +- +- ++ ++ + ROM + ROM + + +- +- +- +- ++ ++ ++ ++ + N/A + + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8116,501 +8116,501 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Rozmiar + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Scalanie + + +- +- ++ ++ + Region + Region + + +- ++ + Offset + Przesunięcie + + +- +- +- +- ++ ++ ++ ++ + Status + Stan + + +- ++ + Device reference + Referencja urządzenia + + +- ++ + Chip + Chip + + +- +- ++ ++ + Type + Typ + + +- ++ + Clock + Taktowanie + + +- ++ + Width + Szerokość + + +- ++ + Height + Wysokość + + +- ++ + Refresh + Odświeżanie + + +- +- ++ ++ + Sound + Dźwięk + + +- ++ + Channels + Kanały + + +- ++ + Input + Wejście + + +- ++ + Service + Serwis + + +- ++ + Tilt + Nachylenie + + +- ++ + Players + Gracze + + +- +- ++ ++ + Buttons + Przyciski + + +- ++ + Coins + Monety + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + przełącznik DIP + + +- ++ + DIP value + wartość DIP + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + zaznaczenie + + +- ++ + year + roku + + +- ++ + manufacturer + producenta + + +- ++ + machine name + + + +- ++ + ROM types + Rodzaje ROM-ów + + +- ++ + players + gracze + + +- ++ + driver status + stan sterownika + + +- ++ + source file + plik źródłowy + + +- ++ + rank + + + +- ++ + category + kategoria + + +- ++ + version + wersja + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + UWAGA: bug XML: nazwa '%1' jest używana dla więcej niż jednego zestawu -- proszę poinformować deweloperów MAME + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + ukończono (weryfikowanie stanu ROM-ów dla wszystkich zestawów, miniony czas = %1) + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + correct + poprawny + + +- ++ + mostly correct + w większości poprawny + + +- ++ + incorrect + niepoprawny + + +- ++ + not found + nieznaleziony + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Domyślny + + +- ++ + libarchive error + + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + loading XML data and recreating cache + + + +- ++ + verifying ROM status for all sets + sprawdzanie stanu ROM-ów dla wszystkich zestawów + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + Konfiguracja + + +- ++ + Mask + Maska + + +- ++ + Setting + Ustawienie + + +- ++ + Value + Wartość + + +- ++ + Driver + Sterownik + + +- ++ + Emulation + Emulacja + + +- ++ + Color + Kolor + + +- ++ + Graphic + Grafika + + +- ++ + Cocktail + Koktajl + + +- ++ + Protection + Ochrona + + +- ++ + Save state + Zapis stanu + + +- ++ + Palette size + Rozmiar palety + + +- ++ + BIOS set + BIOS + + +- ++ + Description + Opis + + +- ++ + Sample + Sampel + + +- ++ + Disk + Dysk + + +- ++ + MD5 + MD5 + + +- ++ + Index + Indeks + + +- ++ + Adjuster + Regulator + + +- ++ + Software list + Lista oprogramowania + + +- ++ + Category + Kategoria + + +- ++ + Item + Element + + +- ++ + Interface + Interfejs + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + UWAGA: nie można otworzyć bufora stanów ROM-ów, proszę sprawdzić ROM-y + + +- ++ + loading ROM state from cache + wczytywanie stanów ROM-ów z bufora + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + ukończono (wczytywanie stanów ROM-ów z bufora, miniony czas = %1) + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + and %n device(s) loaded + + oraz %n urządzenie +@@ -8619,7 +8619,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + , %n BIOS set(s) + + , %n BIOS +@@ -8628,275 +8628,275 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Informacje o stanie ROM-ów: W: %1 P:%2 Wp:%3 Np:%4 Nz:%5 Nn:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + UWAGA: bufor stanów ROM-ów jest niekompletny lub nieaktualny, uruchamianie automatycznego sprawdzenia ROM-ów + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + UWAGA: bufor stanów ROM-ów jest niekompletny lub nieaktualny, proszę ponownie sprawdzić ROM-y + + +- ++ + determining emulator version and supported sets + określanie wersji emulatora i obsługiwanych zestawów + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + ukończono (określanie wersji emulatora i obsługiwanych zestawów, miniony czas = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATALNIE: nie udało się ustalić liczby obsługiwanych zestawów + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- +- ++ ++ + ascending + rosnącym + + +- +- ++ ++ + descending + malejącym + + +- ++ + ROM state filter already active + filtr stanów ROM-ów jest już aktywny + + +- ++ + please wait for ROM verification to finish and try again + proszę poczekać za zakończenie weryfikacji ROM-ów i spróbować ponownie + + +- ++ + please wait for reload to finish and try again + proszę poczekać za zakończenie przeładowywania i spróbować ponownie + + +- ++ + applying ROM state filter + zastosowywanie filtra stanów ROM-ów + + +- ++ + State filter - %p% + Filtr stanów - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + ukończono (zastosowywanie filtra stanów ROM-ów, miniony czas = %1) + + +- ++ + saving favorites + zapisywanie ulubionych + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATALNIE: nie można otworzyć pliku ulubionych do zapisu, ścieżka = %1 + + +- ++ + saving play history + zapisywanie historii gier + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATALNIE: nie można otworzyć pliku historii do zapisu, ścieżka = %1 + + +- ++ + L: + W: + + +- ++ + C: + P: + + +- ++ + M: + Wp: + + +- ++ + I: + Np: + + +- ++ + N: + Nz: + + +- ++ + U: + Nn: + + +- ++ + S: + S: + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + BŁĄD: nie można otworzyć bufora stanów ROM-ów do zapisu, ścieżka = %1 + + +- +- +- ++ ++ ++ + ROM check - %p% + Sprawdzanie ROM-ów - %p% + + +- ++ + T: + Z: + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + ukończono (weryfikowanie stanu ROM-ów dla '%1', miniony czas = %2) + + +- +- ++ ++ + ROM state + Stan ROM-u + + +- +- ++ ++ + ROM status for '%1' is '%2' + Stan ROM-u dla '%1' to '%2' + + +- ++ + pre-caching icons from ZIP archive + pre-buforowanie ikon z archiwum ZIP + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + ukończono (pre-buforowanie ikon z archiwum ZIP, miniony czas = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + pre-caching icons from directory + pre-buforowanie ikon z katalogu + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + ukończono (pre-buforowanie ikon z katalogu, miniony czas = %1) + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + Wczytywanie category.ini + + +- ++ + Category.ini - %p% + Category.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + BŁĄD: nie można otworzyć '%1' do odczytu -- dane category.ini niedostępne + + +- ++ + done (loading category.ini, elapsed time = %1) + ukończono (wczytywanie category.ini, miniony czas = %1) + + +- ++ + loading catver.ini + wczytywanie catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + UWAGA: nie można otworzyć '%1' do odczytu -- dane catver.ini niedostępne + + +- ++ + done (loading catver.ini, elapsed time = %1) + ukończono (wczytywanie catver.ini, miniony czas = %1) + + +- ++ + %1 category / %2 version records loaded + wczytano %1 rekordów kategorii / %2 wersji + + +- ++ + Category view - %p% + Widok kategorii - %p% + + +- ++ + %n category record(s) loaded + + załadowano %n rekord informacji o kategoriach +@@ -8905,12 +8905,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + Widok wersji - %p% + + +- ++ + %n cached ROM state(s) loaded + + %n buforowany stan ROM-ów załadowany +@@ -8919,7 +8919,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + %n icon(s) loaded + + %n ikona załadowana +@@ -8928,297 +8928,297 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Icon cache - %p% + Bufor ikon - %p% + + +- ++ + unused + nieużywany + + +- ++ + cpu + CPU + + +- ++ + vector + Wektorowy + + +- ++ + lcd + LCD + + +- ++ + Is BIOS? + Jest BIOS-em? + + +- ++ + Runnable + Uruchamialny + + +- ++ + Display + Ekran + + +- ++ + Rotate + Obrót + + +- ++ + Flip-X + Odbicie w poziomie + + +- ++ + Pixel clock + Zegar pikseli + + +- ++ + H-Total + Poz. całkowite + + +- ++ + H-Bend + Odchylanie poz. + + +- ++ + HB-Start + Początek odch. poz. + + +- ++ + V-Total + Pion. całkowite + + +- ++ + V-Bend + Odchylanie pion. + + +- ++ + VB-Start + Początek odch. pion. + + +- +- +- ++ ++ ++ + Tag + Zaznaczenie + + +- ++ + Control + Kontrola + + +- ++ + Minimum + Minimum + + +- ++ + Maximum + Maksimum + + +- ++ + Sensitivity + Czułość + + +- ++ + Key Delta + Delta przycisków + + +- ++ + Reverse + Odwrócenie + + +- ++ + joy4way + Dżojstik czterokierunkowy + + +- ++ + joy8way + Dżojstik ośmiokierunkowy + + +- ++ + trackball + Trackball + + +- ++ + joy2way + Dżojstik dwukierunkowy + + +- ++ + doublejoy8way + Podwójny dżojstik ośmiokierunkowy + + +- ++ + dial + Tarcza + + +- ++ + paddle + Wiosło + + +- ++ + pedal + Pedał + + +- ++ + stick + Drążek + + +- ++ + vjoy2way + Pionowy dżojstik dwukierunkowy + + +- ++ + lightgun + Pistolet świetlny + + +- ++ + doublejoy4way + Podwójny dżojstik czterokierunkowy + + +- ++ + vdoublejoy2way + Pionowy podwójny dżojstik dwukierunkowy + + +- ++ + doublejoy2way + Podwójny dżojstik dwukierunkowy + + +- ++ + printer + Drukarka + + +- ++ + cdrom + CD-ROM + + +- ++ + cartridge + Kartridż + + +- ++ + cassette + Kaseta + + +- ++ + quickload + Szybki zapis + + +- ++ + floppydisk + Dyskietka + + +- ++ + serial + Port szeregowy + + +- ++ + snapshot + Zrzut + + +- ++ + Device + Urządzenie + + +- ++ + Instance + Instancja + + +- ++ + Brief name + Skrócona nazwa + + +- ++ + Extension + Rozszerzenie + + +- ++ + Mandatory + Obowiązkowy + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATALNIE: nie udało się uruchomienie MAME w sensownym czasie, poddanie + + +- +- ++ ++ + emulator info: type = %1, version = %2 + informacje o emulatorze: typ = %1, wersja = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATALNIE: nie udało się ustalić typu i wersji emulatora + + +- +- ++ ++ + Optional + opcjonalne + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + UWAGA: atrybut nazwy pusty w %1 linii XML (zestaw zostanie zignorowany) -- proszę poinformować deweloperów MAME załączając problematyczne wyjście parametru -listxml + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + sprawdzanie rzeczywistego statusu %n zestawu nie wspomnianego podczas analizy +@@ -9227,7 +9227,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + ukończono (sprawdzanie rzeczywistego statusu %n zestawu nie wspomnianego podczas analizy) +@@ -9236,30 +9236,30 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + RAM options + Opcje RAM-u + + +- ++ + Option + Opcja + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + UWAGA: wywołanie audytu emulatora nie zakończyło się czysto -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + normalny + + +- +- ++ ++ + crashed + przestał działać + +@@ -9428,18 +9428,18 @@ Use local value for option '%1', overwrite with global value or don&ap + Wersja + + +- +- +- +- ++ ++ ++ ++ + true + prawda + + +- +- +- +- ++ ++ ++ ++ + false + fałsz + +@@ -9582,8 +9582,8 @@ Use local value for option '%1', overwrite with global value or don&ap + MainWindow + + ++ + +- + M.A.M.E. Catalog / Launcher II + M.A.M.E. Catalog / Launcher II + +@@ -9592,16 +9592,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Zaznaczenie + + + +- ++ + Icon / Value + Ikona / Wartość + +@@ -9610,10 +9610,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + Rok + +@@ -9622,10 +9622,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Producent + +@@ -9634,10 +9634,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Stan sterownika + +@@ -9646,10 +9646,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + Plik źródłowy + +@@ -9659,10 +9659,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -9678,9 +9678,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + Ikona + +@@ -9855,13 +9855,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -9872,7 +9872,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -9883,19 +9883,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -9994,9 +9994,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10015,10 +10015,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10109,7 +10109,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -10672,12 +10672,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + + +@@ -10771,7 +10771,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -10932,11 +10932,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Graj + +@@ -11010,7 +11010,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + O Qt + +@@ -11081,10 +11081,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Do ulu&bionych + +@@ -11115,10 +11115,10 @@ Use local value for option '%1', overwrite with global value or don&ap + Ctrl+S + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analizuj ROM... + +@@ -11138,280 +11138,280 @@ Use local value for option '%1', overwrite with global value or don&ap + Ctrl+Z + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Domyślny + + +- ++ + Toggle maximization of embedded emulator windows + Przełącz maksymalizację osadzonych okien emulatora + + +- ++ + Searching machines - %p% + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- ++ + Embed emulator widget + Osadzaj widżet emulatora + + +- ++ + &Embed + Osad&zaj + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Zabij wybrane emulatory (wysyła sygnał KILL do procesów emulatorów) + + +- ++ + &Kill + Za&bij + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Graj osad&zając + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Sprawdź stan &ROM-u + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Remove from favorites + Usuń z ulubionych + + +- +- ++ ++ + &Remove + &Usuń + + +- ++ + Clear all favorites + Wyczyść wszystkie ulubione + + +- +- ++ ++ + &Clear + &Wyczyść + + +- ++ + Save favorites now + Zapisz ulubione teraz + + +- +- ++ ++ + &Save + Zapi&sz + + +- ++ + Remove from played + Usuń z granych + + +- ++ + Clear all played + Wyczyść wszystkie grane + + +- ++ + Save play-history now + Zapisz historię gier teraz + + +- +- ++ ++ + Enter search string + Wpisz szukany ciąg + + +- ++ + Dock / undock this widget + Przełączanie pomiędzy oddzielnym oknem a osadzonym obiektem + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + Reset + Zresetuj + + +- ++ + Negate search + + + +- ++ + sorry, devices cannot run standalone + Przepraszamy, urządzenia nie mogą pracować samodzielnie + + +- ++ + No devices available + Brak dostępnych urządzeń + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + domyślny + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + proszę poczekać za zakończenie filtra stanu ROM-ów i spróbować ponownie + + +- +- ++ ++ + please wait for ROM verification to finish and try again + proszę poczekać za zakończenie weryfikacji ROM-ów i spróbować ponownie + + +- ++ ++ + +- + please wait for image check to finish and try again + proszę poczekać za zakończenie sprawdzania obrazów i spróbować ponownie + + ++ + +- + ROM verification already active + weryfikacja ROM-ów jest już aktywna + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + proszę poczekać za zakończenie przeładowywania i spróbować ponownie + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Potwierdź + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11422,292 +11422,292 @@ Nadpisze on istniejące zbuforowane dane . + Czy naprawdę chcesz sprawdzić teraz stany wszystkich ROM-ów? + + +- ++ + automatic ROM check triggered + uruchomiono automatyczne sprawdzanie ROM-ów + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + image cache cleared + wyczyszczono bufor obrazów + + +- ++ + icon cache cleared + wyczyszczono bufor ikon + + +- ++ + YouTube on-disk cache cleared (%1) + Wyczyszczono dyskowy bufor YouTube (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + UWAGA: nie można usunąć pliku bufora stanów ROM-ów '%1', proszę sprawdzić uprawnienia + + +- ++ + triggering an automatic ROM check on next reload + uruchamianie automatycznego sprawdzenia romów podczas następnego przeładowania + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + ERROR: no match found (?) + BŁĄD: nie znaleziono dopasowania (?) + + +- ++ + ProjectMESS page for '%1' / '%2' + Strona ProjectMESS dla '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Pobieranie strony ProjectMESS dla '%1' / '%2', proszę czekać... + + +- +- ++ ++ + Export to... + Eksportuj do... + + +- +- ++ ++ + <inipath>/%1.ini + <ścieżka ini>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Wybierz plik... + + +- +- ++ ++ + <p>No data available</p> + <p>Brak danych<p> + + +- ++ + please wait for sorting to finish and try again + proszę poczekać za zakończenie sortowania i spróbować ponownie + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + destroying media player + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- +- ++ ++ + running + + + +- +- ++ ++ + Play tagged - %p% + Graj w zaznaczone - %p% + + +- ++ + Add favorites - %p% + Dodaj do ulubionych - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + proszę poczekać na zakończenie bieżącej aktywności i spróbować ponownie (ta operacja wsadowa może działać jedynie samodzielnie) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + Narzędzie ROM-ów (zaznaczone) - %p% + + +- +- ++ ++ + Tag - %p% + Ustawianie zaznaczenia - %p% + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + Usuwanie zaznaczenia - %p% + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + Odwracanie zaznaczenia - %p% + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Szczegóły oprogramowania + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -11718,166 +11718,166 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + Sprawdź ścieżkę ROM-ów + + +- ++ + processing global emulator configuration + przetwarzanie globalnej konfiguracji emulatora + + +- +- ++ ++ + Export global MAME configuration + Eksportuj globalną konfigurację MAME + + +- ++ + Import from... + Importuj z... + + +- +- ++ ++ + Import global MAME configuration + Importuj globalną konfigurację MAME + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + <ścieżka ini>/mame.ini + + + +- ++ + Embedded emulators + Osadzone emulatory + + +- ++ + Release emulator + Uwolnij emulator + + +- ++ + WARNING: no matching window for emulator #%1 found + UWAGA: nie znaleziono okna odpowiadającego emulatorowi #%1 + + +- ++ + Embedding failed + Osadzanie nie powiodło się + + +- +- ++ ++ + Scanning pause key + Skanowanie klawisza pauzy + + +- +- ++ ++ + Choose export file + Wybierz plik eksportu + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Wszystkie pliki (*) + + +- +- ++ ++ + Choose import file + Wybierz plik importu + + +- +- ++ ++ + WARNING: invalid inipath + UWAGA: nieprawidłowa ścieżka ini + + +- +- ++ ++ + stopping current processing upon user request + zatrzymywanie bieżącego przetwarzania na żądanie użytkownika + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Twoje zmiany konfiguracji nie zostały jeszcze zastosowane. + Na pewno zakończyć? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Pozostało jeden lub więcej uruchomionych emulatorów. + Czy mają być zabite przy wyjściu? + + +- ++ + There are one or more running downloads. Quit anyway? + Jedno lub więcej pobierań wciąż jest aktywnych. Zakończyć mimo wszystko? + + +- ++ + cleaning up + czyszczenie + + +- ++ + aborting running downloads + przerywanie aktywnych pobierań + + +- ++ + saving main widget layout + zapisywanie układu widżeta głównego + + +- ++ + disconnecting audio source from audio sink + odzłączanie źródła dźwięku od wyśjścia + + +- ++ + destroying YouTube video widget + niszczenie widżetu filmu YouTube + + +- ++ + destroying process manager + niszczenie zarządcy procesów + + +- ++ + destroying network access manager + niszczenie zarządcy dostępu do sieci + + +- ++ + so long and thanks for all the fish + cześć, i dzięki za ryby + + +- ++ + killing %n running emulator(s) on exit + + zabijanie %n uruchomionego emulatora przy wyjściu +@@ -11886,7 +11886,7 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + keeping %n running emulator(s) alive + + pozostawianie %n uruchomionego emulatora przy życiu +@@ -11895,13 +11895,13 @@ Czy mają być zabite przy wyjściu? + + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + proszę poczekać, aż ROMAlyzer skończy bieżącą analizę i spróbować ponownie + +@@ -11915,32 +11915,32 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- +- ++ ++ ++ ++ + Name + Nazwa + + +- ++ + Are you sure you want to clear the favorites list? + Czy na pewno chcesz wyczyścić listę ulubionych? + + +- ++ + Are you sure you want to clear the play history? + Czy na pewno chcesz wyczyścić historię gier? + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Brak dostępnych danych + +@@ -11970,10 +11970,10 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Rodzaje ROM-ów + +@@ -11982,10 +11982,10 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- +- ++ ++ ++ ++ + Players + Gracze + +@@ -11994,9 +11994,9 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- ++ ++ ++ + Category + Kategoria + +@@ -12005,9 +12005,9 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- ++ ++ ++ + Version + Wersja + +@@ -12100,7 +12100,7 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + &Notes + No&tatki + +@@ -12154,9 +12154,9 @@ Czy mają być zabite przy wyjściu? + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms w sumie) + +@@ -12224,62 +12224,62 @@ Czy mają być zabite przy wyjściu? + Polecenie + + +- +- +- ++ ++ ++ + paused + wstrzymany + + +- +- ++ ++ + Copy emulator command line to clipboard + Skopiuj wiersz poleceń emulatora do schowka + + +- +- ++ ++ + &Copy command + S&kopiuj polecenie + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Uruchom wybraną maszynę (osadzając) + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + +@@ -12356,7 +12356,7 @@ Czy mają być zabite przy wyjściu? + Przewijaj do przodu w ramach ścieżki + + +- ++ + Select one or more audio files + Wybierz jeden lub więcej plików dźwiękowych + +@@ -12385,7 +12385,7 @@ Czy mają być zabite przy wyjściu? + Pogłaśniaj i sciszaj przy wstrzymaniu / wznowieniu + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + odtwarzacz dźwięku: informacje o ścieżce: tytuł = '%1', wykonawca = '%2', album = '%3', gatunek = '%4' + +@@ -12489,104 +12489,104 @@ Czy mają być zabite przy wyjściu? + Toggle full screen / windowed mode + Przełącz pomiędzy trybem pełnoekranowym a oknem + ++ ++ ++ ++ ++ ++ Set tab position north ++ Ustaw położenie kart na północ ++ ++ ++ ++ ++ ++ ++ &North ++ &Północ ++ + + + + + +- Set tab position north +- Ustaw położenie kart na północ ++ Set tab position south ++ Ustaw położenie kart na południe + + + + + + +- &North +- &Północ ++ &South ++ P&ołudnie + + + + + + +- Set tab position south +- Ustaw położenie kart na południe ++ Set tab position west ++ Ustaw położenie kart na zachód + + + + + + +- &South +- P&ołudnie ++ &West ++ &Zachód + + + + + + +- Set tab position west +- Ustaw położenie kart na zachód ++ Set tab position east ++ Ustaw położenie kart na wschód + + + + + + +- &West +- &Zachód +- +- +- +- +- +- +- Set tab position east +- Ustaw położenie kart na wschód ++ &East ++ &Wschód + + + + + + +- &East +- &Wschód +- +- +- +- +- +- + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + +@@ -12611,7 +12611,7 @@ Czy mają być zabite przy wyjściu? + Ekran &tytułowy + + +- ++ + freed %n byte(s) in %1 + + uwolniono %n bajt w %1 +@@ -12620,7 +12620,7 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + %n entry(s) + + %n wpis +@@ -12634,7 +12634,7 @@ Czy mają być zabite przy wyjściu? + Ctrl+M + + +- ++ + removed %n byte(s) in %1 + + usunięto %n bajt w %1 +@@ -12643,7 +12643,7 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + %n file(s) + %n plików + +@@ -12682,23 +12682,23 @@ Czy mają być zabite przy wyjściu? + Zatrzymaj wybrane pobierania + + +- ++ + Choose file to store download + Wybierz plik do zapisania pobierania + + +- ++ + loading style sheet '%1' + ładowanie arkusza stylu '%1' + + +- ++ + removing current style sheet + usuwanie bieżącego arkusza stylu + + +- +- ++ ++ + last message repeated %n time(s) + + ostatnia wiadomość powtarza się %n raz +@@ -12707,17 +12707,17 @@ Czy mają być zabite przy wyjściu? + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Włącz/wyłącz automatyczne pauzowanie osadzonych emulatorów (przytrzymaj aby pokazać menu) + + +- ++ + Scan the pause key used by the emulator + Skanuj klawisz pauzujący emulator + + +- ++ + Scan pause key... + Skanowanie klawisza pauzy... + +@@ -12728,58 +12728,58 @@ Czy mają być zabite przy wyjściu? + Wyczyść bufor ProjectMESS + + +- ++ + Default configuration + Domyślna konfiguracja + + +- ++ + ProjectMESS in-memory cache cleared (%1) + Wyczyszczono pamięciowy bufor ProjectMESS (%1) + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + Strona ProjectMESS dla systemu '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Pobieranie strony ProjectMESS dla systemu '%1', proszę czekać... + + +- ++ + Emulator for this machine + + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + Przełącz opcje osadzacza (przytrzymaj dla menu) + + +- ++ + To favorites + Do ulubionych + + +- ++ + Kill emulator + Usuń emulator + + +- ++ + &Kill emulator + &Usuń emulator + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12790,57 +12790,57 @@ liczby emulatorów w sensownym czasie. + Ponowić próbę osadzania? + + +- ++ + Information + Informacja + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Przykro mi, w międzyczasie emulator zginął bolesną śmiercią :(. + + +- ++ + destroying audio effects dialog + niszczenie okna dialogowego efektów dźwięku + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + Welcome to QMC2 v%1! + Witamy w QMC2 w wersji %1! + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + YouTube index - %p% + Indeks YouTube - %p% + + +- ++ + %n video info record(s) loaded + + załadowano %n rekord informacji o filmie +@@ -12849,34 +12849,34 @@ Ponowić próbę osadzania? + + + +- ++ + Add URL + Dodaj adres URL + + +- ++ + Enter valid MP3 stream URL: + Wprowadź poprawny adres URL strumienia MP3: + + +- ++ + Buffering %p% + Buforowanie %p% + + +- ++ + emulator #%1 is already embedded + emulator #%1 jest już osadzony + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + UWAGA: znaleziono wiele okien dla emulatora #%1, wybrano okno o ID %2 do osadzenia + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + osadzanie emulatora #%1, ID okna = %2 + +@@ -13038,14 +13038,12 @@ Ponowić próbę osadzania? + + + +- + Go back + Idź wstecz + + + + +- + Go forward + Idź naprzód + +@@ -13063,8 +13061,8 @@ Ponowić próbę osadzania? + + + +- +- ++ ++ + Enter search string + Wpisz szukany ciąg + +@@ -13124,88 +13122,28 @@ Ponowić próbę osadzania? + Idź do strony domowej (pierwszej) + + +- ++ + Enter URL + Wpisz URL + + +- +- Open link +- Otwórz element docelowy +- +- +- +- Open link in new window +- Otwórz odnośnik w nowym oknie +- +- +- +- Open image in new window +- Otwórz obrazek w nowym oknie +- +- +- +- Save link as... +- Zapisz element docelowy jako... +- +- +- +- Copy link +- Kopiuj adres odnośnika +- +- +- +- Save image as... +- Zapisz obraz jako... +- +- +- +- Copy image +- Kopiuj adres obrazka +- +- +- +- Copy image address +- Kopiuj adres obrazka +- +- +- +- Reload +- Odśwież +- +- +- +- Stop +- Zatrzymaj +- +- +- +- Copy +- Skopiuj +- +- +- +- Inspect +- Zbadaj +- +- +- ++ + WARNING: invalid network reply and/or network error + UWAGA: niepoprawna odpowiedź sieci lub błąd sieci + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + MiniWebBrowser + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + + +@@ -13349,2044 +13287,2039 @@ Ponowić próbę osadzania? + &GUI + + +- ++ + Application language + Język aplikacji + + +- +- DE (German) +- DE (niemiecki) +- +- +- +- US (English) +- US (angielski) +- +- +- ++ + Language + Język + + +- ++ + Image cache size in MB + Rozmiar bufora obrazów w MB + + +- ++ + MB + MB + + +- ++ + Image cache size + Rozmiar bufora obrazów + + +- ++ + Application font + Czcionka aplikacji + + +- ++ + Show short description of current processing in progress bar + Pokaż krótkie opisy bieżącego przetwarzania w pasku postępu + + +- ++ + Smooth image scaling (nicer, but slower) + Wygładzone skalowanie obrazów (ładniejsze, ale wolniejsze) + + +- ++ + Smooth scaling + Wygładzone skalowanie + + +- ++ + Retry loading images which weren't found before? + Spróbować ponownie wczytać nieznalezione wcześniej obrazy? + + +- ++ + Retry loading images + Spróbuj ponownie wczytać obrazy + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + Skaluj obraz do rozmiaru ramki (w przeciwnym wypadku użyj oryginalnego rozmiaru) + + +- ++ + Scaled preview + Skalowany podgląd + + +- ++ + Use standard or custom color palette? + Użyć palety kolorów standardowej czy użytkownika? + + +- ++ + Scaled flyer + Skalowana ulotka + + +- ++ + GUI style + Styl GUI + + +- ++ + Application font (= system default if empty) + Czcionka aplikacji (= domyślna systemowa jeśli puste) + + +- ++ + Browse application font + Wskaż czcionkę aplikacji + + +- +- ++ ++ + F&iles / Directories + Pl&iki / Katalogi + + +- ++ + Browse frontend data directory + Wskaż katalog danych interfejsu + + +- ++ + Frontend data directory (read) + Katalog danych interfejsu (odczyt) + + +- ++ + Data directory + Katalog danych + + +- +- +- ++ ++ ++ + Icon directory + Katalog ikon + + +- +- +- ++ ++ ++ + Flyer directory + Katalog ulotek + + +- +- +- ++ ++ ++ + Preview directory + Katalog podglądów + + +- ++ + Browse ROM state cache file + Wskaż plik bufora stanów ROM-ów + + +- ++ + ROM state cache file (write) + Plik bufora stanów ROM-ów (zapis) + + +- ++ + ROM state cache + Bufor stanów ROM-ów + + +- ++ + Play history file (write) + Plik historii gier (zapis) + + +- ++ + Favorites file + Plik ulubionych + + +- ++ + Play history file + Plik historii gier + + +- ++ + Browse play history file + Wskaż plik historii gier + + +- ++ + Icon directory (read) + Katalog ikon (odczyt) + + +- ++ + Browse icon directory + Wskaż katalog ikon + + +- ++ + Flyer directory (read) + Katalog ulotek (odczyt) + + +- ++ + Browse flyer directory + Wskaż katalog ulotek + + +- ++ + Preview directory (read) + Katalog podglądów (odczyt) + + +- ++ + Browse preview directory + Wskaż katalog podglądów + + +- ++ + Auto-trigger ROM check + Auto-uruchamianie sprawdzania ROM-ów + + +- ++ + Update delay + Opóźnienie aktualizacji + + +- ++ + immediate + natychmiastowe + + +- ++ + ms + ms + + +- ++ + Responsiveness + Reakcja + + +- ++ + Select sort order + Wybierz porządek sortowania + + +- ++ + Ascending + Rosnący + + +- ++ + Descending + Malejący + + +- ++ + Select sort criteria + Wybierz kryterium sortowania + + +- ++ + ROM state + Stan ROM-u + + +- ++ + Year + Rok + + +- ++ + Manufacturer + Producent + + +- ++ + Sort order + Porządek sortowania + + +- ++ + Sort criteria + Kryterium sortowania + + +- ++ + ROM state filter + Filtr stanu ROM-ów + + +- ++ + Show ROM state C (correct)? + Pokazać stan ROM-ów P (poprawny)? + + +- ++ + Show ROM state M (mostly correct)? + Pokazać stan ROM-ów Wp (w większości poprawny)? + + +- ++ + Show ROM state I (incorrect)? + Pokazać stan ROM-ów Np (niepoprawny)? + + +- ++ + Show ROM state N (not found)? + Pokazać stan ROM-ów Nz (nieznaleziony)? + + +- ++ + Show ROM state U (unknown)? + Pokazać stan ROM-ów Nn (nieznany)? + + +- ++ + &Shortcuts / Keys + &Skróty / Klawisze + + +- ++ + Reset key sequence to default + Zresetuj sekwencję klawiszy do domyślnej + + +- ++ + Reset + Zresetuj + + +- +- ++ ++ + Redefine key sequence + Redefiniuj sekwencję klawiszy + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + Definicje skrótów aktywnych; kliknij podwójnie aby redefiniować sekwencję klawiszy + + +- ++ ++ + +- +- +- ++ ++ + Default + Domyślny + + +- ++ + Custom + Użytkownika + + +- ++ + Zip tool + Narzędzie zip + + +- ++ + Browse for zip tool + Wskaż narzędzie zip + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + Parametr narzędzia zip do usunięcia wpisów z archiwum ZIP (np. "$ARCHIVE$ -d $FILELIST$") + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + Parametry + + +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- <font size="-1"><b>UWAGA: zapisane hasła są <u>słabo</u> zaszyfrowane!</b></font> +- +- +- ++ + E&mulator + E&mulator + + +- ++ + &Global configuration + &Globalna konfiguracja + + +- ++ + Browse emulator log file + Wskaż plik dziennika emulatora + + +- ++ + Emulator log file (write) + Plik dziennika emulatora (zapis) + + +- ++ + Emulator log file + Plik dziennika emulatora + + +- +- ++ ++ + Browse emulator executable file + Wskaż plik wykonywalny emulatora + + +- +- ++ ++ + Executable file + Plik wykonywalny + + +- ++ + Browse options template file + Wskaż plik szablonu opcji + + +- ++ + Options template file (read) + Plik szablonu opcji (odczyt) + + +- +- EL (Greek) +- EL (grecki) +- +- +- +- PT (Portuguese) +- PT (portugalski) +- +- +- ++ + Show progress texts + Pokazuj teksty postępu + + +- ++ + Scaled PCB + Skalowana płytka drukowana + + +- ++ + Style sheet + Arkusz stylu + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + Plik arkusza stylu Qt (*.qss, proszę zostawić pusty dla żadnego) + + +- ++ + Browse Qt style sheet file + Wskaż plik arkusza stylu Qt + + +- ++ + Log font + Czcionka dziennika + + +- ++ + Font used in logs (= application font if empty) + Czcionka używana w dziennikach (taka sama jak aplikacji jeśli puste) + + +- ++ + Browse font used in logs + Wskaż czcionkę używaną w dziennikach + + +- ++ + PCB directory (read) + Katalog płytek drukowanych (odczyt) + + +- ++ + Browse PCB directory + Wskaż katalog płytek drukowanych + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + Włącz korzystanie z catver.ini -- najnowszą wersję można pobrać z http://www.progettoemma.net/?catlist + + +- ++ + Use catver.ini + Używaj catver.ini + + +- ++ + Path to catver.ini (read) + Ścieżka do catver.ini (odczyt) + + +- ++ + Browse path to catver.ini + Wskaż ścieżkę do catver.ini + + +- ++ + ROM types + Rodzaje ROM-ów + + +- ++ + SW snap position + Położenie zrzutu ekranu oprogramowania + + +- ++ + Above / Left + Na górze / z lewej + + +- ++ + Above / Center + Na górze / pośrodku + + +- ++ + Above / Right + Na górze / z prawej + + +- ++ + Below / Left + Na dole / z lewej + + +- ++ + Below / Center + Na dole / pośrodku + + +- ++ + Below / Right + Na dole / z prawej + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + Katalog używany przez konfigurator urządzeń MESS jako domyślny folder oprogramowania (jeżeli istnieje podfolder nazwany jak bieżąca maszyna, będzie on wybrany w zamian) + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + Uruchamiaj emulację bezpośrednio po aktywacji elementu w liście wyników wyszukiwania, ulubionych bądź granych (zamiast przeskakiwać do listy głównej) + + +- +- +- ++ ++ ++ + SW snap folder + Katalog zrzutów ekranu oprogramowania + + +- ++ + Software snap-shot directory (read) + Katalog zrzutów ekranu oprogramowania (odczyt) + + +- ++ + Browse software snap-shot directory + Wskaż katalog zrzutów ekranu oprogramowania + + +- ++ + Players + Gracze + + +- ++ + Play on sub-list activation + Graj po aktywacji w listach podległych + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + Wybór pozycji kursora używanej przez QMC2 podczas automatycznego przewijania do bieżącego elementu (to ustawienie ma zastosowanie do wszystkich widoków i list!) + + +- ++ + Visible + Widoczny + + +- ++ + Top + Góra + + +- ++ + Bottom + Dół + + +- ++ + Center + Środek + + +- ++ + Cursor position + Pozycja kursora + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + Używaj wspólnego paska narzędzi i tytułowego pod Mac OS X + + +- ++ + Unify with title + Wspólnie z tytułem + + +- ++ + Minimize when launching emulators? + Minimalizacja podczas uruchamiania emulatorów? + + +- ++ + Minimize on emulator launch + Minimalizuj uruchamiając emulator + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + Ukrywanie wszystkich wiadomości przesyłanych za pomocą klasy QDebug bądź funkcji qDebug(), qCritical(), qWarning() czy też qFatal() + + +- ++ + Suppress Qt messages + Ukrywanie wiadomości Qt + + +- ++ + Show splash screen when starting up? + Pokazywać ekran tytułowy podczas uruchamiania? + + +- ++ + Show splash screen + Pokazuj ekran tytułowy + + +- ++ + Software notes folder + Folder notatek o oprogramowaniu + + +- ++ + Folder used to store personal notes about any software titles (write) + Folder używany do zapisu osobistych notatek o oprogramowaniu (zapis) + + +- ++ + Browse software notes folder + Wskaż folder notatek o oprogramowaniu + + +- ++ + Tag + Zaznaczenie + + +- ++ + Driver status + Stan sterownika + + +- ++ + Display ROM status icons in master lists? + Wyświetlać ikony stanów ROM-ów na listach głównych? + + +- ++ + Show ROM status icons + Pokazać ikony stanów ROM-ów + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + Wybierz pozycję na której w ramach listy oprogramowania są wyświetlane zrzuty ekranu + + +- ++ + Disable snaps + Bez zrzutów + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + Wyświetlanie zrzutów ekranu oprogramowania po najechaniu kursorem na listę oprogramowania + + +- ++ + Enable ROM state filtering? + Włączyć filtrowanie stanu ROM-ów? + + +- +- ES (Spanish) +- ES (hiszpański) +- +- +- +- IT (Italian) +- IT (włoski) +- +- +- +- RO (Romanian) +- RO (rumuński) +- +- +- +- SV (Swedish) +- SV (szwedzki) +- +- +- ++ + Customize the tool-bar + Dostosuj pasek narzędzi + + +- ++ + Tool-bar... + Pasek narzędzi... + + +- ++ + Force QMC2's working directory to be the same as the executable's path + Wymuś, aby katalog roboczy QMC2 był taki sam jak pliku wykonywalnego + + +- ++ + Set working directory from executable + Katalog roboczy na podstawie pliku wykonywalnego + + +- ++ + Default palette + Domyślna paleta + + +- ++ + Edit the color palette + Edycja palety kolorów + + +- ++ + Edit color palette... + Edycja palety kolorów... + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + Używanie systemowych (natywnych) okien dialogowych, w przeciwnym wypadku są używane wbudowane okna Qt. + + +- ++ + Compressed cabinet file (read) + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + 7z + + +- ++ + Browse compressed cabinet file + + + +- ++ + Compressed controller file (read) + + + +- ++ + Browse compressed controller file + + + +- ++ + Compressed marquee file (read) + + + +- ++ + Browse compressed marquee file + + + +- ++ + Switch between specifying a title directory or a compressed title file + + + +- ++ + MAME emulator information database - mameinfo.dat (read) + + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a preview directory or a compressed preview file + + + +- ++ + Compressed preview file (read) + + + +- ++ + Browse compressed preview file + + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + + + +- ++ + Compressed flyer file (read) + + + +- ++ + Browse compressed flyer file + + + +- ++ + Switch between specifying an icon directory or a compressed icon file + + + +- ++ + Compressed icon file (read) + + + +- ++ + Browse compressed icon file + + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + + + +- ++ + Switch between specifying a controller directory or a compressed controller file + + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + + + +- ++ + Compressed title file (read) + + + +- ++ + Browse compressed title file + + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + + + +- ++ + Compressed PCB file (read) + + + +- ++ + Browse compressed PCB file + + + +- ++ + Compressed software snap-shot file (read) + + + +- ++ + Browse compressed software snap-shot file + + + +- ++ + Load MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + + + +- ++ + Enable the use of a template for (empty) software notes + Korzystanie z szablonu do (pustych) notatek o oprogramowaniu + + +- ++ + Software notes template + Szablon notatek o oprogramowaniu + + +- ++ + HTML file used as a template for software-notes (read) + Plik HTML używany jako szablon notatek o oprogramowaniu (odczyt) + + +- ++ + Browse software notes template + Wskaż szablon notatek o oprogramowaniu + + +- ++ + Enable the use of category.ini + Włącz korzystanie z category.ini + + +- ++ + Use category.ini + Używaj category.ini + + +- ++ + Path to category.ini (read) + Ścieżka do category.ini (odczyt) + + +- ++ + Browse path to category.ini + Wskaż ścieżkę do category.ini + + +- ++ + System notes folder + Folder notatek o systemie + + +- ++ + Enable the use of a template for (empty) system notes + Korzystanie z szablonu do (pustych) notatek o systemie + + +- ++ + System notes template + Szablon notatek o systemie + + +- ++ + HTML file used as a template for system-notes (read) + Plik HTML używany jako szablon notatek o systemie (odczyt) + + +- ++ + Folder used to store personal notes about any systems (write) + Folder używany do zapisu osobistych notatek o systemie (zapis) + + +- ++ + Browse system notes folder + Wskaż folder notatek o systemie + + +- ++ + Browse system notes template + Wskaż szablon notatek o systemie + + +- ++ + Load software information database (from history.dat) + Ładuj bazę danych informacji o historii (z history.dat) + + +- ++ + Software information database - history.dat (read) + Baza danych informacji o oprogramowaniu - history.dat (odczyt) + + +- ++ + Browse software information database (history.dat) + Wskaż bazę danych informacji o oprogramowaniu (history.dat) + + +- ++ + Define additional artwork classes for systems and software-list entries + Definicja dodatkowych typów + + +- ++ + Set up additional artwork classes... + + + +- ++ + Choose active image formats and their priorities (per artwork class) + + + +- ++ + Select image formats... + + + +- ++ + Load MESS emulator information database (messinfo.dat) + + + +- ++ + MESS emulator information database - messinfo.dat (read) + + + +- ++ + Show machine's description at the bottom of any images + + + +- ++ + Show machine name + + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + + + +- ++ + Parent image / video fallback + + + +- ++ + Open the component setup dialog + + + +- ++ + Component setup... + + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + + + +- ++ + Restore saved machine selection at start and after reloading the machine list + + + +- ++ + Restore machine selection + + + +- ++ + Show vertical machine status indicator in machine details + + + +- ++ + Machine status indicator + + + +- ++ + Save machine selection on exit and before reloading the machine list + + + +- ++ + Save machine selection + + + +- ++ + Show animation when loading, filtering or tagging the machine list? + + + +- ++ + Show loading animation + + + +- ++ + Scaled software snapshot + + + +- ++ + Select individual fallback settings per artwork class + + + +- ++ + Individual fallback settings... + + + +- ++ + Import MAME machine information to DAT-info database + + + +- ++ + Browse machine favorites file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + + + +- ++ + MAME machine information database - history.dat (read) + + + +- ++ + Browse MESS emulator information database (messinfo.dat) + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + + + +- ++ + Machine favorites file (write) + + + +- ++ + Load MAME machine information database (history.dat) + + + +- ++ + Machine info (MAME) + + + +- ++ + Browse MAME machine information database (history.dat) + + + +- ++ + Video snap folder + + + +- ++ + Video snap folder (read) + + + +- ++ + Browse video snap folder + + + +- ++ + Optimize catver.ini for faster loading + + + +- ++ + Setup the icon cache database + + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + Automatyczne wyłączanie zrzutów ekranu oprogramowania kiedy szczegóły są widoczne (może być irytujące) + + +- ++ + No SW snaps for visible details + Brak zrzutów ekranu oprogramowania przy widocznych szczegółach + + +- ++ + Machine description + + + +- ++ + Machine name + + + +- ++ + Source file + Plik źródłowy + + +- ++ + Rank + + + +- ++ + Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) + + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + Ustaw domyślny tryb uruchamiania (oddzielne okno lub osadzanie) używane, gdy emulacja jest uruchamiana poprzez aktywację wpisu na dowolnej liście + + +- ++ + independent + oddzielne okno + + +- ++ + embedded + osadzanie + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + + + +- ++ + Default launch-mode + Domyślny tryb uruchamiania + + +- ++ + Display (or hide) device sets in master lists? + Pokazywać (czy ukrywać) zestawy urządzeń na głównych listach? + + +- ++ + Show device sets + Pokaż zestawy urządzeń + + +- ++ + Display (or hide) BIOS sets in master lists? + Pokazywać (czy ukrywać) BIOS-y na głównych listach? + + +- ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) ++ ++ ++ ++ ++ pt_BR (Brazilian Portuguese) ++ ++ ++ ++ ++ ro (Romanian) ++ ++ ++ ++ ++ sv (Swedish) ++ ++ ++ ++ ++ us (American English) ++ ++ ++ ++ + Show BIOS sets + Pokaż BIOS-y + + +- ++ + ROM tool + Narzędzie do obsługi ROM-ów + + +- ++ + External ROM tool (it's completely up to you...) + Zewnętrzne narzędzie do obsługi ROM-ów (masz wolny wybór...) + + +- ++ + Browse ROM tool + Wskaż narzędzie do obsługo ROM-ów + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + Lista parametrów narzędzia do obsługi ROM-ów (np. "$ID$ $DESCRIPTION$") + + +- ++ + Browse working directory of the ROM tool + Wskaż katalog roboczy narzędzia ROM-ów + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + Kopiowanie wyjścia narzędzia do dziennika interfejsu (w celu debugowania) + + +- ++ + Copy tool output to front end log + Kopiuj wyjście narzędzia do dziennika interfejsu + + +- ++ + Automatically close the tool-executor dialog when the external process finished + Automatyczne zamykanie okna dialogowego wykonawcy narzędzia po zakończeniu zewnętrznego procesu + + +- ++ + Close dialog automatically + Zamknij okno dialogowe automatycznie + + +- ++ + Browser settings + Ustawienia przeglądarki + + +- ++ + Browse cookie database + Wskaż bazę danych ciasteczek + + +- ++ + Cookie database file (write) + Baza danych ciasteczek (zapis) + + +- ++ + Cookie database + Baza danych ciasteczek + + +- ++ + Save and restore cookies used on web pages? + Zapisywać i przywracać ciasteczka używane na stronach internetowych? + + +- ++ + Remove all cookies by recreating the database + Usuń wszystkie ciasteczka tworząc bazę danych od nowa + + +- ++ + 7-zip tool + + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + + + +- ++ + Browse for 7-zip tool + + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + + + +- ++ + Options template file + Plik szablonu opcji + + +- ++ + Clean up user data database (removes obsolete entries) + + + +- ++ + Software state cache + + + +- ++ + Directory used to store individual state cache files for each software-list (write) + + + +- ++ + Browse software state cache directory + + + +- ++ + XML cache database + + + +- ++ + Database file for caching the output from -listxml (write) + + + +- ++ + Browse XML cache database file + + + +- ++ + User data database + + + +- ++ + Database file for storing/retrieving user data (write) + + + +- ++ + Browse user data database file + + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + Wskazuje, czy $ID$ brakuje w podanym wierszu polecenia (żółty) czy nie (zielony) + + +- ++ + Replace + Zastąp + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + Parametry przekazywane do emulatora -- użyj $ID$ jako nazwy zestawu, $DESCRIPTION$ dla jego opisu + + +- +- +- +- ++ ++ ++ ++ + Working directory + Katalog roboczy + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + Katalog roboczy używany podczas pracy emulatora (jeśli pusty, będzie używany bieżący katalog roboczy QMC2) + + +- +- ++ ++ + Browse working directory + Wskaż katalog roboczy + + +- ++ + General software folder + Ogólny folder oprogramowania + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + Katalog roboczy używany podczas pracy narzędzi do obsługi ROM-ów (jeśli puste, używany jest bieżący katalog roboczy QMC2) + + +- ++ + Software list cache DB + + + +- ++ + Browse software list cache database file + + + +- ++ + Browse general software folder + Wskaż ogólny folder oprogramowania + + +- ++ + Database file for caching the ouput from -listsoftware (write) + + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + + + +- ++ + Name + Nazwa + + +- ++ + Executable + Plik wykonywalny + + +- ++ + Custom IDs + Niestandardowe ID + + +- ++ + Register emulator + Zarejestruj emulator + + +- ++ + Add + + + +- ++ + Deregister emulator + Wyrejestruj emulator + + +- ++ + Registered emulator's name + Nazwa zarejestrowanego emulatora + + +- ++ + Command to execute the emulator (path to the executable file) + Komenda uruchamiająca emulator (ścieżka do pliku wykonywalnego) + + +- ++ + Replace emulator registration + Zastąp rejestrację emulatora + + +- ++ + Use native file dialogs + + + +- ++ + Network / &Tools + Sieć / &Narzędzia + + +- ++ + Restore cookies + Przywracaj ciasteczka + + +- ++ + Manage cookies stored in database + Zarządzaj ciasteczkami przechowywanymi w bazie danych + + +- ++ + Manage stored cookies + Zarządzaj zapisanymi ciasteczkami + + +- ++ + Clear database + Wyczyść bazę danych + + +- ++ + Recreate user data database (removes <b>all</b> entries) + + + +- ++ + Foreign &emulators + + + +- ++ + Icon + Ikona + + +- ++ + Emulator name + Nazwa emulatora + + +- ++ + Remove + Usuń + + +- ++ + Machine list cache + + + +- ++ + Browse machine list cache file + + + +- ++ + Machine list cache file (write) + + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + + + +- ++ + Machine list database + + + +- ++ + Machine list database file (write) + + + +- ++ + Browse machine list database file + + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + + + +- ++ + Apply settings + Zastosuj ustawienia + + +- ++ + &Apply + &Zastosuj + + +- ++ + Restore currently applied settings + Przywróć bieżąco zastosowane ustawienia + + +- ++ + &Restore + &Przywróć + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + Zresetuj do ustawień domyślnych (kliknij <i>Przywróć</i> aby przywrócić bieżąco zastosowane ustawienia!) + + +- ++ + &Default + &Domyślne + + +- ++ + Close and apply settings + Zamknij i zastosuj ustawienia + + +- ++ + &Ok + &Ok + + +- ++ + Close and discard changes + Zamknij i porzuć zmiany + + +- ++ + &Cancel + &Anuluj + + +- ++ + Check all ROM states + Sprawdź stany wszystkich ROM-ów + + +- ++ + About QMC2 + O QMC2 + + +- ++ + Online documentation + Dokumentacja on-line + + +- ++ + Clear image cache + Wyczyść bufor obrazów + + +- ++ + Clear icon cache + Wyczyść bufor ikon + + +- +- ++ ++ + Open options dialog + Otwórz okno dialogowe opcji + + +- ++ + About Qt + O Qt + + +- ++ + Check states of tagged ROMs + Sprawdź stan zaznaczonych ROM-ów + + +- ++ + Recreate template map + Odtwórz mapę szablonu + + +- ++ + Check template map + Sprawdź mapę szablonu + + +- +- ++ ++ + Stop processing / exit QMC2 + Zatrzymaj przetwarzanie / wyjdź z QMC2 + + +- ++ + Clear YouTube cache + Wyczyść bufor YouTube + + +- ++ + Tag current set + Zaznacz bieżący zestaw + + +- ++ + Untag current set + Odznacz bieżący zestaw + + +- ++ + Toggle tag mark + Odwróć zaznaczenie + + +- ++ + Toggle tag / cursor down + Odwróć zaznaczenie / kursor w dół + + +- ++ + Toggle tag / cursor up + Odwróć zaznaczenie / kursor w górę + + +- ++ + Tag all sets + Zaznacz wszystkie zestawy + + +- ++ + Untag all sets + Odznacz wszystkie zestawy + + +- ++ + Invert all tags + Odwróć wszystkie zaznaczenia + + +- ++ + Tag visible sets + Zaznacz widoczne zestawy + + +- ++ + Untag visible sets + Odznacz widoczne zestawy + + +- ++ + Invert visible tags + Odwróć zaznaczenie widocznych + + +- ++ + Full detail view + + + +- +- +- +- ++ ++ ++ ++ + Category view + + + +- +- +- +- ++ ++ ++ ++ + Version view + + + +- ++ + Custom view + + + +- ++ + Run external ROM tool + Uruchom zewnętrzne narzędzie do obsługi ROM-ów + + +- ++ + Run ROM tool for tagged sets + Uruchom narzędzie obsługi ROM-ów dla zaznaczonych zestawów + + +- ++ + Plus (+) + Plus (+) + + +- ++ + Minus (-) + Minus (-) + + +- ++ + Cursor down + Kursor w dół + + +- ++ + End + End + + +- ++ + Escape + Escape + + +- ++ + Cursor left + Kursor w lewo + + +- ++ + Home + Home + + +- ++ + Page down + Page down + + +- ++ + Page up + Page up + + +- ++ + Enter key + Klawisz Enter + + +- ++ + Analyze current machine + + + +- ++ + Copy machine to favorites + + + +- ++ + Reload machine list + + + +- ++ + Check machine's ROM state + + + +- ++ + Rebuild current machine + + + +- ++ + Rebuild tagged machines + + + +- ++ + Hierarchical view + + + +- ++ + Cursor right + Kursor w prawo + + +- ++ + Tabulator + Tabulator + + +- ++ + Cursor up + Kursor w górę + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + UWAGA: konfiguracja nie jest zapisywalna, proszę sprawdzić uprawnienia dostępu dla + + +- +- ++ ++ + Reset to default font + Zresetuj do domyślnej czcionki + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- +- +- ++ + + + +@@ -15396,1113 +15329,1118 @@ Ponowić próbę osadzania? + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + + + +- ++ + image cache size set to %1 MB + rozmiar bufora obrazów ustawiony na %1 MB + + +- +- ++ ++ + Confirm + Potwierdź + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + + + +- ++ + &Local + &Lokalne + + +- ++ + &Overwrite + &Nadpisz + + +- ++ + Do&n't apply + &Nie zastosowuj + + +- ++ + ascending + rosnącym + + +- ++ + descending + malejącym + + +- ++ + sorting machine list by %1 in %2 order + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATALNIE: nie można otworzyć pliku ikony, proszę sprawdzić uprawnienia dostępu dla %1 + + +- ++ + libarchive error + + + +- ++ + triggering automatic reload of machine list + + + +- +- ++ ++ + Preview file + Plik podglądu + + +- +- ++ ++ + Flyer file + Plik ulotki + + +- +- ++ ++ + Icon file + Plik ikony + + +- +- ++ ++ + PCB file + Plik płytek drukowanych + + +- +- +- ++ ++ ++ + PCB directory + Katalog płytek drukowanych + + +- ++ + Choose Qt style sheet file + Wybierz plik arkusza stylu Qt + + +- ++ + Qt Style Sheets (*.qss) + Akrusze stylu Qt (*.qss) + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + Wszystkie pliki (*) + + +- ++ + Choose preview directory + Wybierz katalog podglądów + + +- ++ + Choose flyer directory + Wybierz katalog ulotek + + +- ++ + Choose icon directory + Wybierz katalog ikon + + +- ++ + Choose PCB directory + Wybierz katalog płytek drukowanych + + +- ++ + Choose options template file + Wybierz plik szablonu opcji + + +- +- ++ ++ + Choose emulator executable file + Wybierz plik wykonywalny emulatora + + +- ++ + Choose emulator log file + Wybierz plik dziennika emulatora + + +- ++ + Choose XML cache database file + + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + + + +- ++ + &Yes + + + +- ++ + &No + + + +- ++ + Choose user data database file + + + +- ++ + Choose zip tool + Wybierz narzędzie zip + + +- ++ + Choose 7-zip tool + + + +- ++ + Choose ROM tool + Wybierz narzędzie do obsługi ROM-ów + + +- ++ + Choose play history file + Wybierz plik historii gier + + +- ++ + Choose ROM state cache file + Wybierz plik bufora stanów ROM-ów + + +- +- +- ++ ++ ++ + Choose working directory + Wybierz katalog roboczy + + +- ++ + please reload machine list for some changes to take effect + + + +- +- +- ++ ++ ++ + Custom IDs... + Niestandardowe ID... + + +- ++ + Choose cookie database file + Wybierz plik bazy danych ciasteczek + + +- ++ + Choose software state cache directory + + + +- ++ + Choose general software folder + Wybierz ogólny folder oprogramowania + + +- ++ + Choose data directory + Wybierz katalog danych + + +- ++ + Choose MESS machine info DB + + + +- ++ + Choose MAME emulator info DB + + + +- ++ + Choose MESS emulator info DB + + + +- ++ + Choose software info DB + Wybierz bazę danych informacji o oprogramowaniu + + +- ++ + Choose catver.ini file + Wybierz plik catver.ini + + +- ++ + Choose category.ini file + Wybierz plik category.ini + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + + + +- ++ + Choose software snap directory + Wybierz katalog zrzutów ekranu oprogramowania + + +- ++ + Choose software notes folder + Wybierz folder notatek o oprogramowaniu + + +- ++ + Choose software notes template + Wybierz szablon notatek o oprogramowaniu + + +- +- ++ ++ + HTML files (*.html *.htm) + Pliki HTML (*.html *.htm) + + +- ++ + Choose system notes folder + Wybierz folder notatek o systemie + + +- ++ + Choose system notes template + Wybierz szablon notatek o systemie + + +- ++ + shortcut map is clean + mapa skrótów jest czysta + + +- ++ + WARNING: shortcut map contains duplicates + UWAGA: mapa skrótów zawiera duplikaty + + +- +- PL (Polish) +- PL (polski) +- +- +- ++ + External zip tool, i.e. "zip" (read and execute) + Zewnętrzne narzędzie zip, np. "zip" (odczyt i wykonanie) + + +- ++ + Emulator executable file (read and execute) + Plik wykonywalny emulatora (odczyt i wykonanie) + + +- +- FR (French) +- FR (francuski) +- +- +- ++ + Kill emulators when QMC2 exits? + + + +- ++ + Kill emulators on exit + + + +- ++ + Terminate all other emulator instances when launching a new one? + + + +- ++ + One emulator at a time + + + +- ++ + Load MESS machine information database (sysinfo.dat) + + + +- ++ + MESS machine information database - sysinfo.dat (read) + + + +- ++ + Browse MESS machine information database (sysinfo.dat) + + + +- ++ + Import MESS emulator information to DAT-info database + + + +- ++ + Import MAME emulator information to DAT-info database + + + +- ++ + Import MESS machine information to DAT-info database + + + +- ++ + DAT-info database file + + + +- ++ + Browse DAT-info database file + + + +- ++ + Browse system manual folder + + + +- ++ + DAT-info database file (write) + + + +- ++ + Machine info (MESS) + + + +- ++ + Emu info (MAME) + + + +- ++ + Emu info (MESS) + + + +- ++ + Software info + Informacje o oprogramowaniu + + +- ++ + Import software information to DAT-info database + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + &Joystick + Dżo&jstik + + +- ++ + Enable GUI control via joystick + Włącz kontrolowanie GUI za pomocą dżojstika + + +- ++ + Enable joystick control + Włącz kontrolowanie dżojstikiem + + +- ++ + Rescan available joysticks + Przeskanuj ponownie dostępne dżojstiki + + +- ++ + Rescan joysticks + Przeskanuj ponownie dżojstiki + + +- ++ + Select joystick + Wybierz dżojstik + + +- ++ + List of available joysticks - select the one you want to use for GUI control + Lista dostępnych dżojstików - wybierz ten, którego chcesz używać do kontrolowania GUI + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + Nie znaleziono dżojstików + + +- ++ + Joystick information and settings + Informacje o i ustawienia dżojstika + + +- ++ + Number of joystick axes + Liczba osi dżojstika + + +- +- +- +- ++ ++ ++ ++ + 0 + 0 + + +- ++ + Buttons: + Przyciski: + + +- ++ + Number of joystick buttons + Liczba przycisków dżojstika + + +- ++ + Hats: + Kapturki: + + +- ++ + Number of coolie hats + Liczba kapturków + + +- ++ + Trackballs: + Trackballe: + + +- ++ + Number of trackballs + Liczba trackballi + + +- ++ + Calibrate joystick axes + Skalibruj osie dżojstika + + +- ++ + Test all joystick functions + Przetestuj wszystkie funkcje dżojstika + + +- ++ + Axes: + Osie: + + +- ++ + Automatically repeat joystick functions after specified delay + Automatycznie powtórz funkcje dżojstika po podanym opóźnieniu + + +- ++ + Auto repeat after + Powtórz automatycznie po + + +- ++ + Repeat all joystick functions after how many milliseconds? + Powtarzać wszystkie funkcje dżojstika po ilu milisekundach? + + +- +- ++ ++ + ms + ms + + +- ++ + Event timeout + Czas oczekiwania zdarzeń + + +- ++ + Process joystick events after how many milliseconds? + Przetwarzać zdarzenia dżojstika po ilu milisekundach? + + +- +- ++ ++ + Function / Key + Funkcja / Klawisz + + +- ++ + Calibrate + Kalibruj + + +- ++ + Test + Testuj + + +- ++ + Map + Przypisz + + +- ++ + Remap + Przypisz ponownie + + +- ++ + Remove + Usuń + + +- ++ + Active joystick mappings; double-click to remap joystick function + Aktywne przypisania dżojstika, kliknij dwa razy aby ponownie przypisać funkcję dżojstika + + +- ++ + Joystick function + Funkcja dżojstika + + +- ++ + Map joystick functions to GUI functions + Przypisz funkcje dżojstika do funkcji GUI + + +- ++ + Remap a joystick function to the selected GUI function + Przypisz ponownie funkcję dżojstika do wybranej funkcji GUI + + +- ++ + Remove joystick mapping from selected GUI function + Usuń przypisanie dżojstika do wybranej funkcji GUI + + +- +- ++ ++ + SW snap file + Plik zrzutów ekranu oprogramowania + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + + + +- +- ++ ++ + Default icon + + + +- +- ++ ++ + No icon + + + +- ++ + N/A + + + +- ++ + &Foreign emulators + + + +- ++ + Choose machine favorites file + + + +- ++ + Choose machine list cache file + + + +- ++ + Choose machine list database file + + + +- ++ + Choose software list cache database file + + + +- ++ + Choose dat-info database file + + + +- ++ + Choose MAME machine info DB + + + +- ++ + Choose compressed preview file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + Wszystkie pliki + + +- ++ + Choose compressed flyer file + + + +- ++ + Choose compressed icon file + + + +- ++ + Choose compressed cabinet file + + + +- ++ + Choose compressed controller file + + + +- ++ + Choose compressed marquee file + + + +- ++ + Choose compressed title file + + + +- ++ + Choose compressed PCB file + + + +- ++ + Choose compressed software snap file + + + +- ++ + Choose video snap folder + + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + Choose image file + Wybierz plik obrazu + + +- ++ + Supported image files (%1) + + + +- ++ + ERROR: couldn't initialize SDL joystick support + BŁĄD: nie udało się zainicjować wsparcia dla dżojstika SDL + + +- ++ + joystick map is clean + mapa dżojstika jest czysta + + +- ++ + WARNING: joystick map contains duplicates + UWAGA: mapa dżojstika zawiera duplikaty + + +- ++ + please restart QMC2 for some changes to take effect + proszę zrestartować QMC2 aby niektóre zmiany mogły odnieść skutek + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + Opcja wymaga restartu QMC2 do odniesienia skutku + + +- ++ + restart required + wymagany restart + + +- +- +- ++ ++ ++ + reload required + wymagane przeładowanie + + +- ++ + none + brak + + +- +- ++ ++ + unlimited + nieograniczony + + +- +- ++ ++ + lines + linii + + +- ++ + Emulator log size + Rozmiar dziennika emulatora + + +- ++ + Maximum number of lines to keep in emulator log browser + Maksymalna liczba linii do zachowania w przeglądarce dziennika emulatora + + +- ++ + Previous track (audio player) + Poprzednia ścieżka (odtwarzacz dźwięku) + + +- ++ + Next track (audio player) + Następna ścieżka (odtwarzacz dźwięku) + + +- ++ + Fast backward (audio player) + Przewijanie wstecz (odtwarzacz dźwięku) + + +- ++ + Fast forward (audio player) + Przewijanie do przodu (odtwarzacz dźwięku) + + +- ++ + Stop track (audio player) + Zatrzymaj ścieżkę (odtwarzacz dźwięku) + + +- ++ + Pause track (audio player) + Wstrzymaj ścieżkę (odtwarzacz dźwięku) + + +- ++ + Play track (audio player) + Odtwarzaj ścieżkę (odtwarzacz dźwięku) + + +- ++ + Raise volume (audio player) + Zwiększ głośność (odtwarzacz dźwięku) + + +- ++ + Lower volume (audio player) + Zmniejsz głośność (odtwarzacz dźwięku) + + +- ++ + Export ROM Status + Eksportuj stan ROM-ów + + +- +- ++ ++ + Only when required + Tylko kiedy potrzeba + + +- ++ + Show the menu bar + Pokazuj pasek menu + + +- ++ + Show menu bar + Pokaż pasek menu + + +- +- ++ ++ + Show status bar + Pokaż pasek stanu + + +- +- ++ ++ + Show tool bar + Pokaż pasek narzędzi + + +- ++ + Toggle ROM state C + Przełącz stan ROM-ów P + + +- ++ + Toggle ROM state M + Przełącz stan ROM-ów Wp + + +- ++ + Toggle ROM state I + Przełącz stan ROM-ów Np + + +- ++ + Toggle ROM state N + Przełącz stan ROM-ów Nz + + +- ++ + Toggle ROM state U + Przełącz stan ROM-ów Nn + + +- ++ + Check for other instances of this QMC2 variant on startup + Sprawdź, czy nie ma innych instancji tego wariantu QMC2 podczas startu + + +- ++ + Check single instance + Sprawdź pojedynczą instancję + + +- ++ + Setup arcade mode + Ustawienia trybu salonowego + +@@ -16512,367 +16450,357 @@ Are you sure you want to do this? + I&nterfejs + + +- ++ + Application style (Default = use system's default style) + Styl aplikacji (Domyślny = używaj domyślnego stylu systemowego) + + +- ++ + Automatically trigger a ROM check if necessary + Automatycznie uruchamiaj sprawdzanie ROM-ów jeśli konieczne + + +- +- +- ++ ++ ++ + Command + Polecenie + + +- ++ + Launch emulation on double-click events (may be annoying) + Rozpoczynanie emulacji po zdarzeniach dwukrotnego kliknięcia (może być denerwujące) + + +- ++ + Double-click activation + Uruchamianie podwójnym kliknięciem + + +- ++ + Toggle full screen + Przełącz tryb pełnoekranowy + + +- ++ + Minimize when launching (non-embedded) emulators? + Minimalizować podczas uruchamiania (nieosadzonych) emulatorów? + + +- +- +- +- ++ ++ ++ ++ + Category + Kategoria + + +- +- +- +- ++ ++ ++ ++ + Version + Wersja + + +- ++ + Check images and icons + Sprawdź obrazy i ikony + + +- ++ + Analyze tagged sets + Analizuj zaznaczone zestawy + + +- ++ + Copy tagged sets to favorites + Skopiuj zaznaczone zestawy do ulubionych + + +- ++ + Clear ProjectMESS cache + Wyczyść bufor ProjectMESS + + +- ++ + Play (independent) + Graj (niezależnie) + + +- ++ + Play (embedded) + Graj (osadzaj) + + +- ++ + Open ROMAlyzer (system mode) + + + +- ++ + Open ROMAlyzer (software mode) + + + +- ++ + Check software-states + + + +- ++ + Launch arcade mode + Uruchom tryb salonowy + + +- ++ + Software-list view-mode flat + + + +- ++ + Software-list view-mode tree + + + +- ++ + Increase rank + + + +- ++ + Decrease rank + + + +- ++ + Return key + Klawisz Enter + + +- ++ + Activate item + Aktywuj element + + +- +- ++ ++ + No style sheet + Brak arkusza stylu + + +- ++ + 7z error + + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- +- ++ ++ + Cabinet file + Plik automatów + + +- +- +- ++ ++ ++ + Cabinet directory + Katalog automatów + + +- +- ++ ++ + Controller file + Plik kontrolerów + + +- +- +- ++ ++ ++ + Controller directory + Katalog kontrolerów + + +- ++ + Choose cabinet directory + Wybierz katalog automatów + + +- ++ + Choose controller directory + Wybierz katalog kontrolerów + + +- ++ + Scaled cabinet + Skalowany automat + + +- ++ + Scaled controller + Skalowany kontroler + + +- ++ + Cabinet directory (read) + Katalog automatów (odczyt) + + +- ++ + Browse cabinet directory + Wskaż katalog automatów + + +- ++ + Controller directory (read) + Katalog kontrolerów (odczyt) + + +- ++ + Browse controller directory + Wskaż katalog kontrolerów + + +- +- ++ ++ + Marquee file + Plik plansz tytułowych + + +- +- +- ++ ++ ++ + Marquee directory + Katalog plansz tytułowych + + +- +- ++ ++ + Title file + Plik ekranów tytułowych + + +- +- +- ++ ++ ++ + Title directory + Katalog ekranów tytułowych + + +- ++ + Choose marquee directory + Wybierz katalog plansz tytułowych + + +- ++ + Choose title directory + Wybierz katalog ekranów tytułowych + + +- ++ + Scaled marquee + Skalowana plansza tytułowa + + +- ++ + Scaled title + Skalowany ekran tytułowy + + +- ++ + Marquee directory (read) + Katalog plansz tytułowych (odczyt) + + +- ++ + Browse marquee directory + Wskaż katalog plansz tytułowych + + +- ++ + Title directory (read) + Katalog ekranów tytułowych (odczyt) + + +- ++ + Browse title directory + Wskaż katalog ekranów tytułowych + + +- ++ + Front end log size + Rozmiar dziennika interfejsu + + +- ++ + Maximum number of lines to keep in front end log browser + Maksymalna liczba linii zachowywana w przeglądarce dziennika interfejsu + + +- ++ + Front end log file + Plik dziennika interfejsu + + +- ++ + Front end log file (write) + Plik dziennika interfejsu (zapis) + + +- ++ + Browse front end log file + Wskaż plik dziennika interfejsu + + +- ++ + Choose front end log file + Wybierz plik dziennika interfejsu + + +- ++ + Use HTTP proxy + Używaj pośrednika HTTP + + +- ++ + Host / IP + Serwer / IP + + +- ++ + Hostname or IP address of the HTTP proxy server + Nazwa serwera lub adres IP pośrednika HTTP + + +- ++ + Port + Port + + +- ++ + Port to access the HTTP proxy service + Port do dostępu do usługi pośrednika HTTP + + +- ++ + User ID + ID użytkownika + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + ID użytkownika dostępu do usługi pośrednika HTTP (puste = bez autoryzacji) + + +- +- Password +- Hasło +- +- +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + Korzystaj / nie korzystaj z pośrednika HTTP do jakichkolwiek odwołań do sieci + +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- Hasło dostępu do usługi pośrednika HTTP (puste = bez autoryzacji) +- + + + PCB +@@ -17351,69 +17279,69 @@ Are you sure you want to do this? + + QObject + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + Domyślny + + +- ++ + Import from... + Importuj z... + + +- +- ++ ++ + Export machine-specific MAME configuration + + + +- +- ++ ++ + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + Ustawianie interfejsu, proszę czekać... + + +- ++ + M.A.M.E. Catalog / Launcher II v + M.A.M.E. Catalog / Launcher II wersja + + +- ++ + GIT %1 + + + +- +- ++ ++ + correct + poprawny + + +- ++ + incorrect + niepoprawny + + +- ++ + mostly correct + w większości poprawny + + +- ++ + not found + nieznaleziony + + +- ++ + + + +@@ -17458,18 +17386,18 @@ Are you sure you want to do this? + brak zrzutu / zły zrzut + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Wsparcie dla dżojstika SDL włączone - używanie SDL w wersji %1.%2.%3 + + +- ++ + Phonon features enabled - using Phonon v%1 + Funkcje Phonona włączone - używanie Phonon w wersji %1 + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + odtwarzacz filmów: błąd XML: fatalny błąd w linii %1, kolumna %2: %3 + +@@ -17541,19 +17469,19 @@ Are you sure you want to do this? + informacje o stanach listy oprogramowania '%1': W:%2 P:%3 Wp:%4 Np:%5 Nz:%6 Nn:%7 + + +- ++ + + yes + tak + + +- ++ + + no + nie + + +- ++ + + partially + częściowo +@@ -21084,7 +21012,7 @@ Are you sure you want to do this? + + + +- ++ + Choose mame.ini + + +@@ -21098,7 +21026,7 @@ Are you sure you want to do this? + + + +- ++ + Choose ui.ini + + +@@ -21207,178 +21135,179 @@ Are you sure you want to do this? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + &Anuluj + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21386,74 +21315,73 @@ Are you sure you want to do this? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + + + +- +- ++ ++ + Choose emulator executable file + Wybierz plik wykonywalny emulatora + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Wszystkie pliki (*) + + +- ++ + Choose working directory + Wybierz katalog roboczy + + +- ++ + Choose ROM path + Wybierz ścieżkę ROM-ów + + +- ++ + Choose sample path + Wybierz ścieżkę sampli + + +- ++ + Choose hash path + Wybierz ścieżkę skrótów + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23714,39 +23642,39 @@ Are you sure you want to do this? + Wskaż plik wykonywalny emulatora + + +- ++ + Error + Błąd + + +- ++ + The specified file isn't executable! + Wybrany plik nie jest wykonywalny! + + +- +- ++ ++ + Choose emulator executable file + Wybierz plik wykonywalny emulatora + + +- +- ++ ++ + All files (*) + Wszystkie pliki (*) + + +- ++ + Choose ROM path + Wybierz ścieżkę ROM-ów + + +- ++ + Choose sample path + Wybierz ścieżkę sampli + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23757,37 +23685,37 @@ Jednakowoż, może to być pozostałość po poprzedniej awarii. + Wyjść teraz, zaakceptować raz czy zupełnie zignorować? + + +- ++ + Choose working directory + Wybierz katalog roboczy + + +- ++ + Default + + + +- ++ + Choose hash path + Wybierz ścieżkę skrótów + + +- ++ + Single-instance check + Sprawdzenie jednej instancji + + +- ++ + &Exit + &Wyjdź + + +- ++ + &Once + &Raz + + +- ++ + &Ignore + Z&ignoruj + +@@ -23930,49 +23858,49 @@ Wyjść teraz, zaakceptować raz czy zupełnie zignorować? + + + +- ++ + FLV 240P + FLV 240P + + + +- ++ + FLV 360P + FLV 360P + + + +- ++ + MP4 360P + MP4 360P + + + +- ++ + FLV 480P + FLV 480P + + + +- ++ + MP4 720P + MP4 720P + + + +- ++ + MP4 1080P + MP4 1080P + + + +- ++ + MP4 3072P + MP4 3072P + + + +- ++ + Start / pause / resume video playback + Uruchom / wstrzymaj / wznów odtwarzanie filmu + +@@ -23983,20 +23911,16 @@ Wyjść teraz, zaakceptować raz czy zupełnie zignorować? + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + + + + +- ++ + Volume + + +@@ -24041,286 +23965,261 @@ Wyjść teraz, zaakceptować raz czy zupełnie zignorować? + Zaproponuj wzorzec szukania (przytrzymaj dla menu) + + +- ++ + Mute / unmute audio output + Wyciszenie / aktywacja wyjścia dźwięku + + +- ++ + Volume level + + + +- ++ + Video progress + Postęp filmu + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + Obecny poziom zapełnienia bufora: %1% + + +- +- ++ ++ + Play this video + Odtwarzaj ten film + + +- +- +- ++ ++ ++ + Copy video URL + Kopiuj URL filmu + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + Skopiuj URL filmu (brak filtru państw) + + +- +- +- ++ ++ ++ + Copy author URL + Kopiuj URL autora + + +- +- ++ ++ + Paste video URL + Wklej URL filmu + + +- +- ++ ++ + Local movie file... + Lokalny plik wideo... + + +- ++ + Remove selected videos + Usuń wybrane filmy + + +- +- +- ++ ++ + Full screen (return with toggle-key) + Pełny ekran (powrót za pomocą klawisza przełączającego) + + +- +- ++ ++ + Attach this video + Załącz ten film + + +- ++ + Auto-suggest a search pattern? + Autosugestia wzorca szukania? + + +- ++ + Auto-suggest + Automatyczna sugestia + + +- ++ + Enter string to be appended + Proszę wprowadzić ciąg do dołączenia + + +- ++ + Append... + Dołącz... + + +- ++ + Enter search string + Wpisz szukany ciąg + + +- ++ + Appended string + Dołączony ciąg + + +- ++ + Enter the string to be appended when suggesting a pattern: + Wprowadź ciąg, który ma być dołączony podczas propozycji wzorca: + + +- ++ + Valid placeholder macros: + Prawidłowe makra: + + +- +- ++ ++ + All files (*) + Wszystkie pliki (*) + + +- +- ++ ++ + Choose movie file + Wybierz plik filmu + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + Tryb pełnoekranowy -- naciśnij %1 aby go opuścić + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + Tryb pełnoekranowy -- naciśnij klawisz przełączający aby go opuścić + + +- ++ + video player: the local movie file '%1' is already attached, ignored + odtwarzacz filmów: lokalny plik wideo '%1' jest już załączony, zignorowano + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + odtwarzacz filmów: film o ID '%1' jest już załączony, zignorowano + + +- ++ + Buffering: %1% + Buforowanie: %1% + + +- +- Loading +- Wczytywanie +- +- +- +- ++ + Playing + Odtwarzanie + + +- +- ++ + Paused + Wstrzymano + + +- +- video player: playback error: %1 +- odtwarzacz filmów: błąd odtwarzania: %1 +- +- +- +- Video playback error: %1 +- Błąd odtwarzania filmu: %1 +- +- +- ++ + Fetching info for video ID '%1' + Uzyskiwanie informacji o filmie o ID '%1' + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + odtwarzacz filmów: błąd informacji o filmie: ID = '%1', stan = '%2', kod błędu = '%3, tekst błędu = '%4' + + +- +- +- ++ ++ ++ + Video info error: %1 + Błąd informacji o filmie: %1 + + +- ++ + video player: video info error: timeout occurred + odtwarzacz filmów: błąd informacji o filmie: przekroczono czas + + +- ++ + video info error: timeout occurred + błąd informacji o filmie: przekroczono czas + + +- ++ + video info error: unknown reason + błąd informacji o filmie: powód nieznany + + +- ++ + video player: video info error: %1 + odtwarzacz filmów: błąd informacji o filmie: %1 + + +- +- ++ + Return to windowed mode + + + +- +- ++ + Full screen (press %1 to return) + Pełny ekran (powrót za pomocą %1) + + +- ++ + video player: video image info error: %1 + odtwarzacz filmów: błąd informacji o obrazie: %1 + + +- ++ + video player: search request error: %1 + odtwarzacz filmów: błąd zapytania: %1 + + +- ++ + video player: search error: can't parse XML data + odtwarzacz filmów: błąd szukania: nie można parsować danych XML + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + odtwarzacz filmów: nie można ustalić ID filmu na podstawie zwróconego URL '%1' -- proszę powiadomić programistów + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + odtwarzacz filmów: nie można powiązać zwróconego obrazu z ID filmu '%1' -- proszę powiadomić programistów + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + odtwarzacz filmów: nie można zapisać obrazu dla ID filmu '%1' w katalogu bufora YouTube '%2' -- proszę sprawdzić uprawnienia + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + odtwarzacz filmów: nie można zapisać obrazu dla ID filmu '%1', katalog bufora YouTube '%2' nie istnieje -- proszę poprawić + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + odtwarzacz filmów: pobieranie obrazu nieudane dla ID filmu '%1', uzyskany obraz jest nieprawidłowy + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + odtwarzacz filmów: pobieranie obrazu nieudane dla ID filmu '%1', tekst błędu = '%2' + +diff --git a/data/lng/qmc2_pt.qm b/data/lng/qmc2_pt.qm +index 66a791ee537bccdc8d6e8c80a0ad2d5f50d6b49c..6993d4404f510510cb07fa651e5cf7a51e18ccfa 100644 +GIT binary patch +delta 23550 +zcmX7vcR)>V7{{M;-gVEtm#B(f2=cJDdwdEe*xKHuj(pFY+uxm!D++5Xt7XWyl#UZ`E;SnqX5?)m|k +z+5mtp@Wo{m%?t6h9T3M|$c8}cZbvo+zNDf?;k$8hz)*9CkpOfc$h$shoNg!XFj+_f}QB#eg);;8Tkn3$iUPWF25dOe= +zMQAX+-(&Xp_eYRE&eSLm@1>C)3j(NXj>mC$kn-?3 +z8fk6(Equ+64M0xC_pfP`hwstIj^XDV{DIo`0C4I6w9Ytni0o^svj$&w2i7k`qnPly +zjO!Z$IM>CyGfbms{u`k66p%B+0fI7sI!#5M0%$W_qrBTfBTK{kg2!2jjPE%Ee^m|{ +z1M+T9jnoS748CUXFCu4xfiK;y{UQ7kR1abwwj~juQv%3ms%hkQ_;%+=kUJdI$nAWP +zlY!o;0uVkDzMu`yp&7a+1ZaF=DsvmlC8 +z^$)Sv`{BuS?+vV7Th)cybnA|@WWZ>UU%b=Ed*L+=#B+K>k<)<3b^sV24$^D9mXRqS +z|HaufDgpQ~Jm;jbK+JFqO}RiUvNf^;LqXoQ9H`wgHIv%w>&^f&?J>anB=s(}k(X6a +z|4^6e>}L_sjn_an)CIaJ6ZndOK(`(TF0WBTS$qA4`9QyV06mhUW-?Ft=oa%ESRFYaC_VTt^l(pcv0(s*(ksV9|hJh0|Xsk##&%v +zC%_y11U9=ZKrDU^N$gz9nDMBL^j9l2K-jz0`T%Sl1KzYJunn;w?fL_3Yj1$L?SO5| +z02ZJJmem;7*IlFs@Lm3Drts9)t`F>Z9Pof_^@(t;*1Zteuc^Ru{%RDBwv@5U4%J2H +z+aw3ydKwOV;CkRVWN@+*2-hFLI;;oL1uwXFf<`{<5r}^$Ydits-$~8cs%Gl!O^b>_ +zS2+>r`+cB{ZUD@oGbkH>faI74N)FtVxABy0HLT&Ox1u?J$0xg*sbRrXA$@&i9G;$6| +zDfKiGxAq$Ov+dwCZzsq!8Jw2ofy|5=iTf;Y!du32lT;7Az3F2caGf&^Xs=q(z@|U& +z(PyAxp(V(=F!1E-0bG2+D;}fK#v94L}9U$rn`1~#p(xx5I5HdEv8DyId5tU2X9@(@@&mEz7X&9h +z0rtT{buswLr<2to22Z)#J~h+e>P8kqyXAd>)~KveWZ6Jyi<2Nv?NP=>y*2Xt-=Y0H +z{L&*{Dl>Y@E4kX-Xm7H=0pZ=|g1GV;B3cXuQE?hX49o?|y9grEYlGBlJalPgiHp|{ +zy39!emL3jW=4OIir3iTt#Oh_xB{>z~{yB{#b%I9j^s|g-u0iA}3FONcHS$Kq$Pi$w +zTSM2}$>7dl2y`tt1!VhSjf~CGC@K^~)X;$-#_xovbH@QDb%bse<^o&esalt_F+EIz +z?ii#*^$un1d>(rAKLWyHHT0O415)UkGTy4DQNF$tdi)p-d{7ef{Dt@I`5=fMiwm*$ +zdFX|+pRPO#y=`NG#e9c81>Zn4-2iM-gMM(FvKA)yNcR)fHpgA;&= +z0g(7u!nHjcl6J1dh@ApS-x)|AO<+7;nmn9n6cgIRgu?Ye=JnG^Z>7S74<>+{nK0>> +z15_8|PJ+p41+axyFr`6TOqX?GN`foU(roojd21*3V*XqRlh+_t#81u?}D6L0U+eVu(!f2Ak|O7-T@5A +z`fYHibTzQ$1K`N|%|JgNgCp5_z`N~Kn^&+gk+yJrO&o}wF>w575b*OZa55(a=U07= +zd{Y6O+?Rr?#X%#>xv!Du4%8^Tav-g@=Wd&zLEKc<)Y +z-cWQEUk6Nq8kn**A3PlT$r1>j`NPFFKzTMiJaP`G`+IdrMVtDu +zkKsx5MUYlX@Z>RuYD8&kys_&E#@|A>atyj&2{6!^OjmsNv#5=_G+ +zx-nWKS(>C#==MmGGfp{=2#J{O08uSnBA&Z}wj&brMGg;?SO7-KUaKUrJsyZbNV;1V +zKp&bUrIHoMS2jud5jb0x-j?)<>+p8{$E9-khnzV{DpynhqK>0vwsbW}MK`31&Z9w| +zIa4El+*YF)GEB1E_8R2U=TfB>%Yhb-m8v9u2G+?>s*18+I^18X<~Rk|0adE;xEspO +zT9S1!iu!K*C7a8rQd&HgYWq$DIjFK^JL;_osKTT=2`FI(50&bi{{pP#WyyZ`9)K~G +zB?qMn@cS*LdVvW*ItDpn9^0AAO +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 +z<)Uhl +zlU{&J$(h~5$iN +z?de5eAvr}RzR;ERVRAcS2OF!KHS1UUx~7h +z7QsL(IkQjw=K!tMOg-Y|>sFM@;STl*TF&I8BZ}llM>v^{jUdOFoR2~4> +zOh5jVn>ON@@D;mfqn15n}0<6=52fKJLQQ9h}$IYTRZ~zj2zx#h&Mp-3XRf_ +z8r;8eC167<@Yb1ofVVur11dBIQhzEBJY)eZz>^0ZMd`EXA#W>N0&@!EZ5xLI|In6) +z;wBgAaWHTH6=UOsQ@q3b&nPv%@bG+040a=V7qtjv%d9Dg2fhb1el=J6q=0G>bj +zAZ+5W1u`FOf%lu_^C2}+GqZ0R+1^VU`S6r7<{s84yj4ELVHx_$ZTXNEb-)1kCux81 +z&7tZaJgp&bRO_bpCbw`t$~g>p)^Lp?Y$qRcAqwcO?L6`Nav*6b{GXPWRTEFjF9Ke8 +zSEJZ@l#iDau~gIX@tlA(X^BSqdIldKjLNz5D?V}TBA{>g@rhsY_77^rC!HGvWd2k> +z>FF(yYggi?RrvjUwzryx=h5o|pKXVgU54PZ^B&>%o#C^uVJWt=P@@PllyPPXpW6l_ +z?Q45JZ`(b9S<88HuQ-rjFXr<@6M_3p;tK;5 +zvoNq-)5z9r;#>T300R2(E&XxF!u8dB%TY8I6K3@?#C7P$dyT!SAOX9;r4+x*z5 +zq3Gx|uib6lI(~e}5+GB4@Z-Zq0%@4UkB{>LUT+CM{wNrrS;o97L90)lQ)-!%8sJ2HOp3+ji+Le<6B +z)zqsGzxFKwNXcbhBydU0$>l}mv08{u<3$l@AF!&tC<^mt))tMTb3=ZAB1Yb(efj+# +zb6j7N6%&A7cbA`Ng09P6S#U$De&$04#ePf3XUObny}XqNFp3kV-0R;cFWFl7D#P +z0o1URe@esOJx2JKkspCPdd$Dwx&rLTJ^sDw91!N-{0F#Vb0n1ia4!LJdp7^Mb~A`u +z_xZ27yFq%nng0&B2fWiR{yPfSVxvp^_Yf=#ZL0FWHY0(%9OHkRjl|KO#{ULlp}!+s +zNDb$JiH;5tl7~NbSGEZWn_TiYcR|we{ALp&yfG!TKPB{rC}7723H|hWxc|1U&~KRs +z(CxG+e*jm<6XwcEj6F+*g?UB6A5tpnbi(EQd7wI^rKjnWpQ!gc7x=aW +zYh@b7^W&mV@Caa6Z;3vyX8|neAY#iG +z0X@}9#7%$$8go;`pCZ8Re~I|3Re-tWiTKB8MMUZ~Qkz~HxnYGE80-g<;vojr_5%7MNepVA +z3vAq8F?i@nAYVI(AvZ6g)iFX0{kNC9-Vrf0mI5C1hfi)Y2e8W;pjgT%xaIQLe}5tCNqK<+UL6JYDd(?ggVVnn|Z +zE2eb(q89j@huu9aW^ciBH~tmLee!@-7%Gx4jKzK41tR%U8o=zs8s%vgWn9ukBQH6J +z+z0Zo8XDQegJOOaAD|v4)upw)X-BkJjCPsS{j^wOwjC8gxKP*PY(0NTqhisjbmj{1BR%lE_rw~7E%S`?ii44EHsh^12s}ROOg4?3XR49@n1J*AWa;_e+9U_hYeR<0s{4` +zlEjVxX?t&x6&MGwaIwhhQv++u&mt?P2F~zeu`AUA_}Q8o#h7j)dvXrY +z!3V@4T_lL0G;yfvGmO?v#9_;RAdj;ahn+WqNF(B8Bb0{SGesT`2lBMO_*VdsifzT| +zak%K-ofoGw&<(cD69o+tz=^e6BhK0u;C6^>=%D%mt$bdb+u9fZVVAhzwi=}H^BSr8 +zS`7{KH2*SQ6xO;7BDuLJyylM0j1_8Xpr>hWlDP8+2gA9XxVt+WW5x;bz$_YA-Y)U* +zU#oQ2Sn;TdEjEJJiN{IUi0OPqJl>9F#qf&aNo;?R+N6r7?zKSn`XQc)Tp*@N;@KP= +zCG%V2`6g7pGna@L{+Md#8N|!X2sEExi&y6pkVf(5KNZxFpxUPJZ1KgV5ZKQO;!DXB +zZ01CZ@2^~e{g)wr{7Zz*-NcWbje&dg6+g?J0=6zk{OtG~;NDG*{LF0e%L3QH(<9>7 +zpp_T|CW>Ek=KzrhiQf-!=oeNHf3h*|)(Fu-7rddPN9o|xJK$RbG!hXit8aol^>5R4 +zx*)vfn?}{8jZOXPQ*;#?6CisWbQS*95Q&Al3fE8y7jDs248bM#eTmLuCSJ;SFEyc! +zy=mkUUHzhl*n79sIn}KMq?4^iY9cyk+lL^}b=An9Owl#WM}ZRmP1mS8hOEzaI=ARO +z08e}BJd9Xisqs3m=`R5sh0fc6$D1|Q`9#+N+PH_#=XMc5-_N>cJ<6ka8K`T~je^vv +zuCA3;4Auyd6LhWGpeBB^O4n*}Yal!hWw%`808WBW9+8dbkwd +zOjVSj>t2i@Xq3?PypIf>qKj_Q9;ED=y6ERoK;H%Fdby9r$^SvuXNV<;CrsBTu>pv@ +zQeEFkSY6+$u8X-H1bpEWUEH(H(3IL&(DlzpAE{L{UH>OmAekM|4Yc_L>`JO`_>eC^ +z^y78IchAFiY+K#Pg#I7~Jk*Vb7uf%up(ccMkz +zv+oHT!zC#``YS87!KLXyM +zhA#j9LZInWbp=xx?&9~ZiyW^}o;X+|ty8Lz^*7U<{aOum*D8C}I@I1YcCqd% +zc3QZvtM0mrUX0-Tie;~DT~<#n%cbE~Ax)4kh_ +znWdw*?!7Z=mlmnI5541ncAKdCxY`25ohQ1_FbB8wp45Gg#q+K`N%!OSEZ~iX>VAGK +z0@l=1_Y3Vs6Kz0srKARyVa;@<&%&_EoTvM{3Nz}4If}FtS7K>PWPfxWoD>pq6IhQl +zh5g3QT{)~M_<$R;9itf2Q-GPRRg4*#C;~btQ +zCtNR6nk&`K!_mIpt5`q74rp&hu~ATE+=x|dEGwa7Ib5;*w`{uHRP6RS;J)hqWxP^F +zBhLq=&UQ>9YaS|fBO`z|IixsPdEl802~iw_F^jeBgItc=H0vmiw^IO~{85|+I^)o{ +zSDa3K0KO(rqX;~terfM&a+|KWq@tSX*hq2hF%76`uhKv)2iUzqX`n;*j5Sgkm}4lO +zX;2!Bi2!ourP8oqByO_nSH|{l6t_iKirhM_xRs*33)!eNo_Ysl^NVFn2~j)@ULXY= +zP?{8CJbC+8X*RJG__JuGdAXHfM<%Y({-AkQN{c1|Abq&2v~u)7k8*+HUmMx7P`%K> +zUccyv65Rg>(6*!0KOF*1D;<>3Jw1V4uc)*iIvOCitJ0yP6^5--N?1`Ax)0Yi^5099 +z&LNoN;fB(=D{k;f|E@&j;0^%aI~w^z8zpk(E|AydDqY=QV8`A==^Br9=G93`*9WLB +z->*=*{=(#ZG)d{+*a5`+!%C0k|J3B&pGr@!jR2n(YUF11mFPKFfvmcu^sQe9r2m4I +znCb%f`GZPqJdWe_A|>`FuGE{Gl(ax*FNnRAq4Ei#XxDA1Z_Ue8x)otwvg}g);cRe2_Ytlp)Kb +zfft1+L(@BgbUs5F_3y^rJFSdvhI)O&4J9E2m%jIJB>_i5jDB9m1V1H_P6yc(SH^`` +zH1fO0k(eCk_0T8}@m3N&)#IJ2yM0`!OhC(@_jOk$JZ9K^exOXM?g%t*s4^9wMG>~n +z%8cM*fP#4%c|setT$qhp!B%D7s~ixP`;~bgFj?-~sU(lVp8m;K%7SKi;&;0$3vQws +zZ8Be3a2q+sN9`Hr8qz;oS@HZGNUlU9iE~s|rcB2L&{9dShR;t92-7G{8>FmC!wDHU +zNLg)}05pDzvO47Y`3d_`@FniM-KP4k#G|2v0%76HDC!If2*=S!6MAi~z +zW8)&U?^-CEV#)#g&{El1t~G9ZDzA~88mR27gkQ6-g0d?fThqVpD7z9mgY?6s>^g}P +zu<)z0r!DRm%qdXzgl-1RFAV +z<$fivBNj~hbsE`%P$h3A!`?`elD88@_`dtf=}P!e=&fhUX?q8p7&VpCNysComHbMZ +zaX0l*CEu|;*iq`O{UMrUDg~D?v|V|loHd~-@awvA_V730T|TPw!(Hp|>8)IpazRA& +zR4x{y0N6WFxg7NcXl|r(!|Ne7wsvZyl~<}y!tLF*PFHU2`~lLb6UyxssBwzVDtFS3 +zfs}Gux$_-M;FJ?{x{z}#B-=GdC|446Wkps*; +zLvQHfjr&h_=ncbBcV)z=5nb#O+0av#CHQ?Nsx+xK^7tOK*p}WhLjkWnB4J +zBma`5mW#Bp4UE$}4R{M|_%FRvW)Kj^aJ|a}+-W^`vEKDC`eXObsG<0=*DdtkM-Kp9 +zQD5&<4rS-+)%vD=(H;6#qHpGa6X5T0b$+C)X}3||qAN~-aISChHyz|^7xezpI+V-Z +z_5Qc9vpKqnzV!nvlaBn<2jpXpRo3YPuHbyKyQ&X(@g7*laDAI&c)TxT2C`2B +zecKZ?ft8=7Z&xURG$d0W=9Uj)pohM*1y0Z&NAyvFks#GJ(?_L^#oaW0-s!tNLX~m- +ztG*Xn31aL>eQz`orIo8Rl3rgl@-H@OTvz*UM~d{Z-V{jZ;Tq`_qEXD%>0>Wn0I6Vt +zMiM?kBc0VxBVYbrqX>Aek2`>MXZA~dzj7F|7hTc!TYzTKlDF!UuJ(O%I_cx*p;F!3 +zK%;0>gnSHev5b5L9?z-*F!Y%|{x%-J^HC%JZ;?L!*JF_XcF@RjHfiL!jv9r>5B;FC +zPk_HkREI>_)K6CQ!*=3m?046XSd5bEm4!aRay%yDFpaEjntqJSFyLO})SM`L(}+U- +z*fE(P+cwvaU5pdD@;LoC3uJ#)KMw5^+3lk~(GeHS#xjbwtMrM@u=c-SL!USRSaw7X$I*vz+T-R^-Qw%hf~g45A@iPy+4w9+Uhe2a(HO;g>$hw`Zk?*% +zo}Z16sCejixa|P;;a)%l;cyODoAQ7Z}2GqP*f2#R%?DQYv4h8ijA1{!$Jal=a;8m)>ju`Q}c2Vfr=@`H%Hi2jlJOBI}Db +z;+cO+(_eS{2GFUJ{`!lfz%Gx|-+bT$@{e@=t$zMMu71$pE>u9cch=wjFbcPtW$EvH +zb_Qm=uD_dyX?0hS{@&~^5F@XysK0j!75~}g`g?z00RP%Se_!zc*1U`U{+%a4+WTpw +z6JO{{lG=k@BSv4cZxyhuQ}hq3;d8<(6ZH?r`+*$)P5Dpf9r(?iA7`m +z7rz9c(P1j+RFG1?*EQ8B+SE0e4T}QaG1yRH +zas^Fk%W2mtM_g`h5H&{Q3LsR9Ep>{k@5AzWQTRW_2cE%ZOH{o%g1qRzv +z)Vx7c40UJXUX0M0hI&U)kPY2tsCOM}&47Cb$4!```YkXx4QvK-ZkoZhiUsa2sIJcM +zZEw0d+2DaSqP)MN!Rs8xu@6imH}*F)nKl;fu2e(Q2uBcZ{)Xm8?9}#jH8d}G3}Ez9 +zjnbT8L-Xnnf%YC?@V);CnDsJ4i+mKOqputMMt=gHF~HzoQVB>-UqkDh{^)3YGz2cQ +z0(#-OA@H&X*fHP1hBiKpK_0o;&?edfxU-|7%^4i7fSZQke|uf~I;uVU*f&`dVu*^0 +z1o%AK(0yz?$Wf;a-5=m(ED(n17GHqgW`;h8KI5Ya#1QjuFKPL~hS-0oMg +z;GTy5@y`IxRWS^R-Ge47F%12d2Jq6-FbtnDmm91yjI<608s1DT*B7@MS2rYm&H;LG +zj7E_aWSF4l0<-fsO!`tCNP0uVl%2R6{lhoIw30mBb2&nzyer8t?Ge@qrmlu*KX3s7 +zH%#{#3$S%z87~?&^3%r+vuA7up$sz2trHKV*;d0m?@}yWn;4Qk!XbvZS2FzDazflY +z8Iq%K;%>aPhU9IPfaSI_B%jX)nVvPwZ-~12mCmrB1O80%SHq%F!+`{^)ku47G%T^r +z1o~`@VM)pokSDvBaZweG{N8-ETuhgc_Eik4gQKvcl4@ApZ40oHv4#!5aiehc+J+2U +zT;OvL8#26uKpbF(%o%3DZp<`n^q!2{yjmMJ9>JS5y^Ud0J_@k@q3ZS+SGT&6hTXQ! +zfqk2_YchRc7cZMV|X^Nvkf_$aOFHqH0+nWLCh>t%f;H5uJkh;PRG%9 +zZDKg)i`(Ij{4pGN{|(X%#c(2b9Z02L3@7omxckd+G7iiCDs>IHm0JU=7iP#EAc34V +z%#b^71onC67*4hMiG7!7!>R9cKq`OFkY5?I+3G!pg2+!m8`&DpZoLOm)7pk}DX1{& +z84VY83aDFRqih?3;g+)v$Q@f7ZWmm^CfxwToxZ-nF8nmy564Qcfvnbzvo~d2G`y~@ +z0>6=9cpZm{cJDyL8-kVR;kz2?&X$I^_~0?=)7tRfITz%KuMO|-EC*JoH+(Gah3))3 +zhELtXfloMU_`G=?h!-^sU)y5uu17t?_sIPKUC$f7U&hwfYMtR{435~K!-n6{X!)G) +zV)*lBAGV6(tYjxw^+{YS)wQ3s%!Ad?em15!YOGl51;VP6(R>h^$!dM0kXLN*yI +z;RbA2@y1xi3scGD0YMI +zy|9yEVYDlci$8avu?|IF>(T^coyiS=v^a09I}GFOtd&NGHK><`*%$RqKiB%(w;0_N +z0GJYGZ0v>A!SIGgkCV%RM(s9w4tflH$2^UqgOeK2-_^8cr?E*8`pGM=ARmGJ$Isa0 +zIi``|^~PpdXx(qCXKap-h4WUQjLo0mU<@lT`d%u;eq?Kn{H_l95d-fhV+)%qz-Jyb +zwzN}mWA0#M%b6I1zC19tis=S&tzpJi6ElErb};%`7h!KF&)B-gM`+5OGmSy9Xd8AN +zY7AO(4WtW=jUi*|0H1T)7_u${ZIgq>wss4!zny0cb;s+N(%9H>C)${&gz7TDM!zfH +z7}f91c5LRk!9MK2^?8-sLk<~r|v?zs^9?!!RJ>T66oaufe=uyOn!3@Ha2s+9)Xo9@0gPHWH^=+>*o=}VV@m=z#MPM`fnOV@C4(+ +zcsy=cYg{<$-~Y!O7Y&*N{M%aN;t)K|CAr2W18Req*Uz}*!bR|xPbM1GcbCxeX2#S% +z7^)1YstG +z-NHs2(_2pm7Pi8ej%_RHbg4#K=csY@a7@EVi;Qb3mI4Xq8tK$Z#x+gcKsx-xxOQqD +z(9s8t8I>_jA3tu)=$QzTJV7Jx_gtMZ$hApAH{*_kX&@)xGwwds8RSkgjC)q$^Y9qTJV{w~lcyl)yy@VR?CNR2T*`M-l} +zkE`+i9?%b8qLhDDe0o7$tfbUXnN%QvQHP7$-u1j*J)QHtd@k?z`}sCg#Hq{EK3rJ_GE-|G +zrr)M=;HCD_aB8FKUnvhF9CT6JwNJ)BAotU2?UNce&{U;pTZFaLBo5HF1azxtf!dZ6 +zG|DOaw9kJX3UK_Ywr#=~V!{ROixcGl9~Nt0T2oQ;2(;~!eg^r*Zf!fcV>KaHwXcFZ +zK&-u~eU)xUvrw$1&3AKBxtal7NFJeGB5-avbv2T#(a3(a!ZWNXg4^=sN|} +zn2U}Lw0m0rizDqwk`}GzDLE@_rY8M~V;)Td`TkUN`-z^Tx_}-%%t2~ijvm1@-`^R~ +zBZY|6q+>X4ga}e&7`99``zX#lHWcIq0XXYU +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 +zuZ6+I0*6l_5u1pntA-rDf%Yk +zxA1#@gX#WYBT5ToBg%1#QlNA2s&MDcYg?&QuHsLh(qqVsm*{@CvQZbL&(lI9AjK +zV0v8uumhg5MW^slE$zGT-Qm&UFCjFp&3s)X9sBmgV|% +zR5#(H>mUW!*U75~B7cCKH&CZA#sDxCAAi>=%7r1Tf}H0UH}kn +zfek%`>;{C5)ya;}0We(#SlA4p_I}WQNEHU<&Bm`kf%FN#hm=S6*U9oW1JtRA&+pPH +zkDjlS)>)>L<>et~;`guXlt&-X$?{$RIJO1qP!7Pk8_>GW+DO^QTsHt8_5n7E=oGVi +zmU8X$KSGIjB(1zWRIRG8-?jYs;7CPDb?xlQzE8oEd_~#MG +z!T5boozw=G0w1#yyi*3Y}0lTTe-ns?Ek +zd+yqA;-GeX571`-u)q;oeQFyT9t<#a9LO*6X(S(t*E9^@(_4z11$@MAfYE^exw3qYjOongE&g1mMFYpyh3W +zR_zGXD;%T>)qqB~1!<*^PI(^(I%gQL^`o?}w7xy9coXR6IN-z`=$7js8|whwng)Dh +zKF}Q}fvbNsZ`M`a@doHO51`qTv?S&!=WNz4FrSLH+kpPW`*|5(^dGN0&}_Ja-JXWP +zZ1C3i*#OK|0Um1utYIn$)9q6B%+(@zSF?R(U>)!^pD)qL_f66%%B7Yv@CLAmrXb2! +z!p)tCd|S%ke~-6<)Oo2+?luJ2_(XgMJ%CMV4b(md*tDm>n}q^8#GmQn3~aAE9>^l32k^{| +zT7vLYYvaR{5x~1zXcvTQ)$m5Ze$E7bJWQu(rj)XO8Lg7Rr`fTGz@G&IA1eXJC4;OU +zAY4m;^_D>N^2H0fu9Ht}1LEJCHk|_T@69b&wFHBMImHtUmE(YZ?+41b2EZDO17%AI +zNKVP1{EV2ApF)q6J(FBe0V +zcs!j0-s|N1BcRG9dtmjPz`FG(V6L`cUDy<8Qah;TSOSBYq=9X@bPz#Cuw54q>`pzX +zu{0iUP6x1i8wX@v64W+K0N8#GYFFrt0e33Y-q9Xd{zP!F*^bd>Avlb#4&qLCa7^e4 +zbmtOqOvi-|KLm9b;Oi~9rX?w^&9*m!dY9{fEJr}SHw}R_tP0LGU638YIXnr(_TAtd +zGasbHx;jbYt~&V#llEJ&mCqGwHmXDDk1gOje-_ZeZ=r#0B=D(@(D14y$c6y$=&}8W~;M-qA)BA1!Ay1*{ud*O*-3`qyhJ)~_QOa4Z!F$YepaX_!YgF6N +zFHzt-?;yy{Cxc%U9{yz$!EZt#CYNNLqJ2Z~%Lu@;_!l~K#d|%|1RW+c1?j7&PO)Vz +zba*ois83h$uZj12b13-7J;g8#>C0tB^;24VdOf`(;- +z)T97{R@VZl|77UZ+7kG<4bW>op2O4w&}%^&$W{f&|KVFJhF*)30PdgDNs^}MqLe8B8 +znAROa%P#=7B?&@@e*tRcqWw16nqL({9}G>xes?MRIz!*cV<4*ihQ6~7g4AVQDQ{QR +zDc{%weM>OPjxB_KKevMXVmO3Nz+)HX4E=Gh)AeUyfL%DS5y3DpzZgV283v_lz>=6v$36&wX7XwziHjMw@6d+!1}CVS8p-fD0))rSGj^*P1WDAAN`2?X7_>%7T4Xvq7#>3AAoMm(^^_+nSBr +z;pDmq5E)r;@_2jT*B3$7!9?6=^>p%mbs;Mw5k-xoPIlZ!CqI|3Q?#;#?1p0jZh1oX +zF-H(9S3piP3M^v}ZGdy +z7^Q%aj=`VYY!J!=_?v;p%IlQ`voLjT3DZedOwuVTRFota+;Sd45-GPEgxybxcvE7pQka7(J-G7jW9b9C}I+jWZAi<0HeHz5CcAysOb0`%52$tvy( +zu#gQ>6~`Emjz&sVon`<#^+~G!BotL?P08jaYW~o}lI>;GChhh~HJV(+5WYpKitbR}?HCC5Qb70LE9A92G0z&(}$H{bGT18>W-asv$Wi +z3ZP}|B8B)TR(c%AO-q +z+dL-_4@OFDKSY4^{I%5X8cLMaK~noYJ%Qw{kUIXaBMODeQuhn9f!12BlUpp3dTdGs +zw(PRhb0(hS`xB+0vM+(R%8-I4)d0Hcp%hZ35=dvyNFme1LH6kaW-_~Rx +ze8vWCwq<>L2A`$D5xCE1^_0RZTY%KYMheg9fJyGJ6#ir_@ZV*$0!s(^_IB;JrL8%s +zSQ@duF@~8;X~eM-RKfeC5x@WOmK5D$6UcSA6#XO>xK=|NH8L2)h00RQ{YVfI^`-GY +z-7$YPkS1u0K`tvv6F#9%eC#7le1Xfi?vFHS{8u2p2c_xh7-tr=lxFl!2R41GG~==t +zuoF9Vnnk;J(yX2jKwS5dW{v#EA<``KKPE}>U2uoaY%Rq{qP+85CC!PL3-rTqX(qyU4AXiFU0Gg_*o}Cu|`^Su{Fp?LZyUJvw`#|l$M-s3e0Sfmabn7E7)i9q^Erb=qnMUTFUJ1&BkNq!r#7Ao*uV$<~iSIG&Y~+inGZvxZKQ9xScQbOfpQ +z3hBQgD7e;NlGa{I0y;EOTGzfU$eq?n>(Y_|7RBnM6`o2P1}+1Z{XyD9uYq*9uC!?q +zijyY2rPQ?;(8F#>TdJdKr*G>>+ji%Hm{BBcub&6xbuVd0RwEGKoU~n)ZOxupQbyuz +z5I3evhu3}vDfygq^mY)iRyCw!E-yju15&nSMc_|urPHziF@3z0H?aU%<~QjqdjkCN +zDCz97r$F1Ul+Fd^0qc8AI(M=hkSjZ-^C|fJh<(x}8@!&Ax>gqj@Vciu +zJBiL+q=HuX#F}9`g@3wKaJwzQJ$LD5%wQntRdtGLfzq8a&OpCLN_S%0gBaXZy1UT{ +zrSn#)DE%znu@o)I%AumkQF_|99Ei+j(lb;NeCKrSf|YHXrz@maEm4c5T1l^4UkCDL +zk@Wi7T9B<*N^fQcfYkVl^wuA1q;d76x6_<}yWEl9fAs<>W`Xn}6gT3Kb6Wi>4)X82 +zT2K{N`Ej8(yNYXLr*N4+`3U5loosl#1*G3~b;?a&=@i>QR^luHX1mBr);OSts%THE +zxT=Fv<#Ma>j;syPY^)t*^KH%7+SP8PQLd$40=jXKY}X89X1}+xeHHWtI>*WO4G#d{ +zU!Wyfd$#ddBs+(+1Zmt%*~PmDNLM{%mz6=l6Rl*IUE@IV@zN<@)pQEG9diARK_Cw; +zlIx$u0I;^DR;H>$=+V1!BYy(SE=F#&W-&;Q +z^3#B=%95M3jsrR`P;OQO^Z(WNa`XFGSZG7!7W?pSWS^5;+zJ3;@l#8v+N)yL64|fV +z6{u@(xkK)L;JduFuT>q)mMdld?3=(V^eyEdKb_+0c)4@eBvjg2a+gF@75}>oG&~Fz^2Bx5fcSgqq=S64*y?R;D;5K- +z(mg3-+yHMR#efUV$G#U6_qsDA{$?+CiKN|;g%q@9qgL@!L +z7V_4A6-o6Hoz%fqr-;8LZ+ndz)up4n-FYVRh`il138dJ!I@vjcPM%V%Q~1r5w}*Lw +z+;NV)W5Xt3lOM}F{@`x@SwY^3r6lXMN#5Bc9f<1%dFN6q=m{y~<(+t8VsTY@_fR}W +z2~XucBXO7JEtL0$pxnw!koP^90CJpe6S#bf>ypxTO%J{9ih0s-=9pFv<)x=dygK8tT&3C*-2Pm{)H6k?&m-AeCt+KbVyQ +zv~@N4k?IN%`bj6f$mB=074(2yTh1N6Hpzibf;uwsq;GJZC?8dK!A5AuOOStq}< +z$-;VUkNoZ`-mum0APXWtox`p;%DgXFk3B2D$`B(fsV3B|2 +zU&Z!7kByc8)UyDdWRU+{N4-*~p8Pj67$EU9AssMp>{&#};UeJ8ZxC7u^FZ!JLR;a+ +z-S|_d=sI6ZsA+2+X(Dtyrjew=QeK2oUfHNqMB?KYsJrHe6E@^2$es-dZ-gbjT`yuN +z*ACeKmJ!2$R%q09BI^GzawHBW#`M7;jqOXyo+$tcjHFyYOAzOhN%__DK@Mp~%CG+m +zeCsq)AxRC-oE2i7j|I^} +zKT@q%Au4PGsg@9l=G=Q?k?N&flnSoTpQxAY%`Jut?>D> +zQKUiMJ&=+f5%+CRK;}b;r`8h1uSz^WJprlP4dPXP4_?Z3t&*LCxzjY_^XEA_j76kn +z@eAPHtw^hc%UDA@kyei$0rxK?t>sLRyibtUZeM^z#FN%tE&(%EC#@%6!qitnTF0lN +z9a5dNY0(pF^R48c1SND0X`73RWYt>IuIfc#6|6|R`3HecXiwU0!@b?(2x)&J9?T;3 +z5%FKO7v!xci2tj93?tow@bH{iNxDTGMC~+HCylR5dSJ~Z@rNYf5GD)jOC<2$8yI_& +z1TMxuSoe=k-gz$x9(x>QTQdpXYX#!gP!by54S4D)(q}a8jYEw|-|BW)Tg@S1?GN?^ +z2#FzK0oLdPe$p|lfmo%F^vq~ +zEdfLa>SWFAbn?S7Iz{MiEy3Ql&D6gn68$sU{{o3j4g>aX0Ew!Lp6#PFGW^~~;1MIq +z2>VyS))$iKN2p}Foh73l-vrs!myCLkVzp+5_SW8ESmOm`!VwK%a#J#)kOApZmc*r{ +z0esx7lUE8RaqqrjollARDcVyOpULzpb3qi9Au|Wx1hIZGnKc5J&GQtQbp>sy1aA^w +z3pMhV(fpC +z2qRS^8~#25R(~kjI2TV&{TXC)4P3_RVY`sbU3i6-Kgj>)p=QKCbR-kC(SSka*(*rjK&)EY +zlC!_30soawE|ggaB=CkAN5Ir3yas*`HD8U~ +zX91bOb1IVO4I6?;^d_&)HwAe6LMK=1k=IpCxWTHH(#}j?S5tr%w-XOmQV%WrR{QD7> +zH>Z##x!AwhME=y>0{nC>@~2HY80AYbAKGw9>e*Ag=tTR>PfuE*M9xmSEjI@i47&488s*n`yP%*&t2%Nvp>?LLZU5fL34c +z1>{3MwW*5!?vMerX45o~CSRp>%DIBD>Q3uS$^?4cjXFF;#gtH;I*#8B^4tnK`CD(D +zVtgodE*A^5^E~Rh_#z0~L)wM9KA|sW(k8QRg0za#rYrG~e=MTS{UQP0hv?*%?zBbf +zEdYO4+OkCs);r^At9^Kg%9f|CWi%BhIndUdtU>XI!g!USS +zy`9=6wATaFGw#o5@VcqM=3Jz`599+~xQq6F{0HO;xiqB9LtrU8XrBg7zWVB=u<%Z{ip==z6TAv=?`T{*{rqhpLK*U=#W6gaam$uSb|3m5ZWiE~X_xfYX +z(Drl|K%W%SA*%CM)-{>FX)^BgV0jxO6PpUt@Nb@ojal(u>0@n +z+*Rngmz_=LuFe6eMFE{Ra5>V4Ee-kM9bB4=B*WiPtoH?DPZyvAIx +zlE~IPTpY~a;q*T*yrq-2(f?LG1v+^ZT^))_azGwk(-NN#`b*bt-;de8K3z8_4(N?# +zbp5e-FDf~c=<}Y6U`C%;5WMKET)WU?dk6Bn9!H6p}UV@W&Q0o +z-F>tbkk5W}kNG38tby9D`nG2OIC}7Z8&Nn_p@+QwfYix{9!mcR;%gYqG-2>M^pYOw +zh5;_#pC0)SyKxT7>5*LrKz{m!9;Gs{sRi^@AQsC%d})^VN05(}lBRpotR-mi4_T^{ +zr_Q2TIVk{M?P%7;{TNJSnsqA-%&htpniGd9ddhoxrYF|5OUCM??*%-{{A~)!vpEX)#K2w?MW}*$F0-YUMGo}PcLE16oR_x6w(}e +zjnoA>>m9xJO9Q#9KfO^eOUrky*D=GB-pOnLbjJpI2iyI8!%v-}%LjVr7A||jbb7xD +zdKDLo=z}CIG}hOr&%){eiR((Ajl+1hI)py&^%ZCb2hF>It$E8A`ug`5kh8zjHxZ~w +zch;isW?=kZ>`6b?jRO9i%$i!A +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 +z!~wEx#lSan0Ty=?;bjYep6wvQXRZYLbgvk4 +z{3NhrlSHHqwp{Auib(JI*v@bfk=^3(_HNKg#FSNljNcFs +zBD}5`j~hkU$CR>9Co%p3-sp0fV&d8;;KNRdxLH4O2q|7n&aZ>BA8BIB)J-7ub`?`n +zGJ#&dBBoZy$T0V;nEDbo;>H(Z+FD%5!&ihEu!ZE4D9jBba2hIH%;^5r1*BRh#q7&i +z3@Z$0g!`c+yej5x$15@Y6^jPu0xcgc7G0Qt^Y?YNgtoR-U)B?gE@gl`s=7`#$66#< +zH3izNvzFV|!F=eLScaCF)aSHVUTznvf&)TZkNdU2RU~@&;CVHR#NgV%$<|UncM{3N +zaa~;hh!h*toj%zj%1t%Xj~V34Hbu2=^h`ocW1CR3*`;shxU!A5? +zOv@DM(+>h2Ge=|$!2uJC!{Ue`7(};k;z*U}7}%SMqn1NJo@gVEx@CUYm58_7=Qx*h_iP2zz?{Iv$NY^nb=pH +z+c5}#exJC|cr8eQ=XKJR-?SoM&x*fmiK{g)gGgL0u3mS;e#jB6j-RJ_d7-%b8&}Jv +zj40Zl4t#e_@en_v!Y-BHb_KSFh?0Lfv-Mw5vd0~`_bKtCOb)Q^mf}Zu +z{7lKcLY@5bbMeyxPsaOe;^*-HFf>dRKNq05mxqgA5AhagMdEilhUOZ-4bThk_>`*# +z`1~GME>$NHK?Aj^?LF1+-3*5Ic+C%oYscE#*0X+E&=98qEDg?eDq$bePA8pp+2CUL2;>E>I{DiN +zhK6~lVWNr+jjCZF`(kfs9ELN2&-xkMu*c3SHPl9Su$7xSX$gq_ceGs{Y|S0}8QMkT +zM|*z#GIVI0hKFFCp~GDKBPTL+vf5V+{_;BDX&nun{TQ%-@<@~=-FqXgk*AS1ze*;`6(qOLdG9_jVh)ES`;7G*>5CG{ew!|5u=wF6$)Xh`-jw-_~4XxFPgC +zW}!Pf41I2544H7<(CjR{BzG2RJj6&-+=oFo~Va~&15OtFc^J1|1nsUo9 +zKcg7f<{X`(dZA(dhuHv)`s$>fZ4C)kD*;oI44P$ipjYz^Nj~=OAlZc(R$3JTkM3_+ +zc^nPHZuboT%^Zmz1zBQP_pC9_ogFo7IEy14uJ3hH=eAn?POkN?=NPtK@BsPMBE$Cj +zC~WEjoja)GEXA_Fn;-Rxq5t&=hz~CqtfNF8206 +z81kYX1NWM2$h*G;=!Qjx{22^{b&}z1x(8nDWS#QV5jttzeLC5wXv5iWRZ&}|&DPd* +zb}&x~GhD-d3inGe+|bZz9`qSV%zeY{q_My~)*7C~Jw;dYp5a9l1Kw_=;WduY +zO3FgR`)!yzdM6t`xS%9ynPm7lAOdLrj)qTbEkHc|Y4`&3(fwRv_!5rq+o{M +z5mX2){F}ml;m_T!rYJSvF$p`7Vs+8Sb1CLWnrJUs# +z5aWna-t8n>cjcAx!wP^#zE>*Nyos@;@)o6Hzg&>_rznbn;96mD;;73v6wz)Cmp(+H#)aXzhXTB*sc{^2aRHX&^EMSoSQ%=??Y)p8i&x +zhq>U=cU7EEeFVNGO{eHqRg3NFYHpUM)K5Z@68J}P?K=x-{4Aw`NCDWtNoim}pR7z} +zr9nlErE`o*gYiK?&b(3@=EvY*Uv4RbJ1dQsV%c%~w9@zwsqgDJ{Nk!*b}$EycSG&Z13Sr<0zmskCf{Eys^VN^2(% +zpizC4wzZJH>onhP4r)qo#XqtHX!llHY&Spira4NN1O0&A8?AJW9tV)!Tj|!_8fft_ +zC7@t0S_(IG3i?&)*>MX9#Y^eg8|Q#le^-JIVh`Tuu1@}HsuKJkiiQo@N^iH9SXCt| +zy`!+Uyi=s~eu(1ndx_HfCuZ5xg-RcHM-VHjDScBspeKJ8qV)6H0`Pf>PHr_{37dZn +z$eK&apnA1I+U&0kt|ovNSS#UCxSsdjmGDA5v4vZeh#vca6|Gky=7-=kMgcMkUAvB2 +zLU&uU%`Ihk#(Q9Yz9=Ky(R*t0NEtEk3)aBzbkh1JWyIz@kh+_dktt!oi?%7ztGk1A +zK2;g}?>5~#t&D4dqI;*865A0EdTSdc7Oz)KZU6t=pv2L5kj)XLTyjMxe^vvT3R=A$ +zPUau)lqvsQo?*+CDNh*okRK}3syP8Y7pu%Hhg-bfLS?r9O@RDT@~K;t*`4rl`X*)e +zw2A=n)08=_g8{x5DDyHfbzN1Jg|82Su(47WeryLMV~?_E{56oWUMq`R;59tWP!<=W +z&}{QYS$roP&+@dDT0sxjs-rEGRWIIyeFaJGM{ +zvfh*ltV*WVCBVV_$X`hf8V7RQy~^e?0CagzWs5^y5Qjf1Tigq@feltL%&I2~vq!*_VYo>(+1OKqs6rJYH8h&}AFY +z&koAL99wM2bW;vjv;>~eN;#|rf%Yk&mf2>Sa=cYrAUk#|$FEWVzx~QdiYwH;l1{q1 +z^fBMmN`EZ6UQtfY!Jv_1R8FCAfyQA<7XG~awv=qh93|^YMPMCsl$QLGGD*qZgVOt?k9Mr5ZM`Qp +zN}f|$ptOlj(UvOt_-O|D%3I~E8B714HMdPhzu7o}_v{f;UZZ=wb` +zG)%c1@)c-)m~zYO5jL^*=%iNY><2nD-lrMQEgr?$##$2}m8 +zpQ60}7z|`-vht>+5*oW!%G>&=u0K3d-ge3d+LbBqD8|QM1}=+Vi_kN)V>cN(YsNW+7=? +zw`v@X%4^$8?Lv@4y)W)+#go_2kh`Q>c%oK53##R+Z6JRQRV%eP4&=!})jFaOsE55~ +z)5}(#HAVC8g`YNmrrP6xt>jWv%K!fAI5tV?7Ya!A#ZBD;e$m1hsBu +zH=Os(QJsgr0~QymI;XV<;uNUXpMrDU%Ri{DN6`g)?x?y=vI5vTS9RO1f#kMAb$|aD +z9xWf)%OZ+DEn)w@5>Juo-U~!PT);lu|n-|p%~<*4b)DjY5=Re +zRqcFL0%>HL8qhcoL`3Z&;~opknPonm>U8h-f#NcmHAlE5)K=^{6s +zd}BAAqHB9KA`@%J^jGSTG8)KBuc$*7qZjmF7p-4!2lKJLYScm$tH&4X6wTa`*o?SX +zpp$RJ=W$XIqMxf#ckubUpLFuw@71WEPeA_LO(#1pbnhQBqfq%WFj`YTg +zW9kxhWPCD^O15fr7aUx0?xjXQUkuJHai}_K53bY6Y7h-s*&9xYuoOsuL}cqdut<(JGM}e^TR|@GR}^p;Pqy +zrN*_ulK*~nHEt*}zo9zm!AH!NU)0G52#7g~Iwc$*fAvtOU#1Fls*VHM3 +z9;j2t;!$YhrA}Rs9;Rp?rWJ(v*)6e9=dHaCd_DNT*8uXBo@SD0S6$%;jB9tE<(; +zKsQILYa*gRn)6s)*Cq()2oJ4(AHOzZ^40ALVHn2-sM|Locg$3G<)s75OjLI_-VN+i +zPj&a4&p@7kQ}?i%G(okiiKrLnW1UkeI3lr=Bp=eViW1yANAyw#=w$qsHcn=7`zUsr#|82)q_uJ +zPGxN2So~0Pyi>51W2@#~$8N)sTI!i(Jc*~f=oIS5Qudso=8t0_+b}i%*L(c_PMxII +zLG^3}bc>u1t7osHK3sBHJ%>?HyWO{fdGBTQ(s&d{s~YJPemUx;gXmP&byF|B-2`&s +z9`)+#oggl^Rj-XeDHnQ4E!cvW`16~3qj51nk4ox|m&bwKx~UdE#CA-{YW4OIOqp$*9!*AYb&VtE@4@4^}BlS?@Qo+ +zcB}Ul4`99%)cbdz0_oaDC!KjneK4sj_J0Pe4>HyOJMch#g#Sr_ZMvmCn%oBDsABc$ +z$*~}{+@U_7T@A#;CF+YRShNqmq+RIOE5N3s`r1zc+AvQiyE|7W|1YkT1%;*jyh^9& +zkWtG03rcyesrt?fZIEg~>en{0KnK^*V#8eJ?R~YhFu%qN{us$HEcJSQHImb~eOC4} +zQtk*+>XtTP8kG=iQQ>mEn(7QNG0_XZZEUA>J?TQQpr +z?_+cx)&l2Gl8vrb7C;xj(0=!KXng0s(E|%f`EUiJ*Ex)MADK>WdD_^l<|f>hJ&es} +zVIWWZVr(Ad1ftnSt;+!0& +z=F~uANJucimvP2E6QV#4Ic@Co5a0Cj>&CE_Ux7X}83!Ku0z7e$aqz$C(#q$I;s5?j +z!5-s~x>vER_A?Ig{uu6;myV=S~f7}aO1SE +z)qt#SXq>SJC)uA*Q9xSkFfMHJ2dmva#zh{1FqpViGX9%LA#Od4i^2+l_8Mtiw6hYh +zbL)+Z&ZmP+&l(dNqU8Qq&bYW6YM-Pa29T5 +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 +z(?8>#nPM{28Hpe^lG!oAzqD}bAq +zM&_p?!t&RaDLGzt6I02j|HdQv)PBpx9KR4+P1ZiZNMrCtvd--qC@#My>)O4+B +z>4HCSJ=&4-e2hE9_9b6Dn+|+Pu;q15K$vqT+0hfX#n?QuBNd}lL958lHkk9^fb2{d +z46wL??5r4p+ageg!k~#{k1c+G?x01N8*S$?lN_sB(E%L!Ws>}h`j#_=njs+6rdS$Hem)OFsrn&CFHSmAK{pE^r$&a#i(RNN^*OGQ +zxAe^OGheWybaF>@s0pPPJAksnld}65S6Ws|TlKUivzln@7Y8wr(}p?(;u$~hA$1h0 +zK;5^PI_0zn7{8P{S>smoKc-H{R)F%!BI=ysj>k_kb(wP=IOl8B%^69%YAf}&zY5%} +zan$GAa!_66X~&hTG5C?^9@csv4d`$jK$=Yhmezu5+IuqO&V|wd%R>O)^EB|NBUa^i +zra>Mzki=m$*w6q%jf16IzE_x&Bkk?d6Vz*)XzzmEpk6(b_HMzG@4{sIUTfSLw@1_P +za0gJoh@^e(gMmNgK_e1Swf!{AGArM2Ncj~y0E@-A;WKCy+LX#2Av9`H2?%$)(3qL1 +zV3!FrrWu7MWEmYi#RBS>9yHbo4}=^>@m?|BY*RLu8t;|)&bAg +zS)2=cnL9etwC1Uxyzd}GRbv!QFJ1wBk7YD{4hHCkE}@xc?_ip3rVP2DX*8>)9Jr@- +z)YxVt8ti$r5KUm=mIwXhz!i-6EToe=3KEmDx@mtND4kc)O$X6BQ{~c4 +z&;5aG(bI}Bw02az>1NMz5RNy~&9^We|A`0P@l7DshHWaMJI|uRbDU0hJ}C!<>qNTi +zU;99CcujZr9tTQ9yl2G&;LeYtdp#mSot8rP?iztfgSqtU3FxS0d`AzCDaV`{!dFe8 +z9OFq3_ihd9+X!Q@%HYM<^l0uG++erq(QobnY&=Yl6Fd!i<LVYdT@Ty^pV@?Ib^Cu-OtdDSGs{cJ$8rX57as>79lI5a!*b +zKXyUBB&?x7uD}iOLw9&`id`6$f +z1^|CqqD|Xp0XMY7a(7a6n-?v#xg7sAZKE&Vt^iI`L0^84lfqZxMiu!vEU#kVi$sbG +zXNtL~P90lYrW6I(EmAOATmjsaUoE?f{LD*lGpBtmz$cHDp}MZS426T$%=HzP9@E{- +zZ4@R#NC)O-O}R&QXYS|G-9B`bwecQ^H`9`sC%)@Ynb}o_>fv?F^JPbXxLM2_3!Bst +zdCdD9x-s8$WtzInpeouTL+)5x=CcaxEV*B9TgDc9C5$}9{Euuvmbo*3tiR@eIlwwU +z`v~1Myr;X;ni{reLB{mA4>QB_XWV(wOgZXMaOAopPeCT|Zz7_LtO2+h~8-VZgGt+DLgAlouWnGH` +z#m0*=R4s1D3`=mUoi;PWtBMqib$!9It2tDZomkEXxc8TOvYesKz`cCKasm0Z=Q%T3 +zE0H!1WcgMb;jR-ayo55h*NsiWm)IzmFJnbJ{6QV;&x+rc0!&yZL*=>NGUVRYTe2p% +zwda+oZ1RUq=-n4sN+(B{C*EW8n{l4{AK5}{+Aa2t427>E*}_M-Q=>PrMRC@nt&uIO +zz-|W!E8Um|!peS3^0@%YumZN?{zg!*dL=_)NDN!m?IgyGSF%;QjmWSAY&G8>o};yT(%xl)I#_tY=fT<@W+x^#X1aF +z*&krqsPl(FsI(bM+0$#%TNxMO&KwzGOT2D;1GS4UL9Rfe!##UnvD*_G{4`~d2Q +z?(Bf+6eyYEnEa=Rx +zZNmDXZ>!k#8Kt0n?+L3*L87HjXZ5aVuT9*|Zg^#3?e_q7!xyD^Tt9YW$?|Ye{ilm(N;A8f~ARqkPM}~ZQstkq6&n+jW`h}e+Wsjyl +z!GzOM_V^hx(bQgs>MPS^DD2+C8fT)WaXrEsYw`g6&$Fj%(J^UISUQ*koWf7D*YBfS +zHD0X;p{275pw%=sfB|fUEsb=nwgS2O!(pzd?&N(UCNR7OzjpSXc +zu(h)rXv{9s=(DtG(ozfOPC{TH7$F<4N~<&L&a +z);^F6dTH$%rL&!_-1^<%&SAfQjZHL=iOVuThP16r=_g}%bA8wTe;}7a%DACraVjrC +zouJD!YEyojtGSFzRU}I1#t9xBCm^x1@CmT~w*ma8#-~-Hwg6{~L`6E80s;c$j{W^0 +z5viI91yIghjej#*LA7+A7-0%&h7saa~&}Dy6nQHtyzb5R5O9 +zkAQHbiItj3NcBXBgD@P!1Ug)NI*x6U|N4Cn=RK6&^v +z90KL=O~5 +z95Hf0!mz=^V!|}0JY%jdMU$;HnF@`$DJG3JSEmWjk0{h>Gct?91M?#^I>UtAqU=0f +zO1tpD0MkP63fsv&k|Fn +z&Bs16O4BJumz$+ENI6@0Cn+z4ZzG-W!`n*z-*9$S-!lFrlfLZCa~)!3G%>hl9i;sQ +ziCt7IBFWY1GW?~P-u&6%HaKRY+&oGacCAcuBhKKDk;SM)O{c_ctwC=}_pj=!;U}{I +zH;9G=xnHzQd;^mIA!7KWmwj}Crc-n-k^wt?5y+3FWfyp^+iON%#VS||B8G6Q%*Jp4AY +zwR3p#Y2Y`9+9AdME1K`PV-x>hQTTsD +z&;O&fH0lCB&o=7!rqXH?-%hft<-1jFHSjxZy15`p<7E0I$O2#;( + + +- +- ++ ++ + Artwork name + Nome da arte + +@@ -329,183 +329,183 @@ p, li { white-space: pre-wrap; } + Remover classes de arte selecionadas + + +- +- ++ ++ + Select / deselect this artwork class for removal + Selecionar / deselecionar essa classe de arte para remoção + + +- +- ++ ++ + Enter a name for this artwork class (required) + Entre um nome para essa classe de arte (obrigatório) + + +- +- ++ ++ + Choose... + Escolher... + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + Escolha um arquivo de ícone para ser utilizado para essa classe de arte (opcional) + + +- +- ++ ++ + System + Sistema + + +- +- ++ ++ + Software + + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + Selecione o sistema ou software como <i>alvo</i> para essa classe de arte + + +- +- ++ ++ + On + Ligado + + +- +- ++ ++ + Off + Desligado + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + Escolha se as imagens dessa classe de artworks são esticadas ou não + + +- +- ++ ++ + Folder + Pasta + + +- +- +- +- ++ ++ ++ ++ + Archive + Arquivo + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + Escolha se as imagens são carregadas de uma pasta ou um arquivo para essa classe de artworks + + +- +- ++ ++ + ZIP + ZIP + + +- +- ++ ++ + 7z + + + +- +- ++ ++ + Select archive format + Selecionar um formato de arquivo + + +- +- ++ ++ + Supported archives + Arquivos suportados + + +- +- ++ ++ + ZIP archives + Arquivos ZIP + + +- +- ++ ++ + 7z archives + Arquivos 7z + + +- +- ++ ++ + Image archive + Arquivo de imagem + + +- +- ++ ++ + Image archive for this artwork class (required) + Arquivo de imagem para essa classe de artworks (requerido) + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + use ponto e vírgula (;) para separar múltiplos arquivos + + +- +- ++ ++ + Browse image archive + Procurar arquivo de imagem + + +- +- +- ++ ++ ++ + All files (*) + Todos os arquivos (*) + + +- +- ++ ++ + Image folder + Pasta de imagens + + +- +- ++ ++ + Image folder for this artwork class (required) + Pasta de imagens para essa classe de arte (obrigatório) + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + use ponto e vírgula (;) para separar múltiplos arquivos + + +- +- ++ ++ + Browse image folder + Procurar pela pasta de imagens + + +- ++ + Choose icon file + Escolha arquivo de ícone + + +- ++ + PNG files (*.png) + Arquivos PNG (*.png) + +@@ -1237,7 +1237,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + Escolha a cor do padrão + +@@ -1360,17 +1360,17 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose image file + Escolhar arquivo de imagem + + +- ++ + Supported image files (%1) + Arquivos de imagem suportados (%1) + + +- ++ + All files (*) + Todos os arquivos (*) + +@@ -3463,42 +3463,42 @@ p, li { white-space: pre-wrap; } + Fechar + + +- ++ + Name + Nome + + +- ++ + Domain + Domínio + + +- ++ + Path + Caminho + + +- ++ + Value + Valor + + +- ++ + Expiry date + Data de expiração + + +- ++ + Secure? + Seguro? + + +- ++ + HTTP only? + Somente HTTP? + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + AVISO: falha ao remover o cookie do banco de dados: consulta = '%1', erro = '%2' + +@@ -4259,7 +4259,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + &Abrir arquivo compactado + +@@ -4303,7 +4303,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + Nenhum dispositivo disponível + +@@ -4327,7 +4327,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + + +@@ -4380,7 +4380,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + %1. variação de + +@@ -4390,27 +4390,27 @@ p, li { white-space: pre-wrap; } + Escolha o diretório de dispositivo padrão para '%1' + + +- ++ + &Close archive + &Fechar arquivo compactado + + +- ++ + Choose a unique configuration name + Escolha um nome de configuração único + + +- ++ + Unique configuration name: + Nome de configuração único: + + +- ++ + Name conflict + Conflito de nome + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5299,25 +5299,25 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + Tamanho + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + +@@ -5463,42 +5463,42 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + FtpReply + +- ++ + FTP directory listing for %1 + Listagem de diretório FTP para %1 + + +- ++ + Name + Nome + + +- ++ + Type + Tipo + + +- ++ + Size + Tamanho + + +- ++ + Parent directory + Diretório pai + + +- ++ + File + Arquivo + + +- ++ + Folder + Pasta + + +- ++ + Unknown + Desconhecido + +@@ -5995,212 +5995,212 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + HtmlEditor + +- +- ++ ++ + HTML + + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + Formatos comuns de imagem (*.png *.jpg *.jpeg *.gif);; + + +- ++ + Portable Network Graphics (PNG) (*.png);; + + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Todos os arquivos (*) + + +- ++ + WYSIWYG + + + +- ++ + &Load... + &Abrir... + + +- ++ + Load notes from file + Carregar notas de um arquivo + + ++ + +- + Load notes from an HTML file + Carregar notas de um arquivo HTML + + ++ + + +- + Save current notes + Salvar notas atuais + + ++ + +- + Page load progress + Progresso do carregamento da página + + +- ++ + Hide menu + Esconder menu + + +- ++ + Read only + Somente leitura + + +- ++ + Show HTML + Mostrar HTML + + +- +- ++ ++ + HTML files (*.html *.htm) + Arquivos HTML (*.html *.htm) + + +- ++ + Select file to load + Selecionar arquivo para carregar + + +- ++ + Select file to open + Selecionar arquivo para abrir + + +- ++ + Save a copy + Salvar uma cópia + + +- ++ + Open image... + Abrir imagem... + + +- ++ + Insert image from URL + Inserir imagem da URL + + +- +- ++ ++ + Enter URL: + URL: + + +- ++ + Create link + Criar link + + +- ++ + Font + Fonte + + +- ++ + Select font: + Selecione a fonte: + + +- ++ + XS + EP + + +- ++ + S + P + + +- +- ++ ++ + M + M + + +- ++ + L + G + + +- ++ + XL + EG + + +- ++ + XXL + EEG + + +- ++ + Font size + Tamanho da fonte + + +- ++ + Font size: + Tamanho da fonte: + + +- ++ + Zoom: %1% + + + +- ++ + Select color + Selecionar cor + + +- ++ + Choose image file + Escolhar arquivo de imagem + + +- +- +- ++ ++ ++ + No data available + Nenhum dado disponível + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7116,55 +7116,55 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + Formatos de imagem ativos + + +- ++ + Preview + Previsualização + + +- ++ + Flyer + + + +- ++ + Cabinet + Gabinete + + +- ++ + Controller + Controle + + +- ++ + Marquee + + + +- ++ + Title + Título + + +- ++ + PCB + + + +- ++ + Software snap + Snap de software + + +- +- ++ ++ + deactivated + desativado + + +- ++ ++ + +- + activated + ativado + +@@ -7592,42 +7592,42 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + JoystickCalibrationWidget + +- ++ + Enable/disable axis %1 + Habilitar/desabilitar eixo %1 + + +- ++ + Axis %1: + Eixo %1: + + +- ++ + Reset calibration of axis %1 + Reiniciar calibração do eixo %1 + + +- ++ + Current value of axis %1 + Valor atual do eixo %1 + + +- ++ + DZ: + ZM: + + +- ++ + Deadzone of axis %1 + Zona morta do eixo %1 + + +- ++ + S: + + + +- ++ + Sensitivity of axis %1 + Sensibilidade do eixo %1 + +@@ -7681,67 +7681,67 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + JoystickTestWidget + +- ++ + A%1: %v + + + +- ++ + Current value of axis %1 + Valor atual do eixo %1 + + +- ++ + B%1 + + + +- ++ + Current state of button %1 + Estado atual do botão %1 + + +- ++ + H%1: 0 + + + +- ++ + Current value of hat %1 + Valor atual do hat %1 + + +- ++ + T%1 DX: 0 + + + +- ++ + Current X-delta of trackball %1 + Diferença X atual do trackball %1 + + +- ++ + T%1 DY: 0 + + + +- ++ + Current Y-delta of trackball %1 + Diferença Y atual do trackball %1 + + +- ++ + H%1: %2 + + + +- ++ + T%1 DX: %2 + + + +- ++ + T%1 DY: %2 + + +@@ -7801,426 +7801,426 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + desconhecido + + +- +- +- ++ ++ ++ + good + bom + + +- +- ++ ++ + bad + ruim + + +- +- +- ++ ++ ++ + preliminary + preliminar + + +- +- ++ ++ + supported + suportado + + +- +- ++ ++ + unsupported + não suportado + + +- +- +- ++ ++ ++ + imperfect + imperfeito + + +- ++ + yes + sim + + +- ++ + no + não + + +- ++ + baddump + dump ruim + + +- ++ + nodump + sem dump + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + Desconhecido + + +- ++ + On + Ligado + + +- ++ + Off + Desligado + + +- ++ + audio + + + +- ++ + unused + não usado + + +- ++ + Unused + Não usado + + +- ++ + cpu + + + +- ++ + vector + vetor + + +- ++ + lcd + + + +- ++ + joy4way + + + +- ++ + joy8way + + + +- ++ + trackball + + + +- ++ + joy2way + + + +- ++ + doublejoy8way + + + +- ++ + dial + discador + + +- ++ + paddle + + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + + + +- ++ + lightgun + + + +- ++ + doublejoy4way + + + +- ++ + vdoublejoy2way + + + +- ++ + doublejoy2way + + + +- ++ + printer + impressora + + +- ++ + cdrom + + + +- ++ + cartridge + cartucho + + +- ++ + cassette + + + +- ++ + quickload + carregamento rápido + + +- ++ + floppydisk + disquete + + +- ++ + serial + + + +- ++ + snapshot + + + +- ++ + original + + + +- ++ + compatible + compatível + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: impossível abrir arquivo do ícone, por favor verifique permissões de acesso para %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + FATAL: impossível abrir o arquivo de ícone %1 + + +- ++ + 7z error + erro do 7z + + +- ++ + libarchive error + erro do libarchive + + +- ++ + Waiting for data... + Aguardando dados... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + FATAL: impossível iniciar o executável %1, arquivo '%2' não existe + + +- +- ++ ++ + emulator info: type = %1, version = %2 + informação do emulador: tipo = %1, versão = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: impossível determinar o tipo e versão do emulador + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + Carregando, por favor espere... + + +- +- ++ ++ + loading favorites and play history + carregando favoritos e histórico + + +- +- ++ ++ + done (loading favorites and play history) + feito (carregando favoritos e histórico) + + +- +- ++ ++ + total start-up time: %1 + tempo total de inicialização: %1 + + +- ++ + XML data - %p% + dados XML - %p% + + +- ++ + verifying ROM status for '%1' + verificando estado da ROM para '%1' + + +- ++ + WARNING: couldn't find machine information for '%1' + AVISO: impossível encontrar informações de máquina para '%1' + + +- ++ + Updating + Atualizando + + +- ++ + Name + Nome + + +- ++ + Source file + Arquivo fonte + + +- ++ + Is BIOS? + É BIOS? + + +- ++ + Runnable + Executável + + +- ++ + Clone of + Clone de + + +- ++ + ROM of + ROM de + + +- ++ + Sample of + Exemplo de + + +- ++ + Is device? + É dispositivo? + + +- ++ + Year + Ano + + +- ++ + Manufacturer + Fabricante + + +- +- ++ ++ + ROM + ROM + + +- +- +- +- ++ ++ ++ ++ + N/A + + + +- +- ++ ++ + error text = %1 + texto do erro = %1 + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + AVISO: o executável do emulador selecionado não pode ser identificado como MAME + + +- +- ++ ++ + %n supported set(s) + + +@@ -8228,546 +8228,546 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + AVISO: a saída do -listfull mudou, forçando uma atualização do cache de todos os emuladores + + +- ++ + BIOS + BIOS + + +- ++ + Size + Tamanho + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Junção + + +- +- ++ ++ + Region + Região + + +- ++ + Offset + Desvio + + +- +- +- +- ++ ++ ++ ++ + Status + Estado + + +- +- ++ ++ + SHA-1 + + + +- ++ + Device reference + Referência do dispositivo + + +- ++ + Chip + + + +- +- +- ++ ++ ++ + Tag + Etiqueta + + +- +- ++ ++ + Type + Tipo + + +- ++ + Clock + Relógio + + +- ++ + Display + + + +- ++ + Rotate + Rotação + + +- ++ + Flip-X + Inverte-X + + +- ++ + Width + Largura + + +- ++ + Height + Altura + + +- ++ + Refresh + Recarregar + + +- ++ + Pixel clock + Relógio do pixel + + +- ++ + H-Total + + + +- ++ + H-Bend + Curvatura-H + + +- ++ + HB-Start + Início-HB + + +- ++ + V-Total + + + +- ++ + V-Bend + Curvatura-V + + +- ++ + VB-Start + Início-VB + + +- +- ++ ++ + Sound + Som + + +- ++ + Channels + Canais + + +- ++ + Input + Entrada + + +- ++ + Service + Serviço + + +- ++ + Tilt + Declive + + +- ++ + Players + Jogadores + + +- +- ++ ++ + Buttons + Botões + + +- ++ + Coins + Moedas + + +- ++ + Control + Controle + + +- ++ + Minimum + Mínimo + + +- ++ + Maximum + Máximo + + +- ++ + Sensitivity + Sensitividade + + +- ++ + Key Delta + Variação da tecla + + +- ++ + Reverse + Reverso + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + valor DIP + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + AVISO: o cache da lista de máquinas é inválido, forçando atualização + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + AVISO: o banco de lista de máquinas é invalido, forçando atualização + + +- ++ + machine description + descrição da máquina + + +- ++ + tag + etiqueta + + +- ++ + year + ano + + +- ++ + manufacturer + fabricante + + +- ++ + machine name + nome da máquina + + +- ++ + ROM types + Tipos de ROM + + +- ++ + players + jogadores + + +- ++ + driver status + estado do driver + + +- ++ + source file + arquivo fonte + + +- ++ + rank + classificação + + +- ++ + category + categoria + + +- ++ + version + versão + + +- ++ + Filtering, please wait... + Filtrando, por favor espere... + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + AVISO: Defeito do XML: o nome '%1' é usado por vários conjuntos -- por favor informe os desenvolvedores do MAME + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + feito (verificando estado da ROM para todos os conjuntos, tempo = %1) + + +- ++ + pre-caching icons from 7z archive + fazendo pré-cache de ícones do arquivo 7z + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + feito (fazendo pré-cache de ícones do arquivo 7z, tempo = %1) + + +- +- ++ ++ + System / BIOS + Sistema / BIOS + + +- +- ++ ++ + System / Device + Sistema / Dispositivo + + +- ++ + correct + correto + + +- ++ + mostly correct + maioria correto + + +- ++ + incorrect + incorreto + + +- ++ + not found + não encontrado + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Padrão + + +- ++ + Configuration + Configuração + + +- ++ + Mask + Máscara + + +- ++ + Setting + Configuração + + +- ++ + Value + Valor + + +- ++ + Driver + + + +- ++ + Emulation + Emulação + + +- ++ + Color + Cor + + +- ++ + Graphic + Gráfico + + +- ++ + Cocktail + + + +- ++ + Protection + Proteção + + +- ++ + Save state + Salvar estado + + +- ++ + Palette size + Tamanho da paleta + + +- ++ + BIOS set + Conjunto de BIOS + + +- ++ + Description + Descrição + + +- ++ + Sample + Exemplo + + +- ++ + Disk + Disco + + +- ++ + MD5 + + + +- ++ + Index + Índice + + +- ++ + Adjuster + Ajustador + + +- ++ + Software list + Lista de Software + + +- ++ + Category + Categoria + + +- ++ + Item + + + +- ++ + Device + Dispositivo + + +- ++ + Mandatory + Mandatório + + +- ++ + Interface + + + +- ++ + Instance + Instância + + +- ++ + Brief name + Nome resumido + + +- ++ + Extension + Extensão + + +- ++ + RAM options + Opções de RAM + + +- ++ + Option + Opção + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + AVISO: impossível abrir cache de estado da ROM, por favor verifique as ROMs + + +- ++ + loading ROM state from cache + carregando estado da ROM do cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + feito (carregando estado da ROM do cache, tempo = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n estado de ROM carregado do cache +@@ -8775,34 +8775,34 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + processing machine list + processando lista de máquinas + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + AVISO: impossível determinar versão do emulador do cache da lista de máquinas + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + INFORMAÇÃO: o cache de lista de máquinas será atualizado devido ao novo formato + + +- ++ + loading machine data from machine list cache + carregando dados da máquina do cache da lista de máquinas + + +- +- ++ ++ + Machine data - %p% + Dados da máquina - %p% + + +- ++ + and %n device(s) loaded + + e %n dispositivo carregado +@@ -8810,7 +8810,7 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + , %n BIOS set(s) + + , %n conjuto de BIOS +@@ -8818,218 +8818,218 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Informação do estado da ROM: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + AVISO: cache de estado de ROM está imcompleto ou desatualizado, iniciando uma checagem automática de ROM + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + AVISO: cache de estado de ROM está imcompleto ou desatualizado, por favor re-verifique as ROMs + + +- ++ + determining emulator version and supported sets + determinando versão do emulador e conjuntos suportados + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + feito (determinando versão do emulador e conjuntos suportados, tempo = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL: impossível determinar o número de conjuntos suportados + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + AVISO: Cache de dados XML está incompleto, invalidando cache de dados XML + + +- ++ + verifying ROM status for all sets + verificando estado da ROM para todos os conjuntos + + +- ++ + ROM, CHD + + + +- ++ + CHD + + + +- ++ + loading XML data and recreating cache + carregando dados XML e recriando cache + + +- ++ + ? + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + AVISO: atributo nome está vazio na linha %1 do XML (conjunto será ignorado!) -- por favor informe os desenvolvedores do MAME e inclua a saída com problema do --listxml + + +- +- ++ ++ + ascending + crescente + + +- +- ++ ++ + descending + decrescente + + +- ++ + ROM state filter already active + Filtro de estado da ROM já ativo + + +- ++ + please wait for ROM verification to finish and try again + por favor aguarde a verificação de ROM terminar e tente novamente + + +- ++ + please wait for reload to finish and try again + por favor espere o fim do recarregamento e tente novamente + + +- ++ + applying ROM state filter + aplicando filtro de estado de ROM + + +- ++ + State filter - %p% + Filtro de estado - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + feito (aplicando filtro de estado de ROM, tempo = %1) + + +- ++ + saving favorites + salvando favoritos + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: impossível carregar arquivo de favoritos para escrita, caminho = %1 + + +- ++ + saving play history + salvando histórico de jogadas + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: impossível abrir arquivo de histórico de jogadas para escrita, camiho = %1 + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + + + +- ++ + S: + + + +- ++ + T: + T: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + AVISO: chamada de auditoria do emulador não acabou sem erros -- código de saída = %1, estado de saída = %2 + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + quebrado + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERRO: impossível abrir cache de estado da ROM para escrita, caminho = %1 + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: impossível iniciar o executável do MAME dentro de um tempo razoável, desistindo + + +- +- +- ++ ++ ++ + ROM check - %p% + Verificação da ROM - %p% + + +- +- ++ ++ + Optional + Opcional + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + verificando estado real de %n conjunto não mencionado durante audição +@@ -9037,7 +9037,7 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + feito (verificando estado real de %n conjunto não mencionado durante audição) +@@ -9045,56 +9045,56 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + feito (verificando estado da ROM para '%1', tempo = %2) + + +- +- ++ ++ + ROM state + Estado da ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + Estado da ROM para '%1' é '%2' + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + feito (carregando dados da máquina do cache da lista de máquinas, tempo = %1) + + +- ++ + parsing machine data and recreating machine list cache + analisando dados das máquinas e recriando cache de lista de máquinas + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + ERRO: impossível abrir cache da lista de máquinas para escrita, caminho = %1 + + +- +- ++ ++ + sorting machine list by %1 in %2 order + ordenando lista de máquinas por %1 na ordem %2 + + +- +- ++ ++ + restoring machine selection + restaurando seleção de máquinas + + +- ++ + done (processing machine list, elapsed time = %1) + feito (processando lista de máquinas, tempo = %1) + + +- ++ + %n machine(s) + + %n máquina +@@ -9102,47 +9102,47 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + AVISO: lista de máquinas não totalmente analisada, invalidando cache de lista de máquinas + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + AVISO: lista de máquinas desatualizada, invalidando cache da lista de máquinas + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + feito (carregando dados XML e recriando cache, tempo = %1) + + +- ++ + pre-caching icons from ZIP archive + pre-cache de ícones do arquivo ZIP + + +- ++ + Icon cache - %p% + Cache de ícones - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + feito (pre-cache de íconos do arquivo ZIP, tempo = %1) + + +- ++ + pre-caching icons from archive + fazendo pré-cache dos ícones do arquivo + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + feito (fazendo pré-cache de ícones do arquivo, tempo = %1) + + +- ++ + %n icon(s) loaded + + %n ícone carregado +@@ -9150,77 +9150,77 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + pre-caching icons from directory + pre-cache de ícones do diretório + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + feito (pre-cache de ícones do diretório, tempo = %1) + + +- ++ + loading icons from cache database + carregando ícones da base de dados do cache + + +- ++ + done (loading icons from cache database, elapsed time = %1) + feito (carregando ícones da base de dados do cache, tempo = %1) + + +- ++ + loading category.ini + carregando category.ini + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + ERRO: impossível abrir '%1' para leitura -- arquivo category.ini não disponível + + +- ++ + done (loading category.ini, elapsed time = %1) + feito (carregando category.ini, tempo = %1) + + +- ++ + loading catver.ini + carregando catver.ini + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + ERRO: impossível abrir '%1' para leitura -- arquivo catver.ini não disponível + + +- ++ + done (loading catver.ini, elapsed time = %1) + feito (carregando catver.ini, tempo = %1) + + +- ++ + %1 category / %2 version records loaded + %1 categoria / %2 versão de registros carregados + + +- ++ + Category view - %p% + Visão de categoria - %p% + + +- ++ + %n category record(s) loaded + + %n registo de categoria carregado +@@ -9228,7 +9228,7 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + + +- ++ + Version view - %p% + Visão de versão - %p% + +@@ -9397,18 +9397,18 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + Versão + + +- +- +- +- ++ ++ ++ ++ + true + verdadeiro + + +- +- +- +- ++ ++ ++ ++ + false + falso + +@@ -9550,229 +9550,229 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + + MainWindow + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Padrão + + +- ++ + Toggle maximization of embedded emulator windows + Ativar/desativar maximização das janelas de emuladores embutidos + + +- ++ + Searching machines - %p% + Buscando máquinas - %p% + + +- ++ + Show machine/software titles + Mostrar títulos das máquinas/softwares + + +- ++ + Show machine- or software-titles at the bottom of all images + Mostrar títulos de máquinas ou software embaixo de qualquer imagem + + +- ++ + Embed emulator widget + Embutir widget do emulador + + +- ++ + &Embed + &Embutir + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Matar emulador(res) selecionado(s) (envia sinal KILL para o(s) processo(s) do emulador) + + +- ++ + &Kill + &Matar + + +- +- ++ ++ + Copy emulator command line to clipboard + Copiar linha de comando do emulador para a área de transferência + + +- +- ++ ++ + &Copy command + &Copiar comando + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jogar + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jogar &embutido + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Para &favoritos + + +- ++ ++ ++ ++ ++ Check &ROM state ++ Verificar estado da &ROM ++ ++ ++ + + + +- Check &ROM state +- Verificar estado da &ROM ++ &Analyse ROM... ++ &Analisar ROM... + + + + + + +- &Analyse ROM... +- &Analisar ROM... +- +- +- +- +- +- + Rebuild current machine's ROM set with the ROMAlyzer + Reconstruir ROM da máquina atual com o ROMAlyzer + + +- ++ + Remove from favorites + Remover dos favoritos + + +- +- ++ ++ + &Remove + &Remover + + +- ++ + Clear all favorites + Limpar favoritos + + +- +- ++ ++ + &Clear + &Limpar + + +- ++ + Save favorites now + Salvar favoritos agora + + +- +- ++ ++ + &Save + &Salvar + + +- ++ + Remove from played + Remover dos jogados + + +- ++ + Clear all played + Limpar todos os jogados + + +- ++ + Save play-history now + Salvar histórico de jogadas agora + ++ ++ ++ ++ ++ ++ Set tab position north ++ Definir posição da aba ao norte ++ ++ ++ ++ ++ ++ ++ &North ++ &Norte ++ + + + + + +- Set tab position north +- Definir posição da aba ao norte ++ Set tab position south ++ Definir posição da aba ao sul + + + + + + +- &North +- &Norte ++ &South ++ &Sul + + + + + + +- Set tab position south +- Definir posição da aba ao sul ++ Set tab position west ++ Definir posição da aba ao Oeste + + + + + + +- &South +- &Sul ++ &West ++ &Oeste + + + + + + +- Set tab position west +- Definir posição da aba ao Oeste ++ Set tab position east ++ Definir posição da aba ao Leste + + + + + + +- &West +- &Oeste +- +- +- +- +- +- +- Set tab position east +- Definir posição da aba ao Leste +- +- +- +- +- +- + &East + &Leste + +@@ -9790,66 +9790,66 @@ Usar valor local para a opção '%1', sobrescrever com o valor global + Aguardando dados... + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + por favor espere o filtro de estado de ROM terminar e tente novamente + + +- +- ++ ++ + please wait for ROM verification to finish and try again + por favor aguarde a verificação de ROM terminar e tente novamente + + +- ++ ++ + +- + please wait for image check to finish and try again + por favor espere a verificação de imagem terminar e tente novamente + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + por favor espere o ROMAlyzer terminar a análise atual e tente novamente + + ++ + +- + ROM verification already active + Verificação de ROM já ativa + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + por favor espere o fim do recarregamento e tente novamente + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirmar + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9860,22 +9860,22 @@ Ele vai sobrescrever dados de cache existente. + Você realmente quer verificar o estado de todas as ROMs agora? + + +- ++ + automatic ROM check triggered + verificação automática de ROM ativado + + +- ++ + image cache cleared + cache de imagens limpo + + +- ++ + icon cache cleared + cache de ícones limpo + + +- ++ + freed %n byte(s) in %1 + + liberado %n byte em %1 +@@ -9883,7 +9883,7 @@ Você realmente quer verificar o estado de todas as ROMs agora? + + + +- ++ + %n entry(s) + + %n entrada +@@ -9891,7 +9891,7 @@ Você realmente quer verificar o estado de todas as ROMs agora? + + + +- ++ + removed %n byte(s) in %1 + + removido %n byte em %1 +@@ -9899,7 +9899,7 @@ Você realmente quer verificar o estado de todas as ROMs agora? + + + +- ++ + %n file(s) + + %n arquivo +@@ -9907,167 +9907,167 @@ Você realmente quer verificar o estado de todas as ROMs agora? + + + +- ++ + YouTube on-disk cache cleared (%1) + Cache em disco do YouTube limpo (%1) + + +- ++ + ROM state cache file '%1' removed + arquivo de cache de estado de ROM '%1' removido + + + +- ++ + About Qt + Sobre o Qt + + +- ++ + ERROR: no match found (?) + ERRO: nenhuma ocorrência encontrada (?) + + +- +- ++ ++ + Export to... + Exportar para... + + +- +- ++ ++ + <inipath>/%1.ini + + + +- +- +- +- ++ ++ ++ ++ + Select file... + Selecionar arquivo... + + +- +- ++ ++ + <p>No data available</p> + <b>Nenhum dado disponível</b> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Nenhum dado disponível + + + +- ++ + Embedded emulators + Emuladores embutidos + + +- ++ + Release emulator + Soltar emulador + + +- ++ + WARNING: no matching window for emulator #%1 found + AVISO: nenhuma janela para o emulador #%1 encontrada + + +- ++ + Embedding failed + Embutir falhou + + +- +- ++ ++ + Scanning pause key + Escaneando tecla de pausa + + +- ++ + Are you sure you want to clear the favorites list? + Tem certeza que deseja limpar a lista de favoritos? + + +- ++ + Are you sure you want to clear the play history? + Tem certeza que deseja limpar o histórico de jogadas? + + +- +- ++ ++ + Choose export file + Escolha o arquivo de exportação + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Todos os arquivos (*) + + +- +- ++ ++ + Choose import file + Escolha o arquivo de importação + + +- +- ++ ++ + WARNING: invalid inipath + AVISO: inipath inválido + + +- +- ++ ++ + stopping current processing upon user request + parando processamento atual devido à requisição do usuário + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Suas mudanças ainda não foram aplicadas. + Sair realmente? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Existem um ou mais emuladores em execução. + Eles devem ser mortos ao sair? + + +- ++ + There are one or more running downloads. Quit anyway? + Existem um ou mais downloads em execução. + Sair mesmo assim? + + +- ++ + cleaning up + limpando + + +- ++ + aborting running downloads + abortando downloads em execução + + +- ++ + saving main widget layout + salvando layout do widget principal + +@@ -10078,292 +10078,292 @@ Sair mesmo assim? + Limpar cache do ProjectMESS + + +- ++ + Default configuration + Configuração padrão + + +- ++ + ProjectMESS in-memory cache cleared (%1) + Cache em memória do ProjectMESS limpo (%1) + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + AVISO: impossível remover o arquivo de cache '%1' do estado da ROM, por favor cheque as permissões + + +- ++ + ProjectMESS page for system '%1' + Página do ProjectMESS para o sistema '%1' + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + Baixando página do ProjectMESS para o sistema '%1', por favor espere... + + +- ++ + disconnecting audio source from audio sink + desconectando fonte de áudio do sumidouro de áudio + + +- +- ++ ++ + Enter search string + Entre com o texto de busca + + +- ++ + Dock / undock this widget + Anexar / desanexar este widget + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + nota: os caracteres especiais $, (, ), *, +, ., ?, [, ], ^, {, |, } e \ devem ser precedidos pelo caracter de escape quando forem utilizados literalmente! + + +- +- +- +- ++ ++ ++ ++ + Reset + Redefinir + + +- ++ + Negate search + Negar busca + + +- ++ + sorry, devices cannot run standalone + desculpe, dispositivos não podem ser executados sozinhos + + +- ++ + No devices available + Nenhum dispositivo disponível + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + padrão + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + &Reconstruir ROM... + + +- ++ + Include BIOS sets + Incluir conjuntos de BIOS + + +- ++ + Include device sets + Incluir conjuntos de dispositivos + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + Destravar classificações + + +- ++ + machine list reload is already active + recarregamento da lista de máquinas já está ativa + + +- +- ++ ++ + saving machine selection + salvando seleção de máquinas + + +- ++ + ERROR: can't load HTML file '%1' + ERRO: impossível abrir arquivo HTML '%1' + + +- ++ + ERROR: can't load PDF viewer from '%1' + ERRO: impossível abrir visualizador PDF em '%1' + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + por favor espere o ROMAlyzer terminar a reconstrução atual e tente novamente + + +- ++ + triggering an automatic ROM check on next reload + ativando uma verificação de ROM automática na próxima execução + + +- ++ + machine list cache file '%1' removed + arquivo de cache da lista de máquinas '%1' removido + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + AVISO: impossível remover o arquivo de cache '%1' da lista de máquinas, por favor cheque as permissões + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + INFORMAÇÃO: o modo arcade precisa ser configurado primeiro, iniciando o diálogo respectivo + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + modo arcade: executando o Arcade QMC2, comando = '%1' + + +- ++ + WARNING: failed launching QMC2 Arcade + AVISO: falha ao iniciar o Arcade QMC2 + + +- ++ + ProjectMESS page for '%1' / '%2' + Página do ProjectMESS para '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Baixando página do ProjectMESS para '%1' / '%2', por favor espere... + + +- ++ + Emulator for this machine + Emulador para esta máquina + + +- ++ + please wait for sorting to finish and try again + por favor espere o fim da ordenação e tente novamente + + +- ++ + destroying YouTube video widget + destruindo widget de vídeos do YouTube + + +- ++ + saving current machine's favorite software + salvando software favorito da máquina atual + + +- ++ + saving current machine's device configurations + salvando configurações de dispositivos da máquina atual + + +- ++ + destroying machine list + destruindo lista de máquinas + + +- ++ + destroying emulator configuration instances + destruindo instâncias de configuração do emulador + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + Mostrar títulos de máquina ou software somente quando a lista de máquinas não está visível devido ao layout atual + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- +- +- +- ++ ++ ++ ++ + Component setup + Configuração de componente + + +- +- +- +- ++ ++ ++ ++ + Component setup... + Configuração de componente... + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + destroying media player + destruindo tocador de mídia + + +- ++ + destroying image widgets + destruindo widgets de imagens + + +- ++ + destroying open dialogs + destruindo diálogos abertos + + +- ++ + destroying process manager + destruindo gerenciador de processo + + +- ++ + killing %n running emulator(s) on exit + + matando %n emulador em execução na saída +@@ -10371,7 +10371,7 @@ Sair mesmo assim? + + + +- ++ + keeping %n running emulator(s) alive + + mantendo %n emulador em execução vivo +@@ -10379,60 +10379,60 @@ Sair mesmo assim? + + + +- ++ + destroying network access manager + destruindo gerenciador de acesso à rede + + +- ++ + so long and thanks for all the fish + até logo e obrigado pelos peixes + + +- ++ + Welcome to QMC2 v%1! + Bem vindo ao QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + Carregando, por favor espere... + + +- ++ + loading style sheet '%1' + carregando estilos '%1' + + +- ++ + removing current style sheet + removendo estilo atual + + +- ++ + using default color palette for GUI style '%1' + usando paleta de cor padrão para o estilo de interface '%1' + + +- ++ + using custom color palette + usando paleta de cores personalizada + + +- ++ + YouTube index - %p% + Índice do YouTube - %p% + + +- ++ + %n video info record(s) loaded + + %n registro de informação de vídeo carregado +@@ -10440,144 +10440,144 @@ Sair mesmo assim? + + + +- ++ + Select one or more audio files + Selecione um ou mais arquivos de audio + + +- ++ + Add URL + Adicionar URL + + +- ++ + Enter valid MP3 stream URL: + Entre com uma URL de stream MP3 válido: + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + reprodutor de músicas: informação da faixa: título = '%1', artista = '%2', album = '%3', gênero = '%4' + + +- ++ + Buffering %p% + + + +- +- ++ ++ + running + executando + + +- +- ++ ++ + Play tagged - %p% + Jogar etiquetados - %p% + + +- ++ + Add favorites - %p% + Adicionar aos favoritos - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + por favor espere a atividade atual terminar e tente novamente (essa operação em lote só pode ser executada exclusivamente) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + Ferramenta de ROM com etiquetados - %p% + + +- +- ++ ++ + Tag - %p% + Etiquetar - %p% + + +- +- ++ ++ + Tagging, please wait... + Etiquetando, por favor espere... + + +- +- ++ ++ + Untag - %p% + Remover Etiqueta - %p% + + +- +- ++ ++ + Untagging, please wait... + Removendo etiquetas, por favor espere... + + +- +- ++ ++ + Invert tag - %p% + Inverter etiqueta - %p% + + +- +- ++ ++ + Inverting tags, please wait... + Invertendo etiquetas, por favor espere... + + +- ++ + External browser + Navegador externo + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Detalhe do software + + +- ++ + Choose overlay color + Escolha a cor de sobreposição + + +- ++ + WARNING: ROM path '%1' doesn't exist + AVISO: caminho de ROMs '%1' não existe + + +- ++ + WARNING: ROM path '%1' isn't accessible + AVISO: caminho de ROMs '%1' não está acessível + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! +@@ -10586,7 +10586,7 @@ Please check the 'rompath' option in the global emulator configuration + Por favor verifique a opção 'rompath' nas configurações globais de emulador para corrigir, caso contrário as ROMs provavelmente não estarão disponíveis para o emulador! + + +- ++ + The ROM paths + + %1 +@@ -10603,63 +10603,63 @@ não existem ou estão inacessíveis. + Por favor verifique a opção 'rompath' nas configurações globais de emulador para corrigir, caso contrário as ROMs provavelmente não estarão disponíveis para o emulador! + + +- ++ + Check ROM path + Verificar caminho das ROMs + + +- ++ + processing global emulator configuration + processando configuração global do emulador + + +- +- ++ ++ + Export global MAME configuration + Exportar configuração global do MAME + + +- ++ + Import from... + Importar de... + + +- +- ++ ++ + Import global MAME configuration + Importar configuração global do MAME + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + Habilitar processamento dos notificadores de saída do MAME (força '-output console') + + +- +- ++ ++ + <inipath>/mame.ini + + + +- +- +- ++ ++ ++ + paused + pausado + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Ativar/desativar pausa automática de emuladores embutidos (segure pressionado para abrir o menu) + + +- ++ + Scan the pause key used by the emulator + Escanear tecla de pausa usada pelo emulador + + +- ++ + Scan pause key... + Escanear tecla de pausa... + +@@ -10667,52 +10667,52 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + Icon + Ícone + + +- ++ + setting GUI style to '%1' + configurando estilo da interface para '%1' + + +- ++ + WARNING: GUI style '%1' not found + AVISO: estilo de interface '%1' não encontrado + + +- ++ + WARNING: can't open style sheet '%1' + AVISO: impossível abrir folha de estilo '%1' + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + Choose file to store download + Escolha o arquivo para salvar o download + + + ++ + +- + M.A.M.E. Catalog / Launcher II + + + + +- ++ + Icon / Value + Ícone / Valor + +@@ -10721,10 +10721,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Year + Ano + +@@ -10733,10 +10733,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Fabricante + +@@ -10745,10 +10745,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Name + Nome + +@@ -10757,10 +10757,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Tipos de ROM + +@@ -10769,9 +10769,9 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + Category + Categoria + +@@ -10780,9 +10780,9 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + Version + Versão + +@@ -11022,9 +11022,9 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -11101,10 +11101,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Players + Jogadores + +@@ -11200,10 +11200,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Estado do driver + +@@ -11220,7 +11220,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + &Notes + &Notas + +@@ -11333,10 +11333,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Tag + Etiqueta + +@@ -11345,10 +11345,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Source file + Arquivo fonte + +@@ -11358,10 +11358,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Rank + Classificação + +@@ -11430,13 +11430,13 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Machine / Attribute + Máquina / Atributo + + + +- ++ + Machine / Clones + Máquina / Clones + +@@ -11447,7 +11447,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Category / Machine + Categoria / Máquina + +@@ -11458,19 +11458,19 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Version / Machine + Versão / Máquina + + + +- ++ + Search for machines (not case-sensitive) + Buscar por máquinas (não sensível à caixa) + + + +- ++ + Search for machines + Buscar por máquinas + +@@ -11671,9 +11671,9 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- ++ ++ ++ + Add current machine to favorites + Adicionar máquina atual para os favoritos + +@@ -11712,10 +11712,10 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + Verificar estado das ROM da máquina atual + +@@ -12257,7 +12257,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Internal browser + Navegador interno + +@@ -12462,12 +12462,12 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + Travar classificações + +@@ -12561,7 +12561,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + + + +- ++ + Internal PDF viewer + + +@@ -12751,7 +12751,7 @@ Por favor verifique a opção 'rompath' nas configurações globais de + Forçar limpar (remover) TODOS os caches relacionados à emuladores + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12762,24 +12762,24 @@ emulador(es) dentro de um limite de tempo razoável. + Tentar novamente? + + +- ++ + Information + Informação + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Desculpe, o emulador teve uma morte triste :(. + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + Ativar/desativar opções para embutir (segure para exibir o menu) + + +- +- ++ ++ + last message repeated %n time(s) + + última mensagem se repetiu %n vez +@@ -12787,65 +12787,65 @@ Tentar novamente? + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + Jogar máquina selecionada + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Jogar máquina selecionada (embutida) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + Analisar ROM da máquina atual com o ROMAlyzer + + +- ++ + To favorites + Para favoritos + + +- ++ + Kill emulator + Matar emulador + + +- ++ + &Kill emulator + &Matar emulador + + +- ++ + destroying audio effects dialog + destruindo janela de efeitos de áudio + + +- ++ + emulator #%1 is already embedded + emulador #%1 já está embutido + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + AVISO: múltiplas janelas para o emulador #%1 encontradas, escolhando ID de janela %2 para embutir + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + embutindo emulador #%1, ID da janela = %2 + +@@ -12995,102 +12995,40 @@ Tentar novamente? + + MiniWebBrowser + +- ++ + Enter URL + Insira a URL + + +- +- Open link +- Abrir link +- +- +- +- Open link in new window +- Abrir link em uma nova janela +- +- +- +- Open image in new window +- Abrir imagem em uma nova janela +- +- +- +- Save link as... +- Salvar link como... +- +- +- +- Copy link +- Copiar link +- +- +- +- Save image as... +- Salvar imagem como... +- +- +- +- Copy image +- Copiar imagem +- +- +- +- Copy image address +- Copiar endereço da imagem +- +- +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + Visualizador PDF + + + + +- + Go back + Anterior + + + + +- + Go forward + Próximo + + +- +- Reload +- Recarregar +- +- +- +- Stop +- Parar +- +- +- +- Copy +- Copiar +- +- +- +- Inspect +- Inspecionar +- +- +- ++ + WARNING: invalid network reply and/or network error + AVISO: Resposta inválida da rede/ou erro de rede + +@@ -13148,8 +13086,8 @@ Tentar novamente? + + + +- +- ++ ++ + Enter search string + Entre o texto de busca + +@@ -13303,350 +13241,335 @@ Tentar novamente? + + Options + +- +- +- +- ++ ++ ++ ++ + Category + Categoria + + +- +- +- +- ++ ++ ++ ++ + Version + Versão + + +- ++ + Check all ROM states + Verificar o estado de todas as ROMs + + +- ++ + About QMC2 + Sobre QMC2 + + +- ++ + Analyze tagged sets + Analisar conjuntos etiquetados + + +- ++ + Export ROM Status + Exportar estado da ROM + + +- ++ + Copy tagged sets to favorites + Copiar conjuntos etiquetados para os favoritos + + +- ++ + Online documentation + Documentação online + + +- ++ + Clear image cache + Limpar cache de imagens + + +- ++ + Setup arcade mode + Configurar modo arcade + + +- ++ + Clear icon cache + Limpar cache de ícones + + +- +- ++ ++ + Open options dialog + Abrir janela de opções + + +- ++ + Play (independent) + Jogar (independente) + + +- ++ + Play (embedded) + Jogar (embutido) + + +- ++ + About Qt + Sobre o Qt + + +- ++ + Check states of tagged ROMs + Verificar o estados das ROMs etiquetadas + + +- ++ + Recreate template map + Recriar mapa de template + + +- ++ + Check template map + Verificar mapa de template + + +- +- ++ ++ + Stop processing / exit QMC2 + Parar processamento / sair do QMC2 + + +- ++ + Clear YouTube cache + Limpar cache do YouTube + + +- ++ + Toggle ROM state C + Mostrar/esconder estado da ROM C + + +- ++ + Toggle ROM state M + Mostrar/esconder estado da ROM M + + +- ++ + Toggle ROM state I + Mostrar/esconder estado da ROM I + + +- ++ + Toggle ROM state N + Mostrar/esconder estado da ROM N + + +- ++ + Toggle ROM state U + Mostrar/esconder estado da ROM D + + +- ++ + Tag current set + Etiquetar conjunto atual + + +- ++ + Untag current set + Remover etiqueta do conjunto atual + + +- ++ + Toggle tag mark + Alternar marca da etiqueta + + +- ++ + Toggle tag / cursor down + Alternar etiqueta / abaixar cursor + + +- ++ + Toggle tag / cursor up + Alternar etiqueta / subir cursor + + +- ++ + Tag all sets + Etiquetar todos os conjuntos + + +- ++ + Untag all sets + Remover etiqueta de todos os conjuntos + + +- ++ + Invert all tags + Inverter todas as etiquetas + + +- ++ + Tag visible sets + Etiquetar conjuntos visíveis + + +- ++ + Untag visible sets + Desetiquetar conjuntos visíveis + + +- ++ + Invert visible tags + Inverter etiquetas de visíveis + + +- ++ + Hierarchical view + Visualização hierárquica + + +- ++ + Custom view + + + +- ++ + Run external ROM tool + Executar ferramenta de ROM externa + + +- ++ + Run ROM tool for tagged sets + Executar ferramenta de ROM para os conjuntos etiquetados + + +- ++ + Check software-states + Verificar estados de software + + +- ++ + Toggle full screen + Ativar tela cheia + + +- ++ + Software-list view-mode flat + Modo plano da visualização da lista de software + + +- ++ + Software-list view-mode tree + Modo árvore da visualização da lista de software + + +- ++ + Previous track (audio player) + Faixa anterior (reprodutor de música) + + +- ++ + Next track (audio player) + Próxima faixa (reprodutor de música) + + +- ++ + Fast backward (audio player) + Retrocesso rápido (reprodutor de música) + + +- ++ + Fast forward (audio player) + Progresso rápido (reprodutor de música) + + +- ++ + Stop track (audio player) + Parar faixa (reprodutor de música) + + +- ++ + Pause track (audio player) + Pausar faixa (reprodutor de música) + + +- ++ + Play track (audio player) + Reproduzir faixa (reprodutor de música) + + +- ++ + Raise volume (audio player) + Aumentar volume (reprodutor de música) + + +- ++ + Lower volume (audio player) + Baixar volume (reprodutor de música) + + +- ++ + Increase rank + Aumentar classificação + + +- ++ + Decrease rank + Diminuir classificação + + +- ++ + Plus (+) + Mais (+) + + +- ++ + Minus (-) + Menos (-) + + +- ++ + Cursor down + Cursor para baixo + + +- ++ + End + + + +- ++ + Escape + + + +- ++ + Cursor left + Cursor para esquerda + + +- ++ + Home + + + +- ++ + Page down + + + +- ++ + Page up + + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- use ponto e vírgula (;) para separar múltiplas pastas +- +- ++ + + + +@@ -13656,799 +13579,814 @@ Tentar novamente? + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ use ponto e vírgula (;) para separar múltiplas pastas ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + use ponto e vírgula (;) para separar múltiplos arquivos + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + Uma configuração de emulador específica para máquina foi detectada. + Usar configurações de máquina local, sobrescrever com as configurações globais ou não aplicar? + + +- ++ + please reload machine list for some changes to take effect + por favor recarregue a lista de máquinas para as alterações terem efeito + + +- ++ + sorting machine list by %1 in %2 order + ordenando lista de máquinas por %1 na ordem %2 + + +- ++ + 7z error + erro do 7z + + +- +- ++ ++ + FATAL: can't open icon file %1 + FATAL: impossível abrir arquivo de ícone %1 + + +- ++ + libarchive error + erro do libarchive + + +- ++ + triggering automatic reload of machine list + ativando recarregamento automático da lista de máquinas + + +- ++ + &Foreign emulators + &Emuladores estrangeiros + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + Especificar IDs estrangeiros pré-definidos para este emulador, executável da tela de 'emuladores estrangeiros' + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + Escolha o ícone para esse emulador estrangeiro (segure para exibir o menu) + + +- +- ++ ++ + Default icon + Ícone padrão + + +- +- ++ ++ + No icon + Sem ícone + + +- ++ + N/A + + + +- ++ + Choose XML cache database file + Escolher arquivo do banco de dados do cache XML + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + Isso irá remover <b>todos</b> os dados de usuário existentes e recriará o banco de dados + Tem certeza que deseja fazer isso? + + +- ++ + &Yes + &Sim + + +- ++ + &No + &Não + + +- ++ + Choose user data database file + Escolha o arquivo de base de dados do usuário + + +- ++ + Choose 7-zip tool + Escolher ferramenta 7-zip + + +- ++ + Choose machine list database file + Escolha o arquivo da base de dados da lista de máquinas + + +- ++ + Choose software list cache database file + Escolher arquivo de banco de dados do cache da lista de software + + +- ++ + Choose dat-info database file + Escolher arquivo de banco de dados de informações dat + + +- ++ + Choose MESS machine info DB + Escolha o BD de informações de máquinas do MESS + + +- ++ + Choose MAME emulator info DB + Escolha o BD de informações de emulador do MAME + + +- ++ + Choose MESS emulator info DB + Escolha o BD de informações de emulador do MESS + + +- ++ + Choose compressed preview file + Escolha o arquivo comprimido de preview + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + Arquivos ZIP + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + Arquivos 7z + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + Todos os arquivos + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + Arquivos suportados + + +- ++ + Choose compressed flyer file + Escolha o arquivo comprimido de flyer + + +- ++ + Choose compressed icon file + Escolha o arquivo comprimido de ícone + + +- ++ + Choose compressed cabinet file + Escolha o arquivo comprimido de gabinetes + + +- ++ + Choose compressed controller file + Escolha o arquivo comprimido de controles + + +- ++ + Choose compressed marquee file + Escolha o arquivo comprimido de marquees + + +- ++ + Choose compressed title file + Escolha o arquivo comprimido de títulos + + +- ++ + Choose compressed PCB file + Escolha o arquivo comprimido de PCB + + +- ++ + Choose compressed software snap file + Escolha o arquivo comprimido de snapshot de software + + +- ++ + Choose video snap folder + Escolha a pasta de snaps de video + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + Choose image file + Escolha o arquivo de imagem + + +- ++ + Supported image files (%1) + Arquivos de imagem suportados (%1) + + +- ++ + ERROR: couldn't initialize SDL joystick support + ERRO: impossível inicializar suporte a joysticks do SDL + + +- ++ + Enter key + Tecla Enter + + +- ++ + Analyze current machine + Analisar máquina atual + + +- ++ + Copy machine to favorites + Copiar máquina para favoritos + + +- ++ + Reload machine list + Recarregar lista de máquinas + + +- ++ + Check machine's ROM state + Verificar estado das ROM da máquina + + +- ++ + Open ROMAlyzer (system mode) + Abrir ROMAlyzer (modo de sistema) + + +- ++ + Open ROMAlyzer (software mode) + Abrir ROMAlyzer (modo de software) + + +- ++ + Rebuild current machine + Reconstruir máquina atual + + +- ++ + Rebuild tagged machines + Reconstruir máquinas etiquetadas + + +- ++ + Launch arcade mode + Iniciar o modo arcade + + +- ++ + Return key + Tecla de retorno + + +- ++ + Cursor right + Cursor para direita + + +- ++ + Tabulator + Tab + + +- ++ + Cursor up + Cursor para cima + + +- ++ + Activate item + Ativar item + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + AVISO: a configuração não pode ser escrita, por favor verifique as permissões de acesso + + +- +- ++ ++ + Reset to default font + Restaurar para a fonte padrão + + +- +- ++ ++ + No style sheet + Sem folha de estilo + + +- ++ + image cache size set to %1 MB + tamanho do cache de imagem definido para %1 MB + + +- +- ++ ++ + Confirm + Confirmar + + +- ++ + &Local + &Local + + +- ++ + &Overwrite + &Sobrescrever + + +- ++ + Do&n't apply + &Não aplicar + + +- ++ + please restart QMC2 for some changes to take effect + por favor reinicie o QMC2 para que algumas mudanças tenha efeito + + +- ++ + ascending + crescente + + +- ++ + descending + decrescente + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: impossível abrir arquivo do ícone, por favor verifique permissões de acesso para %1 + + +- +- ++ ++ + Preview file + Arquivo de preview + + +- +- ++ ++ + SW snap file + Arquivo de snapshot de software + + +- +- +- ++ ++ ++ + Preview directory + Diretório de preview + + +- +- ++ ++ + Flyer file + Arquivo de flyer + + +- +- +- ++ ++ ++ + Flyer directory + Diretório de flyer + + +- +- ++ ++ + Icon file + Arquivo de ícone + + +- +- +- ++ ++ ++ + Icon directory + Diretório de ícone + + +- +- ++ ++ + Cabinet file + Arquivo de gabinete + + +- +- +- ++ ++ ++ + Cabinet directory + Diretório de gabinete + + +- +- ++ ++ + Controller file + Arquivo de controle + + +- +- +- ++ ++ ++ + Controller directory + Diretório de controle + + +- +- ++ ++ + Marquee file + Arquivo de marquee + + +- +- +- ++ ++ ++ + Marquee directory + Diretório de marquee + + +- +- ++ ++ + Title file + Arquivo de título + + +- +- +- ++ ++ ++ + Title directory + Diretório de título + + +- +- ++ ++ + PCB file + Arquivo de PCB + + +- +- +- ++ ++ ++ + PCB directory + Diretório de PCB + + +- ++ + Choose Qt style sheet file + Escolha o arquivo de estilo do Qt + + +- ++ + Qt Style Sheets (*.qss) + Estilos do Qt (*.qss) + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + Todos os arquivos (*) + + +- ++ + Choose preview directory + Escolha o diretório de previews + + +- ++ + Choose flyer directory + Escolha o diretório de flyers + + +- ++ + Choose icon directory + Escolha o diretório de ícones + + +- ++ + Choose cabinet directory + Escolha o diretório de gabinetes + + +- ++ + Choose controller directory + Escolha o diretório de controles + + +- ++ + Choose marquee directory + Escolha o diretório de marquee + + +- ++ + Choose title directory + Escolha o diretório de títulos + + +- ++ + Choose PCB directory + Escolha o diretório de PCB + + +- ++ + Choose options template file + Escolha o diretório de arquivo de template de opções + + +- +- ++ ++ + Choose emulator executable file + Escolha o arquivo executável do emulador + + +- ++ + Choose emulator log file + Escolha o arquivo de log do emulador + + +- ++ + Choose zip tool + Escolha a ferramenta zip + + +- ++ + Choose ROM tool + Escolha a ferramenta de ROM + + +- ++ + Choose play history file + Escolha o arquivo de histórico de jogos + + +- ++ + Choose ROM state cache file + Escolhar o arquivo de cache do estado das ROMs + + +- +- +- ++ ++ ++ + Choose working directory + Escolha o diretório de trabalho + + +- ++ + Minimize when launching (non-embedded) emulators? + Minimizar quando lançar emuladores (não embutidos)? + + +- ++ + Check images and icons + Verificar imagens e ícones + + +- ++ + Clear ProjectMESS cache + Limpar cache do ProjectMESS + + +- ++ + Full detail view + Visualização detalhada + + +- +- +- +- ++ ++ ++ ++ + Category view + Visualização por categoria + + +- +- +- +- ++ ++ ++ ++ + Version view + Visualização por versão + + +- +- +- ++ ++ ++ + Custom IDs... + IDs customizados... + + +- ++ + Choose cookie database file + Escolher arquivo do banco de dados de cookies + + +- ++ + Choose machine favorites file + Escolha o arquivo de favoritos de máquinas + + +- ++ + Choose machine list cache file + Escolha o arquivo de cache da lista de máquinas + + +- ++ + Choose software state cache directory + Escolher diretório de cache de estado de software + + +- ++ + Choose general software folder + Escolha a pasta geral de software + + +- ++ + Choose front end log file + Escolha o arquivo de log do frontend + + +- ++ + Choose data directory + Escolha o diretório de dados + + +- ++ + Choose MAME machine info DB + Escolha o BD de informações de máquinas do MAME + + +- ++ + Choose software info DB + Escolha o BD de informação de software + + +- ++ + Choose catver.ini file + Escolha o arquivo catver.ini + + +- ++ + Choose category.ini file + Escolha o arquivo category.ini + + +- ++ + Choose software snap directory + Escolha diretório de snapshot de software + + +- ++ + Choose software notes folder + Escolha o diretório das notas de software + + +- ++ + Choose software notes template + Escolha o template de notas de software + + +- +- ++ ++ + HTML files (*.html *.htm) + Arquivos HTML (*.html *.htm) + + +- ++ + Choose system notes folder + Escolha o diretório das notas de sistema + + +- ++ + Choose system notes template + Escolha o modelo das notas de sistema + + +- ++ + shortcut map is clean + mapa de atalhos está limpo + + +- ++ + WARNING: shortcut map contains duplicates + AVISO: mapa de atalhos contém itens duplicados + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + Nenhum joystick encontrado + + +- ++ + joystick map is clean + mapa de joystick está limpo + + +- ++ + WARNING: joystick map contains duplicates + AVISO: mapa de joystick contém itens duplicados + +@@ -14468,2374 +14406,2364 @@ Tem certeza que deseja fazer isso? + &Interface + + +- ++ + Language + Língua + + +- ++ + Application language + Língua da aplicação + + +- +- DE (German) +- DE (Alemão) +- +- +- +- FR (French) +- FR (Francês) +- +- +- +- PL (Polish) +- PL (Polonês) +- +- +- +- PT (Portuguese) +- PT (Português) +- +- +- +- US (English) +- US (Inglês) +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + Esticar imagem para ocupar todo o espaço (do contrário, usar tamanho original) + + +- ++ + Scaled preview + Esticar preview + + +- ++ + Scaled cabinet + Esticar gabinete + + +- ++ + Scaled controller + Esticar controle + + +- ++ + Scaled marquee + Esticar marquee + + +- +- ++ ++ + Show status bar + Mostar barra de estado + + +- +- ++ ++ + Show tool bar + Mostrar barra de ferramentas + + +- ++ + Show the menu bar + Mostrar a barra de menus + + +- ++ + Show menu bar + Mostrar barra de menu + + +- ++ + Show short description of current processing in progress bar + Mostrar descrição curta do processamento atual na barra de progresso + + +- ++ + Show progress texts + Mostrar texto de progresso + + +- ++ + Check for other instances of this QMC2 variant on startup + Verificar por outras instâncias de variações do QMC2 ao iniciar + + +- ++ + Check single instance + Verificar instância única + + +- +- ++ ++ + Only when required + Somente quando requerido + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + Opção requer reinício do QMC2 para ter efeito + + +- ++ + restart required + requer reinício + + +- +- +- ++ ++ ++ + reload required + requer recarregamento + + +- ++ + Scaled title + Tílulo esticado + + +- ++ + Scaled flyer + Flyer esticado + + +- ++ + Application font (= system default if empty) + Fonte da aplicação ( = padrão do sistema se vazio) + + +- ++ + Browse application font + Procurar por fonte da aplicação + + +- ++ + Scaled PCB + PCB esticado + + +- ++ + Emulator log size + Tamanho do log do emulador + + +- ++ + Maximum number of lines to keep in emulator log browser + Número máximo de linhas para manter no browser de log do emulador + + +- +- ++ ++ + unlimited + ilimitado + + +- +- ++ ++ + lines + linhas + + +- ++ + Front end log size + Tamanho do log do frontend + + +- ++ + Maximum number of lines to keep in front end log browser + Número máximo de linhas para manter no browser de log do frontend + + +- ++ + Application font + Fonte da aplicação + + +- ++ + Style sheet + Estilo + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + Arquivo de estilo do Qt (*.qss, deixe em branco para nenhum estilo) + + +- ++ + Browse Qt style sheet file + Procurar por arquivo de estilo do Qt + + +- ++ + GUI style + Estilo da interface + + +- ++ + Application style (Default = use system's default style) + Estilo da aplicação (Padrão = usar estilo padrão do sistema) + + +- ++ + Smooth image scaling (nicer, but slower) + Esticamento suave da imagem (melhor, mas mais lento) + + +- ++ + Smooth scaling + Esticar suavemente + + +- ++ + Retry loading images which weren't found before? + Tentar carregar imagens que não foram encontradas antes? + + +- +- EL (Greek) +- EL (Grego) +- +- +- ++ + Retry loading images + Tentar carregar imagens não encontradas + + +- ++ + Image cache size + Tamanho do cache de imagens + + +- ++ + Image cache size in MB + Tamanho do cache de imagens em MB + + +- ++ + MB + + + +- ++ + Use standard or custom color palette? + Usar paleta de cores padrão ou customizada? + + +- ++ + Log font + Fonte do log + + +- ++ + Font used in logs (= application font if empty) + Fonte usada nos logs (= fonte da aplicação se vazio) + + +- ++ + Browse font used in logs + Procurar fonte usada nos logs + + +- +- ++ ++ + F&iles / Directories + &Arquivos / Diretórios + + +- ++ + Front end log file + Arquivo de log do frontend + + +- ++ + Front end log file (write) + Arquivo de log do frontend (escrita) + + +- ++ + Browse front end log file + Procurar por arquivo de log do frontend + + +- ++ + Favorites file + Arquivo de favoritos + + +- ++ + Play history file + Arquivo de histórico de jogadas + + +- ++ + Play history file (write) + Arquivo de histórico de jogadas (escrita) + + +- ++ + Browse play history file + Procurar por arquivo de histórico de jogadas + + +- ++ + Data directory + Diretório de dados + + +- ++ + Frontend data directory (read) + Diretório de dados do frontend (leitura) + + +- ++ + Browse frontend data directory + Procurar por diretório de dados do frontend + + +- ++ + Preview directory (read) + Diretório de preview (leitura) + + +- ++ + Browse preview directory + Procurar diretório de preview + + +- ++ + Flyer directory (read) + Diretório de flyer (leitura) + + +- ++ + Browse flyer directory + Procurar diretório de flyers + + +- ++ + Icon directory (read) + Diretório de ícones (leitura) + + +- ++ + Browse icon directory + Procurar diretório de ícones + + +- ++ + Cabinet directory (read) + Diretório de gabinetes (leitura) + + +- ++ + Browse cabinet directory + Procurar diretório de gabinetes + + +- ++ + Controller directory (read) + Diretório de controle (leitura) + + +- ++ + Browse controller directory + Procurar diretório de controles + + +- ++ + Marquee directory (read) + Diretório de marquee (leitura) + + +- ++ + Browse marquee directory + Procurar diretório de marquee + + +- ++ + Title directory (read) + Diretório de títulos (leitura) + + +- ++ + Browse title directory + Procurar diretório de títulos + + +- ++ + PCB directory (read) + Diretório de PCB (leitura) + + +- ++ + Browse PCB directory + Procurar diretório de PCB + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + Habilitar o uso do arquivo catver.ini -- obtenha a versão mais nova de http://www.progettoemma.net/?catlist + + +- ++ + Use catver.ini + Usar catver.ini + + +- ++ + Path to catver.ini (read) + Caminho para catver.ini (leitura) + + +- ++ + Browse path to catver.ini + Procurar caminho para catver.ini + + +- +- +- ++ ++ ++ + SW snap folder + Diretório de snapshot de software + + +- ++ + Software snap-shot directory (read) + Diretório de snapshots de software (leitura) + + +- ++ + Browse software snap-shot directory + Procurar pelo diretório de snapshots de software + + +- ++ + ROM state filter + Filtro de estado da ROM + + +- ++ + Show ROM state C (correct)? + Mostrar ROM com estado C (correto)? + + +- ++ + Show ROM state M (mostly correct)? + Mostrar ROM com estado M (Maioria correto)? + + +- ++ + Show ROM state I (incorrect)? + Mostrar estado de ROM I (incorreto)? + + +- ++ + Show ROM state N (not found)? + Mostrar estado de ROM N (não encontrado)? + + +- ++ + Show ROM state U (unknown)? + Mostrar estado de ROM D (desconhecido)? + + +- ++ + Sort criteria + Critério de ordenação + + +- ++ + Select sort criteria + Selecione um critério de ordenação + + +- ++ + ROM state + Estado da ROM + + +- ++ + Year + Ano + + +- ++ + Manufacturer + Fabricante + + +- ++ + ROM types + Tipos de ROM + + +- ++ + Players + Jogadores + + +- ++ + Sort order + Ordem + + +- ++ + Select sort order + Selecione a ordem + + +- ++ + Ascending + Ascendente + + +- ++ + Descending + Descendente + + +- ++ + Responsiveness + Disponibilidade + + +- ++ + immediate + imediata + + +- ++ + Update delay + Atraso de atualização + + +- ++ + none + nenhum + + +- ++ + ms + + + +- ++ + Automatically trigger a ROM check if necessary + Verificar ROM automaticamente se necessário + + +- ++ + Auto-trigger ROM check + Verificar ROM automaticamente + + +- ++ + Display ROM status icons in master lists? + Mostrar ícones de estado da ROM nas listas principais? + + +- ++ + Show ROM status icons + Mostrar ícones de estado da ROM + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + Diretório utilizado como diretório padrão de software para o configurador de dispositivos do MESS (se um subdiretório com o mesmo nome da máquina existir, essa pasta será selecionada no lugar) + + +- ++ + Launch emulation on double-click events (may be annoying) + Iniciar emulador por clique duplo (pode ser estranho) + + +- ++ + Double-click activation + Ativação por clique duplo + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + Iniciar emulação diretamente quando um item é ativado na lista de busca, favoritos ou jogados (ao invés de pular para a lista principal) + + +- ++ + Play on sub-list activation + Jogar com ativação na sub-lista + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + Escolher posição do cursor a ser usado pelo QMC2 quando fizer rolagem automática para o ítem atual (essa configuração se aplica a todas as visões e listas!) + + +- ++ + Visible + Visível + + +- ++ + Top + Em cima + + +- ++ + Bottom + Em baixo + + +- ++ + Center + Centro + + +- ++ + Cursor position + Posição do cursor + + +- ++ + SW snap position + Posição do snapshot de software + + +- ++ + Above / Left + Acima / Esquerda + + +- ++ + Use native file dialogs + Usar diálogos de arquivo nativos + + +- ++ + Kill emulators when QMC2 exits? + Matar emuladores quando o QMC2 for fechado? + + +- ++ + Kill emulators on exit + Matar emuladores ao sair + + +- ++ + Terminate all other emulator instances when launching a new one? + Terminar todas as outras instâncias de emulador quando executar uma nova? + + +- ++ + One emulator at a time + Um emulador por vez + + +- ++ + Load MESS machine information database (sysinfo.dat) + Carregar base da dados de informação de máquinas do MESS (sysinfo.dat) + + +- ++ + MESS machine information database - sysinfo.dat (read) + Base da dados de informação de máquinas do MESS -- sysinfo.dat (leitura) + + +- ++ + Browse MESS machine information database (sysinfo.dat) + Procurar por base da dados de informação de máquinas do MESS (sysinfo.dat) + + +- ++ + Import MESS emulator information to DAT-info database + Importar informação do emulador MESS para a base de dados de informação DAT + + +- ++ + Import MAME emulator information to DAT-info database + Importar informação do emulador MAMAE para a base de dados de informação DAT + + +- ++ + Import MESS machine information to DAT-info database + Importar informação do máquina do MESS para a base de dados de informação DAT + + +- ++ + DAT-info database file + Arquivo da base de dados de informação DAT + + +- ++ + Browse DAT-info database file + Procurar por arquivo de base de dados de informação DAT + + +- ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) ++ ++ ++ ++ ++ pt_BR (Brazilian Portuguese) ++ ++ ++ ++ ++ ro (Romanian) ++ ++ ++ ++ ++ sv (Swedish) ++ ++ ++ ++ ++ us (American English) ++ ++ ++ ++ + DAT-info database file (write) + Arquivo do banco de dados de informação DAT (escrita) + + +- ++ + Machine info (MESS) + Informação de máquina (MESS) + + +- ++ + Emu info (MAME) + Informação de emulador (MAME) + + +- ++ + Emu info (MESS) + Informação de emulador (MESS) + + +- ++ + Software info + Informação de software + + +- ++ + Import software information to DAT-info database + Importar informação de software para a base de dados de informação DAT + + +- ++ + Above / Center + Acima / Centro + + +- ++ + Above / Right + Acima / Direita + + +- ++ + Below / Left + Abaixo / Esquerda + + +- ++ + Below / Center + Abaixo / Centro + + +- ++ + Below / Right + Abaixo / Direita + + +- ++ + &Shortcuts / Keys + Atalho&s / Teclas + + +- +- ++ ++ + Redefine key sequence + Redefinir sequência de teclas + + +- ++ + Reset key sequence to default + Redefinir sequência de teclas para o padrão + + +- ++ + Reset + Redefinir + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + Definições ativas de atalhos: clique duplo para redefinir sequência de teclas + + +- +- ++ ++ + Function / Key + Função / Tecla + + +- ++ + ROM tool + Ferramenta de ROM + + +- ++ + External ROM tool (it's completely up to you...) + Ferramenta de ROM externa (a decisão é toda sua...) + + +- ++ + Browse ROM tool + Procurar ferramenta de ROM + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + Lista de argumentos da ferramenta de ROM (p. e. "$ID $DESCRIÇÃO$") + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + Diretório de trabalho usado quando a ferramenta de ROM é executada (se vazio, o diretório de trabalho atual do QMC2 será usado) + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + Copiar a saída da ferramenta para o log do programa (mantenha para verificação) + + +- ++ + Copy tool output to front end log + Copiar a saída da ferramenta para o log do frontend + + +- ++ + Automatically close the tool-executor dialog when the external process finished + Fechar automaticamente o diálog de execução da ferramenta quando o processo externo terminar + + +- ++ + Close dialog automatically + Fechar diálogo automaticamente + + +- ++ + Restore cookies + Restaurar cookies + + +- ++ + Manage cookies stored in database + Gerenciar banco de dados de cookies + + +- ++ + Manage stored cookies + Gerenciar cookies + + +- ++ + Clear database + Limpar banco de dados + + +- ++ ++ + +- +- +- ++ ++ + Default + Padrão + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + Usar uma ferramenta unificada - e barra de títulos no Mac OS X + + +- ++ + Unify with title + Unificar com título + + +- ++ + Minimize when launching emulators? + Minimizar quando lançar emuladores? + + +- ++ + Minimize on emulator launch + Minimizar ao iniciar emulador + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + Suprimir todas as mensagens enviadas pela classe QDebug ou pelas funções qDebug() / qCritical() / qWarning() / qFatal() + + +- ++ + Suppress Qt messages + Suprimir mensagens do Qt + + +- ++ + Show splash screen when starting up? + Mostrar tela inicial (splash screen) quando iniciar? + + +- ++ + Show splash screen + Mostrar tela inicial (splash screen) + + +- ++ + Software notes folder + Pasta das notas de software + + +- ++ + Folder used to store personal notes about any software titles (write) + Pasta usada para guardar notas pessoais sobre quaisquer títulos de software (escrita) + + +- ++ + Browse software notes folder + Procurar pasta das notas de software + + +- ++ + Tag + Etiqueta + + +- ++ + Driver status + Estado do driver + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + Selecione a posição onde os snapshots de software são mostrados dentro da lista de software + + +- ++ + Disable snaps + Desabilitar snapshots + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + Mostrar snapshots de software quando o mouse passar pela lista de software + + +- ++ + Enable ROM state filtering? + Habilitar filtro por estado da ROM? + + +- +- ES (Spanish) +- ES (Espanhol) +- +- +- +- IT (Italian) +- IT (Italiano) +- +- +- +- RO (Romanian) +- RO (Remeno) +- +- +- +- SV (Swedish) +- SV (Sueco) +- +- +- ++ + Customize the tool-bar + Customizar a barra de ferramentas + + +- ++ + Tool-bar... + Barra de ferramentas... + + +- ++ + Force QMC2's working directory to be the same as the executable's path + Forçar o diretório de trabalho do QMC2 ser o mesmo do caminho do executável + + +- ++ + Set working directory from executable + Definir o diretório de trabalho a partir do executável + + +- ++ + Default palette + Paleta padrão + + +- ++ + Edit the color palette + Editar a paleta de cores + + +- ++ + Edit color palette... + Editar paleta de cores... + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + Usar os diálogos de arquivo do próprio sistema (nativos), caso contrários os diálogos nativos do Qt serão utilizados + + +- ++ + Compressed cabinet file (read) + Arquivo comprimido de gabinetes (leitura) + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + Escolher formato de compressão + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + + + +- ++ + Browse compressed cabinet file + Procurar o arquivo comprimido de gabinetes + + +- ++ + Compressed controller file (read) + Arquivo comprimido de controles (leitura) + + +- ++ + Browse compressed controller file + Procurar o arquivo comprimido de controles + + +- ++ + Compressed marquee file (read) + Arquivo comprimido de marquees (leitura) + + +- ++ + Browse compressed marquee file + Procurar o arquivo comprimido de marquees + + +- ++ + Switch between specifying a title directory or a compressed title file + Alternar entre especificar um diretório de títulos ou um arquivo comprimido de títulos + + +- ++ + MAME emulator information database - mameinfo.dat (read) + Banco de dados de informação de emulador do MAME - mameinfo.dat (leitura) + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + Procurar por banco de dados de informação de emulador do MAME (mameinfo.dat) + + +- ++ + Switch between specifying a preview directory or a compressed preview file + Alternar entre especificar um diretório de previews ou um arquivo comprimido de previews + + +- ++ + Compressed preview file (read) + Arquivo comprimido de previews (leitura) + + +- ++ + Browse compressed preview file + Procurar o arquivo comprimido de previews + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + Alternar entre especificar um diretório de flyers ou um arquivo comprimido de flyers + + +- ++ + Compressed flyer file (read) + Arquivo comprimido de flyers (leitura) + + +- ++ + Browse compressed flyer file + Procurar o arquivo comprimido de flyers + + +- ++ + Switch between specifying an icon directory or a compressed icon file + Alternar entre especificar um diretório de ícones ou um arquivo comprimido de ícones + + +- ++ + Compressed icon file (read) + Arquivo comprimido de ícones (leitura) + + +- ++ + Browse compressed icon file + Procurar o arquivo comprimido de ícones + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + Alternar entre especificar um diretório de gabinetes ou um arquivo comprimido de gabinetes + + +- ++ + Switch between specifying a controller directory or a compressed controller file + Alternar entre especificar um diretório de controles ou um arquivo comprimido de controles + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + Alternar entre especificar um diretório de marquees ou um arquivo comprimido de marquees + + +- ++ + Compressed title file (read) + Arquivo comprimido de títulos (leitura) + + +- ++ + Browse compressed title file + Procurar o arquivo comprimido de títulos + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + Alternar entre especificar um diretório de PCBs ou um arquivo comprimido de PCBs + + +- ++ + Compressed PCB file (read) + Arquivo comprimido de PCBs (leitura) + + +- ++ + Browse compressed PCB file + Procurar o arquivo comprimido de PCBs + + +- ++ + Compressed software snap-shot file (read) + Arquivo comprimido de snapshots de software (leitura) + + +- ++ + Browse compressed software snap-shot file + Procurar o arquivo comprimido de snapshots de software + + +- ++ + Load MAME emulator information database (mameinfo.dat) + Carregar base de dados de informações de emulador do MAME (mameinfo.dat) + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + Alternar entre especificar um diretório de snapshots de software ou um arquivo comprimido de snapshots de software + + +- ++ + Enable the use of a template for (empty) software notes + Habilitar o uso de um template para notas de software (vazias) + + +- ++ + Software notes template + Template de notas de software + + +- ++ + HTML file used as a template for software-notes (read) + Arquivo HTML usado como template para notas de software (leitura) + + +- ++ + Browse software notes template + Procurar template de notas de software + + +- ++ + Enable the use of category.ini + Habilitar o uso do arquivo category.ini + + +- ++ + Use category.ini + Usar category.ini + + +- ++ + Path to category.ini (read) + Caminho para category.ini (leitura) + + +- ++ + Browse path to category.ini + Procurar caminho para category.ini + + +- ++ + System notes folder + Pasta das notas de sistema + + +- ++ + Enable the use of a template for (empty) system notes + Habilitar o uso de um modelo para notas (vazias) de sistema + + +- ++ + System notes template + Modelo das notas de sistema + + +- ++ + HTML file used as a template for system-notes (read) + Arquivo HTML usado como modelo para notas de sistema (leitura) + + +- ++ + Folder used to store personal notes about any systems (write) + Pasta usada para guardar notas pessoais sobre quaisquer sistemas (escrita) + + +- ++ + Browse system notes folder + Procurar pasta das notas de sistema + + +- ++ + Browse system notes template + Procurar modelo das notas de sistema + + +- ++ + Load software information database (from history.dat) + Carregar base de dados de informações de software (de history.dat) + + +- ++ + Software information database - history.dat (read) + Banco de dados de informações de software - history.dat (leitura) + + +- ++ + Browse software information database (history.dat) + Procurar por base de dados de informações de software (history.dat) + + +- ++ + Define additional artwork classes for systems and software-list entries + Definir classes de arte adicionais para entradas de listas de sistema e de software + + +- ++ + Set up additional artwork classes... + Configurar classes de arte adicionais... + + +- ++ + Choose active image formats and their priorities (per artwork class) + Escolher formatos de imagem ativos e suas prioridades (por classe de arte) + + +- ++ + Select image formats... + Selecionar formatos de imagem... + + +- ++ + Load MESS emulator information database (messinfo.dat) + Carregar base de dados de informações de emulador do MESS (messinfo.dat) + + +- ++ + MESS emulator information database - messinfo.dat (read) + Banco de dados de informação de emulador do MESS - messinfo.dat (leitura) + + +- ++ + Show machine's description at the bottom of any images + Mostrar descrição da máquina abaixo de quaisquer imagens + + +- ++ + Show machine name + Mostrar nome da máquina + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + Mostrar descrição de máquina somente quando a lista de máquinas não é visível devido ao layout atual + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + Mostrar a imagem / vídeo do pai se uma imagem / vídeo individual está faltando mas existe uma para o pai + + +- ++ + Parent image / video fallback + Usar imagem / vídeo do pai + + +- ++ + Open the component setup dialog + Abrir janela de configuração de componente + + +- ++ + Component setup... + Configuração de componente... + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + Mostrar o indicador de estado de máquina somente quando a lista de máquinas não é visível devido ao layout atual + + +- ++ + Restore saved machine selection at start and after reloading the machine list + Restaurar seleção de máquinas ao iniciar e antes de recarregar a lista de máquinas + + +- ++ + Restore machine selection + Restaurar seleção de máquinas + + +- ++ + Show vertical machine status indicator in machine details + Mostar indicador vertical do estado da máquina nos detalhes de máquina + + +- ++ + Machine status indicator + Indicador de estado da máquina + + +- ++ + Save machine selection on exit and before reloading the machine list + Salvar seleção de máquinas ao sair e antes de recarregar a lista de máquinas + + +- ++ + Save machine selection + Salvar seleção de máquinas + + +- ++ + Show animation when loading, filtering or tagging the machine list? + Mostrar animações quando carregando, filtrando ou etiquetando a lista de máquinas? + + +- ++ + Show loading animation + Mostrar animação de carregamento + + +- ++ + Scaled software snapshot + Snapshot de software em escala + + +- ++ + Select individual fallback settings per artwork class + Selecionar configurações de substituição indivíduais por classe de artwork + + +- ++ + Individual fallback settings... + Configurações de substituição individuais... + + +- ++ + Import MAME machine information to DAT-info database + Importar informação do máquina do MAME para a base de dados de informação DAT + + +- ++ + Browse machine favorites file + Procurar por arquivo de favoritos de máquinas + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + Arquivo + + +- ++ + MAME machine information database - history.dat (read) + Base da dados de informação de máquinas do MAME -- history.dat (leitura) + + +- ++ + Browse MESS emulator information database (messinfo.dat) + Procurar por banco de dados de informação de emulador do MESS (messinfo.dat) + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + Opção requer recarregamento da lista de máquinas para ter efeito + + +- ++ + Machine favorites file (write) + Arquivo de máquinas favoritas (escrita) + + +- ++ + Load MAME machine information database (history.dat) + Carregar base de dados de informações de máquinas do MAME (history.dat) + + +- ++ + Machine info (MAME) + Informação de máquina (MAME) + + +- ++ + Browse MAME machine information database (history.dat) + Procurar por base de dados de informação de máquinas do MAME(history.dat) + + +- ++ + Video snap folder + Diretório de snap de vídeo + + +- ++ + Video snap folder (read) + Diretório de snap de vídeo (leitura) + + +- ++ + Browse video snap folder + Escolha a pasta de snaps de video + + +- ++ + Optimize catver.ini for faster loading + Otimizar catver.ini para carregamento mais rápido + + +- ++ + Setup the icon cache database + Configurar base de dados de cache de ícones + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + Desabilitar automaticamente capturas de tela do software quando os detalhes do software estão visíveis (pode incomodar) + + +- ++ + No SW snaps for visible details + Desabilitar capturas de software com detalhes visíveis + + +- ++ + Machine description + Descrição da máquina + + +- ++ + Machine name + Nome da máquina + + +- ++ + Source file + Arquivo fonte + + +- ++ + Rank + Classificação + + +- ++ + Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) + Número de itens inseridos entre as atualizações da lista de máquinas durante o recarregamento (maior significa mais rápido, mas torna a interface menos disponível) + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + Selecione o modo padrão de execução (janela independente ou embutida) usada quando o emulador é iniciado ativando uma entrada em qualquer lista + + +- ++ + independent + independente + + +- ++ + embedded + embutido + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + Atrasar atualização dos detalhes das máquinas (preview, flyer, informações, configurações, ....) por quantos milisegundos? + + +- ++ + Default launch-mode + Modo de execução padrão + + +- ++ + Display (or hide) device sets in master lists? + Mostrar (ou esconder) conjuntos de dispositivos nas listas principais? + + +- ++ + Show device sets + Mostrar conjuntos de dispositivos + + +- ++ + Display (or hide) BIOS sets in master lists? + Mostrar (ou esconder) conjuntos de BIOS nas listas principais? + + +- ++ + Browse system manual folder + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + Show BIOS sets + Mostrar conjuntos de BIOS + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + Custom + Personalizado + + +- ++ + &Joystick + + + +- ++ + Enable GUI control via joystick + Habilitar controle da interface via joystick + + +- ++ + Enable joystick control + Habilitar controle via joystick + + +- ++ + Rescan available joysticks + Re-escanear joysticks disponíveis + + +- ++ + Rescan joysticks + Re-escanear joysticks + + +- ++ + Select joystick + Selecionar Joystick + + +- ++ + List of available joysticks - select the one you want to use for GUI control + Lista de joysticks disponíveis - selecione aquele que você quer usar para controle da interface + + +- ++ + Joystick information and settings + Informação e configuração do Joystick + + +- ++ + Axes: + Eixos: + + +- ++ + Number of joystick axes + Número de eixos do joystick + + +- +- +- +- ++ ++ ++ ++ + 0 + + + +- ++ + Buttons: + Botões: + + +- ++ + Number of joystick buttons + Número de botões do joystick + + +- ++ + Hats: + + + +- ++ + Number of coolie hats + Número de coolie hats + + +- ++ + Trackballs: + + + +- ++ + Number of trackballs + Número de trackballs + + +- ++ + Automatically repeat joystick functions after specified delay + Repetir automaticamente funções do joystick após um atraso especificado + + +- ++ + Auto repeat after + Repetir automaticamente após + + +- ++ + Repeat all joystick functions after how many milliseconds? + Repetir todas as funções do joystick após quantos milisegundos? + + +- +- ++ ++ + ms + + + +- ++ + Event timeout + Tempo máximo do evento + + +- ++ + Process joystick events after how many milliseconds? + Processar eventos de joystick após quantos milisegundos? + + +- ++ + Calibrate joystick axes + Calibrar eixos do joystick + + +- ++ + Calibrate + Calibrar + + +- ++ + Test all joystick functions + Testar todas as funções do joystick + + +- ++ + Test + Testar + + +- ++ + Map joystick functions to GUI functions + Mapear funções do joystick para funções da interface + + +- ++ + Map + Mapear + + +- ++ + Remap a joystick function to the selected GUI function + Remapear uma função do joystick para uma função selecionada da interface + + +- ++ + Remap + Remapear + + +- ++ + Remove joystick mapping from selected GUI function + Remover mapeamento do joystick para a função da interface selecionada + + +- ++ + Remove + Remover + + +- ++ + Active joystick mappings; double-click to remap joystick function + Mapeamentos ativos do joystick: clique duplo para remapear as funções do joystick + + +- ++ + Joystick function + Função do joystick + + +- ++ + Network / &Tools + Rede / &Ferramentas + + +- ++ + Zip tool + Ferramenta zip + + +- +- +- ++ ++ ++ + Command + Comando + + +- ++ + External zip tool, i.e. "zip" (read and execute) + Ferramenta externa de zip, p.e. "zip" (ler e executar) + + +- ++ + Browse for zip tool + Procurar pela ferramenta de zip + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + Argumentos + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + Lista de argumentos da ferramenta zip para remover entradas de um arquivo zip (p. e. "$ARCHIVE$ -d $FILELIST$") + + +- ++ + Browse working directory of the ROM tool + Procurar por diretório de trabalho da ferramenta de ROM + + +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + Habilitar / desabilitar uso de proxy HTTP em qualquer acesso à web + + +- ++ + Use HTTP proxy + Usar proxy HTTP + + +- ++ + Host / IP + + + +- ++ + Hostname or IP address of the HTTP proxy server + Nome ou endereço IP do servidor de proxy HTTP + + +- ++ + Port + Porta + + +- ++ + Port to access the HTTP proxy service + Porta para acessar o serviço de proxy HTTP + + +- ++ + User ID + ID do usuário + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + ID do usuário para acessar o serviço de proxy HTTP (vazio = sem autenticação) + + +- +- Password +- Senha +- +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- Senha para acessar o serviço de proxy HTTP (vazio = sem autenticação) +- +- +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- <font size="-1"><b>AVISO: senhas salvas são <u>fracamente</u> encriptadas!</b></font> +- +- +- ++ + Browser settings + Configurações do navegador + + +- ++ + Browse cookie database + Procurar banco de dados de cookies + + +- ++ + Cookie database file (write) + Arquivo do banco de dados de cookies (escrita) + + +- ++ + Cookie database + Banco de dados de cookies + + +- ++ + Save and restore cookies used on web pages? + Salvar e restaurar cookies utilizados nas páginas web? + + +- ++ + Remove all cookies by recreating the database + Remover todos os cookies recriando o banco de dados + + +- ++ + 7-zip tool + ferramenta 7-zip + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + Ferramenta externa de 7-zip, p.e. "7za" (ler e executar) + + +- ++ + Browse for 7-zip tool + Procurar pela ferramenta de 7-zip + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + Lista de argumentos da ferramenta 7-zip para remover entradas de um arquivo 7-zip (p. e. "d $ARCHIVE$ $FILELIST$") + + +- ++ + E&mulator + E&mulador + + +- ++ + &Global configuration + Configuração &Global + + +- +- ++ ++ + Executable file + Arquivo executável + + +- ++ + Machine list cache + Cache da lista de máquinas + + +- ++ + Browse machine list cache file + Procurar arquivo de cache de lista de máquinas + + +- ++ + Software list cache DB + BD de cache da lista de software + + +- ++ + Browse software list cache database file + Procurar arquivo da base de dados do cache da lista de software + + +- ++ + Clean up user data database (removes obsolete entries) + Limpar base de dados do usuário (remover entradas obsoletas) + + +- ++ + Machine list cache file (write) + Arquivo de cache de lista de máquinas (escrita) + + +- ++ + Emulator executable file (read and execute) + Arquivo executável do emulador (leitura e execução) + + +- +- ++ ++ + Browse emulator executable file + Procurar pelo executável do emulador + + +- ++ + Emulator log file + Arquivo de log do emulador + + +- ++ + Emulator log file (write) + Arquivo de log do emulador (escrita) + + +- ++ + Browse emulator log file + Procurar pelo arquivo de log do emulador + + +- ++ + Options template file + Arquivo de template de opções + + +- ++ + Options template file (read) + Arquivo de template de opções (leitura) + + +- ++ + Browse options template file + Procurar arquivo de template de opções + + +- ++ + ROM state cache + Cache de estado das ROMs + + +- ++ + ROM state cache file (write) + Cache de estado das ROMs (escrita) + + +- ++ + Browse ROM state cache file + Procurar arquivo de cache de estado das ROMs + + +- ++ + Software state cache + Cache de estado de software + + +- ++ + Directory used to store individual state cache files for each software-list (write) + Diretório usado para guardar arquivo de cache de estado individuais para cada lista de software (escrita) + + +- ++ + Browse software state cache directory + Procurar por diretório de cache de estado de software + + +- ++ + XML cache database + Base de dados de cache XML + + +- ++ + Database file for caching the output from -listxml (write) + Arquivo de base de dados para fazer cache da saída do comando -listxml (escrita) + + +- ++ + Browse XML cache database file + Procurar arquivo da base de dados do cache XML + + +- ++ + User data database + Base de dados do usuário + + +- ++ + Database file for storing/retrieving user data (write) + Arquivo de base de dados para guardar/recuperar dados de usuário (escrita) + + +- ++ + Browse user data database file + Procurar por arquivo de base de dados do usuário + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + Indica se a âncora $ID$ está faltando na linha de comando passada (amarelo) ou não (verde) + + +- ++ + Replace + Substituir + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + Argumentos passados para o emulador -- use $ID$ como âncora para ID de conjunto, $DESCRIPTION$ para sua descrição + + +- +- +- +- ++ ++ ++ ++ + Working directory + Diretório de trabalho + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + Diretório de trabalho que é usado quando o emulador é executado (se vazio, o diretório de trabalho do QMC2 é usado) + + +- +- ++ ++ + Browse working directory + Procurar diretório de trabalho + + +- ++ + General software folder + Diretório geral de software + + +- ++ + Browse general software folder + Procurar diretório geral de software + + +- ++ + Database file for caching the ouput from -listsoftware (write) + Arquivo de base de dados para fazer cache da saída do comando -listsoftware (escrita) + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + Recriar automaticamente todos os caches de emuladores quando a saída do '-listfull' mudar + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + Ignorar identificação de emulador quando o tempo de modificação do arquivo não foi alterado + + +- ++ + Machine list database + Base de dados da lista de máquinas + + +- ++ + Machine list database file (write) + Arquivo da base de dados de lista de máquinas (escrita) + + +- ++ + Browse machine list database file + Procurar o arquivo da base de dados da lista de máquinas + + +- ++ + Name + Nome + + +- ++ + Executable + Executável + + +- ++ + Custom IDs + IDs customizados + + +- ++ + Register emulator + Registrar emulador + + +- ++ + Add + Adicionar + + +- ++ + Deregister emulator + Desregistrar emulador + + +- ++ + Registered emulator's name + Nome do emulador registrado + + +- ++ + Command to execute the emulator (path to the executable file) + Comando para executar o emulador (caminho para o arquivo executável) + + +- ++ + Replace emulator registration + Substituir registro do emulador + + +- ++ + Recreate user data database (removes <b>all</b> entries) + Recriar base de dados do usuário (remove <b>todas</b> as entradas) + + +- ++ + Foreign &emulators + &Emuladores estrangeiros + + +- ++ + Icon + Ícone + + +- ++ + Emulator name + Nome do emulador + + +- ++ + Remove + Remover + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + Emuladores registrados -- você pode selecionar um desses na configuração de emulador específica de máquina + + +- ++ + Apply settings + Aplicar configurações + + +- ++ + &Apply + &Aplicar + + +- ++ + Restore currently applied settings + Restaurar configurações atualmente aplicadas + + +- ++ + &Restore + &Restaurar + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + Redefinir para configurações padrão (clique <i>Restaurar</i> para restaurar configurações aplicadas atualmente!) + + +- ++ + &Default + &Padrão + + +- ++ + Close and apply settings + Fechar e aplicar configurações + + +- ++ + &Ok + + + +- ++ + Close and discard changes + Fechar e discartar mudanças + + +- ++ + &Cancel + &Cancelar + +@@ -17326,28 +17254,28 @@ Tem certeza que deseja fazer isso? + + QObject + +- +- ++ ++ + correct + correto + + +- ++ + incorrect + incorreto + + +- ++ + mostly correct + maioria correto + + +- ++ + not found + não encontrado + + +- ++ + + + +@@ -17356,54 +17284,54 @@ Tem certeza que deseja fazer isso? + desconhecido + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + Padrão + + +- ++ + Import from... + Importar de... + + +- +- ++ ++ + Export machine-specific MAME configuration + Exportar configuração do MAME específica de máquina + + +- +- ++ ++ + Import machine-specific MAME configuration + Importar configuração do MAME específica de máquina + + +- ++ + Setting up the GUI, please wait... + Configurando a Interface, por favor espere... + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + Recursos Phonon habilitados - usando Phonon v%1 + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Suporte do SDL à joystick habilitado - usando SDL v%1.%2.%3 + +@@ -17444,7 +17372,7 @@ Tem certeza que deseja fazer isso? + sem dump / dump ruim + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + reprodutor de vídeo: Erro no XML: erro fatal na linha %1, coluna %2: %3 + +@@ -17516,19 +17444,19 @@ Tem certeza que deseja fazer isso? + Informação de estado para a lista de software '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 + + +- ++ + + yes + sim + + +- ++ + + no + não + + +- ++ + + partially + parcialmente +@@ -21048,7 +20976,7 @@ Tem certeza que deseja fazer isso? + + + +- ++ + Choose mame.ini + + +@@ -21062,7 +20990,7 @@ Tem certeza que deseja fazer isso? + + + +- ++ + Choose ui.ini + + +@@ -21171,178 +21099,179 @@ Tem certeza que deseja fazer isso? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + &Cancelar + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + Desconhecido + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + ERRO: impossível abrir '%1' para leitura + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21350,74 +21279,73 @@ Tem certeza que deseja fazer isso? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + Padrão + + +- +- ++ ++ + Choose emulator executable file + Escolha o arquivo executável do emulador + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Todos os arquivos (*) + + +- ++ + Choose working directory + Escolha o diretório de trabalho + + +- ++ + Choose ROM path + Escolha o caminho das ROMs + + +- ++ + Choose sample path + Escolha o caminho dos exemplos (samples) + + +- ++ + Choose hash path + Escolha o caminho para os hashes + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23564,59 +23492,59 @@ Tem certeza que deseja fazer isso? + + Welcome + +- ++ + Default + Padrão + + +- ++ + Error + Erro + + +- ++ + The specified file isn't executable! + O arquivo especificado não é executável! + + +- +- ++ ++ + Choose emulator executable file + Escolha o arquivo executável do emulador + + +- +- ++ ++ + All files (*) + Todos os arquivos (*) + + +- ++ + Choose working directory + Escolha o diretório de trabalho + + +- ++ + Choose ROM path + Escolha o caminho das ROMs + + +- ++ + Choose sample path + Escolha o caminho dos exemplos (samples) + + +- ++ + Choose hash path + Escolha o caminho para os hashes + + +- ++ + Single-instance check + Verificação de Instância Única + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23627,17 +23555,17 @@ No entanto, ela pode ter sido deixada por um crash anterior. + Sair agora, aceitar uma vez ou ignorar completamente? + + +- ++ + &Exit + &Sair + + +- ++ + &Once + &Uma vez + + +- ++ + &Ignore + &Ignorar + +@@ -23895,49 +23823,49 @@ Sair agora, aceitar uma vez ou ignorar completamente? + + + +- ++ + FLV 240P + + + + +- ++ + FLV 360P + + + + +- ++ + MP4 360P + + + + +- ++ + FLV 480P + + + + +- ++ + MP4 720P + + + + +- ++ + MP4 1080P + + + + +- ++ + MP4 3072P + + + + +- ++ + Start / pause / resume video playback + Reproduzir / pausar / resumir vídeo + +@@ -23948,20 +23876,16 @@ Sair agora, aceitar uma vez ou ignorar completamente? + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + Restante + + + +- ++ + Volume + + +@@ -24006,286 +23930,261 @@ Sair agora, aceitar uma vez ou ignorar completamente? + Sugerir um padrão de busca (segure para mostrar o menu) + + +- ++ + Mute / unmute audio output + Tornar mudo / audível a saída de áudio + + +- ++ + Volume level + Nível de volume + + +- ++ + Video progress + Progresso do vídeo + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + Nível atual do buffer: %1% + + +- +- ++ ++ + Play this video + Reproduzir esse vídeo + + +- +- +- ++ ++ ++ + Copy video URL + Copiar URL do vídeo + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + Copiar URL do vídeo (sem filtro de país) + + +- +- +- ++ ++ ++ + Copy author URL + Copiar URL do autor + + +- +- ++ ++ + Paste video URL + Colar URL do vídeo + + +- +- ++ ++ + Local movie file... + Arquivo de vídeo local... + + +- ++ + Remove selected videos + Remover vídeos selecionados + + +- +- +- ++ ++ + Full screen (return with toggle-key) + Tela cheia (retornar com tecla) + + +- +- ++ ++ + Attach this video + Anexar esse vídeo + + +- ++ + Auto-suggest a search pattern? + Sugerir um padrão de busca automaticamente? + + +- ++ + Auto-suggest + Auto-sugerir + + +- ++ + Enter string to be appended + Entre com o texto a ser anexado + + +- ++ + Append... + Anexar... + + +- ++ + Enter search string + Entre com o texto de busca + + +- ++ + Appended string + Anexar texto + + +- ++ + Enter the string to be appended when suggesting a pattern: + Entre com o texto a ser anexado quando sugerir um padrão: + + +- ++ + Valid placeholder macros: + Variáveis válidas: + + +- +- ++ ++ + All files (*) + Todos os arquivos (*) + + +- +- ++ ++ + Choose movie file + Escolha o arquivo de vídeo + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + Modo tela cheia -- pressione %1 para retornar para o modo janela + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + Modo tela cheia -- pressione tecla de alternância para retornar para o modo janela + + +- ++ + video player: the local movie file '%1' is already attached, ignored + video player: o arquivo de vídeo local '%1' ja está anexado, ignorado + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + reprodutor de vídeo: um vídeo com ID '%1' já está anexado, ignorado + + +- ++ + Buffering: %1% + Carregando: %1% + + +- +- Loading +- Carregando +- +- +- +- ++ + Playing + Executando + + +- +- ++ + Paused + Pausado + + +- +- video player: playback error: %1 +- reprodutor de vídeo: erro de reprodução: %1 +- +- +- +- Video playback error: %1 +- Erro reproduzindo vídeo: %1 +- +- +- ++ + Fetching info for video ID '%1' + Obtendo informações para o vídeo com ID '%1' + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + reprodutor de vídeo: erro nas informações do vídeo: ID = '%1'. estado = '%2', código de erro = '%3', texto do erro = '%4' + + +- +- +- ++ ++ ++ + Video info error: %1 + Erro obtendo informações do vídeo: %1 + + +- ++ + video player: video info error: timeout occurred + reprodutor de vídeo: erro na informação do vídeo: estouro de tempo + + +- ++ + video info error: timeout occurred + erro na informação do vídeo: estouro de tempo + + +- ++ + video info error: unknown reason + erro na informação do vídeo: razão desconhecida + + +- ++ + video player: video info error: %1 + reprodutor de vídeo: erro na informação do vídeo: %1 + + +- +- ++ + Return to windowed mode + Retornar para o modo janela + + +- +- ++ + Full screen (press %1 to return) + Tela cheia (pressione %1 para retornar) + + +- ++ + video player: video image info error: %1 + reprodutor de vídeo: erro na informação da imagem do vídeo: %1 + + +- ++ + video player: search request error: %1 + reprodutor de vídeo: erro na requisição de busca: %1 + + +- ++ + video player: search error: can't parse XML data + reprodutor de vídeo: erro na busca: impossível analisar os dados do XML + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + reprodutor de vídeo: impossível determinar o ID do vídeo da URL - '%1' -- por favor informe os desenvolvedores + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + reprodutor de vídeo: impossível associar a imagem para o vídeo com ID '%1' -- por favor informe os desenvolvedores + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + reprodutor de vídeo: impossível salvar a imagem para o vídeo com ID '%1' para o diretório de cache do YouTube '%2' -- por favor cheque as permissões + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + reprodutor de vídeo: impossível salvar a imagem para o vídeo com ID '%1' o diretório de cache do YouTube '%2' não existe -- por favor corrija + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + reprodutor de vídeo: download da imagem para o vídeo com ID '%1' falhou, a imagem não é válida + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + reprodutor de vídeo: download da imagem para o vídeo com ID '%1' falhou, texto do erro = '%2' + +diff --git a/data/lng/qmc2_pt_BR.qm b/data/lng/qmc2_pt_BR.qm +new file mode 100644 +index 0000000000000000000000000000000000000000..d01518d63d0435dda309ddf4b2247ae902c58288 +GIT binary patch +literal 607609 +zcmX7wWmr{R6NaDF8@szZFtJ4u48$&Mu|UMY7V)zSF)#qJ0~4`DeKD{D#qKWbRuD1p +z8#ll1>l{w(v(~JcXJX_0pLf3VpH_xnEMDknpLItbx&bq111JF_%h|M40I?)Q2Y+H! +z$Px94_37`aHZ9$W=mLIe8nH1D)R)){2p&gl1zzXh=d=c|Tby-GI1Gk1Mxig^By+MnbpJ_VBVQ*>PgjzKfzyav1!gm04f9cD|()2E{q`- +z0Dsforb)O!Yzs5L1F<`-4P}Tuz_U4}vt7P)9+c@k-ann^;%r);DxE{ph+cs6QJeg2 +z2Ag_uVIuwBIPY|Ro?_G7zC|1lo-~#?2Ryl~P4ntHF#+7=-}hf9(psCwP$y__Ok0R@ +zD{Sh5MS)CLXx$G0rS^cU>FEq^WmA_rL;On5?@DLz1e?0l2cUEgdj4TLgSXj~L#x`< +zrE?Ldfor<{e++(LQwzXy!B5a*_YIKa>H6JI +z0WIkIi2U+ro9b7*P3?XRXzmEJvkI|4_?7%Nr8n6vJ=WdH-kQ&XaoA+j%Fqz-a3%Yr +zb@gx~o+RD_KTMy~f*z`>!jz^xjHt@22H#Hah}etC#|6~**}rL +zq4gl@MQ?#F4S)eBY%)3%{~q)Aw9Z7$$j<*U;s^0Otc|q)-2;HJbWVsoiLRF@JTlvq +zJhx4?p4PKRAE@oL9zC9beWQKs_0JwB0$xw(+|%a~)scHZ?~^d0m4ShyAu=+XI$;qo +zXbeOaXX13|tF#`&JAwUO3XBYcC@~WlH3s^@S71DSztbaN@=1u=zisLwWOLh=K@Q6T +z9y1cGd|sQPM-$>%@H}6@57PU3O$R@ElKfdti0O$y$~VZ`-e3iWL;5!c+ZML9*+K$T5eMjdWHVJaz{CriR?covb!eSl(;06{>(}TxlzS-IeI!(K +z^6k@nY_hI@Y;qlv&YY9d`6j@oa1To7abr^sT5nU;J#Nz!3QuRkSDRKYe<+{2Fc*EH +z28O|0rnMznc}^0yfOV^AQ-{;%j}3!rMb|UI6>@NUs7WuNSCxR8-4gJ9Wm7b#GfR)f +zy(F8e6TN5dPH@NKP)kokv@Hv@PLaQiOJ~lX>HON%rX14Prrt!?xt{FvgasAd2MD3- +z*|q^{Q&p&4HRwEECf0;0EufD1&^ZgW$xh}?=fkt3z%=PIAhq+d4WkO?;R?ha6= +z==!P^gt{vr9BPy8lkc0b-KKDOn@*33Hf04zo9al6O;dhmI#X$#=zUg^BhYzzf!&UR +zUeXgRDIfIC2@qM=K>xG*Ki8mNb^<23+hnUY*%ZaKOromKBh1yLT +zr8BM32_KvK;X9ar>s-|phSpR6ybBY%4_u_!6dq4t-qAYEC+$MlC2C)TmE$Xnm`r;c +z2<5RF4x_6;&8!25&8c8c*WhrLSiKmsm3;^KyAQH0sz)&<8hPd&fNq$EJR!sjN0B$8 +z6m*Vp$ot6&)~;aWo6!;QZfMgK_D834KUL6NL6 +zuyUp7w5!Wl4^LQvvEAjHk#C}ok~-L(y+vbQ3C)g7gxX|2j!N14J~DJD-x +znc;=!s5mkhZ2bzGqQ@|s +zCOR4w|JijuH&i6M=J`(86g{`0Vq_vr$a-43KG5ZxpyEIK${&J?m(P+PPC>;7bRAwL +z;rQ(@SjaR~_Ph?=(-D<}r<0FNMU^7H(9eFO>a|?pg)G$46oV`6Ky5$L6KRpCv+z1h +z?gZ3*Ofk0S57hmg1?<02)Vt&j^QVVRtH}y97(qU7XDc+ESr+1k7u@JP^L%M=8`K=U +z$|p3wz7E&HPe;C3Vp(fNV*XuxaTjXm+3jWZws9-iGXPRsfm@)CIRf +zY+8fPqxt(mkaH5@QOpgN-wb#Jl3(ba3XfA!5LFmjRHXB?yG%N-pR~!Y&bP_s-*g_^ +zna;CcZ5rp^Xi<~=;nk;TQL8CLi(SNUig|a_xiBuByLZ@RT^iYx9c!f1=Qdi@PX?Y8 +zM~gnB!zsqJ=--cYdTX2f+CH0N(i*e~aDyJ&8m*S~gY>Oq)0)&8tzAxluN<1rZAWdI +z^$IJ_DQ3dCo@giV?(vum+Vx=XtbVFVEQ&7nDuCq=QZ4)(Ksl +zC1lqu=yHmIf8JzMuS_PkfaaUf^(6W7ZuihN{uIQ^8a7pLZPVOdjc)#fU^N|xZWl +zmS}{28z?61bVL8+MZoG#f_HdLumg*2iYw#cBgsD&@Wa6Bq=zoI!oY)nAu?QppST3$ +z`3!zLW&>@$!7sKKM5aO*WN7_w7QrC0M=X7UL1a(tdtVHSZA!Xpl1<^&5ksbjlb>H> +zQ+RB{5V9+MyC884QnihV0cGqYj0EZ@GXmoi@WXpMWu)6;$9Qj6Fzk +zr@{>cCNhc-+c19T3et}wG5&`FYm^!P`?o*A1#DW)3?^KQgorC@Q&qcw3124D`RRj6 +zzskaL^TXtd%b~vZz|<-&DUSTY)G?Kzx)#Qau$JJR{1KG89;`wm1SgyTyY7KG_fw(! +zy~NxB*`a>i!hDLIaz!fUzb4IEWimpV$3gVaSp2{b)~ehHou2~E!VwzEA*x^pv^x+Qd&O4KI +z&k^h^MlpGLM(i8hm~xBe*mtif%-KfRpDhTY(OT>us37h{<51das6TCRBr*!BbpnpW +zoQ6L06h{M+=v-gMvFf|Q0#k8pu>x*)vZ;q=#<4X%uqH0Xu{d{1c_VRRALWQI%i1)B +z8so$P$|K6PwW$l-wrOg2PUqk5I9YWR@aP3j9-)2iz80tIk-g=-fwLVbN65=@F2^XS +z7w2&PXadZc)40%T50rm4B;5K49ubC1mAzoD?82o_*C00)!u9)}ka3~7;Ts0|+~DSQ +zdK{4lcXH*14&RJ>hBRm4eYiK=mHgIq+?z_@+j|M_tuIgea|jP&Ndt~-iAT*xfK6D5 +z$3-VX3@C}GE5AYeZN$@8q*X6>$1{q}GJ7nZEh+-ptSg=!xd1t{IG(%4kiHsYldZar +zL<9kwZy~WceeRh!yzsgNwzVf-B-Vw>F#)f#ZG_5K8n63&fi7MXucIQNJ8r}4JvB+k +z7R8&wWRGu;;Z0&1*fD8Sd#$mX +zM#_N;;5*vm$M2bt_448;{J{E!;b)f`P(u&n=P(DDBa4xCn)1ujH}UrX`N!pf4AV(J +zAE<9rBskbKm%SNtq;uyrhl#8^V4jX*qShYBRWF%pNIVt9RMWfA37MJM?gvqMGPCaG +zgsS%+bD*4yf0@TJj5tm8fSW8s;5zV=xmo6aJTaAJz8O!Nvop)OWHs2U-7LG~Xz;af +zY?>{eHmzC{SgvjFA&OUJxm}h)mEXzo1|~u6xyAC8rTjG^i4`b66}re~R%l{vn7Q7p +zP$Jc|9LKZ5x2bOBdz=-yQWJ7fNmjJP4VZ{DR=gqQwqE;)lux;DVI@XU?%I4ZD>bG+ +z)TQyPR6;V;+Ei9%&t71BTUOQ~FHGbKR<7!9m^sy0xn`7qk6&g}UO&q!h8f7#vsuN< +zr=dE(V-??&f)zE2RT^{*?B#r${Lw?^^e_NAW(srq6asv?!JNJ)Lbpw1wT?UodSqg? +z3;lpduEFXS?hF0=6sy~T{BlS)RyVvqWbb>-Isd=EN3(|6zroDwz#4rb|9S8eb0s~` +zcBL}cFIgcgwqS0TH;})6%-rr$ZdPrkO;g|+Ykammtj)(+(!uArZM-O +zq>HhMwKz!ru;N(O;sWXYNPpJuBH52$L7RF^cGiA9_d?jzE485u^|EQns%(14C$Lr&Wz&cLqZgY#`5#xY=?}<`Tg+rLTGKg;S;}Vk +zPJ>>?*estQD7O!6c88K+&mvjyU5bNI9yV3>3T)mbSMYlc*!*ELAtpMq1!u^Q-TBKF +zu3ZU9QfJ|=tzaixuthDmz|4GP)B4{bwxq!Uu+Amel1IfMz4x$){Lf)tdb5be^tx#) +zZCZhTY-wy+FrNsvVgTh~nB$JT6&02Y3?DLeYIb$u5>7u(I& +z%j;n0IoQd$K9k{ye~U@G@f)~H+Ei8UbZ@fonQ0 +z@T3~Sey|J2=$vIZ%MzB+^M@X?i%uah!)LO~h3WU7S;4N3pn6=EbL@IK1(RWlO)KM7 +zb~8^f*~>|Gvk^USDVvr<33l@y#rYSN*zJ-1A>RLI)7(AG?q{YNf%{%|e~de*j~37RJ60r@YhMm3AH5?6qEk& +zYICVE +z+`Qav@;eRc@$#%U*ph9$Lfv+hUzJGbPQxp9D+<;;&8A4pYE#V}PILjAc9J_bXb<-M +zC3jrv37yuHJ8mBh=5fs?{~BP^JT1yAMS6lyP2iP|QG7^U$t!)GMEa*YuUsxS_@DB; +zvhO~K_LX^M|L5R6$MVYW@4%XNf>-mPb3QH;ueOTxbnH1^ZEt?)iMO~@<(bf~k9m!K +zRJZYT$nDjYP`H&(bdq^F7f)0OG14t%bj=A`IwWNJKyO5bFDpZ`0x6s +zZ{#kZdS8np+@)6=h;_qxqswm~zPNC=fjJ-^KH*JklHRYG%9}P$13w8s|uc$Y=pATI{;E_a(k20rB7w{(QrR)lx|NO|cNX47m9v1vJb@g6B}pdKCM +zJ)3ugNPN$|oTx5xFN%A4{-$+X!Fy*5CVwBqdv{&~HL*YM8C`GC)LA!~l;1D}-#TIJ<_9kx&$e!zz``UTT8g8MsAel|Us`xm73dNqan56Vvc +zoi^z_m4*9X4+3{>#7Ax=JM8MlN6C{^uN#rhYlUpep|fr3(*10jdY*jL6sqY)W#?md +z?1C=Xn2)9Yl)lu4kBz?!Js~d-$XJs&kO!2eI+b$b0Us4T-p&J(CXpX*&d05}4l%l& +zO}V=|pU{%*^!idh@f7(duReU@s}m5h8~G&1Uyv*xpLCSsc}xuw7| +z4dT;klFn-OhR^;&{%&~!pW{U5ZqFQ>W^X*78~6q+WguU0j&#Y$ul!#=O2q`5{B=Q_ +z!rd*MM}urCr`Y;0v&lC3r-~2(SpoBho1EEPatLi>CNCF@~?q>PLRD7hgHC +z71bqP*%V8f@Kr8(A)I^hRf&m^l@IZ?3%USb%kp&_XkFfJ59-S5iQRpt; +zR)ON!&SQLAofwENSNOJtd4V;IZ=-#)+OFk022y-^bdm2IO6T~_F21W9#qE4aeD{+8 +z@K6W7Cl~b{oIdfr-6l}o{FO~P>>A&Dk?O}o$MP7jb>xTI@|b@voJfXaAO&tGN_ylC1ApY?h?f1t%{L>`L#}-cIpOQa9 +z+^xpHEUE@J_&@%&Lv^6d9Gh%rDo+YA5N!lcp4$a{{5PJwxgkVX#gh-r1ooHUsmDu0 +z?ikB|zIp>OGLZlLnG5=OFaEo1CyM``{PzsfMaO6J-zgM7vOMEy6>>uVZOPMaP`)+( +z8vh$h=V;koA)1p;yjW3){~kiG-YjJ97f^Xy3fYKLzjBjJD@$G>$I$)`b`x?e)dgeD +zr!%R9O?4*7ra^&p)?Jp)rmt;UWfFvZJqF^?eW3=>xo^Em=xS8A_q#2utW8LdrU`2W +zosaHKghLzBqs?xJ3M7Q#AaX9P4V-osxeAe<4F73=d~#B +z=KxkpiONDkKdm4tSEV@gv!kfeh@Q{8LsU8Y2yA0xQ6nmm>avAItx)=XduoeXUlYN4 +z&KI?_?WEs(U(}mKeSzA2MZNFd;N2<;=XRtge|!?oC-Q>-=O&!r)_~eDQ8Y{=Jy55# +za7lR$z1K@LntuiQj+>2d-Ji?X7lK$x~T%D32!h(b=^`KSHO~UnmmuVmB3D+6q +zuRH7(Zq5{!?`0GJ@^4Z0v}kO|uAAo&jZZfQKhR4wDR2p@-v!Ymcpv1M>!L{%ox|17 +zh5OMNuza5h_cx?3*d^hyd>8nc62jvx@$?GO*3$u|!dcPQXCK6b1e@~4J<)zD>Cmia +zM2G!*p#K*lI{mwzY57E_5c>Z1|Ffxgei2l$PZN`Ui8jM?{~Z=dY2_TyqH<^j;22Ex(uSvzxCR2S@a(=9M;-- +zqJJ30y}|oM|F!=fUl9Fw(5%A9DmK-kK{idv?KZ6f1BCae@6=z(C4BPH?=S2ieA+sJ +zXDTlS?Aim%rMU2Ap>%$ug>QrxbQ@3MSB}orn@wWyqe$rZ4q`}2>aqUrBmAFHzBK-q +z820=&c++-b*ryn%u`R{OWp60{z80hECDW`)2{9^?{6pWjVzdL*%cqh5#aigFZ|8WG>ed5JL(gUXXJ2CmiKJc=; +z#gu$OG|$vgOzVFeR)04!eF&}pvU+0r)zZMCgJMSUMCxxG7c)-GqIy?uF|#H8{ak-B +z(~JB|oU;g?dm23GKbx{=7b5M)$|vdEe%+>7pCIOR_Jl6mOU&^r0yFNom=i+%zxvO` +z+-;+wjmOn%dUhM4C*13G&T5%SoJ&c|7?Kz;y!Jzp$7b^^xLON0iH +zfAkt9!V2Yp+%ir?BzQsuUKbHRu0nlJ63g8cOB?I +z+NLR-L#(GJGm5xf20@0Q}=Z1UsBbBRN-ly988B97!d3!dgGj@+j2sa93QJ@$ur5-pC`y#}*u +zrZ{;?(d^AEak@$r%`^CmbE(UqO9hK~(DzkpVp9xjAkP1pM0KffaWV5;i23Vm$~RlZ +zX`RTg~g +zQIQn!47}KTk-T^VWR)Z0yU#M3bNDR2PniVSYQFeBhw|D6jm7sPBcc3#MM~4JV5R*< +z%Fus#;Utl=n`S1+kNy}-vn^Lgi&U3uV2*C$r_V+jRU9gQm2(H{uvh#_p*m;Izv6da +zKd5YL#h+(XPr7zrT{XhgXBCvsmUHoeXQ~W0`kwdC2>%WZnfn +zU_tq1J~kP$U`CnmNPAe(pJl;&C&A`!kcGySh1G4mEVQ;Zq~j@BxB&H=_YIfD>TU#^ +z<0DIFtqgPXuq-`37AosDS>`F}=QgWl*|AhlSU1+D+49z=RXc;Mm~{-~vhlLwK++Kl +zcFW2kmtY<`$|`x6QT^|@tWufkhKq;GDji8TWebzl+E=GMz+YCk22$UuqD`JLo2+qw +zzIRw#S({TH*Z6<3b_=R!xWAHhrc?eK)l1f0N`9|H5m`Tj3(c=}k@cJT0^j3o>M@6; +z^M*S>i%ZhQ`4rWe{A8ouXy^X%D!hvXZ6i0 +zy|exVO0SaMt +zkj*qt@j?dhtYDKK%Yekq;4UBJ_+6)=5-Q8_`-peW%JBy%p6%)@CsoS@_42EnloAe6 +zX0e72wx$|*gY(yZG-Ipq+=ndC}x>Z-?()^0id;7szfE#!=UpFg>woRQ0o=7&zn +z8Fk5CH*JtJno)mveJeR5iS$D0{c=_{dOqQsoYkivboY2U>kFNas%>Qu%@JsqRx)Tg +zUvbH6F)ZeB{iqp+NNJOsM6yPUt;17^c*o0ju&x!^9k&HoHx0@L#!f +ztQYyI7IK+iGR=t-{lmfKSh;NL9@2vkWtK<>NH)hw%^}bu9+1GRd$zLJNq=`x|VX?81i>N{N=i&Yt%12 +zBO@pGht)i<+|Y`2#OtbZ)4CFn{X5Amt*X-Z7nWOkg+lL%lu?TMe6JqK=#Zxn(>amy +z*Xd5guMji$6G<=6d__!#n3a$CgXlpdKRRnX@h35w_=os_NcJ3*nMm^$K@DZ}0uYB0 +z8F4L<6R#2l`2+esa_M5;HX_B>c@K#e#osJM2ciox197t2h~ig!xpOl0d5fgUoiF!7mYO7Y&uaqy +zY?9pbp5p!VwQ?`np?I`R#&~h)Z3pGPgOT9*FUkG2)2KdtMDCCI0_)Hv8JmgX-pwZR +z5b0g3>3Vr+1d165%MEC)lCTnwf;?y#rPBVGp(jJOCyX1*GUQi=$$Wwu2k5e1Ua~;b=oP29j +zxlWYlQufd}nQ2pEFS)Dd}UZjGv?(H+ +z%gZ$1iLU81M|#NXq8zPDc6t4GDENRj@>T_^L)Xo1ljm$NZ-r8PtQ%#MuiPweouYZ+ +z0W;;@6`@pT%r5Ws9!PTpJ>>n^Dl|{{MczOA8Ya^gn^xv2^8OvNyQpCKxDM&wqL1X0 +zaH>D-TrOXFm8O2z2KjO{#m5h)<*UxgkYShPtJz~H|IaI5t)e^0|R`F8SAm>d`7yFW?b&&$jAK8fJ*2j$19q)T3(mS4*G!ECx|(`ryjCLQY!)%S_~ +zzNa1drd0WT-&v}cmX|+PP9vTANd8Q^L355p!fsRvggiqREBBaz{_!!rG6^pmD(!X +z#b}7tw^cTpxtCXu*fc@4Y+4iQs_eZ;pJwn=*@Gz0t9M`JSVQM7DNg15Mf_ew<(j`5 +z?9_CXrvd4UhEG(Ub!%zIFr>n)P672r}t74fA0;MD3it$<&uNK{YizaLXYVqZY_dZ9|P +zBG8rct5P+oubpSMDz&*USbQ~ArYoK6l`T}6)1==|4^m|p)8m~Xs(fy$$1j+m%Da-D +zHB40)Z~|6_;i|&6PGoPNRE6y|z`u`Dju)Ol&)cFLAC&}m?5P~nvO=}3qAInx4$k|l +zs)xwG?;WSAo~j8^@{w{1dPaVHiE=taa~H>-sv7;M-_@?DsudgsT;Um|DMov-cGV<8qQZ;9m&oI^;A9Yo&tY!NA>(e +zdcIFh<<&YI^6e1ibu|PA?^IukcQSh&)$eW)_3LLSpQ{u%Z#$_0OEv=Y52*pCs4keH +zkn+vw310NG^4&#o;DEHr-_}vSAALyYFHdKU4{G4NP7v<@se$n^z`@KmnQUNFM+~)T +zMSfI6GC060{#p6|>IU|?50UEU9|x-8Ysh~u`>94~nqyfXq()W_q&`gnHF5#@&3ARx +zs0Fzpv)J#foj5D%3~@`R#R#v!YUoFrVpU_*WJNa`?{lMXUq*zX|S5zn&yA+S0mDWD)&bds}m0porph)H6R`|AdMf30l)Z8Z&-#Ge0&vT3yc4R5ODOB|_g>Y-N5UP=tGY3^K6D=Th*UN=*% +zJhu$;$tbn*2Gw~dPE@NqSuit7+qA~}sMTA4L;h!})fdBoK3Ub;e|3U|_0?Lshe=oN +zuhzy!(e=zvXQIDNJ^z(W)2O_PT;G%GOs!Ppzq!s0_tZwZzlFrR+LSR6CUKeCRB|T7 +zwp?n{6T0pyZff&G((w`f)fUH5KoeJ+>g)uyWj>uVx9)07Oet79m#L@?6!-dZwRI}3 +z--}ji>)eyz-y&^F6tStd_fpYy$nR{usdm<+{C$^;+BrTIeAZ#L^SA;!Myg#~kI?59 +zRJ(T2{zx5<{3QM>QQf$foM +z?{)GMyGN>hE~JO^da3={DZXVXrw+-HF!koC!xg>32c1!eYZ&lIVbiL;R2}XZ4zW8> +z9ie*|WnzFjGM)TIl#@DgJTG+WZ58*F>InIks^h&%LOmF-j`t}K`D27S9_2v1rH)4* +zfK_p~I@!sw4B3%re^s5!MEYXEHFfTUqCDld +ziXS_j`Zq&unoY}9{A1czvr@&srTpUtQx~&kfi)poU3}jJxc5t4T10i1W3ANXZ53#J +z!qk=217K~ZtE+}||D7;(%ef}?OB$>D4@;9S9;NPop*(5#J)5e?D)nGxJQV+_9#Oo} +zEq<%VjvJ^>*G@etM!M?cD)qF36V$Cq>UpEOkat4V^E+)IbG)*tqTi^*WYQ7YMyuEJ +z=v>TCR&SeogALfB-mauLK7EpU`z$|H#qa7}KnmEHSoNV4`Qhv*)d&BZRHt-TpIWa5 +zFXW{@mn1!PtBU$^kMv8Cjp}Po51Q}lufF*PlV6yjzFi`Jzl^6dIzc5bCp&BTN2SpG +zEIZ#*{h;}9S^k&$nKK?HY@_;JAq#i~rBUe>_4#PT1z02C9CV +z7PHI4e7>pmSgQA*{Gj#JnUoJ^()xKA>AYduBwhtOyFQ)2H`^4&0&SWys9yL> +zXY!zU;IdI?noRNUSqYt)W(@hB!8-FZ%EzDmBk7OFe{|M)*-1y`)7j75hHmsg=WZEH +zdZe(94x*6?bsAv%1); +z5-``F>*D(|(t2mtCErtix9p^L^rt-Hq_0iY=#O?hRFdMw6J6;Co!gK}x=L+|t4*Hi +zs#9nl!exf8mbE0+X@hk2Qk3^^_1D!e9H)MDigwCzj_xm6uALfZglX!kYxwn{dbXu& +z#{1Fde6h&}INDUki{Ol_VJO>1N!JXbdL+4utV2b +z>kW8s(RDM?KK#k4>%NEw?)2BruIFJjxv!mlJt)6FsT+KC0H>+YhEreAobwvp@b(Dk +z?;hG^XdU2DI(eqWx^WGv7hI{Jn{3=m`9?S0G#ka4j;^{H=^M4Fr*@C~LiL8OxNejgUS6xB+kQ?W-G5wnI!pS;|Ay`ydXseL +zY~6+QhxT#QUGGy|U${ee7fIA-IjOtHT!j=tx@RiYGrmUXUR_3k)j4ZZg#FT9Kig5h +z-AMNyeuL)mzUtoJHj=-{uKO%Ez>!hf`yuK2vvJxdWfUxr6g?nwEL6xT?MwMJJ3T=A +zm85!T_l(-F1>NURJ53L!IW6_2ksgwh>?-d>J+x>ki1IaU>Vl8c`DlwxQ#+j&>gb^* +z{UB?f)kDiJr8-tQJ=CQX@bZ5)O`)^eKkH)fs&n+P3bgLd8}#r8bt#?}(jyQLc_N=4 +zF*gRX*daZF`ZBCvEj_Z_S+IZ$dX!@a>Tk@ksTLivX-Z|VX%#r5$6o9PW$o30wd&Fu~buS`$C$|M5Vu;1&9RT7b>(VpBD3rT^zaI0P2 +z@jKa{|2;kF!eEHwFZ86BRCldeQ%_z+{xG$Kp0@NZ-M{)nPcL+x`T)K4tU0ML^HO!t +zEb_Y;q=O=lQGc+NO`XtJ&n`*z!DH|B?9LAI-;&GbpPXeX$N4LXl`+)UN`L#%+P8&62V}V&k>h^ReemP{jR=9 +zZ(0-u?&G32ZGKAm#csWMKke_=mU>HQH|Ww~dP_9v-sDp@wd8uM+diP#NxjwA3)ZIj +zdTU%4@Q_zJx(DgPOMmsYsih%?YrV@U0Qi%ncfTUtxpku6m-{TRuBF~rjQS&_nvjxLn{}C+VZ3{DIHO`e;CHAiSkMx~e?g*Hel@8|~x! +z1bu8E%{O|+>0?6|L&UVw$A*oB=r&&;8&{kB%Oid4xd-s-r#?>i&WV2E`uNXIP*Z>E +z6HlogR3%oQ+%lWy3|i<@bPtOax<{Wb_Xxb0vpzlW1@%{|>vM+^sqfX)CR@GErYP>O +z&wU|(+Tw*yXhii3tGd4E97FkLdwr?i49Ibv^`&Ie?L}YcE4wyO-*k$;`jd1_+b{Zh +z*O6dpjfvz3(x&PgYiOP;>bSn~EDY+nhrW?A2C_h)zG=umy}zJuW}$k^vB~VQKnF*S%2pZ|LV;Y3?KKsD9qf +z9oFpcIx*`svQHQNLQ@=a@UdwP4%IJn(>bjCUB67EbHIZ1%in?Yc!7SELiNA=?ev>f +zw2wrJ_-lSh6fJ5A9k_pU;hY@~nW3x>HXbSf&-+)F#1 +z>huIMcTxRwZ4|7n33U7B9c7q-$qpvzzs*iUDM!Pq21A~UHmoMi4?ON~7|n}`d~b|cNx!dsnlW|g?`toc +z3>oQq%ak@5X3T{gw!&oCIv42m)MSYzKXdD^$qG-Hy!lNI2g-AkGMSv!J;+a7FuC66 +z26L@$@_nKE3zm490u4KXuWe-0Y~Engs(H;6UPATdnx#z1iiuERv8Ln%(wVE`O{w;@ +zAFX{%nVY1G9*#5RvIPUdA5FR6)JO1{X_LPjYE!r;r}J7qo2pe^o2KYf;&X_K!jwl| +z$`cb!`I=*(y6iR;YSR2c+)Pv9*l3#T$~Q8RycJ +zM>XkX8r-=_x}c(QaVrb%e$_O};6!;wQPU{vDC&=QF^ybEcPwaYTo;kv%eT_F?Ihip +zIL|cBatW$Of@$m?13qtyX?B5hv3qvo9_aw_&dYeLB)#{oo=wXo(6p>x0Vw;*wAQ4v +zPkb|Ni$#F9b2sho9EWJpN-)Qo` +z<@cC@J*XbMxTN`4Z@{XSX5a?WrJnVTU3WO|Xj8hjG6VloUhr_W@ykqcq|p%LcZ%vN +zi<%n0>vYfe;&#R_@c_-$2%FL`)TSOY#SEhVQ^9g{GJ}iLz1^;7UNHI%KBabGyLEESZTw}2%qwhcek5Sv#C!o}Kpbn(rw2+KeUpG*92!vjQ0-D4(9Tu<}%rOkw8u~4Odn2CkR4|-HJ6W`Ez@Ht^7t)_j*kjYF&QONrnXB4t9aeayh8QLLWk&f@LrTJT{N?|o`9%2+05&En(AL~&Af{NQ0I=C +zd6y%o4phx1U)3U=J9gVN8|D)afX^;zQ$6Ww=KUo*nE%1d&rA8!tb-jaRbtwhy9c$A>wlNWdX`N>znq`HXP=BSHSw?dTdin~p?Bhn5j9F}2nfjTP3#eXK +zJ+oOeU^>*rWV7ziHrj{TCh`jPV`|(mk#{1%I$kxAUupl!xtaC($B^E6WH#gohm1IA +zHc&suYFpfFEJo|ox1MmObY>GcgcGuNx +zq5IZlT{p8O53PT>R1;Nz>bc9eo2@hcqdC-`CR*nNW-hYH9uF|lAp$&Ch>2cE`3|pQ +zwwKxolWmjP(Ux@n&~au*EL|@PGdqjz29NPIJAY7}skxI)Q|y}A)yxM7t6_HaEd>5{ +zpxM>G5cH#WW_Nf_nAVeQS}t!)%#?kQ#~ztORu@=VXP85D-y`Nmo5Q&VfG@gY4m)m! +z)sI|FHQKMy#ms5l39@*9b2@Y;%&b1@@dbKl)IGzdO +zr|5daTse{z2uQNYA|lPzB(nE5+sw6MS73GSZm!)Re>;7Zxw(8gc%N`{E8|IsmXpk_ +zwiK79)HAm|s9qV|&D<#;4}S5exmU3XeO`ol@ZdVshY<7N5AA2I7Utoe7?}JO&C{%2 +z&=vn@p3yv@DP7wQnYp!Lbx$b8ro3huw$e2gW1__~Gp +zm_+&3)tcsOa(>7P`%Kc(5>Wd)o8(H@NH>o($xmL;T#vK)@vbs-#!M#lpFRrtpGnv_O!IH`Bh9Zllz-Fj`u&vl|3wS) +zC#ET+?+^>W^jJr#QK^p_QRSZSc_T +zR>tA^VV-rhvegh2_fA{c{?!*QSFy6)pm~Ul_pR(L$d9$ZZsnXs>(+j>m2+tl_?%2u +z-qCbEyMDCtc?h79pH*NeZHb592n=s(P08W9S5{T0vT;-0Q6BUVDKL^DL+5R4?yy->R8u +z1F+P~sy*W^-8bxO)yYVIZ_v}K>s1PJ<^rqkebNI1TrKCGSs?Z_vs}7MuwIFlYySRF +zv5uB&bIN~{k}TIn;5s< +zrWzk;dGIyl4{};(Q*IW%amCapG)0tJh=Vn(>xby*AWWs%3e-?grJol-1jb^isE2tMAZUuws5%eFLk& +z3U6Tbn?&`*ty!%8_uXN5u;ueA3Ub6+%lB+kh`|{w-xs7q@}*gWihP5vbKM#~G@0t` +z->l(#=7LvmZH*k`3#-~8Yc$?Kt{!fUiKcVooy7`h;s^0%uNAPI^v&Fk*0|fG_b(o| +z0#m3?@TZtH{%|pfjE>g-5ChDqZ&O6wwElO7`X8B|SQB^(n8OX5`syTWLc`ZoXEb6XS79{_9WVN+a(HRU&*L+=dM)Lc|oIkCu^+NUGr>_XPmCsSdH6|<(7qVsrQ +zvo+&yLx>rxtyu{amohlpv@*`IW<5=z`;sbILEY$ezxP-{q12}saod_bG8FP%7AyEb +z3jIHYt2WL3)>iQ6nLu^Rrku9fnqMF{>BquWXs$v~CDW|%h9zk}YMHe(?_KEYm93?5 +z6lVs~*zmNW(3zH7YhG4|_|V;2cfK*@heK`3QKhWNB+4IRT3V5*W5E2LSsNAU`{;OU +zQ`j-;Z#r6ATxs5l-9ggLJ;k~RK +z7dudV&u;Ca|39L3^|W^Hje>61!rJ|f>UaB^S$p!2f{A-%?J0i)?CDx7=3x@>(aG9B +zZ3Ni(d)EFr3@osq6&n`@6aCOS*!4DK_rcb|L!Myo9j${8m(hJ2<*mc{zC!2ou#R-t +zOZ~{Q){%MVs4wGh#knT~^@>|(F4l#<-OM^$_B2$l3D#M^=g`YDS!W+Fp!=}0S@Ba9 +z%;m*3&0w<-Aah3deEo)R>DKlM}KEp38@qhhF`WW +zzFh=s~*Kmyvs{d*P#?Bi2}nfiI}<^T2xT +zr=T}Cv)<8t$}GoL>r)izo!xQPXGb~@UFuk0`uITZsBC>*os;fccxxq5y+ocCR+2aU +zuDLU;)cZluE5}+tzutseo?`u?zM-7d%}Nu6NNn1pz^&35p!65`%5U{IKfOUst6^9f=-7g2w@i%;r +zDO7tu9QD$+Iy|wOLtCqdh3aoMWL9&mP-8%UWj;pKqGM;@V8XZSzyF@Ui9j&?$= +zX`oA=cZFJ~Vb8AA6zYtq3;MSb>U@OrrX?nEXjfko>KvE}yuTCbV%^MBg+t@-*EuwG +z+M~mJCF6Pb0ONcjIk|?glKy;W*N3#h%N#9xMhYAJsS8K +zI|}s +zI5dxWT1a^ne$LQXA$8d>W_#{AA?*d^*}r{E@DN{=bqQIqh@RyF!k61~V=jqQf`pacFy~Eg<}w1*bVQK2b`@X>y1er$q_lBEjcZCkf-aA*gI8K<7d4rkzwG^gl(6^Ur2s1mMVC;)i +z99qxK5oUJ9>ut{pGbfcmUih-`M4JK3z-|h&-><~1(X)iPm)~W!({qKnzqMngUk3^E +zMkAknY?m-U7VBMgN|=8#fmzq=6Xu@=JU?ETe`^>sR%$IgGX?z3S_%tsPS$XAuCOEp +zaYoD#VOfV|%(Qf@u>39f4fV2xWq8}KmdrVj*Z)KL0CxumKE--Vs8^TMI&NI`>KEf--HZa4s +z>B1`yS(s5fD7+G9VwOf_g;)A#G2`IA!mA2Hzu6#RZOsT~pY)Niw$Yc!L(CFhi^u&4 +zgKG+JKH8VrrnC??D(#q|(^?Kqe&n+Ke#ao$m0H+kY#(ySEZEEnvcy5@F1Gy{E8cVSm_Tx3F#F9%i_AP}uef`d9}o +z7C!hEc5mxL!iQzv0=@qfc03%1^P$Cr9Y@WKbqW)9nXym3uW@Mpr8Iu#JacJ5Z%c1SF7lhpy$D}^Tp=FmQ>^@Qge(qLb?=v-+ +zZGJsr?OHGn8~5dx`RWzeWtLlS5s#0(v?HYZ*zrx&x793 +z!}~VEKY5~?@NucDjD5dJ__$^`Gnd&Wd^|3knf_cP>@T&B*;d91`)jGp9CwpLyRn~e +z;ER38iyRR?oeVjA=vCp*mI?=@YpAnl3I`*h52lV5 +z4rT+-GqZ(5hCR#{Zs*Yc&@|!D3HY&Bt-|3!@TdD{))Qi&X9ktz#6Uxyxdv=A0b)3s<@xz&%ZZ@QWG#LysQ9 +z)olE|OMl_F#F@aFj30b$IO4V +z7ggNvWN2QUL(}44#A3&HK#$iKi+_T6@|TTb@ng?0YrmJp61#xM)DOgxO&T#<<7dQ@ +zoewa}Q|V&Z@^#EqhKZ$OcQAA1Lt;7CNoJn>w)oI<$j>Cy5-aUL$5{4o4vp82ixm9w9qL!N0O2py?WTrlv7&!sw +z>iex1qqd{}t;1-s;kYu4ZO9ZGZdk|+tpm6q8KT~YB +zV=FWN`i9tCfxb40VvFH%%+kN97#ogwX3y_p?A$omw^m}yHK-3%TByTDUBy;)pnoTZ!$DKwg{e7u#R@6?X1xvD3~RhNe!j)4?0e*y}y9>qqb_-QC1)N8$I6-y-&D +zu%Fo*Ru}u0MBH$|AP(vPdsD|D4q7^f*=u(bA3cZoVR;{M$S~;5AJ&MEAs=jSqlk~A +zu4Y*OCx@o_uX1SHI!t^#X&Yk^hsDQtlw+o&y~N=w%foMv5#zhrpa++T@q?!T-!@`A +z&X=3I#)%2d%*-_D0EgzU=5uK8S4B)Xe2^JVJ;R}C@~0e{ztP{f$#?i`yK+KwZABjM +zSPd~zf#2}v!(!t6`Z%98PE0)8iLqg$#pJMXW_Wa@n2fxxX;L-OJ$Enkt&Kx#`OX~L +zYQ3w&TaN&qXY9*IIkYLwMK|;u%RDc-PviY_Uvg+GcUN@(1-n+|bq=lNS8-@-T1tn1 +zFA_(7dV$&AUM8ltME+yyaWQqqQf6vCMNI2{7w4H4ifI?;LqF9Q(>Frz);S=KdIosO +zUB&FM@yuNE5{H&IE{LNe)0uVk3*wl%QOvONJr0em4u__?r8zWrti+-9yI;jIqt`HF +zlMlo(&pKx +zPW(9=>pLS(8~q~eNEvbZW6P1(Dk;v`y&L}V_u|Z_VHal25TD3e#>{F*arTSH(eE{z +zLzC*_&~j-tht?xCIkerHCq7xT24j;{aSlVj%cMWVc?aS5?4B>q&&2pOtBDI9@5hXf +zHWn9*Y|JeE4vEhUhhEwEo%k&J39Mh-5*Kb?!EEpE78kWZ{MvAuxcIRznQ8PR;*z!S +zJAd3OE={e)Y*8b`rQaZqyY#iV^eX;7rnmT9XWUU8HBpD{tvZ}>fkQ)hstyOw<6ZdHub6)4rx}uM`^F%9Vy!@)T>j?5Qzh4qRk|r@j+xNtee&5Ut*UE^yPak8J +z23^IyrDJjE$Sm${xr|v11I2yE;lG_Si=Qloe!cJnhqnFtYkSF3;(;s+`eeQo58Szm +zzu(}{)ZvEs>2buVi#+0Iu*b%7?Zwakibvo2*W#h~7sHP!Eq*Z?ag})+hjwcT@r!p+ +z$BdXMesSexX1sMoJltywv-R#G9(~~roHMK}9!qJ=%;6Ka}snEcXtIKa6jSxaf>{VV8#)x(*R9&aA-fubmTrD!YbRKI|o4 +z?tr{ky+b-|pP|Di96CHYkVC_eb2|LyZw`$O4(qV1tiwUyaAZ +zZQXaQ9l|jiIu-+_Qa!-m{ALT6Xhf^6ZM=g +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 +zco5=`I`Y&>GnuvhCV6^vU&Kc%ritt1 +zxhIfkdB2G~ZxrY-CtH5%$wkaqYK}a=1pJZG-8r-ukCzv?@qXnY@&XT@uTfckdgPPL +z_Q6;3GhMLWrLW1)CRaf}`E>c&gQ)9#zd>Gj^$TWS)J|UfH|%NRhw_qY@RwH~k(YFC +z$jljgh!4V?v4X7X= +z`Ud%`4nyR_-H4#*d4?}c4|RKAG5USs`%I&5`MzT}99AGlS%6brxP +z<#HU_n{AYTZgGLJZ(o&vKHP}en&ik=jFXrp`Mi9kCqCa~fqZ2b_~QH+`Pa9?8QXh9 +z{ynxKvz9q3|DKF^;NUFz+OExvwZ1I>QL!4ct-mQ>Z@nJ(<;;_>{W^ly7%{y?UjAe0!doS?YZ$|6LV)zIeEN?-2aY +z@L~$viM&FeOA0${LLA>wF_l7m@bX>`?ac=(rt--5bUvh*-atO9`y$2C5U&S}Q|y(o +zuX9!@0{Uny@Ap)s_Hm5e`b|-r-(u$VHl_F_BQyPe8PLQ`*Lnk*0pC|j41SEUpIa(n +zOA%*;j{roTKJqmVZRJNPW&ei1GUOelTz|yp(~Bz=UQc7D10N_AXF-leIhBg!C!F7@ +zRC*WsXY&}P(#{La8n<7m+#Y)1vto+l74SjJZAz8W$C%AJQmNYdN!(AbDb+^w#d&}@ +zrF#9n%yKS93CFn(%gAq)@Vg6{seX)7>l+LD5c?~2tM6v!;RlrHlE}|KJW;7%53ieS +zR2uYsg|U4nlm=Vjr(IE$h8N?Q{hc;Sqt}ix>&T~+ruHz@OTv|=kAVMPeM4zF6?OS} +z9;I0wGqZM^q%^MzJyOcdp}p91N{e~m_tf)Btm6peHxlqD;1s1*706N5MM|r>*oWGQ +zN-NZX*^X06>o)LT8aGo~XM+!ZzNEBXf_iX?Jxc3Ok$<`~SZO!tH)fjM5DLl|$pFNlKsR;rGnkuJo;f{+>UQ +zl)huDG1E_jmA=!U&y7cv{_X?lqZz0?67x5+N>`OZk&v&gRg_1;2gb9XD?@*3&Mb>s +zDZ@@IU~I&E4h_##Qy!n&i&;P4rZ}s|GxLb9igSHK#x6`&hC?n4pKMZwZ$_M2>t`i_ +z;`A|ZD6SOPm9F86>y_rrdTpwbh(0FEuUSeG?t8Lj4pox6B9FbMr;;@86=u5qqmp!^ +z5;NURQryCE_?KylyKYCu-YloMo5jGtn5?)v#4*E@6*#ngJX~?_!*h%KDehD7%Och& +zBRYYfZcS81?p(}FXZ9#5Elx4Zog+%hKKMJgeo|5nBd;>@aV6#QQpVP_P*R(pXXeKu +zl+?uY%wT$$L+iNjlvKpm=G&)~v@-B7JDyb17nESuj=hvowISbebvd+rcu&dPQ;Hdr +zW-Fe9@RQ~~ri@`5n5AP^WgNQ&KmUL-4(F=v8+t1fe!@OR9aScVMKJ5I@ybN>o0+!V +zQKszqf|;(YP^O0MV78P@W$GuO`?lK3^iTd^mg{Sk8KpqCv`)&5DezO9ujJ6Q^B#w` +z&n_uXbga+Ji6c3*jxZ`uT;9x#13pq_AFj@f=_{4lXMSKNF-(~gy^fhrHCN^&9snI$ +zD04fUU~J_fW$yS<&}&tdc}wv5_a0K7I(-uU$al)q+sZIo!^X<8pAc`=U!W`>mBUO6 +zw<*uZ!q4BZNqO;)*^FiVLs?nZ&8!)vlvS5dm!368SzY!NGh8~OtgdpG8TKAjUOifi +znJ2xjtj$J!V@+G-wO^;e8y<)reSfWD|jFDmcNsDn7Mqw+rTPUe=+DO+A_%GioI%GM|UV8+kaDcer( +zW9;$^$_H~UFvIaQWk*-+=iV90PJBO*;pzxw*BbQwP3)-bJ_mo~?saANk73ME?u@eU +zX~a$MEmuDI1bTC^OF7W29OC*i%4cjP&L`DUK1*1{Y#Z7rpC6ybY$fk-XjgA52fseV +z>|=^4N80RW)&u*LV+Q1jhSgP$O`Fcx2X&M$O)sOLrH*ou<`DO?3{%wfzt#u;KsjN`G +zp9Xt7GFv(KSV?BJXv&4jNsRq|Qn~mw;y>#j%1@i)n00egP6Z#m>E7$HK|8#Y+@<$~z`YP`zHzQXw^O#SRTdjX*hVYUc +zn)=;PZukEZcBGwh=i~FtIBtN-N|r$XeK!tm&*RHE4s~Jn%wi^Dzi;V4@ +ztJZoP^0fbNwf02F&w>GJ?OCrgTkjoe-QwWix*gTJZ(d_oPbD>~#$Lu=xS&QobBvkZ +zF2kXvQY$rTA^Op)?^2_8V_#SNrPizPE%x4@4M +z@wM>_N$ogeH#6aR8@O~ +z;~dx%7t|gD7h`{ys69qyA^sNB9@CdI<6Ez)y=KKT+uY4+--@t5O+Q!rR)b!DrMTMv +zY$mh1uBwlCAU6XZRR@fOzI}7CI^ak6n@#6(XnJ~-I{3&8#{O`rL!Mj9*xe7*$G(QY +z-y>O#Ux576goA3*^-0WR|C&Q{#9=jg+%jgF^SGKks|I5|2dE==++wz+vYPVgIn)8y +za%di3Nlm@AmRZ^kRMX3^VQk(db<`)nFx!Z~)G^3E*w?z%oa4x|xA{dK|KZonI^=>n +zp$6pdq2=ntsnCmINDj)_fI3$XMctt`r0&g@#o!ePi3~c_=i=f*N@=P@`hVoeieDM=BLyb +zr(oP0&D2-BG-sB6n)>SYEac6S)K}4GZ7dU^zWRGDX6dp?eQhfIv$)6AburNA(kJTc +z71uKR-2Uq8XVKUF=}PtO&!Um$c!L$Gg$9qNwT*O)Qud39IQ;y8B_ +zsqX670O$37Rd=IaWSP59-Tm1`#$JC?-K)SKnfA51ZzjH<|>M_(83|T$Z6XlCD +z>%wvB*JT%?UeH55nSeflpHHi&nxfwFy;VI^Y7H|jc~|{r<8#bdB1-+{^XbS(8rAOx +zn3+NOTRq#S9y6|3qW<8{V3zl%sOMh3&aCfTRnML81N|~c{jm=Cr{BBkkISHUE;Ujw +zmPedXZnt{5F7n)!PpDU>B`|hKQLh{*!z>4r)GOb;&)D^A>eX&h%-UqMdTrxOW?nvC +zy>_lWGoAQe{i8+_V|O;Ff6SYO`$_ETA1lB&(-QzO-t?CMM+1JV{_!I9hdBYKgMV_= +z>nj^T4{TSjuf=$KRQ1n$%a}R2s(SOQlgtu%PrcPRff*83s(%%WV}{Ras&`g2Wk%fhPD;E!!r?>2)TyZfics$-uA|E3vc!yj<{rJ3U!F~i)lnx*ci%(&gIS>hTo({sx- +z>(%CrHEN*QYyZMbgMZM3`M6Ky;s{M0w~m<)Nm?;G-v4H<7G`VDj4_irH0_Si!p1dZ +zrY|D_moj_bWm?$QTg>vob`EXNEaA{TV~bYi_Av1MQLXI29n4hk1FbCepFh1uD|Zz0;U#qn6rYc;frH^b2M5!&6$l^z+O#eyCP&@-*m+Sz7&bHJItu_F5yX +z-*#`U)@T{dGtVr;p?!Q$t?@V5*CsQxnA0s`$A8sYRSILqNmI0kBhP{EIoiW7Wiiu* +zHCmfk#4!~eT3dY2o#|o;t?g*!+h6)XYkR02Gd*@|#-#OUNr~cOZ +zr6V8hG-~~;U|&nG)E>FDnOP5>&<4JBjoJI$)P}tWK0JCtd;F^z%>Mp2+T+Mu*%yDM +zxsIcrq$)Kl%5;oavsH0_?Dr7eK} +zUE`FNb{l-R_JEf0xfynNvNozK^z^E1ZB+N`(08r1Oa^|~enIold8l_qEt~xOb{=ia +zmypA-mfBeQ9^AJZYdLS%g1)G(jk~v)vBaw!8vpSfhnC*;wF!;Bh5f&wP3V1%v7}WT +z8h^RQq3LTkhnBvFIkZ)IMw>9~IQ)xN+60e<8KzXwCLfMs#wsb=lxnpYYq4IN+WSdn +zJkVL23VC2Z-qU7c|4j+Uwb`-lQQwQx=A65PdUP3W&UMgXk4u|JeUZyhHOyvT$e~?$M_Up3 +zF|*topsjGN0bd-@UbH|ycmJim_)Q7)dp@nLEQUP9(capsr{iFsBehj;!%vCX$)Ra! +z4Qr*9t7Ha6_T3^lfBZ{I|Gy3(L+`W$}pN6%~Td}Lzg +zzvgS3#|>cid8@Ve3_md2nt9rXp8d=)|CF|~GWxY`Ew!E1QFnZ1p0+C;`RHf&YkQt~ +z7Tu7aC~?S3=L1d_+5(G@MzICuxUazgUBpwPVqp +znWg6q?brhNt4}z!T8d;?T5hxpuDGMrNM6Ub|S`g8FP_?P8}3jO|{p{Z!n| +zZ1rwxmnT8)P1Ur2{0ctVJ)J|_jM*I8$L-aw%z%Ec^0ap4P!?mg>uFb4Auky>T)TR= +z6|<$E)vguq%8ZStXxC1bN1W72yKeb|vB)dh^~Uh~+f3H3-%LYZqqBDFDEfn1jMHv^ +z{1EmjUHiK&@_A$5)$Trgm)SfA-ORodkvuClg~hUDmc>$83TwrGcQGeR;J>Fb7yja8 +z4wi=h=~YWsm5pMV%+2EYQ!X|ZpQwsY#ItmKDhr>X|LJq}`TNm)BoE%p!3-{Zl77qZ +zjzyoR5u)+D2mh+#(<1&_7oSVPEDkmvKVvYL8=rEqNPH#(xWwc482lvzxX`;}0G)W% +z0`E=42(cJ3Fej}m8e;@jHXPU{01rpdrwC^UOZ2WI62H-!-M}LUbA_|Mc%6pNJMf!} +z(;yM=(u{#;Jor4m>lmMJ4s5dW{B;ce;$}&laxttCtA~GipZC!z26LrjmQ>7|!awDs +zRU|NXaeC95voIo2UjKX={?fur#aLjFe|*$7}mbc*qE74cshpD`L#BYyqAMQPF& +zS)6O4Ays4ezbMW(q#?$DQkmG#1l-d@+(@!bJVk$t=ln{t7@BTAo**g{e<$((Gaxg> +zt-9uj!C0vngI?$7+5b&ET^ObE%Ig27b?aLG-zCdrbx5ap@RP6!n? +zHtBxSg1Kee1IlDW{>a*r4kf$c3X*HGzPf&l2NgY#>rtR-JZr!;<$q-S{_NI&WIW)h +z<@Lcr+v{$SUwTfr)R#n&$ae~R7(Y67J&^XowSa>~ +z;1k*K;XIIh^7Dpcj7+?8KsTgeq#Rc3KlXE +zvrrJosN--~j`5B$$?hyyq$k4}?}~9`WV#~9WI8iiI3|j*(fr9) +zvC;Zu!_yOT9Q>`8RUL_#BQnvM>Q2dt3GeGn^EmptGTn*cE%d*5+~Zs^%`>vRFUPpt +zNy%9;jq26&{he@%NlVX6b*8j%5LS^1uK4s!XO=rX4ezJ9S^&k^4F7zo&deltT4Yvw +zMohhou`L|l*Td7ZveHv?y_Moh%*ypfCZC%>6*(#^a(GI5{K!amS^`KE1AO@8zLyxf +zDkzrWO!LpoSL$6r6D*)=t6rJuBV6%Wj^y-ISB5jm6$47)2@opdzYXW)tgMWf=;$$H +z#zdupAI79-rX)nAxw4|^RlGAR4{k(=3}>b@345I!NxTu`O3ld1@e}sHhS2|w1S@Kj +z+qp)&QqnV0!6gn4B;6u9`zQq|jKYF4^rN%e-&qinYh5Npwxp()t +z29AWF-A;A7Q`~7u(2kz0{|UQJy9(_Hc6^vn@>gk>2ai|rR3E5 +z4--5f6LbS%9bPhKa2xbLM5lY8)C=5o{ayaQJ1sGt%f8MfwE3~oWUa|`leb`l^I&N+ +zJUu(hfNF-V3nGpGR5K_apEr{JpHpcIr^5*wfp$Jrv>hr2h;Web-3WhJU;XtO` +zfhU^p%BA2lZqS?R5%h{EOnFkO2~rg5tB58P +zkpcPNOT|YxUlCUmH5{N^6dS|_v?9Xv9<$ub_Wl42mkuw +z$p34#wm48N0~xeH{nWwMfl3W{<+2HWBU#s9HN$UxxTN<1&9nV7O||qkpf2$!RW6h9 +zzmJ~x5tp0R{4b2l|3^jOJfl#*Ufz^~9+7h&KGM-Ws!de)sP<8gIA@kKB|XUz?dayr +zPK!@=WjZ={{vY7c_0DoMatwERTnUc;Jvt9`q-LjNxg%Ww&aCuIM`9+=+$7|2-+jrB +z|B{&e5d;y)!8is+4H_IZ{L!Ix9mBKTDOpJCWIFn`>(;$Z_xAst=*6XHrI^#!D +z-08{jWVupf^2}GB`HaLlj;Y>!(U)FIP_Y;TSFj_z&qP*Y|d;kxz119;5;fVE@i +ze)xEv&lbyTGX0;oc||bK1J${Iox1`-U30l=5dJ|*UUp=10OtyLH9S4S`*+*(*66Ic`{j_>r!(1ehsLc1A{eW)|#1_s-qh +z^JINK?5Y;X=fOAyX3)Gdgy8T>K$HaJ8Wu)Miag3ISOj$}q6*~SfnvRqb3E>NXNn`$ +zm71QJlb6qGLN(~!k10Gh(pjDqX`t%?4C^0H^QF!cP`GfXc=Bv#^#YYduAzdEEAAW2 +zpNG#gTw5*$|5E+ik9noS(}a0uPJ_VuA{z%NMBRG1W1$Rh9OU%+@+8{S16EM9r0bwS +zghe$xqA~3tnXD{7mi6FZ=^|Q!4-ImEKCn*T=kqSDBD7er +zx1;ZXw^!0Xo8b3r^Gp}Pm0)forF)6go=beCtIdE~D;1nMc4WFnWxF$7d1b3C-zn<< +zAoD?)Bytden;#=vcG}3a^f7r^paiSQ%_e!2wAJu30*};;bEd_+QfLXK+ax5oiG`dg +zZ8Eb^0UX)am6e@ADPNS1YeFhU`kyn^>^ZWiXTtCd15 +zSyML7Ke4gtxS}2?4X+{-O>&g(pf*HOKfyytO~*N$neoZ)(JpR43R`zKjFo_Kh}1-O +zGIiNpJgHqj9plqG@tmsES|4y8DAkh9*G{&d3$uR_Wk6{M3h%BlK!j7;5uf7p6p2k+ +z>?7@;K9jCiX~w*BUFTFM9hMvSU{AYzV7GH4Q8ZC%bI~WMAQXHKeO{7Bu-dGaf5}Rl +zloUrILIjT^qIRvKwr~>2P8Lr0Cn(dWlbN<45$`5}w0^SUuOw{w$v`nmej=pcJtA5n +z{-=yAJxMF&;=3J9oyzo7BTvakwMc1kYF^-FLY+8|=@)~>>UDuOmOgNC* +zAq;~z!$*@V*fx?4;tO9-Klu!LwShtqQW11&#^?LdXMLXSeX1{v9f4UgFqcmmrUXg& +z!*R*!BnfDJaifEX3%esL-7(zd$fkr9C4jP$-5$RPah2zYNayuZXG)Pup;11P=;B={ +zLHt`%%!{5Mx1zY?>wMGc>YezJbd8Vs_0vi^t#yqcYNpfKC +zu&-XL8DcAoBIuF_A}A5(0T%|61#bfhr=C6Y6-J2p_3hIMoJMIZKRKG^BL~9#0yvh4 +z +z%jNSAS47x +zL5%B!qDRJTxmo9d)Crz0nsuUc;ry@jPSsotK*o=ZV=kra-vC*k`~G}_2}KY5UqG&? +zV3hxLYL(z=HV=0JC;|-*8cjVD6N}XK56V(BwI)1VLq~)z2L)kgG|a~P}-a}3-Y<{!vMXQZ*~$1nk!cVk-tYSCLKGXL*-+D6A{Q)d!Q#` +z!BVa8J{{vs=gkcC`d_jY{?)bdu1>F2k{{(sPs|!au9ef{h;_HhLchKXUFYsrA=F<{ +zOjQhuhT>WMXmfDV)ZW)SRZ&9}q`h=gLtGV9n(;5IL|=a$#=CDt=5$o-SV5^>tDf2| +z3P(FMEZ-nM4%U90bVWbd5A!0%_djUvhc^DA9y79m{s#;Li~6(`-AA2SFaHy!M?3c_ +z>Y1_y*o@qx$QZ>Jixf#;UE%A2F@?ywyqFd^L>J88WEgx3L=V_V +z$?6C13QT+X7aEO_7g{tG(Pj!_;fNNsC=~YKxCf4?xb(h_44kUDUoQFYSw+-+u0nUM +zirk9(O+;&O))9ktPfu_aoq;a!!~dQPWr0ICLDDF68j|#;UR0sqNT*UV0M3V>Gm7hr +zbEIN*0XtjZR27kD<@Fv6rPm+|8W34Nq87}SE0v3Hfn$Y1swkhN*Al&r1b(E1HlBD? +z^SpVf0tXo8)u+MvK{DFu_@}QlkRzl7tFQ2u(>GDajXH-ZORBFrf3DNX{}RlS +zBuBbiR5&yG)=9-Ms{1COE*FoYRgS*WG0Cnpht8bz*ZbLZE7V6P*3M5!Q(UKZA&F9g +zC#b3Dn}j9sRtx`wcJwH^l7LFcr)wgY;oCqWjgRlibtz~>%{QWV>p~9vc%FQgPRaaY +zR(Q;!^K#+z5BH|zf+!pAq4TMEgf1kij}(Y1ZU4VVTU9R*!TZ%$Lkh(1LD>C%h*+~g +z9P_bsNE#*LF^dvdODHf;}q|M!mj7Y0BIonUAJ^1wx8L*Dn-@xyDkbQ%G!g +z=fjrxomALpc8RMx9aB9DqcURd#;*X=(mwc_FnkI)V8wL%K_k;eH@f;IrQ-7!ec}2D +zC}Q2~3|6z`S!VJkO3GSMWu82|D_p?`)NFI_&XGDz$V6bC31ymgZY|G?d3+Ii>Cc;6_A8y@aVah*a^5%-T$GZC +z;<_uh-3`z-UlPMVMTxlkm+pQKHb<`AA&pqL@~N61llwOAmEgMRoqaynP3ISiw~=b{ +zuU5t!o^)7FIzk{g08GafCM?* +zBcbYkprxd8JJ)cuF^@<`OOrc(q$3fH_tcF7me0s2%rkvZ)bxbkgHWoxj#@CGio~k4 +zH|HA4Yu(TS?*KB=Iz8a=7&SX!pf6TeRZ#S;a2<0NNv;}3-` +z0Tsaa%rDXn+ofkCN{Wn6Aqk?4Lp;j1Fq-jPZ#y0FevwD)S%k>{@NXqafM^91$EPgL +zaS|7(DnOVK2we1Ie7f4vKNlGL0ZHvAT<4+)$2lsmRzh$C8awY#gT}yE(cb+NZiOFB +zrJe2tknzvv`IZ8uZ5k|Fu$)D3hNSvUCeLt1gNE(EP82rg{v5>!fjW`?X<~T_F$wxq +z1Tj5b4XK-hK!JsFYBWY5tJtu88W+ik^t4)(W%o*GM0#RkEe8)2DanLN`)GH93k;j) +z%m}@(;Xw=2qYjD->7G@JaLE-5py(@1=q*Zmmxdk!(f>Y67SMw9Y;Z4hH80|5>%z@3 +zNrWO=jT5+$N_BZWXmARRXm##e6cJ2DFkd +zp{WaAey5$bJotP?FopAG5p?>}&B5e9>cUCC>zzx)CiE(A+9kJt5Ws+TBpN>?>f~b6 +zj?<`=y$bG+rh5~~iPjx?n#GAu20BW6dpcnrdm!q(Bjo9Us#49yi#ECt6R +z!~unci)B0T?Zn3Dks9p!fQHsm*`2(av20oaF#R_0Y|G=t$;KCV6 +z=2eNj!K4}d5L)71<#9;BPLnRzql|yXO8*<8PRy?hp>B^z2L*@a?YrUdcWzUkOYZW< +zrViY$l%^+P$W$OfNkM(cjrp%4$9+q95#)HdU~&``4?iF!ngyw1V$S<^HvDW`vU^Z@ +zp{S%(@Bs?9S91h=62zCeYa^7NOX9rZt%CR`4)aZ%=}a5xa3|q1!b0+H!(g|``yoGu +zY~KCOPG&*xYtmDOBsWATU2b%(7ktpxkqfI-gnQJ0jf1){6^H=~slbF`D}26z9@D}c +z`By72=SBwvv{N3sueKNB^x=-v(9^RKT&PuzRvNOX=y9s>n>N~wk%IW}ly +z8dV=#*Ce^qy>#?cPw!GPF!xdSVtht41n?UI3!AS=(0sK2dUk+1)@XK`m)sC?AAI== +zN~#Cerq7h+OiF^6TIkB=!SvA#xyvIyJFOe0|N3fUWY2#~iLnH?(cUgbED_}MZ@;Zq +ziZchN`3v21Jya%VjU-UtZ(jj`-u1C-9@EXL_@}Adi)7G+le4+gR4^D>ndvE2LQdZn +zERcIs$R(znE_t5%jRAq$1bvo7n3PBU3VVg1YMQrtS#)XL3Jczob@#8t)Td|nkl0o# +zAl0F3_S}OA7(_2*gdD0t9+jXEqtiY(lTy&|#r(q;Wf#ilO4sY22}d=EML4pQrVq^| +z<+1J%3f@mRb03(CkjstAw_Mu6kY>X_szjp}waT{M(wHw_$s->OPx|peLxECg?bOdg +z!wY~?DI%A+JYQcTO&X0KlEXlYrw~tmzR^ocAhOTPk@CiCiOa_bSL`nKuthImFAM#=x;PW^~1kx7Nq)@AM +zNQCHB +z4|PBnjpwj`8qXdaPk!nMzmaPaFd}*dIe2&T6S9XRg7Phi>Dg%sh3xO6|1^T_ID%w0 +z^s|S#&Y2g%di@;{-t*^$pcYdAY7bg`@^?nxU+Jk)zA1ecoRkSM4XF&W=;Zf!&8A<( +zN_ttvoA*L=S4fi`-RVS0w&0@#K4(F9IWKYUq{(#KOx#Mp`4gJ{iNm}T^K2suedwif +zJ41?eyL>a#B57&98OTM{=PcTq6c3&oS- +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 +z%3t|?`y5q}?_xpMkk +zquuSIxPkvtCHL#o{K`UqV+Q&Rzkm{cG_6vf&i_3m8ogdj6w;fc2M<#SyqvQ-yi&T? +zJ&A;$AF5jsRI4H`sio4%2wD~k7NnyQlMZ(n{r_et^s9S>%B?k?iquN~#uPRQh +z;bVS3hC(=u&^nr)W&)qNUcYX_mfD)IMT-K4EiK+nNW6{Z5Nv|HmTTFjV0ELr;3TH +zXji#b6zn0Z{C)&?;%F~Yqp*N$fgrEJABRJccgE=>e_jH)-t&z~6V-Hg_{sj#?x6@O +zkF6LBR0UZxEYw+LStFICazgw0G0vYvh|^%+sOb>t%MA{7el8FEuXf};xefvG +z(*F4gCi?E;dQzy>f1JkeRtrvR(KTyu&Vlv&Va+542$hIAE822Uk5E-Fp9jI#L+E@2 +zq5Um*Y}<-Ul!q1h>N8nND+s|1YpsM*!up-aC|v#p{-!gzeNgOMMfmN}&{!39O<$;k +ztW;|r&#Dm42;YrzIaC6wlgXHe3+&|6?xM$^WG7rt2G|%?*WL)~Ri~a(pai$otJ6-4 +z?dc9a^cLS)$Bdf3>24hqQ<(ar30V;aZ4Tl_W~K#285y?kHtAiB`*ePV3jwC!C@<AW8m>qH<1iQild%vhj*0$wHHL(=;4Kw!SY#QQTDrF!iZ*o+EkmY +z3a*SVM_9nxHJ*l^R*2)Z#MfIi%9%MfrmUqlnwAzG$t>> +zaRc{0i=eb%IYngGVTv&{Mi!#}Co*YOXAALX`3(`~p00aVN6jO0VQ7G|yoT_CrqZUi +zpC}&FExE71Dezkde*8{OYtkn!QsHWn)#1+R9L8ey~Hz2dh +zZ^55=-A*^*&nmZZM?Qn{zs@3?y+Qy{qO<-+^I3EwVxnxTa!e(*b2QTg&7hCAME;khn@NFaC@?Ds=AeJmfc85h +zpSbn+eCHFH`%$p~d*Nad9lq?fJG#v1@?OAirr-jkW`*9-K6ZsVW)o@rR}rnMH@;Wk}H?Q~{%Ys(<6CW$)^tKW4-hvrFQHUv89$kP?7 +zKi9x4U-oqs)xCit>Www&v?Gdk$zi(#9@bB8;B#R|vJHqkoqJ-BX=OqT4WVD^a_&&# +zliFyDdg9Ge6uqxM$ +z`*Q|5E@0tTT8Z4Z!h5Ebcd(+@bZ%Kk;&Ex*B +z$>VCIf2fy_L#5E62hXG9s-UAXPV4S_&Y+`|iDXd(taub%9Rx-H#3Vh?RQe20MJ=(^ +z0d4#vd*Ax1byOQUm8rx4qUs;|CfHGD@iVs7lpHBb-gxu=WX$tjCxd;eg&aMa(~Q>F +zq=zgcRc$as^zIJEtQ@St9qs~cY}=u(RGY?1#;9e$>^l%91J->Oud^BGnx-Y#12(qN +zxw40`3~1|D!T7FW)2w$l>*%TTGGB80s?W7z%R|6Im|2+BRrjFy#x{j4(UI-|?y!`s +zzP*xvc%ftdlxHqElf{#lrqPsu_I3rEv{EAMbQ)^wFMA;BnJ@JTcAqR=gIe!JEnse> +z*-kW-O;#uz#O))`%>%A1fB +zi|%&6TQ2Lu7n>7x6&HVBu60;BZ?8Y~o==s7UGI&L3;jjh16%dn19So>-2)(^TJC{& +z0YqUL_e6Xch|U9MrO^;oa!2scUE@)=9R%|d+@fezz|n5i-mSlsd&-(Qs&P{l;hw(7 +zB-`p*VxxzEe`mfs!V>)@x~s-XLOf|t7Z%(CKy +z_;n}xM)pL5SdTLxnk+Hd$f)wv!2mfbfS4Krkq1t`R-orn5Grqa`mWflncR%WEk68lyG1PqFqvGPuaqx?6dY#%poZoMs$5MN_bB9HDO97n4i2nXdn +zjc?v(NMpY9+Tk25K`lxNG>6QK#QIn%m1RTwB$5 +zasf9>T`;R7+8eRP9GO2$4ZI8f;FFe^HG;h-Xc}9=4r-)oyn+r#oG<|+?;hq)udQR0 +zghUN@rf*ns`Fbs*_`Iy5`(R{lr2Vbjy8r;Ym`%-s>fB0`dTYW+1?hOgkzk*?gs +zH{z!~&1bH93Vrrp;yX6=gH;%KFbx(DX^7$ +zGM>o_3vf0E`qwpQ1)_`{!+fLTQfP-wiAkQ~BY5+8&4f^G8?~1xRLJ>$2Hr)x$I1aJ +zV!SZ@32mS-^g_c?ybtb_N2fcRD{EboqpdBmAdhU}aT2a^fy<4@a_jAx)_GHv|A$ZOpJvneGbvu+R|a>;Z>&qq +zH3`v`S`dX$_-vL5*_q0f-LZVH6TmZxfvOX+tLN7LQe@$^JN)iPZ`emr1h&_76a>h?EfUU?}g44q$YMMQO-v#V6r6zkJ8~?X6`LFWQx)n1_bD5@hgeJ!m`3Vh;}(y{&fLm +zRK7hu5jiP-O}^)+y;$^e(hK<_)gO{Kzs<@S{+|C%p_><=Jj~XG^P%YX`5S(l+N_YUBSvr)GV|csFXN7F5iMvUdemtXGG?Zl##dm40Q +z7WZtRvSvm|awkx8!EG-{`B5LCYMezP(VS-vn;65r;j +ze9;4TQHrDTWh=76lIJ`qS-mP}bEu!)tVTW47_69H!-G&SNS+8SqoX9@)nvu>G=5Sx +zZ1$u9guHc*Os7o(zq$j!-xc6(;EQ5H$;n3pYoWY2vNj3z@(w^h>E31sG;1OwG4L|*6Y>r8mFbgpLx|}PY +zfC_Hama0_`*j1^xlrMW+WC)*ybycZJq}l0#NjukBM*lhFu~Z1)b +z>QbS847$vhhTRw5uv>B8T{~C0bTMrLEFlW_)fXjgx%6w-gN$eGlxTSg8956M)zqO; +zrN5zQ?&3FDC(&!N6MEOY5y%?O?F^;(w& +zcPY5Hg;;GS70pe4%9)w&M&G8LZ#a48O=MQ(>kCK0hNVDY8cz?Hrh +z4UQ5m{+iTGtLc0N*qWrre6)2Ox)aP_eEpt!U$yKTF_SKQD&kua=d8>$OoDvSsO1#x*LbR(x2iTQ>6Fk&AUD9 +zfOLPKrCV%Ax1b761ZmEKijJ($ZnEIRBWSApGXKHGJTBs=wEF`4A@HVMw$rCUZ0bvs +zR`HF=HMK0jPuptVnO~QC%_gH9jfYXz?MyX?tnFe8)GhXA)<*dh*7?DtgacY^-AbraW@`-J~vr +z@y!0lRyi~J3t@i@H_~59y0E$sfv${v3DCThVO^3MSL5E~4sj2e`gMJhhPorIhs}oO +zMU=R!`q0inXnkca$p7;>p_1tRMRq&3>Z1DjI2+H2I^ks&ADX8XB9B%jsSD<@qmM%i +zGKk_L9QvKD#j|S3p0tL&6J*-Y*gm^G6>(_Q +z($X30U!##h$1Pu@lDqe_*|M3u@+-A#_zp{~!otq;x2En--MMB8q);%kX>EH(@L1wz +zi&<<@XT?!|k~<1JafB^b2{y@$M^ydkCbX&r{L9X><{Ksxwsw_9GficnLv7OlK6~*4 +z(*y0vDkp82IUfu=+KR*qh~LdYtn6tMZ9Y`1<2zM_+cE-mFv-arJg*se_=J%)Exsl# +zk*sn5GXlb$fC31F?ciA~y#G$Es?8oA> +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 +z_b6@b7kfiLmL{${4H|I7TF(l|VFTMEoS +z1GRP#k}z40?jU>S*P95LO1(e~omX=YSot(Pybtkz5}Q^?>re8l@1JKp7NJDQvXr1Y +z0{wz-se_dmo7u(%-b9bM1qb8Ue7D*84F2c2n+pr6Wg4;!O{D}2aLetT@6rlxKS?ch +zSe8n|vwyx@3C^YX8o<{i?!Y#{rDpjAr(O*5AC3g8HzuF77ZHfOw@t5tdamOt=o|FPzU5B55^B&)q9RR|?|9hmcz(IPjp(wm0aDzG +zEnZBHid#CvZXCwO7NltkJEWxXH4i>Z6~$^;`ez6~e?q?(yD2Wgej-yLd$HfhaXYvD +zH+1{+V%n^%En$MJ91lGulZ@~80gZJWhs?{XyJ<$~yyRFxozeP0Y|Rv(2fMS7I;cj| +zVZu*bz|Usngl!0G(n|OVa&u-qkgvCbc@Z=BQ5|W0?~ZL@bfH85n3YKv%3`~{*=Qjz +zYz_Lt)Asg-hUSSNpACJSWvE0)w+w0Aw7JezJT;(aB<3-3S +z;SF|oHNl0UlfvZ#fJ^O!6KF&9GvPWR3B*J1Cll2YMp3MR=b +z_D#!IZntz)`kxGin!Mw&?D)#p$OVW5i@2V2e|{clG44o%8Cyg-AX@&@kZ4gAhcj^b +zH_}V-;A9k(U;G5)RQ#N>{xUS~1Qp$mP|-@8Gi()GJ?(}$B+mZDP&mu?M=ira87URt +zPuQR5+mVyAp{jjA{>c8lXa#rfz5MA=hs@Ktl16E>C_@xQ^4SSOn2Df6*~YUyo8cHO +z0~NLo{^yOE7^Cg##HwdQ&7TcLI5E_OY?Lb3=inveBI+J< +z)6CPQtUoX6fXtsAHo(ujH=I`MsYYJS-*Gy4Ah +z`}1fOx&BlX=?GBQN8ZDC`PS4yOyE+ITQdm0kk9Ii^M*e>>BKZ=^vGB^!M>=okxloC +zfd;G40lMoh`dB9JO`R7mDC@s7-`bXPm&gv|5`J==)qMxU=FlZ1y%YU6TH_H;zT30V +zh8@#R;gG{fLiNs$=O~fq4xpnLe-j`q-v%*qv{C5uG@M~>xm8~LsI}ftooYBex0?O_ +z{1msWR2qoMMi5%JI_SW3AJn}uJG0ho0BTOYqWFFiB#dynyb1_gg=L;d)D +z*sPap*-?@VT+WP~#7~H~llVKMH0+o=3t4j?|NQ{${G=m|z9}ZS*l4pTkxhybYdzNM$*)MI&;mBvoBakdQZ{;x^XD6nTkC7ftm#{7uj=rajn-1P1A0a_=gHZb +zlS0@hXKpS`-xWxY^d*2Wwc%ouV9jqK%kme +z$MhinjILPyo^_Qd+QU^jAcqw|Ru!{Xa>k+TszKQrd^u8IxxI>Rl)##l{DJ%?i3SOO +z%CCv7)Z@6CIWeCEi6wk>R{IFrAv;K3wve#$NFHJWu}4Ja*`BrmHM*ttPP26#?l-Xl +zUvb#1F<1j2EAm-eOMQfigz6!pxfEot;kT2xG+v~iL_}13?pTLD=;P2u&($e-t^W*OUj8EAiFGwqdDe;s98xW>exnJP+pQ7=+X=bLH6ySTPx +zqiGS2asetV-K-=;Epy;XM%h6x!K~JaThW>fbJs)5+g@9cguv +z!27O@X#HAJppJSHbgyjJY#Fgpoh2?E!*k!;bGK7Qr`f^RdSK;>yxe@gH!qOr(exV| +z?eW?@CZkj97KU#E0_#tGdPnlW#cBYO0QVx%S>abgn(nvV7>r@eKD~` +zc-VLVx8^26==EC|U+I_xv)Rz`XQ|U&p6s0gMie!CtA}S=+q3vJ{%9?>dhO7g@Z$u$ +z{%X?DW|GkaeG!Cwn%JNoLb6-%I|Zz}$8iGafPy92k3(YPSqOxd&k9KP35bCN76J9y +z38cm*IRfd0$p%9Z$aQokAj9B+^tFxAXGM)cx~vE!L4(MVhQX +zimj`vX;FhZ4+u};MV@kdqWS~sI3LFO#;L7SgKy~bNqPJ%F>3R^?1mF_A^i=xDU>n6 +zHUFE-k-$%ir_5z{)Y|peaW`Q+mF59M=Js`Es}%AP9ul}We=S|4xF^q1ye;r@cTZ=W +zhgItlB(9U?Y|`slix0}!*+2UV&!zTkkc5qMhNqg0ohrkiY98vVzN{kAg~xg`cC0Ly +zk#kv1pzON-DtBGOhxL80sp@ckieT+)7sgc)-S$0%^FjZxH}D;YD<5KE(4V-W0$<>X +zVfcU@gncYi`v#XGbJ*yuZRD;>DRmi68r2jkYFyXn0-RDXNk_DdM60)dJI8mn~bWlouIt`eaPeUt*I5Fug)HsltX#>i$PuU5#(vM +zi4c}VEOwNI{oPRLq#aLtnktEUHhteJ`xNQ0QE#Uj9$y8L>m`PLm_%~7^90!~ee^S{ +z#`NWku+TYQWy0c*hr)DT5qx$sbqBe4&i19-xMh6S(K8z +z)_xj6C&o`YXctOaXBh0K_?xzGrUXPMLt*}kwZV)ml3w0E4YhVZk3+t#ewU +zR-w^a(6~bdKDEK8VMGYpxwH0y +z;fUL@%HddEKbG^EWtJCDYSr>T0FD?=mQEZFKlTaa8|g&i4{pm>GA#7`cKdVfTu_F) +zPemQF4n@5$i$Cjbw9zHHlsRpRuraBF+B$z`B_f|z)PYq$N#3 +zQ~f+2=+cChKCINNhe5xi&O_S-SiegXksb%j>FoOY+3Y|k`Y*_Z8EliB9Q>Ue(T~v5 +zeVD4D(vHR_)8x2kK7He6&<%IFiyk~(L`Tt#du-5fg(uC}0HJTw3q5 +zr5Q{i=DRK9_ELD$#tIsySHpM3-H-1bZL8#I(LgJ4xAXG!I?Cf4GC8mOe%2kasC?pC +zdHNvd9simXyeW?Pxf1-~w-l`W3^}}NOU#Dr1gQmQG<#msaI{-?W0KjDlrW8Me{++9 +zh3F9tB1Tt}(#J#XIi*$px9q<5k?P%y)YzJLGuhyJN}I=GC9Cem)9`GhJpFIsr3A0_ +z>&V!WhV2bZZAHgqc{ppPk~s1fubJ!;rZd@n*)5zjs7)cs!J@ChQNV#2B}r0ZKgld^ +z;dS~BeD>|+6eH}+bLy=U!;1BQLfo!Lq-!7Qt~b$x1%z(Znj`=RGXP*=x71$S05J7J +zCP2BV)@A!_>$2p=hmewLgD~3rI^=HqZ}o9gTEv^${|kWrIo4PLSJ5{Ua;YrmAr&e2 +zvE>u%e6M&R`LXiofd{Gq6-F@Ob;W$(0Tx(09jKQ +zF~Ri3ZNw_@cU;GYnWzz=w^eCa#QalMPp~OcIVD&>u)?XFoGEYWC06f>hdxFplXI=l +z*EW!U?kS}4WR(Teo1S3MH+-8S#2+nNf7pyKD*9LzdF! +zvPc~nvIp6-{e4n%t8ynanb +z4hh4jtiCkgLJmBp!0J6FW#E+@5vyUNav_u*`ty4@^PGeBAm#?Dno>dCYC~(4KN$o6 +z-vo=|rKXjmefMxHP2NL_eZDQ(N7;1~tIDpXafCa-7=>C&aS#Vt85= +z3G0?cUm^E+Kv}7Ue@7P1Cb()Aa2T^lsSrt(0VlOeDhpqhM*a>zAy&vm$VfwlRZ9gf +z;%7XJDzW&PJIZy_3g{xxWb_YeonHTFJni%wPg;n7K|eLhDMn1SKNmGMb@chj(KXw) +z0sRRy27pL|)B#mCsHV=bccgp%PJ^?e69#37-!uSw(wuHgBH@y=CC+GzkI1{aKQuhE +z0*_h%DVSa_z%<*K1g@%}`gCZhh(E0%VJw6EhS#3Pn(g@Hu{PJ3-01YSp#@ZenL=Ln +z;*>qx%bkR@`Vye2+#+Bqz4V&T1Q%LF-rdF|3M-Jw+}~VIU+E`9Bael0ljg-JWWlh* +zkr1{bv31DuCFG{`bC7I$PGRA{$$OdVq`$Me +z?GLfS8?u|0n~}iS+L0@&ox$O^v>wsTIg}h-=^B$i+(z#1L$osQhCl8--P~?{{>B+ro57++Z9;ov3-&$urI4|>J{pTp +zW$n}j{CZB(sTP=5iikRU_`G7o%hP-@XR6?{szO+VP?se7{C5MzJ21Vc7C2DXsY_B; +zx8kiGF_0URQvCE}4O$2_5oga)B~Pj&lcM18qU&l2qo``$DpwP(W +zkmaj%gu}4oShAx}jFc^kx_e@~@3$U4G#xM_;%6280$C2IB9KKUbRY39)8-(bii#a= +zwaP}U_C6^#?KfHT#OK<}aIQB##FemEA3ejVajNwPzRF_L&2}%%y?$c|Sgk&y?oGOL +zLLG$ts}x#wnlZ3oT}bvfg%0C^ggEccA|`C!L$+c%koTlTXi^3Ev7AfkuHFsAPQ_Mj +z1u_U=J)VUXruDW|nr;hyB!SDPzW4{KVl_q4%+90ar*h|cs|wyMXSH0_^F;DYUEOo| +zzcm*Z6!1D4pK`%rc`bbA*Th8`cn~drgnsDQCaUO6EGWhN{yhj-Vdnni(%IB^J_Bn6 +z@Cgy}x)`#>%65lU$@k!cVI~?S9PyXW+8~?ED(-3@k#MxgFuoUM=ZM@b~;Jd6O&KXI(ic* +z(fBQOGZ%+<%N*n~jW=0q*6yyr2ukgLt!hbZ#LbkAkVmT`2&v^ZJD%SR8{?g?!%er@ +zGVM%fV9)2mO@~TPu&)wywu#Y>n5sA^iCBxr#%64j0ez|JXI4s2h +z6({RsB`0L;+xcDH(cjsEZbvnzg+>G{52h)Fc+MJnZE7b6=zA+`n`^yQ=_r8iu8r11 +z)4?a^oun+J;!CYS*>L(meAGNT58`u{Es*?e{exV{9|ZS@i9}Ra2LYc1;<>Vo)2l49 +z#o89A$(Oj~<5qW#j+Ba3-^m7N +zak;!;UOW{N`q24r+B_QhW4m+FN8JH1Lt19cviUV)j%7#q1O^>_MAU2ijGHDf!zFD1 +zRK*J2g?xq-&#bMtpcJkPD8c_6IH#Jno58Y<(sGkP-F2A>XemU$4U|lQe^Dd03cw%; +zInexoT?%X9<5+Gd5;V^z`l>t8n69@X4Mob(%OTgdfiP)g>AwDAlRfRrzQ@TU_i!nE +zGd5=8*#mVCvW{ZB`PHT=kB5I!Cf2#hODWX;77%OWgoSnGH|$PAElD}2&&1KD{nR{F +zop0mPNAbTI!0la;{5xq?yEF6h)TB#a^sF;`t +z(7P~-scIP~<--7J?-!u+ICI(lve5$ +z)iHll@rUN^4wau)`o=7W<*7cJU4ayrBe$NB3P^<{b*wjpCpXCGw2wKwUWDMRf$VJJr~Q|-~7DD&GuRd~U%u|~u^m4E)zEGJ2!C)?RVWq}1-k +z+0Odz>|3+8AKzxY*zOqueO88-*c=-IOnRr6lz-=3LLMnAe_zqenx2_HvE2pnmhEv5+(+Fw +zM2df_F@9Vwii_On1XKY`qO!fy2W3hGjm(8Wk%0K8Rg%lZMhTeie%_eY8bEkmF)nFP +z$eJZAJD?x8+pAUysm+j|+vL#Ho4tj&7;O=@SW}ZA{W|L)__dkH=u+vARz{8NYhRQe +zb@qG7>}UCR*)H!$at19qFVB=IbEhmr4%JN`OSijipyNLtm_+1Lm|ZL(mXednJ(Ryk +zzBuVs{Vgi{_U+XsJkD_A4OnSTP80I&5{MiWXdK1L?#!N*LPICKW;YJm +zovMJ2>AB5b(amZzJWj06AFyN}9G^u8{05&#&vYbWn%jTD|H*zC7-|I(jAjHP#ED_S +zBa^mAje!#pB}|c`nF-0=vf52H3uN@BRXa+_?$?lff&MG_{~f8|&$m{f-EPY**}+W1 +zS=>^^0L{stLNrjp=Fj}o5P^fAHbx%cA>F~B1uM+m&N(w@RQnh_S)~qzs6dY@)q}Y^ +zGV{P$Vr6f390v)kP`AOZTUfH}izl6GOI4PtrLwn-YU!36<8lpE<0WS}bwhs;VQr84-oE}jz)*2z0& +zIw}&1**4i=JHs(c!Tr}FRG1n|0#O2_!<_?dvSN+&PC^QeVg6f*C`+)aRrv^CY&|`4 +zshE@-QPBkM;ojDF=GtA;jq|*DVKBc$fT~?(g_UCCd>!Gs8&=E3ktw&w3wJM0m2m^F +zxskJxBZOymqRy>%K=LbjFX+7}{_PY)xEt6{_9;ID`8WuU2?P-3F&Zg5>I?v)$kIp? +zFFfu-BVlMIvj2oNL;Z}+Luj<95cC=?J3hB;`x~WcnpwIdO_4!T9V0y(3FC0^b)Q(N +zJgmnUm&UwP_i+gVBkQ%}a7AUpUD?C>u<1MseTJ`y!>-)~bL?)?Yf#}K95ojHmw~yu +zTT?a55Ol(O=Wu)yViQR4+3t9t4guqI+BKSOGjqOd*{g0@6(F_3i*BP=Wg{2GGI7JQ +z{caDl9}dfsjqtFc2Gxi{(U`R7FV&sc*x4p0dvzxE6meky#0o1vCJN8jA>?%dg_6-B +zCBvo5Q1i)7KoUV!SgCTh0=}9^TanaZW^|Gr*nAPo9W}7<4@PEu0u6c|U|Fg29VrUX +z{0i#?2!mc+#q`5HVlRJ9U7FvNO2ZXUQf$7ncV)b-P7=wk4ab* +zlu^~Wp}g~l26fKg&upW-B>jl|QDae>qDuNL3r<$utbGv|1iHbm9B3Hq#yJaB^*5`L +z?;H}|SYXCpR_n=H&1H1(2L;GtwnCJ<;Xz)+|Fc5aDnfj&JMC`!o}AQiP-|5*E~;0( +z1)X9jN8CSm#+~KfWJ>C7&Y#X3sl*9+gja8seEla>CmO>3a&P;}f~ly}6C%Qm0!wPN +z(Dv~Utt`xj9Lg^Hqv%0-RaDwC>;*sLL25-%9k@0VI_0k}gY8@rw(J#TwJa1etRrPa +z&{Lsc{bqE7A#TT@My+ec9@H=;8nd9PxujZghDsd5E*bEt85qsnQ8j-?J+*=KGk4`> +z7(5{sG}Ul|R$pZ6)}vk?GUtU0kNvG +zuQaLxV{WN2E>$P&bt~#>wFbL2#MQJfkyviyV@S{)$~@l-#~V{;JwA8cf4Wubr+PbM +zKa!251&s@jja+lE9{n&C7rRz=3vavBRBoq{r5bF-ZF_`Cr{Ld?abRxT60la9VsI3_ +zhm{3$E6)3(A2G`x#y-M``^NkC=k8Q+ha;KA=8*$%E4S2sS!#afR>exq+)8wEFhHx_ +zDmivM3*v;Xi&7RHcu}$ZSjd+h0{0lqm0i*VSk;$etT5!44fyS4u4f-3Y04Hj0Tio? +zj;40hSLp!SH)UrR1uM=%AD;okeu(05Y2)yxIrp+nRMdPy?hv}lshQ-nXld}<>SP_@ +z<7>xh8fM3%kW*&6n;SFJZVToMi-rI-n;oB@J_hjMNc_NZGb0ac=cK>$~QE`S^UN#juyoOX{g- +zhaZd_)`r{0#ZsVw&K-J2$Tb_@E7jhrHpH8T&5|K>2uW`C)roDC?YI;(FIC +zD;eCD6WyYICcT)_5;UMPrY@-6r8(hupUmh0X%TX~DmZ_a9g_*;zLkOD=LQ}n_ +zjXBQ+fLcP!g35hDw`i#3UQ~CFIfLb1L&G*MptRWG?4 +zeapI>TtQOfTj(GL#jcAGYghV!NINl>D4q8W8L}t&vu8L7PfvfcJ%cw=c=8%&5hkc| +z!>&O>(+9=mxPFkJ%r%u^J_24i*NT^U1+4ni$XgC8KTKk!hXg6jr(#a8$H_T}C~`>LAh#|sh;kJWwOF^y#DZ@)UC*uoASLXI4WSgap$iSD@bUq?tR;=EpwZVpsM|GO_jk|XMk0O$Z_~AN;vIHsj@g33+j76SjW9*y;`qNS+{fwSg8RvP`UvHJmb*mR@;&(SD68{uT#?ETfWr +zvW(E^YKA`W(G)&NZb2!Us^YCrVM+0fE?VoFxB=pgcbRP!fay_Di(DeyWQNt+ql+stQJ=&Q-wtt?Rb5IeGosg}Vg=hAk^6fX_@ +z#-JE~_wR*}(Gs)SbhZqNdUjqn*;V!onHUZjec7 +z6^o4OIM={bRlR+v{3x(_xZYWGAI4|V!}~OP8EkE>Kb2Cd68bn8gaD+&wWpA2R&{lS +z$V(Pb|4@D?@*b1HUrt^lM?mX$V+eInjLmeK?l2Xr-3E=TXOox8OA3jF1mc5ylTxAS +z%^d13U3sr0N6#ED-0F0f))u8X2huOd7p?1F?`Bd8pO#kJOOM*i!s<$pbwk4N>P%Bb +zk#Lfgdr0}_LvrRh0@xj94⩔FlqIb0jL5;Zwmwzu%Un1KOPT91Hy<8OvvBuiX0HL +zYe;kzo9eOEARrIP9xrzMbSfy04dRz`n`BVAhYARe25MK1G~ChlOY};gT*Y!F@v4&B +zKU*DD0BR;j&Ia^%z(p4tlV^pz4rfJ2Cd!~44ZVTdWh%Qn;9hmCUXw!U@@3Sg<+GFU +zDEu;JytPD7%9a_&n<4`zO@#~WK~4$gbJzHOwd{gkfhJGT6qwLwO^M;F-XLXPMrpX9<%WOiYRdRcHueL3`Mdg;f{Ylz4YM4)z5dd!5XbXJks*aoPQyZ?4>cOUpsEyY%F +zXell&D=TW$qSBT#Z1tm9W5!i6S;FFynhJFY9kj;pyoH}oo1&LlZJ<*lSKXOzn=`Qz +zMB`2@uco(X8-2|14AAAr&Svs>M_VHp@0j2B7W{wkB5%Nld^L%I|CGak^@Y(zKzC6# +zP?;S}7*Z7ZycNc3v#591x`n7M+OAE+QRFW1Q^k5-H{_?S--Q~T`didn$BbygC|L{+ +zbN4fW%Ox#lB+@!vG((Z>lXDHzZ9`&|Cf1BjR +ziXZheGLUC=TQ9h+sX*_v4hNy}q50wJlF0{}u4Zr|IxAX1VL-f~LtSmKFhE{F4cbq; +z_-2&D{GOco4n&--pem=FdZ)Hjrxrx<)O>;JkEeyqcQ?eT%{UZ!G3s`eM^)$4-RE%A +zYP;Ah9DM-+cX2d*x_EzTBtT6y>_BcZNv3}?5b$}OvFg#zfe_~4ELDfh&gUZB$sAvE +z5$2}mZid2#)=}*|geX~G5A35%9}k=>(2wPmijhqC)m_#%-%}gS1u!y3VDgHVOSVt* +zMs2{fgxX7TS-yx+{gR0S~~=QN$G7>3>K?g>+oASP +zXC;e};lg#epHN*LxhGTGXt=Q0S1(o+slFW5GJhre%+0%%$LA@hdXgz?>LR179tx5N +zHJBH|H;P$e0*vlB3NIYpNT5Xr?TbiE>ZiB(0t_@veJPix)<0*P0+Za; +z(hUQBWKn@E!M~zh#DVy2myCkJy6ekS-}y?Q0zsj4yi7uK^cownlf+s+n`YP}@q6N} +zB3-#d1P5~mc(d#P7GCN)Xl#=NdvOPD!ZJmD9%-q5t`@*>f!IbmQF8mk9K_0U&x4tI +zhDdEG%!A0YQy&LsWFln3V$S2+lR!RwqP&94gT%k}gqGFE60^LM?V39?nX$6kYwW`* +zYNtMD1av3i+O%0)_#l62V+%zez#r@g2C}E1Wkz8Yu{7kws;AooSc)8v!(xVrXNZ2% +zW$yg+@Y7Wi2r0?zNK)$WB~Bg6f}Oi}i;w)>+gsUUh89W?lwC7k{QJIMZ9zXW9)@_-0sY|MBd65&;LHBr&Q@T4GSb^M+lEosNVI +zqkR4@-WPpPzIm$6+tT16lfrq^r0Sm7$EUD5xii1PZ<0d)2A>e+`2{#fcX&xBiCRHWV$zrY+rX8r?5;t2pW|HTh5E3PMx@MG$(bbGQg~Kpz0*3#xiM-ldbz@1#eY@pbR@ZH%bDF=Vj6 +ztmjk(kA#6xfw*ik&Jdd0r>>l9wAYa$$MR1Wjv$fut@=j{)t#^Qh*OdI*^whk4*YZ?OE^;g{`mBb=&xN5~a!el#=jSn^8K0q^9v7)x!8=y?uYgCmr}>^`Y+=5F +zCMjg1)Cf}`B80L4D`}ZcgxI>Z$dV8HujN4(kE}_{HZYVvYF6;&gVB5hA%Z<3Cq-3rLq1dq3-@r36x{TQBK>X=bS5GIgd{Q2=PC_R^ +zD47jX0~OU)9)MQ8{kek=)1mEDE#8tm_b6B;y)^J$x+Py+X|4Ct0+&JVAeQRBwu|9} +z?X#xsi?2f=Bzp3)-4@Y^Ja;{Z`^0e>RH-!1&Y+GhGD&Wesk +zXMlIL^QCC2W!%MnFrOBd1c^r2{~$vLqO|gf7#A!Q(;N_DM#JXh!5Pg?a7N`_6>&|t +z)1am0J@Kf@In?~1;SIWi82Mqj=ILJJNvA7?6xGV&d=k>UV}m-m-nTcnJcQ2XbmY^_ +z!>0}{%?JcfMr?}l`XmjEk}-f~hTiGjJ=df-iuYd=QuZFwtlvBk+F}kCC8-G$i#nHe +zTIz39(evx8ifxoVck=I8NscqFbgp?{F>4pkaTJ>Za5UY(0K2LV2>fXjd8ohPPf;F!Q2;jv3p_? +z8{^rc8~?2ZRP7|c^`}TdUmUrP|B`7?%Bl~NqYb`4asrc#uHe6{_U8eMjfv>N)IlnY +zX49XgrTFTlBuiFBo0WRXBN&s&du=FQ)VEO_hM|)GT{L;J5E9ypgxa0){=19U-(5k= +zH7Qa0{)soQoVY%==vkTv{>f?G^N2L1Bru>}g?|H3wi&Jwb!_cQ108 +z>+fD%lWLrP%W6nDQmopgp-gzkH04H;J;R*E|0X7_zqXbET;eAxB%_hM? +z7Q0*J#VMwa*I3|oW&xX$MGcyAi>$_vJLd)XGFN^!QwHNUKQ5c2r*LcYAuS)|Twx9( +zGUAs7DK((FIsjDEvBW{{_J29MznMl|fk~#(Q?X?~K&m_ehn?nl4DsMrtnn|S%vR-_ +zs+HEiNkdFk5iQRAJK0$~|LZ_zQuNBV +zPC52iUv8audJK}^my44d1tjS3x!>$WA5)D(9z*_NDA0L%&RTSfzBIcDra~J}iMqzZ +zXHf`5UQ7>*R(RDQxY^C6^*)-P8}3zOn+rxOtI3?*iALwhAYCbJ#RJ`iy1hs4yI=d@ +zQ4Po%QsqO@K?|--VK`tKi`K^N9a&lpL&}z&5&Ey2s-9<%`rC6M +z)-WPzQ3=S3nv3`y*?;&`9}2&`pt>H_KgDH3Jgt*v1TvD{+J>X)uj{AWF=PwUhk;tQIgsdQfS-P{6m +zV1r|CR3kj(z&&>B{=DhMfHrqB_?e0@6Rovf*4|s&Tldh#P6E_BSduk1ZIuamnozNYMw<5jj(_Twe_h1m}t +zk(&8Z_rQmnkD$fM)V1t)Cs2NQ69*#6^RRytcs}0NuorT7(e- +zMC6r!S1}n2CA`?YWnu~GdpKcDc^pI4o+ci^8cBER~;X6yLuqa>##kSMzTBN%_}~2Mmaf{yAui{U~Ts;&={-@urSC +zfG>3&7Iyif6QI;4jCzt<7ZE)C&n>i9#)MX);}8~@Cz%5wq}djc>=qeqf)BJFc3WGk +z<&coEH-VL`*|Hm7hx@7gtGp1>Edy2bpoBzruf5zU|2AJdzwPC>|Nb5fBxPxB`3fZQ +zpa+UO`-@F>CMo|eVZRT!wbK<;X7}y!<^sIhkJ{U--A?~u1@;aL2yDmY`A)dlX!Aq7 +z)h>(P%Hbh4W`K=e6q{J20-G#fpT_rTZIc!V&KLO8;}qq);DL?i5?F^y+4NK6v2KIT +zDR#Z1&#yIZ*7~duSCV@5(u?J|GPnZAZ#CtxfxFCIz<#qhU03BuqeIH$oi?eiOs+=; +zD!k9FJ7(5Jf1lNgg%4NY(kxX6m4`|ZX)dJ}9^M9H%q(IAH<@WHOmQU9D*Sx +z`FB+dex3BG`l&jzsG&9?BFLH`MN_u?0a?D@ +z>Z;f0wU%9VlomVUlb75y@93ukqeez +z>V$|FbuTu-$UOmt!o%#j +z)pSK8X*L{A30AetDP`{2>~q>!Icg^Z3!-V-tmW3s5yAmkxwqE*qFT{w1gqQ7JAJV! +zc-g3}9Nrmp{pE9{Wb_<~IvjsOZH{s??3Ks8Jgz0g<*@Y1EkU;gQMQp1eST4!^rdls +z2(q0!H_=Dv9^P}71CHH7HCv(Yj3s@LXwOznbg}^Lh=`seeJE8Pq9m%d9Q6V +z@7CT$8?gMw4?E+B_vkv+yCwE>iH6#da>aq- +z7m-}4G$M+S_;e}1h@?ynvWRc$;1{_%=yARsInK8SUF7Y^B5#*3!ly75kSJeS!hW7@ +zZVte3kJnrlKH&jYWm8%mNUN3~!G9kFRve;$byU`5hD5P)ocx2sK(Luy#=J0yJ +zt}1Ox%TaqWvL=}%n9X(B@pZ8Cu#6Owp +z=iA7td=mca_ITCop-o#QGY?$294&UtGNlK1Oz%fJ%&=*<@8ROUWY*;yA1k0NxDB`T +zm|0q`p?tw{EEsdA?5^WYIbwY&$wTgiYlRNzieu^Y6wRvOt*Pslb|-PG)`N-}D%DIq +zA^CZGeL}Vo32Jks%8z|D19{novF%=V+tu6cSVnzMIgbtu;5#}B&SX7DDFWLkgD|U+ +zPv+^@qU3MLzuka@+$%@DJlX>yS8!41Bviih8@Uba+f*fk_nqxON|hrAf+Ovtc5|u| +z1_0A&y!^&L$pFC(Vw#QK4M7?PxHAGAwVGwC=t#SdL17&g+cxWsd$EQy?wBOjG1XAL +ztzLP>Sse-w%y-*OEis3ESdO)EF=C3&y +zLcpN%T^-A<8kaNsWW{PW@P659fZ2K-ln?WH&?Mk93TrnJgLNotxSdf~!!hBlplrmp +zvqvk&o8uqA0DF393QAqPzRR0N!pA?=&u71v6iePwC2% +z^7wsDAp$86>dwn7>MnUymUH!^={r6ILQZ?*_tkX9A56O9cU61h$45RM`4PaFl|SEe +zXV~-cj}~S>{?U8ojO`pm6P$$V!)!ycvPHWll#?kk;H`djF +zm+o1%9KVxASZ8*QnI=p+{-=rBr%5&-1W}01L +z2mFlfSucPtHWB}8$lpK1zrw%Mr>(!?_=6QG5B#2k?do)AV*`1@5+z()>Y3t)9@@KJ +z*g{^!*$ba->3`e&|bJDmasT +zX?LPs^fJaE9M+|n-;~q%va=rYZqERIagORtGLj*5y<-zuIqC=P!}Zc=`~qwZ1Kgb|hi +zlV$cDDeQZHjTv<9&3=p?o`=gI59Jmje{5LKD{VkKrz@KkN*b)U*WSQcn8V3S=fp}@ +zgpkqq@iXG?HokciKRYA;;)9Ppa@PI&hyBj&4vGaE^BC&VF^{`}{8G4+dX4uGXxnN` +z-k!hto)Cb4;)%!owGl7Feo1^I`GekoQb6^LL9U1LH#MQWN8Km>W%N`WDev_;Mh=gD +zOY|FynvIGDM;o!5d}r9r9i<$~Z)x@A{5iiiGUvYZOLH+`sFl+@!ThB!afu{L3PSdU +z4N|n`TATeA2F!%b;qsgPy3mDbY>Z`8*;bRv_A~U0^K)8$PfF7{s-&!}=xUkr6avW4 +z+p2I17Z#~#VH+j6y0$zo`@U<_hgqyh^&|W}q!A*~<$`TdNZS`RCB4SePQUS_1p-7R +zWC#9&DEm7nAy;NGLbbRhwza-oVv6|Zeel1G@Osj>iktqP`))~k4!M9&6`GjG +zUKpzYO5f_@g__j1JPF*xw$uvL&Bse?2-3DOy^=qFgnt)h$RxgXH^VSgL&&m-GxO*x +zD4m_|wzpZI3dUf>#pL{5Wev~)5>|03wVl16)!EPP+xx}ZY$1I>bM5jwW%7i8HCnKiJ2B0h?-NhRtv4a-*{L(a +zjZ)z0bGM~ps!*%J?9*k&j78}Tm^^$lj&Fnu>BGo#Om$>%qb%w9?Ork4k&p2WlF(w{ +zUmt2$#~vKE^84}4$M*9LH0>!#(L9NZ>;`R7Ez(w?(nUGQVaa)?0j_TUyeQcxbI@)0 +zAdm7oW?KF`yTDPsF#Otss5In>u}@ihW6mDA@;AAA1mt*AS9`!N~Y|;6Pg7U=(%8i*pT|h98 +z2`!Q*0iUzfqwe@M{QIGUw1RaT3)C5JDg8!wjf{@4<=qkA}jx(_VJu;d^n&CR{}U6+ZCm5lm52 +zib*D+Q*W6DXeHU|yurC)eJNg#oMK$C+up#Cxfq&40X{eZ4XYEW +zxxhy$3HG>nFQ92ys6_ci(20H+A-Vn*)E^_95uo02Hn=RQmV?MsGP;nCLVVJ0Rt=Q8 +zsbU_hUSjRbaz{?Ym1*4(fLH7Bob>iwn!g&69!k-9i}Eu=(yfN4ci~uMu3V2NR30! +zgQ-&|u-OC8tgJe?j^C8gcPXu$@+OVU8w0=cg4O2$d4)HgGtJ6(XOr>gbZvMClaPoc +z6#78vB=S*;Mg&s1!^Wfxz?EP{8fn!Nbap_ib7*}n1}x06{#H41qecGdLtT|j9C}y7 +z={5|LQd!ON^fNjT%umuE +zZadGKPJIrE-$J8h=`P)9BQI!~GraTNl_d>+Y?coBX&Gj#4wnl_=(GiNs4KvPayuS$ +zJIZ7()dz~pUq^F`m=L6Tq8nIely>yvI9dh*Xu*YD431zs@x0o;!kxulXC0Gj`0R?? +zUIQ=F>@-_Lre28ZE&U0Pa!Zt`BU)Z>)8jZ1d++B(eiv3Ko-%vy^U%eQ@J*W!IsA^J +zeg0xgQ{hbW{Nge1ndPX&We>`isXyW3{+&{VRO6&bmb8$2gz~Ogma$*;1Iw?lkoDy- +z(IwwIfybtoGf(Z_h5k($3DCt5Y&MEO)k=2_fh|0EA>H^*z7xfmg~W40y1S{(QnpAP +z4G(fH`en8EvkG$I>+T}H4xq_Kh5R@yOr}F_K8%BV((D)lrh<=ParOfgK!V2E6r=?I +zL4sBIXc#^*fDne>QfqTF_2%NIwkQijc7;XJuO|xls@jN0Kj_C^wY`6cwi3yTC`zXq@^qjPw4 +z1A>bD;A(Vld-I;u_(*>$rk|n4_$!M)l;EoYsNVpn7}ULnp10v+DFOEFQed-$5bRm! +zT_?XB0DQ~?oFUT^hxzk$tTxV{ +z6y&hO)i>P6jI3rPZvui(b1uJn5L^TlSq;4a6BIQLfYN5W0ZU%F95%zJ(OjK1k&2| +zWJB^+@Mr#j9?##<=CJ}5n4nBelWxdK_vnKbn*>kZLcjGttkH&yYI2U0C=5h7DRQ<6DS}aDTJ3+2 +zs{PYQSL$}q-ldy(hsVu3B!FaDnoMZ3(0r=n!Rdat%YF%AieM3#BSPM^C6yeD3ys@_ +z;QrX|C!jiKN?z!`Az9IZqmAzEvVjD1D18+@OgbCd%@`_E3t8sqjv9Z5R{`kfI59b( +zGkrmJBu}0HN2A=TjQr_$M!s-6p+9bWsV}J{-}wS}sDlWL=wQ9ZV7q*RTza3cHR1R9 +zWOlw}BMx;9P=af0piO(8Sz7wvH0i*KUX`ahZCroClti){n+?mKZXzF-8nI5bpjX-| +zv5G$Zx$OyBWXql*-?=4;^_KNwAPMRMRvDewIm%FNP!xdYtyxo>Xvf<|jR5yF7cg}U7-=NslbGP*JOpqO^H*Z!_nE1?NbkIZrVM09_9r<&cM&>AG7k$TZ +z5*+g%543|9`Go|0V{i&;vLc>ou*I?_9vAU225Pd3!iM|8i?h^^<3MHm8I$h4%8z_R@R# +z{St}^I4|xZFH(oOoz64d&Wt~y^ZV`4v-$CkAR&H5{^2x|2PnNEPL5|86X}<#PSKX4 +z=*ZsAaBpXb+Zow%g7sGZcsu!g9weSm8Hr|*5WgM&fKHTvUwS`>Ks?zHL#VLrv&$xg +z|8Csu^vJBk;tTWBH{vSIUj1aClccSE4EVRL&qB_({`r%Z{Nb*QP6X)QV*g%OfgKs3&xN!KLuk8HA +zJFI)=chYChUUt1B|M9>_wj$x@b?MhE0<16XS#SM!zd{rYfA5agBgY=*;+HdJ&{Rp( +zKS;OBKji(s_^m1@lx2ZG2tW5^5GgHoFZHw(KTBq#@j%1Pk2i@fBAaL+fp^=I43GG` +z{Bg9Xm@w0W!r*OOowr7-26camPv!k8VNT!cro>sFK +zD}ToD4@=v9%9=XH>9I6(ckp{c?s*@zZgNwegB~PX>TLb@k`_jLx!n{qw*-IcKl~FK&;`8aFu0qpKkfaW3_w^8{Q?_$4n|GD*&JY@$gS +zJI@g&Js@;l6LO21>9qnbsaNIkrRPd{@(x)z!yrtYtp0fT?Esc1e4SEhLCuqxcR=zW +zfgXc@@hJLv5~s~Q;216+(+ElQ`{r=PC=;Wi>VfC)l!P_5)?1}ZzR~R`9N1r&$deBY +zka*&!<3m$BM2Uz`zIZC1uEgJ2lacn1WigD(gy+I|F;Ip-1G)(@8v;{iH`_L^O57Ds +zTKpKC_wgIus(qF)G_n&XIG;PgW+#NZr*RQ7lM?9P%{3ojA17i>AGiM3(~oM$PE&TQ +z_K>tFV1Ep+1SK@ly9g}!S}3n;Y9=euQbx=qlMFZxgk$IRnYnp`^}-iQv+;UWue**&^!;-1;3(YKrT@tEEB +z*S3=e(-k<2vSD@FYo&p72hK|$YDJ)pd&ghvr-dD?F{CfDb{I$ep$zy_XmU<=ek9m= +zfrpktEXd<>ub#BlwoSX9qHy{XKpVEZAdJZvGk#~ovr3=LTGAF=supN_A9^C4Uk5FO +z_`AOc{OsC5T(eV~@=E?o(;Y9H!hiK+s#>NA89l6K3n}s?5;LxB(}cQVyDx8^-e$k0 +zZA_qUx44$T-SSbJL;5 +zsn$D&o8Qmj#tK97P3o0-`ja3n?R) +zTq5mnK>ebN^4HCW?zyObQJJcE5M-Rm_j7Dw&yr^Q#o5C_!}v8d3VN^m-Y5+RO^Atq +zbqt(~?}ko7-@b3pQn%GZLPGpI|3qFh%kzl(Ng)~Suxz;!e_k|z^abVxC4WklU6s|0 +zn8Z*0^;!3uPpmk-Or>YC*AfR#pvh6&hS3C@gg27Rnc&*7oC!Y(waD8JiXLZEPoRf7 +zRPWi)kbN9yW7vu3q!#G2jCOA_d@h}ni(B#V^?d4kkOM@YdVFiDKTH;&Yy2y?Acqk4 +z=%ye^UQ8TZQlt~XZm}1)DS+eO*bO>)Z{&vi>O}M!on?}guEplk8J!No%~R5Ev4=R!R%17)wjw1nn-D;U@IRJd$8$n!~% +z^JuivwJstXA&3-xgJANrBv>&_ra>D7r{~iE4~SH@b&FdYd8F1wW=5~Kfu=zax|jqh +zhR`BdgCO#9h{z(aJBCaOKW&c?OaCmK%RQbqLim7c1c&N`*|<%X)b_|DvpFNZry +z5pfwCSx@dzw+Ei>hN>o2p6D`+$H90ygwZslqn2g@Adc9|Am4n>kmnw{gMG3D_6+MO +z1D>T&@r&IVw3|oefX?vn9Ks8)rVMZvR>c9Q5t)A_DoVZ-HB^<$JbhRJnWpEn8GNH} +z4fWo}z)$JVN&qjoe+qi7`ez6%b#XeDi@q9qwKVj_L#lQyzCrxlYR|lvx8UpH=hR}R +z%EvpmHt|(>Oizt`TRyQk@)VyU676sO2)H{TT2zC}I)u(iV^g3?`irq?(-6pX+7j4)a%%(jeG +zSA?29_Tsd;0e?o7jwTj{(BpzM&Ct3=e2n*M5aazp$vN4CHoU6_4vu61_$^$Mv#S#7 +zO`+h6BnmXVVD&n0V(`H-fnI9njCH4nRg05>6E-|0ZCVZS6h5!Cub&}`q|?CTfw$k0 +ztsR5A6yg>oA=FDLO{8~oAI+{X32S?m)vBgjK^c>qOdclNM8kV$UkSGl`e>wX>sE3H +zzILs_^fzUz;K(z`f85Qu;~xw6r|*wvmmmasSC<`?gVm?8Bm)|Z$bogaMfWtPTboO5 +zv3?JVsdh_}$q^suZy7_aiDWlFefWju2eMoI(}%FvJz-~LeSJBK-)%33+DoAq!Hq9) +zP`s>~LzYci8=YF(UVH5F+~Z%rk{J}CVIL)U@6^zkp|+I5Cmb#g$p$tY11i +ztsVo?EeT?hrD)(!BS!H)wtQnMUFd&Mt4!HX7Bo5ly)CKh1{2~OxM!xewqTPvxd3Qc +zw1UwFOdJvG5?<4mDNu`_VG@Kvf}mrM`&xL`adl+rq{Qqk9GL2Av-G9)R<8s*2S;*c +zvkvY(rf4=z10Utcb%${4Ab3q_K7zV5Ol-Zz$SH9m6>n~}(dmqPFOKL5S6s%jvMfsX +z&$N3>-L)-S!4Y5Kza#I%cdyX!8cU*MM8&IA1%;pEOQds8J<9~%{>01jmQ-5#&+7Ub +z>!(8G1&As-`m(a*%-@i(_3=^{5 +zWGsKyM+|nWyVjxS7itg6OIpe^D0cNd3&#vII}rL40a8KF6OwjAO^vR+|A#Ej0XBN` +zb0miJP=HhVAm)LcsH;=T!_uTTp5UhpFf6yi +z{^fR!H8w>iY=Pks6RJbga-;^SI(6J24zH_$_&e=L#U<%Zr7pRQ#%uo$t1*Sjmo0o_ +z8bdzR|GCwI#)}xs()!xgVh6JjdE)(|$bG!F{II<(IvfRR2bZLPa;vP$@vH!ST>w%| +zq!O6-ohXdgSrd;GSWNb!DA5X)vUvHaXbrXt`~`9H0%ra#c>i1 +zox-TLoZ(`#pbHoHy90qrw32r*2FO>cic#$4s_L^LuT$GQ`A5RfhpC*!2bDkGcQVIY +zMk~bb1{%juSwY0|DXL)cjG>{ZN_t+hIg>~Jqk)c0Q?2dy0$(j6R7UJnJYsw{xRvG+lIm_ROFnPSu^mMJXw6;95CS5IAtFzvQM` +z-B{b+P?=jm9o4n`Vv5YCx#bSJ<$$lJsr9Zz*1IcDEjgyk0sNZVAwPzzHXi1IhtG3> +zdpyjqeV&5*k~kZ}Iyo=K!)ZMXo3ajm+d+-4y(?$~gANihPp7xu5k0(s=}XY==pLZ5 +zWUuWbU}gyy#~Ub&FLOH_Sy*bxc(=w!(u31YCyS!x5@Z-fBvY`KvFfa#!;a2m-98EC +zmh36+2fxq#*29Oek3?r^+#<8}c17VlCuN_mHAGYk$&RQv~dLkrc +zz^Q7}$HJod_a}j|HU9D1=5psruTetZhjQyZfE2y#PCWYH^5ybx2LuIZBHu2dsk+{_ +zqqCdKYme8KF-GtfIv`MD!|6t+Ua!>eR`tE#5}H;UTytb8^g>0KGJtMjiZI*H!KQul +zH&jP8xtrN4p#{&MlK~a&cv2TvOSz5S72g_FlZ%M!Slyc4AK2e##UQ{K=kSYXEEQ6G +z)viQ6(? +z5M-jNZHCC)(>&%Mg(nI)HRV~y%N;Nw8M +zg?mXFT-Ddd|NWezsM0BHq5eSHqac+RrhK}Wjrtwp{3!#!P(6o1|4%ad@z9J +zh*VD~Usr3uEaaBiuiukl!=%ReI+WE~Z6!G=ZVn@pP+8<~DrkdvXr}XIQ^TH|%h;Ga +zb>);~f{xE_w>R7`wYmKvcvv;-yfN}EF??Z=d*E(LkQBZ1uQdoU1T~LiKMRaO!y)v4&~n0DrRxIJ%aK+q>Il +z5Q%2i|Ign0#m0GMd1ACBQ4~ed5+%#BM(r-kQi)cJq%5o5Znm0jN)#=*Nl8sg@}Kbx +zrbrgavPl-Filsl^-o;=r7%T>xV3N#JuvjeSA;?1zECzX4bCTp0EK?N(S;_ISFvh&?)#rI7?J5ICAZ%qfjpGs1CPL!7w~#`4$9?br?pzI +zJX(VLq!>!lrK&wtMYEF(Yr#R;1m{I(re^Hif;>y=QCqp`Mjtl!fH@{{luda-ROF|a +zkcYsFNR=!O@d8$V9LJ$A%QdXjR`BMrW^h{A`{Q1w6_{ywf0cCfiwivz*DjUinopLo +z>BfEUUHRT!I0mU61RYd8aH?_YD%bs{KFn@vniSkd?|&@@!Kq3W2y+2 +zVkIo~YO0{onPPEy0Fe~ka(`g2`nTQa+I3469mN?yrV@>0#z%-5Pl%yC+}ZgO4-ZMr +zt;HA^{f@ayNa+|1`6D9~>KbWksz|?pVO)|10(}Ft5_!9+g-}wZnXpJalfXkX6Ifs!kw%uML3}_W;BVp +zH2^-^!t-qM(_R&?;&YKNycm4Xei>|V0smDUD9#0mPwchjxrNFX&FAescJ!4eg?v51 +z&_~JV;z;Fn*%WlW}irLu|K +z9sY(1029yIHr*=KM@K(KCeCBWF|#&4K1XWw9&D1to0UoYwdGrq&wm+6w%Vy|4R$ +z7~-+GQO2X{Y6Emf1;#nOaIb(08-{a;_@fgrGzfR({bArB%%yNbFE96UKy(^wo(UmU +zCmq!yRrbrEJ-y646r{;D_E4?U&q<98+>rmz4B-Esg$~}habsp?hP3#aqyG8MjxcBV +zr}3NS)}XAJxQig*gwh0 +zHVpyLKmo1GB+=*y8I8zSa5n2{6 +zN)e1B(b%j077WVBt7Vtq6x>9pdIsau +z0x&-92MnDg3kIer1*5B69s7Cx`Enh7=8=XUi&VafnH8zDo0t~mQ^MpXYOXGApCr51 +zpVrAltbSSNdj`6O99_YhJqgnyfIrL0QL=3^HZnAtfHeMt&c)yMyP>zdBwef1(Ly7U +z7rfUEb`zmRdwZCZo)+X<)4^02D%Z}QSABth({8ek>GkAs8Kf^aw|m};DO!s*P|Zly +z*vUZoLU56?=qcxfm!N3K)!M_mBV}}>PmTnc?Pli@hYeH3*1{J_XN+QDr^0Hx^;Og? +z5DDcAYC8KxV44~k)92J#NDWl82Gt`PSLw-7SKOV4DgkN9dbrugUxan6(n}11d?m`TU&Ctw@e(l=-UsB +zCH^~aU}qr%Vfk}IJOZ}LUVVd)woZY`R`94FGt=SpTy3`SzCsD0^9fRTOe6`lG}P)? +zLJ`oSi56!#5-drY;p2QC8B-Cf-6qrTP`B{Y`MvQ)T1mHAt1R7LM0z#$$p`mJcI4jo +zBo}gxAXSGa30Mb`MXu1yT(X<=G+{qIP2~5%$1MFB>9KU#hV@Xb38?*0ZSJcP!JGgv +z?Bd)7f>Q|wm=LLnxnOZT=+o9OqWO2%iMRmupFJ;goE||z%t>yT=?a1jLFwMB*(9?nDFM^`^#luoC0mR +zxTW406vX>EhR{tz>N`!=@bbXV{5N0vnfaA5=m8<8p9=)rZ)jF(Ug|A#PCMqNorGRhGAk*Cv#Pu*oAEeig!Jh$--ygdg$d~Jn;g2eN$=8@6jbF7lE)pM +zPdIpMvmv!5x$ljN8*mHh6J-8@0^u`hu1XbaZU|Li`f%BCQ?5V+(w6!^O=NRiQ&^*B +zn1@84p<7sMuh!Ty$BjU$HnElne81MATg`?RljQ&;ZN@wRU)^fj41k#vud)g@0Ufnduo=KU<%2U%b +z9N`RN2%8g(ARn3PON-abZ}#w9eZAJ%(nQ^?lGaawX6{T*i_avdg8G#Q=R{95VZA0a +znkn@W(o;ERsJ4FI<2o;NyY)H}DOV*aDF@wf0^Mqai-U8GwtWGHV0lY%mtW;DzPr0s +z6NNlC`RRnl=n7(KscMZuL=Dch@VJLfpMMUcWC{PjFXnl9=}lb55Xxc-5?_G631M*> +ztK!`v6$Ryzs(q+0%4&i!qYTX-sS|^o?G|FW7aiydui$Zk}JrOatEI!l;qe{ +zCMNK<3p)mh^xrHp$-)Wl;i$#D5xS +zxHOOjv@p}23ug}n3Z$~*bH+s5Y +z;vau&d#2~YC3-tUG^O~w7VI;-Hw?d{H% +z?;4TA8V5eZ&8GWZv@w4=M|@Scc^UgFJR>OtZvw-fSr()!AR95W!0A!H +z%SWH75?qNoUamE9eRrDD54&wEwEdlX?>kj>d=XxWMX*lw5;*I?`3$rInoL!zs2K)e +zzGxHPBPtDBf-7=7J{Lz(!}T$<$HqeH+!Y&(vx~PQd`Pz^yxvhu@;)U+WUqnLp!F6K +zgsxOJkOqMeaL2X{f7ur$5LWIdUpP$I>3UYLGF1jui-KvdzjM-w_zUXsyKbNEA?i>Y +zTo<_o5h&Hb?CF!Za!qmckG_TN5O`|E%=F{7RBu*0STDG0L%~Tz@kAF75uj;Aa_Rjs +zzE`|G_F&oRY_FhCGy*s&ho5cqU&aoZ3!_124KeV_m30Pq9rcW;wFVh@9vXK8$Qyxo +zv2{H^o;Kp|ek*vyyRkd*iHZDCDMkKTf?Pn6A9FY`gIcXs!iL +zL(*`W6XDfrlt2?pB=w;sMy;{~UmbLPA?Lakl>nR(u$;OxrNDaAt_35M)yBrpfR5*Jzdzr|1q@cEU7P*}9b +zHgo1;I#QV{)!!J#BX{xSR%^XhFm!a_Ujr?PmpgK$58Xw1FkIcXNBx|PvV(@f9Y2gY +zG`wfeG6dQc3Fo(YkonK%7Eg;$MWgddf0EzhM;<{uzB0#59dr0WM4zL}v|wK*rJ!JB +z^u{4yTR>OJUisre+|me;MH`Sod~0sthkkbl7UzCw?&}J^7Su#a8z!Vi0Vb2?#}ckx +z5kEjN)t>?wnw3vBpz3O1%|{j?QESv8P0&t(D>;`F`4DeIxH=;k+yPbYby@|ktx+ug +zHAJJ@ec=WjT&xxN-RKDZ8m1^S`~sM0)b*^f-Lc7v#jfggNc?Ud<%bsQtquFSah<=y +zezNPp>tD3aAei*jz^tGBz`dzi6KeUEu&y +zE&LXSbd~HaqwLwpqcA7)y`g0eRpL>o{BQI}T?)eamFFY1hv1 +zgI04dREp&AcQ!dESCOvRTcYXWmp-~QyNGuUm`G$VKPV3BFyH`ObS8co(WBzQgih9S +z#QEjqY|dktm*TI`>!&SnirLwSp8&Rq2Y--5oAxz$BXP|aI4}JiN4(R~+!qxzr*~6T +zQY?1!i@MfU)Cim^CQT{)vfua1(y-<0jI}NL$Db$7^-N%%i4Gfdw6s&U94Kb~u*;Vw +zCn8{spO|?AnTDU<#ZS;#@zZtu1U`nJeu$qQ$xopyWg>vx*jaB*R~DvWrr(-Is?Fl` +z#dj-rr!QWw+?&4m!^)#+?Yf<#%MZ#A28#xlNr-j)1wKz)2_A>P=77PIS9Ih_paB&t +zzOz@>!Z`~~#M!GnNUD`enBg`GJ<#a1FU0X=0Bx^yJbehzT&WZV)lXp@QxxeQ(L@^j +z%WEZ9J4kgx0PX3gWLhnnurRl4=vxBov{6V)ZGaXJue7kdr$_KYumd8 +zfu&QJo|Qnntn}1~j_OAq(UC=L<{aRoJko|2Z99$ZEZ +zw>hFJ$)t)R6~erQnHHLnbPP>2`6R75T7@Lnv)8a2=e*S*L@a244eom4xq?3BB6}Ee&#X$L3C?Ms+D_{f?$sW)q=~ +zEu(OZArlYAP6Q>k{{YiGUHOb2lU6KHN699*kv9H +zBljYxJv;{=La>&67yF353yyDo_aM~i2;fIHz-JPrTM57{GJX__jB{LW3?diI9hAft +zQeqW)&;}pvbdsmCa^p^eoYPL8v?F=Qy`^bx&Gx}P4l6${^T9o~eQ=Na@WDNfeQ=M< +zd~m}dDaM0$=rM~%&7HBtg!e#kO80fvF>Tz+$4Rbmm&CF^1J2{OMR{tJ>-|N}RZ37d +zr1PI-qausc&KdQ|@9-_|L2F0jhJCbQsEMekSKV9hjC1OdIWxLT`++V&OXa!u@$AyQ +zyZ1hv4w=P?R}IQkV`sHV(aBn(mPB39S`|J$xDOCzz%Od;I${tLs=-4CvN_ZL{&x^- +zao9)wMZA9$W@(JZ)(oF@;0e)FLk`8?IjcZaNl%`?zJILlwHoM3NXI==?JKno3L_B1 +zUzOt#Jex%S|71`+ha+cZmB!Ll*0P_Uv`+%iB(qTJ9#rkD@j{PsKo2)ff5cbVxHF;Y +zGbYNu#((KuCy|kWH7$z&QofiDooJF055ZY9BvBo$!mZeMN@CIV=anX2s8kZyoWY$yehr7Q%qku$H&a*7W9T6D5YSP<(n%O;1u_2I?l@Y44_j3DXnMG{QW@+#FJ)=(By^!n7#kz7g +z&%L^^uI!u1<@+S%lG&zXrOp;}0*R+c6-{$?l(Na5o$^Zb9muk+_!RxY4c7I&v`#~dK8^dZ&fUE(?CfT#0! +z!)QAC7R +zN*qfzyN&;nbm;LTyHFOn-*?6dC3S|PcgB}I!hE#7)>-2d<7gLRy*W-U+5Oe=oR<10 +z8GLfLJrJdG-{H@>RYO{ +zI6cc50$G-mc8>nkqmWz6(=S;>!WEFg)@-ecPS27B_D?q%!XF!(Wv3_=pUMe!g9Kfb +z;r(pisg^IY{SS(_PvvoiwqgGm_!k)r6j8i8aCW2F5{h^7m3vbqOz&mi2P`C%Co|qg +zT7M4nivO%42cF~a*uxZtauiQyh~QUk2TkY=0-c%)Wdo&Mq0=Q+=UKzMNe-M1%Z?PoKAimy(vlB +zot&IBr#}u)A9ZtvW5vbmr#Sd=?YVt4qwskXoTLoRk2r+xIeRu2ctc=UNQ2p!_gam5 +zL#^14JP3?HO8I3Eep;{DHAx=<%9kyYdzw)j$&x#}6gI%7%dVbpgj!Ph))hgR_nB@-Xa +z@kAxXSJZSN9$8YKJB*PmAcX$lM;uzk(}Q*@&L4<>hANl~{yWl9^-GzswnHInc0%kT +z&NuHHqI&j?unl!xX4w(j=~LkfPE9>@k<6@i|Bt^_a42ER08$BD0+PqztT-BY6A2@zq(B}hhkf%Pl^vvgoIdT<}shbVNubeWxSV^&0hB=u+8yZlFCSRl?U=BQ03x0hy?Ej4hgVxQK5}jjIW01! +zmmSeVP+ +zL&EoQEKeT~uP^}#$pQ!YuC0kWdQyYGcN`=0%)D<#F4{5Csrs>Ne)>+->Hgg{)`pK4 +zGWsi(`c`e1j#sHrU=g3Rgw1&h{`1TR;UEWnZ^m!e7rqJ8A(9_Pc8gI=fX9w8)evub-uCjC}ah92W@r{NEky`+w~PSR#$zuyP&=}HueV)6XCGu|XQjPTjG#M+TMlrKt<5H?Ldw&CjPd?;L3o +zffO9LPv|D>lbQW8g9lRLSGd)VLDN0@7jU1Fea8n%sP0$?@(o +zRYE#~ZAj;_Rl!C+Lu;CTck)%2 +z1LEC!u|w)kfbW;?s^1-bk=aqdXG7JWr|BzqdN>z6@In4ja4u^N8gnT4>6v|O8hhZA +zN7TI;e{k1_tigF=`E!x$z55xw<95(ot+(4$V&YrhGvH4$fEO7N1XfKuqC1^S@5&W& +z(dL4KxE5*OKhkYLm^Ri^ey=D^J-?Z2wv_rWUT8D)SJC|5!dBBZQ+|Vazjog4?S6&{ +zn=9Nrz1d8-$s?e^Bs?o}sRQ9k*R;0KzlLXFY6H)``{CGHvjhJI+MQo}TF|MPbzU8nLdEeLCYbdDlWs}^x04at3qgU +z(6t{ddmeMzO_Dr>;xS(JZVfF1kt%)K^;cY-K3nx%GaYJVs +z?v)2~7>$A(cp?PvmzkSBg>iJCaHHNy<3}H9Y$M5Ry~y1*CTGg)nD^5iVS;9{r*5?1 +z${a4cEN)Qtf^bmb)o_Ed*MWlyFTx;*9Ij@Mhyz=zHuf(F=6EX{$x!A{<8EOB8WA8^ +zKh1HxSCYu=lK!LTa2}dQrFV@p(*Pq`&yYua4la_I^wJK4`Z7R{d6 +z!RFkX1#>H6i>zFdZJ(B|hwQwAtk}XeA>A#7G;P^X7b_@{DIi&arN8E(W^f7@v1+i38^S|A#=Kl>q!7jEcA_<8tuSU0&Q2_e@r4C77dFqgyTH4TVE?gXxy!h +z+Y5<1hv`8qO8oy_tV2SN-I~nI3wbBJki!2 +zIrZN!a=cxWevDp+H&Hro&b)uq;bgLE91SxU9uch3xe<%b!8UxD1+w!EA*NlNpPqmd +z{X9=lh2Qv4dk3i>n@u~Bh|U+LX;P>KWcH{+2y<64tm*rlg9)cPBNO$|@JNSb5Imc68E23llsMRB&U@V&-(zhpEPCL435`?6g*;uHRO%M?^)Y+K2*i57r@h +z#MnHQF`P=Ky`&#@#ODy1LyrTcbnH2gSU8Xadj%ErAIM#FSw8g6G4+tHV^!*?th)Eh +z$un62s&`CZiwy02U)w{=5J_-r?M<*;7=20c*qq(6V+_lX6+|y0hfVr-8_iAj_q2EJ +z9tZQG7|lmJJLQNT16E+G082*cey6x}{~Xu{c~-e+d-O?n*Y>a|nLMu`y#}91w8zBS +zJ^8+st;yS?s$L%v5r0_UD|Gs^_SOXDi*E^(9%2_B%r^_cbg>B&)R6?#ber_Un2ZmM +znL~~zLwFDA+zK|y5Qd?kyMVQFoE_*GdQ#@L9mE=`Jn!d4dESFyEYMy&P7XXTXm|8K +zWlAyV0`JJSLa9839^cO+_0;4hFqc3%1$iVnr#5eT2Q8f3cS`(7_)gDeB>Gc1n&l;y +z&XV|q@rtBfltk>(@df_o-GNJf`wu>L4G`Ax0tM3)n-!ST+E5BVr>sw!r_95cuHZ>Y +z*it{0ep6S}&n*9XSBU-WVt5H}E*XQ)i8U1V^I^P~_|$IPN1|8MhRPN#p>^A5VrNod +z5Ct=7frZk3Rg$`)o@00b{I+H{_bQOTjl)3_?h!gNzSfcxx%Y&>3{~Z +zWk|gpkV|>v;SkZ(Mv2bv3aPwPjMwEU{8~iep^P<9xTMcziqlrh?rXge_rSl| +z7jdWK0%@+%8|nTk2{n{<1)Q$e@vM{bjeOdYh1_c?u4silN9fMCwTv7`@*{mVK_?vwx~ErQOdY-W*e$v17ncKXG}Z^ +zx0sI9hu%2spY97ibXKv~p}M92u1ly^eY=Uii6+`&^=m)ZdcT@&y4_k@M$t+Ct74px +z?ger`)@+xJE3D1=RY<|_(G|P<5m8@!OS(_Ec3QQc^*?~6dM&?`x8%)h*SA}B!L=v+FaYtJxkG|7#V`BWPU@kcXROdlVN +zlEv(`#?U!Y%UY$OEfjFEP|=)T@Ru&3&?O};%zNk4ddz?gIdr@qEmFq1ZdUt#b;4KHDetF>tGN8nMu +zcR9{Iig-qS$nDX+_S7DBX-e9r)Sm1tNW5$KU?~Y76iqSP-7A~v=4#K>z2T@mZUiPg +zm4S>`=yC80+2aaJ^6jq=OWM3L9n^X;QLt32pj +zGWD>~3mr;9dWi7z%!XN0?n-sxSV@~Q7oA@x(mZHaW{}gg-bJCkY29nCgD}$ +z&bGGHF97VLgu%yN8`W89fyG6-YLU@u=!VGCx0*Za4ZLSu*T=E7%Yw9|D1gEVDq1MH +z!=9^mIqa)R)7xk?pzP_$b?$EX{X?_?rs+hjRoz^S>FE1vA@AvL@Ez&})V)H!zAIBG +zL>s(CH=sP{o_M3s??yVv!ZoE~ME3AR +z*EEEA;IS$v*U@xmX@5ly&&wMDWk)#-u|ReTO7z1H&g1RRk}LIK;1}2_$7Ib@jhJo# +z^Q_&EyYi9J3vudKe*K<*+zfRmh^w_3Vk2Hkz|pq#-aPS>4K9ftP%`o|GHHTg(<2S) +ztlfYbK__f-E@B~Y!h>w+UINf~G^#gn&}SZ|P8SS0wJ_!yoSr;_7r?V3e?)%;z}XTY +zFsE0S>wAdFJ!!Pr69Rd7-B{He+V{{AtYNy+-C)_k3@CWK{_YR+wdGB?Y|v{Af&`v+ +zxhgI`RKTTfLZ~>ew~}8V!EcglpO8KloWdVfXTJvdvP2K;!!LjCVRK^x+g``bKm+u> +zRy|>s+tA)i4)k0O2C^H?pa_jEjwZ9Cg@^RRDA-UH7$rv`_fgLdf6J_vL}N{E(O4BBF;Ek%RUz8gw?F +ziqUimK^eA#QC3S-fPmO_;k5OOh@g+6eF~J`*7NbU)KC>ojQbnvHsgs?zlbIt#>9}J +z^@4fV61YeRlu%6P)LX(&^jxW?GgClwOhZNrzwtyGbJm4`UE{K}2OJs-;e6s3;yuqU +zrTT&Lfb4Sa4Fad?ge5sj0VBzgdk_mccM|#W=k*5g@C4nrn&9E6W#%Ec$`%J{|YHbQPl88FYUGEfC=^5Ro}Wa-u=#lCzG*{nAUU1Eh8;!;R +zA$}B=!YD~Q%MLkun0pbS*VtqTsA+nfVzZ5%Ph7CZE^ +zItV{|*oH6*pF|ObDhn2mB$jvqxfs@HGndN33(0g2tFYUi$_1v+SbI28oolXk*yc%) +zT(FN3%(noX5F0^$9je|&UYxZ)!M=@^wF@e&J-^$*>TSF+?u? +zoOWGo`bb`_-hQ@=)GFWKt!|Oi +zWFFlWx!PGqOlDh!X3Z(7>Z*(hMQ5Yc`4%eoAVk){(l#vQ@-Swl1yt;DJXF0?-;$

F#2$&RyDKufwR@ +z;c#`K*4bIzEI22<0Z}(`zxGfyvHPu6vrqe|Od=wpsiH$Y<|eB!6VIBFXuJnxkTk;` +z7_8m{xrrOX!aD~L?}2(aV9&nnWZe3mp~}iMo{m=aiNYd+9>VAcV5)aLf(}+6+`3t` +z73X`4DS}Qn>-%RwZ!B%3Fs4OXg{`)TrLOsX0Iqd2RiQgH?DSZEEH7 +zX;si_l%^SRi-XnVt)ncQXE10UI4m|82CHH*Sg0g`qN#WQ4^1?Dw|D?3#EwAp#sS+P#{rT=c=2EIIlzp0TbhbGO^E!RRS7fb&& +zKXe8XaeClq_~w-V?hGioXyjW1SMmQ<{Gb1w!Rhulx`rnbS5X0S9qD2-xPJYOULW|e +ztgCDDdBuJp{}FcR{>;dejQxz}n*2Xun2~23dmqjGWa=>*RANH+3}`wJJx>AW<_YP4 +zxv?^HW1W%|PK9Rcrz=~v)h}ljrhj&0il5F@;$OaX_3G;C)vGhN3VvO?w)&&%@6Ie1 +z{CfSzSMk4@y9K}g(K`P>bFbjn9J~JGnMd}oS2vs309tm +zd%)Zbu)=ioN&Vbo=lBgY|3W9u&6%l-@3765HQfbsIx5#xDYH|Kg(a^t@*FF>@(r0_-#_r6$ralQ%dx9)UzUz2nYS%={82A96dwnM?tz&J{J98Q?4m!HlU&$ux#D|#XE%Ns +z5;xnHp2j)T&l2MobB`lF7kn?rW`SY)x8Q-fY +zpkzAv7lL0pL+LeC9~?2R?opb){B9AO3CTUzW)UfV-t3?qb@Id08u%NS>?(bT0&?Iz +zw9zFCD9d|VF9bMgw9n2cQGU|Z9<~q{Kbjl30fR_mXH>Ejcj{;F$4PuL_7PW}Fsx=- +zI|Kg^9s_C`&XLWZdEKexQDD-lcK$;`<1&cVOUe#Xw2NHqNl)2@t5Xgmd`C^UujQxk +z5=holduP_YFbPiZys}%v8;N*z(s{gBpv707Zr1S<`5SI0zdN|1-=I<<;wCqWjX!=czwG&AztLFpwr6Bv6~&d^(2MW7k4jO#PML@L%>EO +zL9^M25=EOjz4*89mL}*M2N`tWB4&3CBAQjBoZ;<^EFZnu*+6s`xI#~3eaa=vx0vKv +z#d35w5Ftp}_jGggRuvX&tGTsh3&1e|Uc=}WoFLH~yC;Wk)v7CaG|N=Ud(JG)LQB^a +z8HDRbtq%@P0TC(ps^7sFER^~N8h*k=De>9P<-=B(lC+`^yS?jSoDh? +zmpE6Y>hk|g2FS;md1O(fOqS#wPbS1sr^#|OOkCuPy;(XfWu?B~!uXO}d~pk`^m1pC +z>4*J}fV(#WcSj@~a=*rjCfrJ!#>U%Y;50jW+F?447(9I*z+!xl<+lakUb5xkdM +zN|ij786-t|Zi*L5(8z`8iLkEZbz=#e9F*s#3E-8m6FzTZp8vi5tbk38%RP&IrDPVt +zo=FbP(_X2)@NAzzC|`O3_1xc;w=$?|yT`r~qnE0`qT2Buo(tO@Nd<8HRr;9qIRS;duEyH-?`s#$CiQ};Te1xr6$SJO=cn@N&@U)gOPJz*JDFWUNaZtIRs +zlOHI3AzwUk!n#}t5k-C}2p+*Q!fq|7k?Oa%_V&xvV!XgKIeK0Y-w$WNQGq4U4d5;V +zmDI9sLSUJBa78O-o1u!Z3=8_3KE;M>KZMFMhd;~sS=kW9r@DQ4QPt4OTs@Dn*CoHE +zGP|(g?}5HYU^46XQ!A6+!dh;n2cms`fy=&%OS}k7FApsH^0L}YH@-#cwBeEHE7$}i90K) +z1&WPk$`F&KkiDp&x(xbD+-V|l&8oHchOeSv%|z>E;2)7Y*;kn0I<}7 +z1RK-=dOJ{ifeh2}1bIUDCaj}){`m~Hv)7mm(VOk~*(v&IA80t@GrFpaBoJ@CF0LCX +z&MM9Gmp1jDfenp>wDWognB}>b^tQMqdMW7?dJO4Q4zG +zgRplYAN}Y6I&Z1f{t!_b82?{HwZFk3X*P31pdp8A`$)EC`>Cd_us9CEE*N@O$%@l{GN&o^OS`u97844FhnMQ?7h7lkD4&%x{pT%E65TmGeWw;WSPM&q@LkF#)^%`y +zDtj^#2;b?(NiW^vBXD(WV5k0+x-!bLLc~~kj4P_i-hdIn&DFOCelQT4*A3p!z#I0^xxH!UGEgmKtY4cmTie9PR)D1AdxUJQxo)=HS4$ +z=CZcKxgHJd`gy{39&9`^89II5S%{WE!5gr1gK!=7@GSA!2n!qwFG1fAM6qlQj%hX! +zgOZ?02=Rb9zg-sK2Q@?YL;tnd9`)>^Y@id*IsxB8hPP; +zX8CbH+xgJX5pUo!8^H +zGCbF;Ciyq^Y0ZLQlO83&#}xkXq!`eNKi7;WTHXxz@x;_757hQLiZ8!JNWX*p7W^P- +zK2IBK8+N|NG*lkCfQs`VNEyMqpfwY8Xa?8Sv0Njr?4=}XnAG&8|L=#<{TQC>tbWNq +zAIdXG*}<0+5NVu97K@-p3APFZST%$vZdbQEh(oJUxXbLdGE-4Tp%p%vB`FEr +z&}tsg2Xph%Mgg@1(mb{ZTt@x^Ch6T*F6D4aiVqa2K7X?DpGC=A!%-r#HiW*Fl-|7qYT3_`>oH(&L2!pE$0I +zNMmb}Clm-iW*~EQ^;2I$Vl63m576*$cZ&QD<>;k|cYJhP{lwARL+~&!&Mw}r +zpe$<_m05WIuCd-g6Fg{xOrr&=k#JkNG?Dxs=iF{?)i0UMW?q;L8#hqGsD3KdO87aP +zGf~i6_UyUa(yI&AO^hb=kTt8^E&xC*G4YbI6~!3ABBPM%VlM(u>OyTPFh-1&nXeX6 +z&EpDdoFL{BZi{*zdPf;Y;dw3Mp1q6zK9Q<5?IbQAR6p2&5lu;%~B&(F#WM|Qdb?_Bm} +zg$>*a=GM?o$lN!-<4Usf##VEswxt&Ylpk`fEI=w5KorrcZKab`N0RCHngww|W{Z;B +z$ITCwZ@63k0Q#n?D145a6b?S);Xir%8KNoZs8b1=i3Rd`#Nb%UM@H#56B)5J=W##h +zisZDL5#2!m^-dI$IWYf@8IRHLg-8s(XFBQ*V!rULmu+tzzw|@D_m}5?Xl<2WdN2CY +zdqrRRQS_xB6@BUb=u7VxeJS`7U!FG|h<5-J(N1PUQB2fp*ph6V{sUfeiD2X3!HSxNw3vt^UU;f$4G?Y3Lwq*1 +znv0c6Re`mE^WB&BQ;*2hkc&n8U_oO6HhPBt^>~r4;A=Z$HcF}j_t~1<;rZH=X0_EQ +z=%aE0GAh;OB|#{s)5(z9=XZaClW{Jmdzsqw6Lj!Mjs!%ZI?XOtaqs3jzWV?xG!em1 +zCD390pe%$Ja46H_hk??sou(P=kLUTC2i5U7`)(H{0g`hlFVRe)zc?GDN6(iQaO2-G +zc0;n;-;PMO)KI7=P^aTeZkK!x<^}fEevXG1x211-FZ((rIs#K^w!~4uWVdkAgY#Qe +zJfmw}mr>+7s#;0~GYs)vOS5MBA3!l=N{-WFxo2jr@UwbSD>)8YAU?Fa%-i@zw{%Z_ +zU;B&j@oKfE)dY2g>YOiQEP6_Qcb=;48XvTln#pl3F?&0mAd06%k)(hUayGp*X?=5F +zdm|O36TXO(-t?j$6hWR;szQroVntzc*hk+A#Od_Vi)ApCCXMcVE6}JQ=qHnJvJ7J9 +zlr7KiYwZj4An#)rwl=YHj4@3b$}-ZqfTcvxLx$kizF@b>HjQ@bFh#!SsWPN{cXT<{ +z>5j}@YpkjM1J#(KPISq&qA}(kPa@M{=XYfqgx)9EdiL-pAWgTe6ETcl5=f!l=F3GE +zXFLu~>aQ_3wX(EG8p3>??E(o??5tQ938^X|B&i2)L>k|f^u4>9_?9gbNCk4y)T4gt +z!W7A8{Z1~&;{sMhy9JhInPoV*-~ZJ#kfQG<)>=LCkC$6)R}3?&Fqq_*K0e<;g7=z4 +zj(qdnti&5ZnQ0UM=bl3P>EMUWCVCiKl*77I(k_i+)o{bGp$}WNwFZ(_t$|ldHo-&> +zlKR*9qh5G07Qc}bci`xem%j0yW#LZFLraJ?HySGHzM%!3Ci0_qn%i}%Sp{_dC%A(5 +za7FGz-=>f2Uk&_A{LH8V84G2r_Cs- +zRmD&{jg)h#5k-cu3VnuDAKtxxZ(7ncfjU}S>}XoqtVw0} +zN}YMd==_SXMXSAcrLra68mWm=IKu?nWsNADCTn=q23?36J5bs5neHqJmAij5}827pRN>oFet6khdg>WDQ{{ui}=}s +zF;UQO;uCY%&AR)E7u26XC0V#Hugv=Zg+UcISPu;pZ{ky}Bcgkju2@yQqAo3d*%Nnn +zR<}Ah6^&aarAC^z`V?dMsDD}W&m1MGV!VTV+ZnI +zz=xJv!OwZz&spL_Q%a&!j<=8uP^*x%Bv=2Y*{Cd1!wC8*(;wn0>tLCky1T=Ni(P9j +z81JnwO)`EaIR91_2jGPyj^AncHUG-N1q)Or!n=15if-Wb9zZX~&@1U>P2^n5tU&(A +zo0gr`>Ia6SmlHsZcyTkZ>C6J0o(G&=fS(oN4|FRFIdow`b2A#O2`3$-qP=1_-^3fb +zu82A;*^2|>{~q|)*a&rb^;v~tjg$`&-=T-^E4dLNI7@FRxhro61-=t7bSlsv&SA~6Uq@NGVy=yyCQ^S7rm5c9)Fo627 +z)*4%`1sR_2=06bdYz-GF>cD5Qxrb~<&l0)!DNMtoG*QwuB7xR0>|why9Pn&>~z +z%ry?$r5`6VBSeI1UHqM074Jq;nCuApdARhN(aXcQ&ChXD79@`(_zIhtSyxQQx5DR2 +z3|V+WBZ}Ly$6UEQ%WcNnFt*y2pWj9Ka2xH+p)uo>yseSMz{czCx6RP#{{dL1@kjlB +z8f#HD!Opg~goKF|60?5Jp0zw1`nF>7*4{ngd+bho7kD9|Wq)@MzjIYq#H1reH8k8x +zbNJRA*4FBOR+6c-=uU?PUeRAVOz>-w%*78D;vwCwaJ +zOHIi}78uhEog?VA3)J$4hXjnK-PvUm1&~hSi!+7TCmArDc9dO~SA!u=ny%{W(Qhg! +zPR#QImzBKk5-O72{;U6ua6aj?7LamAp=ff01Q{ +zc7m!BYl4A#4C1CDIul*sIo9iUb+cqw&>q_8Vnl-#LIg#5%)G!kfZfrCbu7=?^c8S2 +zN)mE1MK|fPo96J^0(!SWZ|Fs3m_$^7+)M3r-Kw2jEe=(`;o$|Qj54*_q@xG0pqLUM +zQAFU4xMKi}RwE_8UNChRsBob^pqhsx|5U#?zwqk|P2ezU%7=dxw-|h*91cJ0h|XF( +z(R+{`v-ooxpz}=n?V9{X|NWAOWy$Km$59WALyNQ3kC!b{nMBBmVkHp-RSpaMsy2 +zCZM-)4b(FWP1tW>XtCC+;&n>XQ~Z0l)ZukY$_2GiTuejJ?KVY))5#A_8lv5D8=q1c +zbgiChNphIPbMbp;FVQg)Y?+YU9a7kSx`_IZ27>64YJ>-)fVZ~3nmJin7W|3WKpA^m +ztP^LJG}*i@4ME!v?j +zt#$m)`c{)LdKwp~1GwX$4>@715dGGwnz +z3*IZT>mJ_?@U(X#_gH{6_grpn%gsr`qo(>bzz>d4|5kxt^Ay+AcfBh9jRI@g8-?$l +zQbq?8NIkCPbiQdt#9mH>H%=vm-VW@~i!7!pqxyjMew@YOCjGea`8dwT1ufKxn2CHw +z$+vIZ2gQfR*RUvEKNUt0OsjEjUm&EjOM-QKE(d_-ixe)uo-D6^b814QLpt?xVG?{! +zNn>4%Ac2TUT*c>%B{4I$9oZ|`}OzKG~6+uB-0u@qscHz3n}bRB!- +zr(~NTBM;K|b08(2+Y)$~0HzOUI7O0oBjyzrO45AdRaqB_d?A6efKhyuSuK)hKr$s8 +zMTD9eU10FLeqB~qX3lKF0EC7AKa3!71j4EyWm*(V#H(|h@l(Aj+Lc!Q5_I3WZ;*`i +z8~i)nMVQ3LUFEY@=?BWz6uv9_Xm(namCnY5FiQF-lRPPGj0Vk`)-YB|T=EOi4t0G7 +zcQgxs-3R>jYV;1>MGxINa|4Lz9^uKJIkDp4d5SCbCI0ja%>@t5)5e#LK7jen2su35 +zbXpu;cFqez$DMMCoZG@Zhf5nc;m@P-(USJpiiHDml>XB3IRymPiCs_(Q8*Oea6{nFnYthR$45 +z$jD>Yqs=5e!St{2)$}AE+D~xk0UO|3c;{n($+xjI!SXr7^6#VttDotl%;X=ADO9n} +zMDtR$^t1Yzj_OQ>Gn_`F_pdSX3m5`S7g38Xm_mmiY*mX|37*GT9mBQBm{{+bs)X}! +zj6NU%Rka_K-I=hOn$8a7!oTjPJSJ0?z3npRXS9Quu?4JVO4gekTZLz2J$6@28ZB?D +zE5J0cKl?V821bd76h2o{|+a{hcj> +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 +z_OMy0`pg6NJQIoB0`Qq%Wq`4;)1 +zQX(mm)EA}H3VrFP+HsK`wDp!TYUrwMUEVS!0V$GZ5H&iN$`Le9UlNbCNVUpcJ5kZb +ztz_TcZk7ZbvM%@e1t`{Q3NXXd0sp!oXnJ&&(otHgpRBC^3@gT;>pukvcO4uoiOCOmqyFDuak! +z55~C!jL?KV5_=W^zY_sabmMq8c-FKj*{L{a0xJ0E +z_CaE&)-_46YC4YI!*+-(mkv|I(Jcum`i7s176M1CtGNnXdmx4rAogtk1e4_c8|a0Q!{LXh<6fzm +zuXMhb`0q7d=<=17i`cn3BE3Adj6B-eDs7s5Cv)5LW=cT1vMOCXdxgVxPCnW}q`CVm +zHBT}tle~I8WU|Vh0{Qq>k^Av21I}KasL^+Z!$m2(tVeW>0_J!=(wpaMY?_>)elJo;z{AQ$_KwM|i&H%~OhDA1tT?Uib>b%&jQW@Er9Y?2`EVuQxlH$2w9F}@;C@VmUM!ECTB^LS(iih +z2YHroBAN-$_-b6v+94Y1O%z-tH@ILO9^~ +z3Wo*eT(a$6GgXv1@YF)$L6EuUWyMseQtExhnk&vanD#)ZP)|id#WLxRz1QQVr4Lxy +ziz>g6IFa3`mwuD<@>Ot~Iy +zOWi3{ot^VI7=TUq!1z)-2|F;$vjR#JsW1)b#cR#g4*VGKyLKfVUTfyD@%~Vz=$+xG +z^u=%y>b7J9Tlh?EEM}O+i+@iR-|eGo>n3#b$4IbPMnu3p`>G~5o92@*YoID{Yr5*_ +zjkRK_JV~}}padZ!BZud1;A!$__2$R3OZV>H`*6DQ;iJ27&_0J}Orm}au&p;cJ7)DR +zd+220Bp1j=dPyt67hf9f^$=a~5S4@>t$V-ntpQaSX7)f{DgZJY8nxj3tqh#*m{d8T +z-z6?JiyeFXrhAe?rA(SQ5(IlF11eE-huBz?9rpE%QBV#`f+uZ(_&@XoB7KuiW2HPG +zorXJ8)JrT-gVMB8DEW=^=}>PYz4C_Xca)Z>H!26qM*2x_%*1L5B@&Too9&)IHWnd* +z!dqGlj}S!gO(p&0m;faRx&k2`MYnhBt?dQ^--rrXsQa_O1=RJDk-2}Q{h|bEDY>Y9 +z`1Xl6wn>j!3M2C!Ip(0wli4}?R}n-;=yK5<>CNK!$&B=dB>83jPF(c6Sx3Sk+@awK +zYDpiPl~=2+lchf|hLB{g>r)Icm83H87s+Q&pl0z@Vpe;`uiV&qQrl{*L0@h#N5Wd{ +zf6OeVa+kNm$!`55>+cMTDZ%5tjH3>ffwv^JK@jv3 +zEzj|{-pUvT+Pl~An*ax4@E(4D439iA@EpB9kfRQ2G;5&o;2x=e3r~597`jqf-E5+a +z1@Q{~V&(2!<>IyE+bi`oK9Oc&ayNrXzDDI9eW5&0Lm%Mojz3$r23O`azem)V$xA8` +z^!6^T4P3znLP}QXDytrP9)X6A(uI{LKdzzV2iW355|y4bb3(7csm3Fk0AZ1uIhRxL +zLT=_0A)7b-@tyj(zJ+c#k~%Hd=E=o(tdyI9QC}mQ2JbLyVhajB$NU)ba?*Uj>5eP5aq4*oMRR9jtA5p2hRSaCq`m1~pvFg0NgC=E#=%A_dT +zIVw&&xQWfRU_$S#H#Rygjn%B;Ip7T>S8TGcgyxDt^{MUdZZTo{d3|qkcuAiD{%r*4 +zO?SW?mRS)XX%@PR;VxZ1Raei8{t|5nBU+3nth2Qh6v6R6=8^=gJO2fa(uMfATPM$G +z6oe(xfK_l>;hQ0|nv9$TL?5u*#!vBCR$IIl6&g+3Vi8QZxs7*k)+#?O)E)mEK-6)d +z%th()3Z&RLBn>470_b!93gy?>4^Jfsn;4o@VO_}!Ih%#hkUbM$r2l`5|I$C9I-;(x_Eoy? +z;Wr5u6}u^2(c|m~5zf3?mgcsN9ptj@ARX8`(fI<1^|Z2Q%3bj8>u$&qXa!!SHwwfE}$=@k}fjce7N;>T}T-UP^ +zE<&cTour5Qj!^PY| +zZ7vlJWhp3xmvS!TMM~M{Zkmy);*pPzEA{)>td<*_Ui;-XX@kZ +zJqW3VS%B+$(z~=nYw8Y8sE=BUzZC{<&2WY^<33E +zauJN6g3q3VNl>LB&UuXQ92giFxFG|bv6LN57MdQ;Py7V_5KgZn({-(KaR>3Zz500j +zZK$u6i)JhK_XVxlo6Kqd3U^zA93r4|rl((QtN})pwlb|Vo;DUTWIq-zUh1SO0jWno +zthGJ@N~ymR!S0qR-tq*l*b9c1)4=H>fj^sv^0;t1r`V(~FK>xEmcof6S$E;fdR^Z6 +z!GSrG(cNDj9vp~I%rwr=1h81v=q_!JQnXVS;iDeujc)Gyw+g3s`-@pt`L4}HJPlP@ +z5J0w7fPth?z&h)D!Ug^Y7mXGn&)sE2lUGpu^LjbOgH8rjedurE2xdMg*63~hiu?W? +z1G&R^QvO@b5jU;A0#!V*yTsAtSRiOP`k?zZ3hSU-Av&>(a&En}EJeY&Tf5y9q5CTk +z)&6KI-9)qn=6oTT#3L`b^X;pGqjE(9pZrGFUvb6((Mv>&r`k(YO8pK!m<9o$1bEIL +zB4KIQ|Ap9Q$i|n-p1RSZSx%eQ#?nSG$-6g@U1?T`a1t?KY5r(0ra*0Jr|n2&*PvXQ +zjOV2pu+=86Pb~>u^UM@#YJ{3Z^7q^F_htF}2lDr%{QWce +z``6{~-;lq5Q~v&Y^7k+0@4t^#d7VGUAJP#oFfThVIn@I#r65zIF;3}AI0=mg*z*uO +z<(#ndxBPCllL4t$51-L0;*{s%60Ep_(zJe084|ytSfQpGeCto)udKtZgqUP|x4sG! +z2TqzAUbREl=XT}7mCE>)%G*~em#S5Dcrm6&w!O2(s-1)K;Ihs>IQ$!C|}*c2*Z;?V;MQwt-wM3k&pbr?JKF?u +zX~N@9sCw4+@ZC3IpNoPyi?ewSa@8x6$2&Jf-RWx~Yn7J_d1@wMKj$)UoJ;a%RM-ni +z-!rVeNw^KbJ<>lmRF8Uoqo7r_xmg^o}DagY=nT0=5EecM}0{xTR0XWG*0k1?wF-*cD%XZhdcOa*-K%)9dd})0^ +z`8mj+QjRKyUL0p_D#0tNEkAq@T}C`Q#}f}E?W5A38WtjhCqi`=|1cxasFq1jo`~#V +zsyXT5{6tv!Y+^F1QpukE5lwbIqEKHO+<`J0=7NSmJ +zX&2A+7PX)5aAKERBiDpwe#Z_-56Snt_@gWcpO_Hx#4HMRp?;?@yZ9p2XR5JcMBrz4 +z57YV1)?rL0FuS8j><+y7wT2gk(Sa-#V={gGpBY;qOVA4#+U${5(iQE!gL%0SOjif* +zJ2_fdo-sfq@lr4{n(25HxfijQ##?X7j^E!q@lHK{^xVonq7ZgTN +zLam$(>}3ZgZa_!3lKmRD>jvvrvRZOak58 +zNqN$4Z3|b+EnHz2%RymGEFRJiDRHPh^YSJh$d& +zl-FgE$2cWQJn9$pwgmpg1wvT})llmFn*X0Y|G+Rf0!e;;&y||wf{QLtsljm+PQQf@ +zuU#s@@;YGoM%JTcL3ci-E=@SsWRe<`y2t{Q6Zl>%HeBpS)j9Q-(1po)(#0t6;3!a( +z!`Imr)`@hXiSmp}rryLjwR=D%nYde8Ev`!dRnL-~GegNhvvOcMb6gpNy5qz3e|>eU +zvHE4@5^084<`P{jP!?L!4%z@j(-(ut&$ejcS+eB_bxZ!N1~G54(_S3r)dW#r5R?0Y +z0&vE0vPx$cKT_ce&tn=e{Vou*ffa=-;J-m_31_IKm=1kPS>%SiZSGS?8`_L5E+XJQ +zXzquqMD9%wLCT~(W!`8|f>5wZiQP(lwFYek?K)7Is6953p^OA{;+f4YrE=O8Ef!Gi +zAN0LHLPvZkS9SX$#z`n7g5ap2z8UXT`7)IuC7hJG;`jM}(LTX>YbY9UyOo*7cjfwueR6(Rq^SjGfj@A+RM_I;#N_Nf#NX#F@FZb(t2gy!xbNvS`Oz9-j?O#%T;V^yt;ZU9}zDU$XA6YqYb +zjwLby@9D1DY6j#Y`vKS!lW3Hg%Qf~WeZ@^H9K)VCuWy}{Q9OyDKNTSVeVnNaK`5tj +z6hcr-_>2efRbe4qjFy{YECtIQr^NF_2K(Jla~REnU~UNY9$wU+Ut-R{LBMg*f9>VU +zMNU1s2!{1>edQ)Pw!>7BFIG_TOPeYdHK{iS{UoEeQV$6hO?XDSv{P8?J>{KwgjmRe +zpXkVKHfyLnT3RTY;{uccTI4!|nl~~B=JJ^L^PSN7oK;pb?_>rxo|c-ID(%%9z&tXE +zxB3-M>I!WzNHh;e9yboI2=@2U4n&=>Oq%5G`6p|fk!w>fv?Tps#Gha7)I2J7)BtO) +z>aJGhgst=YAh#R^Kiw@6`-B58YJv6#-V8JY4YN`HI)1P8e&y7i?sf*h24z{s%Zn$fuaYn8;uBI +zol{tBlZ9mC>x~w;?k@6PB>G}4d)>EeqJPMpszWbXF(o;AGYE@26s1bf-+9b9c!Zl~;*;83`0ugl;s +zLd;*`wd>^oXk&Qy-Rb-yAJ*|C +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 +zHhl#zSFpt*@&S+}WR=Xki4xhZ +z(H?!FntGu-kE}0Ly0#vP8?6g2ZHa6MItSEPU+5Pl)DNT|3|w75{@n%) +z!-%2{0v^_Od^i~-&^T&}5Pk0vK%_mA>&2p{uqhxw!ddyU?@`1M^0;tO%E}6TA|(#; +z=)mF@QrnU94WI_FUdh2)T6xe0(RP%(wyhJQk|yT?7Uy8ewpokw&kQ*(93v~DFpbD5 +z&{0)}THdf94WXm$o-cY4egV5xmc9jVaQ4~lw(g26z-X0?xD&dFx3vb0k>za%LY_ae +z;ph)>^|#^u2%Gz6PH66BFwesjBDS!aOXuLj2FN>M7^1rLcB{C}g)^Z0ri#$)lzq3e +zhDi5;AB@kzQ)G-5o>bfkNPprZP*Y0lhr|B#KSFA=%gs!!VbvaUYfJWBbRcdbCQN@7 +z3ssBeQlN`3Rr3bVv3z{ylq%xC$rXnaupDC4Da)N=YF_vNlnc}V6#B-LX>)c6I?BSF +zN2kG$!@Rx;V!`c1kZ(d$Us1$PqM9}>H@=C5cmjOAOr)dVev$2r{MMhEmD#4fw=0ez +z;WMoAxoXQ92#A@R8Ks?RL2dg~_59dplWAHLWw)b@45y_fI~GixvUo&T?TZeEr;ih{ +zWnvn}=-P=XHTrbc+CXtx0pBF@xKMh}Q$9pnyxFn?loTa+Si(amVm$S2(!e3XWqs_7 +z9vsey`!Gh7(Lz&EPq|(R65@d*Us5xi{7koKKVv^=EPfn5!^|hPMxpIWw>ClG_VE7= +z4@#g9cWJpv?JX~ns$3F=+c&9Fb4d)rec?Pwqrmf>a`3DUZir?1aRY7XPDMRS{bNL} +zqofw0+z!O9Y1bfjc~(a1_GP;7XXz|Sv%P2X$w{Ky8rAasp=*z5bKiN%pz-YkA +z^eyX_Jjo+zk`iq+^?C-ZC3{J+Xb1P&Ly~wcjWZlM7gbf3=5X?E%4^5i_~cy%!d<8p +z5JO43?TB%2#wG1C6yb;|VO3DHlJ)kjUrEQZAI7a;IbYg|ped_;2e|sEk8MZA&VO{{9u>gvc%52x-{t`sxSP8>PvK@i3RfLhpO{Hq%N&>mp0FK8{^yl +zu5d=>e^42>g4k?c-b>6Z)AoJYJ})WE3rJ+7j30(_iJ3v@y_XmgE5@fz53OJn2V-_U +z)l1joV(rHP@h~g@XS<&~w`U((h*7wyf+i-BJau6U$rEdZJd#sLc*w;;q#06bBk&P+ +z>Y0lp<3AUQ!@JVj7}zB8B*;PaSIXyzsS7V;({(1<;xo?(V=78L^P@3SSi)W(vuOJs +zz;>zBfj0`^sE7Aohla)rU44}-_zsV=gBGAV!1 +zriw-pnihpYp1N4sKiONSkr&0(iOk23tyX&{w{qOrO2>WL$F<&Z+2DHtQeM!vtEG_d +zN=u4XNxJLo(i)ZOrk~BI^r4G(c@i_`LSQ;a+#eL@6-T;?5~t0JkVFazMtISPSwZ)nE#3 +zVR+FWOODyQSBw3RL`}X0Kc;DANd=no-`F8UV^)qkJyy8Lxa*hue5yp3_w9{f7KhM|?I- +z8L#Dal6kf%q&}TzzOpHB;fUX?t%}lHYbu?P6s_E7hV8wBxEI|;ANDuBV&(X6AeaF&)RgJBO3Y9d$aSTLGl^)wQp>dommW?3ZX4*qAV26RK5`#;Dg +zAovtd1f55q&8MLAJ0kloEcTTOlsvz#Gn;qdnI8(3_Ol%>eP25`6*uDAs!X{68TQ+{ +z^ciICtE2~`1lVVXE=vFlKm~MVDQ%A$DsFK*s_IY$R5er2NPak+ +zRkkC;v&t@H<8yZ@XX>e~Tp$9hcIMq%%O`93WYvu0gOjO=yt5u>yFWcYfqDv(mORIpovphgK%`z@i*kt3JNnDbFel?r4vN{VZ +zDErD4{j)V(xNIz+y@m;pq}{ww!L~5coXO|o-Zsw!PeWA7^GHRUFGeWJ*8Mx#`r79! +zha{lB8IM6UqzXlpXSzJ*Osowgen%$g`MfdxtTjRJ_Cw7r>TciN*K$aFql-r0qku-- +zk0*iMc5!|JxBGGdnh|Mvxr?Vv1m&&av)r&G9WMam(l<$f8Nk3 +z6_$8xU*7I*9*;hEl#*Bh5VHS9r6k_UR$bm2qP>}f=azcIpbgk?}+eS)SHSM@5X=k!cZ_Z65Q}<2;ZK8QN +znU6?A`={A7q^;-~6f4v;Gz??{G^h!0@H?3TX@^`dQuMS%b`h2!)L1k;7yuDli3{Sf +z(ghhzlp#dwm#~$THqKNCl>%W+AK)*AjZy2v+nHor2sAmm&;C7w&T4OMD>p21WVfHN +z#H0$R$URb(ol}x`Y&JR$f8`<8EqM|hz +z6H(luQG$rnwjEeqU9Z79JS%29Y?1C$_v7Fo1@dtw>(g@~t|#YQSu_8P==hKJFaYq@dK&K<|qyL}g2+1~ChxOZ7tZt6du8XI#) +zM@unWZXeeFe66bfldzi@S~G&Vl!<_s3ZYX +zy6CUrD0GD~pm2D$O^pD+WmJyX_p{CBTBCG-MA=~#_Q%Z*%eh(m`b7tI&ky;VqN9cU +zunLyZ`C)m`rv1cHu*htnm}+E(RWoLJR~grOE87jOyBsE}7jf;c=4dV8`l;P?ASbvi +zk#Xc{E!hvCOqw|1QJ~x2gD{>rL;FYD!5-V}L8L-zeilP2XD+Vv(3E~_ofUM=WI<#` +zt)kT{@eY$u>`j1v +zpN4kTBm??XGOAmjO$_m%L>oCOum?1@nWSZy)6qpw^|3_<(Zx{?zA2ysA($Vy6HlrelT-LypHYazUZ~BxKFRb@XeKF35mT?QX +zx3;yRS$#qt^yCsiJ6l7#Ee2e^qzS7=f8DezU`7%9kmSZ_3!^GfGQt>7Uc@yJKvDL> +zAJty~P*Gz_J%+@Ph#+^U@OnAvR%vZi9H(90q%(M#bYvsntbk@qO*tOb05LcKC%v4B +z-R2su$()wvq>7#%aXjA2g8u>@4+5n1{u($IyLE1@pFDXoL+Rx#$CGN^ +z(BLG{*PdPa66b8R5^2jXy*>8aEy2m5ki3>al13^Y6*N+Rli=h~Xuh06Q;$?WDu77C +zNq7=MZrDb>k^mH=m2I%x*ydIxOnfL5FDFohh-DiPd5C-!e +zLhUB{x$#FHiUJ(6e6}_W8Hs|Qlr72>r1k)8i9t!Fq)x00HdCBai(ZFSByIUq5MJEr +z%UT-rGbS@4O}=Uhj0I9@t4B5`KkD_?Sy{D={zr&_E%xTO?%cr#IZdp6#yDsT$wKJ> +z{ctVGN@}af=;#PQC30vjtC*h3G&hOI%1Unnd4BQY)?kAxM-VU@h!r-tz_9StaKTjXn0$E5R>`@ZM+W!Ma9{-9@>v#$ua#kI +z6^XpUq7?WcoIxK5+r4jgcz2^eEnuGd#c=FKVdAMJ?jorBi8vBfgW#3G-?0llPiDQ# +ze>;}WaUG%J*hBg)#+iK8Y>JItpC0t+Ile~%h@R%Q-9B#D3-FenpJ0COPb?OQR}j^E +zN^jl73IBvrfFtf%f}A>s@&63nj+? +z5`4+8F60_zr$;<ROUJsonf~HaPm;|YeoQ7Z&)jS+Li@tFQyqzQTZqrH9%g9%_5?2sBsx>y7C&o>T5SlwAp@5U +z&nux4zqpNMs>{TiHma0dYNH(AD}Lx1*0wM$k7JmF8f%LeUfrGLZ5ap~Eu!F*b)Vg} +zXsYS{6&By9N7IRpx!6uvg%drSu4-{K*;BS6`h%32`V +z@=YBwuFA6+NP+|OW!2?{WOFm`HC8`tw;&t5AE;?uO|ei@oZSzN%^( +z%1P~tFAF^`LR2jv9!9sjjj2q>J8j!hpwa5unSv*0fP;m<=6X| +zcPXF1l(=uJdf`4u8~1D?AhBY%Y+8kQvHQgT(LzhakW&Mtws>q)zH2x5eZ9O>R5H5E +zlFWrv$v)1M!W1?swfW&o`L|P1PNnTy(p+PQ;A)`0&;wo;myr{&1xB9c$C?gpuz=Yl6Vvf&c|)Y2L!L7sP)7kh7ZE?j+ojsdR? +z;1INE+>W_(1y=fpk7OM#^xAj}HBR!Fx}+bzu9Nw?sslOR%I?)x7IoWtU`G7IcP#a- +zkVMoJg#2au@W1Ksdp+_NwgbFmj7|A@4Rlwa8k7p~oC(x&KJmFrbA8VPPj*bzjjUL# +zl}v<4q4KX480WXGq!R*a}Wtg +z$FP0Ljno0o-ItE7ZlN=30ev6iwOdBMGk}8?-OKpDGG=&K{R%!pN!B9uoh)9h`bilS +z_iE!qKQgz0o6+bsgr|I+bKtS@Mw97Fw{E?EYX;JDYh{u9WS5zv*%ACobFGea&bCx}>@Hw1_0k)#_<9uX;O!^0=8J$KPAuH$uN!9IAW53 +z{KGap>9{sUwu~7tcWUAUk_NcbiD;vtr(%hdIQzPpDthJjUs~M){?K7#@;a{D%H8Wb +znM4;Tl_x>sRX)j5=7Nak?8vtHwlZ!VH&hmhjJi06FcSg#6|CB*yO}GZz@1reRh~%> +z?70kBQ41+$I}P=p2|%=#uibjMsSGo+W+>+Ck+&DK>03QS=aA~gcE>d1?%Gimi9Otk +zH*j7vn(lx#N5!68p+U#tlsp~ar=FY*^b?>?HV9AmH2%%nNlw)?4o}g=|EFT(BP`Gj>@-91l>$KZOSEIFHu?-wStc;01Vx4Oq!xrf4YvV5?Nu19X +z!K6Ar1~NqB5$5Dgvy{3mk3w5d_SbT-hPGw@H#?fY*7*cb>SlAMPN$J{vMN2fQ7Nco +zx-@-6K}5H+qq}%>6KV@CVg-Af2J7K}C-I3iYkCRgbEApD=T3qO`ROzm0&$|5ro#sP +zu!sq7$%5O<@8BLa65(3!es5#5gKsu?8z+L^tDU=>o9i>v)A#S+KM9V8CpY^&B$}SY +z-D}go282>U&-QW`G$ina0Kwyz3W=$Q!G-CUkttDm%#wzLyD#D5jzQ<6UVhslud9_W +z54K2{W!EJn>#pY_liyUXhcepjv@ +zr5q(!x^5ot$Qn;w`WSmphkWd-2S@P9-pS69um7ZbWE_3&-q_G{4Q{tL*EVS@<_hUc +z@#Fgoyum{##HxW+Az>Op^t?(B?GmReR| +zWg`{-qz#Z2&>OlAj62r#)ON5QA@&j!$2tBU3+E?bdDf|$EN&YAs3g>Vz%hT|(B)(1 +zp_}fwV-HQZGHm<+*ueeB_;(Ggag>S5`y;6w%MPrcH_>bK>U1VvpLjd$+iRE4-#&j0 +zW@wi-Xn!4d#K$b#*Wb?I`e!?at0dNRU?XhYRWWo$FqH&EaY)Q64$IIB4RnvLX?=Aq +zHYzUZS}zV+>xmAil+C|U?y~Svr@O$*!#n7Vwz`b_ed(2A23G+g|0(lD$&b*5tftm4 +zf(TVz_?wH?a=2x6wW +zh)jSe<>896MifdjY&s)X0tu~MW)tA~F3?t`!L4`c<;USySB7b5;ETOJFJ(s=mAS3y +zv~GO4fuI(zQohrf-!ch3=rO+z5ldp85?jM&BzY6;j2ZzohSZc{NQ7CIA~F?%Nw1(w +ziwup&MdY)JKDAW%i2cZzU%3q5u&wMq>tZImTZ_wm5K0&KXyy!zmIQU1HTW>Ne-A(Z +z%QiojKhE@%4PN9+YtPf%ce#6yO#m4#C^gO)r)4?GBni6)qS$}gE*srh>T+XH;IcjK +z{cvNV@w1j2vjouhXv88){?f7vq;1ITR)kevF}IcSP?H!~YCn;gk&X3%K +zq&RU2ONNzeEzU!fKEV7rD-^b8`9^HEPLNp*n8&!qe#uxVx$C~SR41+q=E5<&e7QeB +zbeV0~AqTQjWYR98#FPsgaGiOCIhM`gCDzkr7+a`&gD5`7BWGk*a*`u(3%~qUWp4lc)PM}je8MGq*$qmk!h44__;%PAf5!QI% +z@)ndOW&f1(m0tl%VLFiqLZ&fZ@EwG4_FYEmn;rP+&aW4o2BdL{DQ4B^Y)h4FcvQo9 +zyXi39*nChh;m;INp2zXrXTt*o?J^Ag{JUe`1^T<021D=lbyz@A)N(D1Xvv}RDBP88 +z^l;|N?d#W6$z!szyMe?OZ-8MssmsPG3C)%}QhxTCuc|KphAB&@N3Y2Q-tZN@(^wHj +zTHLA0iQ}-#>DW{LZ~QBswHE^%&?t_dyt|3aUi)9JRqw&j^z*?(7%1usSGt>pD|X%* +zaw6FbOIcEG9YZ380iU_DjN57l$h}^GVZu8TGqLd$;INoZc +zi~a-vrU?KeO&yq2S8p;Gl$F@J^Q4!Ca?t1kp3w}#vye$@5+HjUq@lt>bsoTM&X#*gEB +z6hF0`NE5@0H0mWVU%QI#1@P)#N6R#52**tn8DN +zk8WoTZ&gI*%FFhT%So_B`UDk2BF6bI7DcocpIlvAz%_Dh#V7v)Xpt+E4APBY{-!Iy +z$ZYtRNef0$jfE$74FX^vrms+ojppg;X;ocaS`Q1w_NviLfV-LizKg= +zWq4!|E@5Mv&I(I4CLi=xR{Hnfq_l>P*_pgE==Iie9q9&YOWW!hw79y5SpFt0lgo1@ +zq6@_h{{?yQB`&2(FhavTRvK42e9MrSj4F|5@!_|yre~{3?k#UDBVbvc=xD-~(aW4-)zFsPPZOY;<1^n@{deo_;Qy|DtC} +zNRu8Mq2ZG;<>pHbi02;1aZnx5Wh1|#z-HR=jI1e&VmI0$f?!C-{2ev(8g4)m@S>Xw3lsCh04(Z;4f@hWG +ziJF656_@})a)?scS+v7LX-9_b>HI4RbN#&vt0F%7I~8F-blLWt@g>;k +z3fC;LqZpecrZYlfs7kZObF6qHZE=^yn_bLN1j>aP1I`H{M_+~a3kZmxDQgu>mFypw*5-L*_$n>gs6%v=xtvt>AJbIm3 +zrMxil*WnW)iDcL$5wS?m5Y)FM8PwX`_8yRs-G6*wv@KXp}LLukA!y`kkp3EGh)Z}Wz6*V2uXc$eJ +z{=p;9b@D);1X1un$IU-;tq*E#H-J!ks1kE*{%Vhc;v_!GcmC&%6}hzbnLRmsd+U*S +zt}EokQod4eR?dUMi@ciaJRR3rvW(&~?_%Hkg9qhRezyDOHWT-aN)`QbBlfM;Hi`>c +zg@dMj-`Malr9>&?KCkaus!oie!BKk_SGj?m8n(u2&)SToxJ1+(x3BQ`9{CD+5_6Mk +zvSPTSDDi7XiAD1%u1ML0!$|Q+Epn&>A$CGWYOF3Wv!|~0?|>(*hi!ivNx`UxHK&2l +z%ayD%CdyLZe_HY@wo<@o*usO3Ju4Jtub|vg{b3fg&>^OMy6u?_r##A~OrkI4&#Gd}3xF*>4xsB8rF} +zYiw~r9SbXbshVx7Gu@f1dQnUrBl+jv!S^QKg&IPAN4^8Dfn$%_WqB-UV&*MIzkI#B +zW-mK*)Fz`h87n4&KQe@B?-Tj +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 +z6j(fm_1%`=xN<2o#!p*F`Cx +zrixCesIB?aaU6US&~kn5qviFO0KCjPe^xXk>Lw|R1-Vc*;F^kGvL6(hv~4g^XW=fc +zQYy4qx>pSArjkN8DyvLLtR(6^^tbAE4S6V}dlNl_iC;jPGL%b=T>%4z7L|e%%ZDcC +zR{IFeR&m=6#Bj+?C)c2-4%Cor12?Yq26>G3L=kc_ya=(cBRVMdRr6IdWpd*LNQYix +zu0XbiE5F>rhHoou($jNQFJ$nbrG7Rj?@X)@>MmsMJ=utCNLM$BXnvsT!yZ7SS>3H4C_kXN>C!zJu?IsNk}otwp(F$;iv58UMiM;{D-0l!vG9{s{Iu+pfbh7# +z1Ym=?N2_R90M?6|rJTfOtnM)SFgbNevJNBXLvhVeeGpqJUOn&wTci#t6S;X@gn7;> +z3r@#JIc-rK=7+d$4_H!8K)@>wjryW65~Uc)5^`@dYTzw|-mvczpq0W=u?I<)&jGGY +zm<$YBHboVMY7}u_ +zoa=85;N~gz==cv7<)w;G{~-NiJb~_Fx{8xZ4kK%yf@94N1Y->nMwEa|z#%^PHl0K+ +zsA5D`?-O@TrHUFs8m-X5A_RIn#x=?`_(nFOG|M)K-w0Itcjv4Y^Z{(q-joW27n$4J +zTfVc_xjL(U!4_flvRgEtuz;W4R%h`NYFcmjJO0?l8|547ubC{71{x1@*&LrXv@|m( +z`BoJ)56gIYZnM8md)lq*X}j#x!pRv;UrsfQ*B4xThCK5CKBoC5aBTx&Nfu0!tELiBAKT{$9WmYd#%KaB}nd +z$h(97)}6bZ9-_xc9OCi)_AFXR-04{E5WVueZc^3bogdp*lW%sWJ3qdNyd2u0`s+L0 +z!5Zum{c#!H4fuJeD$Ta!Pe90S%_&P(hL6M?Syht(Q@c<;5xqCLs>H+V9TbIjJxx@l +zHfAK^1w)mHN`kfCC-K4@Lh7jG@TSqKl;<_1sN=48Vg#1DA+HTbt+m7AfBVSSEuq5( +zdubXiNp1UB5N=%5Wn%_{dT$tJs=VAp!)#*5pD2po&k93ao8pg33VswA%Ek;Bx;Yd> +zAaB)A+&bif?bBu?}D(QU) +zF8zrjF8}uiE+6(xZqEgejpbqp`1^3!N!@TaA1(bMSgb!+#O1$e;PTOPI4aCu +zS@3Y@R~)l8UclE-&Sqr_L-3^Ui}?Ac4g5Sjt!WiWve+ZgB9hSpMlKDZAf$jY8!g;r +zMhTiMq|gq$AJHCe8TI5d}*LA1F))lE729%+D<+^n@Z@Jze&^X1aKZC<&imsh-R +zeAnl*)nr2*p9av|_qp06txnH_sO+KEnq)DDA$H&H&TqjtR=A|`0L*3@ +z%~a|wdKO-K{C4+FW@(&hK90?h`6p`EPib;V=1>@PF9x;r@nX*6slwsQNAr_qwUF4@bBzR +z+Q|G=##Gaz)y%EQy<47)PC{nwalEYTTeo|IRn#HEg-herY7~=L-x`9SXkAxT2*f+q +zx}CM&eOj)0&cR-58lV##d*nQE8%4+24$LOcI@xHY`q{MRwf;sIp+HJ6bB>n2OWD-_ +z43Xa_fMbDJ$1V)=ew+cP-X@5g*0)viPMqKd|m=0Y-|3&VqTC-jI%>#{2-h0WTulwuL603lGYU3gV4yvUfRN$Z%J6YmW@q1qzaHI1Ndax +zs533Ui!hLjS=wrt`Gtx)Hz6gby#%dz&B=R@V19;_pe}~l50_>y+?c|)^mTtJ*G|P# +z6(;1b1#E3dZP|7gMPkRX$(j&6-olr7G3a?g7-z6+eEvpWoHY +zHaMKQc0Jt0OaT9jw|S$cT?;ppfqopf$?dX&HKERD}Lo`bDWga~*#ZglYENPj~Xue^3=FKseDuLCU +zlxjnp?s-s?57j=8gGgMjwq8_Ig;X{jHL2y +z82dgz5<vu2!6w`5m~?e9p-zU(8F9n +zpwq(p(93v{ULF+uL9z&v3T1>kd+;w2AxWLuFsI}9vF=x%HpZw_lr|8EUE0?@=vTz_hNk=lP*#Z$T4b-Zz5 +z{Iq7b<8R(+onR9YMP?yzUuA&k%=46ff`82X;P>SnizB6Q>6Q!{0E4Ptg4QHM-w|ms +zP4_mDMn!(Zd@@MeL;)6Z9&KL{S42G7H}-^VLhD=e?M*z%_V=4p$bqeP-pXXRHVT=Y +zFTuo$NqRK{DbUlCfMkH=hm3Ilr2S=}CTbiHb#0Gr4GrR-7}7fv-^3?GqVlhZLdAR( +zCRTdVn*sRQ3V5r4U$8q@h}6jN5CgXRet7K`uMhbq>PA>+k8*p)cA5B?hwM)ww~hw$|oJv +zbilpUfaTN_rf=p}V7je3ANB5QbMOQrkYU(^>)$zl>&Dd^@6LenChhInZ-Avz +z_t|8GSxhH7>$p#c67X&hy>P2rvd~jyb=f-BCaBuTG-kg8_eUy)1d8@sz^J|01Q}p<~#ktM|2CdI$|E%1q$V6xql;rWgQrv_>1+o^?p8g;J9d%L+4`im +zk|-Y5Gn7H*b}2(CE>*rodEpHe_z>+q7B7uc-WM=b +z>g^=Ms=u}uueB#XzA|wc8=H5`rN$MnvVH1%C^4elmCgTuK9YO5Y&Jk16^y#i-vys% +z_>d{3>UC4iHw+j#_u#NeZ}d73WB=mB6(IIQgnf?UJEkgk@Y`j4b`76hGhu$aaktms +zbqoNN>D^v%rB^DH9KC$?+NEn(=Wdto +z0Xt~gfV2WFJ0@`N?rtpLLRYZ+Y(EZTHHu%9U){rM+?IC_7_*3dm?D8b<;{z-`Mz($ +zlCs`AaO%LP2Snnfo=nTn()93j@0m{9!J)bkNdHwO(yIE$+I1q5N45U-w>#JKVxR*c +zUh*r-5tHU&pxw)>t36moo4Lp91w2f~nRTfOFMl!V=#(L1#yI0>rH9+X9y}_7V&-y0 +z^K&(g24Z6Y%2-~yd=xP9#EKR3Cp9JN1oVco;tQ%{fcn77GCU-f``qab28EFF6F^op +zKL5^Yt~l)lW=Mo~O=B4Oi8VwRGerCjpdbYj8vaHV*d0NHQ=vx+d7a=|u_wMwDM3$A +z*P(7m7inzmp-*HBl9p7>7LhqqX|mO&_FfWdWn}Ewz0pVUqpBXQN7}IK?N@9iDrTTZ +zm+K+kqgaca%SAMy)@_8o&MjN>8rGmsr0=TEv$TS*h84hpf-(}j!hXA;9|eVJLx_6n +zZO!e$MujciUtw#2OVO4G1*gH0;&2f&>0k%g$(n$-j#fG}B^7+=p{eQDt%qhF8y2f{ +zTtgy0#wAL=-?3bO?}*?d(tLS+;#9!mF?MdGGF~G(G;{;If@kLSQ*eZpiVJCX$fp-| +zxaH!GDPNzCcZxZ2GCAGF^3mu6QB5K*Zy +z+epHoLe9Up^4GY6yB$f-BMG15@7!JWB(rRW{PeZ`y?dkEacGMtHt>`O|N-; +z&O^_wk{Mj7X!aRNIek;+ZtB1mdAnnQu)0+Ak@=m<wSFX)1E*=4@z^o +zR!fYG>DPl2=XXP&hq~hEh0VsRfohB$*`JVJI`CEEn{vT +zLGwGP??TI4g_|II)dkn~t6M!tc{f07MtjB>WdU)_euy4PfQ-if&6d;}=Ie4&Y^K(iGw +zwE*$0Z37`1Ak!q1in8o0?I2jN7c#hQUnWgPtzbaq(WXj(rN@GFthr2B?=u&>D+^4n +zW&9j2WA&mhY`JcEkK#`oDXX$x2~W0KZGV{Nuq331I6JU9sS>u}@+2G�#0Z#1Dxk +z85e(Pt9eSISUhwwjicHmGVluPdBO6-89P|9(KthWv^^RPEvDPJ!659plbORwA*Q@o +z-`~i}<=UsfqzECVXhc!hbMNvrz9ScjPf`;$zizy+=F~%Cz=n0!2Me6G +zsHuBm*%P}3--qC0Cx?mpHuzMS>8aV}4MsyuUoBwrXNF0wScjZNU0wnIRg5hGFWoaS +z?Tn{s9~oI@(`$~xxX~qGgU)?7Ep=2sHLUn&gjikNBCNl98FJyPvnbQN*IU^z2C{Lt +ziwv$#4+3mqb7Q7+p|^P-Ezmj_Og7jf6jLpz`RRYA#i{)=kQlaMW=BiAwtVNVr7{;b +z?z33ib!?#YkYszXp{`Mptixu8wVfWlHtvztBzJx5T6XMrK7$>Ls|x!va!p?wy(Zh7 +zu@?0YKZ8YG#AzZ|awR)%7v|Q{ +zV=DBF+ch;Us{L-FunykWpyyx$fjG%o+l2ol*3qkUq)Do%Z#JPFt^>?}2GF)?3CBmm +zI!ami?jwVia+C6mu_DN{aIB9Fh0)Z`3ka{b9OQR0_=f4!)DD^#4!`hjZ>=}zuAm=e +zUH5I7@k*F684c^&Hthure90kLDpOVqAo~z?iDpHV0Z(0Bvs)0_Q1(Nxi8k*+tCEHV +z2K55JE9lAXj8}Yog18WoAH&6OR}P4pis5?uB)1kVW$n@p>yfa$Y4P5I5c=KBQNf9M +zLP=HBB+|T*nBC!;Rx~uYXFB2ecTuxR7aJS{VZY8)o{^xaBCm +zBK*HM1h!#(Q?}8I&LKMUc%t0JB+Ek&92WgKw_%Do?$J11= +z^`ldby1AT+9CfOCx9NTwzBa+>nbc|2fmjf{3gU5XoX1y2oY0EshEw|&AJF5oii9Vg +zOn8%!r_yBk>|G_d6GPL?_Fue%izn1H({5*5+33S=h?|6_Qt`s-6H7_lp9Hq5%997fD>3N1w!(fX*&D<0d2@L8Iz5;+!Wfx8&FBG<3| +zboz+jk#<;y<(!hc=-*iEcQdZ4&zPG%Hi}+ToexM+wxSpYcHNg8M +z9FTOYahsp4grtQ5eu$ik^C)dOkDLmcxJ;1hauG1Ufaps7ylqI#Wj)*ky*q59$69p7W1K& +z5uF_DPMUT^*bwFokmX_C+(G+cQ5`{)@&UA2|>9)i|tL&3*XN|RE?(!%t^iQ|B +z(2oG<3jUh}kX$U~I{WmCifMHyA=|p2jlFnMRYWg0w~2)JTaoY)N@6GB>MnK_l8B3-!MFg6A`l{FOm{v4W$h=Lb{tdBHjyx|HD>X*#Vd&ZdgZPoeh_9H1h1k +zH(r1H4U_|egD?}g$MWLN)Kmve523)D2dqR)|N3t!@{}0KQ&!rT;mBNkM94%4iKy(x +zT--4b`cJlrP*MjwP`kA2J=8fR(^Ba=DJ-(8(Wmt{T9Jk@j9M3rII`inG0*Kg4NMIY +z5Fi8D8I;oT){a*L%&CCDRhzgkqMhWM+2fWVS-NxN^2CY0|m7u0<}MKgWuqG<9btEM;p=>g%Gi=1c)g*K(rze1VreLJpm3+ljqJ8hmmD +zwS6yBm$*y^n<|OqiK|MqCs=+LogOZo*i4f8C->Cq1%vc>xw`KOy2U2y1ebqeB~LL+ +zu*CTPvW<4_tVNzgRgXIS0^}lDvCz+Mrj-oCcNOxh=crxt$+!Zpky`uT;B)@2=f7&t +zH)&G#f$RjSU*wRq8T8iauB5fv{V +z!oE4(w)4MhB-ezrGhxarAfqn8{H|2xC3zEXH{lRt94W<7b0n>gpOQAb!ou-aVJocr +zj04?)Htg4op6J}XI&0*M`;bwmyzCs3bQDX#zPQA`uES5q +z_wbH-mvbSq`Y2Bs46?Il3lvkEf*5v%*313d& +zuuNWqgy}ERy;dwYt+dIu8qJxM-|*`=s8dBq#?lTV9X9^8~<2? +zd`Rma?$lA_$%)7CX{#Ot+Z;+RhZ`hXNxJ~!Q=qqyz+T!}W~tLeBKG64-32>lwcAP# +zuO(+*%%rBVh1vI*`ZaWZvJYp%5eRB?F$%xcrv5!H_0ti;xDC5=h;ZfqitdGMQ{%HOiiB&BWfVdPb98wSCX +z;lo@u{uPZBU-3@Q))BWma^$#3Y}=|=fEG$!>Q$1w1dF;$ZNquJQgzK>2`@+Rj_Y%z +zJmz+gF(r4ihHZShx`lQ40mx}tqgMKS810Kv&W92+U3U}{Y3YTSB&AW=ymm3not{Ci +zVd|oL^&&5rBCbP)YUQq**(2xN6W_kPxo(a_zgn7kLOe*C@!w+BCQnOeKrYnU8Zutw +z0KAJ^ec>G97RG^RZBarq&#D&0zbSP}Omp~>G$9uSL&s*6!jUiOH48pb2K%frLlAmQ +z*qUdmMexq01ttQT2PUrIS~d<j-&6SG5NpDJ3iet&FgWghz23e;9$ULI8 +zYCaG_ncWsBCFG{N_i6zIM{08$KdjpA>HKL?&7~62jNC+PBcf##EMH1s;UPxj66h6e +z&|Ij9il?k(e>J^>!%2!={Kh*a--7nYbJ(A_53a$aaGn%>Qd01EmgTc(p3RqM5x?;p +zc`2h?Pv$vWYvB}PUe_<&s*z90Vq@(kM|5Yr=ap+! +z&&1KJ=cpl-$h?Ee*D&RZ*A8*P5EGe*69TAAz-+ +z(Ax!edSxQ^8+`oYm02E&C)0N9l +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 +z?XNy(?0MKr3aYDDj>FzV9L*h?4Z_@j1)7_Y +ziyhu@t(h!4pn)fPquQo%&WGIyo4SWXc8wPmcJ+jfwg?0DBtWY3Q}P29D5;}bx|@rO +zD822>ayyP6`-E(gF)5quo6SJu1W}z>7HG511M34{SOHs(lxS^ys3SzrIYc#R3X>jcOv=Sa$L&+qFr}S5(sYcq8r@4|(R;Hrf;*O9@&z7aeOa`X&s +z2vR|)L`hcn#dHW2k;=77@@I5l0pogpL-QaXXG;;gs+k!)=-UV9#Ue7C{UU&v=}!^2|eXR(ob%tTWP64ZbX6KYFK)b^D +zWF8hGJfpC!TfD091D>zz1UjUC`gI@~JkUx#8H^4o9@S6nXue@O2A_E&P}r~4S2*aY +z&zhaVK5y!fxCXmNQ}$(4HXsjg!`%6AFn6v*k}Ken(PAhOgl3+gyQX +ziWR8v6rw}iXYvAfTXV>D&dMj@8_!U!jj#>-I+9kD9QMhM%M%Ke#!)5qjsF| +zH;*J`1rP2g)-9L$13G%lS|r<`*V(1MouLtrJVO8wwuSE;5cNQp>O)xyzvse+`t$a_-zAgp0Z+s9zH%E|M)Lx`v5 +z++xIO1L=55_&o6>xt7O66hFzNUV!(F3SQ*kuA?A|%B5u-+HDIcEve3aNoM`_Hqck# +zrvO}^4ht^$Gns@53pidaz##XN&F;v|wlnqCVg+Q+1rqrE+6Iuch)`}dk(z2%^euYV +zp=eULlv51+6TIsU3^`6D{V~Wntmss=BGf!WJyXdi6PNoa{8aDY0V)7?+tSqc|+DD6S}=UAe2>YYiJzKzKp +zbH1={Eh?%}WQhS@`*v(Z9-9Xq{A +zb?=SWPrX6Kz%B~=a)EpO_Sid6zhvv-sJ2;vFm4p6x)X=p +zX%=;DHE1G1xp`6NzjZ@u1P2aeaJGzq>h=TMcAC9>is>nI8G`r +zsz&%Ca$T2~kkRgKj~krlov{%_mksqFc?P1l^Mx9CXy(+lyEjw@+nDY2*t4lLsD9f~ +zDluo$OO6_|{Hw8N;TFn8M=uErBlrpBA*Ilu+GOX6bXd9h>4{5{@1t&pi4`qr1cP#o +z#E>fXRonYS2G_SAJ)n968Wq)@aNrBN_N6mfyY>aeF7`L;h;;4CsgihJ`ixLTM9EsJ +zOU2h~#F8xr&non9FsY5M^kX3Kkk(pFonBa8g%s+W5e*biG6&lw#rAt +zH7<{h37#U|Ln9-WdMAAgmOvR;oT=TF-97`86MAJ^&}w$qDFx0T= +zZ`N>MyTqcw^uX +z&&e9j$#kTq7D^(lil}ZD%0$I-4<-%&xr!I0f3?Id`pj +zZ^P_$4XtryN<+r&3$~$=VHo4d3aS3e^QB0@7 +zm{cb&(UU7?ZI{Y^!-;`aU3hrvtEURj@4@q|8vsiRPk-Se0ud#D3v +zTrdYQK_%z&$jDfus?kzm)OW1Ob~XlP$lcSSpA+C*BQ`Psb8}4ChyzLqJJ$F;Y7I2kRa;+A +za==AhMhnbvlKTv#jkE&xb@24o7X(nRik-_GkMJ(_e +zI$nPQo}>3&ET +zK@k*-peTwq*rsVwZ1+Ra7R4eS16?HO6h)KnhkR*&zvns6`SZT#eeWej*_&-MF-6|{ +zzUMsWInV#+InSYj(QeghB1)x-fA!f3G>~Rx9P)A*C}@3YIs!c4U)nl>TtMdOSEHwk +z5;1J{F1{@yB&XB#`Zy*)Y%4X%!M{EeE0@11#p|}R07t7D{pA53Qrw$|xj;p8Xz)1O +z$sb()r3CC)2&`jD05t-j)2blNNN9!789ZUUqfs>q*rmuBJy8O-F~asyXK>yg8$|kJ +zWl%2icmYdbl8?A4C7^*HdJ!re46Bl`_IUd01j0mUk)*m$N(1HWaAkh_&-zZtY!@Tk +zq`I(jZTe^BiYi!%89Fz!PJA(*#fkx23ZEk8tdKR%l3B2XxiT&@>>f*(jZ`%L98Oi_ +zk?;!zB(N;21^1FY22mTy4LH;2-~&2+{EITZht@Kvc3zRMQRcBkYLjx0mDU_`1rTDD +zNTf?(yT%rEtj^J9MS)xPIiT)=cG+1%uc=P`%q{c?Y#_zM9Pkl0Ng!^F`plu!yhgsQ^HDgJ@vi; +zg(7WnF_pZWewp)01=blcjFx#8zItJ|<#o!)0gs>iiJtQlv2|AlYkOTm)B+@ygzEgO +zTPIsB=_8p6siFQC{uN#bS0ItEHM7Xxo{zv3!5Dd7FYZIOLAqSzVAcE66zjC-DefSi +zJjA;vQ45B9xP3F(0w6oEf46Ak`!}Asa_iQOTN$*F>(Y}|My%9^dJ6;r3GnZ_vb0vc +zhb+9;BOKIOB#KGkf(r9b48S|d{FL$o +z)ZXE#5$qR_I8gU%-3xsIBA+43AP@{D#uhEaFtUUTBp5YW>^#V^6RUQ@>IqXlE9u6U +z0y=&(Uv_vYyV;oyUM)>-N{4hs<)?-7G+%7uR2Azs*1csLN`y(*4G-!m2P%}0uO)?1 +zGMDL*QHFiXKa60v@H*8vw}k4GEh9Ay{~7)=1B%L2-6plf)v@Dq+I222Ez|FmRcXuU +z8^i-;D97(fsF8n>mHE9EsZp)-Q+gZBgQfjoNJeFhS$|PIB&X&L@m{>wfKppc0vdu1 +zM3UJr6s^GUGZ>6CDEMRp`6BkI`3`*#wXtq{+?@y2&_luud@dpL$*#ta0)7>yVjuek72>{;kG(L6bh +zJSK;>XtwBvlP9bB?fEOX&8-^($7M=|rkxTw9S>+mJO|f(^3hk%A1~<8u8Dqcl{hI6 +zzeNM5Bs5yHtVFR*RYGMsl3Je1tW%J>O0xZ}Yn67NV+3wK8G=R}CAP7_7`_SPs8vlH +zmNNvRA`{SKA=&7gWKkv)Nx~eRdVr+$FXS)P0Q_7JZIX03vyP#&ll%g~D-4X?DAUu5 +zCkz~^=sPeMuJ7{3-cXK4SjyY*_uMwzV{~x2xdht7?Q4@gIVs7bXYi32pv=7H5OjVRW+;alW<4wh$m2CLWh?LvVWqM-jvbXGdSXH39J>7WCw- +zyvxwxabz<^1h*=-0gdxXXM+5Q!Yt+~!C3JD%M^wldg*kjiL_I1_stUL(DxBY8pnar +zap`2_ha0Q0J4E|Neh-5K`)wJBUl2GW}6%W1*ySmV+GdEm99s&S3 +zHSZRCRB<5gW&uKzaS~I&OvG3cV-K_AH*-H}-KzEpnYt4WrX&V0V8Byr^>{-w3bFLw +zk%E!7x+y?uT#&?J{1>b#RR)G$In(3GVx$`Iwt!8n(&oz0%8v_>heRynC*;XqRQkx` +zd&&&*GSS?Ja1+!A-p^MKjk;AJYofYs`_1Cf`lU_Cs+E(9Dm>_~nsKjU^}9x3+rvS@V8zK}I>o^zSW +zc!*N&m4uqQ#=n_`eLBFxNPK3I<(Bi;;BLwsGwQ3BlP9qAZaF>lB!ys?q)7EjstN60 +zW+lZ$g~G|7{kEvMCQ46tO3pL*Ne4M@v<0abF`pjGDO5E@ +zqpPiF@=hA +z;(JvkdewuCL!;Z7>3)y?CNn8FIXrHVU +zB40!?eIja7{!X;(Px@{QptDw5nYP?jOHs>j6EP#tOWX`b^;?KF8ab#(r|Lv~E$Z$$ +z%pN?upv{9nnel|(m>=U!G6a*Cv?dkSs*XQgX{pBVv_j-g<;w3wjFNheIi`5RmB_E(_8WHb^yYX@ca7ug?QXqOpPx@TJX= +zlYKR-UnyhY>qCxPmGS#4r#kw3_C(AEK2sshzreLE*r3Awvvz;x6*o(JXso1 +zss2{tVR%6!BY_OhV7rR)jw7mM`5SqIDud+Ua}4-hH(LqaKBs9LM&<}Sz!;)w++wn% +z9#GU8KZ`AL{JJ>TU_?ua%uxuP!AOE6$q_m`8N*B9Ryovh|3O +z0k??R4V7Xf2tAZn4iKwRZpv1h7THC(skBh#uGaz4+vS!A)wu?E2^rU8fOupZgOO}t*Wl^Qehf{VEgShS +z9F>t$s7+KG8^bGWb2szGteUz?W!xQ#iL?%kbTA@}YkGovM#e36*$Sg*%#!Aj&P?G( +z;gvJ2!%qAhb^^gbXb;8|X->O>H~iL=_DtA^D5=lAPy>gj*Llv8?b~Ksh;Oun@ok)3 +zxcdU^U=7V!GeK3LsUbm-DX~l$hMJBSr$Vt}2(V;~@;?{vid3!^jtv$|AXcNAWxt9NsZUn$IfllH)%` +zc%SpciS&PC3ZbSb3oCn&OKT}FP~W<`jOOw~+v^c_A&>yEXnL~K(Fc_D?S-S_SizD- +zDrD{x-VCT^6s%?av?_0ZP`qW0r3O(Ke7I+)mN5)ED&k(H% +zFRkrjsGPFmW5HKOcKaD#yoM;Uq$8XDTm +zMZo8{9@*fajlm8s|YWk9}O4j6J>>S6AzfY(|7osJe@a@RyQI0W5qz +zf~;o)cX-fxR52_;ZjeoEtdC7MKW#6e8&J4ijaLGKKv?;7w=wcY<83;b62-`g&tH>l +z8}XyLElM5AjQ~1jkXa}y)6&L>irtVIQ`yB4XwSsj-xfsqM0pmL1y1nTeY?CQ@BK=O +z>0S#yG1g}ax6cx{?CP^GYz;8ZLz5a;m(=4r3&(M?1Z{`q4Z7PrLtDyFOOkK +z#hg#T@wpWoC2cRLrd5b&7$kfyM&qD#^NAsup}WQiusQuM^71w^`7jCHGM!GYxnwet1s|ezjFpG?h^g}#-V__ll%5D*& +z#fP7|k*fe_9+H6+;^2%>2+c&gAH+#=cQ^i0Dk@7B{oDj{$oIW=gE=M?u<(W`(fMk% +zc14otCEu9^u<>)61uIPHF|b1>$XCXX0CV&#(#~XNw5i^e%#I&z?+xwiR&x$u3(hnG +zF+m>@DMTJC0Dg+!iL_uLk(mfVmE~p{uAGq{0S@lK!k7VxX$Y3$qClqjB*SZOb@ZJc$B?jZowZ5=t1Ykb55 +zztQG~4KF@moQ&+S6NCw+eG +zt{>`|syo-NhljBy$_*uOO_fsPsPrhhmZ}w19}$nPV9-x^SSEzPKzvzzVGS{xvz7t- +zjR7Db6P9Ju!NOclGG*r26U_naduX@G2$}E>oHmv)#xb*S`8~n!SZ=%gG +zNm@I0<;>M>FjsF3O?wcY2GwRDeqXHGDxt&O;dimSXlxwPm1^V$=nj!VaxPnD{_`%c +zMr!BC6cu7h%&=eI0iMfe@~$2KN_MJRW8f{ +z0V0jKgkiSdk~~k2nD#R3?<6T`-2+74QD_XQcH(=HWeX +z(U_bahb8k~RNB9FX6mCWndj#*I4OqdkC>df6My5RMM#90I3p!QzCYd!3SJ{(iHi4N +zpO|TawFT$yBnw?@!T++>PwFY`44_9H*D_pW!9EpcWgWL?M#3K`psYGXvJ1>dO#m=G +zaNB02^LJ+M-BCw|_<1SM%sf8|&B-Kfs1>L7Q^K#dVD`>vxu-W?G9#alAR*E#N5z&j +zu|?EDLB74}W-uGm&xF9ngUoEVMMRO@nT-nqMOoSx$R^uQ<}R&KpmCOg$M=YXhDOgK +zcHcwgNW(*yf$UX~xt20=z5+achUeT2RTa}XEmqtp4oBK&UWva4y4DkbLBkwO2A4CY +z6;}vfD$No$EY-UG=>(n2LgGG} +z8DX4|8KNgkxkVYsc%6D_(4~H1Knv}Wn&$t1SQ^#zMKU60ppMpHlSO<D`X=spGCwA$k#CFJahb3yS!U?m+q6GFOSjRGd;OtC;g%bE}wDB_t +z9N)tw%=$5pf8n>BopCWsK`N2L725o}Bw+nsz8pd61*qJQo!O>Kr3uLh#R>Tt#gY0* +zOr(qc^;1Ht2x|~Ah%cwNa%W~e1mi?clbOlsLf(EvGTXu!%>oo7WLfx_vj&2(s#`b? +zNR@dJ*74)*nn5t-OoK&{8F+YJo#r-^c!gWL{RlfS0uRUMf3b*8hh3SB@$wtT5{X2JiPa3|G4@tly_ZfWL; +zhJ_ohbDbV=sV=wBo}5?U2%l=4&0h#?Ll(N6nt +zPW>xv|Fs!uT7VEcgjXmt7}0X=lRgBd7bnQIHKb*zKhQIs2ZZFA6_lt<2A}68R&AP` +zP9<4}QY^@Km1GQY@dhMZ{_eN$MT0Im9g>;mqsncob{dIb0u$@fjFaerdC7pG?q@Vj +z9g`f}X!D^Q6{#*$FO+5@B`SBA{}zZ?K3gx4M?8>@@THMXJ-AzbT#3CW1TGfK;EL@H +zm6#S*(zqniDxb5YXIWAl!Hp+U>yF9sZIahUkI31U7}GFVplVNp>Gpl~mZ>{WR#uIn +zTT6EDe~j+O)!PSm-4Pr*FtR3ML#O9bsu<`Tou16Jnmg4c!3?2@ON=MaFE7rp8#Qzb +z8epw>%P7OVdPJdW0!p^B8+#xbygE?(s#IizvGb!nr=wL5vs*aC`FVbY+wfYx!^A7_ +zGnA^WXr{b`-7~~X^_;K30%40BDj0G_xJ)Nl_s`F)&5l`as@=+|;D4UYc~K%;LDOd# +zp8Cr&Ii^z0fwtQ&G-gHDnJh?+#)KkSms*X4VA6_qt=i)$JJMa&3P9d=p}H{DmubzS +zB99ED_Gd^qbNVFiP<9~+kRHlwsuA(S=R6N`ge9tG0M55Mbn +zr?c3TNM42s|Di+;Y$HQhE8J5-0x?oh*~XuookmfyjGU5NO(T*>a3M8uXhGTFR`7Fk +zhhLZ_weTMT9 +zdS?(U!NC=uVnPr3E>!&$X +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 +z(@K6qIp$mDA^yp6l9FI}*p +zO*rL@%&Z8a9{$0mP0>#)pQ2&j?XIn`8^g%@m2+A;W{Zt&8#TokdbW@gRk3DEgXyTb +z$kcR1nG>E24dqU|ODfe|lyI)5AJ9JBB^*&QCT8UM6UTGC=Z--FQG2PD2u7qD2O6h1 +z=gDbLJm2wi8In2(srJa3$s_Oyi{9L`i;tF?jgcx>ZW~^mj~4j!(tHl;R|XJe+pA^R +zAg}L96BU`I4i|vv$BR2LVkIl?#$Xg_jPFEZeHm6kX6n=N)55$a+Ld0Y$3s)|U`xNi +z@fss>x9yx^L13)m58Zj1+tFEBMJziz +zF&k9`8!Ye|d3+sqn4jzAO8YCb3CF}-(wL)7P2Y=5^cmQIRgIxZ+Fk}AX*pToFf$^Z +zBGw?2Ayp8lx5-G8W|J%_p(dP_G6eRuga^e9g9e(~(4a2&l*qDY0&J&URo#Q8tF=O_ +zbX*+A%)S3UXDubk>fU>-b +zzTz5&Y=%K3s9kaK#cyB;^?F&Opu+?l70-uTG@9nJ#wytDgwHd@#C2G+AKO>eRb;OC +zPBrzd^^If>YOLS*Kra2sT?>F$h2!K-y{OlFw}fJ~(BKo?x5TcjUt +zhn)DzlQ$7$@3FHjEu6Sn3aO5r{}Ki=$%T +zr)-DTE@=AEpRRE=Yn2 +z?XCon=$J2NW$D>kPnwh~qf)ylu5rVjgr~A`^#5r?xL(h>g3T0BalF9Ptd`7ZkxH&4 +z^;U{aU$LbH_5+A7xmb$ml*@}*QIHX2fAS^ZaWFBq5uClZ5uA80L*)|`I+KP}MD)beX=Z@}sg){B>w36M4Tq`wd@jnSo=+F3TSLt(o>~(B +zl)GEt1fRP(Av9O{WJQj{6Y9lueR1|di`T2O9hr6h?uOR+n0_KwYW}$u +zYG`26@WTc=b0Ul2P*ttG!h1x!o4L7GueY$a=x@WyrGfwPhE`6>Ee1l#r^T9gKF2jbb;Dwe(B-X3Ei$;r4<#vvG35(Iqf5 +zOV!MW3Q>zcFlxa7Phhh+W=~~Ny=#GJiz=wBWR9mxq000t8DY_Vl~(!n4ed`J=*N^! +zeqRdqjV-1^?qqgi7nCu32#rORJkRv*HOF$X>piJ{_fTvl+A@Rd0llJ4pc@>vEa;VR +z@|ZRRbBZJgD|S4G-@lELRXdFyQ$EJ@&|Hv{6IP6w9N@*hc&HfeA|`?+ROcGsewUZf +zRF`Y~db(cB9AIU&WBhj>c3rEjfPBg3$>EN;V8vUrq<*U#A8>VY-~*w|C3j(5?LxmN +zQG|XQML+IwHfA&d9ggohx8u{tf^svE|5oh^)`jx@pzpiTx}@=9=3;v_NxmYgUCBx_ +zQtaCyMz?2x=X%y^cd0X<<4fLvrzhjvxKfHqYQ3;mho!`#l0)B4KjibhmF8S)thKPv +zo@?U_ZHC#0F-SOcV>-1aohT=8D0*vB>pbH`yTxG$1Xw#@XJw_&fQKUd^#C!o56z|E +zC_meKh^AyqjSAcy5*eT#XmY^T<7&G*7MsBlH=Pv*n(da{wSR5r+Opi*n5})k4LhxP +z7OC8u$TYpbi39keoK@MR-d +zMc<>?olw8AwcKYy70=tQ>wXtY!qe71X#=10VJ-LJNR>Nj4AwsbG*`xW(Si;-tRD09 +zn_}y$pa106P%w?-4Z+D#^`SzYSccqwGqVO(Y_L5aGtRN^uKSQ%VN5*@bV7Bvytub@ +zEyWeG;?2B%o9F9M_U%30C0yw_3w10+CyLrm*$CN*U1_W4Lj9`GJDU7@E)ll_(OELt +ztY@vQk8r#+gP&o060q_@LbcT_Qely$;J5GLIE|5-gGamkh_CzEpW$1tXQqE@=%{~a +z%TYeC5B1sF$@a>pD@Z@Lx?5P2vJG4jcM^QswVkYZe9zD@((!D)Ld!0?3TAkMS3TBD +zv>$I?fq4?LiQ(<-!wOT)>rV}RGc4$vH4m~C;0#z|YG}&8@XYwk#MD&HOBe7`lq$oX +zsWrxwMgZ7kLwSOIG66am5VPWU)=c(FX|nQwyL3RytyS#CDWv=d=^}6{3J^Uv?$7Iw +zoRZj2#o$LXgEMZSEzsyv1z-GG8C1HL$qC?!ArD~XRBtToB7!9_;CE@~cyCTG!mB~v +z4**pf2h@a=R%+<)v4m&*fW{|v18bl7ceoGPVu<1Gz>%ZxcDnPBAiM+_p{02=MxcC` +zFf|UTyQ_jx$$^LJ@L0Y$x&X09z-~9AOjd(~n}z#rG-9tFQBlgSkB$$$+wD9+YoYa! +z^R-QaW&&(`$K&FlgJfdn&VX#iyD8&Zr;TFeJy6*6&@~UqOAeCvZsP>bU>v>;@+V%* +z(^y5#ex54{gt}czhkkx=1RX3*lMc0mL-mn3H(hgx^j@3w5FJefHZd;B=tC3tI?y2N +zB)uylPaYSV6b}a-B!gr2`X*teM0yUAb&wvf>NEAM7H(dLsSMIE8B?dG+w}9aeep}8 +z+vS!JI9BL|@7SP*q^Ue|Vww}O2M#JGJ%jC@=q#=+Evt;J8Pl$>{p2CTLX(63`M&~&tn-?Zq +zxW0%rZ|rcbwr9;WY{bH%v6vby^1q0|bt0u$Hd!DcDM-PPd~UMaMhl$i+QSOu?!}st +z#)2LxJFd9ado`fGkGEsPP#H~+Pnv6DZPyHI6JmG}d{2ZpJRiCSogtJE4 +z)cK@zN~%~2h0l6{nG#?aRH+8&YbAiD8Y8~XbS+4{sAs((O$$gN2B=}9YVeMgz?;T} +z51rmB(_RCh?ZXYgcwJx&^-hXDTCofxkwD`eEhF%H1I^CdiI-Xg-rfLk9|&+{&P)U; +z0jx}FAMgawC%6N1xfZO$1+W-G_m^x&_qjjo_67qUsbQmAh2c0Dqt+~^r=6~uK;`(* +z@|)iJ$A7^VwQUc_5Sns@KE=IelaPj0!<_GV7-0SPJ=L%f#TuXVVp$}{TU%et2xIOyw! +zczLgfOB3WK4LvknA#dI*;VAaE8o&c}EY*QpvC14Q24)pRH$;U!7%w<5P>?XU*j}0K +zG`o_rt^lCBSpWb;wMH2PeB=Sv1X^O#dQjg8ph}lKjpur(<69?iQr}g^R;=T_jKYh| +zFTi8T9d)~DPZ8o+vU2x>8}1P4G%js5ZOBytz#SOj;eZy0ij$_$ao +zYDgcx+HNh*gXwV6i_L7se-2i4jbzw?NMP!PZKVxd^Tzp-b5rL-6-VE@4hx&NH>Rb6VPsHVi@7M?i*%eCrYCLAUI+aiT%5hVjPQ%L$L9sD +zEs3?&P{jQLI67$#y`jQH?MyzYS|_$eQ`YRih`0PAY*Wx7umkJ#ej5irkVB>bu}y0Y +zw50uRNs$fd_h~1lQ?sWACp)B**7VR7|Jv5+@#!lyZ-m%2wXAWw;v%`M*N^zZw7WWY +zejxASFz#vB!=6+aM16kP-8SqpI+NA_d;kuxU0p${PGgK1WqECZoe{gOI_K-hCI2-| +zt}CP@66ehV?otSSTi=$0%7c?)5koFOi4_zRU@ZHUy#jvWj3|!#P+P2i`fwsPHNGm +zt}po_^{)5dfG9y(z+lex1&?qo3*nh^at5s&>K^Iv;=q- +z0rB}ose`Xj1e35UN<(1+PLh~a_}lDee{@6{HnQXog{kEr2($3it#zjIYz6`&juZlJ +zWEBkj&N2igw0YE=tAJ0NDWlA=(L~J!fPO$zA2#lMr-lsn54{gO@ybQD$3SX+rtLQu +zn-9_8x90VQf^D1%Y-O}+r8b5IrzNRewk8%ri{=(bwROMRT`Y&#L{eC6_>LN(}t&CToD8kj`c@u3X2VBLaf_0GZ0m)9H +zJqlZ0#tM4-%;dE`I(k^_c#0+Kmcg7kxh=`p`2`+u_m#U6ST(C^i0a+S@s(Isaia&V +z1J0;cHw_g2Mk^^b?QHHI6Qu|~A`jhe*33;=LJ~~ZMsa9!Pz39&G^V)&EWXhiq~h%R +z+{$Hk$=uaUyePJy&FHZeGUo|_pEF{48_9Fo_AfL$_tzmF;yWxkTJ!{p=r-U(e4!?T4_30{Z?Qntc!F|JB;5d4l@J;=8Y`u-f +za5X!@$TBXXRb$2i{jE+bEDHNZYsMJ)aV~8OcRxf|btOhB)wZk1K{UWs6pz;4;8vkE{sdBT +z@SEHo2X{iXz_;NorufamT)6Wr!dwWHh`F;lc>AYc7~TSXx$wvn#^H^^Irh#9F1sj( +zbv6fy+kiwwpgpf|{W&yesbTaz;wt#GkAH7_e}}!;EH<xDvLXZD%2Ks!e8DRC>q$ +zXxK5M^-v7+rZywhpbL%J$VNgi##Jjxd`5dKxQ4tH?E8BX3)ZMT9pQ~HOXH4-odZJ4 +zFN+H5Gc13g=yc?Qe`9@%_tD@wFZ|J_VIaS;CbsG}^=$pRq#R`6E&ZJ@d_f!C&I{{V +z_CTBYqbI!fAVKT4^IZM9G$=jre*W&4u%?af=v(Vr`9NEGudsacHt5lq*rk_6KVuQX +zG(JaAKEbHr!c@wsYaT@Gh%SPzi5@hVr{1T31aYf^R~kUqNtGY>g_>QKQX22S9x~OReENwS?b4+vD9^H +zSHFN$RSPI<)f&iu^9z7{T|(Ed@62H98)SPJ+}T`Cs?nEz0k2mrAfqR1cIdah5a2hq +zM{f+c#6dRcHe`JM5|NLg1@1ac5K5z%M)(YGXkm(`8mN1ccD8;qj^0JSNG=b-(M^^} +zv9s$#9~od5+L}Gs4~?Z+q_U5-vpqms^ssnDdMLOyC6?Bg)qu2-{>K%*(ucrph^CsF +z*#z6eWB*8Bo1dOXI0y$aqFH8MQdqw6s)YF4nmW0w`XL>ep<{CYss)0*Bq7aLn?1=i@kSrtC7_#*wWnh;@3-L5o1jbCH-ey`i@o{%#fW;-!Meo7A_S`+x +z)+19q+iIY%^V}zT3^)hTZX}>I{EYCjU(7SybqR3g-f2YdXlR-dmgs&NKh91Whu6bY +zVT5f2 +zVWvRohB3=Rw^A#nh=|~`d~Fh~*Sl-W4SJ0ykV!+=iMuWMRS(gVbNR0Lh`AXV8e@K+ +zjRxyCYu6RMTD@ksSRN4u2}x+sgB}rfGDW?<6cW!r{=Y(X%2_1I4J^Cq8bm#b5ny*!f>hHh_qLY +zx*gX#=w|C$qvU}6xHMq7fQjTzGIw$xf2p@q*e`rOSgF#Ol`1W-$=Pevxbg60kF{+e +zBY$R6Qht>r${IB})ap^Vb=vis$SssL>8TJ^%&|=se)EGo%Rw4F9Q>ZE6v)?QYKqrt +z`4A#-BzXR%RXdh}i|+mNbAN5RbH627929(ar0~yOnzqnc#PQK8vOjIro|x$j{-dtd +zwQ}pKCDMyGOcX&X@<#RfcJGr)J-!PEC*4iC9^z+i@^aiNxGse^9Ap~tpfJ#u|C$Xh +zDyl*$fXo5tr1`(oO;uB#kF*RoxLB#IR7{qMG=^W!UegXJFc$-+YMS8;Z<8I!7;JA) +z6f@7=!e!k{(DO`fR$|yru6g`;z_#6L_0}|Xog?n++3E+b^6{*Mmt7r%SO}oV{+7Y$ +zfRLOX!vFm8_C)iXK7G0h>leh5v`dwh)>A&Kr=|bSy3COYO0aKRAl1% +z!JpN^#d4||^_Vb(D(n6u?waWf=HTu`j%;FPF^4fnG};h_k|n;*{g4>>j5@Eas11o` +zCuh(PldC_FIs&)v(NmXB61!25Qlm+$U%Vi;NOltdnN>xogfaUKOdg0#wgw!?dudeD +zS5J0spvg#l<*UPY>qOz+@ak#K4>S!W3-hqd$HpsqPA5{iC`Vx)cP5HQf2Khat*^|e`^_()J)MJB-jIN(G- +z)Guka;V+f1#_i;WKuB>N0616xU?8MV7BV^;*n-Gycv({&LSD&Mh&5J$i2n!w_cVX_ +zy*wmaIM-Rm`QGJTbSZQFj!ug6WJE(bNr_2cH>uW>J+@R1k9w0y{tEw!mF|H!$X(>RSFHiQd4E@tzuYiR#Tl9K$%@;hvf3zy4aVneqO{|jIi#;vg&w7q` +zM@5DaKYMdDc*tUw;v8n7Vrw+4GSSViB{47m#Mp^<( +z?qy_|G{nv>4?5jX>ZiHt$_PoWte_|P{)?giTPCMqqIe3)RTWkw^Flt*WAsIs76=?@ +znwK?)gvDEt@+I6@Yt_VSkSr>o$B!~&W46cu#$P97b{`mz8fCq5yL0z03i46b6YW_BS^h+MB}g|n2og1|x|>Ni!U&uU3AuCRmB2JmEUs!@OS<)}GA+^5(oQfm +zH+%m0+0)0*y$(t8!?iZLI+Hh_ooTJEt$err2uFm)>SS9n#tcbc+Tkh0Ew>L(G?(XE +zi#0E@DA>+m#xGtKV>0{V0n9iq0kq{IUJ^)8^s;B^?Zeku*L*qq>i(ficz766`H4rN;2P%{h@k#Z^A_+jx-{4)bU{lhTIO(}GeuI&>cYT^`zn?^p0I9eMRacvG8Z +zBxoO5(Qr7#L2hJ-#IDa+z%w>JNpK$D1Q$$?L{o9D0dRGKyP`^Ro2laN9w6kN*xW^r +zRUufxcxnX4^ARp4g*gIO@|pN(s;2e3G9;u{3SSz!rUCTi0D}>f{cVic0hwJwFooDM +ztlhwD0W(~Y!Nz#=PyO8bsfJD6F%3N1an=hHhlG%31o5T9nd|39>tSxvDffjUTJ2c< +z$#5*~8~vVKcN%Zp#Mt^a-_olnxq3buVxgQd1iQ +z5{)%YW8rW +z3Ys$FVOZg!e9<(y?Fn#^VlJ4bJTqL8A1J42?nRTl+s3TuuPpUJS|4fHXDnY#o6 +zhJoE4laOWO0caW=h$|BqrkAu~w{^eWL6!ZKBqS0E^*xP#k~j&2M9i6~>oifwL(kN=YFw$s&6A0$mB?zbmJ9kpH740dN9VYD +zhK?+4tP=>H=2Bj7Okj@4oRXCfq&bHEqYSx1+BRmJz4jcb36V&t40?dxPD{9(dbM@L +z1Uf82ahp8#AP5X=QG_{#J#@qp!W4~fe=y}AS#09MbHoa9G`G>~be8!qRfdS{2IRHc +ze*;PEEq^*7LD9@e<#XWg!A%`Iu51CXvU(3@8|9r6hZYp5RN~gFTnt7}D#cQFS>Kw& +z=8_=Hq*BeJUP~&EC_85murW)YdZkw|qg3~3u810iY^0uml6Nu86};?Jx^pcb<6S~V +z2#x%H>KTPkDBN^D2}=rXMtTnYw-w~*G`^QVMcc!Xs51f}z~(`y-6b}VZ7-UsLq;K&&SBchDCeM*j0fl=Lv%pC0Y)IXSYgdH0{O74_*^gVj$ +zc}6Rm&Q_|bRYEFRaz<%&AhVU_p32x5daG^F_2tNp1_Ciecxc+_Zz`vi<%uP-Twn|} +zGUzP~N~C{WPozP^v%46LXw}*fdLs~^P1xeS7PKs+EOYa!pcw`O&7x~#@8szQRWiv? +ziYQWH$=93}0HUWNXT{iZ{UJXTVu +zf64E-)2T5@!;u~I|3XBT31!Y;Ate>Yq;5Xj9~0(xE;>z4c0|_8_{%_QSWXj1JOG#G^AT*`X1m +zNy=jpp@1$2e9&54Jn1#|l(zFS%K$bfj7aMCBtb=cQteoEYhd2GDoxl5O$OnY=OIGj +zh~d{oOx1>II?_JfI!)gS>wrm+1T1FP+Kcli>D6HcUCwERE;1EwP-b-?s*Df<3FE`0 +zxR07ijNTi?LK>H5FZWjAyxj$IyDeDQOK{>YoteE1^?=0-hFvg)g5Tz7;5%xPRcDLW +zL^XZ_Vk0?G?2`Se0+?6u9fgqEj{KKhiTJNFKZ%h-ho4XwvumS9EP^eotQZ8h3d_&% +zB!v|jfutQWI2J5aaat5Is+h}fnMGO_lUxIzkBfR01_~9jkcm-7ESS_(0jA=Cj8}B% +zQiaC1)d@4_tbg#1_@n9|-gGU#773p!BXj-S8SX$(kSZQ?>;D{()4;lc|2FcjieZbJ +zP^_!@LxD{!5mv5{%1>9CQ(paonG<+l$EHB3-)#+IUu^!A!#cw_vD4eh9asV>zN4;B=HOK^941QaSkqq#gMXP0jDF$@x#Rop*-C +z-Swj9rW$kbP1rtPMy9LVTYU)Qi>1hmC=Fg~qB>Yasl+Z_aFPPUB9n}_cvpkd-CaZA +zW?r4|(~XHJn5kJ6kuZRFg`Hz5<}lcm-duB~CEqxqxzcGPVk2G;x_7DAvxTXAdmzc2 +zzHu9DO1%hq51Ymd2Th~rf}Ca*D1pslvzHOa(ZJ?KAq^8!KB_%5R@lyW+sjQ9UjsRi +zpbKs6=DlX`-o;DR(yuS*;{bsauEov4NE$pUKVMFOYE*co0MkOJJxD=a-hyvc(8zh5Nh9PS$3y|m4^;twu83VW*!K3Ka7kwAveNnjNMG$%CsOs~fbFyh#J +zD#nJmn2-}iYyFBvTqt0A%0#oocV}BvPSeQmjf^d}KWUw;Wy5duS=&@(vgJ{FxB$&H +zr+(`&`d*(|i`%Z07(B_c=r2NHHhUcuw>JO3rC5R9LYC}xm>P2gjMZ6` +zj_-zDrHbQDsZ>ly(cl1Ce=tJT-6U4h2xSxxwUVtZhf&`$BXN;73SgT!>;`|1p>Le| +z)tn5{j#`fb=L+W&i>qxDi9O4?YfP&R>4J8;?kWW; +zG`MI>nmFpUmfC0zj$lq>WO#A)o1Fga@ZHsKe$)OsCx77pP6$}thKD!bT4-WU%7dT$ +z_#Ys^)ceVg|NX{@#C+O_453Cxj;A%WlJ^9kIAK)+QK+jF=hA6%C2&uzK0&S}4VAg4 +z$a@;@Am@~gCF6dLk1DVJ|6E$+QXW`ljGW~vkISp&v7RKyes%pE+fy?|ie-Gvx`!T@VQK6?DK-1}3~SzvD(7N@8ckeKsrZ}hGij~=uPa@{;o~XYc$6o}!mn+B +zg*ywY50F8E`v(QhXq^;o{wt$-2~oY~zt7LsfJBcw7@)462e +z`z1Z^t^hVCIt%~Rnu&68#0pE(Px>`CsTo>PAW_IS3q;*z%;nYgi5YoN_Bv36b!c8@ +z=e|>efb!f*e#OuM&HmIR2t7~sJ1Cq+u7qQ<29ALp0l#*;61!yNW^r&G>lV1k-eLKU1a~xKr1$%*dhR?valt7_2>sBd9->`AF1qyKtGg8 +z>eCi#UxSb(VVaSgqQ)b@7f{RzKd!BXT4A7&oG_y(}Ns$fDs`C3cx2 +zD`NIJx3sl(C0;d1L{%5(pE&U@1K- +zJfcEVRQ6Yj#@!H&KI-CWbNi$Q0At{&CbCU +z#RZ@m@MdAE1`+tP&WzHOM>)Brp*Q`u5N`5#d3{QcTFiD(A#7|US^e^1i!AUTW`G|I +z-~vckq((=IjU5^eL=T-W-IAImz5J=9qdwX&TscJMAv@wAE2B!wsVYD_>iIU^cT%-G +zg5mdPkDCIAaM^b)y9GZ$%b6nm9&vKV&69{M@9OzZI!Cje8I)F)inE=AbX+@9lpT3}S3Q-;<`J+FUsOcY +zGqcS?K(cn(^j9GhcjjYzrn8d&V70mxdr%IalT3+`9DR6(UNpnh^f=kd +zVq>YTrCR7si324_1+qV1cVehiftrpoXd7S97j*0mp{eX?JO84BJ2fq8y=BfL23##G`KScUy}f +z4>^rUN<5N7%9b5c139ogiKW`MGXly3?%}Au!o%-Vel4qGqKhOHTj!cuR4-Z+dptVG +znntG2NPKiodicrT*8{P_Wf-#b=4Tki8fA4N;k!~wW?ycqrn$SA<;F0 +z!&0rKl~ptVcL(_9T$9(5;mzC?N34?VtPWW6yZQ9bX^*}Vmwpd~pu!>_lIB*BXPMun +z;8!J`=H^3nkZue;LE%+D{UNn(aT_`cHF2M+CgX9fb&jYoV>q154NZ-aK)4&X=12l& +zqK7ccsP>3zi{U9k-;Cu{U(-I%qkUylAD36tjI#q2ouao5hExRX?=<& +zYA10~IX)FbtPJBJKPqWe4HyPjLK~w!`a1jrX_S{oGK=b|+87MAVR#C{6kgmuh^Hhp +zmr5HVZkYXwo2m!f5hs_ZHgIZGdidw3J(`(T?M3=JqFFt;*gD*;2KfOG2$c~&MK^1u +z1Lr@x(B!qQauzlJ{w;Zv<})oMb4M!33f~)jo6%b5?;VoOWfhI?uy5Iw2jvwwGq>yZl&D)O$}D4OQRG{BWlsRf%8zYy(F+I5({f +zC}LwC)B|B~(8Nj$_nWC1R;KBT7?%0Tt{BCZup=>s=7c2E3?KUGUbfcz#^yNMwuYmF +zU1<$jp7Zj$=43FQ0*#%&$TUHy9kO}vf!%N_q|dYmv8XtnKp6?_`ep1`M*kBY=g)7( +z^}_2h;gWodgd51TTrCM~`e_eh+CZ(o_$&{^IiO+)8#I`CbVSJqa=E-pjx +zj)x#WTMjPGhiX5IV5A?em|d@Qub7^$qV^ZCN)e*YY6%ci8j(Q(O{RAJe!;?l|6fseQ9mkmorOy7&(yEsW2+`4t-l#m_kKz +zFMgcu6HSV=wpr} +zsZa}xgKv7+<(6(<|F$w9N=BuV4GJkxCQ1g(0To)yQ#3>W`{nGKK;w`uPX4<41u`po +zN1|pt>`pjCdh|2d0~NFsCTaw+2wFM)FM&IHK!N}EO>|apLK;U17uzed9UNk=0{B;k +z*vFJzGOwXFBM$ngRhpW4wYbCE)IplsUU9svQ1d7AYFf@5R#r3%U%xtjd;A*mPL@dP +zHDQ+a+~zClxhyjk^IO2A8r^l8U$LG0%+lXv#nT^v#KPtMEN6@%^}r-6&MU<|}~wZWOuMPXg4+WX8=`>@t}Q`LIJ_7dEg)5yp6o9rppdQb)AMc6wuD6Gz1H5j#+N~ljoaEE>jBZ!B-f&U$k0N-~D +zhxS(+k2*LgKXUesH;#)G%%P8Qbz@0Qaxfg07F_I_At5w-c56Xq`IiycWk5(zDC@E* +z*U9CYkfO0rNtb^2p0}|ZL{T-pT)>{!j3={FlPSu4#iO5R-;Aq+^YmS{9lODwKNWt0 +zHuvv8bGyCjZpAT(Bk8z*=mU{-T)n!;;mvIyAmG*1#>SafzX4&uq>8FqvabGDwfC>f +z?#Fw-=OgYqs_jQ!KU=f$=N*}?N#B6_NybW(JTH^b&=?u3n`JqXs@#!s1qVM3yw6?* +zvHT@u>zBc(27n9}A$E61honX6t%Y6PGt--!c93xe$)#SQ$7`}sScYz8ND=WY341~5ogbCxcms?}3!1`I<)4PdNbhrE37VnV!xNpMRWD2S +z-)b#jBkrN#0{}F7iybk$DrY*4V@2cG`MB8)cUvnM8NnbA(J$qprr>+-8y=sZC($i5 +z?{~Uwv~i`(+ije14F$o%0!K0aHM~tq<2I=XqR&B{o+`7w!@MA+i}dwkOTst#A$McQ +z_W{gZ4(J#D%<#>{rgKo7IQBps!W-0s6rVJ<)DK1pfPZ_(@U52ge92FF$_+quMxs*e +z(?74q&_N8jB-c~1!%RJzw(!Qc;wGr*qV?%j4kk1Wu4_r_i$BM+0W^+RK9;EoCL%v{ +zHzMP6G3vIF=uBsDHruT7^C918wa>~yC8S`KaO!Lg&MlwUVx?H{WD$yYweKCHhFno- +zq7vM;PlOsl@GhZ+emhDeX3K8JENE +zb2aABb7;r3?8J7Nt#`qYk!#>0k?{2R;$j|(&8a{yLvhzKze-a{-0kq$34r)4>h +zV1fcuzKgK&o16+!bw@6;=x35 +zwQ>HU!DwJ1l(oE;r_=A1@Sm5#d5JhE)-D=E5mvJDN-|gjpy*dhU=Jp4sziHC3b7(k +z@1q}4j1Raxlq`^u1}229Fs3hh(tB#+VtxDP`FY|VHpunF>a5X~NGe85)G$x5%5-6P+Z9*3FAeUOQL_B6+ +zb74Vo>tF~hwYuo!WlA1m3szemy&nw(b&$1$loHlDjnfG3XI>vEK&JuA0NtvTwv;h? +zAu_g=?oCz&s;A7XqI$Wa5Ei(ZOnppoM$0IO&AEyfomQ-?98n=o09YfIMtD+R;49J> +zjShy?tWydyh*KlHe*`HQt4AXRy9kBEVuo&E`GCZ@B8sxhr(s34D$|qIg$dV2-8U`Z +zJsZmbqxAkF!SDK+V=|p40;fR(fi$9GGy$T*J0~mFAn0Ne{zY=c^p|$9f>0 +z>SdeCW}>biHZQ+Smb^-cu2;@oA%@*Sc#p*w-N6Yq&XZPs(vK{UBu4M5#@2{N))De^ +z9hlU{G6PI?TJAWd-K4UINV7vG{GFCsLsEB?NFj*-!j)w#T6>ZUqYbg7xUji +zwrE<6OhQ3TX{Vdx(S%PzX3t^0) +z7s&FTft7fNwYi&>dA*1!KG4Od%E0MeJx~wjhsMO?GZRx&Y;7|!bBD1*HMtcIf* +zst{#j$-xRf`1>0UuZ9w=uwpuv8oZ$xq##&Vpw&y>OXVOc(}D5XG;c>Dm^t@J97fF( +z&2Mgaq1^V|V%56T0O*ritgF9T?_&S6buE^GHjVNIw2auwwv +zBfR{aH1P<(*?6Q6K5O9y7x42`a5JF-?b_>$exq|S^oEg$YO?CC*ICx9jM}LDTIizw +zYqW8{-}T~D}S*1o%QrLqJ}h6@zqCZ(eZJZjb +zYN`|rQ;(##4M~WnPO^qLXD!AF4*ZJ4xZ#O@_Pl0NEM|EZ^!j4 +zS}mqgBo)GpDHS6yv?F4?=z8+l8AON|3kohe3`nI5n}11*LzMbs&uj2t^#x^{^iOM+ +zuT=eHkx(QNH6BycWL!1zN)$PcoIH_CYz##Mkji2KSL(jT+ie?7#-KMy6Ip7N3SLwY +zu~vsfc@T;aF|uFJDYqW0|MT12ZNY>_Q8Tn46kzohU(31%A>={ymLdc~#}s5$yx6$v +zQeMHSOMHilOxS+luqvCj(}t{gcPngSaQyI>{v-F19--5qZtH}e_Q +zkE$MYrb#?CDf&;pk0T8F#JhOnU2*ARr}3j}7q1~c3L+nCOkAAkbkVqe6~9kkoW`Yn +z2pGFNrSZ|!#VMS>um`SRypF0*y?Jn~@xjFpmNf)1)|k0CBQ9tj*Si7&{U&WC2>Hh^ +zg~uJss4JOWV5(5w0ZgixA7I2s>{l)&^I^>!KQM>0V4}xmx%i{3g13SNBkrEA;OmZD39m}!}B>>bBw~=1RGyPhOmJVw0tHU?$7`z9V0$(;ZQYu +z^&&m)wuMB)n&0*f4{uIh<=r}1K~HneryDa;2O$m~?g7(_6d$nfmy3#4pld6HQkdbX +z>lKgfz+-YIBQX1Q7}9ypdj$_G&shlv3)Isn*K^l#PZ=`i8s^H6vj8L_uelgK*Ms3^$fT}E;B3Q4$;9z+jR;(NI1N`jAu%cz6+;R^ +zB2w<;!Q3U)1w4Wl427*XaqUX}@uQ(^$L-~?uog*41CODyaSy9`8pEw6-1>~$Qt|_S +zqcmVqfK{Y8JpvBOG^J9J{B-Xp(+xNkR?4#uynN2DGKvBn$pg?Bv6WXubl5#8^yi@} +zGz%slWw$g?T*SjS>fO!}fsW)*LeU_hdFJYtB92E4vsAkBMI)b6W5WC!Y +zb8Qx!flG(-#PW~w6=#5&WpwAbm^@#tj*sRlMnjaLS`q(p0i1eWkOEMt1pw+gsKDd# +zZMTRD3OBnVEGr3~gCKrJj;G|`+X}xrGKFU_bF%2Ki1# +zbQwNKt8w#Tn&eihB;KbN-{Zut~T +z4t2Yy6(F%X(+EIgglAXhaFOR&ueIE3ucEC%g)MX}iapT*qZ>!dhPW-eDbKqp(_{3- +zQcNuvXN5}IQMPK-J#JLg-lJt$MHuhbBm~H-H3^zxHndO9=LCq^!S^7z0=f^u&*h9> +z)O%+AmIK=*SIDyxW+(+@ykC%(apu|XfZGsTo5V-_oI7>S${L7s5gl4&C9k^59D2x) +z9pp<5ul|{jECjn)`H|>SGSAnn=<&Q*A}M94J)NyMk&QH-r({)En$L#WbrfZn`l^-! +zQF!!z$At}=yg(ASCLvRV7^16tPh>5{$ZV_8q=UuZ#m*0vU#nHAw63c!tTJEon`J=} +zUAYPh<{#VOQ7bxW;I>7ETQt0)p=@F#$_cpDd3%rKDgqHJ!MS3TTAgX!Yhy_jn)~;& +zTb>7*8=ygjSY-bM&K%1h80aK-7AtJHfHU}x)-A1BaviN*Ef-Ozobe{clmZ!q${mtW +zSnzeX;AC@{_Hg&#&^PlXG|Tg6@QswJN(BfIfzjRm6}x2^%8_Es?u#G +zJ}55&hN|#WhUis+sDtQN5LhCCtFv0)kf=+zJ4Uyn>F*$*-Kk=zK$%`de1&I43nfBU +znU&ulJ;bHdtfOc3lAqzZ8IvQ`Mk_B6pw(q}dDX3>z(szZS7$QSPW4OK4*`%K{RmN~ +zoildjTpkVm&hM5(+<$~f9xVt;dsXlhHR)zG0T20Y2}yOv!Kim^3ss@VA}1$sM)0m3 +z^kAn5GcVK{vYVGJ)?+#-1f(^xYEi~up1ps&bN4P1?aj5-4&9+SC=1FFR_QTmBSOh& +z3GMd~KW3rh$UR(d)tIL+rlg`vUSYcZr%wbu1!@5@pA>?=GYEn_iEac#|78h7+}ya} +ziibiiTB7RHl&XEIMunO)G&jQMdA;|fur=i)bJ6)%1B5b%)S{Uj#gnl~lF0ND=a^dq8pBHuu^_hl1`XJ<)_^+W +za>6l~+zeWqloy;l2wL8r$@9QG>#N#V|1IfXyu)o~Efz;s2MkVt2miDKAI>84{jV(O}TDj2d%Pgv6yvbj50_9P@NnRM#gQu=m@&_H28xz50;Q +zdJy~Q$*n+fHlZADWy8{Y7XDdR5-qMv%FOkF*) +z9sQuxBdIFidO?9t>gC_TJ7h-K1PL2f2#Wszf+B9xZ6rYcQeVSFE{)bA*D&y5wu*{| +zP(WEe5>6#=prBg)=&tB|vJbbQ2Y%vVL18*1dm +zK@sc3QIYJ5L}l?y#y)jD!9UlqA{n20%`i?Mp4g!%P%Kel6xFirPAVA#ajTh57AUHP +zjgxfCV?C+wviVZsMwg-Gq}y=hlMIE7xd$`)^h9ifE2%Fs6g?=W!!U{ +zJrx^6Rx&!MeZZz>e2;I_RjH6v_&iX!iixUb@OIy`Ny3(#(NqJ=XoWKl3Zc%7y92y5 +zzUz0v2wsnNu#|On?e4`i<|Zz=(7)@x-avj-0Pw{Y>2F{oak0Ymi$JdnS`jP+`HR>ZfFv+lPx?^4{8jID%O+yqg*$o`}$tG`LY!WFGQC^T)Vsr(AC=g8C!0E{_%iN&IM`NS*LI^gyz7~(cCajm- +zOg33BmURaP7hb_Q*eo_u^B}_-Vo1ld@wu>F)$?z9R{GU-?xw_H8D`XWJ0=3v))0eY +z0Jb_;WUDvxY_$y=9!Cwf{u~Y!rIjz^KP=PTNN2}2GPV?|`x{rO!aQFkhr!*py&VJadMKn^T0^}J;YOxB->d`td +zQ}n>i5HQ6T%dz0T1ddXtiGT9~t&m4JpRUu^IA*@KlC64v?3PE9wqiN=3(FzfX|YY% +z1cLpfmU32?(re0T)4G))qh7O)TOf=y2%=~VA&z34fOXa++}QVISkl{2UVOZkx_rGg +zX+pVxzVHvxftW|`tJvt65G*Z860F)C!Cxp^XwR!jwF=v;+Kw99i@mU*wlJQDbB9Ku +ztAN>$*Ys3XS%U2JcOT?s$S+k$0HTk}dcwT#m-yxecsswMk1JNBYuQwC_t1|S^mTO3 +zPDw)PdAJXY6H4fmdi3R*;|7g +zq)ydf)Fo=>Ge|_u6Rw$HIUPUKW-KFOZJd;!r{w4B^7FL({FeOudHMMZ^7H%h^Y6&d +zAIZ(dR-6L9s&Nf5dO}1K_#kf+{O51h*C&bN7&zo`dh$YoKk+$Y|r_Xyepq +zCwiwMjJmr+W3Xh#`i}Xe`mDuqtV9Sl{diG*7$Lid14J;h +z9-_T*3mI)5!$Lx;)rA-O@JM!7hkg}nh`T0h_^MPKE|??P>P?zFIjwOB#Wugu%A8OX +zAEF#;ix3y)=#hk(2xW*&KJ(bQ5}nDD(4KF-$m%cDiQzayl1J)lPh3F>+X*!9Hro|t +zRr7$ctcW*R4f~ax8eIM6x8@MgL%|srJgt%7{1iJ-J0%57`2l`kbW@&*N0_@vk?oUp#&RXNZr#l}E!NEK+j^ +zB-1Fq?I+&ut|-aB|J2Y?|KygVeCEJRREn!Da@;i`+px5_H{#Q-0b=zVd(hzQD&W&t +zSST6ahDOt!o+yFpm-pjk9$(TzXv*d=!1m$Lxu|-Cr-r^67Wd8i#qEMq<+=>{cb<{f +zKlShZCwQ-zAR;|692g)s>hyEq2@MD_Y{%!1fr=*aQ)3xq4y#L7jl&WXeny$3NfF8z +zO6WMWs9J!epcM>p?AFUHzrHKl+NdQ>ptPY8B0UJ#HI7Y99z%WtNnaF)%(YlfgtDSy +zntQ&BnsD(vtM}lQ5`H`mJRG|e4rZU~k-a&6jH`h?0AN}AO2JLOO2zli@!lM6M1rGO +z59Lve!sCW&7@B!#b`3525We31F78(+Vo}{CIoxXCZu*ez8mNF$ENFiE+G&z<02=i8 +zKlE<5^8mYEB8U2QUfU#qq}i7T=AZ+H-L@jitOsQq&f246m>=Y6yj}kW^BsfZOhyOB +zzkHsZDBy*$+0EtHgC)$QxZNRr(E9S~O$hJwls<*idI(ib(z3WXspcESi +z9WaG$sVBahkycbwGp{Z*)(}FgX3lFCBm{$kJb6VFs}Evn08-hg9;BmaDyiuzni1Tp +z5a?J$kON6c&t1DGI*V&d%g9>KuimR4)^71)1Va2eKgjk8wifM5kKbyccTmdohyi9< +zH2wlf>POi**;;Hb(GRGHL&vF>?Yk!7Xbd9U4;O6`A!?>`D3gOH^sE{vxB&2hcqi3M +zd{6q@&{m~~MvYGY!!)}UK~n3-=c+OUmO= +zeajN9=%P}=Wyk|MX%!h+UqN@K#WmzE=TvUFdrTQN?PGJjlZA@NN+D3_>R>pSg`v;% +zgEs`LCg9qxQq`~hxTFtwI)a7m>YJ3b19o8$!tv@H&yV1uJI%^4Je`X8kh}Q$bo0~p +z(%O>ko@gDRt;7Hrc>^KvwPn=?^OC%%UR_P^o$8kw(Au#TZ!GK+kDhU#yRo*4%Tk?P +zUr+dxavUbTk%tN(XDyYBE;Z=%EkE<28<~r9AQ`?@55#N+2;;#-HbDnfUkAkR=$kTT +zsYQy6z7a%>;XyoC0isq{@fNyfPi|aza1Zsykks?iYrlG5-dh*&2B208G6-bHa{`Dj +z1rRA#dku6NS)SJhN!4)FcH^mjZIJdR)o%}rP>(CI==qU<n5!r^o&Qcbrl0(;bLH +z->sa29n5K!{e}FiMx#!z*VM6+O+p`~>3hh5HRgE1Q@7o$r%f`5b|14^GfqL>OJ<}N +zCB3OO)oUndDHSTnJplXs`BebW=_0IAKl}exF*|9U*#@s|@VAl_OLsf??k^owB)E?S +z-qdCzljl~#=#8$1t5%)DzqKwya~&L$?+4qA@|ZBOV3pZA{zdIcO!0FKX7F=+GDvH~ +zBe$y?WsN)0(N|TSX%DoP29B5>r+p&WWOprpGFF52U||IE8RtYCe`LPfyxSOV%;Umz +z+%L^OqCJH4J8R4RWH!$Yw!DrJ^TqEfjMAR;s)_YC3S~4Yp-}^<0T|18%5uAv)Y!Ec3exiY +zg7yclW4k+$s_j6qwl8aWjf!^GMENsqE-j=XB}jRtL=9cjOd~S;nB9Lk(4vD<+x!Ku +z&t(s2nbE^1eR6^2(fD +zzpmf;64te`&Aqtp)epF}teY&vvpmXo`Vdt;8jHs#ARZOOplQE2K_{}I~d`#06iyjU9?X_rO{+(3{psh1Ml9 +z3C4&Ry>N3S)YCUR%<%uWV~;wSJwmzPGP)%&9w63rueGYTce@q|U%+{=?0(FxF&#?nY1b}W +z>~^!aDBd8GdF$2dgKf}!?FP*u4ve(fdbwwVTQu~i8``2`hmgnNjlmEfhsw%kQ>+xe +zlR>Xs;M`9biQKvvnMs3dffHZgRPIK70*e{ysSXPM +zpmcd!;ctsi@cj&NudU!> +zFImNboc1Fs3NRd28sAcV&0H^+@FfJz3vEi>*!RJpt$m(AEk7ruWB} +zwa7?~3-vzvlgdA?T@C@sjk)z-ndq!M)c8IwyT*ZYJBwMsGSj>6Bivc6_qM4ufcoF1K~^5_A;qkJeog +z=6CTQqv&NEwLs%?21fG=)k(G3htkS6vdY}hC-8b#0Hu1nnVL8MU5fdtf)^Vp$T51@ +zTA9SpVwHIL>iF&PYZuvg35{Rm6nCpJ+noDkZH1L{Xl&6F4^{Ukq||Wyq14&OqvhU) +z(Nf+%TTHriw=~afujQ6efH}{Izr8M4xkbzYvs#y|stz%sF0!wY=4V2pd?GLk|6*kg +z3n#h0GE)`T_g1n#boXp^m(V#K&0?@f1agFzSvM+c9$S65qEbJ<<{z(X%|(l@D3X+H +zt($XC3Zz$MUAk&3($xa$w2RJYvaZAylg8m=IOhhFmzmr`BOFg`|MW{-3}uU&Xj)NY +zH7@EZYLyoWrM49v#t5Vlw;1}_fsx~-m0m<%?m{O;22~h*1M(}if`Ue}IHyY29#m{+ +zXw|db{#&gD2+n&hyx3dpq`f))CS5FCkwOobRL?`Vqz^5f41vFqp|dD|d;`KNWEuC# +zRVs}~9YhaC&c5-+@w5knpX(b~4uz-|_2?{hGrcZz#WU^sh;zVT8hQO}KKH8b#VwXRRhcZpsQcOZZ>Da +zC4$mrn83f_2jv%6<#QSLLNaa~2a3nGrb^nQDn13eKc1=K@A{~m@2VJEya*}|hTHhM +zFZ_-{bhA9UV=*+JM+J>9CiA;+v(!~rf^Y}yV=;PDaOsqKvQA}OJaGzUAwuGj|5~ZX +z^K7Z%Q|+G27XY+^&c0ZwqHKJALNMqXc|@s}uQ_my=(QzPuTc;B@)H4_ +z=9&6S$r1Pn>?#s>XXERE9pgLFOVjQ+xHHb%LLy4Y5C_2DF3 +z_0C<9(66|2wrX#)`3KXrTyhxcS@#~QY3m2uBe#ZIcs~sA%q<)Nu77p35{{r>^O{w*^B-F<1nshFVHm!<@?)) +z$5&RgT7Tc|PG|AmW_JSZL^?}|eMn|^h`j|S@D8PnngrqP?ZXqz<+;`(r>l5<8(zOL +z^ofV>>ERon)I5IJof|IIFGDQjM6n;{d7S0-h0HkETQek+3wD)30DZ^!9Ik1Dey@3R +zA$pTGBQ-v)Qd4b=!N$i4LczFtacY{GRYfb8orSgJJXoaRMCwt4DO_Q@iai;F9oIl# +z7~JqE6j6cc_W*5xjpdJe%Y@k}8oJckNrnC4c}d`DArLb#5FaIUMs%4uk{U5EOYqIc +z&~!jZHb4bKMz8;>K+KPx986e)p-~%m=!$uUfz6*{=02W-TH4j1!9F?)%!?GOp~erf +zj3NcnnoT=NX`7{uA@-GV>p2yW+n?@!sURLUb<@{@U?+cOem*+mz|3_QzOi+jD<(&pG?iPwvF>f_eL7YoUow +z;5Ew~mXo4f4ij6}yM=#SlsynnTDq}O?dfoET +z(IiEiUA1Dzf|fiU&Rj#RRE`@H$7LC+jjHao+TC!pszQD(^j*y6ih-jZ^o@vvNpwBe +zRHd>`2;<}lIF5Ib&3Nr +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 +z`m4iN?YP$LYp>`$DQQW9!byQHR43CZZ +zHmFs^?`5pv2pLOF_jq{OX#k4*my^-nUMq=;+(R@3umf698H76Z8Lh7_*o`tLF +zXZd&ALp&xwL_AD~D#9eX=p7Q9HIs|}G6lZ11U&9$dR8tS@Nn>>jGmv%85vz?0jzm! +z@U1bVyTLIj9xLlf1rc=2C=hRDV_ORB&+!ePYno4!QC|c$M+!pGFdj)p$Y)fAUBcmq +zB2hbd3HJ(NXZ+b(#t{HU(ptmu^&2-wg8?qC2WW;O%hz;};|B^N#)P%%Z?fGtg6(m> +z^qph3%QB7#m?*ZWO>$GuwkXD&D22&wdpFHDZ}n&kOyi;Px|dspXFD{Y_QWNl)A4(o +z`}7&alqPj=|CV{XsC*tj0GGwn86tUNY<@ZmDh!>ZOvNCjo$;w=yhHWrs{?K*<=o@S +zv<&r{|1>%s`i@6Jsz{}xpiC2;L(`eNFhX@ed)Lr4e$%n)v%iTJ8P(<7@B7AO8Z5=e9_l<)|LlFzTf;x +z-qM1iXD$y|lO)ArGW)RIYvPo)Io8nr&5>tHp7=$uwoB2r^zeGA)B185D(6TMFMhL} +z7elwkUhF2~$tpb6H2$1u2|AVDRQg?-js)Jk+us3%)B9UvVuCsFe-kRM4*&2}so>#K2XIRJW- +zZV0Vum@Die2DF!msDr{tM0JzBWtlsMzf}MwC6S-g>JrUiLR$Q`%<3=QYdmdtN8NgF +z)ZJFd0=5%6pC)y5@3!8+poP1Y;}OXzw~f4MJbn*bG-~C32l|fYK$R>HJyiv)fMmur +z&6Ky6Zhog8{|osR0%d0uzIktiBGr}psMqBWjZw4RH?8kt_COtOYB+nEm3FwDyt@|x +zWRTzmm3-neg7I;ur*4cBn?#sLU7SVW5}Bi*W8B1SS(c_p^;9~6xpae`W!9r&pnEAZ +zx*D}GqI@A@2}A70Kh5zk-@kkhVBnn?Pv3%f=1~I1zjDL8#$m=p_^*OIFHo;+MWyMS +z%!Mfc-AnrtH!JkUDPJEMthis@FcppCfGQ +z5&S<2r%Jr_0{M;5i;f{q$~4yd541I^$?}=J3xEN11H}t>s1p;*7$!LOLNfw+omXbw`M{&n=*n->(`f#*6I_k%Q7a +zh}{d8Gv39gP+Nz{?;~=EW=dOF(&X`5i$++KyZpv4jQP_sXwWEny_8MRgj#Xl%lpHh +zKak$b!c6#!2;&DfWyh$Y3;5q6GADif(1!PdN|IgtiFz8`8c2R~5qhnsV7hB2t&c^W +z=#MkH^*Ls_g8wNWx-lph{Eap0%-QMu9k<-dT*SRcDA!#<_(-`}K|GO+y4L<2K$nu* +zm?Uh~{uSI)N#%POjwt{}9Xl_#lRFagN*%oJ)>8?@WGm`ct>8ZFm#`|YZi~gku?y3R +zCPN)NSCnA#jhbV{!qaf0}{6P1AE<;;i-0!2R3-M1+mI4J)qo|->K%#+fYQy8?(IU4R_4^C>`|6Q~ +zSI>Oou@u9Bb2}}*2!3L>u`}rFZ8Bw6u35W{d6YG&)>`IJUB)v8sxthln+&sC-M1b~ +z+X+bvNIz=Zjkb)ute0i|piEvlsFOIYub=?61ZZA1v{k@+vd+vas6ykPZU&C>GiKO9 +ze~*D}OzhaMLfacaINSgy9*loP+ofMZ%1#sp9eUpy5!n +z-;GV=E$~F67R7=y6Vq`6oJtse^mvzXY>?l>5K;pGwras`Hr)hki_h$IU84{D&O+I_ +z74G?KW#@FyasKHezX3EXn3=$sJaH-!m1{61TrKo8v?s1fELLin*pZZbEO=eo~s +zK-uZP58K44!!FyNNC8kE`BfbCvE{j9>Z6PD?-R_|pM;BCU=eI*3q4QJ&8>wQRNSYkNq?u!t5e8GO%uW|GM5aatXChh9A>hO^|38Uw+_1KGlWwRUh@@IQ$Lv*gE>`o +zr?vRN$Lh*3jTuVfc44E-A(t|hmgtCV^>-PQt&WG%ZA}@C%gUrBlJudRj;+Ve&y20C +z?4;aycFsa(H6Wz7NlA2eK_r&4&tTHRrd20rgGVAz2&=L3uc)Vr*AhF)9~Mb|(%@}2 +zSe-IiH%`BeGIyv?(D}y{ngZ6cx**AC-4A+4F*ZWCjVss94QD0(z_GXfA1$1%8=^SON>Fyi0uN@(;G@In8AZX+*e7kppcy)`}M2^3=)BIKWXQ1b-mnA7j`*eu){DUkEFtEYJyp9>=l=Q?d*Ob1v=$W}3I$Ml +ziNv_~qY1c|ZA%|6zk0zwj*1pSyu4BQ!#4Vlr7p3%zg?d9QFHCV`=QU|b~mXOJPjP8%n( +zUqYkyOg1I?Pm*Y7^@xTZn@tUbUUYce=5d(Q`_Lb!r$uGi$sE%eq^7TSoydv)iyi^C$9feofk$&7q7+ya({x!dF4B43>sdcW8zF3^BA&;aj25a +zIQHrU1jl#K#>n}^m4t}Vpm<_9xe2F=#`%z6p-P!w9#Y(_?F +S=cTM_ZsSjZ(S7AB$NmR(Tuv?k + +literal 0 +HcmV?d00001 + +diff --git a/data/lng/qmc2_pt_BR.ts b/data/lng/qmc2_pt_BR.ts +new file mode 100644 +index 000000000..d8433b79d +--- /dev/null ++++ b/data/lng/qmc2_pt_BR.ts +@@ -0,0 +1,24217 @@ ++ ++ ++ ++ ++ About ++ ++ ++ Version ++ Versão ++ ++ ++ ++ built for ++ compilado para ++ ++ ++ ++ Copyright ++ Direitos autorais ++ ++ ++ ++ Germany ++ Alemanha ++ ++ ++ ++ Project homepage: ++ Página do projeto: ++ ++ ++ ++ Development site: ++ Página do desenvolvedor: ++ ++ ++ ++ QMC2 development mailing list: ++ Lista de desenvolvimento do QMC2: ++ ++ ++ ++ subscription required ++ cadastro obrigatório ++ ++ ++ ++ List subscription: ++ Cadastro na lista: ++ ++ ++ ++ Bug tracking system: ++ Sistema de gerenciamento de bugs: ++ ++ ++ ++ Build OS: ++ Versão do SO: ++ ++ ++ ++ ++ Running OS: ++ SO atual: ++ ++ ++ ++ Emulator version: ++ Versão do emulador: ++ ++ ++ ++ Template information: ++ Informação do modelo: ++ ++ ++ ++ Emulator: ++ Emulador: ++ ++ ++ ++ Version: ++ Versão: ++ ++ ++ ++ Format: ++ Formato: ++ ++ ++ ++ Qt version: ++ Versão do Qt: ++ ++ ++ ++ ++ ++ Compile-time: ++ Compilação: ++ ++ ++ ++ ++ ++ ++ Run-time: ++ Execução: ++ ++ ++ ++ Qt library paths: ++ Bibliotecas do Qt: ++ ++ ++ ++ Phonon version: ++ Versão do Phonon: ++ ++ ++ ++ ++ SDL version: ++ Versão do SDL: ++ ++ ++ ++ Qt based multi-platform/multi-emulator front end ++ Front end multi-plataforma/multi-emulador baseado em Qt ++ ++ ++ ++ GIT %1 ++ GIT %1 ++ ++ ++ ++ Phonon backend / supported MIME types: ++ Infraestrutura Phonon / tipos MIME compatíveis: ++ ++ ++ ++ Physical memory: ++ Memória física: ++ ++ ++ ++ Total: %1 MB ++ Total: %1 MB ++ ++ ++ ++ Free: %1 MB ++ Livre:%1 MB ++ ++ ++ ++ Used: %1 MB ++ Usado: %1 MB ++ ++ ++ ++ Number of CPUs: ++ Quantidade de CPUs: ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ Environment variables: ++ Variáveis de ambiente: ++ ++ ++ ++ About QMC2 ++ Sobre o QMC2 ++ ++ ++ ++ Project details ++ Detalhes do projeto ++ ++ ++ ++ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> ++p, li { white-space: pre-wrap; } ++</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">QMC2 - M.A.M.E. Catalog / Launcher II</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt 4 based UNIX multi-emulator frontend</p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version X.Y[.bZ], built for SDLMAME</p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Copyright © 2006 - 2008 R. Reucher, Germany</p></body></html> ++ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> ++p, li { white-space: pre-wrap; } ++</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt; font-weight:600;">QMC2 - M.A.M.E. Catalog / Launcher II</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt 4 based UNIX multi-emulator frontend</p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version X.Y[.bZ], built for SDLMAME</p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Copyright © 2006 - 2008 R. Reucher, Alemanha</p></body></html> ++ ++ ++ ++ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> ++p, li { white-space: pre-wrap; } ++</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Project homepage:</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">http://www.mameworld.net/mamecat</p> ++<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Development site:</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">http://sourceforge.net/projects/qmc2</p> ++<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">QMC2 development mailing list:</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qmc2-devel@lists.sourceforge.net (subscribers only)</p> ++<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">List subscription:</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">https://lists.sourceforge.net/lists/listinfo/qmc2-devel</p></body></html> ++ <html><head><meta name="qrichtext" content="1" /><style type="text/css"> ++p, li { white-space: pre-wrap; } ++</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;"> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Página do projeto:</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">http://www.mameworld.net/mamecat</p> ++<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Página de desenvolvimento:</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">http://sourceforge.net/projects/qmc2</p> ++<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Lista de desenvolvimento do QMC2:</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">qmc2-devel@lists.sourceforge.net (subscribers only)</p> ++<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Cadastro à lista:</span></p> ++<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">https://lists.sourceforge.net/lists/listinfo/qmc2-devel</p></body></html> ++ ++ ++ ++ System information ++ Informação do sistema ++ ++ ++ ++ AdditionalArtworkSetup ++ ++ ++ Additional artwork classes ++ Classes de ilustrações adicionais ++ ++ ++ ++ X ++ X ++ ++ ++ ++ ++ ++ Artwork name ++ Nome da ilustração ++ ++ ++ ++ Icon ++ Ícone ++ ++ ++ ++ Target ++ Alvo ++ ++ ++ ++ Scaled ++ Dimensionado ++ ++ ++ ++ Type ++ Tipo ++ ++ ++ ++ Format ++ Formato ++ ++ ++ ++ Folder / Archive ++ Pasta / Arquivo ++ ++ ++ ++ Apply additional artwork setup and close dialog ++ Aplicar a configuração da ilustração adicional e fecha a janela ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ Cancel additional artwork editing ++ Cancela a edição da ilustração adicional ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ Restore additional artwork from currently active setup ++ Restaura a ilustração adicional da configuração ativa atual ++ ++ ++ ++ &Restore ++ &Restaurar ++ ++ ++ ++ Add a new artwork class ++ Adiciona uma nova classe de ilustração ++ ++ ++ ++ Remove selected artwork classes ++ Remove as classes de ilustração selecionadas ++ ++ ++ ++ ++ Select / deselect this artwork class for removal ++ Seleciona / remove essa classe de ilustração para remoção ++ ++ ++ ++ ++ Enter a name for this artwork class (required) ++ Insira um nome para esta classe de ilustração (obrigatório) ++ ++ ++ ++ ++ Choose... ++ Escolha... ++ ++ ++ ++ ++ Choose an icon file to be used for this artwork class (optional) ++ Escolha um arquivo de ícone para ser utilizado nesta classe de ilustração (opcional) ++ ++ ++ ++ ++ System ++ Sistema ++ ++ ++ ++ ++ Software ++ Programa ++ ++ ++ ++ ++ Select system or software as <i>target</i> for this artwork class ++ Selecione o sistema ou software como <i>alvo</i> para essa classe de ilustração ++ ++ ++ ++ ++ On ++ Ligado ++ ++ ++ ++ ++ Off ++ Desligado ++ ++ ++ ++ ++ Choose if images of this artwork class are scaled or not ++ Escolha se as imagens dessa classe de ilustração serão dimensionadas ou não ++ ++ ++ ++ ++ Folder ++ Pasta ++ ++ ++ ++ ++ ++ ++ Archive ++ Arquivo ++ ++ ++ ++ ++ Choose if images are loaded from a folder or an archive for this artwork class ++ Escolha se as imagens serão carregadas a partir de uma pasta ou de um arquivo para essa classe de ilustração ++ ++ ++ ++ ++ ZIP ++ ZIP ++ ++ ++ ++ ++ 7z ++ 7z ++ ++ ++ ++ ++ Select archive format ++ Seleciona um formato de arquivo ++ ++ ++ ++ ++ Supported archives ++ Arquivos compatíveis ++ ++ ++ ++ ++ ZIP archives ++ Arquivos ZIP ++ ++ ++ ++ ++ 7z archives ++ Arquivos 7z ++ ++ ++ ++ ++ Image archive ++ Arquivo de imagem ++ ++ ++ ++ ++ Image archive for this artwork class (required) ++ Arquivo de imagem para essa classe de ilustração (obrigatório) ++ ++ ++ ++ ++ use semicolon (;) to separate multiple archives ++ use ponto e vírgula (;) para separar diversos arquivos ++ ++ ++ ++ ++ Browse image archive ++ Procura por arquivos de imagem ++ ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ ++ Image folder ++ Pasta com imagens ++ ++ ++ ++ ++ Image folder for this artwork class (required) ++ Pasta com imagens para essa classe de ilustração (obrigatório) ++ ++ ++ ++ ++ use semicolon (;) to separate multiple folders ++ use ponto e vírgula (;) para separar diversos arquivos ++ ++ ++ ++ ++ Browse image folder ++ Procura pela pasta de imagens ++ ++ ++ ++ Choose icon file ++ Escolha o arquivo de ícone ++ ++ ++ ++ PNG files (*.png) ++ Arquivos PNG (*.png) ++ ++ ++ ++ ArcadeModeSetup ++ ++ ++ Arcade mode setup ++ Configuração do modo arcade ++ ++ ++ ++ ++ Disable joystick function mapping ++ Desativar o mapeamento das funções do joystick ++ ++ ++ ++ Log debug messages of key-sequence mapping events to the console ++ Registra as mensagens de depuração do mapeamento da sequência das teclas no console ++ ++ ++ ++ Debug key-sequence mapping ++ Depurar o mapeamento da sequência das teclas ++ ++ ++ ++ Select arcade theme ++ Selecione o tema do arcade ++ ++ ++ ++ Graphics system ++ Gráficos do sistema ++ ++ ++ ++ Select the graphics system used to render the scene (when available, OpenGL is strongly recommended!) ++ Selecione o uso dos gráficos do sistema para renderizar a cena (quando estiver disponível, o OpenGL é altamente recomendado!) ++ ++ ++ ++ Working directory ++ Diretório de trabalho ++ ++ ++ ++ Arcade theme ++ Tema do arcade ++ ++ ++ ++ Working directory used when executing QMC2 Arcade ++ Diretório de trabalho usado ao executar o Arcade QMC2 ++ ++ ++ ++ Select type of console ++ Selecione o tipo do console ++ ++ ++ ++ Browse working directory used when executing QMC2 Arcade ++ Procura pelo diretório de trabalho utilizado ao executar o Arcade QMC2 ++ ++ ++ ++ Browse QMC2 Arcade executable file ++ Procura peloo arquivo executável do Arcade QMC2 ++ ++ ++ ++ Console type ++ Tipo do console ++ ++ ++ ++ QMC2 Arcade executable file ++ Arquivo executável do Arcade QMC2 ++ ++ ++ ++ Executable file ++ Arquivo executável ++ ++ ++ ++ Configuration path ++ Caminho da configuração ++ ++ ++ ++ Configuration path for QMC2 Arcade ++ Caminho da configuração para o Arcade QMC2 ++ ++ ++ ++ Browse configuration path for QMC2 Arcade ++ Procura o caminho de configuração do Arcade QMC2 ++ ++ ++ ++ Log debug messages of joystick function mapping events to the console ++ Registra as mensagens de depuração do mapeamento das funções do joystick no console ++ ++ ++ ++ Debug joystick function mapping ++ Depurar o mapeamento das funções do joystick ++ ++ ++ ++ ++ Enable logging of Qt debug messages ++ Ativa o registro das mensagens de depuração do Qt ++ ++ ++ ++ good + imperfect ++ bom + imperfeito ++ ++ ++ ++ good + imperfect + preliminary ++ bom + imperfeito + preliminar ++ ++ ++ ++ Tag ++ Etiqueta ++ ++ ++ ++ Players ++ Jogadores ++ ++ ++ ++ Only favorite sets ++ Apena os favoritos ++ ++ ++ ++ Only tagged sets ++ Apena aqueles com etiquetas ++ ++ ++ ++ Use only parent sets (no clones)? ++ Usar apenas os conjuntos principais (sem os clones)? ++ ++ ++ ++ Only parent sets ++ Apenas os conjuntos principais ++ ++ ++ ++ Rank filter ++ Filtro de classificação ++ ++ ++ ++ ++ Double-click to scan or clear a joystck function mapped to a key-sequence ++ Faça um clique duplo para escanear ou para limpar uma função do joystick já mapeado para uma sequência das teclas ++ ++ ++ ++ ++ Joystick function ++ Função do joystick ++ ++ ++ ++ ROM state filter ++ Filtro da condição da ROM ++ ++ ++ ++ Select sort criteria ++ Seleciona o critério de ordenação ++ ++ ++ ++ Description ++ Descrição ++ ++ ++ ++ ROM state ++ Condição da ROM ++ ++ ++ ++ Year ++ Ano ++ ++ ++ ++ Manufacturer ++ Fabricante ++ ++ ++ ++ Name (ID) ++ Nome (ID) ++ ++ ++ ++ ROM types ++ Tipo das ROMs ++ ++ ++ ++ Select ROM state C (correct)? ++ Selecionar a ROM com estado C (correto)? ++ ++ ++ ++ Select ROM state M (mostly correct)? ++ Selecionar a ROM com estado M (maioria correto)? ++ ++ ++ ++ Select ROM state I (incorrect)? ++ Selecionar a ROM com estado I (incorreto)? ++ ++ ++ ++ Select ROM state N (not found)? ++ Selecionar a ROM com estado N (não encontrado)? ++ ++ ++ ++ Select ROM state U (unknown)? ++ Selecionar a ROM com estado D (desconhecido)? ++ ++ ++ ++ ++ Driver status ++ Condição geral do controlador ++ ++ ++ ++ Choose the driver maturity states for sets to be included ++ Escolha através da maturidade da condição geral do controlador para conjuntos que serão incluídos ++ ++ ++ ++ ++ ++ good ++ bom ++ ++ ++ ++ Source file ++ Arquivo fonte ++ ++ ++ ++ Name filter ++ Filtro por nome ++ ++ ++ ++ Deselect all categories ++ Remove a seleção de todas as categorias ++ ++ ++ ++ Select all categories ++ Seleciona todas as categorias ++ ++ ++ ++ Specify a name (ID) filter-expression (Qt regular-expression syntax!) -- leave empty to not filter by name ++ Determine um nome (ID) para o filtro (sintaxe de expressões regulares do Qt!) -- deixe em branco para não filtrar por nome ++ ++ ++ ++ Clear name filter ++ Limpa a filtragem por nome ++ ++ ++ ++ Category filter ++ Filtro de categoria ++ ++ ++ ++ Select / deselect the categories you want to include / exclude ++ Seleciona / remove a seleção das categorias que você deseja incluir / excluir ++ ++ ++ ++ Sort criteria ++ Critério de ordenação ++ ++ ++ ++ Sort order ++ Ordem de classificação ++ ++ ++ ++ General settings ++ Configurações gerais ++ ++ ++ ++ Select sort order ++ Selecione a ordem de classificação ++ ++ ++ ++ Ascending ++ Ascendente ++ ++ ++ ++ Descending ++ Descendente ++ ++ ++ ++ Use filtered list ++ Usa a lista filtrada ++ ++ ++ ++ Filter / export progress ++ Progresso da filtragem / exportação ++ ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ Force use of joystick at specified index ++ Impõem a utilização do joystick no índice determinado ++ ++ ++ ++ Specify joystick index ++ Determine o índice do joystick ++ ++ ++ ++ Joystick index ++ Índice do joystick ++ ++ ++ ++ Video snaps ++ Capturas de vídeo ++ ++ ++ ++ Enable (on) / disable (off) the use of video snaps ++ Ativar (ligar) / Desativar (desligar) o uso das capturas de vídeo ++ ++ ++ ++ Machine list filter ++ Filtro da lista das máquinas ++ ++ ++ ++ Export a filtered version of the machine list according to the filter / sort settings specified below ++ Exporta uma versão filtrada da lista das máquinas de acordo com as configurações do filtro / pela ordenação definidas abaixo ++ ++ ++ ++ Export ++ Exportar ++ ++ ++ ++ Browse the output file used as the filtered machine list ++ Procura pelo arquivo gerado que foi usado como uma lista das máquinas que foram filtradas ++ ++ ++ ++ Rank ++ Classificação ++ ++ ++ ++ Use a filtered version of the machine list (otherwise use the full list) ++ Usa uma versão filtrada da lista das máquinas (caso contrário use a lista completa) ++ ++ ++ ++ Output file used as the filtered machine list ++ O arquivo gerado usado como uma lista das máquinas que foram filtradas ++ ++ ++ ++ Use only sets included in the favorites list? ++ Usar apenas os conjuntos que foram incluídos na lista dos favoritos? ++ ++ ++ ++ Use only sets that are tagged? ++ Use apenas os conjuntos que foram etiquetados? ++ ++ ++ ++ Keys ++ Teclas ++ ++ ++ ++ ++ ToxicWaste ++ ToxicWaste ++ ++ ++ ++ ++ Double-click to scan or clear a custom key sequence ++ Faça um clique duplo para escanear ou limpar uma sequência das teclas que foram personalizadas ++ ++ ++ ++ ++ ++ ++ Function / Key-sequence ++ Função / sequência das teclas ++ ++ ++ ++ ++ Custom key-sequence ++ Personalização da sequência das teclas ++ ++ ++ ++ ++ darkone ++ darkone ++ ++ ++ ++ Joystick ++ Joystick ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ Please enable joystick control! ++ Ative o controle por joystick! ++ ++ ++ ++ Select the rank a machine must at least have to be included (or none to ignore the rank) ++ Selecione a classificação mínima de uma máquina para que ela seja incluída (ou nenhum para ignorar a classificação) ++ ++ ++ ++ ++ Machine rank ignored ++ Classificação da máquina ignorada ++ ++ ++ ++ Category ++ Categoria ++ ++ ++ ++ Version ++ Versão ++ ++ ++ ++ Machine rank must be %1 at least ++ A classificação da máquina deve ser ao menos %1 ++ ++ ++ ++ ++ Scanning key sequence ++ Escaneando a sequência das teclas ++ ++ ++ ++ System / Device ++ Sistema / Dispositivo ++ ++ ++ ++ System / BIOS ++ Sistema / BIOS ++ ++ ++ ++ Choose QMC2 Arcade's executable file ++ Escolha o arquivo executável do Arcade QMC2 ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose QMC2 Arcade's working directory ++ Escolha o diretório de trabalho do Arcade QMC2 ++ ++ ++ ++ Choose QMC2 Arcade's configuration path ++ Escolha o caminho da configuração do Arcade QMC2 ++ ++ ++ ++ Choose filtered list file for export ++ Escolha o arquivo da lista filtrada para exportação ++ ++ ++ ++ FATAL: arcade mode: cannot open '%1' for writing ++ FATAL: modo arcade: foi impossível abrir '%1' para escrita ++ ++ ++ ++ WARNING: arcade mode: the name filter regular expression is invalid ++ AVISO: modo arcade: a expressão regular do filtro de nome é inválida ++ ++ ++ ++ Filtering ++ Filtrando ++ ++ ++ ++ imperfect ++ imperfeito ++ ++ ++ ++ Sorting ++ Ordenando ++ ++ ++ ++ Exporting ++ Exportando ++ ++ ++ ++ ROM ++ ROM ++ ++ ++ ++ CHD ++ CHD ++ ++ ++ ++ arcade mode: exported %n filtered set(s) to '%1' ++ ++ modo arcade: %n conjunto filtrado exportado para '%1' ++ modo arcade: %n conjuntos filtrados exportados para '%1' ++ ++ ++ ++ ++ AudioEffectDialog ++ ++ ++ ++ ++ Enable effect '%1' ++ Ativa o efeito '%1' ++ ++ ++ ++ Setup effect '%1' ++ Configura o efeito '%1' ++ ++ ++ ++ ++ Disable effect '%1' ++ Desativa o efeito '%1' ++ ++ ++ ++ WARNING: audio player: can't insert effect '%1' ++ AVISO: reprodutor de áudio: foi impossível inserir o efeito '%1' ++ ++ ++ ++ WARNING: audio player: can't remove effect '%1' ++ AVISO: reprodutor de áudio: foi impossível remover o efeito '%1' ++ ++ ++ ++ Audio effects ++ Efeitos de áudio ++ ++ ++ ++ Close audio effects dialog ++ Fecha a janela dos efeitos de áudio ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ ++ List of available audio effects ++ Lista dos efeitos de áudio disponíveis ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ Description ++ Descrição ++ ++ ++ ++ Enable ++ Ativar ++ ++ ++ ++ Setup ++ Configurar ++ ++ ++ ++ BrushEditor ++ ++ ++ Brush editor ++ Editor do pincel ++ ++ ++ ++ Cancel brush editing ++ Cancela a edição do pincel ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ Image ++ Imagem ++ ++ ++ ++ Image file ++ Arquivo de imagem ++ ++ ++ ++ Specify image file ++ Especifique o arquivo de imagem ++ ++ ++ ++ Browse image file ++ Procura pelo arquivo de imagem ++ ++ ++ ++ Image preview ++ Pré-visualização da imagem ++ ++ ++ ++ ++ ++ Preview ++ Pré-visualização ++ ++ ++ ++ Pattern ++ Padrão ++ ++ ++ ++ Pattern type ++ Tipo do padrão ++ ++ ++ ++ Pattern preview ++ Pré-visualização do padrão ++ ++ ++ ++ Pattern color ++ Cor do padrão ++ ++ ++ ++ ++ Choose pattern color ++ Escolha a cor do padrão ++ ++ ++ ++ Gradient ++ Gradiente ++ ++ ++ ++ Actions ++ Ações ++ ++ ++ ++ ++ ++ ++ ++ Y ++ Y ++ ++ ++ ++ Final end point ++ Último ponto final ++ ++ ++ ++ ++ ++ ++ ++ X ++ X ++ ++ ++ ++ Start point ++ Ponto inicial ++ ++ ++ ++ Focal point (F) ++ Ponto focal (F) ++ ++ ++ ++ Center point (C) ++ Ponto central (C) ++ ++ ++ ++ C ++ C ++ ++ ++ ++ F ++ F ++ ++ ++ ++ Radius (C, F) ++ Raio (C, F) ++ ++ ++ ++ Center point ++ Ponto central ++ ++ ++ ++ Angle ++ Ângulo ++ ++ ++ ++ ° ++ ° ++ ++ ++ ++ Gradient type ++ Tipo do gradiente ++ ++ ++ ++ Spread type ++ Tipo da distribuição ++ ++ ++ ++ Add color-stop ++ Adiciona o limite da cor ++ ++ ++ ++ Gradient preview ++ Pré-visualização do gradiente ++ ++ ++ ++ Stop ++ Parar ++ ++ ++ ++ Color ++ Cor ++ ++ ++ ++ Accept brush ++ Aceita o pincel ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ Choose image file ++ Escolha o arquivo de imagem ++ ++ ++ ++ Supported image files (%1) ++ Arquivos de imagem compatíveis (%1) ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Cabinet ++ ++ ++ cabinet ++ gabinete ++ ++ ++ ++ CatverIniOptimizer ++ ++ ++ Optimize catver.ini ++ Otimizar o catver.ini ++ ++ ++ ++ Optimizer log ++ Registro do otimizador ++ ++ ++ ++ Optimizer status / progress ++ Estado geral do otimizador / progresso ++ ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ Optimize catver.ini now ++ Otimizar o catver.ini agora ++ ++ ++ ++ Optimize ++ Otimizar ++ ++ ++ ++ Close this dialog ++ Fecha esta janela ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ click 'optimize' to start ++ clique em 'otimizar' para iniciar ++ ++ ++ ++ loading catver.ini data from '%1' ++ carregando os dados do catver.ini a partir do '%1' ++ ++ ++ ++ ERROR: file name is empty ++ ERRO: o nome do arquivo está vazio ++ ++ ++ ++ ++ ++ ++ no catver.ini data available ++ não há informação disponível no catver.ini ++ ++ ++ ++ ERROR: '%1' isn't readable ++ ERRO: '%1' não pode ser lido ++ ++ ++ ++ ERROR: '%1' doesn't exist ++ ERRO: '%1' não existe ++ ++ ++ ++ ERROR: can't open '%1' for reading ++ ERRO: foi impossível abrir o '%1' para leitura ++ ++ ++ ++ done (loading catver.ini data from '%1') ++ feito (carregando os dados do catver.ini a partir do '%1') ++ ++ ++ ++ %1 category / %2 version records loaded ++ %1 categoria / %2 versão das gravações carregadas ++ ++ ++ ++ ERROR: can't open '%1' for writing ++ ERRO: foi impossível abrir o %1 para escrita ++ ++ ++ ++ Optimizing ++ Otimizando ++ ++ ++ ++ removed invalid set '%1' with category '%2' ++ foi removido o conjunto inválido '%1' com categoria '%2' ++ ++ ++ ++ removed device set '%1' with category '%2' ++ foi removido o conjunto de dispositivo '%1' com categoria '%2' ++ ++ ++ ++ removed BIOS set '%1' with category '%2' ++ foi removido o conjunto de BIOS '%1' com categoria '%2' ++ ++ ++ ++ kept parent set '%1' with category '%2' ++ foi mantido conjunto principal '%1' com categoria '%2' ++ ++ ++ ++ added parent set '%1' with category '%2' and removed clone set '%3' ++ foi adicionado o conjunto principal '%1' com categoria '%2' e foi removido o conjunto clone '%3' ++ ++ ++ ++ removed clone set '%1' with category '%2' ++ foi removido o conjunto clone '%1' com categoria '%2' ++ ++ ++ ++ removed invalid set '%1' with version '%2' ++ foi removido o conjunto inválido '%1' com versão '%2' ++ ++ ++ ++ kept %1 set '%2' with version '%3' ++ foi mantido o conjunto '%1' '%2' com versão '%3' ++ ++ ++ ++ parent ++ principal ++ ++ ++ ++ clone ++ clone ++ ++ ++ ++ changes to categories / versions: %1 / %2 ++ as alterações para as categorias / versões: %1 / %2 ++ ++ ++ ++ optimizer started ++ otimizador foi iniciado ++ ++ ++ ++ optimizer ended ++ otimizador foi encerrado ++ ++ ++ ++ CheckSumDatabaseManager ++ ++ ++ WARNING: failed to open check-sum database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir o check-sum de verificação do banco de dados '%1' erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from check-sum database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao obter o '%1' co check-sum do banco de dados: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to check-sum database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar o '%1' ao check-sum do banco de dados: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in check-sum database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar o '%1' no check-sum do banco de dados: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to fetch row count from check-sum database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler quantidade das linhas do check-sum do banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to fetch row IDs from check-sum database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler as IDs das linhas do check-sum do banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the check-sum database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração de '%1' para o check-sum do banco de dados: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to remove path '%1' from check-sum database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao remover caminho '%1' do check-sum do banco de dados: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to remove invalidated rows from check-sum database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover as linhas invalidadas da verificação do check-sum do banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to remove check-sum database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover o check-sum do banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to create check-sum database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao criar o check-sum no banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ check-sum database '%1' initialized ++ O check-sum do banco de dados '%1' foi inicializada ++ ++ ++ ++ CheckSumScannerLog ++ ++ ++ Check-sum scanner log ++ Registro do exame dos check-sum ++ ++ ++ ++ Enable log output ++ Ativa a geração do registro ++ ++ ++ ++ Enable log ++ Ativa o registro ++ ++ ++ ++ Log size ++ Tamanho do registro ++ ++ ++ ++ Maximum number of lines in log (0 = no limit) ++ Tamanho máximo das linhas no registro (0 = ilimitado) ++ ++ ++ ++ unlimited ++ ilimitado ++ ++ ++ ++ lines ++ linhas ++ ++ ++ ++ Scanner progress indicator ++ Indicador de progresso do exame ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ Clear log ++ Limpa o registro ++ ++ ++ ++ Close this window ++ Fechar esta janela ++ ++ ++ ++ Clear ++ Limpar ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ CheckSumScannerThread ++ ++ ++ exiting ++ encerrando ++ ++ ++ ++ stopping ++ parando ++ ++ ++ ++ scanning ++ examinando ++ ++ ++ ++ idle ++ ocioso ++ ++ ++ ++ %n obsolete path(s) removed from database ++ ++ %n caminho obsoleto removido do banco de dados ++ %n caminhos obsoletos removidos do banco de dados ++ ++ ++ ++ ++ %n outdated path(s) removed from database ++ ++ %n caminho antigo removido do banco de dados ++ %n caminhos antigos removidos do banco de dados ++ ++ ++ ++ ++ freeing unused space previously occupied by database ++ liberando o espaço que não foi utilizado anteriormente pelo banco de dados ++ ++ ++ ++ scanner thread started ++ Os processos dos exames foram iniciados ++ ++ ++ ++ waiting for work ++ esperando pelo trabalho ++ ++ ++ ++ found %n file(s) for path '%1' ++ ++ %n arquivo encontrado para o caminho '%1' ++ %n arquivos encontrados para o caminho '%1' ++ ++ ++ ++ ++ scan started for file '%1' ++ exame iniciado para o arquivo '%1' ++ ++ ++ ++ ++ ++ ++ ++ ++ database update ++ atualização do banco de dados ++ ++ ++ ++ adding member '%1' from archive '%2' with SHA-1 '%3' and CRC '%4' to database ++ adicionando um membro '%1' do arquivo '%2' com SHA-1 '%3' e CRC '%4' no banco de dados ++ ++ ++ ++ ++ ++ an object with SHA-1 '%1' and CRC '%2' already exists in the database ++ um objeto com SHA-1 '%1' e CRC '%2' já existe no banco de dados ++ ++ ++ ++ member '%1' from archive '%2' ignored ++ o membro '%1' do arquivo '%2' foi ignorado ++ ++ ++ ++ adding CHD '%1' with SHA-1 '%2' to database ++ foi adicionado o CHD '%1' com SHA-1 '%2' ao banco de dados ++ ++ ++ ++ CHD '%1' ignored ++ o CHD '%1' foi ignorado ++ ++ ++ ++ adding file '%1' with SHA-1 '%2' and CRC '%3' to database ++ adicionando o arquivo '%1' com SHA-1 '%2' e CRC '%3' ao banco de dados ++ ++ ++ ++ file '%1' ignored ++ o arquivo '%1' foi ignorado ++ ++ ++ ++ scanner paused ++ o exame foi pausado ++ ++ ++ ++ Paused ++ Pausado ++ ++ ++ ++ scanner resumed ++ o exame foi retomado ++ ++ ++ ++ scan finished for file '%1' ++ o exame foi concluído para o arquivo '%1' ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ scan finished - total scanning time = %1, objects in database = %2, database size = %3 ++ o exame foi concluído - tempo total = %1, objetos no banco de dados = %2, tamanho do banco de dados = %3 ++ ++ ++ ++ ++ ++ ZIP scan ++ exame ZIP ++ ++ ++ ++ ++ ++ ++ ++ member '%1' from archive '%2' has SHA-1 '%3' and CRC '%4' ++ membro '%1' do arquivo '%2' tem SHA-1 '%3' e CRC '%4' ++ ++ ++ ++ WARNING: can't open member '%1' from archive '%2' ++ AVISO: foi impossível abrir o membro '%1' do arquivo '%2' ++ ++ ++ ++ ++ ++ 7Z scan ++ exame 7Z ++ ++ ++ ++ ++ WARNING: can't read member '%1' from archive '%2' ++ AVISO: foi impossível ler o membro '%1' do arquivo '%2' ++ ++ ++ ++ ++ archive scan ++ exame do arquivo ++ ++ ++ ++ ++ ++ ++ CHD scan ++ exame do CHD ++ ++ ++ ++ WARNING: version '%1' of CHD '%2' unknown ++ AVISO: a versão '%1' do CHD '%2' é desconhecida ++ ++ ++ ++ ++ WARNING: can't read CHD '%1' ++ AVISO: foi impossível ler o CHD '%1' ++ ++ ++ ++ CHD '%1' has SHA-1 '%2' (CHD v%3) ++ CHD '%1' tem SHA-1 '%2' (CHD v%3) ++ ++ ++ ++ file scan ++ exame do arquivo ++ ++ ++ ++ file '%1' has SHA-1 '%2' and CRC '%3' ++ arquivo '%1' tem SHA-1 '%2' e CRC '%3' ++ ++ ++ ++ scanner interrupted ++ o exame foi interrompido ++ ++ ++ ++ preparing ++ preparando ++ ++ ++ ++ paused ++ pausado ++ ++ ++ ++ preparing incremental scan ++ preparando o exame incremental ++ ++ ++ ++ ++ ++ ++ Preparing ++ Preparando ++ ++ ++ ++ ++ ++ Step %1 of %2 ++ Passo %1 de %2 ++ ++ ++ ++ %n unchanged file(s) removed from scan ++ ++ %n arquivo não modificado removido do escaneamento ++ %n arquivos não modificados removidos do escaneamento ++ ++ ++ ++ ++ ++ ++ Scanning ++ Examinando ++ ++ ++ ++ searching available files for path '%1' ++ procurando pelos arquivos disponíveis para o caminho '%1' ++ ++ ++ ++ ++ ++ starting database transaction ++ iniciando transação do banco de dados ++ ++ ++ ++ ++ ++ ++ ++ WARNING: scan failed for file '%1' ++ AVISO: o exame falhou para o arquivo '%1' ++ ++ ++ ++ WARNING: can't access file '%1', please check permissions ++ AVISO: foi impossível acessar o arquivo '%1', verifique as permissões ++ ++ ++ ++ ++ ++ committing database transaction ++ efetuando a transação do banco de dados ++ ++ ++ ++ scanner thread ended ++ o processo do exame foi concluído ++ ++ ++ ++ CollectionRebuilder ++ ++ ++ ROM Collection Rebuilder ++ Reconstrutor da coleção da ROM ++ ++ ++ ++ XML source ++ Fonte XML ++ ++ ++ ++ Select XML source ++ Selecione a fonte XML ++ ++ ++ ++ ++ Current default emulator ++ Emulador padrão atual ++ ++ ++ ++ ++ Select XML file... ++ Selecione o arquivo XML... ++ ++ ++ ++ Entity name that defines a 'set' ++ Nome da entidade que define um 'conjunto' ++ ++ ++ ++ Entity name that defines a 'rom' ++ Nome da entidade que define uma 'ROM' ++ ++ ++ ++ Set entity ++ Entidade do conjunto ++ ++ ++ ++ ++ Entity name that defines a 'disk' ++ Nome da entidade que define um 'disco' ++ ++ ++ ++ Disk entity ++ Entidade de disco ++ ++ ++ ++ ROM entity ++ Entidade de ROM ++ ++ ++ ++ Enable log output ++ Ativa a geração do registro ++ ++ ++ ++ Enable log ++ Ativa o registro ++ ++ ++ ++ Log size ++ Tamanho do registro ++ ++ ++ ++ Maximum number of lines in log (0 = no limit) ++ Tamanho máximo das linhas no registro (0 = ilimitado) ++ ++ ++ ++ unlimited ++ ilimitado ++ ++ ++ ++ lines ++ linhas ++ ++ ++ ++ Rebuild progress indicator ++ Indicador de progresso de reconstrução ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ Clear log ++ Limpa o registro ++ ++ ++ ++ Clear ++ Limpar ++ ++ ++ ++ Remove the current XML source from the list ++ Remover a fonte XML atual da lista ++ ++ ++ ++ Mode switch ++ Escolha do modo ++ ++ ++ ++ Rebuild mode ++ Modo de reconstrução ++ ++ ++ ++ Dry run mode ++ Modo de teste ++ ++ ++ ++ ++ ++ ++ ++ ++ Start / stop rebuilding ++ Inicia / para a reconstrução ++ ++ ++ ++ ++ ++ ++ Start rebuilding ++ Inicia a reconstrução ++ ++ ++ ++ Pause / resume rebuilding ++ Pausa / continua a reconstrução ++ ++ ++ ++ ++ ++ Pause ++ Pausa ++ ++ ++ ++ Rebuild statistics ++ Estatísticas da reconstrução ++ ++ ++ ++ Enable the use of a Qt regular expression that a software-list's name has to match in order to be processed ++ Ativar o uso de uma expressão regular do Qt onde o nome de uma lista de programas corresponda a ordem que ela será processada ++ ++ ++ ++ Filter lists ++ Listas do filtro ++ ++ ++ ++ Specify a Qt regular expression that a software-list's name has to match in order to be processed ++ Especifique a expressão regular do Qt onde o nome de uma lista de programas corresponda a ordem que ela será processada ++ ++ ++ ++ Enable the use of a Qt regular expression that a set's ID has to match in order to be processed ++ Ativa o uso de uma expressão regular do Qt onde a ID de um conjunto corresponda a ordem que ela será processada ++ ++ ++ ++ Enable state filtering (a set is included when its state is checked here) ++ Ativa o filtro do estado (um conjunto será incluído quando o seu estado estiver selecionado aqui) ++ ++ ++ ++ Filter states ++ Estados do filtro ++ ++ ++ ++ Include sets with state C (correct)? ++ Inclui os conjuntos com o estado C (correto)? ++ ++ ++ ++ Correct ++ Correto ++ ++ ++ ++ Include sets with state M (mostly correct)? ++ Inclui os conjuntos com o estado M (maioria correto)? ++ ++ ++ ++ Mostly correct ++ Maioria correto ++ ++ ++ ++ Include sets with state I (incorrect)? ++ Inclui os conjuntos com o estado I (incorreto)? ++ ++ ++ ++ Incorrect ++ Incorreto ++ ++ ++ ++ Include sets with state N (not found)? ++ Inclui os conjuntos com o estado N (não encontrado)? ++ ++ ++ ++ Not found ++ Não encontrado ++ ++ ++ ++ Include sets with state U (unknown)? ++ Inclui os conjuntos com o estado D (desconhecido)? ++ ++ ++ ++ Unknown ++ Desconhecido ++ ++ ++ ++ ++ Exact match ++ Correspondência exata ++ ++ ++ ++ ++ Choose the regular expression syntax ++ Escolha a sintaxe da expressão regular ++ ++ ++ ++ Show / hide list of missing dumps ++ Mostra / esconde a lista das imagens que faltam ++ ++ ++ ++ ++ Select the filter type (include / exclude filter) ++ Selecione o tipo do filtro (filtro de inclusão / exclusão) ++ ++ ++ ++ ++ Include ++ Inclusão ++ ++ ++ ++ ++ Exclude ++ Exclusão ++ ++ ++ ++ Filter sets ++ Conjuntos do filtro ++ ++ ++ ++ Specify a Qt regular expression that a set's ID has to match in order to be processed ++ Especifique a expressão regular do Qt onde a ID de um conjunto precisa corresponder para ser processado ++ ++ ++ ++ ++ Clear filter expression ++ Limpa a expressão do filtro ++ ++ ++ ++ Confirm checkpoint restart ++ Confirme o reinício do ponto de verificação ++ ++ ++ ++ Restart from stored checkpoint? ++ Reinicia a partir de um ponto de verificação já salvo? ++ ++ ++ ++ Choose source XML file ++ Escolha o arquivo fonte XML ++ ++ ++ ++ XML files (*.xml) ++ Arquivos XML (*.xml) ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Data files (*.dat) ++ Arquivos de dados (*.dat) ++ ++ ++ ++ Data and XML files (*.dat *.xml) ++ Arquivos de dados e XML (*.dat *.xml) ++ ++ ++ ++ ++ Stop dry run ++ Parar o ensaio ++ ++ ++ ++ ++ ++ ++ ++ Start / stop dry run ++ Inicia / para o ensaio ++ ++ ++ ++ ++ Stop rebuilding ++ Para a reconstrução ++ ++ ++ ++ ++ ++ Start dry run ++ Inicia o ensaio ++ ++ ++ ++ Resume ++ Continua ++ ++ ++ ++ Sets processed ++ Conjuntos já processados ++ ++ ++ ++ Missing ROMs ++ ROMs que faltam ++ ++ ++ ++ Missing disks ++ Discos que faltam ++ ++ ++ ++ CollectionRebuilderThread ++ ++ ++ ++ FATAL: can't open XML file '%1' for reading, please check permissions ++ FATAL: foi impossível abrir o arquivo XML '%1' para leitura, verifique as permissões ++ ++ ++ ++ ++ ++ ++ FATAL: XML parsing failed ++ FATAL: a análise do XML falhou ++ ++ ++ ++ ++ restarting from checkpoint '%1' ++ reiniciando do ponto de verificação '%1' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ FATAL: backup creation failed ++ FALTAL: a criação do backup falhou ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ file error ++ erro do arquivo ++ ++ ++ ++ ++ ++ unknown file type '%1' ++ o tipo do arquivo '%1' é desconhecido ++ ++ ++ ++ writing '%1' (size: %2) ++ escrevendo '%1' (tamanho: %2) ++ ++ ++ ++ FATAL: failed writing '%1' ++ FATAL: houve uma falha ao escrever em '%1' ++ ++ ++ ++ FATAL: failed opening '%1' for writing ++ FATAL: houve uma falha ao abrir o '%1' para escrita ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ROM ++ ROM ++ ++ ++ ++ ++ creating new ZIP archive '%1' ++ criando um novo arquivo ZIP '%1' ++ ++ ++ ++ ++ skipping '%1' ++ ignorando '%1' ++ ++ ++ ++ ++ a dump with CRC '%1' already exists ++ uma imagem com o CRC '%1' já existe ++ ++ ++ ++ ++ writing '%1' to ZIP archive '%2' (uncompressed size: %3) ++ escrevendo '%1' no arquivo ZIP '%2' (tamanho sem compressão: '%3') ++ ++ ++ ++ ++ FATAL: failed writing '%1' to ZIP archive '%2' ++ FATAL: houve uma falha ao escrever '%1' no arquivo ZIP '%2' ++ ++ ++ ++ Created by QMC2 v%1 (%2) ++ Criado pelo QMC2 v%1 (%2) ++ ++ ++ ++ ++ done (creating new ZIP archive '%1') ++ feito (criando um novo arquivo ZIP '%1') ++ ++ ++ ++ ++ FATAL: failed creating ZIP archive '%1' ++ FATAL: houve uma falha ao criar o arquivo ZIP '%1' ++ ++ ++ ++ reading '%1' (size: %2) ++ lendo '%1' (tamanho: %2) ++ ++ ++ ++ FATAL: failed reading '%1' ++ FATAL: houve uma falha ao ler '%1' ++ ++ ++ ++ reading '%1' from 7Z archive '%2' (uncompressed size: %3) ++ lendo '%1' do arquivo 7Z '%2' (tamanho sem compressão: %3) ++ ++ ++ ++ ++ FATAL: failed reading '%1' from 7Z archive '%2' ++ FATAL: houve uma falha ao ler '%1' do arquivo 7Z '%2' ++ ++ ++ ++ ++ FATAL: failed reading from 7Z archive '%1' ++ FATAL: houve uma falha ao ler do arquivo 7Z '%1' ++ ++ ++ ++ ++ reading '%1' from ZIP archive '%2' (uncompressed size: %3) ++ lendo '%1' do arquivo ZIP '%2' (tamanho sem compressão: %3) ++ ++ ++ ++ ++ FATAL: failed reading '%1' from ZIP archive '%2' ++ FATAL: houve uma falha ao ler '%1' do arquivo ZIP '%2' ++ ++ ++ ++ FATAL: CRC '%1' not found in ZIP archive '%2' ++ FATAL: o CRC '%1' não foi encontrado no arquivo ZIP '%2' ++ ++ ++ ++ FATAL: failed reading from ZIP archive '%1' ++ FATAL: houve uma falha ao ler do arquivo ZIP '%1' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ backup ++ backup ++ ++ ++ ++ FATAL: target path '%1' cannot be created ++ FATAL: o caminho de destino '%1' não pôde ser criado ++ ++ ++ ++ FATAL: source file '%1' cannot be opened for reading ++ FATAL: o arquivo fonte '%1' não pôde ser aberto para leitura ++ ++ ++ ++ creating backup copy of '%1' as '%2' ++ criando uma cópia do backup de '%1' como '%2' ++ ++ ++ ++ ++ ++ ++ FATAL: I/O error while writing to '%1' ++ FATAL: houve um erro de E/S ao escrever em '%1' ++ ++ ++ ++ WARNING: '%1' and '%2' are NOT on the same file system, hard-linking will not work ++ AVISO: '%1' e '%2' NÃO estão no mesmo sistema de arquivos, a criação de vínculos não irá funcionar ++ ++ ++ ++ hard-linking CHD file '%1' to '%2' ++ criando vínculos do arquivo CHD '%1' para '%2' ++ ++ ++ ++ failed hard-linking '%1' to '%2' ++ houve uma falha ao criar o vínculo '%1' para '%2 ++ ++ ++ ++ ++ ++ ++ invalid file type '%1' ++ o tipo de arquivo '%1' é inválido ++ ++ ++ ++ sym-linking CHD file '%1' to '%2' ++ criando link simbólico de arquivo CHD '%1' para '%2' ++ ++ ++ ++ failed sym-linking '%1' to '%2' ++ houve uma falha ao criar o link simbólico '%1' para '%2 ++ ++ ++ ++ ++ copying CHD file '%1' to '%2' ++ copiando o arquivo CHD '%1' para '%2' ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ falling back to copy mode ++ usando modo de cópia como alternativa ++ ++ ++ ++ failed copying '%1' to '%2' ++ houve uma falha ao copiar '%1' para '%2 ++ ++ ++ ++ moving CHD file '%1' to '%2' ++ movendo o arquivo CHD '%1' para '%2' ++ ++ ++ ++ failed moving '%1' to '%2' ++ houve uma falha ao mover '%1' para '%2 ++ ++ ++ ++ done (creating backup copy of '%1' as '%2') ++ feito (criando uma cópia do backup '%1' como '%2') ++ ++ ++ ++ FATAL: destination file '%1' cannot be opened for writing ++ FATAL: o arquivo de destino '%1' não pode ser aberto para escrita ++ ++ ++ ++ FATAL: backup folder '%1' isn't writable ++ FATAL: a pasta do backup '%1' não tem permissão de escrita ++ ++ ++ ++ FATAL: backup folder '%1' doesn't exist ++ FATAL: a pasta do backup '%1' não existe ++ ++ ++ ++ ++ WARNING: invalid filter expression '%1' ignored ++ AVISO: a expressão do filtro '%1' é inválida e foi ignorada ++ ++ ++ ++ Preparing ++ Preparando ++ ++ ++ ++ updating hash cache ++ atualizando o cache da hash ++ ++ ++ ++ hash cache update interrupted ++ a atualização do cache da hash foi interrompida ++ ++ ++ ++ hash cache updated ++ o cache da hash foi atualizado ++ ++ ++ ++ %n hash(es) loaded ++ ++ %n hash carregado ++ %n hashes carregados ++ ++ ++ ++ ++ rebuilder thread started ++ o processo da reconstrução foi iniciada ++ ++ ++ ++ waiting for work ++ esperando pelo trabalho ++ ++ ++ ++ dry run started ++ o ensaio foi iniciado ++ ++ ++ ++ rebuilding started ++ a reconstrução foi iniciada ++ ++ ++ ++ ++ Analyzing ++ Analisando ++ ++ ++ ++ ++ Rebuilding ++ Reconstruindo ++ ++ ++ ++ Paused ++ Pausado ++ ++ ++ ++ dry run paused ++ o ensaio foi pausado ++ ++ ++ ++ rebuilding paused ++ a reconstrução foi pausada ++ ++ ++ ++ dry run resumed ++ o ensaio foi retomado ++ ++ ++ ++ rebuilding resumed ++ a reconstrução foi retomada ++ ++ ++ ++ set rebuilding started for '%1' ++ a reconstrução do conjunto foi iniciada para '%1' ++ ++ ++ ++ required ROM ++ ROM obrigatória ++ ++ ++ ++ name = '%1', crc = '%2', sha1 = '%3', database status = '%4' ++ nome = '%1', crc = '%2', sha1 = '%3', estado do banco de dados = '%4' ++ ++ ++ ++ ++ available ++ disponível ++ ++ ++ ++ ++ not available ++ não disponível ++ ++ ++ ++ ++ check-sum not available in database ++ o check-sum não está disponível no banco de dados ++ ++ ++ ++ required disk ++ disco obrigatório ++ ++ ++ ++ name = '%1', sha1 = '%2', database status = '%3' ++ nome = '%1', sha1 = '%2', estado do banco de dados = '%3' ++ ++ ++ ++ DISK ++ DISCO ++ ++ ++ ++ set rebuilding finished for '%1' ++ a reconstrução do conjunto foi concluída para'%1' ++ ++ ++ ++ set rebuilding failed for '%1' ++ a reconstrução do conjunto '%1' falhou ++ ++ ++ ++ dry run finished - total analysis time = %1, sets processed = %2, missing ROMs = %3, missing disks = %4 ++ o ensaio foi finalizado - tempo total da análise = %1, conjuntos processados = %2, ROMs que faltam = %3, discos que faltam = %4 ++ ++ ++ ++ rebuilding finished - total rebuild time = %1, sets processed = %2, missing ROMs = %3, missing disks = %4 ++ a reconstrução foi concluída - tempo total = %1, conjuntos processados = %2, ROMs que faltam = %3, discos que faltam = '%4' ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ rebuilder thread ended ++ o processo da reconstrução foi concluída ++ ++ ++ ++ ColorWidget ++ ++ ++ ++ Choose color ++ Escolha uma cor ++ ++ ++ ++ ++ Edit brush ++ Edite o pincel ++ ++ ++ ++ Choose color for %1 / %2 ++ Escolha uma cor para %1 / %2 ++ ++ ++ ++ Edit brush for %1 / %2 ++ Edite o pincel para %1 / %2 ++ ++ ++ ++ ComponentSetup ++ ++ ++ Component setup ++ Configuração do componente ++ ++ ++ ++ Select GUI component to set up ++ Escolha o componente da IU para configurar ++ ++ ++ ++ Master system list views ++ Listas do sistema principal ++ ++ ++ ++ System-specific detail tabs ++ Abas dos detalhes específicos do sistema ++ ++ ++ ++ Logs and special widgets ++ Registros e elementos especiais ++ ++ ++ ++ Software-detail widget ++ Elemento do detalhe do programa ++ ++ ++ ++ Select component arrangement / order ++ Selecione o arranjo do componente / ordem ++ ++ ++ ++ Component arrangement I ++ Arranjo do componente I ++ ++ ++ ++ Component arrangement II ++ Arranjo do componente II ++ ++ ++ ++ Component arrangement III ++ Arranjo do componente III ++ ++ ++ ++ Component arrangement IV ++ Arranjo do componente IV ++ ++ ++ ++ Component arrangement V ++ Arranjo do componente V ++ ++ ++ ++ Component arrangement VI ++ Arranjo do componente VI ++ ++ ++ ++ Component arrangement VII ++ Arranjo do componente VII ++ ++ ++ ++ Component arrangement VIII ++ Arranjo do componente VIII ++ ++ ++ ++ Component arrangement IX ++ Arranjo do componente IX ++ ++ ++ ++ Component arrangement X ++ Arranjo do componente X ++ ++ ++ ++ Component arrangement XI ++ Arranjo do componente XI ++ ++ ++ ++ Component arrangement XII ++ Arranjo do componente XII ++ ++ ++ ++ Component arrangement XIII ++ Arranjo do componente XIII ++ ++ ++ ++ Component arrangement XIV ++ Arranjo do componente XIV ++ ++ ++ ++ Available features ++ Funcionalidades disponíveis ++ ++ ++ ++ List of available features ++ Lista das funcionalidades disponíveis ++ ++ ++ ++ Configure current feature ++ Configure a funcionalidade atual ++ ++ ++ ++ Configure... ++ Configurar... ++ ++ ++ ++ Activate selected features ++ Ativa as funcionalidades selecionadas ++ ++ ++ ++ Active features ++ Funcionalidades ativas ++ ++ ++ ++ List of active features and their order ++ Lista das funcionalidades ativas e a sua ordem ++ ++ ++ ++ Deactivate selected features ++ Desativa as funcionalidades selecionadas ++ ++ ++ ++ Move selected feature up ++ Move as funcionalidades selecionadas para cima ++ ++ ++ ++ Move selected feature down ++ Move as funcionalidades selecionadas para baixo ++ ++ ++ ++ Apply component setup and close dialog ++ Aplica a configuração do componentes e fecha a janela ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ Apply component setup ++ Aplica a configuração dos componentes ++ ++ ++ ++ &Apply ++ &Aplicar ++ ++ ++ ++ Cancel component setup and close dialog ++ Cancela a configuração dos componentes e fecha a janela ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ &Search ++ &Buscar ++ ++ ++ ++ Search systems ++ Buscar por sistemas ++ ++ ++ ++ Favo&rites ++ Favo&ritos ++ ++ ++ ++ Favorite list ++ Lista dos favoritos ++ ++ ++ ++ Pl&ayed ++ Já j&ogados ++ ++ ++ ++ Played list ++ Lista dos jogos já jogados ++ ++ ++ ++ &Foreign emulators ++ &Emuladores estrangeiros ++ ++ ++ ++ Foreign emulator list ++ Lista dos emuladores estrangeiros ++ ++ ++ ++ ++ Embedded emulators ++ Emuladores embutidos ++ ++ ++ ++ Pre&view ++ Pre&visualização ++ ++ ++ ++ Fl&yer ++ Panfl&etos ++ ++ ++ ++ Em&ulator info ++ Informação do em&ulador ++ ++ ++ ++ Emulator information ++ Informação do emulador ++ ++ ++ ++ &Configuration ++ &Configuração ++ ++ ++ ++ Emulator configuration ++ Configuração do emulador ++ ++ ++ ++ Ca&binet ++ Ga&binete ++ ++ ++ ++ Arcade cabinet image ++ Imagem do gabinete do arcade ++ ++ ++ ++ C&ontroller ++ C&ontrole ++ ++ ++ ++ Control panel image ++ Imagem do painel de controle ++ ++ ++ ++ Mar&quee ++ Mar&quise ++ ++ ++ ++ Marquee image ++ Imagem da marquise ++ ++ ++ ++ Titl&e ++ Títul&o ++ ++ ++ ++ Title screen image ++ Imagem da tela do título ++ ++ ++ ++ &PCB ++ &PCI ++ ++ ++ ++ PCB image ++ Imagem da PCI ++ ++ ++ ++ Softwar&e list ++ Lista de progr&amas ++ ++ ++ ++ Software list ++ Lista dos programas ++ ++ ++ ++ &YouTube ++ &YouTube ++ ++ ++ ++ YouTube videos ++ Vídeos do YouTube ++ ++ ++ ++ &Notes ++ &Notas ++ ++ ++ ++ System notes ++ Notas do sistema ++ ++ ++ ++ Snapshot ++ Captura ++ ++ ++ ++ ProjectMESS ++ ProjectMESS ++ ++ ++ ++ De&vices ++ Dispositi&vos ++ ++ ++ ++ Machine &list ++ &Lista das máquinas ++ ++ ++ ++ Machine list ++ Lista das máquinas ++ ++ ++ ++ Machine preview image ++ Imagem de pré-visualização da máquina ++ ++ ++ ++ Machine flyer image ++ Imagem do panfleto da máquina ++ ++ ++ ++ Machine &info ++ &Informações da máquina ++ ++ ++ ++ Machine information ++ Informações da máquina ++ ++ ++ ++ Device configuration ++ Configuração do dispositivo ++ ++ ++ ++ Pr&ojectMESS ++ Pr&ojectMESS ++ ++ ++ ++ ProjectMESS (web lookup) ++ ProjectMESS (acesso web) ++ ++ ++ ++ &Front end log ++ Registro do &Front end ++ ++ ++ ++ Front end log ++ Registro do front end ++ ++ ++ ++ Emulator &log ++ Reg&istro do emulador ++ ++ ++ ++ Emulator log ++ Registro do emulador ++ ++ ++ ++ E&mulator control ++ Controle do e&mulador ++ ++ ++ ++ Emulator control panel ++ Painel de controle do emulador ++ ++ ++ ++ &Audio player ++ &Reprodutor de música ++ ++ ++ ++ Audio player ++ Reprodutor de música ++ ++ ++ ++ Do&wnloads ++ Do&wnloads ++ ++ ++ ++ Downloads ++ Downloads ++ ++ ++ ++ Software snapshot ++ Captura da tela do programa ++ ++ ++ ++ ProjectMESS web lookup ++ Acesso web do ProjectMESS ++ ++ ++ ++ Notes ++ Notas ++ ++ ++ ++ Software notes ++ Notas do programa ++ ++ ++ ++ Software info ++ Informação do programa ++ ++ ++ ++ Software info entry ++ Entrada de informação do programa ++ ++ ++ ++ Choose the YouTube cache directory ++ Escolha a pasta para cache do YouTube ++ ++ ++ ++ FATAL: can't create new YouTube cache directory, path = %1 ++ FATAL: é impossível criar o novo diretório do cache do YouTube, caminho = %1 ++ ++ ++ ++ Question ++ Pergunta ++ ++ ++ ++ The current component's setup hasn't been applied yet. Apply it now? ++ A configuração do componente atual ainda não foi aplicada. Deseja aplicar agora? ++ ++ ++ ++ Controller ++ ++ ++ controller ++ controle ++ ++ ++ ++ CookieJar ++ ++ ++ WARNING: failed to open cookie database: error = '%1' ++ AVISO: houve uma falha ao abrir o banco de dados dos cookies: erro = '%1' ++ ++ ++ ++ WARNING: failed to create cookie database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao criar o banco de dados dos cookies: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to remove cookie database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover o banco de dados dos cookies: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to remove expired cookie from database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover o cookie expirado do banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to update cookie in database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao atualizar o cookie no banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to add cookie to database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao adicionar o cookie ao banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to query cookie database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao consultar o banco de dados dos cookies: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to fetch cookies from database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao carregar os cookies a partir do banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ CookieManager ++ ++ ++ Manage stored cookies ++ Gerencia os cookies armazenados ++ ++ ++ ++ Stored cookies in database ++ Cookies no banco de dados ++ ++ ++ ++ Remove ++ Remover ++ ++ ++ ++ Close dialog ++ Fecha a janela ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ Domain ++ Domínio ++ ++ ++ ++ Path ++ Caminho ++ ++ ++ ++ Value ++ Valor ++ ++ ++ ++ Expiry date ++ Data de expiração ++ ++ ++ ++ Secure? ++ Seguro? ++ ++ ++ ++ HTTP only? ++ Somente HTTP? ++ ++ ++ ++ WARNING: failed to remove cookie from database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover o cookie do banco de dados: consulta = '%1', erro = '%2' ++ ++ ++ ++ CustomIDSetup ++ ++ ++ Setup custom IDs ++ Configurar as IDs personalizadas ++ ++ ++ ++ Display format ++ Formato de visualização ++ ++ ++ ++ Choose / edit the format used to display the IDs in menu items -- valid placeholder macros are $ID$ and $DESCRIPTION$ ++ Escolha / edite o formato usado para mostrar as IDs nos itens do menu -- as variáveis válidas são $ID$ e $DESCRIPTION$ ++ ++ ++ ++ Edit custom IDs for this emulator (double-click an item to edit) ++ Edite as IDs personalizadas para esse emulador (clique duplo num item para editar) ++ ++ ++ ++ Icon ++ Ícone ++ ++ ++ ++ ID ++ ID ++ ++ ++ ++ Description ++ Descrição ++ ++ ++ ++ Cancel ID customization and close dialog ++ Cancela a personalização da ID e fecha a janela ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ Remove the currently selected ID ++ Remove a ID selecionado atualmente ++ ++ ++ ++ Add a new ID ++ Adiciona uma nova ID ++ ++ ++ ++ Accept customized IDs and close dialog ++ Aceita a ID personalizada e fecha a janela ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ Copy IDs from another foreign emulator (if any) ++ Copiar as IDs de um outro emulador (se existir) ++ ++ ++ ++ Copy IDs ++ Copia as IDs ++ ++ ++ ++ Enable / disable sorting ++ Ativa / Desativa a ordenação ++ ++ ++ ++ Setup custom IDs for '%1' ++ Configuração das IDs personalizadas para '%1' ++ ++ ++ ++ ++ Choose icon for this foreign ID (hold down for menu) ++ Escolha o ícone para essa ID de fora (mantenha pressionado para exibir o menu) ++ ++ ++ ++ ++ Default icon ++ Ícone padrão ++ ++ ++ ++ ++ No icon ++ Sem ícone ++ ++ ++ ++ Choose image file ++ Escolher arquivo de imagem ++ ++ ++ ++ Supported image files (%1) ++ Arquivos de imagem compatíveis (%1) ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ DatInfoDatabaseManager ++ ++ ++ WARNING: failed to open DAT-info database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir o banco de dados de informações DAT '%1' erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao carregar '%1' do banco de dados de informações DAT: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar '%1' ao banco de dados de informações DAT: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar '%1' no banco de dados de informações DAT: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler quantidade de linhas do banco de dados de informações DAT: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração '%1' do banco de dados de informações DAT: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to remove %1 table: query = '%2', error = '%3' ++ AVISO: houve uma falha ao remover a tabela '%1': consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ software-info ++ Informação do programa ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to create %1 table: query = '%2', error = '%3' ++ AVISO: houve uma falha ao criar a tabela '%1': consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ emu-info ++ Informação do emulador ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ machine-info ++ informações da máquina ++ ++ ++ ++ ++ machine info-texts ++ textos de informação da máquina ++ ++ ++ ++ Machine info - %p% ++ Informações de máquina - %p% ++ ++ ++ ++ WARNING: missing '$end' in machine info file %1 ++ AVISO: '$end' está faltando no arquivo de informação da máquina %1 ++ ++ ++ ++ WARNING: missing '$bio' in machine info file %1 ++ AVISO: '$bio' está faltando no arquivo de informação da máquina %1 ++ ++ ++ ++ WARNING: missing '$info' in machine info file %1 ++ AVISO: '$info' está faltando no arquivo de informação da máquina %1 ++ ++ ++ ++ machine info ++ informações da máquina ++ ++ ++ ++ WARNING: can't open machine info file %1 ++ AVISO: foi impossível abrir o arquivo de informação da máquina %1 ++ ++ ++ ++ %n machine info record(s) imported ++ ++ %n registro de informação de máquina importado ++ %n registros de informação de máquinas importado ++ ++ ++ ++ ++ ++ ++ WARNING: failed to alter %1 table: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar tabela %1: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ meta-data ++ meta dados ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ DAT-info database ++ Base de dados de informação DAT ++ ++ ++ ++ ++ ++ importing %1 from '%2' ++ Importando '%1' de '%2' ++ ++ ++ ++ ++ software info-texts ++ textos de informação do programa ++ ++ ++ ++ Software info - %p% ++ Informação do programa - %p% ++ ++ ++ ++ ++ ++ import stopped, invalidating %1 table ++ a importação foi parada, invalidando a tabela %1 ++ ++ ++ ++ software info ++ informação do programa ++ ++ ++ ++ ++ ++ done (importing %1 from '%2') ++ feito (importando %1 de %2) ++ ++ ++ ++ %n software info record(s) imported ++ ++ %n registro de informação de software importado ++ %n registros de informação de software importados ++ ++ ++ ++ ++ WARNING: can't open software info file '%1' ++ AVISO: foi impossível abrir o arquivo de informação do programa %1 ++ ++ ++ ++ ++ emulator info-texts ++ textos de informação de emulador ++ ++ ++ ++ Emu info - %p% ++ Informação do emulador - %p% ++ ++ ++ ++ WARNING: missing '$end' in emulator info file %1 ++ AVISO: '$end' está faltando no arquivo de informação do emulador %1 ++ ++ ++ ++ WARNING: missing '$mame' in emulator info file %1 ++ AVISO: '$mame' está faltando no arquivo de informação do emulador %1 ++ ++ ++ ++ WARNING: missing '$info' in emulator info file %1 ++ AVISO: '$info' está faltando no arquivo de informação do emulador %1 ++ ++ ++ ++ emu info ++ informação do emulador ++ ++ ++ ++ %n emulator info record(s) imported ++ ++ %n registro de informação de emulador importado ++ %n registros de informação de emulador importados ++ ++ ++ ++ ++ WARNING: can't open emulator info file %1 ++ AVISO: foi impossível abrir o arquivo de informação do emulador %1 ++ ++ ++ ++ DemoModeDialog ++ ++ ++ demo mode stopped ++ modo demonstração foi parado ++ ++ ++ ++ ++ Run &demo ++ Inicia a &demonstração ++ ++ ++ ++ ++ Run demo now ++ Inicia a demonstração agora ++ ++ ++ ++ please wait for reload to finish and try again ++ aguarde a conclusão do recarregamento e tente novamente ++ ++ ++ ++ please wait for ROM verification to finish and try again ++ espere pela conclusão da verificação da ROM e tente novamente ++ ++ ++ ++ WARNING: demo mode: the name filter regular expression is invalid ++ AVISO: modo de demonstração: a expressão regular do filtro de nome é inválida ++ ++ ++ ++ imperfect ++ imperfeito ++ ++ ++ ++ demo mode started -- %n machine(s) selected by filter ++ ++ modo demonstração iniciado -- %n máquina selecionada pelo filtro ++ modo demonstração iniciado -- %n máquinas selecionadas pelo filtro ++ ++ ++ ++ ++ demo mode cannot start -- no machine selected by filter ++ não é possível iniciar o modo de demonstração -- não há nenhuma máquina selecionada pelo filtro ++ ++ ++ ++ Stop &demo ++ Pare a &demonstração ++ ++ ++ ++ Stop demo now ++ Pare a demonstração agora ++ ++ ++ ++ starting emulation in demo mode for '%1' ++ iniciando a emulação em modo de demonstração para '%1' ++ ++ ++ ++ Demo mode ++ Modo de demonstração ++ ++ ++ ++ Clear name filter ++ Limpa a filtragem por nome ++ ++ ++ ++ ROM state filter ++ Filtro da condição da ROM ++ ++ ++ ++ Use only sets included in the favorites list? ++ Usar apenas os conjuntos que foram incluídos na lista dos favoritos? ++ ++ ++ ++ Favorites ++ Favoritos ++ ++ ++ ++ good + imperfect ++ bom + imperfeito ++ ++ ++ ++ good + imperfect + preliminary ++ bom + imperfeito + preliminar ++ ++ ++ ++ Select ROM state C (correct)? ++ Selecionar a ROM com estado C (correto)? ++ ++ ++ ++ Select ROM state M (mostly correct)? ++ Selecionar a ROM com estado M (maioria correto)? ++ ++ ++ ++ Select ROM state I (incorrect)? ++ Selecionar a ROM com estado I (incorreto)? ++ ++ ++ ++ Select ROM state N (not found)? ++ Selecionar estado de ROM (não encontrado)? ++ ++ ++ ++ Select ROM state U (unknown)? ++ Selecionar a ROM com estado D (desconhecido)? ++ ++ ++ ++ Use only parent sets (no clones)? ++ Usar apenas os conjuntos principais (sem os clones)? ++ ++ ++ ++ Parents ++ Principais ++ ++ ++ ++ Seconds to run ++ Segundos de execução ++ ++ ++ ++ Number of seconds to run an emulator in demo mode ++ Quantidade de segundos para executar um emulador em modo de demonstração ++ ++ ++ ++ Tagged ++ Etiquetados ++ ++ ++ ++ Pause (seconds) ++ Pause (segundos) ++ ++ ++ ++ Number of seconds to pause between emulator runs ++ Quantidade de segundos de pausa entre as execuções do emulador ++ ++ ++ ++ Category filter ++ Filtro de categoria ++ ++ ++ ++ Driver status ++ Condição geral do controlador ++ ++ ++ ++ Name filter ++ Filtro por nome ++ ++ ++ ++ Choose the driver maturity states for sets to be included in the demo ++ Escolha os estados de maturidade dos controladores para os conjuntos que serão incluídos na demonstração ++ ++ ++ ++ ++ ++ good ++ bom ++ ++ ++ ++ Start emulators in full screen mode (otherwise use windowed mode) ++ Inicia os emuladores em modo de tela cheia (senão use modo janela) ++ ++ ++ ++ Full screen ++ Tela cheia ++ ++ ++ ++ Launch sets sequentially rather than randomly ++ Executa os conjuntos sequencialmente em vez do modo aleatório ++ ++ ++ ++ Sequential ++ Sequencial ++ ++ ++ ++ Use only sets that are tagged? ++ Use apenas os conjuntos que foram etiquetados? ++ ++ ++ ++ Deselect all categories ++ Remove a seleção de todas as categorias ++ ++ ++ ++ Select all categories ++ Seleciona todas as categorias ++ ++ ++ ++ Specify a name (ID) filter-expression (Qt regular-expression syntax!) -- leave empty to not filter by name ++ Determine um nome (ID) para o filtro (sintaxe de expressões regulares do Qt!) -- deixe em branco para não filtrar por nome ++ ++ ++ ++ Select / deselect the categories you want to include / exclude ++ Seleciona / remove a seleção das categorias que você deseja incluir / excluir ++ ++ ++ ++ Maximize emulators when in windowed mode ++ Maximiza os emuladores quando estiver no modo janela ++ ++ ++ ++ Maximized ++ Maximizado ++ ++ ++ ++ Embed windowed emulators ++ Embuti os emuladores em modo janela ++ ++ ++ ++ Embedded ++ Embutido ++ ++ ++ ++ ++ s ++ s ++ ++ ++ ++ Options ++ Opções ++ ++ ++ ++ Close this dialog (and stop running demo) ++ Feche esta janela (e pare a demonstração em andamento) ++ ++ ++ ++ &Close ++ &Fechar ++ ++ ++ ++ DeviceConfigurator ++ ++ ++ Select default device directory ++ Selecione o diretório padrão do dispositivo ++ ++ ++ ++ &Default device directory for '%1'... ++ Diretório &padrão do dispositivo para '%1'... ++ ++ ++ ++ Enter configuration name ++ Insira o nome da configuração ++ ++ ++ ++ Enter search string ++ Insira o termo da busca ++ ++ ++ ++ ++ &Play ++ &Jogar ++ ++ ++ ++ ++ Play &embedded ++ Jogar o &embutido ++ ++ ++ ++ Rename configuration ++ Renomear a configuração ++ ++ ++ ++ Re&name configuration ++ Re&nomear a configuração ++ ++ ++ ++ Remove configuration ++ Remover a configuração ++ ++ ++ ++ &Remove configuration ++ &Remover a configuração ++ ++ ++ ++ Select a file to be mapped to this device instance ++ Selecione um arquivo para ser mapeado para esta instância do dispositivo ++ ++ ++ ++ Select file... ++ Selecione o arquivo... ++ ++ ++ ++ Use as default directory ++ Use como o diretório padrão ++ ++ ++ ++ &Open folder ++ &Abrir a pasta ++ ++ ++ ++ ++ &Open archive ++ &Abrir o arquivo compactado ++ ++ ++ ++ View PDF... ++ Ver o PDF... ++ ++ ++ ++ View Postscript... ++ Ver o Postscript... ++ ++ ++ ++ View HTML... ++ Ver o HTML... ++ ++ ++ ++ Open e&xternally... ++ Abrir o e&xternamente... ++ ++ ++ ++ Hide folders ++ Esconder as pastas ++ ++ ++ ++ Show folders ++ Mostrar as pastas ++ ++ ++ ++ Show folders first ++ Mostrar as pastas primeiro ++ ++ ++ ++ ++ ++ ++ ++ No devices available ++ Nenhum dispositivo está disponível ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ not used ++ não usado ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ N/A ++ N/A ++ ++ ++ ++ ++ Play selected machine (embedded) ++ Joga a máquina selecionada (embutida) ++ ++ ++ ++ ++ Play selected machine ++ Joga a máquina selecionada ++ ++ ++ ++ FATAL: error while parsing XML data for '%1' ++ FATAL: houve um erro durante a análise dos dados XML para '%1' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ default ++ padrão ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Default configuration ++ Configuração padrão ++ ++ ++ ++ ++ %1. copy of ++ %1. cópia de ++ ++ ++ ++ ++ %1. variant of ++ %1. variante de ++ ++ ++ ++ Choose default device directory for '%1' ++ Escolha o diretório padrão do dispositivo para '%1' ++ ++ ++ ++ &Close archive ++ &Fechar o arquivo compactado ++ ++ ++ ++ Choose a unique configuration name ++ Escolha um nome de configuração único ++ ++ ++ ++ Unique configuration name: ++ Nome de configuração único: ++ ++ ++ ++ Name conflict ++ Conflito com o nome ++ ++ ++ ++ A configuration named '%1' already exists. ++ ++Do you want to choose a different name? ++ A configuração chamada '%1' já existe. ++ ++Deseja escolher um outro nome? ++ ++ ++ ++ Active device configuration ++ Configuração do dispositivo ativo ++ ++ ++ ++ ++ Remove current device configuration ++ Remove a configuração do dispositivo atual ++ ++ ++ ++ ++ Save current device configuration ++ Salva a configuração do dispositivo atual ++ ++ ++ ++ Stored device configurations ++ Configurações salvas do dispositivo ++ ++ ++ ++ ++ Device configuration menu ++ Menu de configuração do dispositivo ++ ++ ++ ++ ++ Name of device configuration ++ Nome das configurações dos dispositivos ++ ++ ++ ++ ++ Create a new device configuration ++ Cria uma nova configuração do dispositivo ++ ++ ++ ++ ++ Clone current device configuration ++ Clona a configuração do dispositivo ativo ++ ++ ++ ++ Device configuration ++ Configuração do dispositivo ++ ++ ++ ++ Device mappings ++ Mapeamentos dos dispositivos ++ ++ ++ ++ ++ Device setup of current configuration ++ Configuração do dispositivo da configuração atual ++ ++ ++ ++ Device instance ++ Instância do dispositivo ++ ++ ++ ++ Brief name ++ Nome resumido ++ ++ ++ ++ Type ++ Tipo ++ ++ ++ ++ Extensions ++ Extensões ++ ++ ++ ++ File ++ Arquivo ++ ++ ++ ++ Slot options ++ Opções dos slots ++ ++ ++ ++ ++ Available slot options ++ Opções dos slots disponíveis ++ ++ ++ ++ Slot ++ Slot ++ ++ ++ ++ Option ++ Opção ++ ++ ++ ++ BIOS ++ BIOS ++ ++ ++ ++ File chooser ++ Seletor de arquivo ++ ++ ++ ++ ++ Save selected instance / file as a new device configuration ++ Salva a instância selecionada / arquivo como uma nova configuração do dispositivo ++ ++ ++ ++ ++ Select the device instance the file is mapped to ++ Selecione a instância do dispositivo para onde o arquivo está mapeado ++ ++ ++ ++ ++ Automatically select the first matching device instance when selecting a file with a valid extension ++ Seleciona automaticamente a primeira instância condizente ao selecionar um arquivo com a extensão válida ++ ++ ++ ++ ++ Merge file-chooser mapping with current device-mappings ++ Combine o mapeamento da escolha do arquivo com os mapeamentos dos dispositivos atuais ++ ++ ++ ++ ++ List of stored device configurations ++ Lista das configurações dos dispositivos já salvos ++ ++ ++ ++ ++ Filter files by allowed extensions for the current device instance ++ Filtre os arquivos por extensões permitidas para a instância do dispositivo atual ++ ++ ++ ++ ++ Process ZIP and 7z contents on item activation ++ Processar o conteúdo ZIP e o 7z na ativação do item ++ ++ ++ ++ Folder mode selection ++ Modo de seleção de pastas ++ ++ ++ ++ ++ Enter search string (case-insensitive) ++ Insira o termo da busca (insensível à caixa) ++ ++ ++ ++ ++ Clear search string ++ Limpa o termo buscado ++ ++ ++ ++ ++ Number of files scanned ++ Quantidade de arquivos examinados ++ ++ ++ ++ ++ Reload directory contents ++ Recarregue o conteúdo do diretório ++ ++ ++ ++ ++ Play the selected configuration ++ Execute a configuração selecionada ++ ++ ++ ++ ++ Play the selected configuration (embedded) ++ Execute a configuração selecionada (embutido) ++ ++ ++ ++ DeviceItemDelegate ++ ++ ++ ++ All files ++ Todos os arquivos ++ ++ ++ ++ ++ Valid device files ++ Arquivos de dispositivo válidos ++ ++ ++ ++ FATAL: can't start emulator executable within a reasonable time frame, giving up ++ FATAL: foi impossível iniciar o executável do emulador dentro de um tempo razoável, desistindo ++ ++ ++ ++ error text = %1 ++ texto do erro = %1 ++ ++ ++ ++ DirectoryEditWidget ++ ++ ++ Choose directory ++ Escolha a pasta ++ ++ ++ ++ DirectoryModel ++ ++ ++ Drives / Folders ++ Controladores / Pastas ++ ++ ++ ++ Folders ++ Pastas ++ ++ ++ ++ DocBrowser ++ ++ ++ ++ ++ ++ ++ MiniWebBrowser ++ MiniWebBrowser ++ ++ ++ ++ Embedder ++ ++ ++ ++ emulator #%1 released, window ID = %2 ++ emulador #%1 liberado, ID da janela = %2 ++ ++ ++ ++ WARNING: invalid window ID %1 ++ AVISO: a ID da janela é inválido %1 ++ ++ ++ ++ WARNING: unknown error, window ID = %1 ++ AVISO: houve um erro desconhecido, ID da janela = %1 ++ ++ ++ ++ window ID for emulator #%1 lost, looking for replacement ++ a ID da janela para o emulador #%1 foi perdido, procurando por um substituto ++ ++ ++ ++ using replacement window ID %1 for emulator #%2 ++ usando a janela substituta com ID %1 para o emulador #%2 ++ ++ ++ ++ no replacement window ID found for emulator #%1, closing embedder ++ nenhuma ID para a janela substituta foi encontrada para o emulador #%1, fechando o incorporador ++ ++ ++ ++ embedded emulator #%1 is returning from full-screen ++ o emulador embutido #%1 está retornando do modo de tela cheia ++ ++ ++ ++ embedded emulator #%1 is switching to full-screen, using desktop-resolution %2x%3 ++ o emulador embutido #%1 está mudando para o modo de tela cheia, usando a resolução do desktop %2x%3 ++ ++ ++ ++ ++ emulator #%1 embedded, window ID = %2 ++ o emulador #%1 embutido, ID da janela = 0x%2 ++ ++ ++ ++ EmbedderOptions ++ ++ ++ Embedder options ++ Opções para incorporar ++ ++ ++ ++ Take a snapshot of the current window content -- hold to take snapshots repeatedly (every 100ms) ++ Capturar a tela do conteúdo atual da janela -- segure para tirar várias capturas da tela (a cada 100ms) ++ ++ ++ ++ Take snapshot ++ Faz uma captura da tela ++ ++ ++ ++ Zoom ++ Aproximação ++ ++ ++ ++ ++ Set zoom factor for snapshot items ++ Defina o fator de zoom para itens de captura ++ ++ ++ ++ % ++ % ++ ++ ++ ++ Save selected image ++ Salvar a imagem selecionada ++ ++ ++ ++ Save as ++ Salvar como ++ ++ ++ ++ Clear snapshots ++ Excluir as capturas da tela ++ ++ ++ ++ Clear ++ Limpar ++ ++ ++ ++ Choose the image-type for which the selected image should be used directly ++ Escolha o tipo de imagem para onde a imagem selecionada deveria ser diretamente usada ++ ++ ++ ++ Use as ++ Usar como ++ ++ ++ ++ Select the snapshot scaling mode ++ Selecione o modo de dimensionamento da captura da tela ++ ++ ++ ++ No scaling ++ Sem dimensionar ++ ++ ++ ++ Original size - no filter ++ Tamanho original - sem filtro ++ ++ ++ ++ Original size - filtered ++ Tamanho original - filtrado ++ ++ ++ ++ EmulatorOptionActions ++ ++ ++ Reset to default value ++ Restaura os valores para o padrão ++ ++ ++ ++ Revert to stored value ++ Reverte para os valores já salvos ++ ++ ++ ++ Store value ++ Salva o valor ++ ++ ++ ++ Forcibly pass the default value (when checked) ++ Impor o valor padrão (quando marcado) ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Type ++ Tipo ++ ++ ++ ++ Reset to global value ++ Reiniciar para valor global ++ ++ ++ ++ Confirm ++ Confirma ++ ++ ++ ++ An open machine-specific emulator configuration has been detected. ++Use local value for option '%1', overwrite with global value or don't apply? ++ Foi detectada uma configuração aberta da máquina do emulador. ++Utilize o valor local para a opção '%1', substituir com o valor global ou não aplicar? ++ ++ ++ ++ &Local ++ &Local ++ ++ ++ ++ &Overwrite ++ &Sobrescrever ++ ++ ++ ++ Do&n't apply ++ &Não aplicar ++ ++ ++ ++ <EMPTY> ++ <VAZIO> ++ ++ ++ ++ EmulatorOptionDelegate ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ ++ Browse: ++ Procurar: ++ ++ ++ ++ enabled ++ ativado ++ ++ ++ ++ disabled ++ desativado ++ ++ ++ ++ EmulatorOptions ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ Global emulator configuration ++ Configuração global do emulador ++ ++ ++ ++ Option / Attribute ++ Opção / atributo ++ ++ ++ ++ Value ++ Valor ++ ++ ++ ++ ++ true ++ verdadeiro ++ ++ ++ ++ false ++ falso ++ ++ ++ ++ ++ Type ++ Tipo ++ ++ ++ ++ Actions ++ Ações ++ ++ ++ ++ bool ++ booleano ++ ++ ++ ++ int ++ inteiro ++ ++ ++ ++ float ++ flutuante ++ ++ ++ ++ float2 ++ flutuante2 ++ ++ ++ ++ float3 ++ flutuante3 ++ ++ ++ ++ file ++ arquivo ++ ++ ++ ++ directory ++ diretório ++ ++ ++ ++ choice ++ escolha ++ ++ ++ ++ string ++ texto ++ ++ ++ ++ Short name ++ Nome curto ++ ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Machine specific emulator configuration ++ Configuração do emulador específica para a máquina ++ ++ ++ ++ ++ ++ ++ <EMPTY> ++ <VAZIO> ++ ++ ++ ++ color ++ cor ++ ++ ++ ++ Description ++ Descrição ++ ++ ++ ++ WIP ++ TEA ++ ++ ++ ++ creating template configuration map ++ criando um modelo do mapa de configuração ++ ++ ++ ++ FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 ++ FATAL: erro do XML ao ler o modelo: %1 no arquivo %2 na linha %3 coluna %4 ++ ++ ++ ++ relative to the emulator's working directory ++ relativo ao diretório de trabalho do emulador ++ ++ ++ ++ relative to the path specified in '%1' ++ relativo ao caminho especificado em '%1' ++ ++ ++ ++ template info: emulator = %1, version = %2, format = %3 ++ informação do modelo: emulador = %1, versão = %2, formato = %3 ++ ++ ++ ++ FATAL: can't open options template file ++ FATAL: foi impossível abrir o arquivo de opções do modelo ++ ++ ++ ++ WARNING: couldn't determine emulator type of template ++ AVISO: foi impossível determinar o tipo do modelo do emulador ++ ++ ++ ++ WARNING: couldn't determine template version ++ AVISO: foi impossível determinar versão do modelo ++ ++ ++ ++ WARNING: couldn't determine template format ++ AVISO: foi impossível determinar o formato do modelo ++ ++ ++ ++ please wait for reload to finish and try again ++ aguarde a conclusão do recarregamento e tente novamente ++ ++ ++ ++ ++ checking template configuration map against selected emulator ++ verificando o mapa de configuração do modelo contra o emulador selecionado ++ ++ ++ ++ ++ FATAL: %1 executable file '%2' doesn't exist ++ FATAL: arquivo executável do %1 %2 não existe ++ ++ ++ ++ ++ FATAL: '%1' isn't executable ++ FATAL: '%1' não é um executável ++ ++ ++ ++ ++ FATAL: can't start MAME executable within a reasonable time frame, giving up ++ FATAL: foi impossível iniciar o executável do MAME dentro de um tempo razoável, desistindo ++ ++ ++ ++ ++ error text = %1 ++ texto do erro = %1 ++ ++ ++ ++ ++ FATAL: can't create temporary file, please check emulator executable and permissions ++ FATAL: foi impossível criar aquivo temporário, verifique o executável do emulador e as suas permissões ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ emulator uses a different default value for option '%1' ('%2' vs. '%3'); assumed option type is '%4' ++ o emulador usa um valor padrão diferente para a opção '%1' ('%2' vs. '%3'); assumido que o tipo da opção é '%4' ++ ++ ++ ++ ++ template option '%1' is unknown to the emulator ++ a opção do modelo '%1' é desconhecida para o emulador ++ ++ ++ ++ ++ emulator option '%1' with default value '%2' is unknown to the template ++ a opção do emulador '%1' com o valor padrão '%2' é desconhecido para o modelo ++ ++ ++ ++ ++ done (checking template configuration map against selected emulator) ++ feito (verificando o mapa de configuração do modelo contra o emulador selecionado) ++ ++ ++ ++ ++ check results: %n difference(s) ++ ++ verificando resultados: %n diferença(s) ++ verificando resultados: %n diferença(s) ++ ++ ++ ++ ++ Enter search string ++ Insira o termo da busca ++ ++ ++ ++ WARNING: ini-export: no writable ini-paths found ++ AVISO: ini-export: nenhum caminho do ini com permissões de escrita foi encontrado ++ ++ ++ ++ ++ Path selection ++ Seleção do caminho ++ ++ ++ ++ Multiple ini-paths detected. Select path(s) to export to: ++ Diversos caminhos ini foram detectados. Selecione o(s) caminho(s) para exportar: ++ ++ ++ ++ WARNING: ini-export: no path selected (or invalid inipath) ++ AVISO: ini-export: nenhum caminho foi selecionado (ou o caminho do ini é inválido) ++ ++ ++ ++ FATAL: can't open export file for writing, path = %1 ++ FATAL: foi impossível abrir o arquivo de exportação para escrita, caminho = %1 ++ ++ ++ ++ exporting %1 MAME configuration to %2 ++ exportando a configuração do MAME %1 para %2 ++ ++ ++ ++ ++ ++ ++ global ++ global ++ ++ ++ ++ ++ ++ ++ machine-specific ++ específico da máquina ++ ++ ++ ++ done (exporting %1 MAME configuration to %2, elapsed time = %3) ++ feito (exportando a configuração do MAME %1 para %2, tempo = %3) ++ ++ ++ ++ WARNING: ini-import: no readable ini-paths found ++ AVISO: ini-import: nenhum caminho do ini com permissões de leitura foram encontrado ++ ++ ++ ++ Multiple ini-paths detected. Select path(s) to import from: ++ Diversos caminhos ini foram detectados. Selecione o(s) caminho(s) para importar: ++ ++ ++ ++ WARNING: ini-import: no path selected (or invalid inipath) ++ AVISO: ini-import: nenhum caminho foi selecionado (ou com caminho ini inválido) ++ ++ ++ ++ FATAL: can't open import file for reading, path = %1 ++ FALTAL: foi impossível abrir o arquivo de importação para leitura: caminho = %1 ++ ++ ++ ++ importing %1 MAME configuration from %2 ++ importando a configuração do MAME %1 para %2 ++ ++ ++ ++ WARNING: unknown option '%1' at line %2 (%3) ignored ++ AVISO: foi ignorada a opção desconhecida '%1' na linha %2 (%3) ++ ++ ++ ++ WARNING: invalid syntax at line %1 (%2) ignored ++ AVISO: foi ignorada a sintaxe inválida na linha %1 (%2) ++ ++ ++ ++ done (importing %1 MAME configuration from %2, elapsed time = %3) ++ feito (importando a configuração do MAME %1 para %2, tempo = %3) ++ ++ ++ ++ FileEditWidget ++ ++ ++ ++ Choose file ++ Escolha o arquivo ++ ++ ++ ++ File path ++ Caminho do arquivo ++ ++ ++ ++ Browse ++ Procurar ++ ++ ++ ++ Clear ++ Limpar ++ ++ ++ ++ FileSystemModel ++ ++ ++ Name ++ Nome ++ ++ ++ ++ Size ++ Tamanho ++ ++ ++ ++ ++ KB ++ KB ++ ++ ++ ++ ++ MB ++ MB ++ ++ ++ ++ ++ GB ++ GB ++ ++ ++ ++ TB ++ TB ++ ++ ++ ++ Date modified ++ Modificação da data ++ ++ ++ ++ FilterConfigurationDialog ++ ++ ++ Configure filters ++ Configurar os filtros ++ ++ ++ ++ <b><font size="+2">Add a new filter on the left or select an existing one</font></b> ++ <b><font size="+2">Adicione um novo filtro na esquerda ou selecione um já existente</font></b> ++ ++ ++ ++ Filter expression ++ Expressão do filtro ++ ++ ++ ++ Filter expression (empty string) ++ Expressão do filtro (texto vazio) ++ ++ ++ ++ Match mode ++ Modo de correspondência ++ ++ ++ ++ Select the filter type (include / exclude filter) ++ Selecione o tipo do filtro (filtro de inclusão / exclusão) ++ ++ ++ ++ Include matches ++ Incluir os resultados ++ ++ ++ ++ Exclude matches ++ Excluir os resultados ++ ++ ++ ++ Choose the regular expression syntax ++ Escolha a sintaxe da expressão regular ++ ++ ++ ++ Clear filter expression ++ Limpa a expressão do filtro ++ ++ ++ ++ Choose match mode (sub-strings or exact matches) ++ Escolha o modo de correspondência (contém texto ou a correspondência exata) ++ ++ ++ ++ Sub string match ++ Contém ++ ++ ++ ++ Exact match ++ Correspondência exata ++ ++ ++ ++ Filter type ++ Tipo do filtro ++ ++ ++ ++ Expression syntax ++ Sintaxe da expressão ++ ++ ++ ++ Apply changes and close dialog ++ Aplica as alterações e fecha a janela ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ Apply changes now ++ Aplica as alterações agora ++ ++ ++ ++ Apply ++ Aplicar ++ ++ ++ ++ Revert changes and close dialog ++ Reverte as alterações e fecha a janela ++ ++ ++ ++ Cancel ++ Cancelar ++ ++ ++ ++ ++ Add filter ++ Adiciona um filtro ++ ++ ++ ++ Inactive filter ++ Filtro inativo ++ ++ ++ ++ ++ Remove filter ++ Remove um filtro ++ ++ ++ ++ Flyer ++ ++ ++ flyer ++ panfleto ++ ++ ++ ++ FtpReply ++ ++ ++ FTP directory listing for %1 ++ Listagem do diretório FTP para %1 ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ Type ++ Tipo ++ ++ ++ ++ Size ++ Tamanho ++ ++ ++ ++ Parent directory ++ Diretório principal ++ ++ ++ ++ File ++ Arquivo ++ ++ ++ ++ Folder ++ Pasta ++ ++ ++ ++ Unknown ++ Desconhecido ++ ++ ++ ++ HTMLEditorMainWindow ++ ++ ++ HTML Editor ++ Editor HTML ++ ++ ++ ++ WYSIWYG ++ WYSIWYG ++ ++ ++ ++ about:blank ++ about:blank ++ ++ ++ ++ HTML ++ HTML ++ ++ ++ ++ &File ++ &Arquivo ++ ++ ++ ++ &Edit ++ &Editar ++ ++ ++ ++ Insert &image ++ Inserir &Imagem ++ ++ ++ ++ F&ormat ++ F&ormatar ++ ++ ++ ++ St&yle ++ Est&ilo ++ ++ ++ ++ &Align ++ &Alinhar ++ ++ ++ ++ Standard tool-bar ++ Barra de ferramentas padrão ++ ++ ++ ++ Formatting tool-bar ++ Barra de ferramentas da formatação ++ ++ ++ ++ &New ++ &Novo ++ ++ ++ ++ ++ ++ New file ++ Novo arquivo ++ ++ ++ ++ New from &template ++ Novo a partir de um &modelo ++ ++ ++ ++ New from template ++ Novo a partir de um modelo ++ ++ ++ ++ ++ Generates a new document using the template ++ Cria um novo documento usando um modelo ++ ++ ++ ++ &Revert ++ &Reverter ++ ++ ++ ++ Revert changes ++ Reverte as alterações ++ ++ ++ ++ ++ Revert changes from saved file ++ Reverte as alterações à partir do arquivo já salvo ++ ++ ++ ++ &Open... ++ A&brir... ++ ++ ++ ++ ++ ++ Open file ++ Abrir arquivo ++ ++ ++ ++ &Save ++ &Salvar ++ ++ ++ ++ ++ ++ Save file ++ Salvar arquivo ++ ++ ++ ++ Save &copy... ++ Salvar &cópia... ++ ++ ++ ++ ++ ++ Save file under a different name ++ Salvar arquivo com um nome diferente ++ ++ ++ ++ Open in browser... ++ Abrir no browser... ++ ++ ++ ++ Open in new browser window ++ Abrir numa nova janela do browser ++ ++ ++ ++ ++ Open the document in a new browser window ++ Abrir o documento numa nova janela do browser ++ ++ ++ ++ &Undo ++ &Desfazer ++ ++ ++ ++ Undo ++ Desfazer ++ ++ ++ ++ &Redo ++ &Refazer ++ ++ ++ ++ Redo ++ Refazer ++ ++ ++ ++ Cu&t ++ Recor&tar ++ ++ ++ ++ Cut ++ Recortar ++ ++ ++ ++ &Copy ++ &Copiar ++ ++ ++ ++ Copy ++ Copiar ++ ++ ++ ++ &Paste ++ C&olar ++ ++ ++ ++ Paste ++ Colar ++ ++ ++ ++ Select a&ll ++ Selecionar tu&do ++ ++ ++ ++ Select all ++ Selecionar tudo ++ ++ ++ ++ &Bold ++ &Negrito ++ ++ ++ ++ Bold ++ Negrito ++ ++ ++ ++ &Italic ++ &Itálico ++ ++ ++ ++ Italic ++ Itálico ++ ++ ++ ++ &Underline ++ &Sublinhado ++ ++ ++ ++ Underline ++ Sublinhado ++ ++ ++ ++ &Strikethrough ++ &Tachado ++ ++ ++ ++ Strikethrough ++ Tachado ++ ++ ++ ++ Align &left ++ Alinhar à &esquerda ++ ++ ++ ++ Align left ++ Alinhar à esquerda ++ ++ ++ ++ Align &center ++ &Centralizar ++ ++ ++ ++ Align center ++ Centralizar ++ ++ ++ ++ Align &right ++ Alinhar à &direita ++ ++ ++ ++ Align right ++ Alinhar à direita ++ ++ ++ ++ Align &justied ++ &Justificar ++ ++ ++ ++ Align justied ++ Justificar ++ ++ ++ ++ I&ncrease indent ++ &Aumenta o recuo ++ ++ ++ ++ Increase indent ++ Aumenta o recuo ++ ++ ++ ++ &Decrease indent ++ &Reduz o recuo ++ ++ ++ ++ Decrease indent ++ Reduz o recuo ++ ++ ++ ++ Bulle&ted list ++ Lista com &marcadores ++ ++ ++ ++ Bulleted list ++ Lista com marcadores ++ ++ ++ ++ &Numbered list ++ Lista &numerada ++ ++ ++ ++ Numbered list ++ Lista numerada ++ ++ ++ ++ From &file... ++ Do &arquivo... ++ ++ ++ ++ Insert image from file ++ Inserir uma imagem do arquivo ++ ++ ++ ++ From &URL... ++ Da &URL... ++ ++ ++ ++ Insert image from URL ++ Insira uma imagem da URL ++ ++ ++ ++ Create &link... ++ Criar &link... ++ ++ ++ ++ Create link ++ Criar um link ++ ++ ++ ++ ++ Zoom out ++ Reduzir a aproximação ++ ++ ++ ++ ++ Zoom in ++ Aumentar a aproximação ++ ++ ++ ++ &Paragraph ++ &Parágrafo ++ ++ ++ ++ Heading &1 ++ Título &1 ++ ++ ++ ++ Heading &2 ++ Título &2 ++ ++ ++ ++ Heading &3 ++ Título &3 ++ ++ ++ ++ Heading &4 ++ Título &4 ++ ++ ++ ++ Heading &5 ++ Título &5 ++ ++ ++ ++ Heading &6 ++ Título &6 ++ ++ ++ ++ Pre&formatted ++ Pré &formatado ++ ++ ++ ++ &Address ++ &Endereço ++ ++ ++ ++ &Font name... ++ Nome da &fonte... ++ ++ ++ ++ Font name ++ Nome da fonte ++ ++ ++ ++ Text &color... ++ &Cor do texto... ++ ++ ++ ++ Text color ++ Cor do texto ++ ++ ++ ++ Bac&kground color... ++ Cor de f&undo... ++ ++ ++ ++ Background color ++ Cor de fundo ++ ++ ++ ++ Font si&ze... ++ Taman&ho da fonte... ++ ++ ++ ++ Font size ++ Tamanho da fonte ++ ++ ++ ++ Insert &HTML... ++ Inserir &HTML... ++ ++ ++ ++ ++ ++ Insert HTML ++ Inserir HTML ++ ++ ++ ++ ++ Insert &table... ++ Inserir &tabela... ++ ++ ++ ++ Insert table ++ Inserir tabela ++ ++ ++ ++ HtmlEditor ++ ++ ++ ++ HTML ++ HTML ++ ++ ++ ++ Common graphics formats (*.png *.jpg *.jpeg *.gif);; ++ Formatos comuns de imagem (*.png *.jpg *.jpeg *.gif);; ++ ++ ++ ++ Portable Network Graphics (PNG) (*.png);; ++ Portable Network Graphics (PNG) (*.png);; ++ ++ ++ ++ Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; ++ Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; ++ ++ ++ ++ Graphics Interchange Format (GIF) (*.gif);; ++ Graphics Interchange Format (GIF) (*.gif);; ++ ++ ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ WYSIWYG ++ WYSIWYG ++ ++ ++ ++ &Load... ++ &Abrir... ++ ++ ++ ++ Load notes from file ++ Carregar notas de um arquivo ++ ++ ++ ++ ++ Load notes from an HTML file ++ Carregar notas de um arquivo HTML ++ ++ ++ ++ ++ ++ Save current notes ++ Salvar notas atuais ++ ++ ++ ++ ++ Page load progress ++ Progresso do carregamento da página ++ ++ ++ ++ Hide menu ++ Esconder menu ++ ++ ++ ++ Read only ++ Somente leitura ++ ++ ++ ++ Show HTML ++ Mostra HTML ++ ++ ++ ++ ++ HTML files (*.html *.htm) ++ Arquivos HTML (*.html *.htm) ++ ++ ++ ++ Select file to load ++ Seleciona um arquivo para carregar ++ ++ ++ ++ Select file to open ++ Seleciona um arquivo para abrir ++ ++ ++ ++ Save a copy ++ Salva uma cópia ++ ++ ++ ++ Open image... ++ Abre uma imagem... ++ ++ ++ ++ Insert image from URL ++ Insira uma imagem da URL ++ ++ ++ ++ ++ Enter URL: ++ URL: ++ ++ ++ ++ Create link ++ Criar um link ++ ++ ++ ++ Font ++ Fonte ++ ++ ++ ++ Select font: ++ Selecione a fonte: ++ ++ ++ ++ XS ++ EP ++ ++ ++ ++ S ++ P ++ ++ ++ ++ ++ M ++ M ++ ++ ++ ++ L ++ G ++ ++ ++ ++ XL ++ EG ++ ++ ++ ++ XXL ++ EEG ++ ++ ++ ++ Font size ++ Tamanho da fonte ++ ++ ++ ++ Font size: ++ Tamanho da fonte: ++ ++ ++ ++ Zoom: %1% ++ Aproximação: %1% ++ ++ ++ ++ Select color ++ Seleciona a cor ++ ++ ++ ++ Choose image file ++ Escolha o arquivo de imagem ++ ++ ++ ++ ++ ++ No data available ++ Nenhum dado disponível ++ ++ ++ ++ ++ Manual selection ++ Seleção manual ++ ++ ++ ++ ++ Multiple PDF manuals exist. Select the ones you want to open: ++ Existem diversos manuais em PDF. Escolha aqueles que deseja abrir: ++ ++ ++ ++ IconCacheDatabaseManager ++ ++ ++ WARNING: failed to open icon cache database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir base de dados do cache dos ícones '%1'. erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from icon cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao carregar '%1' do banco de dados do cache dos ícones: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to icon cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar '%1' ao banco de dados do cache dos ícones: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in icon cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar '%1' no banco de dados do cache dos ícones: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to fetch row count from icon cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler quantidade de linhas do banco de dados do cache dos ícones: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the icon cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração de '%1' do banco de dados do cache dos ícones: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to remove icon cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover base de dados do cache ícones: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to create icon cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao criar base de dados do cache dos ícones: consulta = '%1', erro = '%2' ++ ++ ++ ++ icon cache database '%1' initialized ++ Base de dados do cache de ícones '%1' inicializado ++ ++ ++ ++ IconCacheSetupDialog ++ ++ ++ Icon cache database setup ++ Configuração do banco de dados do cache dos ícones ++ ++ ++ ++ ++ Enable the icon cache database ++ Ativar base de dados do cache dos ícones ++ ++ ++ ++ Icon cache database ++ Base de dados do cache dos ícones ++ ++ ++ ++ Icon cache database file (write) ++ Arquivo do banco de dados do cache dos ícones (escrita) ++ ++ ++ ++ Browse icon cache database file ++ Procurar arquivo do banco de dados do cache dos ícones ++ ++ ++ ++ Apply changes and close dialog ++ Aplica as alterações e fecha a janela ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ Revert changes and close dialog ++ Reverte as alterações e fecha a janela ++ ++ ++ ++ Cancel ++ Cancelar ++ ++ ++ ++ Reimport icons to the cache database now ++ Reimportar agora os ícones para o banco de dados do cache ++ ++ ++ ++ Reimport icons now ++ Reimportar os ícones agora ++ ++ ++ ++ Choose icon cache database file ++ Escolha o arquivo do banco de dados do cache dos ícones ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ ImageChecker ++ ++ ++ Check images ++ Verificar as imagens ++ ++ ++ ++ Image type ++ Tipo da imagem ++ ++ ++ ++ Select image type to be checked ++ Seleciona o tipo de imagem que será verificada ++ ++ ++ ++ ++ Previews ++ Pré-visualização ++ ++ ++ ++ ++ Flyers ++ Panfleto ++ ++ ++ ++ ++ Cabinets ++ Gabinetes ++ ++ ++ ++ ++ Controllers ++ Controles ++ ++ ++ ++ ++ Marquees ++ Marquises ++ ++ ++ ++ ++ Titles ++ Títulos ++ ++ ++ ++ ++ PCBs ++ PCIs ++ ++ ++ ++ ++ Icons ++ Ícones ++ ++ ++ ++ Threads ++ Processos ++ ++ ++ ++ Number of parallel threads used when checking images ++ Quantidade de processos paralelos utilizados ao verificar as imagens ++ ++ ++ ++ Select sets in master list when selected in the found- or missing-lists below ++ Seleciona os conjuntos na lista principal quando for selecionado nas listas de encontrados ou que faltam abaixo ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ Start / stop checking images ++ Inicia / para a verificação das imagens ++ ++ ++ ++ Clear check results and log ++ Limpa os resultados da verificação e dos registros ++ ++ ++ ++ Save the current log contents to a file ++ Salva o conteúdo atual do registro para um arquivo ++ ++ ++ ++ Show only bad images ++ Mostra apenas as imagens ruins ++ ++ ++ ++ Remove bad image files ++ Remove os arquivos ruins de imagem ++ ++ ++ ++ Remove obsolete files / folders ++ Remove arquivo / pastas obsoletos(as) ++ ++ ++ ++ Check results ++ Verifica os resultados ++ ++ ++ ++ Current progress ++ Progresso atual ++ ++ ++ ++ Current status ++ Estado atual ++ ++ ++ ++ ++ ++ ++ ++ Found: ++ Encontradas: ++ ++ ++ ++ ++ ++ ++ ++ Missing: ++ Faltantes: ++ ++ ++ ++ Files / folders which couldn't be matched to any set (and are thus obsolete) ++ Arquivos / pastas que não combinam com nenhum conjunto (e portanto são obsoletos) ++ ++ ++ ++ ++ ++ ++ ++ ++ Obsolete: ++ Obsoletos: ++ ++ ++ ++ Sets for which at least one valid image was found ++ Conjuntos para onde ao menos uma imagem válida foi encontrada ++ ++ ++ ++ Sets for which no valid images could be found ++ Conjuntos para onde nenhuma imagem válida foi encontrada ++ ++ ++ ++ Log ++ Registro ++ ++ ++ ++ %n icon(s) scanned ++ ++ %n ícone escaneado ++ %n ícones escaneados ++ ++ ++ ++ ++ %n icon file(s) missing ++ ++ %n arquivo de ícone faltando ++ %n arquivos de ícone faltando ++ ++ ++ ++ ++ ++ ++ %n bad file(s) ++ ++ %n arquivo ruim ++ %n arquivos ruim ++ ++ ++ ++ ++ Average scanning speed = %n icon(s) per second ++ ++ Tempo médio de escaneamento = %n ícone por segundo ++ Tempo médio de escaneamento = %n ícones por segundo ++ ++ ++ ++ ++ ++ %n image(s) scanned ++ ++ %n imagem escaneada ++ %n imagens escaneadas ++ ++ ++ ++ ++ %n valid icon file(s) found ++ ++ %n arquivo de ícone válido ++ %n arquivos de ícone válidos ++ ++ ++ ++ ++ ++ No software information ++ Sem informação do programa ++ ++ ++ ++ ++ Update database ++ Atualiza o banco de dados ++ ++ ++ ++ ++ Click to update the software list XML database now ++ Clique para atualizar agora o banco de dados XML da lista de programa ++ ++ ++ ++ ++ Select software list ++ Selecione a lista de programa ++ ++ ++ ++ ++ Select the software list for which the image check should run ++ Selecione a lista de programa para onde a verificação da imagem deverá ser executada ++ ++ ++ ++ Updating software information, please wait... ++ Atualizando a informação do programa, aguarde... ++ ++ ++ ++ ++ %n valid image file(s) found ++ ++ %n arquivo de imagem válido ++ %n arquivos de imagem válidos ++ ++ ++ ++ ++ ++ %n image file(s) missing ++ ++ %n arquivo de imagem faltando ++ %n arquivos de imagem faltando ++ ++ ++ ++ ++ ++ Average scanning speed = %n image(s) per second ++ ++ Tempo médio de escaneamento = %n imagem por segundo ++ Tempo médio de escaneamento = %n imagens por segundo ++ ++ ++ ++ ++ %1 check ended -- elapsed time = %2 ++ %1 verificação concluída -- tempo decorrido = %2 ++ ++ ++ ++ ++ ++ ++ Icon ++ Ícone ++ ++ ++ ++ ++ ++ ++ Image ++ Imagem ++ ++ ++ ++ ++ preview ++ pré-visualização ++ ++ ++ ++ ++ flyer ++ panfleto ++ ++ ++ ++ ++ cabinet ++ gabinete ++ ++ ++ ++ ++ marquee ++ marquise ++ ++ ++ ++ ++ controller ++ controle ++ ++ ++ ++ ++ title ++ título ++ ++ ++ ++ ++ PCB ++ PCI ++ ++ ++ ++ %1 check started ++ verificação %1 iniciada ++ ++ ++ ++ ++ Checking %1 images ++ Verificando %1 imagens ++ ++ ++ ++ Checking icons ++ Verificando ícones ++ ++ ++ ++ Decompressing archive ++ Descomprimindo arquivo ++ ++ ++ ++ Thread[%1]: Icon for '%2' found ++ Thread[%1]: Ícone para '%2' encontrado ++ ++ ++ ++ Thread[%1]: Icon for '%2' is missing ++ Thread[%1]: Ícone para '%2' está faltando ++ ++ ++ ++ Choose file to store the image checker log ++ Escolha o arquivo para armazenar o registro do verificador de imagens ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ ++ saving image checker log to '%1' ++ salvando o registro do verificador de imagens para '%1' ++ ++ ++ ++ ++ done (saving image checker log to '%1') ++ feito (salvando o registro do verificador de imagens para '%1') ++ ++ ++ ++ ++ WARNING: can't open file '%1' for writing, please check permissions ++ AVISO: foi impossível abrir o arquivo '%1' para escrita, verifique as permissões ++ ++ ++ ++ Running ZIP tool to remove bad image files, command = '%1' ++ Executando a ferramenta ZIP para remover os arquivos de imagem ruins, comando = '%1' ++ ++ ++ ++ ++ ++ ++ WARNING: ZIP tool didn't exit cleanly: exitCode = %1, exitStatus = %2 ++ AVISO: a ferramenta ZIP não encerrou corretamente: código gerado = %1, estado de saída = %2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ normal ++ normal ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ crashed ++ travou ++ ++ ++ ++ ++ ++ ++ Executing 7z tool ++ Executando a ferramenta 7z ++ ++ ++ ++ Running 7z tool to remove bad image files, command = '%1' ++ Executando a ferramenta 7z para remover os arquivos de imagem ruins, comando = '%1' ++ ++ ++ ++ ++ ++ ++ WARNING: 7z tool didn't exit cleanly: exitCode = %1, exitStatus = %2 ++ AVISO: a ferramenta 7z não encerrou corretamente. código gerado = %1, estado da saída = %2 ++ ++ ++ ++ Bad image file '%1' removed ++ Arquivo de imagem ruim '%1' foi removida ++ ++ ++ ++ Bad image file '%1' cannot be removed, please check permissions ++ Arquivo de imagem ruim '%1' não pode ser removido, verifique as permissões ++ ++ ++ ++ ++ ++ ++ Executing ZIP tool ++ Executando a ferramenta ZIP ++ ++ ++ ++ ++ ++ Running ZIP tool to remove obsolete files, command = '%1' ++ Executando a ferramenta ZIP para remover os arquivos obsoletos, comando = '%1' ++ ++ ++ ++ ++ ++ Running 7z tool to remove obsolete files, command = '%1' ++ Executando a ferramenta 7z para remover os arquivos obsoletos, comando = '%1' ++ ++ ++ ++ ++ Removing obsolete files / folders ++ Removendo os arquivos / pastas obsoletos(as) ++ ++ ++ ++ Obsolete image folder '%1' removed ++ A pasta de imagem obsoleta '%1' foi removida ++ ++ ++ ++ Obsolete image folder '%1' cannot be removed, please check permissions ++ A Pasta de imagem obsoleta '%1' não pode ser removido, verifique as permissõesp ++ ++ ++ ++ Obsolete image file '%1' removed ++ O arquivo de imagem obsoleto '%1' foi removido ++ ++ ++ ++ Obsolete image file '%1' cannot be removed, please check permissions ++ O arquivo de imagem obsoleto '%1' não pode ser removido, verifique as permissões ++ ++ ++ ++ Obsolete icon folder '%1' removed ++ A pasta de ícone obsoleta '%1' foi removida ++ ++ ++ ++ Obsolete icon folder '%1' cannot be removed, please check permissions ++ A pasta de ícone obsoleta '%1' não pode ser removida, verifique as permissões ++ ++ ++ ++ Obsolete icon file '%1' removed ++ O arquivo de ícone obsoleto '%1' foi removido ++ ++ ++ ++ Obsolete icon file '%1' cannot be removed, please check permissions ++ O arquivo de ícone obsoleto '%1' não pode ser removido, verifique as permissões ++ ++ ++ ++ Checking for obsolete files ++ Procurando pelos arquivos obsoletos ++ ++ ++ ++ Checking for obsolete files / folder ++ Procurando pelos arquivos / pastas obsoletos(as) ++ ++ ++ ++ ++ Reading ZIP directory recursively ++ Lendo o diretório do ZIP recursivamente ++ ++ ++ ++ ++ Reading 7z directory recursively ++ Lendo o diretório do 7z recursivamente ++ ++ ++ ++ ++ Reading archive directory recursively ++ Lendo o diretório do arquivo recursivamente ++ ++ ++ ++ Reading image directory '%1' recursively ++ Lendo o diretório de imagens '%1' recursivamente ++ ++ ++ ++ Reading icon directory '%1' recursively ++ Lendo o diretório de ícones '%1' recursivamente ++ ++ ++ ++ %1 folder '%2' is obsolete ++ A pasta de %1 '%2' é obsoleta ++ ++ ++ ++ %1 file '%2' is obsolete ++ O arquivo de %1 '%2' é obsoleto ++ ++ ++ ++ %n obsolete file(s) found ++ ++ %n arquivo obsoleto encontrado ++ %n arquivos obsoletos encontrados ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Bad: ++ Ruim: ++ ++ ++ ++ %n directory entries to check ++ ++ %n lista de pastas para serem verificadas ++ %n entradas de diretório para verificar ++ ++ ++ ++ ++ ImageCheckerThread ++ ++ ++ ++ KB ++ KB ++ ++ ++ ++ ++ MB ++ MB ++ ++ ++ ++ ++ GB ++ GB ++ ++ ++ ++ TB ++ TB ++ ++ ++ ++ Thread[%1]: started ++ Thread[%1]: iniciado ++ ++ ++ ++ Thread[%1]: ZIP file '%2' successfully opened ++ Thread[%1]: o arquivo ZIP '%2' foi aberto com sucesso ++ ++ ++ ++ Thread[%1]: failed opening ZIP file '%2' ++ Thread[%1]: houve uma falha ao abrir o arquivo ZIP '%2' ++ ++ ++ ++ Thread[%1]: failed opening 7z file '%2' ++ Thread[%1]: houve uma falha ao abrir o arquivo 7z '%2' ++ ++ ++ ++ Thread[%1]: 7z file '%2' successfully opened ++ Thread[%1]: o arquivo 7z '%2' aberto com sucesso ++ ++ ++ ++ Thread[%1]: failed opening archive file '%2' ++ Thread[%1]: houve uma falha ao abrir o arquivo '%2' ++ ++ ++ ++ Thread[%1]: archive file '%2' successfully opened ++ Thread[%1]: o arquivo '%2' foi aberto com sucesso ++ ++ ++ ++ Thread[%1]: waiting for work ++ Thread[%1]: esperando pelo trabalho ++ ++ ++ ++ Thread[%1]: processing work unit with %n entries ++ ++ Thread[%1]: processando a unidade de trabalho com %n entradas ++ Thread[%1]: processando unidade de trabalho com %n entradas ++ ++ ++ ++ ++ ++ ++ ++ Thread[%1]: image for '%2' found, loaded from '%3', size = %4x%5, bytes = %6 ++ Thread[%1]: as imagens para '%2' foram encontradas, carregadas de '%3', tamanho = %4x%5, bytes = %6 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Thread[%1]: image for '%2' loaded from '%3' is bad, error = '%4' ++ Thread[%1]: a imagem para '%2' foi carregada de '%3' é defeituosa, erro = '%4' ++ ++ ++ ++ ++ ++ ++ Thread[%1]: image for '%2' is missing ++ Thread[%1]: a imagem para '%2' está faltando ++ ++ ++ ++ Thread[%1]: decompressing archive ++ Thread[%1]: descomprimindo o arquivo ++ ++ ++ ++ Thread[%1]: ZIP file '%2' closed ++ Thread[%1]: arquivo ZIP '%2' foi fechado ++ ++ ++ ++ Thread[%1]: 7z file '%2' closed ++ Thread[%1]: arquivo 7z '%2' foi fechado ++ ++ ++ ++ Thread[%1]: archive file '%2' closed ++ Thread[%1]: arquivo '%2' foi fechado ++ ++ ++ ++ Thread[%1]: ended ++ Thread[%1]: encerrado ++ ++ ++ ++ Thread[%1]: finished decompressing archive ++ Thread[%1]: a descompressão do arquivo foi encerrado ++ ++ ++ ++ ImageFormatSetup ++ ++ ++ Active image formats ++ Formatos de imagem ativos ++ ++ ++ ++ Preview ++ Pré-visualização ++ ++ ++ ++ Flyer ++ Panfleto ++ ++ ++ ++ Cabinet ++ Gabinete ++ ++ ++ ++ Controller ++ Controle ++ ++ ++ ++ Marquee ++ Marquise ++ ++ ++ ++ Title ++ Título ++ ++ ++ ++ PCB ++ PCI ++ ++ ++ ++ Software snap ++ Captura de tela do programa ++ ++ ++ ++ ++ deactivated ++ desativado ++ ++ ++ ++ ++ ++ activated ++ ativado ++ ++ ++ ++ Format ++ Formato ++ ++ ++ ++ Description ++ Descrição ++ ++ ++ ++ Extensions ++ Extensões ++ ++ ++ ++ Apply image format setup and close dialog ++ Aplica a configuração do formato da imagem e fecha a janela ++ ++ ++ ++ Select artwork class to adjust ++ Seleciona a classe da ilustração para ajustar ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ Cancel image format setup ++ Cancela a configuração do formato da imagem ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ Restore active image formats from currently stored setup ++ Restaura os formatos de imagem ativos das configurações atualmente ativas ++ ++ ++ ++ &Restore ++ &Restaurar ++ ++ ++ ++ Artwork class ++ Classe da ilustração ++ ++ ++ ++ Drag & drop format entries to adjust priorities of activated formats for the current artwork class ++ Entradas em formato de arrastar e soltar para ajustar as prioridades dos formatos ativados para a classe da ilustração atual ++ ++ ++ ++ Activation ++ Ativação ++ ++ ++ ++ ImageWidget ++ ++ ++ Portable Network Graphics ++ Portable Network Graphics ++ ++ ++ ++ Windows Bitmap ++ Bitmap do Windows ++ ++ ++ ++ Graphic Interchange Format ++ Graphic Interchange Format ++ ++ ++ ++ Joint Photographic Experts Group ++ Joint Photographic Experts Group ++ ++ ++ ++ Portable Bitmap ++ Portable Bitmap ++ ++ ++ ++ Portable Graymap ++ Portable Graymap ++ ++ ++ ++ Portable Pixmap ++ Portable Pixmap ++ ++ ++ ++ Tagged Image File Format ++ Tagged Image File Format ++ ++ ++ ++ X11 Bitmap ++ Bitmap X11 ++ ++ ++ ++ X11 Pixmap ++ Pixmap X11 ++ ++ ++ ++ Scalable Vector Graphics ++ Scalable Vector Graphics ++ ++ ++ ++ Targa Image Format ++ Targa Image Format ++ ++ ++ ++ Copy image to clipboard ++ Copia a imagem para a área de transferência ++ ++ ++ ++ Copy file path to clipboard ++ Copia o caminho do arquivo para a área de transferência ++ ++ ++ ++ Refresh cache slot ++ Atualiza o cache do slot ++ ++ ++ ++ ++ ++ FATAL: can't open %1 file, please check access permissions for %2 ++ FATAL: foi impossível abrir o arquivo %1, verifique as permissões de acesso para %2 ++ ++ ++ ++ Decompressing archive, please wait... ++ Descomprimindo o arquivo, aguarde... ++ ++ ++ ++ FATAL: can't create backup of existing image file '%1' as '%2' ++ FATAL: foi impossível criar um backup de um arquivo de imagem já existente de '%1' como '%2' ++ ++ ++ ++ FATAL: can't create image file '%1' ++ FATAL: foi impossível criar o arquivo de imagem '%1' ++ ++ ++ ++ FATAL: can't determine primary path for image-type '%1' ++ FATAL: foi impossível determinar o caminho primário para o tipo da imagem '%1' ++ ++ ++ ++ IndividualFallbackSettings ++ ++ ++ Individual fallback settings ++ Configurações individuais de reserva ++ ++ ++ ++ Artwork class ++ Classe da ilustração ++ ++ ++ ++ Parent fallback ++ Reserva principal ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ Preview ++ Pré-visualização ++ ++ ++ ++ Flyer ++ Panfleto ++ ++ ++ ++ Cabinet ++ Gabinete ++ ++ ++ ++ Controller ++ Controle ++ ++ ++ ++ Marquee ++ Marquise ++ ++ ++ ++ Title ++ Título ++ ++ ++ ++ PCB ++ PCI ++ ++ ++ ++ Software snap ++ Captura de tela do programa ++ ++ ++ ++ Video snap ++ Captura de tela do vídeo ++ ++ ++ ++ Icon ++ Ícone ++ ++ ++ ++ active ++ ativo ++ ++ ++ ++ inactive ++ inativo ++ ++ ++ ++ Activate / deactivate parent fallback for this artwork class ++ Ativa / desativa a utilização a reserva para esta classe de ilustração ++ ++ ++ ++ InsertHtmlDialog ++ ++ ++ Insert HTML ++ Inserir HTML ++ ++ ++ ++ HTML Code: ++ Código HTML: ++ ++ ++ ++ ItemDownloader ++ ++ ++ FATAL: can't open network reply for reading ++ FATAL: foi impossível abrir o retorno de rede para leitura ++ ++ ++ ++ FATAL: can't open '%1' for writing ++ FATAL: foi impossível abrir %1 para escrita ++ ++ ++ ++ ++ ++ ++ Source URL: %1 ++ Caminho (URL): %1 ++ ++ ++ ++ Local path: %2 ++ Caminho local: %2 ++ ++ ++ ++ ++ ++ ++ Status: %1 ++ Estado: %1 ++ ++ ++ ++ initializing download ++ Inicializando o download ++ ++ ++ ++ ++ ++ ++ Total size: %1 ++ Tamanho total: %1 ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ ++ ++ ++ Downloaded: %1 (%2%) ++ Baixado: %1 (%2%) ++ ++ ++ ++ download started: URL = %1, local path = %2, reply ID = %3 ++ download iniciado: URL = %1, caminho local = %2, ID da resposta = %3 ++ ++ ++ ++ Error #%1: ++ Erro #%1: ++ ++ ++ ++ download aborted: reason = %1, URL = %2, local path = %3, reply ID = %4 ++ download cancelado: razão = %1, URL = %2, caminho local = %3, ID da resposta = %4 ++ ++ ++ ++ ++ ++ Local path: %1 ++ Caminho local: %1 ++ ++ ++ ++ download aborted ++ download cancelado ++ ++ ++ ++ downloading ++ baixando ++ ++ ++ ++ download finished: URL = %1, local path = %2, reply ID = %3 ++ download concluído: URL = %1, caminho local = %2, ID da resposta = %3 ++ ++ ++ ++ download finished ++ download concluído ++ ++ ++ ++ ItemSelector ++ ++ ++ Item selection ++ Seleção do item ++ ++ ++ ++ Select item(s) ++ Selecione os item(s) ++ ++ ++ ++ Confirm selection ++ Confirme a seleção ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ ++ Cancel ++ Cancelar ++ ++ ++ ++ Joystick ++ ++ ++ SDL joystick #%1 opened: name = %2, axes = %3, buttons = %4, hats = %5, trackballs = %6 ++ Joystick SDL #%1 aberto: nome = %2, eixos = %3, botões = %4, hats = %5, trackballs = %6 ++ ++ ++ ++ SDL joystick #%1 closed ++ Joystick SDL #%1 fechado ++ ++ ++ ++ JoystickCalibrationWidget ++ ++ ++ Enable/disable axis %1 ++ Ativar/Desativar o eixo %1 ++ ++ ++ ++ Axis %1: ++ Eixo %1: ++ ++ ++ ++ Reset calibration of axis %1 ++ Reinicia a calibração do eixo %1 ++ ++ ++ ++ Current value of axis %1 ++ Valor atual do eixo %1 ++ ++ ++ ++ DZ: ++ ZM: ++ ++ ++ ++ Deadzone of axis %1 ++ Zona morta do eixo %1 ++ ++ ++ ++ S: ++ B: ++ ++ ++ ++ Sensitivity of axis %1 ++ Sensibilidade do eixo %1 ++ ++ ++ ++ JoystickFunctionScanner ++ ++ ++ ++ ++ ++ Scanning joystick function ++ Examinar a função do joystick ++ ++ ++ ++ <<<>>> ++ <<<>>> ++ ++ ++ ++ Accept joystick function ++ Aceita a função do joystick ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ Cancel remapping of joystick function ++ Cancela o remapeamento da função do joystick ++ ++ ++ ++ Cancel ++ Cancelar ++ ++ ++ ++ Clear joystick function ++ Limpa a função do joystick ++ ++ ++ ++ Clear ++ Limpar ++ ++ ++ ++ JoystickTestWidget ++ ++ ++ A%1: %v ++ A%1: %v ++ ++ ++ ++ Current value of axis %1 ++ Valor atual do eixo %1 ++ ++ ++ ++ B%1 ++ B%1 ++ ++ ++ ++ Current state of button %1 ++ Estado atual do botão %1 ++ ++ ++ ++ H%1: 0 ++ H%1: 0 ++ ++ ++ ++ Current value of hat %1 ++ Valor atual do hat %1 ++ ++ ++ ++ T%1 DX: 0 ++ T%1 DX: 0 ++ ++ ++ ++ Current X-delta of trackball %1 ++ Diferença delta-X atual do trackball %1 ++ ++ ++ ++ T%1 DY: 0 ++ T%1 DY: 0 ++ ++ ++ ++ Current Y-delta of trackball %1 ++ Diferença delta-Y do trackball %1 ++ ++ ++ ++ H%1: %2 ++ H%1: %2 ++ ++ ++ ++ T%1 DX: %2 ++ T%1 DX: %2 ++ ++ ++ ++ T%1 DY: %2 ++ T%1 DY: %2 ++ ++ ++ ++ KeySequenceScanner ++ ++ ++ ++ Scanning special key ++ Examinando a tecla especial ++ ++ ++ ++ ++ ++ ++ Scanning shortcut ++ Examinando o atalho ++ ++ ++ ++ <<<>>> ++ <<<>>> ++ ++ ++ ++ Accept key sequence ++ Aceita a sequência das teclas ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ Cancel redefinition of key sequence ++ Cancela a redefinição da sequência das teclas ++ ++ ++ ++ Cancel ++ Cancelar ++ ++ ++ ++ Clear custom key sequence ++ Limpa a sequência personalizada das teclas ++ ++ ++ ++ Clear ++ Limpar ++ ++ ++ ++ MachineList ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ ++ ++ good ++ bom ++ ++ ++ ++ ++ bad ++ ruim ++ ++ ++ ++ ++ ++ preliminary ++ preliminar ++ ++ ++ ++ ++ supported ++ suportado ++ ++ ++ ++ ++ unsupported ++ não suportado ++ ++ ++ ++ ++ ++ imperfect ++ imperfeito ++ ++ ++ ++ yes ++ sim ++ ++ ++ ++ no ++ não ++ ++ ++ ++ baddump ++ imagem ruim ++ ++ ++ ++ nodump ++ não há imagem ++ ++ ++ ++ vertical ++ vertical ++ ++ ++ ++ horizontal ++ horizontal ++ ++ ++ ++ raster ++ rasterizado ++ ++ ++ ++ Unknown ++ Desconhecido ++ ++ ++ ++ On ++ Ligado ++ ++ ++ ++ Off ++ Desligado ++ ++ ++ ++ audio ++ áudio ++ ++ ++ ++ unused ++ não usado ++ ++ ++ ++ Unused ++ Não usado ++ ++ ++ ++ cpu ++ cpu ++ ++ ++ ++ vector ++ vetor ++ ++ ++ ++ lcd ++ lcd ++ ++ ++ ++ joy4way ++ joy4way ++ ++ ++ ++ joy8way ++ joy8way ++ ++ ++ ++ trackball ++ trackball ++ ++ ++ ++ joy2way ++ joy2way ++ ++ ++ ++ doublejoy8way ++ doublejoy8way ++ ++ ++ ++ dial ++ discador ++ ++ ++ ++ paddle ++ acionador ++ ++ ++ ++ pedal ++ pedal ++ ++ ++ ++ stick ++ manche ++ ++ ++ ++ vjoy2way ++ vjoy2way ++ ++ ++ ++ lightgun ++ pistola de luz ++ ++ ++ ++ doublejoy4way ++ doublejoy4way ++ ++ ++ ++ vdoublejoy2way ++ vdoublejoy2way ++ ++ ++ ++ doublejoy2way ++ doublejoy2way ++ ++ ++ ++ printer ++ impressora ++ ++ ++ ++ cdrom ++ cdrom ++ ++ ++ ++ cartridge ++ cartucho ++ ++ ++ ++ cassette ++ fita cassete ++ ++ ++ ++ quickload ++ carregamento rápido ++ ++ ++ ++ floppydisk ++ disquete ++ ++ ++ ++ serial ++ serial ++ ++ ++ ++ snapshot ++ captura da tela ++ ++ ++ ++ original ++ original ++ ++ ++ ++ compatible ++ compatível ++ ++ ++ ++ FATAL: can't open icon file, please check access permissions for %1 ++ FATAL: foi impossível abrir o arquivo do ícone, verifique as permissões de acesso para %1 ++ ++ ++ ++ ++ FATAL: can't open icon file %1 ++ FATAL: foi impossível abrir o arquivo do ícone %1 ++ ++ ++ ++ 7z error ++ erro do 7z ++ ++ ++ ++ libarchive error ++ erro do libarchive ++ ++ ++ ++ Waiting for data... ++ Aguardando os dados... ++ ++ ++ ++ FATAL: can't start %1 executable, file '%2' does not exist ++ FATAL: foi impossível iniciar o executável %1, o arquivo '%2' não existe ++ ++ ++ ++ ++ emulator info: type = %1, version = %2 ++ informação do emulador: tipo = %1, versão = %2 ++ ++ ++ ++ FATAL: couldn't determine emulator type and version ++ FATAL: foi impossível determinar o tipo e a versão do emulador ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Loading, please wait... ++ Carregando, aguarde... ++ ++ ++ ++ ++ loading favorites and play history ++ carregando os favoritos e o histórico dos já jogados ++ ++ ++ ++ ++ done (loading favorites and play history) ++ feito (carregando os favoritos e histórico dos já jogados) ++ ++ ++ ++ ++ total start-up time: %1 ++ tempo total da inicialização: %1 ++ ++ ++ ++ XML data - %p% ++ dados XML - %p% ++ ++ ++ ++ verifying ROM status for '%1' ++ verificando a condição da ROM para '%1' ++ ++ ++ ++ WARNING: couldn't find machine information for '%1' ++ AVISO: foi impossível encontrar as informações da máquina para '%1' ++ ++ ++ ++ Updating ++ Atualizando ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ Source file ++ Arquivo fonte ++ ++ ++ ++ Is BIOS? ++ É BIOS? ++ ++ ++ ++ Runnable ++ Executável ++ ++ ++ ++ Clone of ++ Clone de ++ ++ ++ ++ ROM of ++ ROM de ++ ++ ++ ++ Sample of ++ Amostra de ++ ++ ++ ++ Is device? ++ É dispositivo? ++ ++ ++ ++ Year ++ Ano ++ ++ ++ ++ Manufacturer ++ Fabricante ++ ++ ++ ++ ++ ROM ++ ROM ++ ++ ++ ++ ++ ++ ++ N/A ++ N/A ++ ++ ++ ++ ++ error text = %1 ++ texto do erro = %1 ++ ++ ++ ++ ++ WARNING: the selected emulator executable cannot be identified as MAME ++ AVISO: o executável do emulador selecionado não pode ser identificado como o MAME ++ ++ ++ ++ ++ %n supported set(s) ++ ++ ++ ++ ++ ++ ++ ++ WARNING: the output from -listfull changed, forcing a refresh of all emulator caches ++ AVISO: a saída do -listfull foi alterado, impondo uma atualização do cache de todos os emuladores ++ ++ ++ ++ BIOS ++ BIOS ++ ++ ++ ++ Size ++ Tamanho ++ ++ ++ ++ CRC ++ CRC ++ ++ ++ ++ ++ Merge ++ Mesclado ++ ++ ++ ++ ++ Region ++ Região ++ ++ ++ ++ Offset ++ Desvio ++ ++ ++ ++ ++ ++ ++ Status ++ Estado ++ ++ ++ ++ ++ SHA-1 ++ SHA-1 ++ ++ ++ ++ Device reference ++ Referência do dispositivo ++ ++ ++ ++ Chip ++ CI ++ ++ ++ ++ ++ ++ Tag ++ Etiqueta ++ ++ ++ ++ ++ Type ++ Tipo ++ ++ ++ ++ Clock ++ Relógio ++ ++ ++ ++ Display ++ Tela ++ ++ ++ ++ Rotate ++ Rotação ++ ++ ++ ++ Flip-X ++ Inverte-X ++ ++ ++ ++ Width ++ Largura ++ ++ ++ ++ Height ++ Altura ++ ++ ++ ++ Refresh ++ Recarregar ++ ++ ++ ++ Pixel clock ++ Relógio do pixel ++ ++ ++ ++ H-Total ++ H-Total ++ ++ ++ ++ H-Bend ++ Curvatura-H ++ ++ ++ ++ HB-Start ++ Início-HB ++ ++ ++ ++ V-Total ++ V-Total ++ ++ ++ ++ V-Bend ++ Curvatura-V ++ ++ ++ ++ VB-Start ++ Início-VB ++ ++ ++ ++ ++ Sound ++ Som ++ ++ ++ ++ Channels ++ Canais ++ ++ ++ ++ Input ++ Entrada ++ ++ ++ ++ Service ++ Serviço ++ ++ ++ ++ Tilt ++ Tilt ++ ++ ++ ++ Players ++ Jogadores ++ ++ ++ ++ ++ Buttons ++ Botões ++ ++ ++ ++ Coins ++ Moedas ++ ++ ++ ++ Control ++ Controle ++ ++ ++ ++ Minimum ++ Mínimo ++ ++ ++ ++ Maximum ++ Máximo ++ ++ ++ ++ Sensitivity ++ Sensitividade ++ ++ ++ ++ Key Delta ++ Tecla delta ++ ++ ++ ++ Reverse ++ Reverso ++ ++ ++ ++ Player ++ Jogador ++ ++ ++ ++ Ways ++ Direções ++ ++ ++ ++ DIP switch ++ Chave DIP ++ ++ ++ ++ DIP value ++ Valor do DIP ++ ++ ++ ++ WARNING: the machine list cache is invalid, forcing a refresh ++ AVISO: o cache da lista das máquinas é inválido, impondo uma atualização ++ ++ ++ ++ WARNING: the machine list database is invalid, forcing a refresh ++ AVISO: o banco de dados da lista das máquinas é invalido, impondo uma atualização ++ ++ ++ ++ machine description ++ descrição da máquina ++ ++ ++ ++ tag ++ etiqueta ++ ++ ++ ++ year ++ ano ++ ++ ++ ++ manufacturer ++ fabricante ++ ++ ++ ++ machine name ++ nome da máquina ++ ++ ++ ++ ROM types ++ Tipo das ROMs ++ ++ ++ ++ players ++ jogadores ++ ++ ++ ++ driver status ++ condição do controlador ++ ++ ++ ++ source file ++ arquivo fonte ++ ++ ++ ++ rank ++ classificação ++ ++ ++ ++ category ++ categoria ++ ++ ++ ++ version ++ versão ++ ++ ++ ++ Filtering, please wait... ++ Filtrando, aguarde... ++ ++ ++ ++ WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers ++ AVISO: Defeito do XML: o nome '%1' já está sendo utilizado por vários outros conjuntos -- informe os desenvolvedores do MAME ++ ++ ++ ++ done (verifying ROM status for all sets, elapsed time = %1) ++ feito (verificando a condição geral estado ROM para todos os conjuntos, tempo = %1) ++ ++ ++ ++ pre-caching icons from 7z archive ++ fazendo o pré-cache dos ícones do arquivo 7z ++ ++ ++ ++ done (pre-caching icons from 7z archive, elapsed time = %1) ++ feito (fazendo pré-cache dos ícones do arquivo 7z, tempo = %1) ++ ++ ++ ++ ++ System / BIOS ++ Sistema / BIOS ++ ++ ++ ++ ++ System / Device ++ Sistema / Dispositivo ++ ++ ++ ++ correct ++ correto ++ ++ ++ ++ mostly correct ++ maioria correto ++ ++ ++ ++ incorrect ++ incorreto ++ ++ ++ ++ not found ++ não encontrado ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Configuration ++ Configuração ++ ++ ++ ++ Mask ++ Máscara ++ ++ ++ ++ Setting ++ Configuração ++ ++ ++ ++ Value ++ Valor ++ ++ ++ ++ Driver ++ Controlador ++ ++ ++ ++ Emulation ++ Emulação ++ ++ ++ ++ Color ++ Cor ++ ++ ++ ++ Graphic ++ Gráfico ++ ++ ++ ++ Cocktail ++ Coquetel ++ ++ ++ ++ Protection ++ Proteção ++ ++ ++ ++ Save state ++ Salva o estado ++ ++ ++ ++ Palette size ++ Tamanho da paleta ++ ++ ++ ++ BIOS set ++ Conjunto de BIOS ++ ++ ++ ++ Description ++ Descrição ++ ++ ++ ++ Sample ++ Exemplo ++ ++ ++ ++ Disk ++ Disco ++ ++ ++ ++ MD5 ++ MD5 ++ ++ ++ ++ Index ++ Índice ++ ++ ++ ++ Adjuster ++ Ajustador ++ ++ ++ ++ Software list ++ Lista dos programas ++ ++ ++ ++ Category ++ Categoria ++ ++ ++ ++ Item ++ Item ++ ++ ++ ++ Device ++ Dispositivo ++ ++ ++ ++ Mandatory ++ Mandatório ++ ++ ++ ++ Interface ++ Interface ++ ++ ++ ++ Instance ++ Instância ++ ++ ++ ++ Brief name ++ Nome resumido ++ ++ ++ ++ Extension ++ Extensão ++ ++ ++ ++ RAM options ++ Opções da RAM ++ ++ ++ ++ Option ++ Opção ++ ++ ++ ++ WARNING: can't open ROM state cache, please check ROMs ++ AVISO: foi impossível abrir o cache da condição da ROM, verifique as ROMs ++ ++ ++ ++ loading ROM state from cache ++ carregando a condição da ROM a partir do cache ++ ++ ++ ++ done (loading ROM state from cache, elapsed time = %1) ++ feito (carregando a condição da ROM a partir do cache, tempo = %1) ++ ++ ++ ++ %n cached ROM state(s) loaded ++ ++ %n estado de ROM carregado do cache ++ %n estados de ROM carregados do cache ++ ++ ++ ++ ++ processing machine list ++ processando a lista das máquinas ++ ++ ++ ++ WARNING: couldn't determine emulator version of machine list cache ++ AVISO: foi impossível determinar versão do emulador a partir do cache da lista das máquinas ++ ++ ++ ++ ++ INFORMATION: the machine list cache will now be updated due to a new format ++ INFORMAÇÃO: o cache de lista das máquinas será atualizado devido ao novo formato ++ ++ ++ ++ loading machine data from machine list cache ++ carregando os dados da máquina a partir do cache da lista das máquinas ++ ++ ++ ++ ++ Machine data - %p% ++ Dados da máquina - %p% ++ ++ ++ ++ and %n device(s) loaded ++ ++ e %n dispositivo carregado ++ e %n dispositivos carregados ++ ++ ++ ++ ++ , %n BIOS set(s) ++ ++ , %n conjuto de BIOS ++ , %n conjutos de BIOS ++ ++ ++ ++ ++ ++ ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 ++ Informação da condição da ROM: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 ++ ++ ++ ++ WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check ++ AVISO: o cache da condição da ROM está incompleto ou está desatualizado, iniciando uma verificação automática da ROM ++ ++ ++ ++ WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs ++ AVISO: o cache da condição da ROM está incompleto ou está desatualizado, verifique novamente as ROMs ++ ++ ++ ++ determining emulator version and supported sets ++ determinando a versão do emulador e dos conjuntos suportados ++ ++ ++ ++ done (determining emulator version and supported sets, elapsed time = %1) ++ feito (determinando a versão do emulador e dos conjuntos suportados, tempo = %1) ++ ++ ++ ++ FATAL: couldn't determine the number of supported sets ++ FATAL: foi impossível determinar a quantidade dos conjuntos suportados ++ ++ ++ ++ WARNING: XML data cache is incomplete, invalidating XML data cache ++ AVISO: o cache de dados XML está incompleto, invalidando o cache dos dados XML ++ ++ ++ ++ verifying ROM status for all sets ++ verificando a condição da ROM para todos os conjuntos ++ ++ ++ ++ ROM, CHD ++ ROM, CHD ++ ++ ++ ++ CHD ++ CHD ++ ++ ++ ++ loading XML data and recreating cache ++ carregando os dados XML e recriando o cache ++ ++ ++ ++ ? ++ ? ++ ++ ++ ++ WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml ++ AVISO: atributo nome está vazio na linha %1 do XML (o conjunto será ignorado!) -- informe os desenvolvedores do MAME e inclua a saída do --listxml com problema ++ ++ ++ ++ ++ ascending ++ crescente ++ ++ ++ ++ ++ descending ++ decrescente ++ ++ ++ ++ ROM state filter already active ++ Filtro da condição da ROM já está ativa ++ ++ ++ ++ please wait for ROM verification to finish and try again ++ por favor aguarde a verificação de ROM terminar e tente novamente ++ ++ ++ ++ please wait for reload to finish and try again ++ aguarde a conclusão do recarregamento e tente novamente ++ ++ ++ ++ applying ROM state filter ++ aplicando o filtro da condição da ROM ++ ++ ++ ++ State filter - %p% ++ Filtros das condições - %p% ++ ++ ++ ++ done (applying ROM state filter, elapsed time = %1) ++ feito (aplicando filtro da condição da ROM, tempo = %1) ++ ++ ++ ++ saving favorites ++ salvando os favoritos ++ ++ ++ ++ FATAL: can't open favorites file for writing, path = %1 ++ FATAL: foi impossível carregar arquivo de favoritos para escrita, caminho = %1 ++ ++ ++ ++ saving play history ++ salvando o histórico dos já jogados ++ ++ ++ ++ FATAL: can't open play history file for writing, path = %1 ++ FATAL: foi impossível abrir arquivo do histórico dos já jogados para escrita, caminho = %1 ++ ++ ++ ++ L: ++ L: ++ ++ ++ ++ C: ++ C: ++ ++ ++ ++ M: ++ M: ++ ++ ++ ++ I: ++ I: ++ ++ ++ ++ N: ++ N: ++ ++ ++ ++ U: ++ D: ++ ++ ++ ++ S: ++ B: ++ ++ ++ ++ T: ++ T: ++ ++ ++ ++ ++ WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 ++ AVISO: chamada de auditoria do emulador não foi concluída sem erros -- código gerado = %1, estado de saída = %2 ++ ++ ++ ++ ++ normal ++ normal ++ ++ ++ ++ ++ crashed ++ travou ++ ++ ++ ++ ++ ERROR: can't open ROM state cache for writing, path = %1 ++ ERRO: foi impossível abrir cache da condição da ROM para escrita, caminho = %1 ++ ++ ++ ++ ++ FATAL: can't start MAME executable within a reasonable time frame, giving up ++ FATAL: foi impossível iniciar o executável do MAME dentro de um tempo razoável, desistindo ++ ++ ++ ++ ++ ++ ROM check - %p% ++ Verificação da ROM - %p% ++ ++ ++ ++ ++ Optional ++ Opcional ++ ++ ++ ++ checking real status of %n set(s) not mentioned during full audit ++ ++ verificando estado real de %n conjunto não mencionado durante audição ++ verificando estado real de %n conjuntos não mencionados durante audição ++ ++ ++ ++ ++ done (checking real status of %n set(s) not mentioned during full audit) ++ ++ feito (verificando estado real de %n conjunto não mencionado durante audição) ++ feito (verificando estado real de %n conjuntos não mencionados durante audição) ++ ++ ++ ++ ++ done (verifying ROM status for '%1', elapsed time = %2) ++ feito (verificando a condição da ROM para '%1', tempo = %2) ++ ++ ++ ++ ++ ROM state ++ Condição da ROM ++ ++ ++ ++ ++ ROM status for '%1' is '%2' ++ Condição da ROM para '%1' é '%2' ++ ++ ++ ++ done (loading machine data from machine list cache, elapsed time = %1) ++ feito (carregando os dados do cache da máquina da lista das máquinas, tempo = %1) ++ ++ ++ ++ parsing machine data and recreating machine list cache ++ analisando os dados das máquinas e recriando o cache da lista das máquinas ++ ++ ++ ++ ERROR: can't open machine list cache for writing, path = %1 ++ ERRO: foi impossível abrir cache da lista das máquinas para escrita, caminho = %1 ++ ++ ++ ++ ++ sorting machine list by %1 in %2 order ++ ordenando a lista das máquinas por %1 na ordem %2 ++ ++ ++ ++ ++ restoring machine selection ++ restaurando a seleção das máquinas ++ ++ ++ ++ done (processing machine list, elapsed time = %1) ++ feito (processando a lista das máquinas, tempo = %1) ++ ++ ++ ++ %n machine(s) ++ ++ %n máquina ++ %n máquinas ++ ++ ++ ++ ++ WARNING: machine list not fully parsed, invalidating machine list cache ++ AVISO: a lista das máquinas não foi completamente analisada, invalidando o cache da lista das máquinas ++ ++ ++ ++ WARNING: machine list cache is out of date, invalidating machine list cache ++ AVISO: a lista das máquinas está desatualizada, invalidando o cache da lista das máquinas ++ ++ ++ ++ done (loading XML data and recreating cache, elapsed time = %1) ++ feito (carregando os dados XML e recriando o cache, tempo = %1) ++ ++ ++ ++ pre-caching icons from ZIP archive ++ pre-cache dos ícones do arquivo ZIP ++ ++ ++ ++ Icon cache - %p% ++ Cache dos ícones - %p% ++ ++ ++ ++ done (pre-caching icons from ZIP archive, elapsed time = %1) ++ feito (pre-cache dos ícones do arquivo ZIP, tempo = %1) ++ ++ ++ ++ pre-caching icons from archive ++ fazendo pré-cache dos ícones do arquivo ++ ++ ++ ++ done (pre-caching icons from archive, elapsed time = %1) ++ feito (fazendo o pré-cache dos ícones do arquivo, tempo = %1) ++ ++ ++ ++ %n icon(s) loaded ++ ++ %n ícone carregado ++ %n ícones carregados ++ ++ ++ ++ ++ pre-caching icons from directory ++ pre-cache dos ícones do diretório ++ ++ ++ ++ done (pre-caching icons from directory, elapsed time = %1) ++ feito (pre-cache dos ícones do diretório, tempo = %1) ++ ++ ++ ++ loading icons from cache database ++ carregando os ícones a partir do cache do banco de dados ++ ++ ++ ++ done (loading icons from cache database, elapsed time = %1) ++ feito (carregando os ícones do cache do banco de dados, tempo = %1) ++ ++ ++ ++ loading category.ini ++ carregando category.ini ++ ++ ++ ++ Category.ini - %p% ++ Category.ini - %p% ++ ++ ++ ++ ERROR: can't open '%1' for reading -- no category.ini data available ++ ERRO: foi impossível abrir '%1' para leitura -- os dados do arquivo category.ini não estão disponíveis ++ ++ ++ ++ done (loading category.ini, elapsed time = %1) ++ feito (carregando o category.ini, tempo = %1) ++ ++ ++ ++ loading catver.ini ++ carregando catver.ini ++ ++ ++ ++ Catver.ini - %p% ++ Catver.ini - %p% ++ ++ ++ ++ ERROR: can't open '%1' for reading -- no catver.ini data available ++ ERRO: foi impossível abrir '%1' para leitura -- os dados do arquivo catver.ini não estão disponíveis ++ ++ ++ ++ done (loading catver.ini, elapsed time = %1) ++ feito (carregando o catver.ini, tempo = %1) ++ ++ ++ ++ %1 category / %2 version records loaded ++ %1 categoria / %2 versão das gravações carregadas ++ ++ ++ ++ Category view - %p% ++ Visão de categoria - %p% ++ ++ ++ ++ %n category record(s) loaded ++ ++ %n registo de categoria carregado ++ %n registos de categoria carregado ++ ++ ++ ++ ++ Version view - %p% ++ Visão de versão - %p% ++ ++ ++ ++ MachineListDatabaseManager ++ ++ ++ WARNING: failed to open machine list database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir o banco de dados da lista das máquinas '%1': erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from machine list database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao carregar '%1' do banco de dados da lista das máquinas: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to machine list database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar '%1' ao banco de dados da lista das máquinas: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in machine list database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar '%1' no banco de dados da lista das máquinas: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to fetch row count from machine list database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler quantidade de linhas do banco de dados da lista das máquinas: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to fetch row IDs from machine list database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler o IDs das linhas do banco de dados da lista das máquinas: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the machine list database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração de '%1' do banco de dados de dados da lista das máquinas: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to remove machine list database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover base de dados da lista das máquinas: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to create machine list database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao criar base de dados da lista das máquinas: consulta = '%1', erro = '%2' ++ ++ ++ ++ machine list database '%1' initialized ++ base de dados da lista das máquinas '%1' inicializada ++ ++ ++ ++ MachineListModel ++ ++ ++ Tag ++ Etiqueta ++ ++ ++ ++ Icon ++ Ícone ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ Parent ++ Principal ++ ++ ++ ++ Description ++ Descrição ++ ++ ++ ++ Manufacturer ++ Fabricante ++ ++ ++ ++ Year ++ Ano ++ ++ ++ ++ ROM status ++ Condição da ROM ++ ++ ++ ++ Has ROMs? ++ Tem ROMs? ++ ++ ++ ++ Has CHDs? ++ Tem CHDs? ++ ++ ++ ++ Driver status ++ Condição geral do controlador ++ ++ ++ ++ Source file ++ Arquivo fonte ++ ++ ++ ++ Players ++ Jogadores ++ ++ ++ ++ Rank ++ Classificação ++ ++ ++ ++ Is BIOS? ++ É BIOS? ++ ++ ++ ++ Is device? ++ É dispositivo? ++ ++ ++ ++ Category ++ Categoria ++ ++ ++ ++ Version ++ Versão ++ ++ ++ ++ ++ ++ ++ true ++ verdadeiro ++ ++ ++ ++ ++ ++ ++ false ++ falso ++ ++ ++ ++ MachineListViewer ++ ++ ++ Columns ++ Colunas ++ ++ ++ ++ Filters ++ Filtros ++ ++ ++ ++ ++ Remove view ++ Remove a visualização ++ ++ ++ ++ Attach ++ Anexar ++ ++ ++ ++ ++ Attach view ++ Anexar a visualização ++ ++ ++ ++ Detach ++ Desanexar ++ ++ ++ ++ ++ Detach view ++ Desanexar a visualização ++ ++ ++ ++ ++ Clone view ++ Visualização dos clones ++ ++ ++ ++ ++ ++ Show attached view '%1' ++ Mostra a visualização anexada '%1' ++ ++ ++ ++ ++ Toggle flat / tree view mode ++ Alterna a visão plana / em árvore ++ ++ ++ ++ Flat ++ Plana ++ ++ ++ ++ ++ Tools menu ++ Menu de ferramentas ++ ++ ++ ++ ++ Setup visible columns ++ Configura as colunas visíveis ++ ++ ++ ++ ++ Configure view filters ++ Configurar os filtros de visualização ++ ++ ++ ++ ++ Save view ++ Salva a visualização ++ ++ ++ ++ Save ++ Salvar ++ ++ ++ ++ ++ ++ Enter a unique name for this view or select an existing one ++ Entre com um nome único para essa visualização ou selecione um existente ++ ++ ++ ++ ++ Update view ++ Atualiza a visualização ++ ++ ++ ++ Update ++ Atualizar ++ ++ ++ ++ ++ Number of records in view ++ Quantidade das gravações na visualização ++ ++ ++ ++ Clone ++ Clone ++ ++ ++ ++ Remove ++ Remover ++ ++ ++ ++ ++ Toggle menu ++ Alterna o menu ++ ++ ++ ++ MainWindow ++ ++ ++ ++ ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Toggle maximization of embedded emulator windows ++ Ativa/desativa a maximização das janelas de emuladores embutidos ++ ++ ++ ++ Searching machines - %p% ++ Buscando pelas máquinas - %p% ++ ++ ++ ++ Show machine/software titles ++ Mostra os títulos das máquinas/programas ++ ++ ++ ++ Show machine- or software-titles at the bottom of all images ++ Mostrar os títulos das máquinas ou dos programas abaixo de qualquer imagem ++ ++ ++ ++ Embed emulator widget ++ Embutir os elementos do emulador ++ ++ ++ ++ &Embed ++ &Embutir ++ ++ ++ ++ Kill selected emulator(s) (sends KILL signal to emulator process(es)) ++ Matar o(s) emulador(res) selecionado(s) (envia sinal KILL para o(s) processo(s) do emulador) ++ ++ ++ ++ &Kill ++ &Matar ++ ++ ++ ++ ++ Copy emulator command line to clipboard ++ Copiar linha de comando do emulador para a área de transferência ++ ++ ++ ++ ++ &Copy command ++ &Copiar comando ++ ++ ++ ++ ++ ++ ++ ++ ++ &Play ++ &Jogar ++ ++ ++ ++ ++ ++ ++ ++ ++ Play &embedded ++ Jogar o &embutido ++ ++ ++ ++ ++ ++ ++ ++ To &favorites ++ Para os &favoritos ++ ++ ++ ++ ++ ++ ++ Check &ROM state ++ Verificar a condição geral da &ROM ++ ++ ++ ++ ++ ++ ++ &Analyse ROM... ++ &Analisar ROM... ++ ++ ++ ++ ++ ++ ++ Rebuild current machine's ROM set with the ROMAlyzer ++ Reconstrói a ROM da máquina atual com o ROMAlyzer ++ ++ ++ ++ Remove from favorites ++ Remove dos favoritos ++ ++ ++ ++ ++ &Remove ++ &Remover ++ ++ ++ ++ Clear all favorites ++ Limpa todos os favoritos ++ ++ ++ ++ ++ &Clear ++ &Limpar ++ ++ ++ ++ Save favorites now ++ Salvar favoritos agora ++ ++ ++ ++ ++ &Save ++ &Salvar ++ ++ ++ ++ Remove from played ++ Remover dos já jogados ++ ++ ++ ++ Clear all played ++ Limpa todos os já jogados ++ ++ ++ ++ Save play-history now ++ Salva o histórico dos já jogados agora ++ ++ ++ ++ ++ ++ ++ Set tab position north ++ Definir a posição da aba ao norte ++ ++ ++ ++ ++ ++ ++ &North ++ &Norte ++ ++ ++ ++ ++ ++ ++ Set tab position south ++ Definir a posição da aba ao sul ++ ++ ++ ++ ++ ++ ++ &South ++ &Sul ++ ++ ++ ++ ++ ++ ++ Set tab position west ++ Definir a posição da aba ao Oeste ++ ++ ++ ++ ++ ++ ++ &West ++ &Oeste ++ ++ ++ ++ ++ ++ ++ Set tab position east ++ Definir a posição da aba ao Leste ++ ++ ++ ++ ++ ++ ++ &East ++ &Leste ++ ++ ++ ++ &Setup... ++ &Configurar... ++ ++ ++ ++ ++ ++ ++ Waiting for data... ++ Aguardando os dados... ++ ++ ++ ++ ++ ++ please wait for ROM state filter to finish and try again ++ aguarde o filtro da condição da ROM terminar e tente novamente ++ ++ ++ ++ ++ please wait for ROM verification to finish and try again ++ aguarde a verificação da ROM terminar e tente novamente ++ ++ ++ ++ ++ ++ please wait for image check to finish and try again ++ aguarde a verificação da imagem terminar e tente novamente ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ please wait for ROMAlyzer to finish the current analysis and try again ++ aguarde o ROMAlyzer terminar a análise atual e tente novamente ++ ++ ++ ++ ++ ROM verification already active ++ A verificação de ROM já está ativada ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ please wait for reload to finish and try again ++ aguarde a conclusão do recarregamento e tente novamente ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Confirm ++ Confirma ++ ++ ++ ++ The ROM verification process may be very time-consuming. ++It will overwrite existing cached data. ++ ++Do you really want to check all ROM states now? ++ O tempo de processamento da verificação da ROM pode demorar bastante. ++Ele substituíra os dados do cachejá existente. ++ ++Realmente deseja verificar a condição de todas as ROMs agora? ++ ++ ++ ++ automatic ROM check triggered ++ a verificação automática de ROM foi disparada ++ ++ ++ ++ image cache cleared ++ o cache das imagens foi limpo ++ ++ ++ ++ icon cache cleared ++ o cache dos ícones foi limpo ++ ++ ++ ++ freed %n byte(s) in %1 ++ ++ foi liberado %n byte em %1 ++ foram liberados %n bytes em %1 ++ ++ ++ ++ ++ %n entry(s) ++ ++ %n entrada ++ %n entradas ++ ++ ++ ++ ++ removed %n byte(s) in %1 ++ ++ foi removido %n byte em %1 ++ foram removidos %n bytes em %1 ++ ++ ++ ++ ++ %n file(s) ++ ++ %n arquivo ++ %n arquivos ++ ++ ++ ++ ++ YouTube on-disk cache cleared (%1) ++ O cache em disco do YouTube foi limpo (%1) ++ ++ ++ ++ ROM state cache file '%1' removed ++ o arquivo do cache da condição da ROM '%1' foi removido ++ ++ ++ ++ ++ About Qt ++ Sobre o Qt ++ ++ ++ ++ ERROR: no match found (?) ++ ERRO: nada foi encontrado (?) ++ ++ ++ ++ ++ Export to... ++ Exportar para... ++ ++ ++ ++ ++ <inipath>/%1.ini ++ <inipath>/%1.ini ++ ++ ++ ++ ++ ++ ++ Select file... ++ Selecione o arquivo... ++ ++ ++ ++ ++ <p>No data available</p> ++ <b>Nenhum dado disponível</b> ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ No data available ++ Nenhum dado disponível ++ ++ ++ ++ ++ Embedded emulators ++ Emuladores embutidos ++ ++ ++ ++ Release emulator ++ Liberar o emulador ++ ++ ++ ++ WARNING: no matching window for emulator #%1 found ++ AVISO: nenhuma janela para o emulador #%1 foi encontrada ++ ++ ++ ++ Embedding failed ++ Houve uma falha ao embutir ++ ++ ++ ++ ++ Scanning pause key ++ Examinando a tecla de pausa ++ ++ ++ ++ Are you sure you want to clear the favorites list? ++ Tem certeza que deseja limpar a lista dos favoritos? ++ ++ ++ ++ Are you sure you want to clear the play history? ++ Tem certeza que deseja limpar o histórico dos já jogados? ++ ++ ++ ++ ++ Choose export file ++ Escolha o arquivo de exportação ++ ++ ++ ++ ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ ++ Choose import file ++ Escolha o arquivo de importação ++ ++ ++ ++ ++ WARNING: invalid inipath ++ AVISO: o inipath é inválido ++ ++ ++ ++ ++ stopping current processing upon user request ++ interrompendo o processamento atual devido à requisição do usuário ++ ++ ++ ++ Your configuration changes have not been applied yet. ++Really quit? ++ As suas alterações na configuração ainda não foram aplicadas. ++Deseja encerrar? ++ ++ ++ ++ There are one or more emulators still running. ++Should they be killed on exit? ++ Não há um ou qualquer outro emulador em execução. ++Eles devem ser mortos ao encerrar? ++ ++ ++ ++ There are one or more running downloads. Quit anyway? ++ Existem um ou mais downloads em execução. Encerrar mesmo assim? ++ ++ ++ ++ cleaning up ++ limpando ++ ++ ++ ++ aborting running downloads ++ abortando os downloads em execução ++ ++ ++ ++ saving main widget layout ++ salvando o layout do elemento principal ++ ++ ++ ++ ++ Clear ProjectMESS cache ++ Limpa o cache do ProjectMESS ++ ++ ++ ++ Default configuration ++ Configuração padrão ++ ++ ++ ++ ProjectMESS in-memory cache cleared (%1) ++ O cache da memória do ProjectMESS foi limpo (%1) ++ ++ ++ ++ WARNING: cannot remove the ROM state cache file '%1', please check permissions ++ AVISO: foi impossível remover o arquivo do cache '%1' da condição geral da ROM, verifique as permissões ++ ++ ++ ++ ProjectMESS page for system '%1' ++ Página do ProjectMESS para o sistema '%1' ++ ++ ++ ++ Fetching ProjectMESS page for system '%1', please wait... ++ Baixando a página do ProjectMESS para o sistema '%1', aguarde... ++ ++ ++ ++ disconnecting audio source from audio sink ++ desconectando a fonte de áudio do sumidouro de áudio ++ ++ ++ ++ ++ Enter search string ++ Insira o termo da busca ++ ++ ++ ++ Dock / undock this widget ++ Anexar / desanexar este elemento ++ ++ ++ ++ ++ note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! ++ nota: os caracteres especiais $, (, ), *, +, ., ?, [, ], ^, {, |, } e \ devem ser precedidos pelo caractere de escape quando forem utilizados de forma literal! ++ ++ ++ ++ ++ ++ ++ Reset ++ Redefinir ++ ++ ++ ++ Negate search ++ Negar a busca ++ ++ ++ ++ sorry, devices cannot run standalone ++ desculpe, os dispositivos não podem ser executados sozinhos ++ ++ ++ ++ No devices available ++ Nenhum dispositivo está disponível ++ ++ ++ ++ ++ ++ ++ ++ default ++ padrão ++ ++ ++ ++ ++ ++ ++ &Rebuild ROM... ++ &Reconstruir a ROM... ++ ++ ++ ++ Include BIOS sets ++ Incluir a BIOS nos conjuntos ++ ++ ++ ++ Include device sets ++ Incluir os dispositivos nos conjuntos ++ ++ ++ ++ ++ ++ ++ ++ ++ Unlock ranks ++ Destravar as classificações ++ ++ ++ ++ machine list reload is already active ++ o recarregamento da lista das máquinas já está ativo ++ ++ ++ ++ ++ saving machine selection ++ salvando a seleção das máquinas ++ ++ ++ ++ ERROR: can't load HTML file '%1' ++ ERRO: foi impossível abrir o arquivo HTML '%1' ++ ++ ++ ++ ERROR: can't load PDF viewer from '%1' ++ ERRO: foi impossível abrir o visualizador PDF em '%1' ++ ++ ++ ++ ++ please wait for ROMAlyzer to finish the current rebuild and try again ++ aguarde o ROMAlyzer concluir a reconstrução atual e tente novamente ++ ++ ++ ++ triggering an automatic ROM check on next reload ++ ativando uma verificação automática da ROM na próxima execução ++ ++ ++ ++ machine list cache file '%1' removed ++ i arquivo do cache da lista das máquinas '%1' foi removido ++ ++ ++ ++ WARNING: cannot remove the machine list cache file '%1', please check permissions ++ AVISO: foi impossível remover o arquivo do cache '%1' da lista das máquinas, verifique as permissões ++ ++ ++ ++ INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead ++ INFORMAÇÃO: o modo arcade precisa ser configurado primeiro, iniciando a respectiva janela ++ ++ ++ ++ arcade mode: launching QMC2 Arcade, command = '%1' ++ modo arcade: executando o Arcade QMC2, comando = '%1' ++ ++ ++ ++ WARNING: failed launching QMC2 Arcade ++ AVISO: houve uma falha ao iniciar o Arcade QMC2 ++ ++ ++ ++ ProjectMESS page for '%1' / '%2' ++ Página do ProjectMESS para '%1' / '%2' ++ ++ ++ ++ Fetching ProjectMESS page for '%1' / '%2', please wait... ++ Baixando página do ProjectMESS para '%1' / '%2', aguarde... ++ ++ ++ ++ Emulator for this machine ++ O emulador para esta máquina ++ ++ ++ ++ please wait for sorting to finish and try again ++ aguarde o fim da ordenação e tente novamente ++ ++ ++ ++ destroying YouTube video widget ++ destruindo o elemento de vídeos do YouTube ++ ++ ++ ++ saving current machine's favorite software ++ salvando o programa favorito da máquina atual ++ ++ ++ ++ saving current machine's device configurations ++ salvando as configurações dos dispositivos da máquina atual ++ ++ ++ ++ destroying machine list ++ destruindo a lista das máquinas ++ ++ ++ ++ destroying emulator configuration instances ++ destruindo as instâncias de configuração do emulador ++ ++ ++ ++ Show machine- or software-titles only when the machine list is not visible due to the current layout ++ Mostre os títulos da máquina ou do programa apenas quando a lista das máquinas não está visível por causa do layout atual ++ ++ ++ ++ ++ ++ ++ Tab position ++ Posição da aba ++ ++ ++ ++ ++ ++ ++ Component setup ++ Configuração do componente ++ ++ ++ ++ ++ ++ ++ Component setup... ++ Configuração do componente... ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ N/A ++ N/A ++ ++ ++ ++ saving YouTube video info cache ++ salvando a informação do cache do vídeo do YouTube ++ ++ ++ ++ done (saving YouTube video info cache) ++ feito (salvando a informação do cache do vídeo do YouTube) ++ ++ ++ ++ ++ failed (saving YouTube video info cache) ++ houve uma falha (ao salvar a informação do cache do vídeo do YouTube) ++ ++ ++ ++ destroying media player ++ destruindo o tocador de mídia ++ ++ ++ ++ destroying image widgets ++ destruindo os elementos das imagens ++ ++ ++ ++ destroying open dialogs ++ destruindo as janelas que estão abertas ++ ++ ++ ++ destroying process manager ++ destruindo o gerenciador de processo ++ ++ ++ ++ killing %n running emulator(s) on exit ++ ++ matando %n o emulador em execução ao encerrar ++ matando %n os emuladores em execução ao encerrar ++ ++ ++ ++ ++ keeping %n running emulator(s) alive ++ ++ mantendo %n emulador em execução vivo ++ mantendo %n os emuladores em execução vivos ++ ++ ++ ++ ++ destroying network access manager ++ destruindo o gerenciador de acesso à rede ++ ++ ++ ++ so long and thanks for all the fish ++ até logo e obrigado pelos peixes ++ ++ ++ ++ Welcome to QMC2 v%1! ++ Bem-vindo ao QMC2 v%1! ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Loading, please wait... ++ Carregando, aguarde... ++ ++ ++ ++ loading style sheet '%1' ++ carregando as folha de estilos '%1' ++ ++ ++ ++ removing current style sheet ++ removendo a folha de estilo atual ++ ++ ++ ++ using default color palette for GUI style '%1' ++ usando uma paleta de cor padrão para o estilo de interface '%1' ++ ++ ++ ++ using custom color palette ++ usando uma paleta de cores personalizada ++ ++ ++ ++ YouTube index - %p% ++ Índice do YouTube - %p% ++ ++ ++ ++ %n video info record(s) loaded ++ ++ %n o registro de informação do vídeo foi carregado ++ %n os registros das informações dos vídeos foram carregados ++ ++ ++ ++ ++ Select one or more audio files ++ Selecione um ou mais arquivos de audio ++ ++ ++ ++ Add URL ++ Adiciona uma URL ++ ++ ++ ++ Enter valid MP3 stream URL: ++ Entre uma URL de stream MP3 válida: ++ ++ ++ ++ audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' ++ reprodutor de músicas: informação da faixa: título = '%1', artista = '%2', album = '%3', gênero = '%4' ++ ++ ++ ++ Buffering %p% ++ Carregando %p% ++ ++ ++ ++ ++ running ++ executando ++ ++ ++ ++ ++ Play tagged - %p% ++ Jogar os etiquetados - %p% ++ ++ ++ ++ Add favorites - %p% ++ Adicionar aos favoritos - %p% ++ ++ ++ ++ ++ ++ ++ please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) ++ aguarde a atividade atual terminar e tente novamente (essa operação em lote só pode ser executada de forma exclusiva) ++ ++ ++ ++ It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? ++ É muito mais rápido fazer uma auditoria completa do que verificar %1 conjuntos individualmente. Realmente deseja continuar? ++ ++ ++ ++ ROM tool tagged - %p% ++ Ferramenta da ROM com os etiquetados - %p% ++ ++ ++ ++ ++ Tag - %p% ++ Etiquetar - %p% ++ ++ ++ ++ ++ Tagging, please wait... ++ Etiquetando, aguarde... ++ ++ ++ ++ ++ Untag - %p% ++ Remove a etiqueta - %p% ++ ++ ++ ++ ++ Untagging, please wait... ++ Removendo as etiquetas, aguarde... ++ ++ ++ ++ ++ Invert tag - %p% ++ Inverter a etiqueta - %p% ++ ++ ++ ++ ++ Inverting tags, please wait... ++ Invertendo as etiquetas, aguarde... ++ ++ ++ ++ External browser ++ Navegador externo ++ ++ ++ ++ External PDF viewer ++ Visualizador de PDF externo ++ ++ ++ ++ Manual selection ++ Seleção manual ++ ++ ++ ++ Multiple PDF manuals exist. Select the ones you want to open: ++ Existem diversos manuais em PDF. Escolha aqueles que deseja abrir: ++ ++ ++ ++ ++ Software detail ++ Detalhe do programa ++ ++ ++ ++ Choose overlay color ++ Escolha a cor de sobreposição ++ ++ ++ ++ WARNING: ROM path '%1' doesn't exist ++ AVISO: o caminho das ROMs '%1' não existe ++ ++ ++ ++ WARNING: ROM path '%1' isn't accessible ++ AVISO: o caminho das ROMs '%1' não está acessível ++ ++ ++ ++ The ROM path '%1' doesn't exist or isn't accessible. ++ ++Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! ++ O caminho da rom '%1' não existe ou não está acessível. ++ ++Verifique a opção 'rompath' na configuração global do emulador para corrigir isso, caso contrário, as ROMs provavelmente não estarão disponíveis no emulador! ++ ++ ++ ++ The ROM paths ++ ++%1 ++ ++don't exist or aren't accessible. ++ ++Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! ++ Os caminhos da ROM ++ ++%1 ++ ++não existe ou não está disponível ++ ++Verifique a opção 'rompath' na configuração global do emulador para corrigir isso, caso contrário, as ROMs provavelmente não estarão disponíveis no emulador! ++ ++ ++ ++ Check ROM path ++ Verifica o caminho das ROMs ++ ++ ++ ++ processing global emulator configuration ++ processando de configuração global do emulador ++ ++ ++ ++ ++ Export global MAME configuration ++ Exporta a configuração global do MAME ++ ++ ++ ++ Import from... ++ Importar de... ++ ++ ++ ++ ++ Import global MAME configuration ++ Importar a configuração global do MAME ++ ++ ++ ++ ++ Enable processing of MAME output notifiers (this forces '-output console') ++ Ativa o processamento dos notificadores de saída do MAME (impõem o uso de '-output console') ++ ++ ++ ++ ++ <inipath>/mame.ini ++ <inipath>/mame.ini ++ ++ ++ ++ ++ ++ paused ++ pausado ++ ++ ++ ++ Toggle automatic pausing of embedded emulators (hold down for menu) ++ Ativa/desativa a pausa automática dos emuladores embutidos (mantenha pressionado para abrir o menu) ++ ++ ++ ++ Scan the pause key used by the emulator ++ Examina a tecla de pausa usada pelo emulador ++ ++ ++ ++ Scan pause key... ++ Examina a tecla de pausa... ++ ++ ++ ++ ++ ++ ++ ++ ++ Icon ++ Ícone ++ ++ ++ ++ setting GUI style to '%1' ++ configurando estilo da interface para '%1' ++ ++ ++ ++ WARNING: GUI style '%1' not found ++ AVISO: o estilo da interface '%1' não foi encontrado ++ ++ ++ ++ WARNING: can't open style sheet '%1' ++ AVISO: foi impossível abrir folha de estilo '%1' ++ ++ ++ ++ loading YouTube video info cache ++ carregando a informação do cache do vídeo do YouTube ++ ++ ++ ++ done (loading YouTube video info cache) ++ feito (carregando a informação do cache do vídeo do YouTube) ++ ++ ++ ++ Choose file to store download ++ Escolha o arquivo para salvar o download ++ ++ ++ ++ ++ ++ M.A.M.E. Catalog / Launcher II ++ MAME Catálogo / Launcher II ++ ++ ++ ++ ++ Icon / Value ++ Ícone / Valor ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Year ++ Ano ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Manufacturer ++ Fabricante ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ROM types ++ Tipo das ROMs ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Category ++ Categoria ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Version ++ Versão ++ ++ ++ ++ Parent / clone hierarchy ++ Hierarquia principal / clone ++ ++ ++ ++ ++ Toggle individual ROM states ++ Ativa os estados individuais de ROM ++ ++ ++ ++ &Search ++ &Buscar ++ ++ ++ ++ ++ Search result ++ Resultado da busca ++ ++ ++ ++ Favo&rites ++ Favo&ritos ++ ++ ++ ++ &Foreign emulators ++ &Emuladores estrangeiros ++ ++ ++ ++ Emulator ++ Emulador ++ ++ ++ ++ <b><font color=black>L:?</font> <font color=#00cc00>C:?</font> <font color=#a2c743>M:?</font> <font color=#f90000>I:?</font> <font color=#7f7f7f>N:?</font> <font color=#0000f9>U:?</font> <font color=chocolate>S:?</font></b> ++ <b><font color=black>L:?</font> <font color=#00cc00>C:?</font> <font color=#a2c743>M:?</font> <font color=#f90000>I:?</font> <font color=#7f7f7f>N:?</font> <font color=#0000f9>U:?</font> <font color=chocolate>S:?</font></b> ++ ++ ++ ++ ++ Switch machine list view ++ Altera a visualização da máquina ++ ++ ++ ++ ++ Full detail view ++ Visualização detalhada ++ ++ ++ ++ Pre&view ++ Pre&visualização ++ ++ ++ ++ Fl&yer ++ Panfl&etos ++ ++ ++ ++ Em&ulator info ++ Informação do em&ulador ++ ++ ++ ++ ++ Detailed emulator information ++ Informação detalhada do emulador ++ ++ ++ ++ &Configuration ++ &Configuração ++ ++ ++ ++ &Devices ++ &Dispositivos ++ ++ ++ ++ Ca&binet ++ Ga&binete ++ ++ ++ ++ C&ontroller ++ C&ontrole ++ ++ ++ ++ Mar&quee ++ Mar&quise ++ ++ ++ ++ Titl&e ++ Títul&o ++ ++ ++ ++ MA&WS ++ MA&WS ++ ++ ++ ++ &PCB ++ &PCI ++ ++ ++ ++ &Front end log ++ Registro do &Front end ++ ++ ++ ++ ++ Frontend log ++ Registro do frontend ++ ++ ++ ++ Emulator &log ++ Reg&istro do emulador ++ ++ ++ ++ ++ Emulator log ++ Registro do emulador ++ ++ ++ ++ E&mulator control ++ Controle do e&mulador ++ ++ ++ ++ ++ Emulator control panel ++ Painel de controle do emulador ++ ++ ++ ++ # ++ # ++ ++ ++ ++ ++ Status ++ Estado ++ ++ ++ ++ LED0 ++ LED0 ++ ++ ++ ++ LED1 ++ LED1 ++ ++ ++ ++ PID ++ PID ++ ++ ++ ++ Command ++ Comando ++ ++ ++ ++ ++ ++ Previous track ++ Faixa anterior ++ ++ ++ ++ ++ ++ Next track ++ Próxima faixa ++ ++ ++ ++ ++ ++ Fast backward ++ Avanço rápido ++ ++ ++ ++ ++ ++ Fast forward ++ Retrocesso rápido ++ ++ ++ ++ ++ ++ Stop track ++ Parar faixa ++ ++ ++ ++ ++ ++ Pause track ++ Pausar faixa ++ ++ ++ ++ ++ ++ Play track ++ Reproduzir faixa ++ ++ ++ ++ ++ Progress indicator for current track ++ Indicador de progresso para a faixa atual ++ ++ ++ ++ ++ ++ ++ %vs (%ms total) ++ %vs (%ms total) ++ ++ ++ ++ ++ Browse for tracks to add to playlist ++ Fazer a procura por músicas para adicionar à lista ++ ++ ++ ++ ++ Enter URL to add to playlist ++ Insira a URL para adicionar à lista ++ ++ ++ ++ ++ Remove selected tracks from playlist ++ Remove as faixas selecionadas da lista ++ ++ ++ ++ ++ Start playing automatically when QMC2 has started ++ Inicia o jogo automaticamente quando o QMC2 for iniciado ++ ++ ++ ++ Play on start ++ Inicia ao abrir ++ ++ ++ ++ ++ Select random tracks from playlist ++ Seleciona as músicas aleatórias da lista ++ ++ ++ ++ Shuffle ++ Embaralhar ++ ++ ++ ++ ++ Automatically pause audio playback when at least one emulator is running ++ Pausar automaticamente quando pelo menos um emulador está executando ++ ++ ++ ++ Pause ++ Pausa ++ ++ ++ ++ ++ Fade in and out on pause / resume ++ Fade in e out durante pausa / resumo ++ ++ ++ ++ Fade in/out ++ Fade in/out ++ ++ ++ ++ ++ Audio player volume ++ Volume do reprodutor de música ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Players ++ Jogadores ++ ++ ++ ++ Pl&ayed ++ Já j&ogados ++ ++ ++ ++ Softwar&e list ++ Lista de progr&amas ++ ++ ++ ++ &YouTube ++ &YouTube ++ ++ ++ ++ ++ Playlist (move items by dragging & dropping them) ++ Lista (mova os itens arrastando e soltando eles) ++ ++ ++ ++ ++ Setup available audio effects ++ Configure os efeitos de áudio disponíveis ++ ++ ++ ++ ++ List of active/inactive downloads ++ Lista dos downloads ativos/inativos ++ ++ ++ ++ Progress ++ Progresso ++ ++ ++ ++ ++ Clear finished / stopped downloads from list ++ Limpa os downloads finalizados / parados da lista ++ ++ ++ ++ ++ Reload selected downloads ++ Recarrega os downloads selecionados ++ ++ ++ ++ ++ Stop selected downloads ++ Pare os downloads selecionados ++ ++ ++ ++ Automatically remove successfully finished downloads from this list ++ Remove automaticamente os downloads bem-sucedidos da lista ++ ++ ++ ++ Remove finished ++ Remove os já finalizados ++ ++ ++ ++ &Help ++ &Ajuda ++ ++ ++ ++ &Tools ++ &Ferramentas ++ ++ ++ ++ &Clean up ++ &Limpeza ++ ++ ++ ++ ++ &Audio player ++ &Reprodutor de música ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Driver status ++ Condição geral do controlador ++ ++ ++ ++ Snapsh&ot ++ Capt&ura de tela ++ ++ ++ ++ Project&MESS ++ Project&MESS ++ ++ ++ ++ ++ ++ &Notes ++ &Notas ++ ++ ++ ++ &Check ++ &Verificar ++ ++ ++ ++ &View ++ &Ver ++ ++ ++ ++ &Display ++ &Mostrar ++ ++ ++ ++ Toolbar ++ Barra de ferramentas ++ ++ ++ ++ Ctrl+2 ++ Ctrl+2 ++ ++ ++ ++ Ctrl+P ++ Ctrl+P ++ ++ ++ ++ A&bout... ++ &Sobre... ++ ++ ++ ++ Ctrl+B ++ Ctrl+B ++ ++ ++ ++ &QMC2 Arcade ++ Arcade &QMC2 ++ ++ ++ ++ ++ ++ Launch arcade mode ++ Inicia o modo arcade ++ ++ ++ ++ Ctrl+Shift+C ++ Ctrl+Shift+C ++ ++ ++ ++ Play (tagged) ++ Jogar (etiquetados) ++ ++ ++ ++ Play embedded (tagged) ++ Jogar embutido (etiquetados) ++ ++ ++ ++ To favorites (tagged) ++ Para os favoritos (etiquetados) ++ ++ ++ ++ ++ Check ROM states of all tagged sets ++ Verifica a condição da ROM de todos os conjuntos etiquetados ++ ++ ++ ++ Ctrl+Shift+S ++ Ctrl+Shift+S ++ ++ ++ ++ E&xit / Stop ++ Enc&errar / Parar ++ ++ ++ ++ ++ Exit program / Stop any active processing ++ Encerra o programa / Para qualquer processamento ativo ++ ++ ++ ++ Ctrl+X ++ Ctrl+X ++ ++ ++ ++ &Documentation... ++ &Documentação... ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Tag ++ Etiqueta ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Source file ++ Arquivo fonte ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Rank ++ Classificação ++ ++ ++ ++ ++ Search progress ++ Progresso da busca ++ ++ ++ ++ ++ L:Listed - C:Correct - M:Mostly correct - I:Incorrect - N:Not found - U:Unknown - S:Search - T:Tagged ++ L:Listado - C:Correto - M:Maioria correto - I:Incorreto - N:Não encontrado - D:Desconhecido - B:Busca - E: Etiquetados ++ ++ ++ ++ LED2 ++ LED2 ++ ++ ++ ++ Do&wnloads ++ Do&wnloads ++ ++ ++ ++ Software info ++ Informação do programa ++ ++ ++ ++ ++ Detailed software information ++ Informação detalhada do programa ++ ++ ++ ++ &Tag ++ E&tiquetar ++ ++ ++ ++ Search web ++ Buscar na web ++ ++ ++ ++ Set rank ++ Definir a classificação ++ ++ ++ ++ Rank image ++ Imagem da classificação ++ ++ ++ ++ &Machine list ++ Lista das &Máquinas ++ ++ ++ ++ List of all supported machines ++ Lista de todas as máquinas suportadas ++ ++ ++ ++ ++ Machine / Attribute ++ Máquina / Atributo ++ ++ ++ ++ ++ Machine / Clones ++ Máquina / Clones ++ ++ ++ ++ List of machines viewed by category ++ Lista das máquinas organizadas por categoria ++ ++ ++ ++ ++ Category / Machine ++ Categoria / Máquina ++ ++ ++ ++ List of machines viewed by version they were added to the emulator ++ Lista das máquinas vistas pela versão em que foram adicionadas ao emulador ++ ++ ++ ++ ++ Version / Machine ++ Versão / Máquina ++ ++ ++ ++ ++ Search for machines (not case-sensitive) ++ Buscar por máquinas (não sensível à caixa) ++ ++ ++ ++ ++ Search for machines ++ Buscar por máquinas ++ ++ ++ ++ ++ Favorite machines ++ Máquinas favoritas ++ ++ ++ ++ ++ Machines last played ++ Últimas máquinas já jogadas ++ ++ ++ ++ ++ Foreign emulators with custom IDs ++ Emuladores estrangeiros com IDs personalizados ++ ++ ++ ++ ++ Progress indicator for machine list processing ++ Indicador de progresso para o processamento de lista das máquinas ++ ++ ++ ++ ++ Hierarchical view ++ Visualização hierárquica ++ ++ ++ ++ ++ Number of matches ++ Quantidade de correspondências ++ ++ ++ ++ ++ Machine status indicator ++ Indicador da condição geral da máquina ++ ++ ++ ++ Machine &info ++ &Informações da máquina ++ ++ ++ ++ ++ Detailed machine information ++ Informação detalhada da máquina ++ ++ ++ ++ Machine / Notifier ++ Máquina / Notificação ++ ++ ++ ++ &Machine ++ &Máquina ++ ++ ++ ++ Set rank (tagged) ++ Definir classificação (etiquetado) ++ ++ ++ ++ Manual ++ Manual ++ ++ ++ ++ Check &images / icons... ++ Verificar as &imagens / ícones... ++ ++ ++ ++ ++ ++ Check images and icons ++ Verifica as imagens e os ícones ++ ++ ++ ++ ++ ++ Play current machine ++ Executar a máquina atual ++ ++ ++ ++ Ctrl+H ++ Ctrl+H ++ ++ ++ ++ About QMC2 ++ Sobre o QMC2 ++ ++ ++ ++ ++ About M.A.M.E. Catalog / Launcher II ++ Sobre o MAME. Catálogo / Launcher II ++ ++ ++ ++ About &Qt... ++ Sobre o &Qt... ++ ++ ++ ++ Ctrl+Q ++ Ctrl+Q ++ ++ ++ ++ Check &ROMs... ++ Verificar as &ROMs... ++ ++ ++ ++ ++ ++ Check ROM collection ++ Verificar a coleção das ROMs ++ ++ ++ ++ Ctrl+1 ++ Ctrl+1 ++ ++ ++ ++ &Options... ++ &Opções... ++ ++ ++ ++ Frontend setup ++ Configuração do frontend ++ ++ ++ ++ ++ Frontend setup and global emulator configuration ++ Configuração do frontend e a configuração global do emulador ++ ++ ++ ++ Ctrl+O ++ Ctrl+O ++ ++ ++ ++ &Reload ++ &Recarregar ++ ++ ++ ++ Ctrl+R ++ Ctrl+R ++ ++ ++ ++ ++ ++ Clear image cache ++ Limpar o cache da imagem ++ ++ ++ ++ Ctrl+I ++ Ctrl+I ++ ++ ++ ++ Recreate template map ++ Recria o modelo do mapa ++ ++ ++ ++ ++ Recreate template configuration map ++ Recria o mapa de configurações do modelo ++ ++ ++ ++ Ctrl+T ++ Ctrl+T ++ ++ ++ ++ ++ ++ ++ ++ Add current machine to favorites ++ Adicionar a máquina atual nos favoritos ++ ++ ++ ++ Ctrl+J ++ Ctrl+J ++ ++ ++ ++ F5 ++ F5 ++ ++ ++ ++ ++ View parent / clone hierarchy ++ Ver a hierarquia principal / clone ++ ++ ++ ++ F6 ++ F6 ++ ++ ++ ++ ++ Clear icon cache ++ Limpar o cache dos ícones ++ ++ ++ ++ Ctrl+N ++ Ctrl+N ++ ++ ++ ++ ++ ++ ++ ++ ++ Check current machine's ROM state ++ Verificar a condição da ROM da máquina atual ++ ++ ++ ++ Ctrl+S ++ Ctrl+S ++ ++ ++ ++ Analyse ROM... ++ Analisa a ROM... ++ ++ ++ ++ Analyse ROM ++ Analisa a ROM ++ ++ ++ ++ Ctrl+D ++ Ctrl+D ++ ++ ++ ++ Analyse ROM (tagged)... ++ Analisa a ROM (etiquetada)... ++ ++ ++ ++ Analyse ROM (tagged) ++ Analisa a ROM (etiquetada) ++ ++ ++ ++ ++ Analyse all tagged sets with ROMAlyzer ++ Analisa todos os conjuntos etiquetados com o ROMAlyzer ++ ++ ++ ++ Ctrl+Z ++ Ctrl+Z ++ ++ ++ ++ ++ ++ Setup arcade mode ++ Configura o modo do arcade ++ ++ ++ ++ Ctrl+Shift+A ++ Ctrl+Shift+A ++ ++ ++ ++ &Launch... ++ &Iniciar... ++ ++ ++ ++ F12 ++ F12 ++ ++ ++ ++ Toggle &full screen ++ Ativa a &tela cheia ++ ++ ++ ++ Toggle full screen ++ Alterna para tela cheia ++ ++ ++ ++ Toggle full screen / windowed mode ++ Ativa a tela cheia / modo janela ++ ++ ++ ++ F11 ++ F11 ++ ++ ++ ++ Play previous track ++ Reproduz a faixa anterior ++ ++ ++ ++ Ctrl+Alt+Left ++ Ctrl+Alt+Left ++ ++ ++ ++ Play next track ++ Reproduz a próxima música ++ ++ ++ ++ Ctrl+Alt+Right ++ Ctrl+Alt+Right ++ ++ ++ ++ Fast backward within track ++ Retrocesso rápido dentro da faixa ++ ++ ++ ++ Ctrl+Alt+B ++ Ctrl+Alt+B ++ ++ ++ ++ Fast forward within track ++ Avanço rápido dentro da faixa ++ ++ ++ ++ Ctrl+Alt+F ++ Ctrl+Alt+F ++ ++ ++ ++ Stop current track ++ Parar a faixa atual ++ ++ ++ ++ Ctrl+Alt+S ++ Ctrl+Alt+S ++ ++ ++ ++ Pause current track ++ Pausa a faixa atual ++ ++ ++ ++ Ctrl+Alt+# ++ Ctrl+Alt+# ++ ++ ++ ++ Play current track ++ Reproduz a faixa atual ++ ++ ++ ++ Ctrl+Alt+P ++ Ctrl+Alt+P ++ ++ ++ ++ Raise volume ++ Aumenta o volume ++ ++ ++ ++ Raise audio player volume ++ Aumenta o volume do reprodutor de músicas ++ ++ ++ ++ Ctrl+Alt+PgUp ++ Ctrl+Alt+PgUp ++ ++ ++ ++ Lower volume ++ Abaixa o volume ++ ++ ++ ++ Lower audio player volume ++ Abaixa o volume do reprodutor de músicas ++ ++ ++ ++ Ctrl+Alt+PgDown ++ Ctrl+Alt+PgDown ++ ++ ++ ++ &Export ROM status... ++ &Exporta a condição da ROM... ++ ++ ++ ++ ++ Export ROM status ++ Expota a condição da ROM ++ ++ ++ ++ Ctrl+E ++ Ctrl+E ++ ++ ++ ++ Ctrl+M ++ Ctrl+M ++ ++ ++ ++ Check template map ++ Verifica o mapa do modelo ++ ++ ++ ++ ++ Check template map against the configuration options of the currently selected emulator ++ Verifica o mapa do modelo contra as opções de configuração do emulador selecionado atualmente ++ ++ ++ ++ Ctrl+Shift+P ++ Ctrl+Shift+P ++ ++ ++ ++ &Demo mode... ++ &Modo demonstração... ++ ++ ++ ++ ++ Open the demo mode dialog ++ Abre a janela do modo de demonstração ++ ++ ++ ++ View by category ++ Exibir por categoria ++ ++ ++ ++ ++ View machines by category ++ Ver as máquinas por categoria ++ ++ ++ ++ View by version ++ Exibir por versão ++ ++ ++ ++ ++ View machines by version they were added to the emulator ++ Ver as máquinas pela versão em que foram adicionadas ao emulador ++ ++ ++ ++ Clear machine list cache ++ Limpa o cache de lista das máquinas ++ ++ ++ ++ ++ Forcedly clear (remove) the machine list cache ++ Impõem a limpeza (remove) o cache da lista das máquinas ++ ++ ++ ++ Clear slot info cache ++ Limpa a informação do cache do slot ++ ++ ++ ++ ++ Forcedly clear (remove) the slot info cache ++ Impõem a limpeza (remove) de informações do cache do slot ++ ++ ++ ++ ++ ++ Play all tagged machines ++ Joga todas as máquinas etiquetadas ++ ++ ++ ++ ++ Play all tagged machines (embedded) ++ Joga todas as máquinas etiquetadas (embutido) ++ ++ ++ ++ ++ Add all tagged machines to favorites ++ Adiciona todos as máquinas etiquetadas aos favoritos ++ ++ ++ ++ Ctrl+Shift+J ++ Ctrl+Shift+J ++ ++ ++ ++ Check ROM state (tagged) ++ Verifica a condição da ROM (etiquetado) ++ ++ ++ ++ Set tag ++ Coloca a etiqueta ++ ++ ++ ++ ++ ++ Set tag mark ++ Coloca a marca da etiqueta ++ ++ ++ ++ Ctrl+Shift+T ++ Ctrl+Shift+T ++ ++ ++ ++ Unset tag ++ Remove a etiqueta ++ ++ ++ ++ ++ ++ Unset tag mark ++ Remove a marca da etiqueta ++ ++ ++ ++ Ctrl+Shift+U ++ Ctrl+Shift+U ++ ++ ++ ++ Toggle tag ++ Adiciona/Remove as etiqueta ++ ++ ++ ++ ++ ++ Toggle tag mark ++ Adiciona/Remove a marca da etiqueta ++ ++ ++ ++ Ctrl+Shift+G ++ Ctrl+Shift+G ++ ++ ++ ++ Toggle tag / cursor down ++ Alterna a etiqueta / cursor para baixo ++ ++ ++ ++ ++ Toggle tag mark / move cursor one item down ++ Alterna marca da etiqueta / move o cursor um item para baixo ++ ++ ++ ++ Shift+Down ++ Shift+Baixo ++ ++ ++ ++ Toggle tag / cursor up ++ Alterna a etiqueta / cursor para cima ++ ++ ++ ++ ++ Toggle tag mark / move cursor one item up ++ Alterna a marca da etiqueta / move o cursor um item acima ++ ++ ++ ++ Shift+Up ++ Shift+Cima ++ ++ ++ ++ Tag all ++ Etiquetar todos ++ ++ ++ ++ ++ Set tag mark for all sets ++ Colocar a marca de etiqueta em todos os conjuntos ++ ++ ++ ++ Ctrl+Shift+L ++ Ctrl+Shift+L ++ ++ ++ ++ Untag all ++ Remove todas as etiquetas ++ ++ ++ ++ ++ Unset all tag marks ++ Remove todas as marcas das etiquetas ++ ++ ++ ++ Ctrl+Shift+N ++ Ctrl+Shift+N ++ ++ ++ ++ Invert all tags ++ Inverte todas as etiquetas ++ ++ ++ ++ ++ Invert all tag marks ++ Inverte todas as marcas das etiquetas ++ ++ ++ ++ Ctrl+Shift+I ++ Ctrl+Shift+I ++ ++ ++ ++ Tag visible ++ Etiqueta os visíveis ++ ++ ++ ++ ++ Set tag mark for all visible sets ++ Coloca uma marca de etiqueta em todos os conjuntos visíveis ++ ++ ++ ++ Untag visible ++ Remove as etiquetas visíveis ++ ++ ++ ++ ++ Unset all tag marks of visible sets ++ Remove uma marca da etiqueta em todos os conjuntos visíveis ++ ++ ++ ++ Invert visible tags ++ Inverte as etiquetas visíveis ++ ++ ++ ++ ++ Invert all tag marks of visible sets ++ Inverte todas as marcas das etiquetas nos conjuntos visíveis ++ ++ ++ ++ Homepage... ++ Página inicial... ++ ++ ++ ++ ++ Open the QMC2 homepage in the default browser ++ Abre a página inicial do QMC2 no browser padrão ++ ++ ++ ++ Wiki... ++ Wiki... ++ ++ ++ ++ ++ Open our wiki in the default browser ++ Abre o nosso wiki no navegador padrão ++ ++ ++ ++ Forum... ++ Fórum... ++ ++ ++ ++ ++ Open our forum in the default browser ++ Abre o nosso fórum no navegador padrão ++ ++ ++ ++ Bug tracker... ++ Gerenciador de defeitos (bug tracker)... ++ ++ ++ ++ ++ Open our bug-tracking system in the default browser ++ Abre a nossa ferramenta de gerenciamento de defeitos no navegador padrão ++ ++ ++ ++ Google ++ Google ++ ++ ++ ++ ++ ++ Search with Google ++ Buscar com o Google ++ ++ ++ ++ Wikipedia ++ Wikipedia ++ ++ ++ ++ ++ ++ Search with Wikipedia ++ Busca na Wikipedia ++ ++ ++ ++ ++ Internal browser ++ Navegador interno ++ ++ ++ ++ ++ ++ Use internal (or external) browser? ++ Usa o navegador interno ou externo? ++ ++ ++ ++ DuckDuckGo ++ DuckDuckGo ++ ++ ++ ++ ++ ++ Search with DuckDuckGo ++ Buscar com o DuckDuckGo ++ ++ ++ ++ Yandex ++ Yandex ++ ++ ++ ++ ++ ++ Search with Yandex ++ Buscar com o Yandex ++ ++ ++ ++ PDF viewer... ++ Visualizador de PDF... ++ ++ ++ ++ ++ Open a new empty PDF viewer window ++ Abrir uma nova janela do visualizador de PDFs vazia ++ ++ ++ ++ ++ Increase rank ++ Aumenta a classificação ++ ++ ++ ++ ++ Decrease rank ++ Reduz a classificação ++ ++ ++ ++ Flat ++ Simples ++ ++ ++ ++ ++ ++ Use flat rank image ++ Usar uma imagem simples de classificação ++ ++ ++ ++ Gradient ++ Gradiente ++ ++ ++ ++ ++ ++ Use gradient rank image ++ Usar uma imagem de classificação com gradiente ++ ++ ++ ++ Overlay color... ++ Cor da sobreposição... ++ ++ ++ ++ ++ ++ Choose overlay color for rank image ++ Escolhe uma cor de sobreposição para a imagem de classificação ++ ++ ++ ++ Color ++ Cor ++ ++ ++ ++ ++ ++ Use plain color rank image ++ Usar uma cor simples para a imagem de classificação ++ ++ ++ ++ ++ Rank 0 ++ Classificação 0 ++ ++ ++ ++ ++ ++ ++ Set rank to 0 (no rank) ++ Define a classificação para 0 (sem classificação) ++ ++ ++ ++ ++ Rank 1 ++ Classificação 1 ++ ++ ++ ++ ++ ++ ++ Set rank to 1 (lowest rank) ++ Define a classificação para 1 (menor classificação) ++ ++ ++ ++ ++ Rank 2 ++ Classificação 2 ++ ++ ++ ++ ++ ++ ++ Set rank to 2 ++ Define a classificação para 2 ++ ++ ++ ++ ++ Rank 3 ++ Classificação 3 ++ ++ ++ ++ ++ ++ ++ Set rank to 3 ++ Define a classificação para 3 ++ ++ ++ ++ ++ Rank 4 ++ Classificação 4 ++ ++ ++ ++ ++ ++ ++ Set rank to 4 ++ Define a classificação para 4 ++ ++ ++ ++ ++ Rank 5 ++ Classificação 5 ++ ++ ++ ++ ++ ++ ++ Set rank to 5 (highest rank) ++ Define a classificação para 5 (maior classificação) ++ ++ ++ ++ ++ Increase rank (tagged) ++ Aumenta a classificação (etiquetado) ++ ++ ++ ++ ++ Decrease rank (tagged) ++ Diminui a classificação (etiquetado) ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Lock ranks ++ Trava as classificações ++ ++ ++ ++ ROMAlyzer (software mode)... ++ ROMAlyzer (modo de programa)... ++ ++ ++ ++ ++ ++ Open ROMAlyzer (software mode) ++ Abre o ROMAlyzer (modo de programa) ++ ++ ++ ++ Ctrl+W ++ Ctrl+W ++ ++ ++ ++ Rebuild ROM... ++ Reconstruir a ROM... ++ ++ ++ ++ ++ Rebuild current machine with the ROMAlyzer ++ Reconstruir a ROM da máquina atual com o ROMAlyzer ++ ++ ++ ++ F2 ++ F2 ++ ++ ++ ++ Rebuild ROM (tagged) ++ Reconstruir a ROM (etiquetadas) ++ ++ ++ ++ ++ Rebuild all tagged sets with ROMAlyzer ++ Reconstruir todos os conjuntos etiquetados com o ROMAlyzer ++ ++ ++ ++ Ctrl+Shift+F2 ++ Ctrl+Shift+F2 ++ ++ ++ ++ New filtered view... ++ Nova visualização filtrada... ++ ++ ++ ++ ++ Create a new filtered machine list view ++ Cria uma nova visualização filtrada da lista das máquinas ++ ++ ++ ++ Relaunch setup wizard... ++ Reinicia o assistente de configuração... ++ ++ ++ ++ Relaunch setup wizard ++ Reinicia o assistente de configuração ++ ++ ++ ++ ++ Relaunch setup wizard (this will stop and restart QMC2 with the command line option -r) ++ Reinicia o assistente de configuração (o QMC2 será reiniciado com a opção -r da linha de comando) ++ ++ ++ ++ Open in PDF viewer... ++ Abre o visualizador de PDF... ++ ++ ++ ++ ++ ++ Open manual in PDF viewer ++ Abre o manual num visualizador de PDF ++ ++ ++ ++ ++ Internal PDF viewer ++ Visualizador interno de PDF ++ ++ ++ ++ ++ ++ Use internal (or external) PDF viewer? ++ Usar o visualizador interno (ou externo) de PDF? ++ ++ ++ ++ Ctrl+Shift+X ++ Ctrl+Shift+X ++ ++ ++ ++ ++ ++ Reload entire machine list ++ Faz a recarga completa da lista das máquinas ++ ++ ++ ++ ++ View machine list with full detail ++ Ver lista das máquinas em detalhes ++ ++ ++ ++ ++ Check ROM state ++ Verifica a condição da ROM ++ ++ ++ ++ ++ Analyse current machine with the ROMAlyzer ++ Analisa a ROM da máquina atual com o ROMAlyzer ++ ++ ++ ++ ++ Play current machine (embedded) ++ Jogar a máquina atual (embutida) ++ ++ ++ ++ Ctrl+Shift+Y ++ Ctrl+Shift+Y ++ ++ ++ ++ Ctrl+Shift+Z ++ Ctrl+Shift+Z ++ ++ ++ ++ Browser window... ++ Janela do browser... ++ ++ ++ ++ ++ Open a new empty browser window ++ Abre uma nova janela do browser em branco ++ ++ ++ ++ Ctrl+Shift+D ++ Ctrl+Shift+D ++ ++ ++ ++ ++ ++ View offline documentation ++ Ver a documentação offline ++ ++ ++ ++ ROMAlyzer (system mode)... ++ ROMAlyzer (modo de sistema)... ++ ++ ++ ++ ++ ++ Open ROMAlyzer (system mode) ++ Abre o ROMAlyzer (modo de sistema) ++ ++ ++ ++ F7 ++ F7 ++ ++ ++ ++ F8 ++ F8 ++ ++ ++ ++ Run external ROM tool... ++ Executa a ferramenta da ROM externa... ++ ++ ++ ++ ++ Run tool to process ROM data externally ++ Executa a ferramenta para processar os dados da ROM externamente ++ ++ ++ ++ F9 ++ F9 ++ ++ ++ ++ Run external ROM tool (tagged)... ++ Executa a ferramenta da ROM externa (etiquetados)... ++ ++ ++ ++ ++ Run tool to process ROM data externally for all tagged sets ++ Executa a ferramenta para processar os dados da ROM externamente para todos os conjuntos etiquetados ++ ++ ++ ++ Ctrl+Shift+F9 ++ Ctrl+Shift+F9 ++ ++ ++ ++ ++ Clear YouTube cache ++ Limpa o cache do YouTube ++ ++ ++ ++ Ctrl+Y ++ Ctrl+Y ++ ++ ++ ++ Clear ROM state cache ++ Limpa o cache da condição da ROM ++ ++ ++ ++ ++ Forcedly clear (remove) the ROM state cache ++ Impõem a limpeza (remove) o cache da condição da ROM ++ ++ ++ ++ Clear XML cache ++ Limpar o cache XML ++ ++ ++ ++ ++ Forcedly clear (remove) the XML cache ++ Impõem a limpeza (remove) o cache XML ++ ++ ++ ++ Clear software list cache ++ Limpa o cache de lista de programa ++ ++ ++ ++ ++ Forcedly clear (remove) the software list cache ++ Impõem a limpeza (remove) o cache da lista de programa ++ ++ ++ ++ Clear ALL emulator caches ++ Limpa TODOS os caches do emulador ++ ++ ++ ++ ++ Forcedly clear (remove) ALL emulator related caches ++ Impõem a limpeza (remove) TODOS os caches relacionados aos emuladores ++ ++ ++ ++ Couldn't find the window ID of one or more ++emulator(s) within a reasonable timeframe. ++ ++Retry embedding? ++ Não foi possível encontrar o ID da janela de um ou mais ++emulador(es) dentro de um prazo razoável. ++ ++Tentar incorporar novamente? ++ ++ ++ ++ Information ++ Informação ++ ++ ++ ++ Sorry, the emulator meanwhile died a sorrowful death :(. ++ Desculpe, o emulador teve uma morte triste :(. ++ ++ ++ ++ ++ Toggle embedder options (hold down for menu) ++ Ativa/desativa as opções para embutir (mantenha pressionado para exibir o menu) ++ ++ ++ ++ ++ last message repeated %n time(s) ++ ++ a última mensagem que se repetiu %n vez ++ as últimas mensagens que se repetiram %n vezes ++ ++ ++ ++ ++ ++ ++ ++ ++ Play selected machine ++ Joga a máquina selecionada ++ ++ ++ ++ ++ ++ ++ ++ Play selected machine (embedded) ++ Joga a máquina selecionada (embutida) ++ ++ ++ ++ ++ ++ ++ Analyse current machine's ROM set with the ROMAlyzer ++ Analisa a ROM da máquina atual com o ROMAlyzer ++ ++ ++ ++ To favorites ++ Para os favoritos ++ ++ ++ ++ Kill emulator ++ Matar o emulador ++ ++ ++ ++ &Kill emulator ++ &Matar o emulador ++ ++ ++ ++ destroying audio effects dialog ++ destruindo a janela dos efeitos de áudio ++ ++ ++ ++ emulator #%1 is already embedded ++ o emulador #%1 já está embutido ++ ++ ++ ++ ++ WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding ++ AVISO: as diversas janelas para o emulador #%1 foram encontradas, escolhendo o ID da janela %2 para embutir ++ ++ ++ ++ ++ embedding emulator #%1, window ID = %2 ++ embutindo o emulador #%1, ID da janela = %2 ++ ++ ++ ++ ManualScanner ++ ++ ++ Scanner log ++ Registro do exame ++ ++ ++ ++ Scan manual folders now ++ Faça o exame manual das pastas agora ++ ++ ++ ++ Scan now ++ Examinar agora ++ ++ ++ ++ Close this dialog ++ Fecha esta janela ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ System manual scanner ++ Exame manual do sistema ++ ++ ++ ++ Software manual scanner ++ Exame manual do programa ++ ++ ++ ++ click 'scan now' to start ++ clique em 'examinar agora' para iniciar ++ ++ ++ ++ scanner started ++ o exame foi iniciado ++ ++ ++ ++ scanner ended ++ o exame foi concluído ++ ++ ++ ++ reading file list for path '%1' ++ lendo a lista do arquivo para o caminho '%1' ++ ++ ++ ++ scanning %n file(s) ++ ++ ++ ++ ++ ++ ++ ++ ++ adding '%1' as a manual for '%2' ++ adicionando o '%1' como um manual para '%2' ++ ++ ++ ++ ignoring '%1' because its name doesn't match any machine ++ ignorando o '%1' porque o nome não coincide com nenhuma outra máquina ++ ++ ++ ++ can't read '%1' - please check access permissions ++ não foi possível ler '%1' - verifique as permissões ++ ++ ++ ++ ignoring '%1' because it doesn't appear to be a PDF document ++ ignorando o '%1' porque parece que não há nenhum documento em PDF ++ ++ ++ ++ scan statistics for path '%1' ++ estatísticas do exame para o caminho '%1' ++ ++ ++ ++ %n file(s) scanned ++ ++ ++ ++ ++ ++ ++ ++ %n manual(s) stored in database ++ ++ ++ ++ ++ ++ ++ ++ %n file(s) ignored ++ ++ ++ ++ ++ ++ ++ ++ %n file(s) inaccessible ++ ++ ++ ++ ++ ++ ++ ++ updating the database ++ atualizando o banco de dados ++ ++ ++ ++ database update finished ++ a atualização do banco de dados foi concluído ++ ++ ++ ++ Marquee ++ ++ ++ marquee ++ marquise ++ ++ ++ ++ MiniWebBrowser ++ ++ ++ Enter URL ++ Insira a URL ++ ++ ++ ++ ++ ++ ++ MiniWebBrowser ++ MiniWebBrowser ++ ++ ++ ++ ++ ++ ++ PDF viewer ++ Visualizador de PDF ++ ++ ++ ++ ++ Go back ++ Anterior ++ ++ ++ ++ ++ Go forward ++ Próximo ++ ++ ++ ++ WARNING: invalid network reply and/or network error ++ AVISO: Houve uma resposta inválida da rede/ou um erro da rede ++ ++ ++ ++ Mini Web Browser ++ Mini navegador ++ ++ ++ ++ ++ Reload current page ++ Recarrega a página atual ++ ++ ++ ++ ++ Go home (first page) ++ Página inicial (primeira página) ++ ++ ++ ++ ++ Enter current URL ++ Entra na URL atual ++ ++ ++ ++ ++ Load URL ++ Carrega a URL ++ ++ ++ ++ ++ Set zoom factor ++ Define fator de aproximação ++ ++ ++ ++ ++ Stop loading of current page ++ Para o carregamento da página atual ++ ++ ++ ++ % ++ % ++ ++ ++ ++ Toggle display of the search bar ++ Alterna a exibição da barra de busca ++ ++ ++ ++ ++ ++ ++ Enter search string ++ Insira o termo da busca ++ ++ ++ ++ Case-sensitive ++ Sensível à caixa ++ ++ ++ ++ Find previous occurrence ++ Procura pela ocorrência anterior ++ ++ ++ ++ Find next occurrence ++ Procura a próxima ocorrência ++ ++ ++ ++ Highlight matches ++ Destaca a correspondências ++ ++ ++ ++ MissingDumpsViewer ++ ++ ++ Missing dumps ++ Imagens que faltam ++ ++ ++ ++ Close this window ++ Fechar esta janela ++ ++ ++ ++ List of missing dumps ++ Lista das imagens que faltam ++ ++ ++ ++ Set / ID ++ Conjunto / ID ++ ++ ++ ++ Type ++ Tipo ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ Size ++ Tamanho ++ ++ ++ ++ CRC ++ CRC ++ ++ ++ ++ SHA1 ++ SHA1 ++ ++ ++ ++ Reason ++ Razão ++ ++ ++ ++ Export missing dumps to a data file ++ Exporta as imagens que faltam para um arquivo de dados ++ ++ ++ ++ Export to data file ++ Exporta para o arquivo de dados ++ ++ ++ ++ Export only dumps that are selected in the above list (or all) ++ Exporta apenas as imagens que estão selecionadas na lista acima (ou todos) ++ ++ ++ ++ Selected dumps only ++ Apenas as imagens selecionadas ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ Choose data file to export to ++ Escolha o arquivo de dados para exportar ++ ++ ++ ++ Data files (*.dat) ++ Arquivos de dados (*.dat) ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Created by QMC2 v%1 ++ Criado pelo QMC2 v%1 ++ ++ ++ ++ Preparing ++ Preparando ++ ++ ++ ++ Exporting ++ Exportando ++ ++ ++ ++ Error ++ Erro ++ ++ ++ ++ Can't open '%1' for writing! ++ Não é possível abrir '%1' para escrita! ++ ++ ++ ++ MovieRecorderSetup ++ ++ ++ Movie recorder setup ++ Configurações do gravador de vídeos ++ ++ ++ ++ Options ++ ++ ++ ++ ++ ++ Category ++ Categoria ++ ++ ++ ++ ++ ++ ++ Version ++ Versão ++ ++ ++ ++ Check all ROM states ++ Verifica a condição de todas as ROMs ++ ++ ++ ++ About QMC2 ++ Sobre o QMC2 ++ ++ ++ ++ Analyze tagged sets ++ Analisa os conjuntos etiquetados ++ ++ ++ ++ Export ROM Status ++ Exporta o estado da ROM ++ ++ ++ ++ Copy tagged sets to favorites ++ Copia os conjuntos etiquetados para os favoritos ++ ++ ++ ++ Online documentation ++ Documentação online ++ ++ ++ ++ Clear image cache ++ Limpa o cache das imagens ++ ++ ++ ++ Setup arcade mode ++ Configurar modo arcade ++ ++ ++ ++ Clear icon cache ++ Limpar o cache dos ícones ++ ++ ++ ++ ++ Open options dialog ++ Abre a janela das opções ++ ++ ++ ++ Play (independent) ++ Jogar (independente) ++ ++ ++ ++ Play (embedded) ++ Jogar (embutido) ++ ++ ++ ++ About Qt ++ Sobre o Qt ++ ++ ++ ++ Check states of tagged ROMs ++ Verifica a condição das ROMs etiquetadas ++ ++ ++ ++ Recreate template map ++ Recria o modelo do mapa ++ ++ ++ ++ Check template map ++ Verifica o mapa do modelo ++ ++ ++ ++ ++ Stop processing / exit QMC2 ++ Para o processamento / encerrar o QMC2 ++ ++ ++ ++ Clear YouTube cache ++ Limpa o cache do YouTube ++ ++ ++ ++ Toggle ROM state C ++ Mostra/esconde a condição da ROM C ++ ++ ++ ++ Toggle ROM state M ++ Mostra/esconde a condição da ROM M ++ ++ ++ ++ Toggle ROM state I ++ Mostra/esconde a condição da ROM I ++ ++ ++ ++ Toggle ROM state N ++ Mostra/esconde a condição da ROM N ++ ++ ++ ++ Toggle ROM state U ++ Mostra/esconde a condição da ROM D ++ ++ ++ ++ Tag current set ++ Etiqueta o conjunto atual ++ ++ ++ ++ Untag current set ++ Remove a etiqueta do conjunto atual ++ ++ ++ ++ Toggle tag mark ++ Alterna a marca da etiqueta ++ ++ ++ ++ Toggle tag / cursor down ++ Alterna a etiqueta / cursor para baixo ++ ++ ++ ++ Toggle tag / cursor up ++ Alterna a etiqueta / cursor para cima ++ ++ ++ ++ Tag all sets ++ Etiqueta todos os conjuntos ++ ++ ++ ++ Untag all sets ++ Remove a etiqueta de todos os conjuntos ++ ++ ++ ++ Invert all tags ++ Inverte todas as etiquetas ++ ++ ++ ++ Tag visible sets ++ Etiqueta os conjuntos visíveis ++ ++ ++ ++ Untag visible sets ++ Remove a etiqueta dos conjuntos visíveis ++ ++ ++ ++ Invert visible tags ++ Inverte as etiquetas visíveis ++ ++ ++ ++ Hierarchical view ++ Visualização hierárquica ++ ++ ++ ++ Custom view ++ Visualização personalizada ++ ++ ++ ++ Run external ROM tool ++ Executa a ferramenta da ROM externa ++ ++ ++ ++ Run ROM tool for tagged sets ++ Executa a ferramenta da ROM para os conjuntos etiquetados ++ ++ ++ ++ Check software-states ++ Verifica a condição do programa ++ ++ ++ ++ Toggle full screen ++ Alterna para tela cheia ++ ++ ++ ++ Software-list view-mode flat ++ Modo plano da visualização da lista de programa ++ ++ ++ ++ Software-list view-mode tree ++ Modo árvore da visualização da lista de programa ++ ++ ++ ++ Previous track (audio player) ++ Faixa anterior (reprodutor de música) ++ ++ ++ ++ Next track (audio player) ++ Próxima faixa (reprodutor de música) ++ ++ ++ ++ Fast backward (audio player) ++ Retrocesso rápido (reprodutor de música) ++ ++ ++ ++ Fast forward (audio player) ++ Avanço rápido (reprodutor de música) ++ ++ ++ ++ Stop track (audio player) ++ Para a faixa (reprodutor de música) ++ ++ ++ ++ Pause track (audio player) ++ Pausa a faixa (reprodutor de música) ++ ++ ++ ++ Play track (audio player) ++ Reproduz a faixa (reprodutor de música) ++ ++ ++ ++ Raise volume (audio player) ++ Aumenta o volume (reprodutor de música) ++ ++ ++ ++ Lower volume (audio player) ++ Reduz o volume (reprodutor de música) ++ ++ ++ ++ Increase rank ++ Aumenta a classificação ++ ++ ++ ++ Decrease rank ++ Reduz a classificação ++ ++ ++ ++ Plus (+) ++ Mais (+) ++ ++ ++ ++ Minus (-) ++ Menos (-) ++ ++ ++ ++ Cursor down ++ Cursor para baixo ++ ++ ++ ++ End ++ End ++ ++ ++ ++ Escape ++ Escape ++ ++ ++ ++ Cursor left ++ Cursor para esquerda ++ ++ ++ ++ Home ++ Home ++ ++ ++ ++ Page down ++ Page down ++ ++ ++ ++ Page up ++ Page up ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ use semicolon (;) to separate multiple folders ++ use o ponto e vírgula (;) para separar as diversas pastas ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ use semicolon (;) to separate multiple files ++ use o ponto e vírgula (;) para separar os diversos arquivos ++ ++ ++ ++ An open machine-specific emulator configuration has been detected. ++Use local machine-settings, overwrite with global settings or don't apply? ++ Foi detectada uma configuração aberta da máquina do emulador. ++Utilize a configuração local da máquina, substituir com o valor global ou não aplicar? ++ ++ ++ ++ please reload machine list for some changes to take effect ++ recarregue a lista das máquinas para as alterações terem efeito ++ ++ ++ ++ sorting machine list by %1 in %2 order ++ ordenando a lista das máquinas por %1 na ordem %2 ++ ++ ++ ++ 7z error ++ erro do 7z ++ ++ ++ ++ ++ FATAL: can't open icon file %1 ++ FATAL: foi impossível abrir arquivo de ícone %1 ++ ++ ++ ++ libarchive error ++ erro do libarchive ++ ++ ++ ++ triggering automatic reload of machine list ++ ativando i recarregamento automático da lista das máquinas ++ ++ ++ ++ &Foreign emulators ++ &Emuladores estrangeiros ++ ++ ++ ++ ++ ++ Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view ++ Especifica os IDs estrangeiros pré-definidos para este emulador, executar a partir da lista de 'emuladores estrangeiros' ++ ++ ++ ++ ++ Choose icon for this foreign emulator (hold down for menu) ++ Escolha o ícone para esse emulador estrangeiro (mantenha pressionado para exibir o menu) ++ ++ ++ ++ ++ Default icon ++ Ícone padrão ++ ++ ++ ++ ++ No icon ++ Sem ícone ++ ++ ++ ++ N/A ++ N/A ++ ++ ++ ++ Choose XML cache database file ++ Escolhe o arquivo do banco de dados do cache XML ++ ++ ++ ++ This will remove <b>all</b> existing user data and recreate the database. ++Are you sure you want to do this? ++ Isso removerá <b>todos</b> os dados de usuário existentes e recriará o banco de dados. ++Tem certeza que deseja fazer isso? ++ ++ ++ ++ &Yes ++ &Sim ++ ++ ++ ++ &No ++ &Não ++ ++ ++ ++ Choose user data database file ++ Escolha o arquivo do banco de dados do usuário ++ ++ ++ ++ Choose 7-zip tool ++ Escolha a ferramenta 7-zip ++ ++ ++ ++ Choose machine list database file ++ Escolha o arquivo do banco de dados da lista das máquinas ++ ++ ++ ++ Choose software list cache database file ++ Escolha o arquivo do banco de dados do cache da lista de programa ++ ++ ++ ++ Choose dat-info database file ++ Escolha o arquivo do banco de dados de informações dat ++ ++ ++ ++ Choose MESS machine info DB ++ Escolha o BD de informações de máquinas do MESS ++ ++ ++ ++ Choose MAME emulator info DB ++ Escolha o BD de informações do emulador do MAME ++ ++ ++ ++ Choose MESS emulator info DB ++ Escolha o BD de informações do emulador do MESS ++ ++ ++ ++ Choose compressed preview file ++ Escolha o arquivo compactado de pré-visualização ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ZIP archives ++ Arquivos ZIP ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 7z archives ++ Arquivos 7z ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ All files ++ Todos os arquivos ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Supported archives ++ Arquivos compatíveis ++ ++ ++ ++ Choose compressed flyer file ++ Escolha o arquivo compactado do panfleto ++ ++ ++ ++ Choose compressed icon file ++ Escolha o arquivo compactado do ícone ++ ++ ++ ++ Choose compressed cabinet file ++ Escolha o arquivo compactado dos gabinetes ++ ++ ++ ++ Choose compressed controller file ++ Escolha o arquivo compactado dos controles ++ ++ ++ ++ Choose compressed marquee file ++ Escolha o arquivo compactado das marquises ++ ++ ++ ++ Choose compressed title file ++ Escolha o arquivo compactado dos títulos ++ ++ ++ ++ Choose compressed PCB file ++ Escolha o arquivo compactado da PCI ++ ++ ++ ++ Choose compressed software snap file ++ Escolha o arquivo compactado da captura de tela do programa ++ ++ ++ ++ Choose video snap folder ++ Escolha a pasta para as capturas de vídeo ++ ++ ++ ++ Choose system manual folder ++ Escolha manual da pasta do sistema ++ ++ ++ ++ Choose software manual folder ++ Escolha manual das pastas do programa ++ ++ ++ ++ Choose image file ++ Escolha o arquivo de imagem ++ ++ ++ ++ Supported image files (%1) ++ Arquivos de imagem compatíveis (%1) ++ ++ ++ ++ ERROR: couldn't initialize SDL joystick support ++ ERRO: foi impossível inicializar suporte ao joysticks do SDL ++ ++ ++ ++ Enter key ++ Tecla enter ++ ++ ++ ++ Analyze current machine ++ Analisa a máquina atual ++ ++ ++ ++ Copy machine to favorites ++ Copia a máquina para os favoritos ++ ++ ++ ++ Reload machine list ++ Recarrega a lista das máquinas ++ ++ ++ ++ Check machine's ROM state ++ Verifica a condição das ROM da máquina ++ ++ ++ ++ Open ROMAlyzer (system mode) ++ Abre o ROMAlyzer (modo de sistema) ++ ++ ++ ++ Open ROMAlyzer (software mode) ++ Abre o ROMAlyzer (modo de programa) ++ ++ ++ ++ Rebuild current machine ++ Reconstruir a máquina atual ++ ++ ++ ++ Rebuild tagged machines ++ Reconstruir as máquinas etiquetadas ++ ++ ++ ++ Launch arcade mode ++ Inicia o modo arcade ++ ++ ++ ++ Return key ++ Tecla enter ++ ++ ++ ++ Cursor right ++ Cursor para à direita ++ ++ ++ ++ Tabulator ++ Tabulador ++ ++ ++ ++ Cursor up ++ Cursor para cima ++ ++ ++ ++ Activate item ++ Ativa o item ++ ++ ++ ++ WARNING: configuration is not writeable, please check access permissions for ++ AVISO: a configuração não pode ser escrita, verifique as permissões de acesso ++ ++ ++ ++ ++ Reset to default font ++ Restaura para a fonte padrão ++ ++ ++ ++ ++ No style sheet ++ Sem folha de estilo ++ ++ ++ ++ image cache size set to %1 MB ++ tamanho do cache de imagem definido para %1 MB ++ ++ ++ ++ ++ Confirm ++ Confirma ++ ++ ++ ++ &Local ++ &Local ++ ++ ++ ++ &Overwrite ++ &Sobrescrever ++ ++ ++ ++ Do&n't apply ++ &Não aplicar ++ ++ ++ ++ please restart QMC2 for some changes to take effect ++ reinicie o QMC2 para que algumas mudanças tenha efeito ++ ++ ++ ++ ascending ++ crescente ++ ++ ++ ++ descending ++ decrescente ++ ++ ++ ++ FATAL: can't open icon file, please check access permissions for %1 ++ FATAL: foi impossível abrir o arquivo do ícone, verifique as permissões de acesso para %1 ++ ++ ++ ++ ++ Preview file ++ Arquivo de pré-visualização ++ ++ ++ ++ ++ SW snap file ++ Arquivo de captura do programa ++ ++ ++ ++ ++ ++ Preview directory ++ Diretório de pré-visualização ++ ++ ++ ++ ++ Flyer file ++ Arquivo panfleto ++ ++ ++ ++ ++ ++ Flyer directory ++ Diretório para o panfleto ++ ++ ++ ++ ++ Icon file ++ Arquivo ícone ++ ++ ++ ++ ++ ++ Icon directory ++ Diretório para o ícone ++ ++ ++ ++ ++ Cabinet file ++ Arquivo gabinete ++ ++ ++ ++ ++ ++ Cabinet directory ++ Diretório para o gabinete ++ ++ ++ ++ ++ Controller file ++ Arquivo controle ++ ++ ++ ++ ++ ++ Controller directory ++ Diretório do controle ++ ++ ++ ++ ++ Marquee file ++ Arquivo marquise ++ ++ ++ ++ ++ ++ Marquee directory ++ Diretório das marquises ++ ++ ++ ++ ++ Title file ++ Arquivo título ++ ++ ++ ++ ++ ++ Title directory ++ Diretório do título ++ ++ ++ ++ ++ PCB file ++ Arquivo PCI ++ ++ ++ ++ ++ ++ PCB directory ++ Diretório para a PCI ++ ++ ++ ++ Choose Qt style sheet file ++ Escolha o arquivo de estilo do Qt ++ ++ ++ ++ Qt Style Sheets (*.qss) ++ Estilos do Qt (*.qss) ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose preview directory ++ Escolha a pasta para pré-visualização ++ ++ ++ ++ Choose flyer directory ++ Escolha a pasta para panfleto ++ ++ ++ ++ Choose icon directory ++ Escolha a pasta para ícones ++ ++ ++ ++ Choose cabinet directory ++ Escolha a pasta para gabinetes ++ ++ ++ ++ Choose controller directory ++ Escolha a pasta para controles ++ ++ ++ ++ Choose marquee directory ++ Escolha a pasta para marquise ++ ++ ++ ++ Choose title directory ++ Escolha a pasta para títulos ++ ++ ++ ++ Choose PCB directory ++ Escolha a pasta para PCI ++ ++ ++ ++ Choose options template file ++ Escolha o arquivo modelo para as opções ++ ++ ++ ++ ++ Choose emulator executable file ++ Escolha o arquivo executável do emulador ++ ++ ++ ++ Choose emulator log file ++ Escolha o arquivo de registro do emulador ++ ++ ++ ++ Choose zip tool ++ Escolha a ferramenta zip ++ ++ ++ ++ Choose ROM tool ++ Escolha a ferramenta para a ROM ++ ++ ++ ++ Choose play history file ++ Escolha o arquivo do histórico de jogos ++ ++ ++ ++ Choose ROM state cache file ++ Escolha o arquivo do cache da condição das ROMs ++ ++ ++ ++ ++ ++ Choose working directory ++ Escolha o diretório de trabalho ++ ++ ++ ++ Minimize when launching (non-embedded) emulators? ++ Minimizar ao lançar os emuladores (não embutidos)? ++ ++ ++ ++ Check images and icons ++ Verifica as imagens e os ícones ++ ++ ++ ++ Clear ProjectMESS cache ++ Limpa o cache do ProjectMESS ++ ++ ++ ++ Full detail view ++ Visualização detalhada ++ ++ ++ ++ ++ ++ ++ Category view ++ Visualização por categoria ++ ++ ++ ++ ++ ++ ++ Version view ++ Visualização por versão ++ ++ ++ ++ ++ ++ Custom IDs... ++ IDs personalizados... ++ ++ ++ ++ Choose cookie database file ++ Escolha o arquivo do banco de dados dos cookies ++ ++ ++ ++ Choose machine favorites file ++ Escolha o arquivo de favoritos das máquinas ++ ++ ++ ++ Choose machine list cache file ++ Escolha o arquivo do cache da lista das máquinas ++ ++ ++ ++ Choose software state cache directory ++ Escolha o diretório do cache da condição do programa ++ ++ ++ ++ Choose general software folder ++ Escolha a pasta geral do programa ++ ++ ++ ++ Choose front end log file ++ Escolha o arquivo de registro do frontend ++ ++ ++ ++ Choose data directory ++ Escolha a pasta para os dados ++ ++ ++ ++ Choose MAME machine info DB ++ Escolha o BD das informações das máquinas do MAME ++ ++ ++ ++ Choose software info DB ++ Escolha o BD das informação do programa ++ ++ ++ ++ Choose catver.ini file ++ Escolha o arquivo catver.ini ++ ++ ++ ++ Choose category.ini file ++ Escolha o arquivo category.ini ++ ++ ++ ++ Choose software snap directory ++ Escolha diretório para a captura do programa ++ ++ ++ ++ Choose software notes folder ++ Escolha o diretório das notas do programa ++ ++ ++ ++ Choose software notes template ++ Escolha o modelo das notas do programa ++ ++ ++ ++ ++ HTML files (*.html *.htm) ++ Arquivos HTML (*.html *.htm) ++ ++ ++ ++ Choose system notes folder ++ Escolha o diretório das notas do sistema ++ ++ ++ ++ Choose system notes template ++ Escolha o modelo das notas do sistema ++ ++ ++ ++ shortcut map is clean ++ o mapa dos atalhos está limpo ++ ++ ++ ++ WARNING: shortcut map contains duplicates ++ AVISO: o mapa dos atalhos contém itens duplicados ++ ++ ++ ++ ++ ++ ++ ++ No joysticks found ++ Nenhum joystick foi encontrado ++ ++ ++ ++ joystick map is clean ++ o mapa do joystick está limpo ++ ++ ++ ++ WARNING: joystick map contains duplicates ++ AVISO: o mapa do joystick contém itens duplicados ++ ++ ++ ++ Options ++ Opções ++ ++ ++ ++ &Front end ++ &Front end ++ ++ ++ ++ &GUI ++ &Interface ++ ++ ++ ++ Language ++ Idioma ++ ++ ++ ++ Application language ++ Idioma do aplicativo ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Scale image to fit frame size (otherwise use original size) ++ Dimensiona a imagem para ocupar todo o quadro (senão, use tamanho original) ++ ++ ++ ++ Scaled preview ++ Pré-visualização dimensionado ++ ++ ++ ++ Scaled cabinet ++ Gabinete dimensionado ++ ++ ++ ++ Scaled controller ++ Controle dimensionado ++ ++ ++ ++ Scaled marquee ++ Marquise dimensionada ++ ++ ++ ++ ++ Show status bar ++ Mostra a barra de condição ++ ++ ++ ++ ++ Show tool bar ++ Mostra a barra das ferramentas ++ ++ ++ ++ Show the menu bar ++ Mostra a barra dos menus ++ ++ ++ ++ Show menu bar ++ Mostra barra do menu ++ ++ ++ ++ Show short description of current processing in progress bar ++ Mostra a descrição curta do processamento atual na barra de progresso ++ ++ ++ ++ Show progress texts ++ Mostra o texto do andamento ++ ++ ++ ++ Check for other instances of this QMC2 variant on startup ++ Verifica através das outras instâncias das variações do QMC2 ao iniciar ++ ++ ++ ++ Check single instance ++ Verifique a instância única ++ ++ ++ ++ ++ Only when required ++ Somente quando for requerido ++ ++ ++ ++ ++ Option requires a restart of QMC2 to take effect ++ A opção precisa que o QMC2 seja reiniciado para surtir efeito ++ ++ ++ ++ restart required ++ precisa reiniciar ++ ++ ++ ++ ++ ++ reload required ++ precisa recarregar ++ ++ ++ ++ Scaled title ++ Título dimensionado ++ ++ ++ ++ Scaled flyer ++ Panfleto dimensionado ++ ++ ++ ++ Application font (= system default if empty) ++ Fonte do aplicativo ( = padrão do sistema se vazio) ++ ++ ++ ++ Browse application font ++ Procurar pela fonte do aplicativo ++ ++ ++ ++ Scaled PCB ++ PCI dimensionado ++ ++ ++ ++ Emulator log size ++ Tamanho do registro do emulador ++ ++ ++ ++ Maximum number of lines to keep in emulator log browser ++ Quantidade máxima de linhas para manter no navegador de registro do emulador ++ ++ ++ ++ ++ unlimited ++ ilimitado ++ ++ ++ ++ ++ lines ++ linhas ++ ++ ++ ++ Front end log size ++ Tamanho do registro do frontend ++ ++ ++ ++ Maximum number of lines to keep in front end log browser ++ Quantidade máxima das linhas para manter no navegador de registro do frontend ++ ++ ++ ++ Application font ++ Fonte do aplicativo ++ ++ ++ ++ Style sheet ++ Estilo ++ ++ ++ ++ Qt style sheet file (*.qss, leave empty for no style sheet) ++ Arquivo de estilo do Qt (*.qss, deixe em branco para nenhum estilo) ++ ++ ++ ++ Browse Qt style sheet file ++ Procura pelo arquivo de estilo do Qt ++ ++ ++ ++ GUI style ++ Estilo da interface ++ ++ ++ ++ Application style (Default = use system's default style) ++ Estilo da aplicação (Padrão = usar o estilo padrão do sistema) ++ ++ ++ ++ Smooth image scaling (nicer, but slower) ++ Dimensionamento suave da imagem (melhor, porém, mais lento) ++ ++ ++ ++ Smooth scaling ++ Dimensionar suavemente ++ ++ ++ ++ Retry loading images which weren't found before? ++ Tentar carregar as imagens que não foram encontradas antes? ++ ++ ++ ++ Retry loading images ++ Tenta carregar as imagens não encontradas ++ ++ ++ ++ Image cache size ++ Tamanho do cache das imagens ++ ++ ++ ++ Image cache size in MB ++ Tamanho do cache das imagens em MB ++ ++ ++ ++ MB ++ MB ++ ++ ++ ++ Use standard or custom color palette? ++ Usar a paleta de cores padrão ou personalizada? ++ ++ ++ ++ Log font ++ Fonte do registro ++ ++ ++ ++ Font used in logs (= application font if empty) ++ Fonte usada nos registros (= fonte padrão se vazio) ++ ++ ++ ++ Browse font used in logs ++ Procura a fonte usada nos registros ++ ++ ++ ++ ++ F&iles / Directories ++ &Arquivos / diretórios ++ ++ ++ ++ Front end log file ++ Arquivo de registro do frontend ++ ++ ++ ++ Front end log file (write) ++ Arquivo de registro do frontend (escrita) ++ ++ ++ ++ Browse front end log file ++ Procura pelo arquivo de registro do frontend ++ ++ ++ ++ Favorites file ++ Arquivo de favoritos ++ ++ ++ ++ Play history file ++ Arquivo do histórico dos já jogados ++ ++ ++ ++ Play history file (write) ++ Arquivo do histórico dos já jogados (escrita) ++ ++ ++ ++ Browse play history file ++ Procurar pelo arquivo do histórico dos já jogados ++ ++ ++ ++ Data directory ++ Diretório de dados ++ ++ ++ ++ Frontend data directory (read) ++ Diretório de dados do frontend (leitura) ++ ++ ++ ++ Browse frontend data directory ++ Procura pelo diretório de dados do frontend ++ ++ ++ ++ Preview directory (read) ++ Diretório de pré-visualização (leitura) ++ ++ ++ ++ Browse preview directory ++ Procura pelo diretório de pré-visualização ++ ++ ++ ++ Flyer directory (read) ++ Diretório do panfleto (leitura) ++ ++ ++ ++ Browse flyer directory ++ Procura pelo diretório de panfleto ++ ++ ++ ++ Icon directory (read) ++ Diretório dos ícones (leitura) ++ ++ ++ ++ Browse icon directory ++ Procura pelo diretório dos ícones ++ ++ ++ ++ Cabinet directory (read) ++ Diretório dos gabinetes (leitura) ++ ++ ++ ++ Browse cabinet directory ++ Procura pelo diretório dos gabinetes ++ ++ ++ ++ Controller directory (read) ++ Diretório do controle (leitura) ++ ++ ++ ++ Browse controller directory ++ Procura pelo diretório dos controles ++ ++ ++ ++ Marquee directory (read) ++ Diretório da marquise (leitura) ++ ++ ++ ++ Browse marquee directory ++ Procura pelo diretório das marquises ++ ++ ++ ++ Title directory (read) ++ Diretório dos títulos (leitura) ++ ++ ++ ++ Browse title directory ++ Procura pelo diretório dos títulos ++ ++ ++ ++ PCB directory (read) ++ Diretório da PCI (leitura) ++ ++ ++ ++ Browse PCB directory ++ Procura pelo diretório da PCI ++ ++ ++ ++ Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist ++ Ativa o uso do arquivo catver.ini -- obtenha a versão mais nova em https://www.progettosnaps.net/catver/ ++ ++ ++ ++ Use catver.ini ++ Usar o catver.ini ++ ++ ++ ++ Path to catver.ini (read) ++ Caminho para o catver.ini (leitura) ++ ++ ++ ++ Browse path to catver.ini ++ Procura pelo caminho para o catver.ini ++ ++ ++ ++ ++ ++ SW snap folder ++ Arquivo de captura do programa ++ ++ ++ ++ Software snap-shot directory (read) ++ Diretório de captura do programa (leitura) ++ ++ ++ ++ Browse software snap-shot directory ++ Procura pelo diretório de captura do programa ++ ++ ++ ++ ROM state filter ++ Filtro da condição da ROM ++ ++ ++ ++ Show ROM state C (correct)? ++ Mostra a ROM com estado C (correto)? ++ ++ ++ ++ Show ROM state M (mostly correct)? ++ Mostra a ROM com estado M (Maioria correto)? ++ ++ ++ ++ Show ROM state I (incorrect)? ++ Mostra a ROM com estado I (incorreto)? ++ ++ ++ ++ Show ROM state N (not found)? ++ Mostra a ROM com estado N (não encontrado)? ++ ++ ++ ++ Show ROM state U (unknown)? ++ Mostra a ROM com estado D (desconhecido)? ++ ++ ++ ++ Sort criteria ++ Critério de ordenação ++ ++ ++ ++ Select sort criteria ++ Selecione um critério de ordenação ++ ++ ++ ++ ROM state ++ Condição da ROM ++ ++ ++ ++ Year ++ Ano ++ ++ ++ ++ Manufacturer ++ Fabricante ++ ++ ++ ++ ROM types ++ Tipo das ROMs ++ ++ ++ ++ Players ++ Jogadores ++ ++ ++ ++ Sort order ++ Ordem de classificação ++ ++ ++ ++ Select sort order ++ Selecione a ordem de classificação ++ ++ ++ ++ Ascending ++ Ascendente ++ ++ ++ ++ Descending ++ Descendente ++ ++ ++ ++ Responsiveness ++ Disponibilidade ++ ++ ++ ++ immediate ++ imediata ++ ++ ++ ++ Update delay ++ Atraso de atualização ++ ++ ++ ++ none ++ nenhum ++ ++ ++ ++ ms ++ ms ++ ++ ++ ++ Automatically trigger a ROM check if necessary ++ Verifica a ROM automaticamente caso seja necessário ++ ++ ++ ++ Auto-trigger ROM check ++ Verifica a ROM automaticamente ++ ++ ++ ++ Display ROM status icons in master lists? ++ Mostrar os ícones da condição da ROM nas listas principais? ++ ++ ++ ++ Show ROM status icons ++ Mostrar os ícones da condição da ROM ++ ++ ++ ++ Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) ++ Diretório utilizado como o diretório padrão do programa para o configurador de dispositivos do MESS (caso um subdiretório com o mesmo nome da máquina exista, essa pasta será selecionada no lugar) ++ ++ ++ ++ Launch emulation on double-click events (may be annoying) ++ Inicia o emulador com um clique duplo (pode ser estranho) ++ ++ ++ ++ Double-click activation ++ Ativação por clique duplo ++ ++ ++ ++ Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) ++ Inicia a emulação diretamente quando um item for ativado na lista de busca, nos favoritos ou nos já jogados (em vez de pular para a lista principal) ++ ++ ++ ++ Play on sub-list activation ++ Jogar com ativação na sub-lista ++ ++ ++ ++ Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) ++ Escolhe a posição do cursor que será usado pelo QMC2 quando fizer a rolagem automática para o item atual (essa configuração se aplica a todas as visões e as listas!) ++ ++ ++ ++ Visible ++ Visível ++ ++ ++ ++ Top ++ Acima ++ ++ ++ ++ Bottom ++ Abaixo ++ ++ ++ ++ Center ++ Centro ++ ++ ++ ++ Cursor position ++ Posição do cursor ++ ++ ++ ++ SW snap position ++ Posição da captura do programa ++ ++ ++ ++ Above / Left ++ Acima / Esquerda ++ ++ ++ ++ Use native file dialogs ++ Usa as janelas dos arquivos nativos ++ ++ ++ ++ Kill emulators when QMC2 exits? ++ Matar os emuladores quando o QMC2 for encerrado? ++ ++ ++ ++ Kill emulators on exit ++ Mata os emuladores ao encerrar ++ ++ ++ ++ Terminate all other emulator instances when launching a new one? ++ Encerrar todas as outras instâncias do emulador quando executar uma nova? ++ ++ ++ ++ One emulator at a time ++ Um emulador por vez ++ ++ ++ ++ Load MESS machine information database (sysinfo.dat) ++ Carrega a informação do banco de dados das máquinas do MESS (sysinfo.dat) ++ ++ ++ ++ MESS machine information database - sysinfo.dat (read) ++ Base de informação de dados das máquinas do MESS -- sysinfo.dat (leitura) ++ ++ ++ ++ Browse MESS machine information database (sysinfo.dat) ++ Procura pela informação na base da dados pelas máquinas do MESS (sysinfo.dat) ++ ++ ++ ++ Import MESS emulator information to DAT-info database ++ Importa a informação do emulador MESS para o banco de dados DAT ++ ++ ++ ++ Import MAME emulator information to DAT-info database ++ Importa a informação do emulador MAME para o banco de dados DAT ++ ++ ++ ++ Import MESS machine information to DAT-info database ++ Importa a informação da máquina do MESS para o banco de dados DAT ++ ++ ++ ++ DAT-info database file ++ Arquivo de informação do banco de dados DAT ++ ++ ++ ++ Browse DAT-info database file ++ Procura pelo arquivo do banco de dados DAT ++ ++ ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) ++ ++ ++ ++ ++ pt_BR (Brazilian Portuguese) ++ ++ ++ ++ ++ ro (Romanian) ++ ++ ++ ++ ++ sv (Swedish) ++ ++ ++ ++ ++ us (American English) ++ ++ ++ ++ ++ DAT-info database file (write) ++ Arquivo de informação do banco de dados DAT (escrita) ++ ++ ++ ++ Machine info (MESS) ++ Informação da máquina (MESS) ++ ++ ++ ++ Emu info (MAME) ++ Informação do emulador (MAME) ++ ++ ++ ++ Emu info (MESS) ++ Informação do emulador (MESS) ++ ++ ++ ++ Software info ++ Informação do programa ++ ++ ++ ++ Import software information to DAT-info database ++ Importa a informação do programa para o banco de dados DAT ++ ++ ++ ++ Above / Center ++ Acima / Centro ++ ++ ++ ++ Above / Right ++ Acima / Direita ++ ++ ++ ++ Below / Left ++ Abaixo / Esquerda ++ ++ ++ ++ Below / Center ++ Abaixo / Centro ++ ++ ++ ++ Below / Right ++ Abaixo / Direita ++ ++ ++ ++ &Shortcuts / Keys ++ Atalho&s / Teclas ++ ++ ++ ++ ++ Redefine key sequence ++ Redefine a sequência das teclas ++ ++ ++ ++ Reset key sequence to default ++ Redefine a sequência das teclas para o padrão ++ ++ ++ ++ Reset ++ Redefinir ++ ++ ++ ++ Active shortcut definitions; double-click to redefine key sequence ++ Definições ativas dos atalhos: faça um clique duplo para redefinir a sequência das teclas ++ ++ ++ ++ ++ Function / Key ++ Função / Tecla ++ ++ ++ ++ ROM tool ++ Ferramenta de ROM ++ ++ ++ ++ External ROM tool (it's completely up to you...) ++ Ferramenta externa da ROM externa (a decisão é toda sua...) ++ ++ ++ ++ Browse ROM tool ++ Procura pela ferramenta da ROM ++ ++ ++ ++ ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") ++ Lista de argumentos da ferramenta da ROM (i. x. "$ID$ $DESCRIPTION$") ++ ++ ++ ++ Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) ++ O diretório de trabalho usado quando a ferramenta da ROM for executada (se vazio, o diretório de trabalho atual do QMC2 será usado) ++ ++ ++ ++ Copy the tool's output to the front end log (keeping it for debugging) ++ Copia a saída da ferramenta para o registro do programa (mantenha para depuração) ++ ++ ++ ++ Copy tool output to front end log ++ Copia a saída da ferramenta para o registro do frontend ++ ++ ++ ++ Automatically close the tool-executor dialog when the external process finished ++ Fecha automaticamente a janela de execução da ferramenta quando o processo externo for encerrado ++ ++ ++ ++ Close dialog automatically ++ Fecha a janela automaticamente ++ ++ ++ ++ Restore cookies ++ Restaura os cookies ++ ++ ++ ++ Manage cookies stored in database ++ Gerencia o banco de dados dos cookies ++ ++ ++ ++ Manage stored cookies ++ Gerencia os cookies armazenados ++ ++ ++ ++ Clear database ++ Limpa o banco de dados ++ ++ ++ ++ ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Use a unifed tool- and title-bar on Mac OS X ++ Usa uma ferramenta unificada - e a barra de títulos no Mac OS X ++ ++ ++ ++ Unify with title ++ Unifica com um título ++ ++ ++ ++ Minimize when launching emulators? ++ Minimizar quando lançar os emuladores? ++ ++ ++ ++ Minimize on emulator launch ++ Minimiza ao iniciar o emulador ++ ++ ++ ++ Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions ++ Suprime todas as mensagens enviadas seja pela classe QDebug ou pelas funções qDebug() / qCritical() / qWarning() / qFatal() ++ ++ ++ ++ Suppress Qt messages ++ Suprime as mensagens do Qt ++ ++ ++ ++ Show splash screen when starting up? ++ Mostrar a tela inicial ao iniciar? ++ ++ ++ ++ Show splash screen ++ Mostra tela inicial ++ ++ ++ ++ Software notes folder ++ Pasta das notas do programa ++ ++ ++ ++ Folder used to store personal notes about any software titles (write) ++ Pasta usada para armazenar as notas pessoais sobre quaisquer títulos dos programas (escrita) ++ ++ ++ ++ Browse software notes folder ++ Procura pela pasta das notas do programa ++ ++ ++ ++ Tag ++ Etiqueta ++ ++ ++ ++ Driver status ++ Condição geral do controlador ++ ++ ++ ++ Select the position where sofware snap-shots are displayed within software lists ++ Selecione a posição onde as capturas do software são mostrados dentro da lista de programas ++ ++ ++ ++ Disable snaps ++ Desativa as capturas ++ ++ ++ ++ Display software snap-shots when hovering the software list with the mouse cursor ++ Mostra as capturas do programa quando o mouse passar pela lista de programa ++ ++ ++ ++ Enable ROM state filtering? ++ Ativar o filtro por condição da ROM? ++ ++ ++ ++ Customize the tool-bar ++ Personalizar a barra de ferramentas ++ ++ ++ ++ Tool-bar... ++ Barra de ferramentas... ++ ++ ++ ++ Force QMC2's working directory to be the same as the executable's path ++ Impõem que o diretório de trabalho do QMC2 seja o mesmo do caminho do executável ++ ++ ++ ++ Set working directory from executable ++ Define o diretório de trabalho a partir do executável ++ ++ ++ ++ Default palette ++ Paleta padrão ++ ++ ++ ++ Edit the color palette ++ Edite a paleta de cores ++ ++ ++ ++ Edit color palette... ++ Editar a paleta de cores... ++ ++ ++ ++ Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used ++ Usar as janelas nativas do próprio arquivo do sistema (nativos), caso contrário, as janelas nativas do Qt serão utilizadas ++ ++ ++ ++ Compressed cabinet file (read) ++ Arquivo compactado dos gabinetes (leitura) ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Select compression format ++ Escolha o formato de compressão ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ZIP ++ ZIP ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 7z ++ 7z ++ ++ ++ ++ Browse compressed cabinet file ++ Procura pelo arquivo compactado de gabinetes ++ ++ ++ ++ Compressed controller file (read) ++ Arquivo compactado dos controles (leitura) ++ ++ ++ ++ Browse compressed controller file ++ Procura pelo arquivo compactado dos controles ++ ++ ++ ++ Compressed marquee file (read) ++ Arquivo compactado das marquises (leitura) ++ ++ ++ ++ Browse compressed marquee file ++ Procura pelo arquivo compactado das marquises ++ ++ ++ ++ Switch between specifying a title directory or a compressed title file ++ Alternar entre especificar um diretório para os títulos ou um arquivo compactado com os títulos ++ ++ ++ ++ MAME emulator information database - mameinfo.dat (read) ++ Base de dados de informação do emulador do MAME - mameinfo.dat (leitura) ++ ++ ++ ++ Browse MAME emulator information database (mameinfo.dat) ++ Procura pela informação no banco de dados do emulador do MAME (mameinfo.dat) ++ ++ ++ ++ Switch between specifying a preview directory or a compressed preview file ++ Alternar entre especificar um diretório para as pré-visualizações ou um arquivo compactado com as pré-visualizações ++ ++ ++ ++ Compressed preview file (read) ++ Arquivo compactado das pré-visualizações (leitura) ++ ++ ++ ++ Browse compressed preview file ++ Procura pelo o arquivo compactado da pré-visualização ++ ++ ++ ++ Switch between specifying a flyer directory or a compressed flyer file ++ Alternar entre especificar um diretório para os panfletos ou um arquivo compactado com os panfletos ++ ++ ++ ++ Compressed flyer file (read) ++ Arquivo compactado dos panfletos (leitura) ++ ++ ++ ++ Browse compressed flyer file ++ Procura pelo arquivo compactado dos panfletos ++ ++ ++ ++ Switch between specifying an icon directory or a compressed icon file ++ Alterna entre especificar um diretório dos ícones ou um arquivo compactado com os ícones ++ ++ ++ ++ Compressed icon file (read) ++ Arquivo compactado dos ícones (leitura) ++ ++ ++ ++ Browse compressed icon file ++ Procura pelo arquivo compactado dos ícones ++ ++ ++ ++ Switch between specifying a cabinet directory or a compressed cabinet file ++ Alterna entre especificar um diretório dos gabinetes ou um arquivo compactado com os gabinetes ++ ++ ++ ++ Switch between specifying a controller directory or a compressed controller file ++ Alterna entre especificar um diretório dos controles ou um arquivo compactado com os controles ++ ++ ++ ++ Switch between specifying a marquee directory or a compressed marquee file ++ Alterna entre especificar um diretório das marquises ou um arquivo compactado com as marquises ++ ++ ++ ++ Compressed title file (read) ++ Arquivo compactado dos títulos (leitura) ++ ++ ++ ++ Browse compressed title file ++ Procura pelo arquivo compactado dos títulos ++ ++ ++ ++ Switch between specifying a PCB directory or a compressed PCB file ++ Alterna entre especificar um diretório da PCI ou um arquivo compactado da PCI ++ ++ ++ ++ Compressed PCB file (read) ++ Arquivo compactado da PCI (leitura) ++ ++ ++ ++ Browse compressed PCB file ++ Procurar pelo arquivo compactado da PCI ++ ++ ++ ++ Compressed software snap-shot file (read) ++ Arquivo compactado das capturas do programa (leitura) ++ ++ ++ ++ Browse compressed software snap-shot file ++ Procurar pelo arquivo compactado de captura do programa ++ ++ ++ ++ Load MAME emulator information database (mameinfo.dat) ++ Carregar as informações do banco de dados do MAME (mameinfo.dat) ++ ++ ++ ++ Switch between specifying a software snap directory or a compressed software snap file ++ Alterna entre especificar um diretório de captura do programa ou um arquivo compactado da captura do programa ++ ++ ++ ++ Enable the use of a template for (empty) software notes ++ Ativa o uso de um modelo para as notas do programa (vazias) ++ ++ ++ ++ Software notes template ++ Modelo das notas do programa ++ ++ ++ ++ HTML file used as a template for software-notes (read) ++ Arquivo HTML usado como modelo para as notas do programa (leitura) ++ ++ ++ ++ Browse software notes template ++ Procura pelo modelo das notas do programa ++ ++ ++ ++ Enable the use of category.ini ++ Ativa o uso do arquivo category.ini ++ ++ ++ ++ Use category.ini ++ Usa o category.ini ++ ++ ++ ++ Path to category.ini (read) ++ Caminho para o category.ini (leitura) ++ ++ ++ ++ Browse path to category.ini ++ Procura pelo caminho do category.ini ++ ++ ++ ++ System notes folder ++ Pasta das notas do programa ++ ++ ++ ++ Enable the use of a template for (empty) system notes ++ Ativa o uso de um modelo para as notas (vazias) do sistema ++ ++ ++ ++ System notes template ++ Modelo das notas do sistema ++ ++ ++ ++ HTML file used as a template for system-notes (read) ++ Arquivo HTML usado como modelo para as notas do sistema (leitura) ++ ++ ++ ++ Folder used to store personal notes about any systems (write) ++ Pasta usada para armazenar as notas pessoais sobre quaisquer sistemas (escrita) ++ ++ ++ ++ Browse system notes folder ++ Procura pela pasta das notas do sistema ++ ++ ++ ++ Browse system notes template ++ Procura pelo modelo das notas do sistema ++ ++ ++ ++ Load software information database (from history.dat) ++ Carrega a informação do banco de dados do programa (de history.dat) ++ ++ ++ ++ Software information database - history.dat (read) ++ Informações do banco de dados do programa - history.dat (leitura) ++ ++ ++ ++ Browse software information database (history.dat) ++ Procurar pelas informações no banco de dados do programa (history.dat) ++ ++ ++ ++ Define additional artwork classes for systems and software-list entries ++ Define as classes das ilustrações adicionais para as entradas das listas do sistema e do programa ++ ++ ++ ++ Set up additional artwork classes... ++ Configura as classes adicionais da ilustração... ++ ++ ++ ++ Choose active image formats and their priorities (per artwork class) ++ Escolhe os formatos ativos da imagem e as suas prioridades (pela classe da ilustração) ++ ++ ++ ++ Select image formats... ++ Seleciona os formatos da imagem... ++ ++ ++ ++ Load MESS emulator information database (messinfo.dat) ++ Carregar as informações do banco de dados do MESS (messinfo.dat) ++ ++ ++ ++ MESS emulator information database - messinfo.dat (read) ++ Informação do banco de dados do MESS - messinfo.dat (leitura) ++ ++ ++ ++ Show machine's description at the bottom of any images ++ Mostra a descrição da máquina abaixo de quaisquer imagens ++ ++ ++ ++ Show machine name ++ Mostra o nome da máquina ++ ++ ++ ++ Show machine's description only when the machine list is not visible due to the current layout ++ Mostra a descrição da máquina somente quando a lista das máquinas não estiver visível devido ao layout atual ++ ++ ++ ++ Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent ++ Mostra a imagem / vídeo dos principais caso uma imagem / vídeo individual esteja faltando, mas, existe uma para um principal ++ ++ ++ ++ Parent image / video fallback ++ Usa a imagem / vídeo reserva ++ ++ ++ ++ Open the component setup dialog ++ Abre uma janela de configuração do componente ++ ++ ++ ++ Component setup... ++ Configuração do componente... ++ ++ ++ ++ Show the machine status indicator only when the machine list is not visible due to the current layout ++ Mostra o indicador da condição da máquina apenas quando a lista das máquinas não estiver visível devido ao layout atual ++ ++ ++ ++ Restore saved machine selection at start and after reloading the machine list ++ Restaura a seleção das máquinas ao iniciar e antes de recarregar a lista das máquinas ++ ++ ++ ++ Restore machine selection ++ Restaura a seleção das máquinas ++ ++ ++ ++ Show vertical machine status indicator in machine details ++ Mostra o indicador vertical da condição da máquina nos detalhes da máquina ++ ++ ++ ++ Machine status indicator ++ Indicador da condição geral da máquina ++ ++ ++ ++ Save machine selection on exit and before reloading the machine list ++ Salva a seleção das máquinas ao encerrar e antes de recarregar a lista das máquinas ++ ++ ++ ++ Save machine selection ++ Salva a seleção das máquinas ++ ++ ++ ++ Show animation when loading, filtering or tagging the machine list? ++ Mostra as animações ao carregar, ao filtrar ou ao etiquetar a lista das máquinas? ++ ++ ++ ++ Show loading animation ++ Mostra animação de carregamento ++ ++ ++ ++ Scaled software snapshot ++ Escala da captura do programa ++ ++ ++ ++ Select individual fallback settings per artwork class ++ Selecione as configurações individuais de reserva pela classe da ilustração ++ ++ ++ ++ Individual fallback settings... ++ Configurações individuais da reserva... ++ ++ ++ ++ Import MAME machine information to DAT-info database ++ Importa a informação do emulador MAME para o banco de dados DAT ++ ++ ++ ++ Browse machine favorites file ++ Procurar pelo arquivo de favoritos das máquinas ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Archive ++ Arquivo ++ ++ ++ ++ MAME machine information database - history.dat (read) ++ Base da dados de informação de máquinas do MAME -- history.dat (leitura) ++ ++ ++ ++ Browse MESS emulator information database (messinfo.dat) ++ Procura pela informação no banco de dados do MESS (messinfo.dat) ++ ++ ++ ++ ++ ++ ++ ++ ++ Option requires a reload of the machine list to take effect ++ A opção precisa que a lista das máquinas seja reiniciado para surtir efeito ++ ++ ++ ++ Machine favorites file (write) ++ Arquivo de favoritos das máquinas (escrita) ++ ++ ++ ++ Load MAME machine information database (history.dat) ++ Carrega as informações do banco de dados das máquinas do MAME (history.dat) ++ ++ ++ ++ Machine info (MAME) ++ Informação da máquina (MAME) ++ ++ ++ ++ Browse MAME machine information database (history.dat) ++ Procura pela informação no banco de dados das máquinas do MAME(history.dat) ++ ++ ++ ++ Video snap folder ++ Diretório para a captura de vídeo ++ ++ ++ ++ Video snap folder (read) ++ Diretório para a captura de vídeo (leitura) ++ ++ ++ ++ Browse video snap folder ++ Escolha a pasta para a capturas de vídeo ++ ++ ++ ++ Optimize catver.ini for faster loading ++ Otimiza o catver.ini para um carregamento mais rápido ++ ++ ++ ++ Setup the icon cache database ++ Configura o banco de dados do cache dos ícones ++ ++ ++ ++ Automatically disable SW snaps when software-detail is visible (may be annoying) ++ Desativa automaticamente as capturas de tela do programa quando os detalhes do software estiverem visíveis (pode incomodar) ++ ++ ++ ++ No SW snaps for visible details ++ Desativa as capturas do programa com detalhes visíveis ++ ++ ++ ++ Machine description ++ Descrição da máquina ++ ++ ++ ++ Machine name ++ Nome da máquina ++ ++ ++ ++ Source file ++ Arquivo fonte ++ ++ ++ ++ Rank ++ Classificação ++ ++ ++ ++ Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) ++ A quantidade dos itens inseridos entre as atualizações da lista das máquinas durante o recarregamento (maior significa mais rápido, mas torna a interface menos disponível) ++ ++ ++ ++ Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list ++ Selecione o modo padrão de execução (janela independente ou embutida) usada quando o emulador for iniciado ao ativar uma entrada em qualquer lista ++ ++ ++ ++ independent ++ independente ++ ++ ++ ++ embedded ++ embutido ++ ++ ++ ++ Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? ++ Atrasa a atualização dos detalhes das máquinas (pré-visualização, panfleto, informações, configurações, ...) por quantos milissegundos? ++ ++ ++ ++ Default launch-mode ++ Modo de execução padrão ++ ++ ++ ++ Display (or hide) device sets in master lists? ++ Mostra (ou esconde) os conjuntos dos dispositivos nas listas principais? ++ ++ ++ ++ Show device sets ++ Mostra os conjuntos dos dispositivos ++ ++ ++ ++ Display (or hide) BIOS sets in master lists? ++ Mostra (ou esconde) os conjuntos das BIOS nas listas principais? ++ ++ ++ ++ Browse system manual folder ++ Navega pela pasta do manual do sistema ++ ++ ++ ++ System manual folder (read) ++ Pasta do manual do sistema (leitura) ++ ++ ++ ++ Software manual folder (read) ++ Pasta do manual do programa (leitura) ++ ++ ++ ++ Browse software manual folder ++ Navega pela pasta do manual do programa ++ ++ ++ ++ System manual folder ++ Pasta do manual do sistema ++ ++ ++ ++ Software manual folder ++ Pasta do manual do programa ++ ++ ++ ++ Scan available software manuals ++ Examina a disponibilidade dos manuas do programa ++ ++ ++ ++ Scan available system manuals ++ Examina a disponibilidade dos manuais do sistema ++ ++ ++ ++ Machine- / Software-&lists ++ Máquina- / &lista do programa ++ ++ ++ ++ Save the latest software selection (per system) ++ Salva a última seleção do programa (por sistema) ++ ++ ++ ++ Save software selection ++ Salva a seleção do programa ++ ++ ++ ++ Restore the latest software selection (per system) ++ Restaura o último programa selecionado (por sistema) ++ ++ ++ ++ Restore software selection ++ Restaura a seleção do programa ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Configurações comuns</span></p></body></html> ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Listas das máquinas</span></p></body></html> ++ ++ ++ ++ Show BIOS sets ++ Mostra os conjuntos das BIOS ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Lista dos programas</span></p></body></html> ++ ++ ++ ++ Software snaps on mouse hover ++ Mostra a imagem ao passar o mouse ++ ++ ++ ++ Apply the state filter dynamically during a full ROM audit? ++ Aplicar o filtro da condição de forma dinâmica durante a auditoria completa da ROM? ++ ++ ++ ++ Apply state filter dynamically when checking ROMs ++ Aplica a condição do filtro de forma dinâmica ao verificar as ROMs ++ ++ ++ ++ Custom ++ Personalizado ++ ++ ++ ++ &Joystick ++ &Joystick ++ ++ ++ ++ Enable GUI control via joystick ++ Ativar o controle da interface via joystick ++ ++ ++ ++ Enable joystick control ++ Ativa controle via joystick ++ ++ ++ ++ Rescan available joysticks ++ Re-examinar os joysticks disponíveis ++ ++ ++ ++ Rescan joysticks ++ Re-examinar os joysticks ++ ++ ++ ++ Select joystick ++ Seleciona o Joystick ++ ++ ++ ++ List of available joysticks - select the one you want to use for GUI control ++ Lista dos joysticks disponíveis - selecione aquele que você quer usar para controlar a interface ++ ++ ++ ++ Joystick information and settings ++ Informação e configuração do joystick ++ ++ ++ ++ Axes: ++ Eixos: ++ ++ ++ ++ Number of joystick axes ++ Quantidade de eixos do joystick ++ ++ ++ ++ ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ Buttons: ++ Botões: ++ ++ ++ ++ Number of joystick buttons ++ Quantidade dos botões do joystick ++ ++ ++ ++ Hats: ++ Hats: ++ ++ ++ ++ Number of coolie hats ++ Quantidade de coolie hats ++ ++ ++ ++ Trackballs: ++ Trackballs: ++ ++ ++ ++ Number of trackballs ++ Quantidade de trackballs ++ ++ ++ ++ Automatically repeat joystick functions after specified delay ++ Repita automaticamente as funções do joystick após um determinado atraso ++ ++ ++ ++ Auto repeat after ++ Repete automaticamente após ++ ++ ++ ++ Repeat all joystick functions after how many milliseconds? ++ Repetir todas as funções do joystick após quantos milissegundos? ++ ++ ++ ++ ++ ms ++ ms ++ ++ ++ ++ Event timeout ++ Tempo máximo do evento ++ ++ ++ ++ Process joystick events after how many milliseconds? ++ Processar os eventos do joystick após quantos milissegundos? ++ ++ ++ ++ Calibrate joystick axes ++ Calibra os eixos do joystick ++ ++ ++ ++ Calibrate ++ Calibrar ++ ++ ++ ++ Test all joystick functions ++ Testa todas as funções do joystick ++ ++ ++ ++ Test ++ Testar ++ ++ ++ ++ Map joystick functions to GUI functions ++ Mapeia as funções do joystick para funções da interface ++ ++ ++ ++ Map ++ Mapear ++ ++ ++ ++ Remap a joystick function to the selected GUI function ++ Remapear uma função do joystick para uma função selecionada da interface ++ ++ ++ ++ Remap ++ Remapear ++ ++ ++ ++ Remove joystick mapping from selected GUI function ++ Remove o mapeamento do joystick para a função selecionada da interface ++ ++ ++ ++ Remove ++ Remover ++ ++ ++ ++ Active joystick mappings; double-click to remap joystick function ++ Mapeamentos ativos do joystick: clique duplo para remapear as funções do joystick ++ ++ ++ ++ Joystick function ++ Função do joystick ++ ++ ++ ++ Network / &Tools ++ Rede / &Ferramentas ++ ++ ++ ++ Zip tool ++ Ferramenta zip ++ ++ ++ ++ ++ ++ Command ++ Comando ++ ++ ++ ++ External zip tool, i.e. "zip" (read and execute) ++ Ferramenta zip externa, p.e. "zip" (ler e executar) ++ ++ ++ ++ Browse for zip tool ++ Procura pela ferramenta zip ++ ++ ++ ++ ++ ++ ++ ++ Arguments ++ Argumentos ++ ++ ++ ++ Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") ++ Lista de argumentos da ferramenta zip para remover as entradas do arquivo ZIP (e. x. "$ARCHIVE$ -d $FILELIST$") ++ ++ ++ ++ Browse working directory of the ROM tool ++ Procura pelo diretório de trabalho da ferramenta da ROM ++ ++ ++ ++ Enable / disable the use of an HTTP proxy on any web lookups ++ Ativa / Desativa o uso de proxy HTTP em qualquer acesso à web ++ ++ ++ ++ Use HTTP proxy ++ Usa o proxy HTTP ++ ++ ++ ++ Host / IP ++ Host / IP ++ ++ ++ ++ Hostname or IP address of the HTTP proxy server ++ O nome ou o endereço IP do servidor proxy HTTP ++ ++ ++ ++ Port ++ Porta ++ ++ ++ ++ Port to access the HTTP proxy service ++ A porta para acessar o serviço de proxy HTTP ++ ++ ++ ++ User ID ++ ID do usuário ++ ++ ++ ++ User ID to access the HTTP proxy service (empty = no authentication) ++ ID do usuário para acessar o serviço de proxy HTTP (vazio = sem autenticação) ++ ++ ++ ++ Browser settings ++ Configurações do navegador ++ ++ ++ ++ Browse cookie database ++ Procura pelo banco de dados dos cookies ++ ++ ++ ++ Cookie database file (write) ++ Arquivo do banco de dados dos cookies (escrita) ++ ++ ++ ++ Cookie database ++ Banco de dados dos cookies ++ ++ ++ ++ Save and restore cookies used on web pages? ++ Salvar e restaurar os cookies utilizados nas páginas web? ++ ++ ++ ++ Remove all cookies by recreating the database ++ Remove todos os cookies ao recriar o banco de dados ++ ++ ++ ++ 7-zip tool ++ ferramenta 7-zip ++ ++ ++ ++ External 7-zip tool, i.e. "7za" (read and execute) ++ Ferramenta externa de 7-zip, p.e. "7za" (ler e executar) ++ ++ ++ ++ Browse for 7-zip tool ++ Procura pela ferramenta 7-zip ++ ++ ++ ++ 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") ++ Lista de argumentos da ferramenta 7-zip para remover as entradas do arquivo 7-zip (e. x. "d $ARCHIVE$ $FILELIST$") ++ ++ ++ ++ E&mulator ++ E&mulador ++ ++ ++ ++ &Global configuration ++ Configuração &global ++ ++ ++ ++ ++ Executable file ++ Arquivo executável ++ ++ ++ ++ Machine list cache ++ Cache da lista das máquinas ++ ++ ++ ++ Browse machine list cache file ++ Procura pelo arquivo do cache da lista das máquinas ++ ++ ++ ++ Software list cache DB ++ BD do cache da lista do programa ++ ++ ++ ++ Browse software list cache database file ++ Procura pelo arquivo do banco de dados do cache da lista do programa ++ ++ ++ ++ Clean up user data database (removes obsolete entries) ++ Limpa o banco de dados do usuário (remove as entradas obsoletas) ++ ++ ++ ++ Machine list cache file (write) ++ Arquivo do cache da lista das máquinas (escrita) ++ ++ ++ ++ Emulator executable file (read and execute) ++ Arquivo executável do emulador (leitura e execução) ++ ++ ++ ++ ++ Browse emulator executable file ++ Procura pelo executável do emulador ++ ++ ++ ++ Emulator log file ++ Arquivo de registro do emulador ++ ++ ++ ++ Emulator log file (write) ++ Arquivo de registro do emulador (escrita) ++ ++ ++ ++ Browse emulator log file ++ Procurar pelo arquivo de registro do emulador ++ ++ ++ ++ Options template file ++ Arquivo modelo das opções ++ ++ ++ ++ Options template file (read) ++ Arquivo modelo das opções (leitura) ++ ++ ++ ++ Browse options template file ++ Procurar pelo arquivo modelo das opções ++ ++ ++ ++ ROM state cache ++ Cache da condição das ROMs ++ ++ ++ ++ ROM state cache file (write) ++ Cache da condição das ROMs (escrita) ++ ++ ++ ++ Browse ROM state cache file ++ Procurar pelo arquivo do cache da condição das ROMs ++ ++ ++ ++ Software state cache ++ Cache da condição do programa ++ ++ ++ ++ Directory used to store individual state cache files for each software-list (write) ++ Diretório usado para armazenar o arquivo do cache da condição individual para cada lista do programa (escrita) ++ ++ ++ ++ Browse software state cache directory ++ Procura pelo diretório do cache da condição do programa ++ ++ ++ ++ XML cache database ++ Banco de dados do cache XML ++ ++ ++ ++ Database file for caching the output from -listxml (write) ++ Arquivo do banco de dados para gerar o cache a partir do comando -listxml (escrita) ++ ++ ++ ++ Browse XML cache database file ++ Procura pelo arquivo do banco de dados do cache XML ++ ++ ++ ++ User data database ++ Banco de dados do usuário ++ ++ ++ ++ Database file for storing/retrieving user data (write) ++ Arquivo do banco de dados para armazenar/recuperar os dados do usuário (escrita) ++ ++ ++ ++ Browse user data database file ++ Procura pelo arquivo do banco de dados do usuário ++ ++ ++ ++ Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) ++ Indica se a âncora do $ID$ está faltando na linha de comando informada (amarelo) ou não (verde) ++ ++ ++ ++ Replace ++ Substituir ++ ++ ++ ++ Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description ++ Argumentos passados ao emulador -- use $ID$ como âncora para o ID do conjunto e $DESCRIPTION$ para a sua descrição ++ ++ ++ ++ ++ ++ ++ Working directory ++ Diretório de trabalho ++ ++ ++ ++ ++ Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) ++ O diretório de trabalho que é utilizado quando o emulador for executado (se vazio, o mesmo diretório de trabalho do QMC2 será usado) ++ ++ ++ ++ ++ Browse working directory ++ Procura pelo diretório de trabalho ++ ++ ++ ++ General software folder ++ Diretório geral do programa ++ ++ ++ ++ Browse general software folder ++ Procura pelo diretório geral do programa ++ ++ ++ ++ Database file for caching the ouput from -listsoftware (write) ++ Arquivo do banco de dados para gerar o cache do comando -listsoftware (escrita) ++ ++ ++ ++ ++ ++ Automatically recreate all emulator caches when the output from '-listfull' changes ++ Recria automaticamente todos os caches dos emuladores quando a saída do '-listfull' for alterada ++ ++ ++ ++ ++ ++ Skip emulator identification when the file's modification time hasn't changed ++ Ignora a identificação do emulador quando o tempo da alteração do arquivo não tenha sido alterado ++ ++ ++ ++ Machine list database ++ Banco de dados da lista das máquinas ++ ++ ++ ++ Machine list database file (write) ++ Arquivo do banco de dados da lista das máquinas (escrita) ++ ++ ++ ++ Browse machine list database file ++ Procura pelo arquivo do banco de dados da lista das máquinas ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ Executable ++ Executável ++ ++ ++ ++ Custom IDs ++ IDs personalizadas ++ ++ ++ ++ Register emulator ++ Cadastrar um emulador ++ ++ ++ ++ Add ++ Adicionar ++ ++ ++ ++ Deregister emulator ++ Descadastrar um emulador ++ ++ ++ ++ Registered emulator's name ++ Nome do emulador registrado ++ ++ ++ ++ Command to execute the emulator (path to the executable file) ++ Comando para executar o emulador (o caminho para o arquivo do executável) ++ ++ ++ ++ Replace emulator registration ++ Substitui o registro do emulador ++ ++ ++ ++ Recreate user data database (removes <b>all</b> entries) ++ Recria o banco de dados do usuário (remove <b>todas</b> as entradas) ++ ++ ++ ++ Foreign &emulators ++ &Emuladores estrangeiros ++ ++ ++ ++ Icon ++ Ícone ++ ++ ++ ++ Emulator name ++ Nome do emulador ++ ++ ++ ++ Remove ++ Remover ++ ++ ++ ++ Registered emulators -- you may select one of these in the machine-specific emulator configuration ++ Emuladores registrados -- você pode selecionar um destes na configuração específica do emulador da máquina ++ ++ ++ ++ Apply settings ++ Aplica as configurações ++ ++ ++ ++ &Apply ++ &Aplicar ++ ++ ++ ++ Restore currently applied settings ++ Restaura as configurações atualmente aplicadas ++ ++ ++ ++ &Restore ++ &Restaurar ++ ++ ++ ++ Reset to default settings (click <i>Restore</i> to restore currently applied settings!) ++ Redefine para as configurações padrão (clique em <i>Restaurar</i> para restaurar as configurações aplicadas atualmente!) ++ ++ ++ ++ &Default ++ &Padrão ++ ++ ++ ++ Close and apply settings ++ Fecha e aplica as configurações ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ Close and discard changes ++ Fecha e descarta as alterações ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ PCB ++ ++ ++ PCB ++ PCI ++ ++ ++ ++ PaletteEditor ++ ++ ++ Color palette editor ++ Editor da paleta de cor ++ ++ ++ ++ Cancel palette editing ++ Cancela a edição da paleta ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ Apply new palette and close dialog ++ Aplica a nova paleta e fecha a janela ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ Color role ++ Papel da cor ++ ++ ++ ++ ++ ++ Active ++ Ativo ++ ++ ++ ++ ++ ++ Inactive ++ Inativo ++ ++ ++ ++ ++ ++ Disabled ++ Desativado ++ ++ ++ ++ General background color ++ Cor do plano de fundo padrão ++ ++ ++ ++ General foreground (text) color ++ Cor padrão do primeiro plano (texto) ++ ++ ++ ++ Used mainly as the background color for text entry widgets, but can also be used for other painting - such as the background of combobox drop-down lists and toolbar-handles ++ Usado principalmente como a cor de fundo para elementos da entrada de texto, mas pode ser usada também para outras pinturas - tais como a cor de fundo de uma lista e as barras de tarefa ++ ++ ++ ++ Alternate background color in views with alternating row colors ++ Cor alternativa do plano de fundo nas visualizações com cores nas linhas alternadas ++ ++ ++ ++ Foreground (text) color used with Base ++ Cor do primeiro plano (texto) usado com Base ++ ++ ++ ++ A text color that is very different from WindowText and contrasts well with e.g. Dark (typically used for text that needs to be drawn where Text or WindowText would give poor contrast, such as on pressed push buttons) ++ Uma cor de texto que é bem diferente do texto da janela e contrasta bem com, por exemplo, preto (tipicamente usado para o texto que precisa ser desenhado onde texto ou o texto da janela poderia ter um contraste ruim, tais como botões pressionados) ++ ++ ++ ++ Background color used for buttons ++ Cor de fundo usado para os botões ++ ++ ++ ++ Foreground (text) color used for buttons ++ Cor do primeiro plano (texto) usado para os botões ++ ++ ++ ++ Background color used for tool-tips ++ Cor de fundo usado para as dicas ++ ++ ++ ++ Foreground (text) color used for tool-tips ++ Cor do primeiro plano (texto) usado para as dicas ++ ++ ++ ++ For 3D bevels and shadow effects: Lighter than Button ++ Para chanfros 3D e os efeitos de sombra: Mais claro que o botão ++ ++ ++ ++ For 3D bevels and shadow effects: Between Button and Light ++ Para chanfros 3D e os efeitos de sombra: Entre o botão e o claro ++ ++ ++ ++ For 3D bevels and shadow effects: Darker than Button ++ Para chanfros 3D e os efeitos de sombra: Mais escuro que o botão ++ ++ ++ ++ For 3D bevels and shadow effects: Between Button and Dark ++ Para chanfros 3D e os efeitos de sombra: Entre o botão e o escuro ++ ++ ++ ++ For 3D bevels and shadow effects: Very dark color used for shadows ++ Para chanfros 3D e os efeitos de sombra: Cor bem escura usada para sombras ++ ++ ++ ++ Color used to indicate a selected / the current item ++ Cor usada para indicar um item selecionado / o item atual ++ ++ ++ ++ Text color that contrasts with Highlight ++ Cor do texto que contrasta com o realçado ++ ++ ++ ++ Text color used for unvisited hyperlinks ++ Cor do texto usado para os links não visitados ++ ++ ++ ++ Text color used for already visited hyperlinks ++ Cor do texto usado para os links já visitados ++ ++ ++ ++ Restore palette settings from currently active palette ++ Restaura as configurações da paleta para a paleta ativa atualmente ++ ++ ++ ++ &Restore ++ &Restaurar ++ ++ ++ ++ Preview the current palette (without applying it) ++ Pré-visualização da paleta atual (sem aplicá-la) ++ ++ ++ ++ &Preview ++ &Pré-visualizar ++ ++ ++ ++ When enabled, colors for Inactive and Disabled states are calculated, otherwise you can edit them individually ++ Quando ativado, as cores para as condições inativo e desativado serão calculados, caso contrário, você poderá editá-los individualmente ++ ++ ++ ++ Calculate details ++ Calcular os detalhes ++ ++ ++ ++ Preview ++ ++ ++ preview ++ pré-visualização ++ ++ ++ ++ ProcessManager ++ ++ ++ WARNING: ProcessManager::start(): the specified working directory '%1' is not a directory -- ignored ++ AVISO: ProcessManager::start(): o diretório de trabalho informado '%1' não é um diretório -- ignorado ++ ++ ++ ++ WARNING: ProcessManager::start(): the specified working directory '%1' does not exist -- ignored ++ AVISO: ProcessManager::start(): o diretório de trabalho informado '%1' não existe -- ignorado ++ ++ ++ ++ ++ starting emulator #%1, command = %2 ++ iniciando o emulador #%1, comando = %2 ++ ++ ++ ++ terminating emulator #%1, PID = %2 ++ encerrando o emulador #%1, PID = %2 ++ ++ ++ ++ WARNING: ProcessManager::terminate(ushort index = %1): trying to terminate a null process ++ AVISO: ProcessManager::terminate(ushort index = %1): tentando encerrar um processo nulo ++ ++ ++ ++ killing emulator #%1, PID = %2 ++ matando o emulador #%1, PID = %2 ++ ++ ++ ++ WARNING: ProcessManager::kill(ushort index = %1): trying to kill a null process ++ AVISO: ProcessManager::kill(ushort index = %1): tentando matar um processo nulo ++ ++ ++ ++ ++ stdout[#%1]: ++ stdout[#%1]: ++ ++ ++ ++ stderr[#%1]: ++ stderr[#%1]: ++ ++ ++ ++ WARNING: ProcessManager::finished(...): trying to remove a null item ++ AVISO: ProcessManager::finished(...): tentando matar um item nulo ++ ++ ++ ++ emulator #%1 finished, exit code = %2, exit status = %3, remaining emulators = %4 ++ emulador #%1 terminou, código gerado = %2, condição da saída = %3, emuladores restantes = %4 ++ ++ ++ ++ normal ++ normal ++ ++ ++ ++ ++ crashed ++ travou ++ ++ ++ ++ running ++ executando ++ ++ ++ ++ emulator #%1 started, PID = %2, running emulators = %3 ++ o emulador #%1 foi iniciado, PID = %2, emuladores em execução = %3 ++ ++ ++ ++ failed to start ++ falha ao iniciar ++ ++ ++ ++ write error ++ erro de escrita ++ ++ ++ ++ read error ++ erro de leitura ++ ++ ++ ++ timeout ++ tempo excedido ++ ++ ++ ++ FATAL: failed to start emulator #%1 ++ FATAL: houve uma falha ao iniciar o emulador #%1 ++ ++ ++ ++ WARNING: emulator #%1 crashed ++ AVISO: o emulador #%1 travou ++ ++ ++ ++ WARNING: failed to write to emulator #%1 ++ AVISO: houve uma falha de escrita no emulador #%1 ++ ++ ++ ++ WARNING: failed to read from emulator #%1 ++ AVISO: houve uma falha de leitura no emulador #%1 ++ ++ ++ ++ WARNING: unhandled error for emulator #%1, error code = %2 ++ AVISO: erro não tratado para o emulador #%1, código do erro = %2 ++ ++ ++ ++ no error ++ nenhum erro ++ ++ ++ ++ failed validity checks ++ as verificações de validade falharam ++ ++ ++ ++ missing files ++ arquivos que faltam ++ ++ ++ ++ fatal error ++ erro fatal ++ ++ ++ ++ device initialization error ++ houve um erro na inicialização do dispositivo ++ ++ ++ ++ machine doesn't exist ++ a máquina não existe ++ ++ ++ ++ invalid configuration ++ configuração inválida ++ ++ ++ ++ identified all non-ROM files ++ todos os arquivos não-ROM foram identificados ++ ++ ++ ++ identified some files but not all ++ nem todos os arquivos foram identificados ++ ++ ++ ++ identified no files ++ nenhum arquivo foi identificado ++ ++ ++ ++ ++ unknown error ++ erro desconhecido ++ ++ ++ ++ QFtp ++ ++ ++ Not connected ++ Não conectado ++ ++ ++ ++ Host %1 not found ++ A máquina %1 não foi encontrada ++ ++ ++ ++ Connection refused to host %1 ++ Conexão recusada para a máquina %1 ++ ++ ++ ++ Connection timed out to host %1 ++ Tempo de conexão expirado para a máquina %1 ++ ++ ++ ++ Connected to host %1 ++ Conectado à máquina %1 ++ ++ ++ ++ Connection refused for data connection ++ Conexão recusada para conexão de dados ++ ++ ++ ++ Unknown error ++ Erro desconhecido ++ ++ ++ ++ Connecting to host failed: ++%1 ++ A conexão com a máquina falhou: ++%1 ++ ++ ++ ++ Login failed: ++%1 ++ O login falhou: ++%1 ++ ++ ++ ++ Listing directory failed: ++%1 ++ A listagem do diretório falhou: ++%1 ++ ++ ++ ++ Changing directory failed: ++%1 ++ A alteração do diretório falhou: ++%1 ++ ++ ++ ++ Downloading file failed: ++%1 ++ O download do arquivo falhou: ++%1 ++ ++ ++ ++ Uploading file failed: ++%1 ++ O envio do arquivo falhou: ++%1 ++ ++ ++ ++ Removing file failed: ++%1 ++ A remoção do arquivo falhou: ++%1 ++ ++ ++ ++ Creating directory failed: ++%1 ++ A criação do diretório falhou: ++%1 ++ ++ ++ ++ Removing directory failed: ++%1 ++ A remoção do diretório falhou: ++%1 ++ ++ ++ ++ Connection closed ++ Conexão fechada ++ ++ ++ ++ QObject ++ ++ ++ ++ correct ++ correto ++ ++ ++ ++ incorrect ++ incorreto ++ ++ ++ ++ mostly correct ++ maioria correto ++ ++ ++ ++ not found ++ não encontrado ++ ++ ++ ++ ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Import from... ++ Importar de... ++ ++ ++ ++ ++ Export machine-specific MAME configuration ++ Exporta a configuração do MAME específica da máquina ++ ++ ++ ++ ++ Import machine-specific MAME configuration ++ Importar a configuração do MAME específica da máquina ++ ++ ++ ++ Setting up the GUI, please wait... ++ Configurando a Interface, aguarde... ++ ++ ++ ++ M.A.M.E. Catalog / Launcher II v ++ MAME Catálogo / Launcher II v ++ ++ ++ ++ GIT %1 ++ GIT %1 ++ ++ ++ ++ Phonon features enabled - using Phonon v%1 ++ Recursos Phonon ativados - usando o Phonon v%1 ++ ++ ++ ++ ++ SDL joystick support enabled - using SDL v%1.%2.%3 ++ O suporte do SDL ao joystick foi ativado - usando o SDL v%1.%2.%3 ++ ++ ++ ++ ++ CHD ++ CHD ++ ++ ++ ++ ROM ++ ROM ++ ++ ++ ++ ++ ++ good ++ bom ++ ++ ++ ++ ++ ++ no dump ++ não há imagem ++ ++ ++ ++ ++ bad dump ++ imagem ruim ++ ++ ++ ++ no / bad dump ++ não há imagem / imagem ruim ++ ++ ++ ++ video player: XML error: fatal error on line %1, column %2: %3 ++ reprodutor de vídeo: Erro do XML: erro fatal na linha %1, coluna %2: %3 ++ ++ ++ ++ ++ ++ ++ Auto mount ++ Montar automaticamente ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Not mounted ++ Não montado ++ ++ ++ ++ ++ ++ ++ Mounted on: ++ Montado em: ++ ++ ++ ++ ++ ++ Don't mount ++ Não montar ++ ++ ++ ++ ++ Searching ++ Procurando ++ ++ ++ ++ Updating ++ Atualizando ++ ++ ++ ++ Part: ++ Parte: ++ ++ ++ ++ ++ No mount device ++ Nenhum dispositivo montado ++ ++ ++ ++ ++ Unmanaged ++ Não gerenciado ++ ++ ++ ++ state info for software-list '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 ++ Informação da condição para a lista do programa '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 ++ ++ ++ ++ ++ yes ++ sim ++ ++ ++ ++ ++ no ++ não ++ ++ ++ ++ ++ partially ++ parcialmente ++ ++ ++ ++ Requirement: ++ Requisito: ++ ++ ++ ++ Compatibility: ++ Compatibilidade: ++ ++ ++ ++ Data area: ++ Área de dados: ++ ++ ++ ++ ++ ++ Size: ++ Tamanho: ++ ++ ++ ++ Disk area: ++ Área do disco: ++ ++ ++ ++ CRC: ++ CRC: ++ ++ ++ ++ SHA1: ++ SHA1: ++ ++ ++ ++ Info: ++ Informação: ++ ++ ++ ++ [context] Previous component / List page up / Info page up ++ [contexto] Componente anterior / Page up da lista / Page up da informação ++ ++ ++ ++ [context] Next component / List page down / Info page down ++ [contexto] Próximo componente / Page down da lista / Page down da informação ++ ++ ++ ++ [context] Hide list / Previous item / Slide left / Cycle backwards ++ [contexto] Esconde a lista / Item anterior / Deslizar para esquerda / Girar para trás ++ ++ ++ ++ [context] Show list / Next item / Slide right / Cycle forwards ++ [contexto] Mostra a lista / Próximo item / Deslizar para a direita / Girar para frente ++ ++ ++ ++ [context] Show toolbar / List up / Info up / Previous widget ++ [contexto] Mostra a barra de ferramentas / Lista para cima / Informação para cima / elemento anterior ++ ++ ++ ++ [context] Hide toolbar / List down / Info down / Next widget ++ [contexto] Esconde a barra de ferramentas / Lista para baixo / Informação para baixo / Próximo elemento ++ ++ ++ ++ [context] Select / Set / Toggle details / Start emulation ++ [contexto] Seleciona / Define / Alterna os detalhes / Inicia a emulação ++ ++ ++ ++ [context] Zoom in / List top ++ [contexto] Mais aproximação / Topo da lista ++ ++ ++ ++ [context] Zoom out / List bottom ++ [contexto] Menos aproximação / Fim da lista ++ ++ ++ ++ [context] List page up / Flick page up ++ [contexto] Page up da lista / Flick page up ++ ++ ++ ++ [context] List page down / Flick page down ++ [contexto] Page down da lista / Flick page down ++ ++ ++ ++ [context] List top ++ [contexto] Topo da lista ++ ++ ++ ++ [context] List bottom ++ [contexto] Fim da lista ++ ++ ++ ++ [context] Set primary display data item ++ [contexto] Define um item dos dados da tela primária ++ ++ ++ ++ [context] Set secondary display data item ++ [contexto] Define um item dos dados da tela secundária ++ ++ ++ ++ [global] Zoom in ++ [global] Mais aproximação ++ ++ ++ ++ [global] Zoom out ++ [global] Menos aproximação ++ ++ ++ ++ ++ ++ [global] Start emulation ++ [global] Inicia a emulação ++ ++ ++ ++ [global] Toggle video playback ++ [global] alterna a reprodução de vídeo ++ ++ ++ ++ [global] Flip cabinet / machine-card ++ [global] Gira o gabinete / cartão da máquina ++ ++ ++ ++ [context] Abort machine launch / Hide preferences ++ [contexto] Aborta o lançamento da máquina / Esconde as preferências ++ ++ ++ ++ [global] Search ++ [global] Procurar ++ ++ ++ ++ [global] Toggle preferences ++ [global] Alterna as preferências ++ ++ ++ ++ [global] Cursor up ++ [global] Cursor para cima ++ ++ ++ ++ [global] Cursor down ++ [global] Cursor para baixo ++ ++ ++ ++ [global] Cursor left ++ [global] Cursor à esquerda ++ ++ ++ ++ [global] Cursor right ++ [global] Cursor à direita ++ ++ ++ ++ [global] Page up ++ [global] Page up ++ ++ ++ ++ [global] Page down ++ [global] Page down ++ ++ ++ ++ [global] Start of list ++ [global] Início da lista ++ ++ ++ ++ [global] End of list ++ [global] Fim da lista ++ ++ ++ ++ [global] Focus search box ++ [global] Dar foco à caixa de busca ++ ++ ++ ++ [global] Toggle menu-bar ++ [global] Alterna a barra do menu ++ ++ ++ ++ ++ [global] Next component ++ [global] Próximo componente ++ ++ ++ ++ ++ [global] Previous component ++ [global] Componente anterior ++ ++ ++ ++ [global] Toggle list ++ [global] Alterna a lista ++ ++ ++ ++ [global] Toggle toolbar ++ [global] Alterna a barra de ferramentas ++ ++ ++ ++ ++ ++ ++ [global] Toggle full-screen / windowed mode ++ [global] Alterna a tela cheia / modo janela ++ ++ ++ ++ ++ ++ [global] Exit ++ [global] Encerrar ++ ++ ++ ++ ROMAlyzer ++ ++ ++ Reading '%1' - %2 ++ Lendo '%1' - %2 ++ ++ ++ ++ ERROR ++ ERRO ++ ++ ++ ++ sha-1 ++ sha-1 ++ ++ ++ ++ ++ ++ real size: %1 (%2 B) ++ tamanho real %1 (%2 B) ++ ++ ++ ++ ++ ++ SHA-1 check-sum: %1 ++ Cálculo SHA-1: %1 ++ ++ ++ ++ ++ ++ parent CHD's SHA-1 check-sum: %1 ++ Cálculo SHA-1 do CHD principal: %1 ++ ++ ++ ++ ++ raw SHA-1 check-sum: %1 ++ Cálculo SHA-1 bruto: %1 ++ ++ ++ ++ no dump exists ++ não há imagem ++ ++ ++ ++ ++ WARNING ++ AVISO ++ ++ ++ ++ actual bytes read != file size in header ++ bytes lidos != tamanho do arquivo no cabeçalho ++ ++ ++ ++ ++ check archive integrity ++ verifica a integridade do arquivo ++ ++ ++ ++ actual CRC != CRC in header ++ CRC atual != CRC no cabeçalho ++ ++ ++ ++ Automatically scroll to the currently analyzed software ++ Ir automaticamente para o programa analisado atualmente ++ ++ ++ ++ Software collection rebuilder ++ Reconstrutor da coleção do programa ++ ++ ++ ++ software mode ++ modo programa ++ ++ ++ ++ system mode ++ modo sistema ++ ++ ++ ++ Check-sum search ++ Busca pelo check-sum ++ ++ ++ ++ set rewriter: loading '%1' with CRC '%2' from '%3' as '%4' ++ reconstrutor do conjunto: carregando '%1' com CRC '%2' de '%3' como '%4' ++ ++ ++ ++ set rewriter: removing redundant file '%1' with CRC '%2' from output data ++ reconstrutor do conjunto: removendo o arquivo redundante '%1' com CRC '%2' dos dados gerados ++ ++ ++ ++ set rewriter: INFORMATION: no output data available, thus not rewriting set '%1' to '%2' ++ reconstrutor do conjunto: INFORMAÇÃO: nenhum dado foi gerado, portanto, não é preciso reconstruir o conjunto '%1' para '%2' ++ ++ ++ ++ Choose data file to import from ++ Escolha o arquivo de dados para importar ++ ++ ++ ++ Choose data file to export to ++ Escolha o arquivo de dados para exportar ++ ++ ++ ++ ++ set rewriter: deflating '%1' (uncompressed size: %2) ++ reconstrutor do conjunto: descomprimindo o '%1' (tamanho sem compressão: %2) ++ ++ ++ ++ ++ set rewriter: WARNING: failed to deflate '%1' ++ reconstrutor do conjunto: AVISO: houve uma falha ao descomprimir o '%1' ++ ++ ++ ++ Choose file to store the ROMAlyzer log ++ Escolha o arquivo para armazenar o registro do ROMAlyzer ++ ++ ++ ++ ++ saving ROMAlyzer log to '%1' ++ salvando o registro do ROMAlyzer para '%1' ++ ++ ++ ++ ++ done (saving ROMAlyzer log to '%1') ++ feito (salvando o registro do ROMAlyzer para '%1') ++ ++ ++ ++ ++ WARNING: can't open file '%1' for writing, please check permissions ++ AVISO: foi impossível abrir o arquivo '%1' para escrita, verifique as permissões ++ ++ ++ ++ ++ WARNING: unable to identify '%1' from '%2' by CRC '%3' ++ AVISO: não foi possível identificar o '%1' de '%2' pelo CRC '%3' ++ ++ ++ ++ ++ WARNING: unable to identify '%1' from '%2' by CRC (no dump exists / CRC unknown) ++ AVISO: não foi possível identificar o '%1' de '%2' pelo CRC (imagem inexistente / CRC desconhecido) ++ ++ ++ ++ ++ ++ logical size: %1 (%2 B) ++ tamanho lógico: %1 (%2 B) ++ ++ ++ ++ CHD manager: WARNING: failed updating CHD header information ++ Gerenciador de CHD: AVISO: houve uma falha ao atualizar as informações do cabeçalho do CHD ++ ++ ++ ++ searched paths: %1 ++ caminhos procurados: %1 ++ ++ ++ ++ searched path: %1 ++ caminho procurado: %1 ++ ++ ++ ++ ++ optional ++ opcional ++ ++ ++ ++ ++ loading '%1' with CRC '%2' from '%3' as '%4'%5 ++ carregando o '%1' com CRC '%2' de '%3' como '%4'%5 ++ ++ ++ ++ Search check-sum ++ Procura pelo check-sum ++ ++ ++ ++ MD5 check-sum: %1 ++ Check-sum MD5: %1 ++ ++ ++ ++ parent CHD's MD5 check-sum: %1 ++ cálculo MD5 do CHD principal: %1 ++ ++ ++ ++ ++ ++ ++ ++ ++ CHD manager: using CHD v%1 header check-sums for CHD verification ++ Gerenciador de CHD: usando o código de verificação do cabeçalho do CHD v%1 para a verificação do CHD ++ ++ ++ ++ CHD manager: no header check-sums available for CHD verification ++ Gerenciador de CHD: não há check-sum no cabeçalho disponível para a verificação do CHD ++ ++ ++ ++ CHD manager: WARNING: no header check-sums available for CHD verification ++ Gerenciador de CHD: AVISO: não há check-sum no cabeçalho disponível para a verificação do CHD ++ ++ ++ ++ ++ ++ using CHD v%1 header check-sums for CHD verification ++ usando o check-sum do cabeçalho do CHD v%1 para a verificação do CHD ++ ++ ++ ++ WARNING: no header check-sums available for CHD verification ++ AVISO: não há check-sum no cabeçalho disponível para a verificação do CHD ++ ++ ++ ++ ++ WARNING: the CRC for '%1' from '%2' is unknown to the emulator, the set rewriter will use the recalculated CRC '%3' to qualify the file ++ AVISO: o CRC para '%1' de '%2' é desconhecido para o emulador, o reconstrutor de conjuntos usará o CRC recalculado '%3' para qualificar o arquivo ++ ++ ++ ++ ++ WARNING: unable to determine the CRC for '%1' from '%2', the set rewriter will NOT store this file in the new set ++ AVISO: não foi possível determinar o CRC para '%1' de '%2', o reconstrutor dos conjuntos NÃO vai armazenar este arquivo no novo conjunto ++ ++ ++ ++ Choose CHD manager executable file ++ Escolha o executável do gerenciador de CHDs ++ ++ ++ ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose temporary working directory ++ Escolha a pasta de trabalho temporário ++ ++ ++ ++ CHD manager: external process started ++ Gerenciador de CHD: o processo externo foi iniciado ++ ++ ++ ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ normal ++ normal ++ ++ ++ ++ crashed ++ travou ++ ++ ++ ++ CHD manager: external process finished (exit code = %1, exit status = %2) ++ Gerenciador de CHD: o processo externo foi finalizado (código gerado = %1, condição da saída = %2) ++ ++ ++ ++ CHD manager: stdout: %1 ++ Gerenciador de CHD: stdout: %1 ++ ++ ++ ++ CHD manager: stderr: %1 ++ Gerenciador de CHD: stderr: %1 ++ ++ ++ ++ CHD manager: failed to start ++ Gerenciador de CHD: falhou ao iniciar ++ ++ ++ ++ CHD manager: crashed ++ Gerenciador de CHD: travou ++ ++ ++ ++ CHD manager: write error ++ Gerenciador de CHD: erro de escrita ++ ++ ++ ++ CHD manager: read error ++ Gerenciador de CHD: erro de leitura ++ ++ ++ ++ CHD manager: unknown error %1 ++ Gerenciador de CHD: erro desconhecido %1 ++ ++ ++ ++ none ++ nenhum ++ ++ ++ ++ zlib ++ zlib ++ ++ ++ ++ zlib+ ++ zlib+ ++ ++ ++ ++ A/V codec ++ Codec de A/V ++ ++ ++ ++ please wait for reload to finish and try again ++ aguarde a conclusão do recarregamento e tente novamente ++ ++ ++ ++ stopping analysis ++ parando a análise ++ ++ ++ ++ starting analysis ++ iniciando a análise ++ ++ ++ ++ pausing analysis ++ pausando a análise ++ ++ ++ ++ resuming analysis ++ continuando a análise ++ ++ ++ ++ ++ ++ &Pause ++ &Pausar ++ ++ ++ ++ &Stop ++ P&arar ++ ++ ++ ++ analysis started ++ a análise foi iniciada ++ ++ ++ ++ ++ ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ analysis paused ++ a análise foi pausada ++ ++ ++ ++ &Resume ++ &Continuar ++ ++ ++ ++ Paused ++ Pausado ++ ++ ++ ++ report limit reached, removing %n set(s) from the report ++ ++ o limite do relatório foi alcançado, removendo %n conjunto do relatório ++ o limite do relatório foi alcançado, removendo %n conjuntos do relatório ++ ++ ++ ++ ++ analyzing '%1' ++ analisando o '%1' ++ ++ ++ ++ Analyzing '%1' ++ Analisando o '%1' ++ ++ ++ ++ parsing XML data for '%1' ++ avaliando os dados do XML para '%1' ++ ++ ++ ++ done (parsing XML data for '%1') ++ feito (ao avaliar os dados do XML para '%1') ++ ++ ++ ++ error (parsing XML data for '%1') ++ erro (ao avaliar os dados do XML para '%1') ++ ++ ++ ++ checking %n file(s) for '%1' ++ ++ verificando %n arquivo(s) para '%1' ++ verificando %n arquivos para '%1' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ROM ++ ROM ++ ++ ++ ++ ++ ++ ++ ++ ++ not found ++ não encontrado ++ ++ ++ ++ ++ ++ ++ skipped ++ ignorando ++ ++ ++ ++ error ++ erro ++ ++ ++ ++ interrupted (checking %n file(s) for '%1') ++ ++ interrompido (verificando %n arquivo para '%1') ++ interrompido (verificando %n arquivos para '%1') ++ ++ ++ ++ ++ good / not found / skipped ++ bom / não encontrado / ignorado ++ ++ ++ ++ good / not found ++ bom / não encontrado ++ ++ ++ ++ good / skipped ++ bom / ignorado ++ ++ ++ ++ ++ ++ ++ good ++ bom ++ ++ ++ ++ bad / not found / skipped ++ ruim / não encontrado / ignorado ++ ++ ++ ++ bad / not found ++ ruim / não encontrado ++ ++ ++ ++ bad / skipped ++ ruim / ignorado ++ ++ ++ ++ ++ ++ ++ ++ ++ bad ++ ruim ++ ++ ++ ++ done (checking %n file(s) for '%1') ++ ++ feito (verificando %n arquivo para '%1') ++ feito (verificando %n arquivos para '%1') ++ ++ ++ ++ ++ done (analyzing '%1') ++ feito (analisando o '%1') ++ ++ ++ ++ ++ &Analyze ++ &Analisar ++ ++ ++ ++ analysis ended ++ a análise foi encerrada ++ ++ ++ ++ elapsed time = %1 ++ tempo decorrido = %1 ++ ++ ++ ++ ++ ++ ++ ++ ++ CHD ++ CHD ++ ++ ++ ++ zlib (Deflate) ++ zlib (Descomprimir) ++ ++ ++ ++ lzma (LZMA) ++ lzma (LZMA) ++ ++ ++ ++ huff (Huffman) ++ huff (Huffman) ++ ++ ++ ++ cdfl (CD FLAC) ++ cdfl (CD FLAC) ++ ++ ++ ++ avhu (A/V Huffman) ++ avhu (A/V Huffman) ++ ++ ++ ++ cdlz (CD LZMA) ++ cdlz (CD LZMA) ++ ++ ++ ++ cdzl (CD Deflate) ++ cdzl (Descomprimir CD) ++ ++ ++ ++ flac (FLAC) ++ flac (FLAC) ++ ++ ++ ++ ++ Verify CHDs through 'chdman verify' ++ Verifica os CHDs através do 'chdman verify' ++ ++ ++ ++ Rewrite set ++ Reconstrói o conjunto ++ ++ ++ ++ ++ Analyse referenced devices ++ Analisa os dispositivos referenciados ++ ++ ++ ++ Copy to clipboard ++ Copia para a área de transferência ++ ++ ++ ++ Copy to clipboard (bad / missing dumps) ++ Copia para a área de transferência (imagens ruins / que faltam) ++ ++ ++ ++ Import from data file ++ Importa do arquivo de dados ++ ++ ++ ++ Export to data file ++ Exporta para o arquivo de dados ++ ++ ++ ++ determining list of sets to analyze ++ determinando a lista dos conjuntos que serão analisados ++ ++ ++ ++ ++ Searching sets ++ Procurando pelos conjuntos ++ ++ ++ ++ done (determining list of sets to analyze) ++ feito (determinando a lista dos conjuntos que serão analisados) ++ ++ ++ ++ %n set(s) to analyze ++ ++ %n conjunto para analisar ++ %n conjuntos para serem analisados ++ ++ ++ ++ ++ ++ ++ ++ ++ no dump ++ não há imagem ++ ++ ++ ++ Calculated check-sums ++ Check-sum calculados ++ ++ ++ ++ WARNING: %1 file '%2' loaded from '%3' may be obsolete, should be merged from parent set '%4' ++ AVISO: o arquivo %1 '%2' carregado de '%3' pode estar obsoleto, deveria ser misturado do conjunto principal '%4' ++ ++ ++ ++ SIZE ++ TAMANHO ++ ++ ++ ++ size ++ tamanho ++ ++ ++ ++ crc ++ crc ++ ++ ++ ++ md5 ++ md5 ++ ++ ++ ++ WARNING: %1 file '%2' loaded from '%3' has incorrect / unexpected check-sums ++ AVISO: o arquivo %1 '%2' carregado de '%3' tem o check-sum errado / inesperado ++ ++ ++ ++ good / no dump / skipped ++ bom / não há imagem / ignorado ++ ++ ++ ++ good / no dump ++ bom / não há imagem ++ ++ ++ ++ bad / no dump / skipped ++ ruim / não há imagem / ignorado ++ ++ ++ ++ bad / no dump ++ ruim / não há imagem ++ ++ ++ ++ %n set(s) remaining ++ ++ %n conjunto restante ++ %n conjuntos restantes ++ ++ ++ ++ ++ size of '%1' is greater than 2 GB -- skipped ++ o tamanho do '%1' é maior que 2 GB -- ignorado ++ ++ ++ ++ size of '%1' is greater than allowed maximum -- skipped ++ o tamanho do '%1' é maior que o máximo permitido -- ignorado ++ ++ ++ ++ loading '%1'%2 ++ carregando '%1 '%2 ++ ++ ++ ++ ++ ++ (merged) ++ (mesclado) ++ ++ ++ ++ CHD header information: ++ informação do cabeçalho do CHD: ++ ++ ++ ++ tag: %1 ++ tag: %1 ++ ++ ++ ++ version: %1 ++ versão: %1 ++ ++ ++ ++ ++ CHD v%1 ++ CHD v%1 ++ ++ ++ ++ ++ compression: %1 ++ compressão: %1 ++ ++ ++ ++ ++ flags: %1, %2 ++ flags: %1, %2 ++ ++ ++ ++ ++ has parent ++ há um principal ++ ++ ++ ++ ++ no parent ++ não há um principal ++ ++ ++ ++ ++ allows writes ++ permite a escrita ++ ++ ++ ++ ++ read only ++ somente leitura ++ ++ ++ ++ ++ number of total hunks: %1 ++ quantidade total dos blocos:%1 ++ ++ ++ ++ ++ ++ number of bytes per hunk: %1 ++ quantidade dos bytes por bloco :%1 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ check-sum database ++ banco de dados do check-sum ++ ++ ++ ++ ++ ++ ++ using member '%1' from archive '%2' with SHA-1 '%3' and CRC '%4' as '%5' ++ usando o membro '%1' do arquivo '%2' com SHA-1 '%3' e CRC '%4' como '%5' ++ ++ ++ ++ ++ using CHD '%1' with SHA-1 '%2' as '%3' ++ usando o CHD '%1' com SHA-1 '%2' como '%3' ++ ++ ++ ++ ++ using file '%1' with SHA-1 '%2' and CRC '%3' as '%4' ++ usando o arquivo '%1' com SHA-1 '%2' e CRC '%3' como '%4' ++ ++ ++ ++ ++ size of '%1' from '%2' is greater than 2 GB -- skipped ++ o tamanho do '%1' de '%2' é maior que 2 GB -- ignorado ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ backup ++ backup ++ ++ ++ ++ FATAL: target path '%1' cannot be created ++ FATAL: o caminho de destino '%1' não pôde ser criado ++ ++ ++ ++ FATAL: source file '%1' cannot be opened for reading ++ FATAL: o arquivo fonte '%1' não pôde ser aberto para leitura ++ ++ ++ ++ creating backup copy of '%1' as '%2' ++ criando uma cópia do backup de '%1' como '%2' ++ ++ ++ ++ FATAL: I/O error while writing to '%1' ++ FATAL: houve um erro de E/S ao escrever em '%1' ++ ++ ++ ++ done (creating backup copy of '%1' as '%2') ++ feito (criando uma cópia do backup '%1' como '%2') ++ ++ ++ ++ FATAL: destination file '%1' cannot be opened for writing ++ FATAL: o arquivo de destino '%1' não pode ser aberto para escrita ++ ++ ++ ++ FATAL: backup folder '%1' isn't writable ++ FATAL: a pasta do backup '%1' não tem permissão de escrita ++ ++ ++ ++ FATAL: backup folder '%1' doesn't exist ++ FATAL: a pasta do backup '%1' não existe ++ ++ ++ ++ Select machine ++ Selecione uma máquina ++ ++ ++ ++ Choose backup folder ++ Escolha a pasta de backup ++ ++ ++ ++ set rewriter: FATAL: can't load '%1' with CRC '%2', aborting ++ reconstrutor do conjunto: FALTAL: foi impossível carregar '%1' com CRC '%2', abortando ++ ++ ++ ++ set rewriter: WARNING: can't load '%1' with CRC '%2', ignoring this file ++ reconstrutor do conjunto: AVISO: foi impossível carregar '%1' com CRC '%2', ignorando este arquivo ++ ++ ++ ++ Choose path to be added to scan-list ++ Escolha o caminho que será adicionado na lista de exames ++ ++ ++ ++ Choose check-sum database file ++ Escolha o arquivo do banco de dados do check-sum ++ ++ ++ ++ Close log ++ Fechar o registro ++ ++ ++ ++ Stop scanner ++ Parar o exame ++ ++ ++ ++ Resume ++ Continua ++ ++ ++ ++ scanning ++ examinando ++ ++ ++ ++ preparing ++ preparando ++ ++ ++ ++ ++ ++ ++ ++ Objects in database ++ Objetos no banco de dados ++ ++ ++ ++ Database size ++ Tamanho do banco de dados ++ ++ ++ ++ %n day(s) ++ ++ %n dia ++ %n dias ++ ++ ++ ++ ++ %n second(s) ++ ++ %n segundo ++ %n segundos ++ ++ ++ ++ ++ %n hour(s) ++ ++ %n hora ++ %n horas ++ ++ ++ ++ ++ %n minute(s) ++ ++ %n minuto ++ %n minutos ++ ++ ++ ++ ++ Age of stored data ++ Idade dos dados ++ ++ ++ ++ Pending updates ++ Atualizações pendentes ++ ++ ++ ++ ++ ++ ++ Scanner status ++ Condição do exame ++ ++ ++ ++ none (uncompressed) ++ nenhum (não compactado) ++ ++ ++ ++ compressors: %1 ++ compressores: %1 ++ ++ ++ ++ number of bytes per unit: %1 ++ quantidade dos bytes por unidade: %1 ++ ++ ++ ++ CHD v%1 not supported -- rest of header information skipped ++ CHD v%1 não suportado -- o resto da informação do cabeçalho foi ignorado ++ ++ ++ ++ Verify - %p% ++ Verificar - %p% ++ ++ ++ ++ ++ CHD manager: verifying CHD ++ Gerenciador de CHD: verificando o CHD ++ ++ ++ ++ ++ Try to update CHDs if their header indicates an older version ('chdman copy') ++ Tenta atualizar o CHD se seu cabeçalho indicar uma versão mais velha ('chdman copy') ++ ++ ++ ++ INFORMATION: %1 file '%2' has a named merge ('%3') but no parent set -- ignored, but should be reported to the MAME developers as a possible XML bug of the respective driver ++ INFORMAÇÃO: o arquivo %1 '%2' tem uma mesclagem ('%3'), mas, não há um conjunto principal -- ignorado, mas deveria ser reportado aos desenvolvedores do MAME como um possível bug no XML do driver ++ ++ ++ ++ Update - %p% ++ Atualiza - %p% ++ ++ ++ ++ CHD manager: updating CHD (v%1 -> v%2) ++ Gerenciador de CHD: atualizando o CHD (v%1 -> v%2) ++ ++ ++ ++ CHD manager: terminating external process ++ Gerenciador de CHD: encerrando o processo externo ++ ++ ++ ++ ++ CHD manager: CHD file integrity is good ++ Gerenciador de CHD: a integridade do arquivo CHD é boa ++ ++ ++ ++ CHD manager: WARNING: CHD file integrity is bad ++ Gerenciador de CHD: AVISO: a integridade do arquivo CHD é ruim ++ ++ ++ ++ CHD manager: replacing CHD ++ Gerenciador de CHD: trocando o CHD ++ ++ ++ ++ Copy ++ Copiar ++ ++ ++ ++ CHD manager: CHD replaced ++ Gerenciador de CHD: CHD trocado ++ ++ ++ ++ CHD manager: FATAL: failed to replace CHD -- updated CHD preserved as '%1', please copy it to '%2' manually! ++ Gerenciador de CHD: FATAL: houve uma falha ao trocar o CHD -- o CHD foi preservado como '%1', copie-o manualmente para '%2'! ++ ++ ++ ++ CHD manager: cleaning up ++ Gerenciador de CHD: limpando ++ ++ ++ ++ ++ WARNING: can't read CHD header information ++ AVISO: foi impossível ler a informação do cabeçalho do CHD ++ ++ ++ ++ WARNING: found '%1' but can't read from it although permissions seem okay - check file integrity ++ AVISO: encontrou '%1', mas, é impossível ler embora as permissões pareçam corretas -- verifique a integridade do arquivo ++ ++ ++ ++ ++ ++ WARNING: found '%1' but can't read from it - check permission ++ AVISO: encontrou '%1', mas, é impossível ler - verifique as permissões ++ ++ ++ ++ WARNING: CHD file '%1' not found ++ AVISO: o arquivo CHD '%1' não foi encontrado ++ ++ ++ ++ ++ size of '%1' from '%2' is greater than allowed maximum -- skipped ++ tamanho de '%1' de '%2' é maior do que o máximo permitido -- ignorado ++ ++ ++ ++ WARNING: unable to decompress '%1' from '%2' - check file integrity ++ AVISO: não foi possível descomprimir o '%1' de '%2' - verifique a integridade do arquivo ++ ++ ++ ++ ++ WARNING: found '%1' but can't open it for decompression - check file integrity ++ AVISO: foi encontrado '%1', mas, não é possível abrir para a descompressão - verifique a integridade do arquivo ++ ++ ++ ++ ++ KB ++ KB ++ ++ ++ ++ ++ ++ MB ++ MB ++ ++ ++ ++ ++ GB ++ GB ++ ++ ++ ++ TB ++ TB ++ ++ ++ ++ Choose output directory ++ Escolha o diretório de destino ++ ++ ++ ++ Choose additional ROM path ++ Escolha o caminho adicional da ROM ++ ++ ++ ++ set rewriter: WARNING: can't rewrite set '%1', output path is not a directory ++ reconstrutor do conjunto: AVISO: foi impossível reescrever o conjunto '%1', o caminho da saída não é um diretório ++ ++ ++ ++ ++ set rewriter: WARNING: can't rewrite set '%1', output path is not writable ++ reconstrutor do conjunto: AVISO: foi impossível reescrever o conjunto '%1', o caminho da saída não tem permissão de escrita ++ ++ ++ ++ set rewriter: WARNING: can't rewrite set '%1', output path does not exist ++ reconstrutor do conjunto: AVISO: foi impossível reescrever o conjunto '%1', o caminho da saída não existe ++ ++ ++ ++ set rewriter: WARNING: can't rewrite set '%1', output path is empty ++ reconstrutor do conjunto: AVISO: foi impossível reescrever o conjunto '%1', o caminho da saída não está vazio ++ ++ ++ ++ space-efficient ++ eficiência do espaço ++ ++ ++ ++ self-contained ++ auto contido ++ ++ ++ ++ set rewriter: rewriting %1 set '%2' to '%3' ++ reconstrutor do conjunto: reescrevendo o conjunto %1 '%2' para '%3' ++ ++ ++ ++ set rewriter: skipping '%1' with CRC '%2' from '%3' as '%4' ++ reconstrutor do conjunto: ignorando o '%1' com CRC '%2' de '%3' como '%4' ++ ++ ++ ++ ++ set rewriter: FATAL: can't load '%1' with CRC '%2' from '%3', aborting ++ reconstrutor do conjunto: FATAL: foi impossível carregar o '%1' com CRC '%2' de '%3', abortando ++ ++ ++ ++ ++ set rewriter: WARNING: can't load '%1' with CRC '%2' from '%3', ignoring this file ++ reconstrutor do conjunto: AVISO: foi impossível carregar o '%1' com CRC '%2' de '%3', ignorando este arquivo ++ ++ ++ ++ set rewriter: writing new %1 set '%2' in '%3' ++ reconstrutor do conjunto: escrevendo um novo conjunto %1 '%2' em '%3' ++ ++ ++ ++ Writing '%1' - %2 ++ Escrevendo '%1' - %2 ++ ++ ++ ++ ++ ++ set rewriter: new %1 set '%2' in '%3' successfully created ++ reconstrutor do conjunto: um novo conjunto %1 '%2' em '%3' foi criado com sucesso ++ ++ ++ ++ ++ ++ set rewriter: FATAL: failed to create new %1 set '%2' in '%3' ++ reconstrutor do conjunto: FATAL: houve uma falha ao criar um novo conjunto %1 '%2' em '%3' ++ ++ ++ ++ set rewriter: done (rewriting %1 set '%2' to '%3') ++ reconstrutor do conjunto: feito (reescrevendo o conjunto %1 '%2' para '%3') ++ ++ ++ ++ ++ Data files (*.dat) ++ Arquivos de dados (*.dat) ++ ++ ++ ++ FATAL: can't open data file '%1' for reading ++ FATAL: foi impossível abrir o arquivo de dados '%1' para leitura ++ ++ ++ ++ Exporting ++ Exportando ++ ++ ++ ++ Created by QMC2 v%1 ++ Criado pelo QMC2 v%1 ++ ++ ++ ++ FATAL: can't open data file '%1' for writing ++ FATAL: foi impossível abrir arquivo de dados '%1' para escrita ++ ++ ++ ++ set rewriter: writing '%1' (size: %2) ++ reconstrutor do conjunto: escrevendo o '%1' (tamanho: %2) ++ ++ ++ ++ set rewriter: WARNING: failed to write '%1' ++ reconstrutor do conjunto: AVISO: houve uma falha ao escrever '%1' ++ ++ ++ ++ Created by QMC2 v%1 (%2) ++ Criado pelo QMC2 v%1 (%2) ++ ++ ++ ++ ++ ++ ROMAlyzer ++ ROMAlyzer ++ ++ ++ ++ Start / stop analysis ++ Inicia / para a análise ++ ++ ++ ++ Pause / resume active analysis ++ Pausa / continua a análise em andamento ++ ++ ++ ++ Analysis report ++ Relatório das análises ++ ++ ++ ++ ++ Merge ++ Mesclado ++ ++ ++ ++ ++ Type ++ Tipo ++ ++ ++ ++ ++ Emu status ++ Condição do emulador ++ ++ ++ ++ ++ File status ++ Condição do arquivo ++ ++ ++ ++ Size ++ Tamanho ++ ++ ++ ++ ++ CRC ++ CRC ++ ++ ++ ++ ++ ++ MD5 ++ MD5 ++ ++ ++ ++ Log ++ Registro ++ ++ ++ ++ Analysis log ++ Registro das análises ++ ++ ++ ++ Search string ++ Termo da busca ++ ++ ++ ++ Search string forward ++ Procura pelo termo para frente ++ ++ ++ ++ &Forward ++ &Frente ++ ++ ++ ++ Search string backward ++ Procura o termo para trás ++ ++ ++ ++ Enter short names / IDs of sets to be analyzed - wildcards allowed, use space as delimiter for multiple sets or search patterns ++ Especifique os nomes / IDs dos conjuntos que serão analisados - os coringas são permitidos, use o espaço como um delimitador para os diversos conjuntos ou padrões de busca ++ ++ ++ ++ Specify sets to analyze ++ Especifique os conjuntos que serão analisados ++ ++ ++ ++ Tools menu ++ Menu de ferramentas ++ ++ ++ ++ &Backward ++ &Trás ++ ++ ++ ++ Save the current log contents to a file ++ Salva o conteúdo atual do registro para um arquivo ++ ++ ++ ++ Enter search string ++ Insira o termo da busca ++ ++ ++ ++ Settings ++ Configurações ++ ++ ++ ++ Enable CHD manager (may be slow) ++ Ativa o gerenciador de CHD (pode ser lento) ++ ++ ++ ++ CHD manager (chdman) ++ Gerenciador de CHD (chdman) ++ ++ ++ ++ CHD manager executable file (read and execute) ++ Arquivo executável do gerenciador de CHD (ler e executar) ++ ++ ++ ++ Browse CHD manager executable file ++ Procura pelo arquivo executável do gerenciador de CHDs ++ ++ ++ ++ Temporary working directory ++ Diretório temporário de trabalho ++ ++ ++ ++ Verify CHDs ++ Verifica os CHDs ++ ++ ++ ++ Update CHDs ++ Atualiza os CHDs ++ ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Paths</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Caminhos</span></p></body></html> ++ ++ ++ ++ Good dumps only ++ Somente as imagens boas ++ ++ ++ ++ If set, analysis output is appended (otherwise the report is cleared before the analysis) ++ Se selecionado, a análise gerada será adicionada (senão o relatório será limpo antes da análise) ++ ++ ++ ++ Calculate CRC-32 check-sum ++ Calcula o check-sum CRC-32 ++ ++ ++ ++ Automatically expand file info ++ Automaticamente expanda as informações do arquivo ++ ++ ++ ++ Rewrite sets while analyzing them (otherwise sets will only be rewritten on demand / through the context menu) ++ Reescreve os conjuntos enquanto eles são analisados (caso contrário, os conjuntos serão reescritos apenas sob demanda ou pelo menu de contexto) ++ ++ ++ ++ Self-contained ++ Auto contido ++ ++ ++ ++ Level ++ Nível ++ ++ ++ ++ Specify an additional (source) ROM path used when the set rewriter is active ++ Especifique um caminho adicional para a ROM (fonte) adicional usado quando o reconstrutor do conjunto estiver ativo ++ ++ ++ ++ Use the following additional ROM path ++ Use o seguinte caminho adicional da ROM ++ ++ ++ ++ Browse additional ROM path ++ Procura pelo caminho adicional da ROM ++ ++ ++ ++ Open / close the scanner log window ++ Abre / fecha a janela do registro do exame ++ ++ ++ ++ ++ Open log ++ Abrir o registro ++ ++ ++ ++ File name ++ Nome do arquivo ++ ++ ++ ++ Select the check-sum type ++ Seleciona o tipo do check-sum ++ ++ ++ ++ Calculate MD5 hash ++ Calcula o MD5 ++ ++ ++ ++ ++ ++ unlimited ++ ilimitado ++ ++ ++ ++ Maximum number of lines in log (0 = no limit) ++ Tamanho máximo das linhas no registro (0 = ilimitado) ++ ++ ++ ++ lines ++ linhas ++ ++ ++ ++ Temporary directory used by the CHD manager (make sure it has enough room to store the biggest CHDs) ++ Diretório temporário usado pelo CHD manager (garanta que haja espaço suficiente para armazenar os maiores CHDs) ++ ++ ++ ++ Browse temporary directory used by the CHD manager ++ Escolhe o diretório temporário que será usado pelo gerenciador de CHD ++ ++ ++ ++ General analysis flags and limits ++ Limites e sinalizadores da análise geral ++ ++ ++ ++ File size ++ Tamanho do arquivo ++ ++ ++ ++ Maximum size (in MB) of files to be loaded, files are skipped when they are bigger than that (0 = no limit) ++ Tamanho máximo (em MB) dos arquivos que serão carregados, os arquivos são ignorados quando forem maiores que o limite (0 = ilimitado) ++ ++ ++ ++ Log size ++ Tamanho registro ++ ++ ++ ++ Reports ++ Relatórios ++ ++ ++ ++ Maximum number of reported sets held in memory (0 = no limit) ++ quantidade máxima dos conjuntos mantidos na memória (0 = sem limite) ++ ++ ++ ++ Output directory ++ Diretório de destino ++ ++ ++ ++ Output path for the set rewriter (WARNING: existing files will be overwritten!) -- you should NEVER use one of your primary ROM paths here!!! ++ Caminho de saída para o reconstrutor dos conjuntos (AVISO: os arquivos já existentes serão substituídos!) - você NUNCA deveria usar um dos seus caminhos das ROMs aqui!!! ++ ++ ++ ++ Browse output path for the set rewriter ++ Escolha o caminho de saída para o reconstrutor dos conjuntos ++ ++ ++ ++ Rewrite while analyzing ++ Faça a substituição durante a análise ++ ++ ++ ++ Select the ZIP compression level (0 = lowest / fastest, 9 = highest / slowest) ++ Escolha o nível de compressão para os arquivos ZIP (0 = menor / mais rápido, 9 = melhor / mais lento) ++ ++ ++ ++ ++ Unique CRCs ++ CRCs únicos ++ ++ ++ ++ Addl. ROM path ++ Addl. Caminho das ROMs ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Reproduction</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Reprodução</span></p></body></html> ++ ++ ++ ++ Automatically expand calculated check-sums ++ Expande automaticamente o check-sum que forem calculados ++ ++ ++ ++ Enable check-sum database ++ Ativa o banco de dados do check-sum ++ ++ ++ ++ List of scanned paths ++ Lista os caminhos já examinados ++ ++ ++ ++ Add a path ++ Adiciona um caminho ++ ++ ++ ++ Remove selected paths ++ Remove os caminhos que foram selecionados ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Scanned paths</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Caminhos examinados</span></p></body></html> ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Scanner control</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Controle do exame</span></p></body></html> ++ ++ ++ ++ Start / stop scanner ++ Inicia / para o exame ++ ++ ++ ++ ++ Start scanner ++ Inicia o exame ++ ++ ++ ++ Database / scanner status ++ Estado do banco de dados / exame ++ ++ ++ ++ Automatically rewrite sets only when all their dumps are 'good' ++ Reescreve conjuntos automaticamente somente quando todas as suas imagens são 'boas' ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Status</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Condição</span></p></body></html> ++ ++ ++ ++ Path to the check-sum database file ++ Caminho para o arquivo do banco de dados do check-sum ++ ++ ++ ++ Browse path to the check-sum database file ++ Procura pelo caminho do arquivo do banco de dados do check-sum ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Database path</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Caminho do banco de dados</span></p></body></html> ++ ++ ++ ++ Pause / resume scanner ++ Pausa / continua o exame ++ ++ ++ ++ Specify software-lists to be analyzed - wildcards allowed, use space as delimiter for multiple software-lists or search patterns ++ Especifique as listas dos programas que serão analisados - os caracteres coringa são permitidos, use espaço como um delimitador para as diversas listas dos programas ou use os padrões de busca ++ ++ ++ ++ Specify software-lists to analyze ++ Especifique as listas dos programas que serão analisados ++ ++ ++ ++ Set / File ++ Conjunto / Arquivo ++ ++ ++ ++ Create sets that do not need parent sets (otherwise create space-efficient sets which are merged upon loading, recommended) ++ Cria os conjuntos que não precisam dos conjuntos principais (caso contrário, cria conjuntos menores que são mesclados ao carregar, recomendado) ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Enable set rewriter / collection rebuilder ++ Ativa o reconstrutor do conjunto / reconstrutor da coleção ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Collection rebuilder specific flags</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Sinalizadores específicos para o reconstrutor da coleção</span></p></body></html> ++ ++ ++ ++ When enabled, QMC2 will add a comment to the ZIP containing its version and the archive creation- or fixing-date ++ Quando estiver ativado, o QMC2 adicionará um comentário no ZIP contendo a versão e a criação do arquivo - ou uma data fixa ++ ++ ++ ++ Add ZIP comment ++ Adiciona um comentário ao ZIP ++ ++ ++ ++ Enabling this will speed up hash lookups during rebuild operations (requires about 35 MB per 100K hash keys which are pre-loaded from the database) ++ Ativando isto, haverá uma melhora na velocidade na procura dos hashes durante as operações de reconstrução (requer aproximadamente 35 MB para cada 100K de chaves que são pré-carregadas a partir do banco de dados) ++ ++ ++ ++ Analyzer ++ Analisador ++ ++ ++ ++ Use hash cache ++ Usar o cache de hashes ++ ++ ++ ++ In dry run mode the collection rebuilder will not create any output (good for checking "what if" and to quickly create a fix.dat) ++ No modo de ensaio, o reconstrutor da coleção não gera nada (bom para verificar o "e se" e para criar um fix.dat) ++ ++ ++ ++ Dry run mode ++ Modo ensaio ++ ++ ++ ++ Select how CHDs are handled ++ Seleciona como os CHD's serão gerenciados ++ ++ ++ ++ Don't reproduce ++ Não reproduzir ++ ++ ++ ++ Create hard links ++ Cria vínculos ++ ++ ++ ++ Create symbolic links ++ Cria links simbólicos ++ ++ ++ ++ Copy files ++ Copia arquivos ++ ++ ++ ++ Move files ++ Move arquivos ++ ++ ++ ++ Select the reproduction type ++ Selecione o tipo de reprodução ++ ++ ++ ++ ZIPs (built-in) ++ ZIPs (nativo) ++ ++ ++ ++ ZIPs (libarchive) ++ ZIPs (libarchive) ++ ++ ++ ++ Sub-directories ++ Subdiretórios ++ ++ ++ ++ ++ Compression ++ Compressão ++ ++ ++ ++ Enable / disable ZIP compression ++ Ativa / Desativa a compressão ZIP ++ ++ ++ ++ On ++ Ligado ++ ++ ++ ++ Off ++ Desligado ++ ++ ++ ++ <b>There are no options for this reproduction type</b> ++ <b>Não existem opções para esse tipo de reprodução</b> ++ ++ ++ ++ ++ Select machine in machine list if selected in analysis report? ++ Seleciona a máquina na lista das máquinas caso seja selecionada no relatório da análise? ++ ++ ++ ++ ++ Automatically scroll to the currently analyzed machine ++ Ir automaticamente para a máquina analisada atualmente ++ ++ ++ ++ Create backups whenever modifying / overwriting files by copying them to the specified folder ++ Cria os backups sempre que modificar / substituir os arquivos, copiando-os para uma determinada pasta ++ ++ ++ ++ Create backups in this folder ++ Cria os backups nesta pasta ++ ++ ++ ++ Backup folder (write) ++ Pasta de backup (escrita) ++ ++ ++ ++ Specify backup folder ++ Determine pasta dos backup ++ ++ ++ ++ Browse the backup folder ++ Procura pela pasta dos backup ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Backup settings</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Configurações do backup</span></p></body></html> ++ ++ ++ ++ ++ ++ Pause ++ Pausa ++ ++ ++ ++ If enabled, all scanned members of ZIP/7z archives will be uncompressed in order to recalculate their check-sums (recommended but slow) - otherwise it will be relied on the header check-sums (not recommended but fast) ++ Se ativado, todos os membros examinados dos arquivos ZIP/7z serão descompactados para que o check-sum sejam feitos (recomendado, mas, é lento) - caso contrário, o check-sum do cabeçalho será utilizado (não recomendado, mas, é rápido) ++ ++ ++ ++ If enabled, scanned hashes are cached during the scan which will improve scanning speed enormously but will consume additional memory (about 35 MB per 100K scanned objects) ++ Se ativado, os hashes examinados serão armazenados em cache durante o exame que aumenta muito a velocidade de verificação, mas, consumirá um pouco mais de memória (35MB para cada 100K de objetos examinados) ++ ++ ++ ++ Cache ++ Cache ++ ++ ++ ++ Use libarchive instead of built-in decompressors ++ Usar o libarchive em vez dos descompactadores embutidos ++ ++ ++ ++ Check-sum finder ++ Localizador de check-sum ++ ++ ++ ++ Check-sum to be searched ++ O check-sum que será buscado ++ ++ ++ ++ Enter check-sum ++ Insira o check-sum ++ ++ ++ ++ Indicates if the check-sum is available in the database (green) or not (red) ++ Indica se o código de verificação está disponível no banco de dados (verde) ou não (vermelho) ++ ++ ++ ++ Search for the check-sum now ++ Busca pelo check-sum agora ++ ++ ++ ++ Search ++ Buscar ++ ++ ++ ++ Search results for the current check-sum ++ Resultados da busca para o check-sum atual ++ ++ ++ ++ ID ++ ID ++ ++ ++ ++ Status ++ Estado ++ ++ ++ ++ Path ++ Caminho ++ ++ ++ ++ ROM path cleaner ++ Limpador do caminho da ROM ++ ++ ++ ++ ++ ROM collection rebuilder ++ Reconstrutor da coleção dos programas ++ ++ ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Flags</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Sinalizadores</span></p></body></html> ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Expansion</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Expansão</span></p></body></html> ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Hashes</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Hashes</span></p></body></html> ++ ++ ++ ++ <html><head/><body><p><span style=" font-weight:600;">Limits</span></p></body></html> ++ <html><head/><body><p><span style=" font-weight:600;">Limites</span></p></body></html> ++ ++ ++ ++ Append ++ Acrescentar ++ ++ ++ ++ File info ++ Informação do arquivo ++ ++ ++ ++ Calculate SHA-1 hash ++ Calcule o SHA-1 ++ ++ ++ ++ ++ ++ ++ ++ SHA-1 ++ SHA-1 ++ ++ ++ ++ Scroll ++ Rolar ++ ++ ++ ++ Check-sums ++ Check-sums ++ ++ ++ ++ ++ CRC-32 ++ CRC-32 ++ ++ ++ ++ Select ++ Seleciona ++ ++ ++ ++ Abort reproduction when an error occurs (recommended) ++ Aborta a reprodução quando houver um erro (recomendado) ++ ++ ++ ++ Abort on error ++ Aborta quando houver erros ++ ++ ++ ++ CHD handling ++ Gerenciamento dos CHDs ++ ++ ++ ++ ++ When a set contains multiple files with the same CRC, should the produced ZIP include all files individually (recommended) or just the first one? ++ Quando um conjunto possui diversos arquivos com o mesmo CRC, o arquivo ZIP produzido deve incluir todos os arquivos (recomendado) ou apenas o primeiro? ++ ++ ++ ++ If enabled, only files that were changed since / ignored in the last scan will be scanned again, updating the database - otherwise the database will be reinitialized ++ Se ativado, apenas arquivos que foram alterados / ignorados no último exame serão examinados novamente, atualizando o banco de dados - caso contrário, a base será reinicializada ++ ++ ++ ++ Incremental ++ Incremental ++ ++ ++ ++ Deep ++ Profundo ++ ++ ++ ++ Analyze all selected sets in order to qualify them ++ Analisa todos os conjuntos selecionado para qualificá-los ++ ++ ++ ++ Analyze selected sets ++ Analisa os conjuntos selecionados ++ ++ ++ ++ Close ROMAlyzer ++ Fecha o ROMAlyzer ++ ++ ++ ++ &Close ++ &Fechar ++ ++ ++ ++ Current ROMAlyzer status ++ Estado atual do ROMAlyzer ++ ++ ++ ++ Analysis progress indicator ++ Indicador do progresso da análise ++ ++ ++ ++ File I/O progress indicator ++ indicador do progresso de E/S do arquivo ++ ++ ++ ++ ROMStatusExporter ++ ++ ++ ++ ++ Confirm ++ Confirma ++ ++ ++ ++ ++ ++ Overwrite existing file? ++ Substituir o arquivo já existente? ++ ++ ++ ++ exporting ROM status in ASCII format to '%1' ++ exportando a condição da ROM no formato ASCII para '%1' ++ ++ ++ ++ WARNING: can't open ASCII export file '%1' for writing, please check permissions ++ AVISO: foi impossível abrir o arquivo de exportação ASCII '%1'para escrita, verifique as permissões ++ ++ ++ ++ exporting ROM status in ASCII format to clipboard ++ exportando a condição da ROM em formato ASCII para a área de transferência ++ ++ ++ ++ ++ ++ ++ Emulator ++ Emulador ++ ++ ++ ++ ++ ++ ++ Date ++ Data ++ ++ ++ ++ ++ ++ ++ Time ++ Tempo ++ ++ ++ ++ ++ ++ ++ Correct ++ Correto ++ ++ ++ ++ ++ ++ ++ Total sets ++ Conjuntos totais ++ ++ ++ ++ All formats ++ Todos os formatos ++ ++ ++ ++ ++ ++ ++ Mostly correct ++ Maioria correto ++ ++ ++ ++ ++ ++ ++ Incorrect ++ Incorreto ++ ++ ++ ++ ++ ++ ++ Not found ++ Não encontrado ++ ++ ++ ++ ++ ++ ++ Unknown ++ Desconhecido ++ ++ ++ ++ ++ ++ ++ ROM Status Export - created by QMC2 %1 ++ Exportação da condição da ROM - criado pelo QMC2 %1 ++ ++ ++ ++ ++ ++ SDLMAME ++ SDLMAME ++ ++ ++ ++ ++ ++ MAME ++ MAME ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ ++ ++ Overall ROM Status ++ Estado geral da ROM ++ ++ ++ ++ ++ ++ Detailed ROM Status ++ Estado detalhado da ROM ++ ++ ++ ++ sorting, filtering and analyzing export data ++ ordenando, filtrando e analisando a exportação dos dados ++ ++ ++ ++ ++ ++ ++ ++ ROM types ++ Tipo das ROMs ++ ++ ++ ++ ++ ++ ++ correct ++ correto ++ ++ ++ ++ ++ ++ ++ mostly correct ++ maioria correto ++ ++ ++ ++ ++ ++ ++ incorrect ++ incorreto ++ ++ ++ ++ ++ ++ ++ not found ++ não encontrado ++ ++ ++ ++ done (sorting, filtering and analyzing export data) ++ feito (ordenando, filtrando e analisando a exportação dos dados) ++ ++ ++ ++ ++ ++ writing export data ++ escrevendo os dados da exportação ++ ++ ++ ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ ++ ++ ++ Description ++ Descrição ++ ++ ++ ++ ++ ++ ++ ++ Year ++ Ano ++ ++ ++ ++ ++ ++ ++ ++ Manufacturer ++ Fabricante ++ ++ ++ ++ ++ ++ done (writing export data) ++ feito (escrevendo os dados da exportação) ++ ++ ++ ++ done (exporting ROM status in ASCII format to clipboard) ++ feito (exportando a condição da ROM em formato ASCII para a área de transferência) ++ ++ ++ ++ done (exporting ROM status in ASCII format to '%1') ++ feito (exportando a condição da ROM no formato ASCII para '%1') ++ ++ ++ ++ exporting ROM status in CSV format to '%1' ++ exportando a condição da ROM no formato CSV para '%1' ++ ++ ++ ++ WARNING: can't open CSV export file '%1' for writing, please check permissions ++ AVISO: foi impossível abrir o arquivo de exportação CSV '%1' para escrita, verifique as permissões ++ ++ ++ ++ exporting ROM status in CSV format to clipboard ++ exportando a condição da ROM no formato CSV para a área de transferência ++ ++ ++ ++ ++ sorting and filtering export data ++ ordenando e filtrando os dados da exportação ++ ++ ++ ++ ++ done (sorting and filtering export data) ++ feito (ordenando e filtrando os dados da exportação) ++ ++ ++ ++ done (exporting ROM status in CSV format to clipboard) ++ feito (exportando a condição da ROM no formato CSV para a área de transferência) ++ ++ ++ ++ done (exporting ROM status in CSV format to '%1') ++ feito (exportando a condição da ROM no formato CSV para '%1') ++ ++ ++ ++ exporting ROM status in HTML format to '%1' ++ exportando a condição da ROM no formato HTML para '%1' ++ ++ ++ ++ WARNING: can't open HTML export file '%1' for writing, please check permissions ++ AVISO: foi impossível abrir o arquivo de exportação para HTML '%1' para escrita, verifique as permissões ++ ++ ++ ++ exporting ROM status in HTML format to clipboard ++ exportando a condição da ROM no formato HTML para a área de transferência ++ ++ ++ ++ done (exporting ROM status in HTML format to clipboard) ++ feito (exportando a condição da ROM no formato HTML para a área de transferência) ++ ++ ++ ++ done (exporting ROM status in HTML format to '%1') ++ feito (exportando a condição da ROM no formato HTML para '%1') ++ ++ ++ ++ Choose ASCII export file ++ Escolha o arquivo de exportação em ASCII ++ ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose CSV export file ++ Escolha o arquivo de exportação em CSV ++ ++ ++ ++ Choose HTML export file ++ Escolha o arquivo de exportação em HTML ++ ++ ++ ++ gamelist is not ready, please wait ++ a lista dos jogos não está pronta, aguarde ++ ++ ++ ++ ROM status export ++ Exportação da condição da ROM ++ ++ ++ ++ ++ Select output format ++ Selecione o formato ++ ++ ++ ++ ASCII ++ ASCII ++ ++ ++ ++ CSV ++ CSV ++ ++ ++ ++ HTML ++ HTML ++ ++ ++ ++ Exported ROM states ++ Condição da ROM que foram exportados ++ ++ ++ ++ Export ROM state C (correct)? ++ Exporta a ROM com estado C (correto)? ++ ++ ++ ++ Export ROM state M (mostly correct)? ++ Exporta a ROM com estado M (maioria correto)? ++ ++ ++ ++ Export ROM state I (incorrect)? ++ Exporta a ROM com estado I (incorreto)? ++ ++ ++ ++ Export ROM state N (not found)? ++ Exporta a ROM com estado N (não encontrado)? ++ ++ ++ ++ Export ROM state U (unknown)? ++ Exporta a ROM com estado U (desconhecido)? ++ ++ ++ ++ Sort criteria ++ Critério de ordenação ++ ++ ++ ++ Select sort criteria ++ Selecione o critério de ordenação ++ ++ ++ ++ ++ ++ ++ ++ ROM status ++ Condição da ROM ++ ++ ++ ++ Machine description ++ Descrição da máquina ++ ++ ++ ++ Machine name ++ Nome da máquina ++ ++ ++ ++ ++ ++ ++ ++ Players ++ Jogadores ++ ++ ++ ++ ++ ++ ++ ++ Driver status ++ Condição geral do controlador ++ ++ ++ ++ Sort order ++ Ordem de classificação ++ ++ ++ ++ Select sort order ++ Selecione a ordem de classificação ++ ++ ++ ++ Ascending ++ Ascendente ++ ++ ++ ++ Descending ++ Descendente ++ ++ ++ ++ Include some header information in export ++ Inclui o cabeçalho na exportação ++ ++ ++ ++ Include header ++ Inclui o cabeçalho ++ ++ ++ ++ Include statistical overview of the ROM state in export ++ Inclui a estatística geral da condição da ROM na exportação ++ ++ ++ ++ Include ROM statistics ++ Inclui as estatísticas das ROMs ++ ++ ++ ++ Export to the system clipboard instead of a file ++ Exporta para a área de transferência em vez de um arquivo ++ ++ ++ ++ Export to clipboard ++ Exporta para a área de transferência ++ ++ ++ ++ Overwrite existing files without asking what to do ++ Substitui os arquivos já existentes sem perguntar ++ ++ ++ ++ Export only favorite sets? ++ Exporta apenas os conjuntos no favoritos? ++ ++ ++ ++ Only favorite sets ++ Apena os favoritos ++ ++ ++ ++ Export only sets that are tagged? ++ Exporta apenas os conjuntos já etiquetados? ++ ++ ++ ++ Only tagged sets ++ Apena aqueles com etiquetas ++ ++ ++ ++ Overwrite blindly ++ Não perguntar ao substituir ++ ++ ++ ++ Browse ASCII export file ++ Procura pelo arquivo de exportação ASCII ++ ++ ++ ++ ASCII file ++ Arquivo ASCII ++ ++ ++ ++ ASCII export file ++ Arquivo de exportação ASCII ++ ++ ++ ++ Column width ++ Tamanho da coluna ++ ++ ++ ++ Maximum column width for ASCII export (0 = unlimited) ++ Tamanho máximo da coluna para a exportação ASCII (0 = ilimitado) ++ ++ ++ ++ unlimited ++ ilimitado ++ ++ ++ ++ Browse CSV export file ++ Procura pelo arquivo de exportação CSV ++ ++ ++ ++ CSV file ++ Arquivo CSV ++ ++ ++ ++ CSV export file ++ Arquivo de exportação CSV ++ ++ ++ ++ Separator ++ Separador ++ ++ ++ ++ Field separator for CSV export ++ Separador do campo para a exportação em CSV ++ ++ ++ ++ ; ++ ; ++ ++ ++ ++ Delimiter ++ Delimitador ++ ++ ++ ++ Text delimiter for CSV export ++ Delimitador do texto para a exportação em CSV ++ ++ ++ ++ " ++ " ++ ++ ++ ++ Browse HTML export file ++ Procura pelo arquivo de exportação HTML ++ ++ ++ ++ HTML file ++ Arquivo HTML ++ ++ ++ ++ HTML export file ++ Arquivo de exportação HTML ++ ++ ++ ++ Border width ++ Tamanho da borda ++ ++ ++ ++ Border line width for tables (0 = no border) ++ Tamanho da borda para as tabelas (0 = sem borda) ++ ++ ++ ++ Export now! ++ Exportar agora! ++ ++ ++ ++ &Export ++ &Exportar ++ ++ ++ ++ Close ROM status export ++ Fecha a exportação da condição da ROM ++ ++ ++ ++ &Close ++ &Fechar ++ ++ ++ ++ Export progress indicator ++ Indicador do progresso da exportação ++ ++ ++ ++ %p% ++ %p% ++ ++ ++ ++ RomPathCleaner ++ ++ ++ ROM path cleaner ++ Limpador do caminho da ROM ++ ++ ++ ++ Start / stop check ++ Inicia / para a verificação ++ ++ ++ ++ ++ Start check ++ Inicia a verificação ++ ++ ++ ++ Mode switch ++ Escolha do modo ++ ++ ++ ++ Delete obsolete and invalid files ++ Excluí os arquivos inválidos e obsoletos ++ ++ ++ ++ Move files to the backup folder ++ Move os arquivos para a pasta de backup ++ ++ ++ ++ Dry run (don't change anything) ++ Ensaio (não altera nada) ++ ++ ++ ++ Check statistics ++ Estatísticas da verificação ++ ++ ++ ++ Checked path ++ Caminho verificado ++ ++ ++ ++ Pause / resume check ++ Pausa / continua a verificação ++ ++ ++ ++ ++ ++ Pause ++ Pausa ++ ++ ++ ++ Enable log output ++ Ativa a geração do registro ++ ++ ++ ++ Enable log ++ Ativa o registro ++ ++ ++ ++ Log size ++ Tamanho do registro ++ ++ ++ ++ Maximum number of lines in log (0 = no limit) ++ Tamanho máximo das linhas no registro (0 = ilimitado) ++ ++ ++ ++ unlimited ++ ilimitado ++ ++ ++ ++ lines ++ linhas ++ ++ ++ ++ Check progress indicator ++ Indicador do progresso de verificação ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ Clear log ++ Limpa o registro ++ ++ ++ ++ Clear ++ Limpar ++ ++ ++ ++ Mode ++ Modo ++ ++ ++ ++ Choose the path which will be checked ++ Escolha o caminho que será verificado ++ ++ ++ ++ Current ROM path ++ Caminho da ROM atual ++ ++ ++ ++ Select path... ++ Selecione o caminho... ++ ++ ++ ++ Stop check ++ Para a verificação ++ ++ ++ ++ Resume ++ Continua ++ ++ ++ ++ Files processed ++ Arquivos processados ++ ++ ++ ++ Renamed files ++ Arquivos renomeados ++ ++ ++ ++ Obsolete ROMs / disks ++ ROMs / discos obsoletos ++ ++ ++ ++ Invalid files ++ Arquivos inválidos ++ ++ ++ ++ Select path to be checked ++ Selecione o caminho que será verificado ++ ++ ++ ++ RomPathCleanerThread ++ ++ ++ cleaner thread started ++ o processo de limpeza foi iniciado ++ ++ ++ ++ waiting for work ++ esperando pelo trabalho ++ ++ ++ ++ check started ++ a verificação foi iniciada ++ ++ ++ ++ checking path '%1' ++ verificando o caminho '%1' ++ ++ ++ ++ reading directory tree ++ lendo a ramificação dos diretórios ++ ++ ++ ++ path contains %n file(s) ++ ++ ++ ++ ++ ++ ++ ++ Cleaning up path %1 / %2 ++ Limpando o caminho %1 / %2 ++ ++ ++ ++ check paused ++ a verificação foi pausada ++ ++ ++ ++ check resumed ++ a verificação foi retomada ++ ++ ++ ++ done (checking path '%1') ++ feito (verificando o caminho '%1') ++ ++ ++ ++ check finished ++ a verificação foi concluída ++ ++ ++ ++ total check time = %1, files processed = %2, renamed files = %3, obsolete ROMs = %4, obsolete disks = %5, invalid files = %6 ++ tempo total de verificação = %1, arquivos processados = %2, arquivos renomeados = %3, ROMs obsoletos = %4, discos obsoletos = %5, arquivos inválidos = %6 ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ cleaner thread ended ++ o processo de limpeza foi concluído ++ ++ ++ ++ RomStateFilter ++ ++ ++ ++ Toggle ROM state 'correct' ++ Alterna a condição da ROM 'correto' ++ ++ ++ ++ ++ Toggle ROM state 'unknown' ++ Alterna a condição da ROM 'desconhecido' ++ ++ ++ ++ ++ Toggle ROM state 'mostly correct' ++ Alterna a condição da ROM 'maioria correto' ++ ++ ++ ++ ++ Toggle ROM state 'not found' ++ Alterna a condição da ROM 'não encontrado' ++ ++ ++ ++ ++ Toggle ROM state 'incorrect' ++ Alterna a condição da ROM 'incorreto' ++ ++ ++ ++ State filter settings ++ Configurações do filtro da condição ++ ++ ++ ++ SetupWizard ++ ++ ++ QMC2 Setup Wizard ++ Assistente de configuração do QMC2 ++ ++ ++ ++ Choose the emulator's executable file ++ Escolha o executável do emulador ++ ++ ++ ++ <font size="4"> ++<p>In order to use QMC2 as a front end for an emulator, it needs to know the path to the emulator's executable file which you specify below.</p> ++<p>QMC2 supports official MAME and a number of its derivates. Therefore, the chosen file will be probed when clicking <i>Next</i>.</p> ++</font> ++ <font size="4"> ++<p>Para utilizar o QMC2 como um front end para um emulador, é preciso conhecer o caminho completo para o executável do emulador, definindo ele abaixo.</p> ++<p>O QMC2 é compatível com o MAME oficial e uma certa quantidade de variantes. Portanto, o arquivo escolhido será avaliado ao clicar em <i>Avançar</i>.</p> ++</font> ++ ++ ++ ++ <font size="4">Emulator executable file</font> ++ <font size="4">Arquivo do executável do emulador</font> ++ ++ ++ ++ Probing executable file ++ Avaliando o arquivo executável ++ ++ ++ ++ <font size="4">Identified as being MAME(-like)?</font> ++ <font size="4">Foi identificado como sendo o MAME(variante)?</font> ++ ++ ++ ++ <font size="4">Binary identifier hash:</font> ++ <font size="4">Hash de identificação do binário:</font> ++ ++ ++ ++ <font size="4">Version is supported?</font> ++ <font size="4">A versão é suportada?</font> ++ ++ ++ ++ <font size="4">Emulator ini-file location:</font> ++ <font size="4">Local do arquivo ini do emulador:</font> ++ ++ ++ ++ <font size="4">File modification date:</font> ++ <font size="4">Data de alteração do arquivo:</font> ++ ++ ++ ++ <font size="4">Supported non-device systems:</font> ++ <font size="4">Sistemas que não são dispositivos compatíveis:</font> ++ ++ ++ ++ <font size="4"> ++<p>The chosen emulator executable file is now probed to determine if QMC2 will be able to work with it.</p> ++<p>You can only continue when the checks below pass without errors.</p> ++</font> ++ <font size="4"> ++<p>O arquivo do executável do emulador já foi avaliado para determinar se o QMC2 poderá trabalhar com ele ou não.</p> ++<p>Só é possível continuar caso as verificações abaixo sejam concluídas sem erros.</p> ++</font> ++ ++ ++ ++ <font size="4">File is executable?</font> ++ <font size="4">O arquivo é um executável?</font> ++ ++ ++ ++ <font size="4">Front-end ini-file location:</font> ++ <font size="4">Local do arquivo ini do front-end:</font> ++ ++ ++ ++ Welcome to QMC2! ++ Bem-vindo ao QMC2! ++ ++ ++ ++ <font size="4">GUI style</font> ++ <font size="4">Estilo da interface</font> ++ ++ ++ ++ <font size="4">Language</font> ++ <font size="4">Idioma</font> ++ ++ ++ ++ <font size="4"> ++<p>This is either your first start of QMC2 or you're reconfiguring the basic settings.</p> ++<p>Please choose your GUI style and language below, then click <i>Next</i> to continue the guided setup. Clicking <i>Cancel</i> or pressing <i>Escape</i> at any point will exit the configuration wizard.</p> ++</font> ++ <font size="4"> ++<p>Esta é a sua primeira vez no QMC2 ou você está reconfigurando as principais configurações.</p> ++<p>Escolha o estilo e o idioma da interface abaixo e clique em <i>Avançar</i> para continuar o assistente de configuração. O assistente de configuração será encerrado a qualquer momento ao clicar em <i>Cancelar</i> ou ao pressionar <i>Esc</i>.</p> ++</font> ++ ++ ++ ++ Emulator executable file ++ Executável do emulador ++ ++ ++ ++ Browse emulator executable file ++ Procura pelo executável do emulador ++ ++ ++ ++ Import settings from ini-files ++ Importa a configuração a partir dos arquivos ini ++ ++ ++ ++ ++ Choose mame.ini ++ Selecione o mame.ini ++ ++ ++ ++ <font size="4"> ++<p>One or more ini-files were found in the previous step that can be used to import emulator and/or front-end settings. Decide below what should be done.</p> ++<p>You will be able to edit the most relevant emulator settings after this.</p> ++</font> ++ <font size="4"> ++<p>Um ou mais arquivos ini foram identificados no passo anterior e que podem ser importados e utilizados pela configuração do front-end. Decida abaixo o que deve ser feito.</p> ++<p>Depois disso, você poderá editar as configurações mais relevantes do emulador.</p> ++</font> ++ ++ ++ ++ ++ Choose ui.ini ++ Selecione o ui.ini ++ ++ ++ ++ Importing settings from ini-files ++ Importando a configuração a partir dos arquivos ini ++ ++ ++ ++ <font size="4"> ++<p>The chosen ini-files are now imported (please see the log below for details). You can proceed as soon as the import is done, regardless of possible errors.</p> ++</font> ++ <font size="4"> ++<p>Os arquivos ini escolhidos já foram importados (veja o registro abaixo para obter mais detalhes). Você pode prosseguir assim que a importação for concluída, independente dos possíveis erros.</p> ++</font> ++ ++ ++ ++ Browse working directory ++ Procura pelo diretório de trabalho ++ ++ ++ ++ Browse sample path ++ Procura pelo caminho das amostras (samples) ++ ++ ++ ++ Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) ++ O diretório de trabalho que é utilizado quando o emulador for executado (se vazio, o mesmo diretório de trabalho do QMC2 será usado) ++ ++ ++ ++ Browse hash path ++ Procura pelo caminho dos arquivos hash ++ ++ ++ ++ <font size="4">Working directory</font> ++ <font size="4">Diretório de trabalho</font> ++ ++ ++ ++ <font size="4"> ++<p>The basic setup is now complete!</p> ++<p>Settings will be stored and QMC2's main GUI will be launched as soon as you click <i>Finish</i>.</p> ++</font> ++ <font size="4"> ++<p>A configuração básica foi concluída!</p> ++<p>As configurações serão armazenadas e a interface principal do QMC2 será iniciada assim que você clicar em <i>Concluir</i>.</p> ++</font> ++ ++ ++ ++ <font size="4">Sample path</font> ++ <font size="4">Caminho das amostras</font> ++ ++ ++ ++ Adjust important emulator settings ++ Ajusta as configurações importantes do emulador ++ ++ ++ ++ <font size="4">Hash path</font> ++ <font size="4">Caminho para os arquivos hash</font> ++ ++ ++ ++ <font size="4"> ++<p>The settings below are actually optional, but you should specify as many of them as you can right now (of course, you can change these settings at any time later as well).</p> ++<p>If the emulator's <i>working directory</i> is not the base path to a standard installation (i.e. from an official MAME build) or your <i>ROM path</i> doesn't follow standard conventions, we <b>strongly recommend</b> that you specify the ROM path at least!</p> ++</font> ++ <font size="4"> ++<p>As configurações abaixo são totalmente opcionais, mas, você deve definir a maioria delas agora (é claro, você também pode alterar estas configurações a qualquer momento mais tarde).</p> ++<p>Se o <i>diretório de trabalho</i> do emulador não for o caminho principal numa instalação padrão (ou seja, de uma compilação oficial do MAME) ou seu <i>caminho da ROM</i> não seguir as configurações tradicionais, nós <b>recomendamos</b> que você informe pelo menos o caminho da ROM!</p> ++</font> ++ ++ ++ ++ <font size="4">ROM path</font> ++ <font size="4">Caminho da ROM</font> ++ ++ ++ ++ <p>Specifies a list of paths within which to find ROM- or disk-images.</p> ++<p>Multiple paths can be specified by separating them with semicolons (&lt;path1&gt;;&lt;path2&gt;;...).</p> ++<p>The default is ‘roms’ (that is, a folder named 'roms' in the emulator's working directory).</p> ++ <p>Especifica uma lista com os caminhos onde as imagens das ROMs ou dos discos serão encontrados.</p> ++<p>É possível definir vários caminhos separando-os com ponto e vírgula (&lt;caminho1&gt;;&lt;caminho2&gt;;...).</p> ++<p>O padrão é 'roms' (ou seja, uma pasta chamada 'roms' no diretório de trabalho do emulador).</p> ++ ++ ++ ++ Browse ROM path ++ Procura pelo caminho das ROMs ++ ++ ++ ++ <p>Specifies a list of paths within which to find software-list hash files.</p> ++<p>Multiple paths can be specified by separating them with semicolons (&lt;path1&gt;;&lt;path2&gt;;...).</p> ++<p>The default is ‘hash’ (that is, a folder named 'hash' in the emulator's working directory).</p> ++ <p>Especifica uma lista com os caminhos onde é possível encontrar os arquivos hash da lista de programa.</p> ++<p>É possível definir vários caminhos separando-os com ponto e vírgula (&lt;caminho1&gt;;&lt;caminho2&gt;;...).</p> ++<p>O padrão é 'hash' (ou seja, uma pasta chamada 'hash' no diretório de trabalho do emulador).</p> ++ ++ ++ ++ <p>Specifies a list of paths within which to find sample files.</p> ++<p>Multiple paths can be specified by separating them with semicolons (&lt;path1&gt;;&lt;path2&gt;;...).</p> ++<p>The default is ‘samples’ (that is, a folder named 'samples' in the emulator's working directory).</p> ++ <p>Especifica uma lista com os caminhos onde é possível encontrar os arquivos de amostra.</p> ++<p>É possível definir vários caminhos separando-os com ponto e vírgula (&lt;caminho1&gt;;&lt;caminho2&gt;;...).</p> ++<p>O padrão é 'samples' (ou seja, uma pasta chamada 'samples' no diretório de trabalho do emulador).</p> ++ ++ ++ ++ Setup complete ++ Configuração concluída ++ ++ ++ ++ ++ &Next > ++ &Avançar > ++ ++ ++ ++ ++ < &Back ++ < &Voltar ++ ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ ++ &Finish ++ &Concluir ++ ++ ++ ++ ++ ++ Yes ++ Sim ++ ++ ++ ++ ++ ++ ++ ++ ++ No ++ Não ++ ++ ++ ++ %1.%2+ required ++ é preciso %1.%2+ ++ ++ ++ ++ ++ ++ ++ ++ Unknown ++ Desconhecido ++ ++ ++ ++ can't parse version info ++ não é possível analisar a versão da informação ++ ++ ++ ++ ++ ++ ++ ++ ++ emulator didn't start ++ o emulador não iniciou ++ ++ ++ ++ ++ No ini-file found ++ Nenhum arquivo ini foi encontrado ++ ++ ++ ++ ++ Couldn't determine ini-path ++ Não foi possível determinar o caminho do ini ++ ++ ++ ++ ++ incompatible binary ++ binário incompatível ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ No result ++ Sem resultado ++ ++ ++ ++ importing emulator settings from '%1' ++ importando as configurações do emulador do '%1' ++ ++ ++ ++ ++ option '%1' with value '%2' ignored ++ a opção '%1' com o valor '%2' foi ignorado ++ ++ ++ ++ WARNING: unknown option '%1' on line %2 ignored ++ AVISO: a opção '%1' desconhecida na linha %2 foi ignorada ++ ++ ++ ++ ++ option '%1' with value '%2' imported ++ a opção '%1' com o valor '%2' foi importada ++ ++ ++ ++ ++ WARNING: missing value on line %1, option '%2' ignored ++ AVISO: o valor que falta na linha %1, opção '%2' foi ignorada ++ ++ ++ ++ ++ ERROR: can't open '%1' for reading ++ ERRO: foi impossível abrir o '%1' para leitura ++ ++ ++ ++ done (importing emulator settings from '%1') ++ feito (importando as configurações do emulador do '%1') ++ ++ ++ ++ importing front-end settings from '%1' ++ importando as configurações do front-end do '%1' ++ ++ ++ ++ done (importing front-end settings from '%1') ++ feito (importando as configurações do front-end do '%1') ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Check result pending... ++ Verificando os resultados que faltam... ++ ++ ++ ++ ++ Import emulator settings from %1 ++ importa as configurações do emulador de '%1' ++ ++ ++ ++ ++ Import front-end settings from %1 ++ importa as configurações do front-end de '%1' ++ ++ ++ ++ Import both emulator and front-end settings ++ importa ambas as configurações do front-end e do emulador ++ ++ ++ ++ Import nothing ++ Não importar nada ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ ++ Choose emulator executable file ++ Escolha o arquivo executável do emulador ++ ++ ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose working directory ++ Escolha o diretório de trabalho ++ ++ ++ ++ Choose ROM path ++ Escolha o caminho das ROMs ++ ++ ++ ++ Choose sample path ++ Escolha o caminho das amostras (samples) ++ ++ ++ ++ Choose hash path ++ Escolha o caminho para os hashes ++ ++ ++ ++ ++ Ini files (*.ini) ++ Arquivos ini (*.ini) ++ ++ ++ ++ SevenZipFile ++ ++ ++ file name '%1' not found ++ o nome do arquivo '%1' não foi encontrado ++ ++ ++ ++ ++ archive not open ++ arquivo não aberto ++ ++ ++ ++ ++ null-buffer not allowed ++ buffer nulo não permitido ++ ++ ++ ++ ++ ++ ++ ++ ++ extraction of file '%1' (index %2) failed ++ a extração do arquivo '%1' (índice %2) falhou ++ ++ ++ ++ no error ++ nenhum erro ++ ++ ++ ++ incorrect data ++ dados incorretos ++ ++ ++ ++ out of memory ++ sem memória ++ ++ ++ ++ incorrect CRC ++ CRC incorreto ++ ++ ++ ++ unsupported compression ++ compressão não suportada ++ ++ ++ ++ incorrect properties ++ propriedades incorretas ++ ++ ++ ++ premature end-of-file (input) ++ fim prematuro do arquivo (entrada) ++ ++ ++ ++ premature end-of-file (output) ++ fim do arquivo prematuro (saída) ++ ++ ++ ++ failed reading ++ falha ao ler ++ ++ ++ ++ failed writing ++ falha ao escrever ++ ++ ++ ++ failed signalling progress ++ falha ao sinalizar o progresso ++ ++ ++ ++ fatal error ++ erro fatal ++ ++ ++ ++ thread error ++ erro do processo ++ ++ ++ ++ invalid archive structure ++ estrutura inválida do arquivo ++ ++ ++ ++ invalid header structure ++ estrutura inválida do cabeçalho ++ ++ ++ ++ unknown error ++ erro desconhecido ++ ++ ++ ++ no file name specified ++ nenhum nome de arquivo foi especificado ++ ++ ++ ++ ++ ++ can't open archive '%1' ++ é impossível abrir o arquivo '%1' ++ ++ ++ ++ SnapshotViewer ++ ++ ++ Snapshot viewer ++ Visualizador de captura da tela ++ ++ ++ ++ Zoom in (+10%) ++ Aumenta a aproximação (+10%) ++ ++ ++ ++ Zoom out (-10%) ++ Reduz a aproximação (-10%) ++ ++ ++ ++ Reset zoom (100%) ++ Redefine a aproximação (100%) ++ ++ ++ ++ Save as... ++ Salva como... ++ ++ ++ ++ Copy to clipboard ++ Copia para área de transferência ++ ++ ++ ++ ++ Preview ++ Pré-visualização ++ ++ ++ ++ ++ ++ ++ Software snapshot ++ Captura da tela do programa ++ ++ ++ ++ ++ Flyer ++ Panfleto ++ ++ ++ ++ ++ Cabinet ++ Gabinete ++ ++ ++ ++ ++ Controller ++ Controle ++ ++ ++ ++ ++ PCB ++ PCI ++ ++ ++ ++ ++ Title ++ Título ++ ++ ++ ++ ++ Marquee ++ Marquise ++ ++ ++ ++ Use as ++ Usar como ++ ++ ++ ++ Choose PNG file to store image ++ Escolha o arquivo PNG para salvar a imagem ++ ++ ++ ++ PNG images (*.png) ++ Imagens PNG (*.png) ++ ++ ++ ++ FATAL: couldn't save snapshot image to '%1' ++ FATAL: foi impossível salvar a imagem da captura da tela para '%1' ++ ++ ++ ++ SoftwareImageWidget ++ ++ ++ Copy image to clipboard ++ Copia a imagem para a área de transferência ++ ++ ++ ++ Copy file path to clipboard ++ Copia o caminho do arquivo para a área de transferência ++ ++ ++ ++ Refresh cache slot ++ Atualiza o cache do slot ++ ++ ++ ++ ++ ++ FATAL: can't open %1 file, please check access permissions for %2 ++ FATAL: foi impossível abrir o arquivo %1, verifique as permissões de acesso para %2 ++ ++ ++ ++ Decompressing archive, please wait... ++ Descomprimindo o arquivo, aguarde... ++ ++ ++ ++ SoftwareList ++ ++ ++ Software list ++ Lista dos programas ++ ++ ++ ++ ++ Reload all information ++ Recarrega todas as informações ++ ++ ++ ++ ++ Select a pre-defined device configuration to be added to the software setup ++ Seleciona uma configuração pré-definida do dispositivo para ser adicionada à configuração do programa ++ ++ ++ ++ ++ Remove the currently selected favorite software configuration ++ Remove a configuração favorita do programa selecionado atualmente ++ ++ ++ ++ ++ Play the selected software configuration ++ Executa a configuração selecionada do programa ++ ++ ++ ++ ++ Play the selected software configuration (embedded) ++ Executa a configuração selecionada do programa (embutida) ++ ++ ++ ++ ++ ++ ++ ++ Known software ++ Programas conhecidos ++ ++ ++ ++ Complete list of known software for the current system ++ A lista completa dos programas conhecidos para o sistema atual ++ ++ ++ ++ View / manage your favorite software list for the current system ++ Ver / gerenciar a sua lista de programas favoritos para o sistema atual ++ ++ ++ ++ Search within the list of known software for the current system ++ Faz a procura na lista dos programas conhecidos para o sistema atual ++ ++ ++ ++ ++ ++ ++ List of known software ++ Lista dos programas conhecidos ++ ++ ++ ++ ++ Toggle filtering of compatible software titles ++ Ativa/Desativa o filtro dos títulos dos programas compatíveis ++ ++ ++ ++ ++ Toggle detailed software information ++ Ativa/desativa a informação detalhada do programa ++ ++ ++ ++ ++ Toggle automatic adjustment of the snapname parameter (hold down for menu) ++ Alterna o ajuste automático do parâmetro snapname (mantenha pressionado para abrir o menu) ++ ++ ++ ++ Toggle checking / displaying software-states (hold down for menu) ++ Alterna a verificação / exibição da condição do programa (mantenha pressionado para abrir o menu) ++ ++ ++ ++ Analyze software menu ++ Menu da análise do programa ++ ++ ++ ++ Rebuild software menu ++ Menu de reconstrução do programa ++ ++ ++ ++ ++ Toggle automatic adjustment of the statename parameter (hold down for menu) ++ Alterna o ajuste automático do parâmetro statename (mantenha pressionado para abrir o menu) ++ ++ ++ ++ ++ Select the software for which the snapname and/or statename should be adjusted ++ Seleciona o programa onde os parâmetros snapname e/ou statename devem ser ajustados ++ ++ ++ ++ ++ ++ Default configuration ++ Configuração padrão ++ ++ ++ ++ ++ ++ Open manual in PDF viewer ++ Abre o manual num visualizador de PDF ++ ++ ++ ++ Export the current software-list to an ASCII or CSV formatted file (or the clipboard) ++ Exporta a lista do programa atual para um arquivo em formato CSV ou ASCII (ou para a área de transferência) ++ ++ ++ ++ Export ++ Exportar ++ ++ ++ ++ Open options menu for the favorites list ++ Abre o menu de opções para a lista de favoritos ++ ++ ++ ++ ++ Add the currently selected software and device setup to the favorites list (or overwrite existing favorite) ++ Adiciona o programa e a configuração dos dispositivo selecionados atualmente selecionados na lista de favoritos (ou substituindo os favoritos já existente) ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Title ++ Título ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Publisher ++ Editor ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Year ++ Ano ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Part ++ Parte ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Interface ++ Interface ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ List ++ Lista ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Supported ++ Suportado ++ ++ ++ ++ ++ ++ ++ Favorites ++ Favoritos ++ ++ ++ ++ ++ Favorite software configurations ++ Configurações de favoritos do programa ++ ++ ++ ++ ++ Device configuration ++ Configuração do dispositivo ++ ++ ++ ++ ++ ++ ++ Search ++ Buscar ++ ++ ++ ++ ++ Search for known software (not case-sensitive) ++ Busca por programas conhecidos (não sensível à caixa) ++ ++ ++ ++ ++ Search results ++ Resultados da busca ++ ++ ++ ++ ++ Search progress ++ Progresso da busca ++ ++ ++ ++ Searching software - %p% ++ Buscando o programa - %p% ++ ++ ++ ++ ++ Loading software-lists, please wait... ++ Carregando as listas dos programas, aguarde... ++ ++ ++ ++ ++ L:Listed - C:Correct - M:Mostly correct - I:Incorrect - N:Not found - U:Unknown - S:Search ++ L:Listado - C:Correto - M:Maioria correto - I:Incorreto - N:Não encontrado - D:Desconhecido - B:Busca ++ ++ ++ ++ ++ Checking software-states - %p% ++ Verificando a condição do programa - %p% ++ ++ ++ ++ Enter search string ++ Insira o termo da busca ++ ++ ++ ++ Play selected software ++ Jogar o programa selecionado ++ ++ ++ ++ &Play ++ &Jogar ++ ++ ++ ++ Play selected software (embedded) ++ Jogar programa selecionado (embutido) ++ ++ ++ ++ Play &embedded ++ Jogar o &embutido ++ ++ ++ ++ Add to favorite software list ++ Adiciona para a lista de programas favoritos ++ ++ ++ ++ &Add to favorites ++ &Adiciona aos favoritos ++ ++ ++ ++ Remove from favorite software list ++ Remove da lista de programas favoritos ++ ++ ++ ++ &Remove from favorites ++ &Remove dos favoritos ++ ++ ++ ++ Analyze the currently selected software with the ROMAlyzer ++ Analisa o programa selecionado com o ROMAlyzer ++ ++ ++ ++ Analyze the currently selected software's list with the ROMAlyzer ++ Analisa a lista de programa selecionado atualmente com o ROMAlyzer ++ ++ ++ ++ Analyze all relevant software-lists for the current system with the ROMAlyzer ++ Analisa todas as listas de programa relevantes para o sistema atual com o ROMAlyzer ++ ++ ++ ++ Clear software selection ++ Limpa a seleção de programa ++ ++ ++ ++ &Clear selection ++ &Limpar a seleção ++ ++ ++ ++ Load favorites from a file... ++ Carrega os favoritos de um arquivo... ++ ++ ++ ++ Save favorites to a file... ++ Salva os favoritos para um arquivo... ++ ++ ++ ++ ++ Adjust pattern... ++ Padrão de ajuste... ++ ++ ++ ++ Check software-states ++ Verifica a condição do programa ++ ++ ++ ++ Negate search ++ Negar a busca ++ ++ ++ ++ ++ ++ Reset ++ Redefinir ++ ++ ++ ++ Click to open the view menu ++ Clique para abrir o menu de visualização ++ ++ ++ ++ View flat ++ Ver plano ++ ++ ++ ++ View known software as a flat list ++ Ver o programa conhecido como uma lista plana ++ ++ ++ ++ View tree ++ Ver como uma ramificação ++ ++ ++ ++ View known software as a parent/clone tree ++ Ver o programa conhecido como uma ramificação de principal/clones ++ ++ ++ ++ Snapname adjustment pattern ++ Padrão de ajuste do snapname ++ ++ ++ ++ Enter the pattern used for snapname adjustment: ++(Allowed macros: $SOFTWARE_LIST$, $SOFTWARE_NAME$) ++ Entre com o padrão usado para ajustar o snapname: ++(Macros permitidas:$SOFTWARE_LIST$, $SOFTWARE_NAME$) ++ ++ ++ ++ ++ ++ please wait for ROMAlyzer to finish the current rebuild and try again ++ aguarde o ROMAlyzer concluir a reconstrução atual e tente novamente ++ ++ ++ ++ ++ FATAL: can't start emulator executable within a reasonable time frame, giving up ++ FATAL: foi impossível iniciar o executável do emulador dentro de um tempo razoável, desistindo ++ ++ ++ ++ ++ error text = %1 ++ texto do erro = %1 ++ ++ ++ ++ ++ FATAL: invalid XML data retrieved for '%1' ++ FATAL: os dados XML adquiridos para '%1' são inválidos ++ ++ ++ ++ ++ ++ filtered ++ filtrado ++ ++ ++ ++ ++ SWL data - %p% ++ Dados SWL - %p% ++ ++ ++ ++ Loading software-list '%1', please wait... ++ Carregando lista do programa '%1', aguarde... ++ ++ ++ ++ FATAL: error while parsing XML data for software list '%1' ++ FATAL: houve erro durante a análise dos dados do XML para a lista do programa '%1' ++ ++ ++ ++ Visible software lists ++ Listas visíveis do programa ++ ++ ++ ++ Select software lists to be shown / hidden ++ Ver as listas do programa que serão exibidas / escondidas ++ ++ ++ ++ Toggle visibility of software list '%1' ++ Alternar visibilidade da lista do programa '%1' ++ ++ ++ ++ WARNING: the external process called to load the MAME software lists didn't exit cleanly -- exitCode = %1, exitStatus = %2 ++ AVISO: o processo externo chamado para carregar a lista do programa do MAME não terminou corretamente -- código gerado - %1, condição da saída = %2 ++ ++ ++ ++ ++ normal ++ normal ++ ++ ++ ++ ++ crashed ++ travou ++ ++ ++ ++ WARNING: software-list XML bug: the software name '%1' is used multiple times within software-list '%2' ++ AVISO: defeito no XML da lista do programa: o nome do programa '%1' já é utilizado várias vezes dentro da lista do programa '%2' ++ ++ ++ ++ WARNING: the currently selected MAME emulator doesn't support software lists ++ AVISO: o emulador MAME selecionado atualmente não é compatível com a lista de programas ++ ++ ++ ++ WARNING: the external process called to load the MAME software lists caused an error -- processError = %1 ++ AVISO: o processo externo chamado para carregar as listas dos programas do MAME causou um erro -- Erro do Processo = %1 ++ ++ ++ ++ WARNING: can't open software state cache file '%1' for writing, please check access permissions ++ AVISO: foi impossível abrir o arquivo do cache da condição do programa '%1' para escrita, verifique as permissões de acesso ++ ++ ++ ++ WARNING: the external process called to verify the states for software-list '%1' didn't exit cleanly -- exitCode = %2, exitStatus = %3 ++ AVISO: o processo externo chamado para verificar as condições das listas dos programas '%1' não terminou corretamente -- código da saída = %2, condição da saída = %3 ++ ++ ++ ++ ++ ++ ++ FATAL: couldn't find XML data for software list entry '%1:%2' ++ FATAL: não foi possível encontrar os dados XML para a entrada '%1:%2' na lista do programa ++ ++ ++ ++ L: ++ L: ++ ++ ++ ++ C: ++ C: ++ ++ ++ ++ M: ++ M: ++ ++ ++ ++ I: ++ I: ++ ++ ++ ++ N: ++ N: ++ ++ ++ ++ U: ++ D: ++ ++ ++ ++ Checking software-states, please wait... ++ Verificando as condições do programa, aguarde... ++ ++ ++ ++ Analy&ze ++ Anali&zar ++ ++ ++ ++ note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! ++ nota: os caracteres especiais $, (, ), *, +, ., ?, [, ], ^, {, |, } e \ devem ser precedidos pelo caractere de escape quando forem utilizados de forma literal! ++ ++ ++ ++ ++ Current &software... ++ &Programa atual... ++ ++ ++ ++ ++ Current software-lis&t... ++ Lis&ta do programa atual... ++ ++ ++ ++ ++ All supported software-&lists... ++ Todas as &listas de programa suportadas... ++ ++ ++ ++ &Rebuild ++ &Reconstruir ++ ++ ++ ++ Rebuild the currently selected software with the ROMAlyzer ++ Reconstruir o programa selecionado atualmente com o ROMAlyzer ++ ++ ++ ++ Rebuild the currently selected software's list with the ROMAlyzer ++ Reconstruir a lista do programa atualmente selecionado atualmente com o ROMAlyzer ++ ++ ++ ++ Rebuild all relevant software-lists for the current system with the ROMAlyzer ++ Reconstruir todas as listas de programa relevantes para o sistema atual com o ROMAlyzer ++ ++ ++ ++ Open in PDF viewer... ++ Abre o visualizador de PDF... ++ ++ ++ ++ Statename adjustment pattern ++ Padrão de ajuste do statename ++ ++ ++ ++ Enter the pattern used for statename adjustment: ++(Allowed macros: $SOFTWARE_LIST$, $SOFTWARE_NAME$) ++ Entre com o padrão usado para ajustar o statename: ++(Macros permitidas:$SOFTWARE_LIST$, $SOFTWARE_NAME$) ++ ++ ++ ++ ++ ++ ++ ++ ++ no data available ++ nenhum dado disponível ++ ++ ++ ++ loading XML software list data and recreating cache ++ carregando dados da lista de programa (XML) e recriando o cache ++ ++ ++ ++ Individual ++ Individual ++ ++ ++ ++ All ++ Todos ++ ++ ++ ++ show all ++ mostrar tudo ++ ++ ++ ++ Show all software lists ++ Mostrar todas as listas de programas ++ ++ ++ ++ Only ++ Somente ++ ++ ++ ++ Show only software list '%1' ++ Mostrar apenas a lista de programa '%1' ++ ++ ++ ++ Except ++ Exceto ++ ++ ++ ++ Show all software lists except '%1' ++ Mostrar todas as listas de programa exceto '%1' ++ ++ ++ ++ Manual selection ++ Seleção manual ++ ++ ++ ++ Multiple PDF manuals exist. Select the ones you want to open: ++ Existem diversos manuais em PDF. Escolha aqueles que deseja abrir: ++ ++ ++ ++ done (loading XML software list data and recreating cache, elapsed time = %1) ++ feito (carregando os dados da lista de programa (XML) e recriando o cache, tempo = %1) ++ ++ ++ ++ state info for software-list '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 ++ informação da condição para a lista de programa '%1': L:%2 C:%3 M:%4 I:%5 N:%6 U:%7 ++ ++ ++ ++ WARNING: the external process called to verify software-states caused an error -- processError = %1 ++ AVISO: o processo externo chamado para verificar as condições do programa causou um erro -- Erro do Processo = %1 ++ ++ ++ ++ ++ ++ ++ Searching ++ Procurando ++ ++ ++ ++ ++ ++ ++ FATAL: error while parsing XML data for software list entry '%1:%2' ++ FATAL: houve um erro durante a análise dos dados do XML para a entrada da lista de programas '%1:%2' ++ ++ ++ ++ Choose file to merge favorites from ++ Escolha o arquivo de origem para mesclar com os favoritos ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ loading software-favorites for '%1' from '%2' ++ carregando os favoritos do programa para '%1' de '%2' ++ ++ ++ ++ entry '%1:%2' successfully imported ++ entrada '%1:%2' foi importada com sucesso ++ ++ ++ ++ WARNING: entry '%1:%2' cannot be associated with any known software for this system (line %3 ignored) ++ AVISO: a entrada '%1:%2' não pode ser associada com qualquer programa conhecido para esse sistema (a linha %3 foi ignorada) ++ ++ ++ ++ WARNING: a favorite entry for '%1:%2' already exists (line %3 ignored) ++ AVISO: uma entrada de favorito para '%1:%2' já existe (a linha %3 foi ignorada) ++ ++ ++ ++ WARNING: syntax error on line %1 (ignored) ++ AVISO: um erro de sintaxe na linha %1 (ignorada) ++ ++ ++ ++ done (loading software-favorites for '%1' from '%2') ++ feito (carregando os favoritos do programa para '%1' de '%2') ++ ++ ++ ++ FATAL: can't open '%1' for reading, please check permissions ++ FATAL: foi impossível abrir '%1' para leitura, verifique as permissões ++ ++ ++ ++ Choose file to store favorites to ++ Escolha o arquivo para armazenar os favoritos ++ ++ ++ ++ saving software-favorites for '%1' to '%2' ++ salvando o favoritos do programa para '%1' de '%2' ++ ++ ++ ++ done (saving software-favorites for '%1' to '%2') ++ feito (salvando os favoritos do programa para '%1' de '%2') ++ ++ ++ ++ FATAL: can't open '%1' for writing, please check permissions ++ FATAL: foi impossível abrir o '%1' para escrita, verifique as permissões ++ ++ ++ ++ correct ++ correto ++ ++ ++ ++ mostly correct ++ maioria correto ++ ++ ++ ++ incorrect ++ incorreto ++ ++ ++ ++ not found ++ não encontrado ++ ++ ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ S: ++ B: ++ ++ ++ ++ SoftwareListExporter ++ ++ ++ Browse ASCII export file ++ Procura pelo arquivo de exportação ASCII ++ ++ ++ ++ ASCII file ++ Arquivo ASCII ++ ++ ++ ++ ASCII export file -- use $ID$ as a placeholder for the current driver ++ Arquivo de exportação ASCII -- use $ID$ como um espaço reservado para o controlador atual ++ ++ ++ ++ Column width ++ Tamanho da coluna ++ ++ ++ ++ Maximum column width for ASCII export (0 = unlimited) ++ Tamanho máximo da coluna para a exportação ASCII (0 = ilimitado) ++ ++ ++ ++ unlimited ++ ilimitado ++ ++ ++ ++ Browse CSV export file ++ Procura pelo arquivo de exportação CSV ++ ++ ++ ++ CSV file ++ Arquivo CSV ++ ++ ++ ++ CSV export file -- use $ID$ as a placeholder for the current driver ++ Arquivo de exportação CSV -- use $ID$ como um espaço reservado para o controlador atual ++ ++ ++ ++ Separator ++ Separador ++ ++ ++ ++ Field separator for CSV export ++ Separador do campo para a exportação em CSV ++ ++ ++ ++ ; ++ ; ++ ++ ++ ++ Delimiter ++ Delimitador ++ ++ ++ ++ Text delimiter for CSV export ++ Delimitador do texto para a exportação em CSV ++ ++ ++ ++ " ++ " ++ ++ ++ ++ Select the columns you want to export and the order in which they are to be listed (drag & drop entries around) ++ Selecione as colunas que você deseja exportar e a ordem onde elas deverão ser listadas (arraste as entradas para ordenar) ++ ++ ++ ++ ++ ++ Title ++ Título ++ ++ ++ ++ ++ ++ Name ++ Nome ++ ++ ++ ++ ++ ++ Publisher ++ Editor ++ ++ ++ ++ ++ ++ Year ++ Ano ++ ++ ++ ++ ++ ++ Part ++ Parte ++ ++ ++ ++ ++ ++ Interface ++ Interface ++ ++ ++ ++ ++ ++ List ++ Lista ++ ++ ++ ++ ++ ++ Supported ++ Suportado ++ ++ ++ ++ Export now! ++ Exportar agora! ++ ++ ++ ++ &Export ++ &Exportar ++ ++ ++ ++ Close software-list export ++ Fecha a exportação da lista de programas ++ ++ ++ ++ &Close ++ &Fechar ++ ++ ++ ++ Export progress indicator ++ Indicador do progresso da exportação ++ ++ ++ ++ %p% ++ %p% ++ ++ ++ ++ Sort criteria ++ Critério de ordenação ++ ++ ++ ++ Sort order ++ Ordem de classificação ++ ++ ++ ++ Output format ++ Formato de saída ++ ++ ++ ++ Select output format ++ Selecione o formato ++ ++ ++ ++ ASCII ++ ASCII ++ ++ ++ ++ CSV ++ CSV ++ ++ ++ ++ Select sort order ++ Selecione a ordem de classificação ++ ++ ++ ++ Ascending ++ Ascendente ++ ++ ++ ++ Descending ++ Descendente ++ ++ ++ ++ Select sort criteria ++ Selecione o critério de ordenação ++ ++ ++ ++ Overwrite existing files without asking what to do ++ Substitui os arquivos já existentes sem perguntar ++ ++ ++ ++ Overwrite files blindly ++ Substitui os arquivos sem questionar ++ ++ ++ ++ Export to the system clipboard instead of a file ++ Exporta para a área de transferência em vez de um arquivo ++ ++ ++ ++ Export to clipboard ++ Exporta para a área de transferência ++ ++ ++ ++ Include column header texts ++ Inclui os textos do cabeçalho das colunas ++ ++ ++ ++ Include column headers ++ Inclui os cabeçalhos das colunas ++ ++ ++ ++ Both formats ++ Ambos os formatos ++ ++ ++ ++ Export software-list for '%1' ++ Exporta a lista de programa para '%1' ++ ++ ++ ++ ++ Confirm ++ Confirma ++ ++ ++ ++ ++ Overwrite existing file? ++ Substituir o arquivo já existente? ++ ++ ++ ++ exporting current software-list in ASCII format to '%1' ++ exportando a lista atual do programa no formato ASCII para '%1' ++ ++ ++ ++ WARNING: can't open ASCII export file '%1' for writing, please check permissions ++ AVISO: foi impossível abrir o arquivo de exportação ASCII '%1'para escrita, verifique as permissões ++ ++ ++ ++ exporting current software-list in ASCII format to clipboard ++ exportando a lista atual do programa no formato ASCII para a área de transferência ++ ++ ++ ++ done (exporting current software-list in ASCII format to clipboard) ++ feito (exportando lista atual do programa no formato ASCII para a área de transferência) ++ ++ ++ ++ done (exporting current software-list in ASCII format to '%1') ++ feito (exportando a lista atual do programa no formato ASCII para '%1') ++ ++ ++ ++ exporting current software-list in CSV format to '%1' ++ exportando a lista atual do programa no formato CSV para '%1' ++ ++ ++ ++ WARNING: can't open CSV export file '%1' for writing, please check permissions ++ AVISO: foi impossível abrir o arquivo de exportação CSV '%1' para escrita, verifique as permissões ++ ++ ++ ++ exporting current software-list in CSV format to clipboard ++ exportando a lista atual do programa no formato CSV para a área de transferência ++ ++ ++ ++ done (exporting current software-list in CSV format to clipboard) ++ feito (exportando a lista atual do programa no formato CSV para a área de transferência) ++ ++ ++ ++ done (exporting current software-list in CSV format to '%1') ++ feito (exportando a lista atual do programa no formato CSV para '%1') ++ ++ ++ ++ Choose ASCII export file ++ Escolha o arquivo de exportação em ASCII ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose CSV export file ++ Escolha o arquivo de exportação em CSV ++ ++ ++ ++ SoftwareListXmlDatabaseManager ++ ++ ++ WARNING: failed to open software-list XML cache database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir o banco de dados do cache XML da lista de programas '%1' erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from software-list XML cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao carregar '%1' do banco de dados do cache XML da lista de programas: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to software-list XML cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar '%1' ao banco de dados do cache XML da lista de programas: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in software-list XML cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar '%1' no banco de dados do cache XML da lista de programas: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to fetch row count from software-list XML cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler a contagem das linhas do banco de dados do cache XML da lista de programas: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to fetch row IDs from software-list XML cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler as IDs das linhas do banco de dados do cache XML das listas de software: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the software-list XML cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração de '%1' do banco de dados do cache XML da lista de programas: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to remove software-list XML cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover base de dados do cache XML da lista de programas: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to create software-list XML cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao criar base de dados do cache XML da lista de programas: consulta = '%1', erro = '%2' ++ ++ ++ ++ software-list XML cache database '%1' initialized ++ banco de dados do cache XML da lista de programas '%1' inicializada ++ ++ ++ ++ SoftwareSnap ++ ++ ++ Copy image to clipboard ++ Copia a imagem para a área de transferência ++ ++ ++ ++ Copy file path to clipboard ++ Copia o caminho do arquivo para a área de transferência ++ ++ ++ ++ Zoom in (+10%) ++ Aumenta a aproximação (+10%) ++ ++ ++ ++ Zoom out (-10%) ++ Reduz a aproximação (-10%) ++ ++ ++ ++ Reset zoom (100%) ++ Redefine a aproximação (100%) ++ ++ ++ ++ Refresh cache slot ++ Atualiza o cache do slot ++ ++ ++ ++ ++ FATAL: can't open software snap-shot file, please check access permissions for %1 ++ FATAL: foi impossível abrir o arquivo de snapshot do programa, verifique as permissões de acesso para %1 ++ ++ ++ ++ ++ ++ FATAL: can't open software snap-shot file %1 ++ FATAL: foi impossível abrir o arquivo de snapshot do programa %1 ++ ++ ++ ++ ++ 7z error ++ erro do 7z ++ ++ ++ ++ libarchive error ++ erro do libarchive ++ ++ ++ ++ FATAL: can't create backup of existing image file '%1' as '%2' ++ FATAL: foi impossível criar um backup de um arquivo de imagem já existente de '%1' como '%2' ++ ++ ++ ++ FATAL: can't create image file '%1' ++ FATAL: foi impossível criar o arquivo de imagem '%1' ++ ++ ++ ++ FATAL: can't determine primary path for image-type '%1' ++ FATAL: foi impossível determinar o caminho primário para o tipo da imagem '%1' ++ ++ ++ ++ software snapshot ++ captura da tela do programa ++ ++ ++ ++ Decompressing archive, please wait... ++ Descomprimindo o arquivo, aguarde... ++ ++ ++ ++ SoftwareSnapshot ++ ++ ++ software snapshot ++ captura da tela do programa ++ ++ ++ ++ SoftwareStateFilter ++ ++ ++ ++ Toggle software-state 'correct' ++ Alterna o filtro da condição do programa 'correto' ++ ++ ++ ++ ++ Toggle software-state 'unknown' ++ Alterna o filtro da condição do programa 'desconhecido' ++ ++ ++ ++ ++ Toggle software-state 'mostly correct' ++ Alterna o filtro da condição do programa 'maioria correto' ++ ++ ++ ++ ++ Toggle software-state 'not found' ++ Alterna o filtro da condição do programa 'não encontrado' ++ ++ ++ ++ ++ Toggle software-state 'incorrect' ++ Alterna o filtro da condição do programa 'incorreto' ++ ++ ++ ++ ++ Toggle filtering by software-states ++ Alternar filtro pelas condições do programa ++ ++ ++ ++ State filter ++ Filtro da condição ++ ++ ++ ++ State filter - %p% ++ Filtros das condições - %p% ++ ++ ++ ++ ++ filtered ++ filtrado ++ ++ ++ ++ State filter settings ++ Configurações do filtro da condição ++ ++ ++ ++ TablePropertyDialog ++ ++ ++ Table properties ++ Propriedades da tabela ++ ++ ++ ++ Rows: ++ Linhas: ++ ++ ++ ++ Columns: ++ Colunas: ++ ++ ++ ++ Properties: ++ Propriedades: ++ ++ ++ ++ Title ++ ++ ++ title ++ título ++ ++ ++ ++ ToolBarCustomizer ++ ++ ++ Customize tool-bar ++ Customiza a barra de ferramentas ++ ++ ++ ++ Available tool-bar actions ++ As ações disponíveis da barra de ferramentas ++ ++ ++ ++ List of available tool-bar actions ++ Lista das ações disponíveis da barra de ferramentas ++ ++ ++ ++ Activate selected tool-bar actions ++ Ativa as ações selecionadas da barra de ferramentas ++ ++ ++ ++ Activate ++ Ativar ++ ++ ++ ++ Active tool-bar actions ++ Ações ativas da barra de ferramentas ++ ++ ++ ++ List of active tool-bar actions and their order ++ Lista das ações ativas da barra de ferramentas e a sua ordem ++ ++ ++ ++ Deactivate selected tool-bar actions ++ Desativa as ações selecionadas da barra de ferramentas ++ ++ ++ ++ Move selected action up ++ Move a ação selecionada para cima ++ ++ ++ ++ Move selected action down ++ Move a ação selecionada para baixo ++ ++ ++ ++ Insert a separator line ++ Insere um separador ++ ++ ++ ++ Separator ++ Separador ++ ++ ++ ++ Reset tool-bar actions to default configuration ++ Restaura as ações padrão da barra de ferramentas para a configuração ++ ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Apply tool-bar setup and close dialog ++ Aplica a configuração da barra de ferramentas e fecha a janela ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ Apply tool-bar setup ++ Aplica a configuração da barra de ferramentas ++ ++ ++ ++ &Apply ++ &Aplicar ++ ++ ++ ++ Cancel tool-bar setup and close dialog ++ Cancela a configuração da barra de ferramentas e fecha a janela ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ ++ Tool-bar search box ++ Caixa de busca da barra de ferramentas ++ ++ ++ ++ ++ -- Separator -- ++ -- Separador -- ++ ++ ++ ++ ToolExecutor ++ ++ ++ ++ ### tool started, output below ### ++ ### a ferramenta foi iniciada, saída abaixo ### ++ ++ ++ ++ ++ ++ tool control: ++ controle da ferramenta: ++ ++ ++ ++ ++ ### tool finished, exit code = %1, exit status = %2 ### ++ ### a ferramenta foi finalizada, código da saída = %1, condição da saída = %2 ### ++ ++ ++ ++ ++ tool output: ++ saída da ferramenta: ++ ++ ++ ++ stdout: %1 ++ saída: %1 ++ ++ ++ ++ stderr: %1 ++ erro: %1 ++ ++ ++ ++ ++ ### tool error, process error = %1 ### ++ ### houve um erro na ferramenta, erro no processo = %1 ### ++ ++ ++ ++ Executing tool ++ Ferramenta em execução ++ ++ ++ ++ Command ++ Comando ++ ++ ++ ++ Executed command ++ Comando executado ++ ++ ++ ++ Close tool execution dialog ++ Fecha a tela da ferramenta em execução ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ Output from tool ++ Saída da ferramenta ++ ++ ++ ++ UserDataDatabaseManager ++ ++ ++ WARNING: failed to open user data database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir o banco de dados do usuário '%1': erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from user data database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao carregar '%1' do banco de dados do usuário: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to user data database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar '%1' ao banco de dados do usuário: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in user data database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar '%1' no banco de dados do usuário: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to fetch row count from user data database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler a contagem das linhas do banco de dados do usuário: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to fetch row IDs from user data database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler as IDs das linhas do banco de dados do usuário: consulta = '%1', erro = '%2' ++ ++ ++ ++ cleaning up user data database '%1' ++ limpando o banco de dados do usuário '%1' ++ ++ ++ ++ removed obsolete ID '%1' ++ ID obsoleto '%1' removido ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to remove '%1' from user data database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao remover '%1' do banco de dados do usuário: consulta = '%2', erro = '%3' ++ ++ ++ ++ removed ID '%1' due to no data ++ ID '%1' foi removido por não haver dados ++ ++ ++ ++ done (cleaning up user data database '%1') ++ feito (limpando o banco de dados do usuário '%1') ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the user data database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração '%1' para os dados do usuário no banco de dados: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to remove user data database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover o banco de dados do usuário: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to create user data database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao criar o banco de dados do usuário: consulta = '%1', erro = '%2' ++ ++ ++ ++ user data database '%1' initialized ++ o banco de dados '%1' com os dados do usuário foi inicializado ++ ++ ++ ++ filling up rank cache from user data database '%1' ++ preenchendo o cache da classificação a partir dos dados do usuário no banco de dados '%1' ++ ++ ++ ++ done (filling up rank cache from user data database '%1') ++ feito (preenchendo o cache da classificação a partir dos dados do usuário no banco de dados '%1') ++ ++ ++ ++ VideoItemWidget ++ ++ ++ Path: ++ Caminho: ++ ++ ++ ++ Title: ++ Título: ++ ++ ++ ++ ++ Author: ++ Autor: ++ ++ ++ ++ Open author URL with the default browser ++ Abre a URL do autor com o navegador padrão ++ ++ ++ ++ Open video URL with the default browser ++ Abre a URL do vídeo com o navegador padrão ++ ++ ++ ++ ++ Video: ++ Vídeo: ++ ++ ++ ++ VisibleColumnSetup ++ ++ ++ Setup visible columns ++ Configura as colunas visíveis ++ ++ ++ ++ Enable / disable columns, drag columns to reorder ++ Ativa / desativa as colunas, arraste para reorganizar ++ ++ ++ ++ Apply changes and close dialog ++ Aplica as alterações e fecha a janela ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ Apply changes now ++ Aplica as alterações agora ++ ++ ++ ++ Apply ++ Aplicar ++ ++ ++ ++ Revert changes and close dialog ++ Reverte as alterações e fecha a janela ++ ++ ++ ++ Cancel ++ Cancelar ++ ++ ++ ++ Welcome ++ ++ ++ Default ++ Padrão ++ ++ ++ ++ Error ++ Erro ++ ++ ++ ++ The specified file isn't executable! ++ O arquivo especificado não é um executável! ++ ++ ++ ++ ++ Choose emulator executable file ++ Escolha o arquivo executável do emulador ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose working directory ++ Escolha o diretório de trabalho ++ ++ ++ ++ Choose ROM path ++ Escolha o caminho das ROMs ++ ++ ++ ++ Choose sample path ++ Escolha o caminho das amostras (samples) ++ ++ ++ ++ Choose hash path ++ Escolha o caminho para os hashes ++ ++ ++ ++ Single-instance check ++ Verificação de instância única ++ ++ ++ ++ It appears that another instance of %1 is already running. ++However, this can also be the leftover of a previous crash. ++ ++Exit now, accept once or ignore completely? ++ Parece que uma outra instância %1 já está em execução. ++No entanto, isso também pode ser o resto de uma falha anterior. ++ ++Deseja encerrar agora, aceita uma vez ou ignora completamente? ++ ++ ++ ++ &Exit ++ &Encerrar ++ ++ ++ ++ &Once ++ &Uma vez ++ ++ ++ ++ &Ignore ++ &Ignorar ++ ++ ++ ++ Welcome to QMC2 ++ Bem-vindo ao QMC2 ++ ++ ++ ++ Emulator executable file ++ Executável do emulador ++ ++ ++ ++ Browse emulator executable file ++ Procura pelo arquivo executável do emulador ++ ++ ++ ++ Browse working directory ++ Procura pelo diretório de trabalho ++ ++ ++ ++ Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) ++ O diretório de trabalho que é utilizado quando o emulador for executado (se vazio, o mesmo diretório de trabalho do QMC2 será usado) ++ ++ ++ ++ Working directory ++ Diretório de trabalho ++ ++ ++ ++ Language ++ Idioma ++ ++ ++ ++ Path to ROM images ++ Caminho para as ROMs ++ ++ ++ ++ Browse ROM path ++ Procura pelo caminho das ROMs ++ ++ ++ ++ Path to samples ++ Caminho para as amostras ++ ++ ++ ++ Browse sample path ++ Procura pelo caminho das amostras (samples) ++ ++ ++ ++ Emulator executable ++ Executável do emulador ++ ++ ++ ++ <h1>Welcome to QMC2!</h1><font size="+1"><p>This appears to be your first start of QMC2 because no valid configuration was found. In order to use QMC2 as a front end for an emulator, you must specify the path to the emulator's executable file below.</p><p>The paths below the executable file are optional, but you should specify as many of them as you can right now to avoid problems or confusion later (of course, you can change the paths in the emulator's global configuration at any time later).</p><p><b>It's strongly recommended that you specify the ROM path you are going to use at least!</b></p></font> ++ <h1>Bem-vindo ao QMC2!</h1><font size="+1"><p>Parece que é a primeira vez que você inicia o QMC2 pois nenhuma configuração válida foi encontrada. Para usar o QMC2 como front-end para um emulador, você deve especificar abaixo, o caminho completo para o arquivo executável do emulador.</p><p>Os caminhos abaixo do arquivo executável são opcionais, mas você deve especificar quantos você pode agora para evitar problemas ou uma confusão mais tarde (claro, você pode alterar os caminhos na configuração global do emulador a qualquer momento).</p><p><b>É altamente recomendável que pelo menos, você especifique o caminho da ROM que deseja usar!</b></p></font> ++ ++ ++ ++ ROM path ++ Caminho das ROMs ++ ++ ++ ++ Sample path ++ Caminho das amostras ++ ++ ++ ++ Hash path ++ Caminho dos hashes ++ ++ ++ ++ Path to hash files ++ Caminho para os arquivos hash ++ ++ ++ ++ Browse hash path ++ Procura pelo caminho dos arquivos hash ++ ++ ++ ++ Configure QMC2 through the setup wizard... ++ Configure o QMC2 através do assistente de configuração... ++ ++ ++ ++ Alternatively, configure QMC2 through the setup wizard... ++ Alternativamente, configure o QMC2 através do assistente de configuração... ++ ++ ++ ++ GUI style ++ Estilo da interface ++ ++ ++ ++ &Ok ++ &Ok ++ ++ ++ ++ &Cancel ++ &Cancelar ++ ++ ++ ++ XmlDatabaseManager ++ ++ ++ WARNING: failed to open XML cache database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir o banco de dados do cache XML '%1': erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from XML cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao carregar '%1' do banco de dados do cache XML: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to XML cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar '%1' ao banco de dados do cache XML: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in XML cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar '%1' no banco de dados do cache XML: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to fetch row count from XML cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler quantidade de linhas do banco de dados do cache XML: consulta = '%1', erro = '%2' ++ ++ ++ ++ WARNING: failed to fetch row IDs from XML cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler IDs das linhas do banco de dados do cache XML: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the XML cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração '%1' do banco de dados do cache XML: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to remove XML cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover base de dados do cache XML: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to create XML cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao criar base de dados do cache XML: consulta = '%1', erro = '%2' ++ ++ ++ ++ XML cache database '%1' initialized ++ O cache do banco de dados XML '%1' foi inicializado ++ ++ ++ ++ YouTubeVideoPlayer ++ ++ ++ Attached videos ++ Vídeos anexados ++ ++ ++ ++ Start playing / select next video automatically ++ Reproduz / seleciona o próximo vídeo automaticamente ++ ++ ++ ++ Play-O-Matic ++ Reprodutor automático ++ ++ ++ ++ Mode: ++ Modo: ++ ++ ++ ++ Choose the video selection mode ++ Escolha o modo da seleção do vídeo ++ ++ ++ ++ sequential ++ sequencial ++ ++ ++ ++ random ++ aleatório ++ ++ ++ ++ Allow videos to be repeated (otherwise stop after last video) ++ Permita a repetição dos vídeos (caso contrário para após o último) ++ ++ ++ ++ Allow repeat ++ Permita a repetição ++ ++ ++ ++ Video player ++ Reprodutor de vídeos ++ ++ ++ ++ Select the preferred video format (automatically falls back to the next available format) ++ Selecione o formato de vídeo preferido (usa o próximo disponível automaticamente) ++ ++ ++ ++ ++ FLV 240P ++ FLV 240P ++ ++ ++ ++ ++ FLV 360P ++ FLV 360P ++ ++ ++ ++ ++ MP4 360P ++ MP4 360P ++ ++ ++ ++ ++ FLV 480P ++ FLV 480P ++ ++ ++ ++ ++ MP4 720P ++ MP4 720P ++ ++ ++ ++ ++ MP4 1080P ++ MP4 1080P ++ ++ ++ ++ ++ MP4 3072P ++ MP4 3072P ++ ++ ++ ++ ++ Start / pause / resume video playback ++ Reproduz / pausar / resume o vídeo ++ ++ ++ ++ Current buffer fill level ++ Nível atual do buffer ++ ++ ++ ++ ++ ++ ++ ++ Remaining ++ Restante ++ ++ ++ ++ ++ Volume ++ Volume ++ ++ ++ ++ Search videos ++ Procura por vídeos ++ ++ ++ ++ Search pattern -- use the 'hint' button to get a suggestion ++ Padrão da busca -- use o botão 'dica' para obter uma sugestão ++ ++ ++ ++ Search YouTube videos using the specified search pattern ++ Busca por vídeos no YouTube usando o padrão especificado da busca ++ ++ ++ ++ Maximum number of results per search request ++ Quantidade máxima dos resultados pela requisição da busca ++ ++ ++ ++ Start index for the search request ++ Índice inicial para a requisição da busca ++ ++ ++ ++ SI: ++ IB: ++ ++ ++ ++ R: ++ R: ++ ++ ++ ++ Suggest a search pattern (hold down for menu) ++ Sugere um padrão de busca (segure para mostrar o menu) ++ ++ ++ ++ Mute / unmute audio output ++ Torne mudo / audível a saída de áudio ++ ++ ++ ++ Volume level ++ Nível do volume ++ ++ ++ ++ Video progress ++ Progresso do vídeo ++ ++ ++ ++ ++ ++ ++ ++ Current buffer fill level: %1% ++ Nível atual do buffer: %1% ++ ++ ++ ++ ++ Play this video ++ Reproduza este vídeo ++ ++ ++ ++ ++ ++ Copy video URL ++ Copia a URL do vídeo ++ ++ ++ ++ ++ ++ Copy video URL (no country filter) ++ Copia a URL do vídeo (sem filtro de país) ++ ++ ++ ++ ++ ++ Copy author URL ++ Copia a URL do autor ++ ++ ++ ++ ++ Paste video URL ++ Colar a URL do vídeo ++ ++ ++ ++ ++ Local movie file... ++ Arquivo local do vídeo... ++ ++ ++ ++ Remove selected videos ++ Remove os vídeos selecionados ++ ++ ++ ++ ++ Full screen (return with toggle-key) ++ Tela cheia (retornar com tecla) ++ ++ ++ ++ ++ Attach this video ++ Anexar este vídeo ++ ++ ++ ++ Auto-suggest a search pattern? ++ Sugere automaticamente um padrão de busca? ++ ++ ++ ++ Auto-suggest ++ Auto-sugerir ++ ++ ++ ++ Enter string to be appended ++ Entre com o texto que será anexado ++ ++ ++ ++ Append... ++ Anexar... ++ ++ ++ ++ Enter search string ++ Insira o termo da busca ++ ++ ++ ++ Appended string ++ Anexa o texto ++ ++ ++ ++ Enter the string to be appended when suggesting a pattern: ++ Entre com o texto que será anexado quando sugerir um padrão: ++ ++ ++ ++ Valid placeholder macros: ++ Variáveis válidas: ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ ++ Choose movie file ++ Escolha o arquivo de vídeo ++ ++ ++ ++ Full-screen mode -- press %1 to return to windowed mode ++ Modo de tela cheia -- pressione %1 para retornar para o modo de janela ++ ++ ++ ++ Full-screen mode -- press toggle-key to return to windowed mode ++ Modo de tela cheia -- pressione a tecla de alternância para retornar para o modo janela ++ ++ ++ ++ video player: the local movie file '%1' is already attached, ignored ++ video player: o arquivo de vídeo local '%1' já está anexado, ignorado ++ ++ ++ ++ video player: a video with the ID '%1' is already attached, ignored ++ reprodutor de vídeo: um vídeo com ID '%1' já está anexado, ignorado ++ ++ ++ ++ Buffering: %1% ++ Carregando: %1% ++ ++ ++ ++ Playing ++ Executando ++ ++ ++ ++ Paused ++ Pausado ++ ++ ++ ++ Fetching info for video ID '%1' ++ Obtendo as informações para o vídeo com ID '%1' ++ ++ ++ ++ video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' ++ reprodutor de vídeo: houve um erro nas informações do vídeo: ID = '%1'. estado = '%2', código do erro = '%3', texto do erro = '%4' ++ ++ ++ ++ ++ ++ Video info error: %1 ++ Houve um erro ao obter as informações do vídeo: %1 ++ ++ ++ ++ video player: video info error: timeout occurred ++ reprodutor de vídeo: houve um erro na informação do vídeo: estouro de tempo ++ ++ ++ ++ video info error: timeout occurred ++ erro na informação do vídeo: estouro de tempo ++ ++ ++ ++ video info error: unknown reason ++ erro na informação do vídeo: razão desconhecida ++ ++ ++ ++ video player: video info error: %1 ++ reprodutor de vídeo: erro na informação do vídeo: %1 ++ ++ ++ ++ Return to windowed mode ++ Retorna para o modo janela ++ ++ ++ ++ Full screen (press %1 to return) ++ Tela cheia (pressione %1 para retornar) ++ ++ ++ ++ video player: video image info error: %1 ++ reprodutor de vídeo: houve um erro na informação da imagem do vídeo: %1 ++ ++ ++ ++ video player: search request error: %1 ++ reprodutor de vídeo: houve um erro no pedido da busca: %1 ++ ++ ++ ++ video player: search error: can't parse XML data ++ reprodutor de vídeo: houve um erro na busca: foi impossível analisar os dados do XML ++ ++ ++ ++ video player: can't determine the video ID from the reply URL '%1' -- please inform developers ++ reprodutor de vídeo: foi impossível determinar a ID da URL do vídeo - '%1' -- informe aos desenvolvedores ++ ++ ++ ++ video player: can't associate the returned image for video ID '%1' -- please inform developers ++ reprodutor de vídeo: foi impossível associar a imagem para o vídeo com a ID '%1' -- informe os desenvolvedores ++ ++ ++ ++ video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions ++ reprodutor de vídeo: foi impossível salvar a imagem para o vídeo com a ID '%1' no diretório do cache do YouTube '%2' -- verifique as permissões ++ ++ ++ ++ video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct ++ reprodutor de vídeo: foi impossível salvar a imagem para o vídeo com a ID '%1' no diretório do cache do YouTube '%2' não existe -- corrija ++ ++ ++ ++ video player: image download failed for video ID '%1', retrieved image is not valid ++ reprodutor de vídeo: o download da imagem para o vídeo com a ID '%1' falhou, a imagem não é válida ++ ++ ++ ++ video player: image download failed for video ID '%1', error text = '%2' ++ reprodutor de vídeo: o download da imagem para o vídeo com a ID '%1' falhou, texto do erro = '%2' ++ ++ ++ +diff --git a/data/lng/qmc2_ro.qm b/data/lng/qmc2_ro.qm +index f3bbcb2f06d6d6028cfd79c73fd9cd0826bfa723..d097092de87ccaa8f50a01d949c17322de062700 100644 +GIT binary patch +delta 11832 +zcmXAvcR)?=AICq>^W1aKz2~kpq|!y{YN$vhJv@!0KHA-~_x5k;p9Z37jnu^;LEelt{B?BJmNg@s&to5g?J-u18J=Qoj{)F0xu8YkUNG5#UBN +zvJyEJfNu}9-Ew3vAnpw%(gDE$O$)#X1v2ResG1{@4#pQZ{QywV(!{DFiFEK504H<2 +zkAwWns%H|(g=P}z;7dpxY{5Je?^#QvgFgW@YY*hYWB|7T03Ost&-Z^RcA>7WkQE8EYRUN;?6^Gf9fQX^DiaRw7=K0 +zfnK~Ik$J5XYpF+Q#utDHT$Nh~CDM!><{pI&ckj)+ev~LeFMP_e7)7yb;D{lUY8z9@3 +z5A5tY?&f-imn{OWvky>ps)<#e5}D;;6WiPbZunAQRx3;lRv@><~?E{p(fQzAfC4sbgM1GL=)+^)?)eR=}7&l^p3CK6x!=!KXk_Z7-; +zP{m0=MO*Qn+`~5L3UEJX0)5tBB6EIWV%T)iiT5?eh#-I37wC@Dz(<9lT^})VZ#3{n +z3IX=>5=lT9@c0MU7Sn79ZmKy=&vk1)&b_W{t5uE4F0@~eEv{x7c`W1rfRVRQ$&A|0FN>Dpb +zaBJKgISAYmm!a(kgWEW?(9wq_l8{XjnQWanO`)d=xniEeV0*wDT2xp99DNSH@{IuQ +z?VNDw +zoOc35wjBk`&K#mbEYbEtAu4Aw(5Tm9tf23j?F3QtmjV5n4bf-20`0dJ`kg^9w0;5o +z%FY5=V30`dq9iig;n0872w*)wLI3h%fWZ3@V>TCP|M}u2K_4Tl2Ln_n4UIxf4805k +zhaCsj@E#1zM01GTW#XFs5=ny?82CLE=*~qD`*Rx*`|S`n5zQ%oJq#NB7RcKM5MTBc +zn0s3>Ox4k0hXPW3W&!NF4=HGn^yO0+HChHVcMOav3j}iZrnp1sKGVTIEosz-uSu% +z3h#uWn@)#A!#N;1+u-=d?LaNMz{!c90M0Lk;&n;DV&B8*!leKmVtMS} +zGU^{P+8bYE20unCfeE|dPstfzW{FT&glnDih(IRlgR!|pGP8|DW>rc^b6lkkI>Lpa +z)oxBF{O)8REnX4D9SfAHHAHD;1H`f(5yqB)9liLS2m&ZUyts;I6zX4g6K>Wiwpe_AHAFY9=j}c?F`heUL61#0V(88M}{!A!9 +zs{#{~Kq9pg$&e&VAd`2H#QGK(Pv(-uqRv1k7{o%Yhq2EbGIG5a(7N+vQt3oCuf=VtX+^d+WI(m~ +zWQThxke#t)=joQf=30@WrCDh7_sHS3A2HDJq`X)MWL5MCRX~|#W7I+)TjdpmW +ze3(Sm@&LJ;)(KdbWODD|1&pclMSC+t_@GGg6kVI%d`F%>{|cmD3VB}r8OY|-owE$(-q_#^LkY~q9?Q|EQGtZNEF}R4EdWy@;JZR%; +zvBWG`c(;){wm1N^YOScLXK>YjrS2c516h2Zdc3{`Ea4Ju*##%rERuQ`qRRIjN83EW +zFwtwM7+cTR2zzM9uO2`yJ*AyX(9>?^(Jp6h0;F#+QEV-d{4?Fe59%w0j_ +zB7fm{F4I9#>wvmui%#YS*9+b0c-a}C@pdMDeoxc(>;pPrFrCl|4Qxw4I`IuI{nWW) +znz;v^+eFMa_Yf2o^sh|OJ7>jv=260hb#&WAe_*{1ia{3ofcRr{hcAw?^p`~DF_rH8 +zvmHn?N4m=u*SB>&x~ug;AZ@$R0?Va9-wmP%E@32X{6BG-g@-Z0Ko7eQ1`^bW{x=ep +zIJB1jw+yE^ela~dv=xx{?dfsH3SiR?(vw*npzhKV+%9;0k)ETdI(ydBvW!Sn@H_P4 +zkPM))>*>}0sQ}YD(QA`-Vca#)TbmC8

rLX%nI#`He#}N +zxH?yRN@TtcOg7;$78?&t>@;2?4Vi7?xeF$K?)8_L5qv!%-C*7KGTC#KrfG|rF4hv* +z&^gRH6Jy%gqs%VqHV~&|W*>~=a_|e&n<4kLWlf$s0?W`bhlA+VHylKbl|G@sj(L`1 +z20eBt^WKi*IC6{mifw`Vk7d3e@H*-(^E2BERP~7kOkWL9!Lz{LAAzh0VS%SHS%2P{ +zwadMVnbk`c(&`hC;d@v}k1IfJ{$rtmXlo7Ui@8>MV9XPMIy)8@ZUa=QVS}1=zz7?}2JOUTa(o#ZGI9*E8ym9zFXyr$dkBEv +z9EsG+$Ha$6C9;s^EO9)h?!Pv(VMGKYsi|Ni9baOCoW@2y8iI;$WTW361nRVcjo*m- +z)@d|LJ@XM*)1PeOQ4zrZ8Z$n@RN&l0mN^m!niIojH9@iLf0WHSJsaTdH==Um4bXOW1$eXgcj&*wG`nHXBy3^WRqj9URKa +zpf5nT8i}O$D|Y3pIk0Bk#UN{aSBHh{X@}duMz3Q}!;b)coz9-MXaOv80DF1SAB&+w +z5@~uVdu6KzDEVRHwUz9Zof62e>+E$J=Cldj#e8dnSJ+fpMi}OWY!Cl00wuK +zH8|b}9Xw2CcL%GfgrBm;{`trTGAEq}um&q+PLpx*e*czvTCW5*n4K?corz+a7AW&y +zfg3nxlB{juSrqz0S;!_EAP#?I9r6-^rD(((4Gf`flV#y2QS&s{WqoJ80J_~Ei(WSk +zXnS*6znVV)XE(_Pc%n|NsFKCq^akdmmBj}?2GY-47Jm-iY~o}w$VNW`1#@)H3n1SP +z$i@u8;f1e~jcf5gEX0?{rnf{{==?-BV<1ZMkE^nbyazz?rpspeqc>Mu$!5Rz19HGg +zHfI$kwyoO8=ABvqG^Mv};cW|mNlj&o{=-P3nIil5Xe^MMmEt8EkAQv+Wh*Ac0n{Fn +zt=v%n@bQ;ywO<)vh?A{}L3MhZEX!+)*AME+)=IxmlWp1HfGK^2=wrLqwswka*Og@e +ze;&&A^hR%sSS{Ogv=oEzKC#wT@0v4Ic0`T2d|id?XfL#gUM*!uS9=0=nIb#Aa3hf9 +z%M$6e3!;ymhpRAAR>_=!@L96TU+79VpULhX@xVx{RHI8!$L9eoozunR_IhJlH8=h%I+Lz~n=l9me{Ln0-WjW_Mq|0D2QbOn +zx0svZ`xrCADsFb}N1&~`b93YvRp$+pNUdGCY?T$}&`Df&6`INWUfjIuI3VUjxcMDR +zus)h3kpxVaNE_Ve7SHbh#JZ3Z2hIX9L2qN^Z*$AH_yB}FGBIp`M4EBP#4jSZq7w#6 +zi^1IL>=i)g@0Q5ymT+tPDuDi2B#{l+!>#|Tk~e>I>yK>5K;SiVF$)851{x44a) +z2BPBM;kGztf%pT*Fuj7?k%6nF+|TWpcLqp(V&dvK66wM!Zm$pS!Q!vnzCAdvh#wNk +zhQ{2!0<21-_aRYa?j&*h-eQI3aD_WiiMHt9h&vX6&zr2hUY$DJx9*9;J&7L0A$z6!TlL_A06b-=MDCe +zLgXyl1*2DIxx8j6cAtFZ>MoJkleA_ +z>w>kaK^}Z_EYRXP@(%f!058mthnb=Iw;3kycr*y}9-j&FZr(kB@w??c{y<A;4)mX|o+2Pk%smkfV`DTI@ljB?O%t+>p=;MH!R{05JE(bHCb +zqyJ`{^-zf{w6narS9>5+7s_k;O$FFJP5z=f0+|1HvDU%ExLYg#)*uIaGNtnGfaOW> +z75R_#+ks6r%6~dxklFcE{woD-U`7LZT}Sk;@56Y~A_s%cRGzKD$Mgy1`PO)S?=UaS +znulAR%kQEQImj9y9y53sz~X#@8}I5<2y{&>?^>J+#CtyPu2KQXIKz9d>kRb!IEgG~ +z4Ii=?Q?XmG_|U!iDADiv_S(ysqN@2$8=Di +zra8>_zI6&{Xto&Hw4+y_3w)F~73khO5?S->{D8w}0XB~06KA55snYqOCyIf_c=5x6 +za)9o?Dqd=8Fz#)@r`)~_jK%PyuzDhwdhw$YW!UP<<|k~J1+1$-KcO0@(drv`yF$e#=i^yB!0Vo;S8YW3wpdGkSl`-I=;*^4U70P{(?gp(0f#jH5iPM1$@QzR+vd|=5Kbvv?u;5 +zf6Ju|yWkD^s;Wvf^m}~O?;!v^`ttV*P_=F^ +z<?S%n`x@_`Q)D(h3-sR{#jHB4gyIG(W?#hZzSLVHYxPi(Q}h*ku4NLL +z{ceS5*$}AwlwyVTZJ=9!Dps7pgzVO1MLuT*FtN8{doy&;(VSxYB_BM*IH=gsG7+e* +zk77qn9QOTf6+5fZ?HWB-?0lpI@sV?rfXA&Ay9@9Ps`WjIG+?Ggme^ad=Mr{{{`XF? +zZv?t@>tx0L1KY8$_D)e?Gai`gmKfw>2;JeQC{3=xB5k*#6x)*IZH1yNg9Bz;su9`sSJ~r0EYQSy%3i%~fSOe* +zBf4${raP{T=!ecQ@w_s6HTrC=LfP->nskw8MBfzrM0qh9zUmMiR-JT#59mD6t#!9ic3qjT<|&N_iUpkTfw!q-~3oXV2rc +z-bC7VhVtxld{B!tiKOC6ghk$uDauRkTQR#U +zQC=ozfIhC4$U1~6Z}~mK?C+37QtB?|x$9}~)8cV=!-$_H%9o#UJGXaH*1DGg<9wC1 +z-O7O6`KbJwkPg)Gq4GyQ5A?LZ^5>;A?BJ9s>t><#E}pBbTT%(EWr9Elh(PVL1eS_9 +z#zb?8G_t=S)FuKs{Yy}_#csW_m>1)}#lI6Qe7#Zq3k92`+d!`E6dF%J +zIVqVUIDVRr8ob=Z3C|=lXv$UAzvnl^8+qLjCJ&`Ad$6E +z3h99ujklEu>BEtEzQW{c)Q~}^g{g_i@#exbb0dbLa)~UkQkb^>12E4aVp@yfm~K;q +z?6ucX#gip6myW`MajO6fg~H+lY^YAM6~tqCz!WvYvOzbnUy~^;PjLbIYMZe99%^B? +zy~6Uhct3Kwu%gQvEDaw@Wc_A}nwEOH{ix{P(wAPS6q8!|hS$~!$L6O3?R&t)$+;%} +zIwX5N<#82V&?V+!=~)zG1a+w*s?d +zmr26i_v7&h!cVB4+!N2;UJ8$F@sKgfPI#7O2W)b-xXddm=KLbzRY#0lSLG6E!ha@~ +zO)~MDpG3xcnb_jAiTzVd9O^E74n@Cv(p~rx8i(n$weTk@A6UP~Vpyx5wn0l(y8cUn +z-WV*AwI(Xv=>9-g{SsaBXaz4=kwGa6}R9P`pPSQ0D?wXzE8yf_+pS3NdyC%~ExavjCbMrRw@29*9t- +z>Y?)k2yUZ_zPA9#hsmn=qo2@?cc_LsSHKXmwY6%TeHZLd<*6o|wE=RtL^WA+8OYc= +z)#RF{m>s@SP5xAf$9_8{vbYzj>7VU@WaX(c_Vz*p3R7iPV{jb5)x;k`s>~XkKnIm7 +zI}59d`WfOSZ@p_mlxorVF*pyciBI;bmMmQYaPNbO)l?!QjYTUTgV*pqs!hMJd3j-r +zDnAR`EJ+JgyS;h=8PHd?XWblt)GXEht|)Su2ULaI4gwufAzCaHLsXlGr04!Uk`gRp7kvVy4c=8#gGg(bi-UD-bDF*qv7}a4% +zfgD_**2dk(6N=Mn%hNZ3E(=s!`=MSYeNx*rMJwGcD-N +zlFwhF4!%->KKHLg{4he@R*$`pQ%lq#Lt+4~q^LutZ3glsLER}4lch&$b=L`K7iW&E +zyKdMF)GkNedoP~2e0(V8`ssz5A?olbwCCSRVxgZ$z(58F=S9cP&M +zP$!YKO;RTZHwAJkR-Mv36JuS7dTdJzY^RlrxvlMokh&r283XzQymV1#c^<)5{08;B +z^@#vyUaNC+mI4&cS1&NfN&WARMCR|HUYLycPqtGp9FKo@wu^en@Fu|e-cyTjui(+^ +zWc9y}ShL+Zx^G$tegn+%4?dr?-(CW-ut1Fi0;Bj7x`hSO_F`xgfzBv)Q1l>QX?>Gbk`^Qgx +z=bxECy3JBQo&NyavkLXI*XRS6G$!6~RKL9H4fMk>buFC^w9yoGZSgFi9TU`_8sf>2 +ztiAfn{HEyYF+0>h8kk|%c)9vV$0JyX*J#0ev)D|L@pC +z_0=@|Yr+S^C@(g{s>(d*jB(l~?Vr{?z!Q+S~q6uc_ +zCtitJZ9I&dKWUOS`{QLZ&CmoCxIRIeVPDY?R$kX6w+=v)P-&7ow#OQAsYGV>P?KDO +zcA7jS{HH2a65M)f|Y +zDX_(CUR|mw*dB?i*+L>~F;R0!c>pt<;kU%&frjvDYR%~yFYMwR(3G{d!HG}Ql*2mg +z4bRq;Ct@`s-=?{E9p7{PtwiR>G?fGe*mkz&2HOO%&|7nJ_eP*Xp5|sD3Ua5VVo;FY +zxOBMY)ec+_x3iiL8Ou=vXKOxM6=2QOL-X;E70{zIG~e7eVmpIrzPJ4V&?R0X3EZLu +z3v;Z+mzh{MQwx{7;yFvEmTkvnI=WaZUx2$l!ci-Kc@SXHFD*a)15jnLR(LfX$i{YB +zt+x%dq1;ogc4{+hzPf3(*PQ@99n+fm{H=l(Xf606Y#cw(TAo2+a|qE|{bPe}lCG^k +z=PqvKPSGmZV5GOT9^y;ks+8|X+ +z36!QqKOM}O3|ZR3Wy#vpAN>Kc5n({{H+V}E)|+e6E+TeVT!GjkQd!))!4g@e%B +zK52)2#&O%nn7Dg}cKGC#IDXG_+L0G(u!Wf?kz6^Wo#-e6OSjZcb!rcEU~jFlC4Q(7 +zepQ?CH5%(Al{Vws89cDvC;rCqTQtxvd5Lj0twy`-Vt4fN1=>|_-vj-;NV|5%COl|( +zq1|#U70*Kov|CP~6crh?TRvcdR&RrLf4L{n%8lBB3s!iLIZ}IY13I(yHf^C_9DYJJ +zM0;rE3!pMr?P0qP_(8)n?a?7?futmAi#vJY3Di36SxqZwMJkH47cFlCxm~NhxTYJB +z%x&6hzL>x-9;v-)TMy`L(B4i=16ZA>t=aS$zkP8K@3rk|Uh-Q9O|giHYOf>N*m2hX +zBL=n8(=PF1Y&(5u_!XVy5%jLWFcW`&lE@M_>8yWXXVjuh*I>jAJa!qNvu%Wn#Ike^ +zN1VY<{3?lbc@yz?JH7cTbDhhn%{cfqIu~rr($rkBww*nGl`>Q3y|Oc~fh%vZilqyouZtP90&l*ocNx{jOP0IBuXb+W@?b+=O2S%bB$?=FedvA&7bt0l7FH@co< +zF}s>~O4oPv3xJpqU1Sp+J~^g~`i{Xh|E;dyzK_7d9dv{LH%kp{_A%Yy$6=Ur3gWU5 +zgRx!*-S_}ZEvGHhrTrC?p<8s5@S_NLWT8vnkDHaXM>n}{8J>R1BvPw^x~Y9I|Hv6B +zk=B1_;)DG<<5lecp9;`r^vMDEvQIa+<^>vMtZx3860G$GOQhfKN@Oug-TYTCP^4~W +z>XvLrb$nW1xAHkQcgpWcWM0j6dG6=1ufI;0mz0mafI!{){aCT~HcBKT3UnLhMPS3u +zMYk~py{6?8-6l0!k!z4{v%vwglDE1;$;APIu4x6CQHc=jS#yc>N3BFQkQc4myYcf6GXS&H1ImG0N#>glMQ=I~ +z&of0Y6!bh<{$8MWms@IRzoOL|TH~~QuQRQ`yqzPJ72Rw_iKfUVgr>@iu5_Xcbwv&O +r(HvP(^+1~9FeleYx8@pIo8`KrOi^^>KUO0YIh|v@g+tfa3EBSvAD(bZ + +delta 12788 +zcmZXa2UHYGx3+gxO;1lA1Pq{z2sk7`MS=ta8B`3Qs3<4`0!mN;5sx}5n8DO4Cd@e} +zM2`s-0|ty7#jKd~Q89;q)3et1fA?P3!iOGux~r@9es`#TzCwF+t2Ws0Kw^_~@0KsT +z*rM67!K;tl4FCvq000}H7i>f_x8+D%AU^w%ZGco=L;B+1KZ<1S#?K4xXj=6FKr#&A +z`!118C7HLdW0!_Y@aQ@~tgT2oS&RG*MA=j%YZL*%De%}|Bx~{T;s9FbizI4;NIDZo#Ni-b<1LZI%ts_^u0xIm(x@GBCh~zu +z*3t`k0ie1s60cc34uB5?8r%@s1BgpAk#x{u0J}Y4fISlN7q~M`Bu)H<#3$d=*2p_$ +zB59HxKuc5n90ys?JI_Rt3tL3eq^`)x`1e^x-fb+BCXE8H4+L@nuj@Pjz?B-=`rmpA +z;nc~g3a1kPL_-FOWW7fi8Cwj{swFN9UK+{V&I%<|=hklnKxhTfbPgaa0oUh`NOC@1 +zBpo{*ITh%YFp!jV>M)@F&VytT4(ae$ +zkgP;w_!$9`4S4`Z-iss^H$>9$M?ta?jpS%GNH(npdVQ&|P|}g!z9UpiJgH=cpyoQ7 +z77PW+51i5OcZ~cwR*2>FmiJA7)5(GE4g#*tI$({mjqKD@DB-$CUN8eL%mb+Qppg%@ +zi)0p_Mt1H4T*?AqmW_-In2Ov4(5H(?T9^mi=mkI<9RqHhKbk^_&_Swm6RrTaHW6UT +z4B)m72I#a_Bsr%CZreJb-i5&Ja!1pijKteNOBSX`Jrx)5YUN2lix&&0q^_0$5y1VJ +z4D{6vk<2C8$nc+nn)kFE)BvPUdjs9s8Tja6^aC#=_f`wByv}fb63DY#19i&*6Z=;{ +zK7R(2dFW!!&7e_X8PL?z&}cSt({5<|t{t#~7trLAEzmZ$VB!A(Xj^}7n#l{_Aoe)ngNh`KqT>BE0W2rzpL-4Ht#869nciviIta&`{oyeqSf_k$ckfB|?#0?{xk)bXzh6Sb`5kbUFcWZ@-ZbdWdAw +zXV85X+O4FSa918;n6UwR$IQeBw}w8QGJrLo3(@}OKzEfx^o+4U2MmMgnd<@0_Jioc +zg#aOSBFUt-B5C1TBY#SvZ$%fNvCW|0N%Y!g_Rz1g0?2H=NZNdXNTz!V{WFFEiy8&} +z&zFN4_}zmTlbJx{6c97~6Oc1W!ghr&Mm7fqC{a^vj~N--4F)D30oGyw49qV@+udg5 +z^4%gylNcEIEgQ$Jf!H6LfLLvYxLmZWEjk!9_#KdcZ$W(J7hr9V2rZQ%Han(5x<>)P +zwtJBNtUu6qiI9;g0Xpw3jHvVja%!zmq|^oUmV?20DbT(=OlsW~==nOBc^l1Wyc&w0 +zqnMs=53|FL0`YGT^Y5er%ia%yK!LQH4vTAX7EMxwH%gu1T^N+!3I^8jC+tt*fXvtg +zN7ifx+Bgi3<$l7+T>#}PlYkA$gcGGGcOfw%>4PXZQMLdtcUB}FlxE}?<1uUV3(lHm +z0qy1m=ez9z+HwI@xyAu&IuEMeT?O*U6mE_12Sx`J3q>lOO?4eSiK_w_9STn#djqAl +z@O<#UKoeHO^UZ63<_r}ss`Q3S#qen^$_+}@*Pl~>loi2uNJZg9_I1bGbcgSma$s5~ +z_VxTBFSW5k<2ofkXATLL0ZBEqg`+MLip{eK-#<_vRh`T +zTMvo6p#>2021GIP6f~t*a)}}jmHA&F>UzFUBm~G>n)ID +zPl>&}F)*nwaR|u)(zk_?uSsuRsNT3P>)V7h?9&^d)AGid&Vo0tq8{qg1 +zGUhpszF!K-k9q)X)M=8Rj?CgnzM-B$q#y#PI&U2*NJbSdT1lq2OaCp +z7#IvD^SW*V7C(vg#bPqYO#=R7G}Fa=o70CHf(M+}`jIbW^?va%Jq=73Xt +z)uf)dHtpAu>dyGVr6(epXIpYRClpx3Gjey|IgHllgg07!WWqJ_6n&rG$skXke*w}U +zojiX~2V~s|^1OBk(BbpR%T7;###|?_{I3JqRzhA~TLDnnn7j$E1oE;oc{9Ng=(G^> +zJ_aXo;{_qf#Fe&;6Be3uRD4XNwr%zTeTc$nqIa^*p)MaL0GW4>y1u>%EV(Of8;%d@ +zEKv7Sj1>LeQ{Vd-X`&trE)6^lY&Q-0;tJ$)Dh)e@u6Va84L^AUAaAviLVJ;9_yi+Q +zGm&&+Gm%V_Z{$cb+O7LS)c#(yyR;X;q9Zgi0DUHX9_?Eb4CG388nY=1n7kJq7>4#( +z_?X7E3kEYXb1{wU^Al+AZgf!eN}#T%g}MfMrwf;8mgFSRq$Ngv&!jm!b^#r9kB$yS +z1KaWs&3%hgKS?G8o4V53D}@|WSB0`4t=BPnKS0=S8m+i!LpSAm1MBT3sLgafLw)EL +zPaNZgu_Bq5CW@OS+xLok~0zFOT +zK=6J0tfP8sQZ?4-1P_moeszF;sw0Za!EB~8LGC-kT0FG{Hr0pO>_e}< +zv0k`qt{bv{32S}k9>B<<%zZPCs)jhbFdWV-|iETlpV}J;u27+uPne1ZLNhuh;67dykV?IQYn!B +zo<_du#v=ElsZX56`tCvn&JAWU89jjhGnEY(@dV&cQx+F#0aO*q2H6Jz-F%1*+KOrD +zm}x8_Z3I%z5?0kSj3w+K0ABbxl6qzt`P5q^3u(v_vp(ax{anYAiGb_Uho#xRMA7@m +zG9D$MwrmN|piCjBk>23r#a91$gh}Qc +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 +z8F{IvJZ-}nvkW2HzIwuA +z%;&$z*99`%>N_OgsCNLCuw1@V9fZl-AdzH=uY7M;>j&!xC}gD*2JdyMWom%8z!&NLScMUM|6sv2Ama|jUU762wdHGaa +z;K_I7C-6klLNAgAdB`iy;<2twBn|v6uXv6ZYLg?9RF4!%t5%3)9?OM`t@J+YyUEXE +zCxn<6$dOgCNZ@)-#)?09K(a}Dgg$Nh@ +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 +z?^OSdQQ{&bW>!6MRHMW@{r_c?^^DKT%FP^= +zSe6n+mr7h3;RN&$#}tWY{@?jiNA|FGh|I+4!v`sQ-R1RXMZLHi=G6Ov + + +- +- ++ ++ + Artwork name + + +@@ -329,183 +329,183 @@ p, li { white-space: pre-wrap; } + + + +- +- ++ ++ + Select / deselect this artwork class for removal + + + +- +- ++ ++ + Enter a name for this artwork class (required) + + + +- +- ++ ++ + Choose... + + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + + + +- +- ++ ++ + System + + + +- +- ++ ++ + Software + + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + + + +- +- ++ ++ + On + Pornit + + +- +- ++ ++ + Off + Oprit + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + + + +- +- ++ ++ + Folder + + + +- +- +- +- ++ ++ ++ ++ + Archive + + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + + + +- +- ++ ++ + ZIP + + + +- +- ++ ++ + 7z + 7z + + +- +- ++ ++ + Select archive format + + + +- +- ++ ++ + Supported archives + + + +- +- ++ ++ + ZIP archives + + + +- +- ++ ++ + 7z archives + + + +- +- ++ ++ + Image archive + + + +- +- ++ ++ + Image archive for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + + + +- +- ++ ++ + Browse image archive + + + +- +- +- ++ ++ ++ + All files (*) + Toate fisierele (*) + + +- +- ++ ++ + Image folder + + + +- +- ++ ++ + Image folder for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + + + +- +- ++ ++ + Browse image folder + + + +- ++ + Choose icon file + + + +- ++ + PNG files (*.png) + + +@@ -1238,7 +1238,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + + +@@ -1361,17 +1361,17 @@ p, li { white-space: pre-wrap; } + &Ok + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + All files (*) + Toate fisierele (*) + +@@ -3469,42 +3469,42 @@ p, li { white-space: pre-wrap; } + Inchideti + + +- ++ + Name + Nume + + +- ++ + Domain + + + +- ++ + Path + Cale + + +- ++ + Value + Valoare + + +- ++ + Expiry date + + + +- ++ + Secure? + + + +- ++ + HTTP only? + + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + + +@@ -4482,7 +4482,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + &Deschide arhiva + +@@ -4526,7 +4526,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + Niciun dispozitiv disponibil + +@@ -4579,7 +4579,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + + +@@ -4591,7 +4591,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + %1 varianta a + +@@ -4601,27 +4601,27 @@ p, li { white-space: pre-wrap; } + Alegeti directorul implicit pentru dispozitivul '%1' + + +- ++ + &Close archive + &Clonati arhiva + + +- ++ + Choose a unique configuration name + Alegeti un nume unic pentru configuratie + + +- ++ + Unique configuration name: + Nume configurare unic: + + +- ++ + Name conflict + Conflict nume + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5314,25 +5314,25 @@ Use local value for option '%1', overwrite with global value or don&ap + Data modificarii + + +- +- ++ ++ + KB + KB + + +- +- ++ ++ + MB + MB + + +- +- ++ ++ + GB + GB + + +- ++ + TB + TB + +@@ -5473,42 +5473,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + FtpReply + +- ++ + FTP directory listing for %1 + + + +- ++ + Name + Nume + + +- ++ + Type + Tip + + +- ++ + Size + + + +- ++ + Parent directory + + + +- ++ + File + Fisier + + +- ++ + Folder + + + +- ++ + Unknown + Necunoscut + +@@ -6005,212 +6005,212 @@ Use local value for option '%1', overwrite with global value or don&ap + + HtmlEditor + +- ++ + WYSIWYG + WYSIWYG + + +- +- ++ ++ + HTML + HTML + + +- ++ + &Load... + + + +- ++ + Load notes from file + + + ++ + +- + Load notes from an HTML file + + + ++ + + +- + Save current notes + + + ++ + +- + Page load progress + + + +- ++ + Hide menu + + + +- ++ + Read only + + + +- ++ + Show HTML + + + +- +- ++ ++ + HTML files (*.html *.htm) + Fisiere HTML (*.html *.htm) + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Toate fisierele (*) + + +- ++ + Select file to load + + + +- ++ + Select file to open + + + +- ++ + Save a copy + Salveaza o copie + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + Formate grafice frecvente (*.png *.jpg *.jpeg *.gif);; + + +- ++ + Portable Network Graphics (PNG) (*.png);; + Portable Network Graphics (PNG) (*.png);; + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + Alatura-te Grupului de Experti Fotografici (JPEG) (*.jpg *.jpeg);; + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + Graphics Interchange Format (GIF) (*.gif);; + + +- ++ + Open image... + Deschide imagine... + + +- ++ + Insert image from URL + Introduceti imagine de la URL + + +- +- ++ ++ + Enter URL: + Introduceti URL: + + +- ++ + Create link + Creiaza legatura + + +- ++ + Font + Font + + +- ++ + Select font: + Selecteaza font: + + +- ++ + XS + XS + + +- ++ + S + S + + +- +- ++ ++ + M + M + + +- ++ + L + L + + +- ++ + XL + XL + + +- ++ + XXL + XXL + + +- ++ + Font size + Marime font + + +- ++ + Font size: + Marime font: + + +- ++ + Zoom: %1% + Zoom: %1% + + +- ++ + Select color + + + +- ++ + Choose image file + + + +- +- +- ++ ++ ++ + No data available + Nu sunt date valabile + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7138,55 +7138,55 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Preview + + + +- ++ + Flyer + Flyer + + +- ++ + Cabinet + Cabinet + + +- ++ + Controller + Controller + + +- ++ + Marquee + Marquee + + +- ++ + Title + Titlu + + +- ++ + PCB + PCB + + +- ++ + Software snap + + + +- +- ++ ++ + deactivated + + + +- ++ ++ + +- + activated + + +@@ -7614,42 +7614,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickCalibrationWidget + +- ++ + Enable/disable axis %1 + Activati/dezactivati axa %1 + + +- ++ + Axis %1: + Axa %1: + + +- ++ + Reset calibration of axis %1 + Resetati calibrarea axei %1 + + +- ++ + Current value of axis %1 + Valoarea curenta a axei %1 + + +- ++ + DZ: + DZ: + + +- ++ + Deadzone of axis %1 + Zona moarta a axei %1 + + +- ++ + S: + S: + + +- ++ + Sensitivity of axis %1 + Sensitivitatea axei %1 + +@@ -7703,67 +7703,67 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickTestWidget + +- ++ + A%1: %v + A%1: %v + + +- ++ + Current value of axis %1 + Valoare curenta a axei %1 + + +- ++ + B%1 + B%1 + + +- ++ + Current state of button %1 + Stadiu curent al butonului %1 + + +- ++ + H%1: 0 + H%1: 0 + + +- ++ + Current value of hat %1 + Valoare curenta a palariei %1 + + +- ++ + T%1 DX: 0 + T%1 DX: 0 + + +- ++ + Current X-delta of trackball %1 + Valoarea curenta X-delta a bilei rulante %1 + + +- ++ + T%1 DY: 0 + T%1 DY: 0 + + +- ++ + Current Y-delta of trackball %1 + Valoarea curenta Y-delta a bilei rulante %1 + + +- ++ + H%1: %2 + H%1: %2 + + +- ++ + T%1 DX: %2 + T%1 DX: %2 + + +- ++ + T%1 DY: %2 + T%1 DY: %2 + +@@ -7823,438 +7823,438 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + necunoscut + + +- +- +- ++ ++ ++ + good + bun + + +- +- ++ ++ + bad + rau + + +- +- +- ++ ++ ++ + preliminary + preliminar + + +- +- ++ ++ + supported + suportat + + +- +- ++ ++ + unsupported + nesuportat + + +- +- +- ++ ++ ++ + imperfect + imperfect + + +- ++ + yes + da + + +- ++ + no + nu + + +- ++ + baddump + vid rau + + +- ++ + nodump + niciun vid + + +- ++ + vertical + vertical + + +- ++ + horizontal + orizontal + + +- ++ + raster + raster + + +- ++ + Unknown + Necunoscut + + +- ++ + On + Pornit + + +- ++ + Off + Oprit + + +- ++ + audio + audio + + +- ++ + unused + nefolosit + + +- ++ + Unused + Nefolosit + + +- ++ + cpu + procesor + + +- ++ + vector + vector + + +- ++ + lcd + lcd + + +- ++ + joy4way + joy4way + + +- ++ + joy8way + joy8way + + +- ++ + trackball + trackball + + +- ++ + joy2way + joy2way + + +- ++ + doublejoy8way + doublejoy4way + + +- ++ + dial + apelare + + +- ++ + paddle + paleta + + +- ++ + pedal + pedala + + +- ++ + stick + bat + + +- ++ + vjoy2way + vjoy2way + + +- ++ + lightgun + arma usoara + + +- ++ + doublejoy4way + doublejoy4way + + +- ++ + vdoublejoy2way + vdoublejoy2way + + +- ++ + doublejoy2way + doublejoy2way + + +- ++ + printer + imprimanta + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + cartus + + +- ++ + cassette + caseta + + +- ++ + quickload + incarcare rapia + + +- ++ + floppydisk + floppydisk + + +- ++ + serial + serial + + +- ++ + snapshot + imagine instantanee + + +- ++ + original + original + + +- ++ + compatible + compatibil + + +- +- +- +- ++ ++ ++ ++ + N/A + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: nu pot deschide fisier iconita, va rog verificati permisiunile de acces pentru %1 + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + Astept date... + + +- ++ + determining emulator version and supported sets + determin versiune emulator si seturi suportate + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + FATAL: nu pot porni executabil MAME intr-un interval de timp rezonabil, renunt + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + terminat (determin versiune emulator si seturi suportate, timp scurs = %1) + + +- +- ++ ++ + emulator info: type = %1, version = %2 + informatii emulator: tip = %1, versiune = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + FATAL: nu pot determina tipul de emulator si versiunea + + +- ++ + FATAL: couldn't determine the number of supported sets + FATAL:nu pot determina numarul de seturi suportate + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + Date XML - %p% + + +- ++ + verifying ROM status for '%1' + verific status ROM pentru '%1' + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + EROARE: nu pot status ROM din cache pentru scriere, cale = %1 + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- +- +- ++ ++ ++ + ROM check - %p% + verificare ROM - %p% + + +- ++ + Name + Nume + + +- ++ + Source file + Fisier sursa + + +- ++ + Is BIOS? + Este BIOS? + + +- ++ + Is device? + Este dispozitiv? + + +- ++ + Runnable + Executabil + + +- ++ + Clone of + Clona a + + +- ++ + ROM of + ROM al + + +- ++ + Sample of + Mostra a + + +- ++ + Year + An + + +- ++ + Manufacturer + Producator + + +- +- ++ ++ + ROM + ROM + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8263,430 +8263,430 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Marime + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + Imbina + + +- +- ++ ++ + Region + Regiune + + +- ++ + Offset + Ofset + + +- +- +- +- ++ ++ ++ ++ + Status + Status + + +- +- ++ ++ + Optional + Optional + + +- ++ + Device reference + Referinta dispozitiv + + +- ++ + Chip + Cip + + +- +- +- ++ ++ ++ + Tag + Tag + + +- +- ++ ++ + Type + Tip + + +- ++ + Clock + Ceas + + +- ++ + Display + Afisaj + + +- ++ + Rotate + Roteste + + +- ++ + Flip-X + Invarte X + + +- ++ + Width + Latime + + +- ++ + Height + Inaltime + + +- ++ + Refresh + Reimprospateaza + + +- ++ + Pixel clock + Ceas pixel + + +- ++ + H-Total + H-Total + + +- ++ + H-Bend + H-Indoaie + + +- ++ + HB-Start + HD-Start + + +- ++ + V-Total + V-Total + + +- ++ + V-Bend + V-Indoaie + + +- ++ + VB-Start + VB-Start + + +- +- ++ ++ + Sound + Sunet + + +- ++ + Channels + Chanale + + +- ++ + Input + Introducere + + +- ++ + Service + Serviciu + + +- ++ + Tilt + Inclinat + + +- ++ + Players + Jucatori + + +- +- ++ ++ + Buttons + Butoane + + +- ++ + Coins + Monede + + +- ++ + Control + Control + + +- ++ + Minimum + Minim + + +- ++ + Maximum + Maxim + + +- ++ + Sensitivity + Sensitivitate + + +- ++ + Key Delta + Cheie Delta + + +- ++ + Reverse + Invers + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + Comutare DIP + + +- ++ + DIP value + Valoare DIP + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Initial + + +- ++ + Updating + Actualizez + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + Configurare + + +- ++ + Mask + Masca + + +- ++ + Setting + Setari + + +- ++ + Value + Valoare + + +- ++ + Driver + Driver + + +- ++ + Emulation + Emulatie + + +- ++ + Color + Culoare + + +- ++ + Graphic + Grafic + + +- ++ + Cocktail + Cocktail + + +- ++ + Protection + Protectie + + +- ++ + Save state + Salveaza stare + + +- ++ + Palette size + Marime paleta + + +- ++ + BIOS set + Setare BIOS + + +- ++ + Description + Descriere + + +- ++ + Sample + Mostra + + +- ++ + Disk + Disk + + +- ++ + MD5 + MD5 + + +- ++ + Index + Index + + +- ++ + Adjuster + Reglare + + +- ++ + Software list + Lista software + + +- ++ + Category + Categorie + + +- ++ + Item + Obiecte + + +- ++ + Device + Dispozitiv + + +- ++ + Mandatory + Obligatoriu + + +- ++ + Interface + Interfata + + +- ++ + Instance + Instanta + + +- ++ + Brief name + Nume scurt + + +- ++ + Extension + Extensie + + +- ++ + RAM options + Optiuni RAM + + +- ++ + Option + Optiuni + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + AVERTIZARE: nu pot deschide stare ROM din cache, va rog verificati ROM-uri + + +- ++ + loading ROM state from cache + incarc stare ROM din cache + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + terminat (incarcarc stare ROM din cache, timp scurs = %1) + + +- ++ + %n cached ROM state(s) loaded + + %n stari ROM incarcate din cache +@@ -8695,86 +8695,86 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + loading XML data and recreating cache + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- +- ++ ++ + ascending + ascendent + + +- +- ++ ++ + descending + descendent + + +- ++ + , %n BIOS set(s) + + , %n BIOS set(uri) +@@ -8783,7 +8783,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + si % dispozitive incarcate +@@ -8792,196 +8792,196 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + Informatii stare ROM: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + AVERTIZARE: verificare stare cache ROM incompleta sau invechita, declansez o verificare ROM automata + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + AVERTIZARE: verificare stare cache ROM incompleta sau invechita, va rog reverificati ROM-urile + + +- ++ + machine description + + + +- ++ + tag + tag + + +- ++ + year + an + + +- ++ + manufacturer + producator + + +- ++ + machine name + + + +- ++ + ROM types + + + +- ++ + players + jucatori + + +- ++ + driver status + status driver + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + categorie + + +- ++ + version + versiune + + +- ++ + ROM state filter already active + filtru de stare ROM deja activ + + +- ++ + please wait for ROM verification to finish and try again + va rog asteptati finalizarea verificarii ROM si incercati din nou + + +- ++ + please wait for reload to finish and try again + va rog asteptati ca reincarcarea sa se termine si incercati din nou + + +- ++ + applying ROM state filter + aplic filtru de stare ROM + + +- ++ + State filter - %p% + Stare filtru - %p% + + +- ++ + done (applying ROM state filter, elapsed time = %1) + terminat (aplic filtru de stare ROM, timp scurs = %1) + + +- ++ + saving favorites + salvez favorite + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: nu pot deschide fisier favorite pentru scriere, cale = %1 + + +- ++ + saving play history + salvez istoric jocuri + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: nu pot deschide fisier istoric jocuri pentru scriere, cale = %1 + + +- ++ + L: + L: + + +- ++ + C: + C: + + +- ++ + M: + M: + + +- ++ + I: + I: + + +- ++ + N: + N: + + +- ++ + U: + U: + + +- ++ + S: + S: + + +- ++ + T: + T: + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + AVERTIZARE: apel audit emulator nu s-a terminat curat - codExit = %1, Stareexit = %2 + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + picat + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + +@@ -8990,7 +8990,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + +@@ -8999,83 +8999,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + terminat (verific stare ROM pentru '%1', timp scurs = %2) + + +- +- ++ ++ + ROM state + stare ROM + + +- +- ++ ++ + ROM status for '%1' is '%2' + Stare ROM pentru '%1' este '%2' + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9084,47 +9084,47 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + Filtering, please wait... + + + +- ++ + pre-caching icons from ZIP archive + pre-caching iconite din arhiva ZIP + + +- ++ + Icon cache - %p% + Cache iconite - %p% + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + terminat (salvez iconite din fisier ZIP in cache, timp scurs = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + %n iconite incarcate +@@ -9133,124 +9133,124 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- ++ + pre-caching icons from directory + pre-caching iconite din director + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + terminat (salvez inconite dn director in cache, timp scurs = %1) + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading catver.ini + incarc catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + EROAREL nu po deschide '%1' pentru citire - niciun catver.ini valabil + + +- ++ + done (loading catver.ini, elapsed time = %1) + terminat (incarc catver.ini, timp scurs = %1) + + +- ++ + %1 category / %2 version records loaded + %1 categorie / %2 inregistrari versiune incarcate + + +- ++ + correct + corect + + +- ++ + mostly correct + majoritatea corecte + + +- ++ + incorrect + incorect + + +- ++ + not found + negasit + + +- ++ + Category view - %p% + Vedere pe categorii - %p% + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + %n category record(s) loaded + + +@@ -9259,7 +9259,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + Vedere versiune - %p% + +@@ -9428,18 +9428,18 @@ Use local value for option '%1', overwrite with global value or don&ap + Versiune + + +- +- +- +- ++ ++ ++ ++ + true + adevarat + + +- +- +- +- ++ ++ ++ ++ + false + fals + +@@ -9582,8 +9582,8 @@ Use local value for option '%1', overwrite with global value or don&ap + MainWindow + + ++ + +- + M.A.M.E. Catalog / Launcher II + M.A.M.E. Catalog / Launcher II + +@@ -9598,16 +9598,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Tag + + + +- ++ + Icon / Value + Iconita / Valoare + +@@ -9616,10 +9616,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + An + +@@ -9628,10 +9628,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Producator + +@@ -9640,10 +9640,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + Nume + +@@ -9652,10 +9652,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + Tip de ROM + +@@ -9664,10 +9664,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + Jucatori + +@@ -9676,10 +9676,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Status driver + +@@ -9688,9 +9688,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + Categorie + +@@ -9699,9 +9699,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + Versiune + +@@ -9722,9 +9722,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + Iconita + +@@ -9751,7 +9751,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + Emulatoare incorporate + +@@ -9975,9 +9975,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms total) + +@@ -10107,7 +10107,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + Note + +@@ -10164,11 +10164,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Jucati + +@@ -10200,7 +10200,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + Despre Qt + +@@ -10282,10 +10282,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + Catre &favorite + +@@ -10338,13 +10338,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10355,7 +10355,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10366,19 +10366,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10449,9 +10449,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10470,10 +10470,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10644,10 +10644,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + Fisier sursa + +@@ -10657,10 +10657,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10996,11 +10996,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + Jucati &incorporat + +@@ -11376,7 +11376,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -11581,12 +11581,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + + +@@ -11680,7 +11680,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11692,8 +11692,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + ultimul mesaj repetat de %n ori +@@ -11702,48 +11702,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Initial + + +- +- ++ ++ + Enter search string + Introduceti nume sir de cautare + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + Comutati pauze automate pentru emulatoare incorporate (tineti apasat pentru meniu) + + +- ++ + Scan the pause key used by the emulator + Scanati tasta de pauza folosita de emulator + + +- ++ + Scan pause key... + Scanati tasta de pauza... + + +- ++ + Toggle maximization of embedded emulator windows + Comutati maximizarea ferestrelor mulatorului incorporat + + +- ++ + Dock / undock this widget + Andocati / detasati acest widget + +@@ -11754,265 +11754,265 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embed emulator widget + Incorporati windget emulator + + +- ++ + &Embed + &Incorporati + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + Opreste emulatorul selectat (trimite semnalul KILL catre procesele emulatoarelor) + + +- ++ + &Kill + &Kill + + +- +- ++ ++ + Copy emulator command line to clipboard + Copiati linia de comanda din emulator in clipboard + + +- +- ++ ++ + &Copy command + &Comanda copiere + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Verifica stare &ROM + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analizeaza ROM... + + +- ++ + Remove from favorites + Sterge din favorite + + +- +- ++ ++ + &Remove + Ste&rge + + +- ++ + Clear all favorites + Sterge toate favoritele + + +- +- ++ ++ + &Clear + &Sterge + + +- ++ + Save favorites now + Salveaza favorite acum + + +- +- ++ ++ + &Save + &Salveaza + + +- ++ + Remove from played + Sterge din jucate + + +- ++ + Clear all played + Sterge toate jucate + + +- ++ + Save play-history now + Salveaza istoric de jucare acum + + +- +- +- +- ++ ++ ++ ++ + Tab position + + ++ ++ ++ ++ ++ ++ Set tab position north ++ Seteaza pozitie tab catre nord ++ ++ ++ ++ ++ ++ ++ &North ++ &Nord ++ + + + + + +- Set tab position north +- Seteaza pozitie tab catre nord ++ Set tab position south ++ Seteaza pozitie tab catre sud + + + + + + +- &North +- &Nord ++ &South ++ &Sud + + + + + + +- Set tab position south +- Seteaza pozitie tab catre sud ++ Set tab position west ++ Seteaza pozitie tab catre vest + + + + + + +- &South +- &Sud ++ &West ++ &Vest + + + + + + +- Set tab position west +- Seteaza pozitie tab catre vest ++ Set tab position east ++ Seteaza pozitie tab catre est + + + + + + +- &West +- &Vest +- +- +- +- +- +- +- Set tab position east +- Seteaza pozitie tab catre est ++ &East ++ &Est + + + + + + +- &East +- &Est +- +- +- +- +- +- + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + sorry, devices cannot run standalone + scuze, dispozitivele nu pot rula singure + + +- ++ + No devices available + Niciun dispozitiv disponibil + + +- ++ + Default configuration + + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + va rog asteptati pentru filtrare de stare ROM si incercati din nou + + +- +- ++ ++ + please wait for ROM verification to finish and try again + va rog asteptati verificarea ROM sa se termine si incercati din nou + + +- ++ ++ + +- + please wait for image check to finish and try again + va rog asteptati verificarea imaginii sa se termine si incercati din nou + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + va rog asteptati sa se termine analiza ROMAlyzer si inercati din nou + + ++ + +- + ROM verification already active + Verificare ROM este deja activa + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + va rog asteptati pentru ca reincarcarea sa se termine si incercati din nou + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Confirma + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -12023,22 +12023,22 @@ Va rescrie date existente in cache. + CHiar doriti sa verificati stari ROM acum? + + +- ++ + automatic ROM check triggered + declansator automatic de verificare ROM + + +- ++ + image cache cleared + cache cu imagini curatat + + +- ++ + icon cache cleared + cache cu iconite curatat + + +- ++ + freed %n byte(s) in %1 + + am eliberat %n byte(s) in %1 +@@ -12047,7 +12047,7 @@ CHiar doriti sa verificati stari ROM acum? + + + +- ++ + %n entry(s) + + %n intrari +@@ -12056,7 +12056,7 @@ CHiar doriti sa verificati stari ROM acum? + + + +- ++ + removed %n byte(s) in %1 + + am sters %n byte(s) in %1 +@@ -12065,7 +12065,7 @@ CHiar doriti sa verificati stari ROM acum? + + + +- ++ + %n file(s) + + %n fisiere +@@ -12074,363 +12074,363 @@ CHiar doriti sa verificati stari ROM acum? + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + YouTube on-disk cache cleared (%1) + YouTube din cache disk curatat (%1) + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + implicit + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + Jucati pe masina selectata (incorporat) + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + AVERTIZARE: nu pot sterge fisier cache cu stare ROM '%1', va rog verificati permisiunile + + +- ++ + triggering an automatic ROM check on next reload + declansez o verificare ROM automata la urmatoarea reincarcare + + +- ++ + ERROR: no match found (?) + EROARE: nu am gasit niciun rezultat (?) + + +- ++ + ProjectMESS page for '%1' / '%2' + Pagina ProjectMESS pentru '%1' / '%2' + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + Incarc pagina ProjectMESS pentru '%1' / '%2', va rog asteptati... + + +- +- ++ ++ + Export to... + Exporta catre... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Alegeti fisier... + + +- +- ++ ++ + <p>No data available</p> + <p>Nu sunt date valabile</p> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Nu sunt date valabile + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + Reseteaza + + +- ++ + Negate search + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- ++ + emulator #%1 is already embedded + emulatorul #%1 este deja incorporat + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + AVERTIZARE: ferestre multiple gasite pentru emulatorul #%1, aleg fereastra cu ID %2 pentru incorporare + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + incorporez emulator #%1, ID fereastra = %2 + + +- +- +- ++ ++ ++ + paused + pauzat + + +- ++ + Release emulator + Elibereaza emulator + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + Comutati optiuni incorporator (tineti apasat pentru meniu) + + +- ++ + To favorites + La favorite + + +- ++ + Kill emulator + Termina emulator + + +- ++ + &Kill emulator + &Termina emulator + + +- ++ + WARNING: no matching window for emulator #%1 found + AVERTIZARE: nicio fereastra potrivita a fost gasita pentru emulatorul #%1 + + +- ++ + Embedding failed + Incorporarea a esuat + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12441,141 +12441,141 @@ Retry embedding? + Reincerc incorporare? + + +- ++ + Information + Informatii + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + Scuze, emulatorul a murit intre timp de o moarte trista :(. + + +- +- ++ ++ + Scanning pause key + Scanez tasta de pauza + + +- ++ + Are you sure you want to clear the favorites list? + Sunteti sigur ca doriti sa curatati lista de favorite? + + +- ++ + Are you sure you want to clear the play history? + Sunteti sigur ca doriti sa curatati istoricul de jocuri? + + +- +- ++ ++ + Choose export file + Alegeti fisier de export + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Toate fisierele (*) + + +- +- ++ ++ + Choose import file + Alegeti fisierul de import + + +- +- ++ ++ + WARNING: invalid inipath + AVERTIZARE: cale ini invalida + + +- +- ++ ++ + stopping current processing upon user request + opresc procesare curenta la cererea utilizatorului + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Schimbarile de configurare nu au fost aplicate inca. + Sigur renuntati? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + Sunt unul sau mai multe emulatoare care inca ruleaza. + Ar trebui sa le termin pe toate la iesire? + + +- ++ + There are one or more running downloads. Quit anyway? + Sunt unul sau mai multe descarcari in curs. Renunt oricum? + + +- ++ + cleaning up + fac curatenie + + +- ++ + aborting running downloads + abandonez descarcari curente + + +- ++ + disconnecting audio source from audio sink + deconectez sursa audio de la sincronizare audio + + +- ++ + destroying audio effects dialog + distrug dialog de efecte audio + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + distrug widget video YouTube + + +- ++ + saving main widget layout + salvez aspect widget principal + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + distrug manager de procese + + +- ++ + killing %n running emulator(s) on exit + + termin %n emulatoare active la iesire +@@ -12584,7 +12584,7 @@ Ar trebui sa le termin pe toate la iesire? + + + +- ++ + keeping %n running emulator(s) alive + + pastrez %n emulatoare active care ruleaza +@@ -12593,86 +12593,86 @@ Ar trebui sa le termin pe toate la iesire? + + + +- ++ + destroying network access manager + distrug manager de acces la retea + + +- ++ + so long and thanks for all the fish + la revedere si multumesc pentru tot pestele + + +- ++ + Welcome to QMC2 v%1! + Bun venit la QMC2 v%1! + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + loading style sheet '%1' + incarc foaie de still '%1' + + +- ++ + removing current style sheet + sterg foaie de stil curenta + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + Index YouTube - %p% + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + %n inregistrari cu informatii video incarcate +@@ -12681,156 +12681,156 @@ Ar trebui sa le termin pe toate la iesire? + + + +- ++ + Select one or more audio files + Alegeti unul sau mai multe fisiere audio + + +- ++ + Add URL + Adaugati URL + + +- ++ + Enter valid MP3 stream URL: + Introduceti URL cu stream MP3 valid: + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + player audio: informatii piesa: titlu = '%1', artist = '%2', album = '%3', gen = '%4' + + +- ++ + Buffering %p% + Tamponare %p% + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + Alegeti fisierul in care sa stocati descarcarea + + +- +- ++ ++ + Play tagged - %p% + Redati etichetate - %p% + + +- ++ + Add favorites - %p% + Adaugati favorite - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + va rog asteptati ca activitatea curenta sa se termine si incercati din nou (aceasta operatie de mod de lot poate rula numai exclusiv) + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + Unealta ROM etichetata - %p% + + +- +- ++ ++ + Tag - %p% + Eticheta - %p% + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + Dezeticheteaza - %p% + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + Inverseaza eticheta - %p% + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + Detalii software + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12841,41 +12841,41 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + precosez configuratie globala emulator + + +- +- ++ ++ + Export global MAME configuration + Exporta configuratie MAME globala + + +- ++ + Import from... + Importa din... + + +- +- ++ ++ + Import global MAME configuration + Importa configuratie MAME globala + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + <inipath>/mame.ini + +@@ -13037,14 +13037,12 @@ Please check the 'rompath' option in the global emulator configuration + + + +- + Go back + Dute inapoi + + + + +- + Go forward + Dute inainte + +@@ -13097,8 +13095,8 @@ Please check the 'rompath' option in the global emulator configuration + + + +- +- ++ ++ + Enter search string + Introduceti nume sir de cautare + +@@ -13123,88 +13121,28 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Enter URL + + + +- +- Open link +- Deschide legatura +- +- +- +- Open link in new window +- +- +- +- +- Open image in new window +- +- +- +- +- Save link as... +- Salveaza legatura ca... +- +- +- +- Copy link +- Copiaza legatura +- +- +- +- Save image as... +- Salveaza imagine ca... +- +- +- +- Copy image +- Copiaza imagine +- +- +- +- Copy image address +- +- +- +- +- Reload +- Reincarca +- +- +- +- Stop +- Stop +- +- +- +- Copy +- Copiaza +- +- +- +- Inspect +- Inspecteaza +- +- +- ++ + WARNING: invalid network reply and/or network error + EROARE: raspuns retea invalid si/sau eroare de retea + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + MiniBrowserWeb + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + + +@@ -13353,3028 +13291,3003 @@ Please check the 'rompath' option in the global emulator configuration + &GUI + + +- ++ + Language + Limba + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + Redimensionati imaginea ca sa incapa in cadru (in mod contrar folositi dimensiunea originala) + + +- ++ + Show machine's description at the bottom of any images + + + +- ++ + Show machine name + + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + + + +- ++ + Restore saved machine selection at start and after reloading the machine list + + + +- ++ + Restore machine selection + + + +- ++ + Scaled preview + Previzualizare redimensionare + + +- ++ + Show vertical machine status indicator in machine details + + + +- ++ + Machine status indicator + + + +- ++ + Application language + Limba aplicatiei + + +- +- DE (German) +- DE (Germana) +- +- +- +- ES (Spanish) +- +- +- +- +- FR (French) +- FR (Franceza) +- +- +- +- IT (Italian) +- IT (Italiana) +- +- +- +- PL (Polish) +- PL (Poloneza) +- +- +- +- PT (Portuguese) +- PT (Portugheza) +- +- +- +- RO (Romanian) +- RO (Romana) +- +- +- +- SV (Swedish) +- +- +- +- +- US (English) +- US (Engleza) +- +- +- ++ + Scaled cabinet + Cabinet scalat + + +- ++ + Scaled controller + Controller scalat + + +- ++ + Scaled marquee + Marquee scalat + + +- +- ++ ++ + Show status bar + Afisati bara de stare + + +- ++ + Show the menu bar + Afisati bara de meniu + + +- ++ + Show menu bar + Afisati bara de meniu + + +- ++ + Show short description of current processing in progress bar + Afisati descriere scurta al preocesarii curente in bara de progres + + +- ++ + Show progress texts + Afisati texte de progres + + +- +- ++ ++ + Only when required + Numai cand e necesar + + +- ++ + Retry loading images which weren't found before? + Reincerc incarcarea imaginilor care nu au fost gasite anterior? + + +- ++ + Retry loading images + Reincerc incarcarea imaginilor + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + Optiunea necesita o repornire a QMC2 ca sa aiba efect + + +- ++ + restart required + repornire necesara + + +- ++ + Scaled title + Titlu scalat + + +- ++ + Scaled flyer + Flyer scalat + + +- ++ + Application font (= system default if empty) + Font aplicatie (= valoarea implicita sistemului este goala) + + +- ++ + Browse application font + Rasfoiti fontul aplicatiei + + +- ++ + Scaled PCB + PCB scalat + + +- ++ + Emulator log size + Marime jurnal emulator + + +- ++ + Maximum number of lines to keep in emulator log browser + Numar maxim de linii mentiunute in browser-ul jurnalului din emulator + + +- +- ++ ++ + unlimited + nelimitat + + +- +- ++ ++ + lines + linii + + +- ++ + Front end log size + Marime jurnal de Front end + + +- ++ + Maximum number of lines to keep in front end log browser + Numar maxim de linii mentinute in browser-ul jurnalului de front end + + +- ++ + Application font + Font aplicatie + + +- ++ + Style sheet + Foaie de stil + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + Foaie de stil Qt (*.qaa, lasati goala in caz de lipsa foaie de stil) + + +- ++ + Browse Qt style sheet file + Rasfoiti foaie de still Qt + + +- ++ + GUI style + Stil GUI + + +- ++ + Application style (Default = use system's default style) + Stil aplicatie (Implicit = folositi stilul sistemului) + + +- ++ + Smooth image scaling (nicer, but slower) + Netezeste scalarea imaginii (calitate mai buna, dar mai incet) + + +- ++ + Smooth scaling + Netezire scalare + + +- ++ + Image cache size + Marima cache imagine + + +- ++ + Image cache size in MB + Marime cache imagine in MB + + +- ++ + MB + MB + + +- ++ + Use standard or custom color palette? + Foloseste paleta de culori standard sau personalizata? + + +- ++ + Log font + Font jurnal + + +- ++ + Font used in logs (= application font if empty) + Font folosit in jurnale (= fontul aplicatiei daca este gol) + + +- ++ + Browse font used in logs + Rasfoiti fonturi folosite in jurnale + + +- +- ++ ++ + Show tool bar + Afiseaza bara de instrumente + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + Foloseste o unealta unifed si bara de titlu in Mac OS X + + +- ++ + Unify with title + Unity cu titlu + + +- ++ + Minimize when launching emulators? + Minimizez cand lansez emulatoare? + + +- ++ + Minimize on emulator launch + Minimizeaza la lansare de emulator + + +- ++ + Check for other instances of this QMC2 variant on startup + Verifica pentru alte variante de QMC2 la pornire + + +- ++ + Check single instance + verifica instante singure + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + Suprima toate mesajele trimise prin clasa QDebug sau una din functiile qDebug() / qCritical() / qWarning() / qFatal() + + +- ++ + Suppress Qt messages + Suprima mesajele Qt + + +- ++ + Show splash screen when starting up? + Afiseaza ecranul pata la pornire? + + +- ++ + Show splash screen + Afiseaza ecranul pata + + +- ++ + Customize the tool-bar + + + +- ++ + Tool-bar... + + + +- +- ++ ++ + F&iles / Directories + F&isiere / DIrectoare + + +- ++ + Front end log file + Fisier cu jurnal de front end + + +- ++ + Front end log file (write) + Fisier cu jurnal de front end (scriere) + + +- ++ + Browse front end log file + Rasfoieste fisier cu jurnal de front end + + +- ++ + Favorites file + Fisier cu favorite + + +- ++ + Use native file dialogs + + + +- ++ + Force QMC2's working directory to be the same as the executable's path + + + +- ++ + Set working directory from executable + + + +- ++ + Kill emulators when QMC2 exits? + + + +- ++ + Kill emulators on exit + + + +- ++ + Terminate all other emulator instances when launching a new one? + + + +- ++ + One emulator at a time + + + +- ++ + Play history file + Fisier cu istoric de joc + + +- ++ + Play history file (write) + Fisier cu istoric de joc (scriere) + + +- ++ + Browse play history file + Rasfoieste fisier cu istoric de joc + + +- ++ + Data directory + Director cu date + + +- ++ + Frontend data directory (read) + Director cu date front end (citire) + + +- ++ + Browse frontend data directory + Rasfoieste director cu date de front end + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + Activeaza folosirea catver.ini - descarcati cea mai noua versiune de pe http://www.progettoemma.net/?catlist + + +- ++ + Use catver.ini + Foloseste catver.ini + + +- ++ + Path to catver.ini (read) + Cale catre catver.ini (citire) + + +- ++ + Browse path to catver.ini + Rasfoieste cale catre catver.ini + + +- +- +- ++ ++ ++ + Preview directory + DIrector de previzualizare + + +- ++ + Preview directory (read) + Director de previzualizare (citire) + + +- ++ + Browse preview directory + Rasfoieste director de previzualizare + + +- +- +- ++ ++ ++ + Flyer directory + Director flyer + + +- ++ + Flyer directory (read) + DIrector flyer (citire) + + +- ++ + Browse flyer directory + Rasfoieste director flyer + + +- +- +- ++ ++ ++ + Icon directory + DIrector iconite + + +- ++ + Icon directory (read) + DIrector iconite (citire) + + +- ++ + Browse icon directory + Rasfoieste director cu iconite + + +- +- +- ++ ++ ++ + Cabinet directory + Director cabinet + + +- ++ + Cabinet directory (read) + Director cabinet (citire) + + +- ++ + Browse cabinet directory + Rasfoieste director cabinet + + +- +- +- ++ ++ ++ + Controller directory + Director controller + + +- ++ + Controller directory (read) + DIrector controller (citire) + + +- ++ + Browse controller directory + Rasfoieste director controller + + +- +- +- ++ ++ ++ + Marquee directory + Director marquee + + +- ++ + Marquee directory (read) + DIrector marquee (citire) + + +- ++ + Default palette + + + +- ++ + Edit the color palette + + + +- ++ + Edit color palette... + + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + + + +- ++ + Browse marquee directory + Rasfoieste director marquee + + +- +- +- ++ ++ ++ + Title directory + DIrector de titlu + + +- ++ + Title directory (read) + Director de titlu (citire) + + +- ++ + Browse title directory + Rasfoieste director de titlu + + +- +- +- ++ ++ ++ + PCB directory + Director PCB + + +- ++ + PCB directory (read) + DIrector PCB (citire) + + +- ++ + Browse PCB directory + Rasfoieste director PCB + + +- ++ + Software snap-shot directory (read) + Director de snap-shot-uri software (citire) + + +- ++ + Browse software snap-shot directory + Rasfoieste director cu snap-shot-uri software + + +- +- +- ++ ++ ++ + reload required + reincarcare necesara + + +- +- +- ++ ++ ++ + SW snap folder + SW folder snap + + +- ++ + Software notes folder + Director cu note de software + + +- ++ + Folder used to store personal notes about any software titles (write) + Director folodit pentru a stoca note personale despre orice titlu de software (scriere) + + +- ++ + Browse software notes folder + Rasfoieste director cu note de software + + +- ++ + Enable the use of a template for (empty) software notes + Activati folosirea unui sablon pentru note de software (goale) + + +- ++ + Software notes template + Sablon de note de software + + +- ++ + HTML file used as a template for software-notes (read) + Fisier HTML folosit ca sablon pentru note de software (citire) + + +- ++ + Browse software notes template + Rasfoieste sablonul cu note de software + + +- ++ + Enable the use of category.ini + + + +- ++ + Use category.ini + + + +- ++ + Path to category.ini (read) + + + +- ++ + Browse path to category.ini + + + +- ++ + System notes folder + + + +- ++ + Enable the use of a template for (empty) system notes + + + +- ++ + System notes template + + + +- ++ + HTML file used as a template for system-notes (read) + + + +- ++ + Folder used to store personal notes about any systems (write) + + + +- ++ + Browse system notes folder + + + +- ++ + Browse system notes template + + + +- ++ + Load software information database (from history.dat) + + + +- ++ + Software information database - history.dat (read) + + + +- ++ + Browse software information database (history.dat) + + + +- ++ + Define additional artwork classes for systems and software-list entries + + + +- ++ + Set up additional artwork classes... + + + +- ++ + Choose active image formats and their priorities (per artwork class) + + + +- ++ + Select image formats... + + + +- ++ + Load MESS emulator information database (messinfo.dat) + + + +- ++ + MESS emulator information database - messinfo.dat (read) + + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + + + +- ++ + Parent image / video fallback + + + +- ++ + Open the component setup dialog + + + +- ++ + Component setup... + + + +- ++ + Show animation when loading, filtering or tagging the machine list? + + + +- ++ + Show loading animation + + + +- ++ + Scaled software snapshot + + + +- ++ + Select individual fallback settings per artwork class + + + +- ++ + Individual fallback settings... + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + + + +- ++ + Browse MESS emulator information database (messinfo.dat) + + + +- ++ + Video snap folder + + + +- ++ + Video snap folder (read) + + + +- ++ + Browse video snap folder + + + +- ++ + Optimize catver.ini for faster loading + + + +- ++ + Setup the icon cache database + + + +- ++ + Enable ROM state filtering? + Activez filtrarea de stare ROM? + + +- ++ + ROM state filter + Filtru de stare ROM + + +- ++ + Update delay + Actualizeaza intarzierea + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + Dezactiveaza in mod automat SW snaps cand detaliile de software sunt vizibile (ar putea fi enervante) + + +- ++ + No SW snaps for visible details + Niciun SW snap pentru detalii vizibile + + +- ++ + Select sort criteria + Alegeti criteriul de selectie + + +- ++ + ROM state + Stare ROM + + +- ++ + Tag + Tag + + +- ++ + Year + An + + +- ++ + Manufacturer + Producator + + +- ++ + ROM types + Tipuri ROM + + +- ++ + Players + Jucatori + + +- ++ + Driver status + Status driver + + +- ++ + Source file + Fisier sursa + + +- ++ + Rank + + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + Afiseaza snap-shots software cand plutesc peste lista de software folosind cursorul de la mouse + + +- ++ + Sort order + Ordine de sortare + + +- ++ + Select sort order + Alegeti ordinea de sortare + + +- ++ + Ascending + Crescator + + +- ++ + Descending + Descrescator + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + Lanseaza emulatie in mod direct cand un item este activat in cautare-, favorite- sau liste jucate (in loc sa sari direct la lista principala) + + +- ++ + Play on sub-list activation + Joaca la activarea de sublista + + +- ++ + Display ROM status icons in master lists? + Afiseaza iconite cu stare ROM in listele principala? + + +- ++ + Show ROM status icons + Afiseaza iconite cu stare ROM + + +- ++ + Cursor position + Pozitie cursor + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + Alege pozitia cursorului pe care QMC2 il foloseste cand auto defilez la obiectul curent (aceasta setare se aplica la toate vederile si listele!) + + +- ++ + Visible + Vizibil + + +- ++ + Top + Varf + + +- ++ + Bottom + Baza + + +- ++ + Center + Centru + + +- ++ + Responsiveness + Sensibilitate + + +- ++ + immediate + imediat + + +- ++ + Show ROM state C (correct)? + Afiseaza stare ROM C (corect)? + + +- ++ + Show ROM state M (mostly correct)? + Afiseaza stare ROM M (majoritatea corecte)? + + +- ++ + Show ROM state I (incorrect)? + Afiseaza stare ROM I (incorect)? + + +- ++ + Show ROM state N (not found)? + Afiseaza stare ROM N (negasit)? + + +- ++ + Show ROM state U (unknown)? + Afiseaza stare ROM U (necunoscut)? + + +- ++ + Sort criteria + Criteriu de sortare + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + Alege modul de lansare implicit (iindependent sau in fereastra incorporata) folosit cand emularea a inceput activand o intrare din oricare lista + + +- ++ + independent + independet + + +- ++ + embedded + incorporat + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + Alege pozitia unde snap-shots software sa fie afisate in listele de software + + +- ++ + Above / Left + Deasupra / Stanga + + +- ++ + Above / Center + Deasupra / Centru + + +- ++ + Above / Right + Deasupra / Dreapta + + +- ++ + Below / Left + Dedesubt / Stanga + + +- ++ + Below / Center + Dedesubt / Centru + + +- ++ + Below / Right + Dedesubt / Dreapta + + +- ++ + Disable snaps + Dezactiveaza snaps + + +- ++ + none + nimic + + +- ++ + ms + ms + + +- ++ + Launch emulation on double-click events (may be annoying) + Lanseaza emularea la evenimente dublu click (ar putea fi enervante) + + +- ++ + Double-click activation + Activare la dublu click + + +- ++ + SW snap position + Pozitie SW snap + + +- ++ + Default launch-mode + Mod implicit de lansare + + +- ++ + Automatically trigger a ROM check if necessary + Declanseaza automat o verificare ROM daca este necesara + + +- ++ + Auto-trigger ROM check + Declanseaza automat o verificare ROM + + +- ++ + Display (or hide) device sets in master lists? + Afiseaza (sau ascunde) seturi de dispozitive in listele principale? + + +- ++ + Show device sets + Afiseaza seturile de dispozitive + + +- ++ + Display (or hide) BIOS sets in master lists? + Afiseaza (sau ascunde) seturi BIOS in listele principale? + + +- ++ + Browse system manual folder + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + Show BIOS sets + Afiseaza seturile BIOS + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + &Shortcuts / Keys + &Scurtaturi / Chei + + +- +- ++ ++ + Redefine key sequence + Redefineste secventa de chei + + +- ++ + Reset key sequence to default + Redefineste secventa de chei la implicit + + +- ++ + Reset + Reseteaza + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + Scurtaturi la definitii active; dublu click ca sa redefiniti secventa de chei + + +- +- ++ ++ + Function / Key + Functie / Cheie + + +- ++ ++ + +- +- +- ++ ++ + Default + Initial + + +- ++ + Custom + Personalizat + + +- ++ + &Joystick + &Joystick + + +- ++ + Enable GUI control via joystick + Activeaza control GUI cu joystick + + +- ++ + Enable joystick control + Activeaza control cu joystick + + +- ++ + Rescan available joysticks + Rescaneaza joystick-uri valabile + + +- ++ + Rescan joysticks + Rescaneaza joystick-uri + + +- ++ + Select joystick + Alege joystick + + +- ++ + List of available joysticks - select the one you want to use for GUI control + lista de joystick-uri valabile - alegeti pe care doriti sa-l folositi pentru control GUI + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + Niciun joystick gasit + + +- ++ + Joystick information and settings + Informatii joystick si setari + + +- ++ + Axes: + Axe: + + +- ++ + Number of joystick axes + Numar de axe de joystick + + +- +- +- +- ++ ++ ++ ++ + 0 + 0 + + +- ++ + Buttons: + Butoane: + + +- ++ + Number of joystick buttons + Numar de butoane pe joystick + + +- ++ + Hats: + Hats: + + +- ++ + Number of coolie hats + Numer de coolie hats + + +- ++ + Trackballs: + Trackballs: + + +- ++ + Number of trackballs + Numar de trackballs + + +- ++ + Automatically repeat joystick functions after specified delay + Repeta in mod automat functiile joystick-ului dupa intarzierea specificata + + +- ++ + Auto repeat after + Atuo repete dupa + + +- ++ + Repeat all joystick functions after how many milliseconds? + Repeta toate functiile joystick-ului dupa cate milisecunde? + + +- +- ++ ++ + ms + ms + + +- ++ + Event timeout + Eveniment expirat + + +- ++ + Process joystick events after how many milliseconds? + Proceseaza evenimente joystick dupa cate milisecunde? + + +- ++ + Calibrate joystick axes + Calibreaza axe joystick + + +- ++ + Calibrate + Calibreaza + + +- ++ + Test all joystick functions + Testeaza toate functiile joystick-ului + + +- ++ + Test + Test + + +- ++ + Map joystick functions to GUI functions + Mapa cu functii joystick catre functii GUI + + +- ++ + Map + Mapa + + +- ++ + Remap a joystick function to the selected GUI function + Remapeaza o functie joystick catre functia GUI selectata + + +- ++ + Remap + Remapeaza + + +- ++ + Remove joystick mapping from selected GUI function + Sterge mapare joystick din functia GUI selectata + + +- ++ + Remove + Sterge + + +- ++ + Active joystick mappings; double-click to remap joystick function + Mapari joystick active; dublu click pentru remapare functie joystick + + +- ++ + Joystick function + Functie joystick + + +- ++ + Zip tool + Unealta ZIP + + +- +- +- ++ ++ ++ + Command + Comanda + + +- ++ + External zip tool, i.e. "zip" (read and execute) + Unealta ZIP externa, i.e. "zip" (citeste si executa) + + +- ++ + Browse for zip tool + Rasfoieste pentru unealta ZIP + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + Argumente + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + Lista de argumente unealta ZIP pentru inlaturarea intrarilor din arhiva ZIP (i.e. "$ARCHIVE$ -d $FILELIST$") + + +- ++ + ROM tool + Unealta ROM + + +- ++ + External ROM tool (it's completely up to you...) + Unealta ROM externa (depinde totalmente de tine...) + + +- ++ + Browse ROM tool + Rasfoieste unealta ROM + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + Lista de argumente pentru unealta ROM (i.e. "$ID$ $DESCRIPTION$") + + +- +- +- +- ++ ++ ++ ++ + Working directory + DIrectorul de lucru + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + Directorul de lucru folosit cand unealta ROM este executata (daca e gol, directorul de lucru al QMC2 este folosit) + + +- ++ + Browse working directory of the ROM tool + Rasfoieste directorul de lucru pentru unealta ROM + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + + + +- ++ + Copy tool output to front end log + + + +- ++ + Automatically close the tool-executor dialog when the external process finished + + + +- ++ + Close dialog automatically + + + +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + + + +- ++ + Use HTTP proxy + + + +- ++ + Host / IP + + + +- ++ + Hostname or IP address of the HTTP proxy server + + + +- ++ + Port + Port + + +- ++ + Port to access the HTTP proxy service + + + +- ++ + User ID + + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + + + +- +- Password +- Parola +- +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- +- +- +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- +- +- +- ++ + Browser settings + + + +- ++ + Browse cookie database + + + +- ++ + Cookie database file (write) + + + +- ++ + Cookie database + + + +- ++ + Save and restore cookies used on web pages? + + + +- ++ + Remove all cookies by recreating the database + + + +- ++ + 7-zip tool + + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + + + +- ++ + Browse for 7-zip tool + + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + + + +- ++ + E&mulator + + + +- ++ + &Global configuration + + + +- +- ++ ++ + Executable file + + + +- ++ + Machine list cache + + + +- ++ + Browse machine list cache file + + + +- ++ + Software list cache DB + + + +- ++ + Browse software list cache database file + + + +- ++ + Clean up user data database (removes obsolete entries) + + + +- ++ + Machine list cache file (write) + + + +- ++ + Emulator executable file (read and execute) + + + +- +- ++ ++ + Browse emulator executable file + Rasfoiti fisierul executabil al emulatorului + + +- ++ + Emulator log file + + + +- ++ + Emulator log file (write) + + + +- ++ + Browse emulator log file + + + +- ++ + Options template file + + + +- ++ + Options template file (read) + + + +- ++ + Browse options template file + + + +- ++ + ROM state cache + + + +- ++ + ROM state cache file (write) + + + +- ++ + Browse ROM state cache file + + + +- ++ + General software folder + + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + + + +- ++ + Browse general software folder + + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + Directorul de lucru folosit cand emulatorul este executat ( daca este gol, este folosit directorul curent de lucru pentru QMC2) + + +- +- ++ ++ + Browse working directory + Rasfoiti directorul de lucru + + +- ++ + Software state cache + + + +- ++ + Directory used to store individual state cache files for each software-list (write) + + + +- ++ + Browse software state cache directory + + + +- ++ + XML cache database + + + +- ++ + Database file for caching the output from -listxml (write) + + + +- ++ + Browse XML cache database file + + + +- ++ + User data database + + + +- ++ + Database file for storing/retrieving user data (write) + + + +- ++ + Browse user data database file + + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + + + +- ++ + Replace + + + +- ++ + Icon + Iconita + + +- ++ + Name + Nume + + +- ++ + Executable + + + +- ++ + Custom IDs + + + +- ++ + Register emulator + + + +- ++ + Emulator name + + + +- ++ + Deregister emulator + + + +- ++ + Registered emulator's name + + + +- ++ + Command to execute the emulator (path to the executable file) + + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + + + +- +- EL (Greek) +- +- +- +- ++ + Compressed cabinet file (read) + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + 7z + + +- ++ + Browse compressed cabinet file + + + +- ++ + Compressed controller file (read) + + + +- ++ + Browse compressed controller file + + + +- ++ + Compressed marquee file (read) + + + +- ++ + Browse compressed marquee file + + + +- ++ + Switch between specifying a title directory or a compressed title file + + + +- ++ + MAME emulator information database - mameinfo.dat (read) + + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a preview directory or a compressed preview file + + + +- ++ + Compressed preview file (read) + + + +- ++ + Browse compressed preview file + + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + + + +- ++ + Compressed flyer file (read) + + + +- ++ + Browse compressed flyer file + + + +- ++ + Switch between specifying an icon directory or a compressed icon file + + + +- ++ + Compressed icon file (read) + + + +- ++ + Browse compressed icon file + + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + + + +- ++ + Switch between specifying a controller directory or a compressed controller file + + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + + + +- ++ + Compressed title file (read) + + + +- ++ + Browse compressed title file + + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + + + +- ++ + Compressed PCB file (read) + + + +- ++ + Browse compressed PCB file + + + +- ++ + Compressed software snap-shot file (read) + + + +- ++ + Browse compressed software snap-shot file + + + +- ++ + Load MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + + + +- ++ + Load MESS machine information database (sysinfo.dat) + + + +- ++ + MESS machine information database - sysinfo.dat (read) + + + +- ++ + Save machine selection on exit and before reloading the machine list + + + +- ++ + Save machine selection + + + +- ++ + Import MAME machine information to DAT-info database + + + +- ++ + Browse MESS machine information database (sysinfo.dat) + + + +- ++ + Browse machine favorites file + + + +- ++ + MAME machine information database - history.dat (read) + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + + + +- ++ + Machine favorites file (write) + + + +- ++ + Load MAME machine information database (history.dat) + + + +- ++ + Machine info (MAME) + + + +- ++ + Browse MAME machine information database (history.dat) + + + +- ++ + Machine description + + + +- ++ + Machine name + + + +- ++ + Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) + + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + + + +- ++ + Network / &Tools + + + +- ++ + Restore cookies + + + +- ++ + Manage cookies stored in database + + + +- ++ + Manage stored cookies + + + +- ++ + Clear database + + + +- ++ + Recreate user data database (removes <b>all</b> entries) + + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + + + +- ++ + Machine list database + + + +- ++ + Machine list database file (write) + + + +- ++ + Browse machine list database file + + + +- ++ + Foreign &emulators + + + +- +- Replace emulator registration ++ ++ Replace emulator registration ++ ++ ++ ++ ++ Remove ++ ++ ++ ++ ++ Import MESS emulator information to DAT-info database ++ ++ ++ ++ ++ Import MAME emulator information to DAT-info database ++ ++ ++ ++ ++ Import MESS machine information to DAT-info database ++ ++ ++ ++ ++ DAT-info database file ++ ++ ++ ++ ++ Browse DAT-info database file ++ ++ ++ ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) + + + +- +- Remove ++ ++ pl (Polish) + + + +- +- Import MESS emulator information to DAT-info database ++ ++ pt (Portuguese) + + + +- +- Import MAME emulator information to DAT-info database ++ ++ pt_BR (Brazilian Portuguese) + + + +- +- Import MESS machine information to DAT-info database ++ ++ ro (Romanian) + + + +- +- DAT-info database file ++ ++ sv (Swedish) + + + +- +- Browse DAT-info database file ++ ++ us (American English) + + + +- ++ + DAT-info database file (write) + + + +- ++ + Machine info (MESS) + + + +- ++ + Emu info (MAME) + + + +- ++ + Emu info (MESS) + + + +- ++ + Software info + + + +- ++ + Import software information to DAT-info database + + + +- ++ + Database file for caching the ouput from -listsoftware (write) + + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + + + +- ++ + Add + + + +- ++ + Apply settings + Aplicati setarile + + +- ++ + &Apply + &Aplicati + + +- ++ + Restore currently applied settings + Restaurati setarile anterioare + + +- ++ + &Restore + &Restaurati + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + Resetati la setarile implicite (click <i> Restaurati</i> ca sa restaurati setarile implicite!) + + +- ++ + &Default + &Initial + + +- ++ + Close and apply settings + Inchideti si aplicati setarile + + +- ++ + &Ok + &Ok + + +- ++ + Close and discard changes + Inchideti si renuntati la modificari + + +- ++ + &Cancel + + + +- ++ + Minimize when launching (non-embedded) emulators? + + + +- +- +- +- ++ ++ ++ ++ + Category + Categorie + + +- +- +- +- ++ ++ ++ ++ + Version + Versiune + + +- ++ + Check all ROM states + + + +- ++ + About QMC2 + Despre QMC2 + + +- ++ + Analyze tagged sets + + + +- ++ + Export ROM Status + + + +- ++ + Copy tagged sets to favorites + + + +- ++ + Online documentation + + + +- ++ + Clear image cache + Sterge cache imagine + + +- ++ + Setup arcade mode + Instalare modul arcade + + +- ++ + Clear icon cache + Sterge cache iconite + + +- +- ++ ++ + Open options dialog + + + +- ++ + Play (independent) + + + +- ++ + Play (embedded) + + + +- ++ + About Qt + Despre Qt + + +- ++ + Check states of tagged ROMs + + + +- ++ + Recreate template map + Recreaza salon mapa + + +- ++ + Check template map + Verifica sablon mapa + + +- +- ++ ++ + Stop processing / exit QMC2 + + + +- ++ + Clear YouTube cache + Stergeti cache YouTube + + +- ++ + Toggle ROM state C + + + +- ++ + Toggle ROM state M + + + +- ++ + Toggle ROM state I + + + +- ++ + Toggle ROM state N + + + +- ++ + Toggle ROM state U + + + +- ++ + Tag current set + + + +- ++ + Untag current set + + + +- ++ + Toggle tag mark + Comutati etichete de marca + + +- ++ + Tag all sets + + + +- ++ + Untag all sets + + + +- ++ + Invert all tags + Inversati toate etichetele + + +- ++ + Check images and icons + + + +- ++ + Analyze current machine + + + +- ++ + Copy machine to favorites + + + +- ++ + Clear ProjectMESS cache + + + +- ++ + Reload machine list + + + +- ++ + Check machine's ROM state + + + +- ++ + Toggle tag / cursor down + + + +- ++ + Toggle tag / cursor up + + + +- ++ + Tag visible sets + + + +- ++ + Untag visible sets + + + +- ++ + Invert visible tags + + + +- ++ + Run external ROM tool + + + +- ++ + Run ROM tool for tagged sets + + + +- ++ + Toggle full screen + Comutati ecran complet + + +- ++ + Previous track (audio player) + + + +- ++ + Next track (audio player) + + + +- ++ + Fast backward (audio player) + + + +- ++ + Fast forward (audio player) + + + +- ++ + Stop track (audio player) + + + +- ++ + Pause track (audio player) + + + +- ++ + Play track (audio player) + + + +- ++ + Raise volume (audio player) + + + +- ++ + Lower volume (audio player) + + + +- ++ + Plus (+) + + + +- ++ + Minus (-) + + + +- ++ + Cursor down + + + +- ++ + End + + + +- ++ + Escape + + + +- ++ + Cursor left + + + +- ++ + Home + + + +- ++ + Page down + + + +- ++ + Page up + + + +- ++ + Enter key + + + +- ++ + Open ROMAlyzer (system mode) + + + +- ++ + Open ROMAlyzer (software mode) + + + +- ++ + Full detail view + + + +- +- +- +- ++ ++ ++ ++ + Category view + + + +- +- +- +- ++ ++ ++ ++ + Version view + + + +- ++ + Check software-states + + + +- ++ + Launch arcade mode + + + +- ++ + Software-list view-mode flat + + + +- ++ + Software-list view-mode tree + + + +- ++ + Increase rank + + + +- ++ + Decrease rank + + + +- ++ + Return key + + + +- ++ + Cursor right + + + +- ++ + Tabulator + + + +- ++ + Cursor up + + + +- ++ + Activate item + + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + + + +- +- ++ ++ + Reset to default font + + + +- +- ++ ++ + No style sheet + + + +- ++ + image cache size set to %1 MB + + + +- +- ++ ++ + Confirm + Confirma + + +- ++ + &Local + + + +- ++ + &Overwrite + + + +- ++ + Do&n't apply + + + +- ++ + please restart QMC2 for some changes to take effect + + + +- ++ + ascending + ascendent + + +- ++ + descending + descendent + + +- ++ + 7z error + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: nu pot deschide fisier iconita, va rog verificati permisiunile de acces pentru %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- +- ++ ++ + Preview file + + + +- +- ++ ++ + Flyer file + + + +- +- ++ ++ + Icon file + + + +- +- ++ ++ + Cabinet file + + + +- +- ++ ++ + Controller file + + + +- +- ++ ++ + Marquee file + + + +- +- ++ ++ + Title file + + + +- +- ++ ++ + PCB file + + + +- +- ++ ++ + SW snap file + + + +- +- +- ++ ++ ++ + Custom IDs... + + + +- ++ + Rebuild current machine + + + +- ++ + Rebuild tagged machines + + + +- ++ + Hierarchical view + + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- +- +- ++ + + + +@@ -16384,491 +16297,506 @@ Please check the 'rompath' option in the global emulator configuration + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + + + +- ++ + please reload machine list for some changes to take effect + + + +- ++ + sorting machine list by %1 in %2 order + + + +- ++ + libarchive error + + + +- ++ + triggering automatic reload of machine list + + + +- ++ + Choose Qt style sheet file + + + +- ++ + Qt Style Sheets (*.qss) + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + Toate fisierele (*) + + +- ++ + Choose preview directory + Alegeti director previzualizare + + +- ++ + Custom view + + + +- ++ + N/A + + + +- ++ + Choose flyer directory + Alegeti director flyer + + +- ++ + Choose icon directory + Alegeti director iconita + + +- ++ + Choose cabinet directory + Alegeti director cabinet + + +- ++ + Choose controller directory + Alegeti director controler + + +- ++ + Choose marquee directory + Alegeti director marquee + + +- ++ + Choose title directory + Alegeti director titlu + + +- ++ + Choose PCB directory + Alegeti director PCB + + +- ++ + Choose options template file + + + +- +- ++ ++ + Choose emulator executable file + Alegeti fisierul executabil al emulatorului + + +- ++ + Choose emulator log file + + + +- ++ + Choose XML cache database file + + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + + + +- ++ + &Yes + + + +- ++ + &No + + + +- ++ + Choose user data database file + + + +- ++ + Choose cookie database file + + + +- ++ + Choose zip tool + + + +- ++ + Choose 7-zip tool + + + +- ++ + Choose ROM tool + + + +- +- +- ++ ++ ++ + Choose working directory + Alegeti directorul de lucru + + +- ++ + Choose play history file + + + +- ++ + Choose machine list database file + + + +- ++ + Choose ROM state cache file + + + +- ++ + Choose software state cache directory + + + +- ++ + Choose general software folder + + + +- ++ + Choose front end log file + + + +- ++ + Choose data directory + + + +- ++ + Choose dat-info database file + + + +- ++ + Choose MAME machine info DB + + + +- ++ + Choose software info DB + + + +- ++ + Choose catver.ini file + + + +- ++ + Choose category.ini file + + + +- ++ + Choose compressed preview file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + Toate fisierele + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + + + +- ++ + Choose compressed flyer file + + + +- ++ + Choose compressed icon file + + + +- ++ + Choose compressed cabinet file + + + +- ++ + Choose compressed controller file + + + +- ++ + Choose compressed marquee file + + + +- ++ + Choose compressed title file + + + +- ++ + Choose compressed PCB file + + + +- ++ + Choose compressed software snap file + + + +- ++ + Choose software snap directory + + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + + + +- +- ++ ++ + Default icon + + + +- +- ++ ++ + No icon + + + +- ++ + &Foreign emulators + + + +- ++ + Choose machine favorites file + + + +- ++ + Choose machine list cache file + + + +- ++ + Choose software list cache database file + + + +- ++ + Choose MESS machine info DB + + + +- ++ + Choose MAME emulator info DB + + + +- ++ + Choose MESS emulator info DB + + + +- ++ + Choose software notes folder + + + +- ++ + Choose software notes template + + + +- +- ++ ++ + HTML files (*.html *.htm) + Fisiere HTML (*.html *.htm) + + +- ++ + Choose system notes folder + + + +- ++ + Choose system notes template + + + +- ++ + Choose video snap folder + + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + shortcut map is clean + + + +- ++ + WARNING: shortcut map contains duplicates + + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + ERROR: couldn't initialize SDL joystick support + EROARE: nu pot initializa suportul pentru joystick-ul SDL + + +- ++ + joystick map is clean + + + +- ++ + WARNING: joystick map contains duplicates + + +@@ -17350,28 +17278,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + corect + + +- ++ + incorrect + incorect + + +- ++ + mostly correct + majoritatea corecte + + +- ++ + not found + negasit + + +- ++ + + + +@@ -17380,54 +17308,54 @@ Are you sure you want to do this? + necunoscut + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + Initial + + +- ++ + Import from... + Importa din... + + +- +- ++ ++ + Export machine-specific MAME configuration + + + +- +- ++ ++ + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + Setez Interfata Grafica, va rog asteptati... + + +- ++ + M.A.M.E. Catalog / Launcher II v + M.A.M.E. Catalog / Launcher II v + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + Caracteristi Phonon activate - folosesc Phonon v%1 + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + Suport joystick SDL activat - folosesc SDL v%1.%2.%3 + +@@ -17535,19 +17463,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + da + + +- ++ + + no + nu + + +- ++ + + partially + +@@ -17595,7 +17523,7 @@ Are you sure you want to do this? + + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + video player: eroare XML: eroare fatala la linia %1, coloana %2: %3 + +@@ -21083,7 +21011,7 @@ Are you sure you want to do this? + + + +- ++ + Choose mame.ini + + +@@ -21097,7 +21025,7 @@ Are you sure you want to do this? + + + +- ++ + Choose ui.ini + + +@@ -21206,178 +21134,179 @@ Are you sure you want to do this? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + Necunoscut + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21385,74 +21314,73 @@ Are you sure you want to do this? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + Initial + + +- +- ++ ++ + Choose emulator executable file + Alegeti fisierul executabil al emulatorului + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Toate fisierele (*) + + +- ++ + Choose working directory + Alegeti directorul de lucru + + +- ++ + Choose ROM path + Alegeti cale pentru ROM + + +- ++ + Choose sample path + Alegeti cale pentru mostre + + +- ++ + Choose hash path + Alegeti cale pentru hash + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23712,59 +23640,59 @@ Are you sure you want to do this? + &Renunta + + +- ++ + Default + Initial + + +- ++ + Error + Eroare + + +- ++ + The specified file isn't executable! + Fisierul specificat nu este un executabil! + + +- +- ++ ++ + Choose emulator executable file + Alegeti fisierul executabil al emulatorului + + +- +- ++ ++ + All files (*) + Toate fisierele (*) + + +- ++ + Choose working directory + Alegeti directorul de lucru + + +- ++ + Choose ROM path + Alegeti cale pentru ROM + + +- ++ + Choose sample path + Alegeti cale pentru mostre + + +- ++ + Choose hash path + Alegeti cale pentru hash + + +- ++ + Single-instance check + Verificare single-instance + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23775,17 +23703,17 @@ Totusi,aceasta poate fi o ramasita a unei versiuni picate anterior. + Iesit acum, aceptati o singura data sau ignorati complet? + + +- ++ + &Exit + I&esiti + + +- ++ + &Once + &O data + + +- ++ + &Ignore + &Ignorati + +@@ -23928,49 +23856,49 @@ Iesit acum, aceptati o singura data sau ignorati complet? + + + +- ++ + FLV 240P + FLV 240P + + + +- ++ + FLV 360P + FLV 360P + + + +- ++ + MP4 360P + MP4 360P + + + +- ++ + FLV 480P + FLV 480P + + + +- ++ + MP4 720P + MP4 720P + + + +- ++ + MP4 1080P + MP4 1080P + + + +- ++ + MP4 3072P + MP4 3072P + + + +- ++ + Start / pause / resume video playback + Redati / pauzati / continuati redarea video + +@@ -23981,20 +23909,16 @@ Iesit acum, aceptati o singura data sau ignorati complet? + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + + + + +- ++ + Volume + + +@@ -24039,286 +23963,261 @@ Iesit acum, aceptati o singura data sau ignorati complet? + R: + + +- ++ + Mute / unmute audio output + Mut / sunet audio + + +- ++ + Volume level + + + +- ++ + Video progress + Progres video + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + Nivel curent de umplere buffer: %1% + + +- +- ++ ++ + Play this video + Redati acest video + + +- +- +- ++ ++ ++ + Copy video URL + Copiati URL video + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + + + +- +- +- ++ ++ ++ + Copy author URL + Copiati URL autor + + +- +- ++ ++ + Paste video URL + Lipiti URL video + + +- +- ++ ++ + Local movie file... + + + +- ++ + Remove selected videos + Stergeti videoclipurile selectate + + +- +- +- ++ ++ + Full screen (return with toggle-key) + Ecran complet (reveniti cu cheie de comutare) + + +- +- ++ ++ + Attach this video + Atasati acest video + + +- ++ + Auto-suggest a search pattern? + Autosugerati un model de cautare? + + +- ++ + Auto-suggest + Auto sugerati + + +- ++ + Enter string to be appended + Inserati sir sa fie anexat + + +- ++ + Append... + Anexat... + + +- ++ + Enter search string + Introduceti nume sir de cautare + + +- ++ + Appended string + Anexati sir + + +- ++ + Enter the string to be appended when suggesting a pattern: + Inserati sir pentru anexare cand sugerez un model: + + +- ++ + Valid placeholder macros: + + + +- +- ++ ++ + All files (*) + Toate fisierele (*) + + +- +- ++ ++ + Choose movie file + + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + Mod ecran complet - apasati %1 ca sa reveniti la modul fereastra + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + Mod ecran complet - apasati butonul de comutare pentru a revenit la modul fereastra + + +- ++ + video player: the local movie file '%1' is already attached, ignored + + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + player video: un videoclip cu ID-ul '%1' este eja atasat, ignorat + + +- ++ + Buffering: %1% + Tamponare: %1% + + +- +- Loading +- Incarcare +- +- +- +- ++ + Playing + Redare + + +- +- ++ + Paused + Pauza + + +- +- video player: playback error: %1 +- player video: eroare de redare: %1 +- +- +- +- Video playback error: %1 +- Eroare redare video: %1 +- +- +- ++ + Fetching info for video ID '%1' + Preluez informatii pentru video cu ID '%1' + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + player video: informatii eroare vieo: ID '%1', stare = '%2' errorCode = '%3', errorText = '%4' + + +- +- +- ++ ++ ++ + Video info error: %1 + Eroare informati video: %1 + + +- ++ + video player: video info error: timeout occurred + player vieo: eroare informatii video: expirare a avut loc + + +- ++ + video info error: timeout occurred + + + +- ++ + video info error: unknown reason + + + +- ++ + video player: video info error: %1 + player video: eroare informatii vieeo: %1 + + +- +- ++ + Return to windowed mode + + + +- +- ++ + Full screen (press %1 to return) + Ecran complet (apasati %1 ca sa reveniti) + + +- ++ + video player: video image info error: %1 + player video: eroare informatii imagine vieo: %1 + + +- ++ + video player: search request error: %1 + player video: eroare cerere de cautare: %1 + + +- ++ + video player: search error: can't parse XML data + player video: eroare cautare: nu pot analiza date XML + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + player video: nu pot determina ID-ul videoclipului de la URL-ul raspuns '%1' - va rog informati dezvoltatorii + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + player video: nu pot asocia imaginea returnata de la video cu ID '%1' - va rog informati dezvoltatorii + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + player video: nu pot salva imaginea de la video cu ID '%1' la directorul cache Youtube '%2' - va rog verificati permisiunile + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + player video: nu pot salva imaginea pentru videoclipul cu ID-ul '%1', directorul cache Youtube '%2' nu exista, va rog corectati + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + player video: descarcare esuata pentru imagine videoclip cu ID '%1', imaginea recuperata nu este valida + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + player video: descarcare esuata pentru imagine videoclip cu ID-ul '%1', errorText = '%2' + +diff --git a/data/lng/qmc2_sv.qm b/data/lng/qmc2_sv.qm +index fc171420cc064cdb9280c2e989d469f1972bb224..679862ddb47fab91afb40526f36f8060a66351b2 100644 +GIT binary patch +delta 4175 +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 +SJKApTtnN(BiR#Y&mHrR-mK>n~ + +delta 5534 +zcma)=30PF+`oQ1s%sI21Sy+ZeK!!yb*&1^J6#)wcB{c~YOHD-?U=jvmk!z-0_YF1g +zr(ouqn26am5zPus(+Y7*#Wl=uS5O22#qIyj`TX1Mdhhex$A{-PXFT7#zwh@#{d4}? +zB|=2_H_06i-&?)ns87dz<2O{+Mge%G0e~+M@&%)_8}fC4b6t^rfpDRW&O4SxL~`fe +zUN$X~d!%1hX)5px2M|UBF_a+30tDY-ToA+9u0b9F_)vyCh4cqd^ap4tLJk8c8pqf? +z7ohVFfcQAZocoL|JhBPDpT?N$!`Ko8;OB_8#g|DRAom@{ns~+*8)xFdvy8bj7+aeaac#Z$ATg +z--D)H$Xd_|i>4_yk%ji;xkaj(YN;TwOgK!ACki>IM8`46MfQ +z1q*xnOh>6ge5AgXWZ8X;7y@d4on +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 +zw|i@MY{3c6EoXFb(e6@}u`p5(%#&O +zil6M(KI+$mTijK~wH`XqJ7PU=lt}Dcbh0g|c+@(bcxO7^_zpVzkXbl~uIOCmT|`4C +z>U@uH#_H&z3mA`a7*eJ)EjtD9?O?_$!*xA79n=6Ea@Iwty8%4dN25KB-OruW<#(cJ +z$06OExQzfaKhw=sCF2yx(9O5vWS?_fx6!{CR|KLfxrjAh_XS<-`I?Nt_q5W}D0(#7 +zxqG4cSGLdw&#~N%kLXZ?A@D}C-N)}V15pOq6`a6ajjgaNF=DhHWZ6~b{EYY86T2g8 +zXXEwaMpqbu6kWcS0oebod~vVMq}=K~sJeKhJ@KKR-*I}a0}O^t$N~$PAsdpw8z$iA +zbVyd>#RhWx5&LImP4Tv5B&C|^+B+R$ga6wJlwgG%l#m3;D9enWb6!eu{8Nf|QgU*( +zIVZ;^P5T%9bjDO?Q6;^ZZm~`(UwbEpbdHszW}&=Ekjt!mDOC|`&B-!P%(aQ4b@dlV +zbcZwOOcoyb7gx|E3;tMP3JS=@PbttU36;dX6xLx_mf6Z2^|n~Ot>%31e2XD7SwUM!LG=+e4)H2TEl! +z3A6L>r^M(Xcq-d$o)kd)wD0QL0na2zXPE!CLi?*8O>}~{e?nH0)smAIP=2XhPfQ&k +z2I8edF;c)@J*19__x6v;Hd`mA1<<5cJ#Bv66k>o_^u*>*ELKYrHiNA>UOlXd9q#QP +zo12twvAK5oNwloM1@Nx}($P3fNct;As^ieDxXg5$jSB27#jvbgOQto4V1MFY3*%ns +zwH?kz-Fc8I#pc!c*u|mlxXkR_ywp5%j`@W!)4xcwM?+fC0Gs7DX@54fGA=16CqFYg +zx!8da{R$8Aez48icvP1mRqnrsRvSOe+dn=NGidX)B8hktOh^JGN}eXb + + +- +- ++ ++ + Artwork name + + +@@ -329,183 +329,183 @@ p, li { white-space: pre-wrap; } + + + +- +- ++ ++ + Select / deselect this artwork class for removal + + + +- +- ++ ++ + Enter a name for this artwork class (required) + + + +- +- ++ ++ + Choose... + + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + + + +- +- ++ ++ + System + + + +- +- ++ ++ + Software + + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + + + +- +- ++ ++ + On + + + +- +- ++ ++ + Off + Av + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + + + +- +- ++ ++ + Folder + + + +- +- +- +- ++ ++ ++ ++ + Archive + + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + + + +- +- ++ ++ + ZIP + + + +- +- ++ ++ + 7z + 7z + + +- +- ++ ++ + Select archive format + + + +- +- ++ ++ + Supported archives + + + +- +- ++ ++ + ZIP archives + + + +- +- ++ ++ + 7z archives + + + +- +- ++ ++ + Image archive + + + +- +- ++ ++ + Image archive for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + + + +- +- ++ ++ + Browse image archive + + + +- +- +- ++ ++ ++ + All files (*) + Alla filer (*) + + +- +- ++ ++ + Image folder + + + +- +- ++ ++ + Image folder for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + + + +- +- ++ ++ + Browse image folder + + + +- ++ + Choose icon file + + + +- ++ + PNG files (*.png) + + +@@ -1237,7 +1237,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + + +@@ -1360,17 +1360,17 @@ p, li { white-space: pre-wrap; } + &Ok + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + All files (*) + Alla filer (*) + +@@ -3463,42 +3463,42 @@ p, li { white-space: pre-wrap; } + Stäng + + +- ++ + Name + Namn + + +- ++ + Domain + + + +- ++ + Path + Sökväg + + +- ++ + Value + Värde + + +- ++ + Expiry date + + + +- ++ + Secure? + + + +- ++ + HTTP only? + + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + + +@@ -4478,7 +4478,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + &Öppna arkiv + +@@ -4522,7 +4522,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + Inga enheter tillgängliga + +@@ -4569,7 +4569,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + + +@@ -4581,7 +4581,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + %1. variant av + +@@ -4591,27 +4591,27 @@ p, li { white-space: pre-wrap; } + Välj standardenhetskatalog för "%1" + + +- ++ + &Close archive + S&täng arkiv + + +- ++ + Choose a unique configuration name + Välj ett unikt konfigurationsnamn + + +- ++ + Unique configuration name: + Unikt konfigurationsnamn: + + +- ++ + Name conflict + Namnkonflikt + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5303,25 +5303,25 @@ Use local value for option '%1', overwrite with global value or don&ap + Ändringsdatum + + +- +- ++ ++ + KB + KB + + +- +- ++ ++ + MB + MB + + +- +- ++ ++ + GB + GB + + +- ++ + TB + TB + +@@ -5462,42 +5462,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + FtpReply + +- ++ + FTP directory listing for %1 + + + +- ++ + Name + Namn + + +- ++ + Type + Typ + + +- ++ + Size + Storlek + + +- ++ + Parent directory + + + +- ++ + File + Fil + + +- ++ + Folder + + + +- ++ + Unknown + Okänt + +@@ -5994,212 +5994,212 @@ Use local value for option '%1', overwrite with global value or don&ap + + HtmlEditor + +- ++ + WYSIWYG + WYSIWYG + + +- +- ++ ++ + HTML + HTML + + +- ++ + &Load... + + + +- ++ + Load notes from file + + + ++ + +- + Load notes from an HTML file + + + ++ + + +- + Save current notes + + + ++ + +- + Page load progress + + + +- ++ + Hide menu + + + +- ++ + Read only + + + +- ++ + Show HTML + + + +- +- ++ ++ + HTML files (*.html *.htm) + HTML-filer (*.html *.htm) + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Alla filer (*) + + +- ++ + Select file to load + + + +- ++ + Select file to open + + + +- ++ + Save a copy + Spara en kopia + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + Vanliga bildformat (*.png *.jpg *.jpeg *.gif);; + + +- ++ + Portable Network Graphics (PNG) (*.png);; + Portable Network Graphics (PNG) (*.png);; + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + Graphics Interchange Format (GIF) (*.gif);; + + +- ++ + Open image... + Öppna bild... + + +- ++ + Insert image from URL + Infoga bild från URL + + +- +- ++ ++ + Enter URL: + Ange URL: + + +- ++ + Create link + Skapa länk + + +- ++ + Font + Typsnitt + + +- ++ + Select font: + Välj typsnitt: + + +- ++ + XS + XS + + +- ++ + S + S + + +- +- ++ ++ + M + M + + +- ++ + L + L + + +- ++ + XL + XL + + +- ++ + XXL + XXL + + +- ++ + Font size + Typsnittsstorlek + + +- ++ + Font size: + Typsnittsstorlek: + + +- ++ + Zoom: %1% + Zoom: %1% + + +- ++ + Select color + + + +- ++ + Choose image file + + + +- +- +- ++ ++ ++ + No data available + Inget data tillgängligt + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7115,55 +7115,55 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Preview + + + +- ++ + Flyer + + + +- ++ + Cabinet + + + +- ++ + Controller + + + +- ++ + Marquee + + + +- ++ + Title + + + +- ++ + PCB + PCB + + +- ++ + Software snap + + + +- +- ++ ++ + deactivated + + + +- ++ ++ + +- + activated + + +@@ -7591,42 +7591,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickCalibrationWidget + +- ++ + Enable/disable axis %1 + + + +- ++ + Axis %1: + + + +- ++ + Reset calibration of axis %1 + + + +- ++ + Current value of axis %1 + + + +- ++ + DZ: + + + +- ++ + Deadzone of axis %1 + + + +- ++ + S: + + + +- ++ + Sensitivity of axis %1 + + +@@ -7680,67 +7680,67 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickTestWidget + +- ++ + A%1: %v + + + +- ++ + Current value of axis %1 + + + +- ++ + B%1 + + + +- ++ + Current state of button %1 + + + +- ++ + H%1: 0 + + + +- ++ + Current value of hat %1 + + + +- ++ + T%1 DX: 0 + + + +- ++ + Current X-delta of trackball %1 + + + +- ++ + T%1 DY: 0 + + + +- ++ + Current Y-delta of trackball %1 + + + +- ++ + H%1: %2 + + + +- ++ + T%1 DX: %2 + + + +- ++ + T%1 DY: %2 + + +@@ -7800,460 +7800,460 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + okänt + + +- +- +- ++ ++ ++ + good + bra + + +- +- ++ ++ + bad + dålig + + +- +- +- ++ ++ ++ + preliminary + preliminär + + +- +- ++ ++ + supported + stöds + + +- +- ++ ++ + unsupported + stöds inte + + +- +- +- ++ ++ ++ + imperfect + ofullständig + + +- ++ + yes + ja + + +- ++ + no + nej + + +- ++ + baddump + + + +- ++ + nodump + + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + Okänt + + +- ++ + On + + + +- ++ + Off + Av + + +- ++ + audio + ljud + + +- ++ + unused + + + +- ++ + Unused + + + +- ++ + cpu + processor + + +- ++ + vector + vektor + + +- ++ + lcd + lcd + + +- ++ + joy4way + + + +- ++ + joy8way + + + +- ++ + trackball + + + +- ++ + joy2way + + + +- ++ + doublejoy8way + + + +- ++ + dial + + + +- ++ + paddle + + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + + + +- ++ + lightgun + ljuspistol + + +- ++ + doublejoy4way + + + +- ++ + vdoublejoy2way + + + +- ++ + doublejoy2way + + + +- ++ + printer + skrivare + + +- ++ + cdrom + cdrom + + +- ++ + cartridge + cartridge + + +- ++ + cassette + kassett + + +- ++ + quickload + + + +- ++ + floppydisk + diskett + + +- ++ + serial + + + +- ++ + snapshot + + + +- ++ + original + + + +- ++ + compatible + kompatibel + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + libarchive error + + + +- ++ + Waiting for data... + Väntar på data... + + +- ++ + determining emulator version and supported sets + + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + + + +- +- ++ ++ + emulator info: type = %1, version = %2 + + + +- ++ + FATAL: couldn't determine emulator type and version + + + +- ++ + FATAL: couldn't determine the number of supported sets + + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + XML data - %p% + XML-data - %p% + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + + + +- ++ + verifying ROM status for '%1' + + + +- +- +- ++ ++ ++ + ROM check - %p% + ROM-kontroll - %p% + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- ++ + Updating + Uppdaterar + + +- ++ + Name + Namn + + +- ++ + Source file + Källfil + + +- ++ + Is BIOS? + Är BIOS? + + +- ++ + Is device? + Är enhet? + + +- ++ + Runnable + Körbar + + +- ++ + Clone of + Klon av + + +- ++ + ROM of + ROM av + + +- ++ + Sample of + Sampling av + + +- ++ + Year + År + + +- ++ + Manufacturer + Tillverkare + + +- +- ++ ++ + ROM + ROM + + +- +- +- +- ++ ++ ++ ++ + N/A + + + +- +- ++ ++ + error text = %1 + + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- ++ ++ + %n supported set(s) + + +@@ -8261,552 +8261,552 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + loading XML data and recreating cache + + + +- ++ + BIOS + BIOS + + +- ++ + Size + Storlek + + +- ++ + CRC + CRC + + +- +- ++ ++ + Merge + + + +- +- ++ ++ + Region + Region + + +- ++ + Offset + Position + + +- +- +- +- ++ ++ ++ ++ + Status + Status + + +- +- ++ ++ + Optional + Valfritt + + +- +- ++ ++ + SHA-1 + + + +- ++ + Device reference + Enhetsreferens + + +- ++ + Chip + Chip + + +- +- +- ++ ++ ++ + Tag + Tagg + + +- +- ++ ++ + Type + Typ + + +- ++ + Clock + Klocka + + +- ++ + Display + + + +- ++ + Rotate + Rotera + + +- ++ + Flip-X + + + +- ++ + Width + Bredd + + +- ++ + Height + Höjd + + +- ++ + Refresh + Uppdatera + + +- ++ + Pixel clock + + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- ++ ++ + Sound + Ljud + + +- ++ + Channels + Kanaler + + +- ++ + Input + Inmatning + + +- ++ + Service + Tjänst + + +- ++ + Tilt + Tilt + + +- ++ + Players + Spelare + + +- +- ++ ++ + Buttons + Knappar + + +- ++ + Coins + Mynt + + +- ++ + Control + + + +- ++ + Minimum + Minimum + + +- ++ + Maximum + Maximum + + +- ++ + Sensitivity + Känslighet + + +- ++ + Key Delta + + + +- ++ + Reverse + Omvänd + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + tagg + + +- ++ + year + år + + +- ++ + manufacturer + tillverkare + + +- ++ + machine name + + + +- ++ + ROM types + ROM-typer + + +- ++ + players + spelare + + +- ++ + driver status + drivrutinsstatus + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + kategori + + +- ++ + version + version + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + correct + korrekta + + +- ++ + mostly correct + mestadels korrekta + + +- ++ + incorrect + felaktiga + + +- ++ + not found + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + Standard + + +- ++ + Configuration + Konfiguration + + +- ++ + Mask + + + +- ++ + Setting + Inställning + + +- ++ + Value + Värde + + +- ++ + Driver + Drivrutin + + +- ++ + Emulation + Emulering + + +- ++ + Color + Färg + + +- ++ + Graphic + Grafik + + +- ++ + Cocktail + + + +- ++ + Protection + Skydd + + +- ++ + Save state + Spara tillstånd + + +- ++ + Palette size + Palettstorlek + + +- ++ + BIOS set + + + +- ++ + Description + Beskrivning + + +- ++ + Sample + + + +- ++ + Disk + Disk + + +- ++ + MD5 + MD5 + + +- ++ + Index + Index + + +- ++ + Adjuster + + + +- ++ + Software list + Programlista + + +- ++ + Category + Kategori + + +- ++ + Item + Objekt + + +- ++ + Device + Enhet + + +- ++ + Mandatory + Nödvändig + + +- ++ + Interface + Gränssnitt + + +- ++ + Instance + Instans + + +- ++ + Brief name + Kort namn + + +- ++ + Extension + Tillägg + + +- ++ + RAM options + RAM-alternativ + + +- ++ + Option + Alternativ + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + + + +- ++ + loading ROM state from cache + + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + + + +- ++ + %n cached ROM state(s) loaded + + +@@ -8814,54 +8814,54 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + ROM, CHD + ROM, CHD + + +- ++ + CHD + CHD + + +- ++ + ? + ? + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- +- ++ ++ + ascending + stigande + + +- +- ++ ++ + descending + fallande + + +- ++ + , %n BIOS set(s) + + +@@ -8869,7 +8869,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + and %n device(s) loaded + + and %n enhet inlästa +@@ -8877,136 +8877,136 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + + + +- ++ + ROM state filter already active + + + +- ++ + please wait for ROM verification to finish and try again + + + +- ++ + please wait for reload to finish and try again + + + +- ++ + applying ROM state filter + + + +- ++ + State filter - %p% + + + +- ++ + done (applying ROM state filter, elapsed time = %1) + + + +- ++ + saving favorites + sparar favoriter + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + + + +- ++ + saving play history + + + +- ++ + FATAL: can't open play history file for writing, path = %1 + + + +- ++ + L: + + + +- ++ + C: + + + +- ++ + M: + + + +- ++ + I: + + + +- ++ + N: + + + +- ++ + U: + + + +- ++ + S: + + + +- ++ + T: + + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + + + +- +- ++ ++ + normal + normal + + +- +- ++ ++ + crashed + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + +@@ -9014,7 +9014,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + +@@ -9022,83 +9022,83 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + + + +- +- ++ ++ + ROM state + ROM-tillstånd + + +- +- ++ ++ + ROM status for '%1' is '%2' + + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + +@@ -9106,42 +9106,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + pre-caching icons from ZIP archive + + + +- ++ + Icon cache - %p% + + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + %n icon(s) loaded + + +@@ -9149,77 +9149,77 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + pre-caching icons from directory + + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- ++ + loading catver.ini + läser in catver.ini + + +- ++ + Catver.ini - %p% + Catver.ini - %p% + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + + + +- ++ + done (loading catver.ini, elapsed time = %1) + + + +- ++ + %1 category / %2 version records loaded + + + +- ++ + Category view - %p% + + + +- ++ + %n category record(s) loaded + + +@@ -9227,7 +9227,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + + +@@ -9396,18 +9396,18 @@ Use local value for option '%1', overwrite with global value or don&ap + Version + + +- +- +- +- ++ ++ ++ ++ + true + sant + + +- +- +- +- ++ ++ ++ ++ + false + falskt + +@@ -9550,8 +9550,8 @@ Use local value for option '%1', overwrite with global value or don&ap + MainWindow + + ++ + +- + M.A.M.E. Catalog / Launcher II + + +@@ -9566,16 +9566,16 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Tag + Tagg + + + +- ++ + Icon / Value + Ikon / Värde + +@@ -9584,10 +9584,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Year + År + +@@ -9596,10 +9596,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + Tillverkare + +@@ -9608,10 +9608,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Name + Namn + +@@ -9620,10 +9620,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + ROM types + ROM-typer + +@@ -9632,10 +9632,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Players + Spelare + +@@ -9644,10 +9644,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Driver status + Drivrutinsstatus + +@@ -9656,9 +9656,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Category + Kategori + +@@ -9667,9 +9667,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Version + Version + +@@ -9690,9 +9690,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Icon + Ikon + +@@ -9719,7 +9719,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embedded emulators + + +@@ -9943,9 +9943,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + %vs (%ms total) + %vs (%ms totalt) + +@@ -10075,7 +10075,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + &Notes + + +@@ -10132,11 +10132,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Spela + +@@ -10168,7 +10168,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + About Qt + Om Qt + +@@ -10250,10 +10250,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + + +@@ -10306,13 +10306,13 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -10323,7 +10323,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Category / Machine + + +@@ -10334,19 +10334,19 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -10417,9 +10417,9 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -10438,10 +10438,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -10612,10 +10612,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Source file + Källfil + +@@ -10625,10 +10625,10 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10964,11 +10964,11 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + + +@@ -11344,7 +11344,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal browser + + +@@ -11549,12 +11549,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + + +@@ -11648,7 +11648,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Internal PDF viewer + + +@@ -11660,8 +11660,8 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + last message repeated %n time(s) + + +@@ -11669,48 +11669,48 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + Standard + + +- +- ++ ++ + Enter search string + + + +- ++ + Searching machines - %p% + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + + + +- ++ + Scan the pause key used by the emulator + + + +- ++ + Scan pause key... + + + +- ++ + Toggle maximization of embedded emulator windows + + + +- ++ + Dock / undock this widget + + +@@ -11721,115 +11721,131 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Embed emulator widget + + + +- ++ + &Embed + &Bädda in + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + + + +- ++ + &Kill + &Döda + + +- +- ++ ++ + Copy emulator command line to clipboard + + + +- +- ++ ++ + &Copy command + + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Kontrollera &ROM-tillstånd + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analysera ROM... + + +- ++ + Remove from favorites + Ta bort från favoriter + + +- +- ++ ++ + &Remove + &Ta bort + + +- ++ + Clear all favorites + Töm alla favoriter + + +- +- ++ ++ + &Clear + &Töm + + +- ++ + Save favorites now + Spara favoriter nu + + +- +- ++ ++ + &Save + &Spara + + +- ++ + Remove from played + Ta bort från spelade + + +- ++ + Clear all played + Töm alla spelade + + +- ++ + Save play-history now + Spara spelhistorik nu + + +- +- +- +- ++ ++ ++ ++ + Tab position + + ++ ++ ++ ++ ++ ++ Set tab position north ++ ++ ++ ++ ++ ++ ++ ++ &North ++ ++ + + + + + +- Set tab position north ++ Set tab position south + + + +@@ -11837,7 +11853,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &North ++ &South + + + +@@ -11845,7 +11861,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position south ++ Set tab position west + + + +@@ -11853,7 +11869,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &South ++ &West + + + +@@ -11861,7 +11877,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- Set tab position west ++ Set tab position east + + + +@@ -11869,15 +11885,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &West +- +- +- +- +- +- +- +- Set tab position east ++ &East + + + +@@ -11885,101 +11893,93 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- &East +- +- +- +- +- +- +- + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + sorry, devices cannot run standalone + + + +- ++ + No devices available + Inga enheter tillgängliga + + +- ++ + Default configuration + + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + + + +- +- ++ ++ + please wait for ROM verification to finish and try again + + + +- ++ ++ + +- + please wait for image check to finish and try again + + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + + + ++ + +- + ROM verification already active + + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + Bekräfta + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -11987,22 +11987,22 @@ Do you really want to check all ROM states now? + + + +- ++ + automatic ROM check triggered + + + +- ++ + image cache cleared + + + +- ++ + icon cache cleared + + + +- ++ + freed %n byte(s) in %1 + + +@@ -12010,7 +12010,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n entry(s) + + %n post +@@ -12018,7 +12018,7 @@ Do you really want to check all ROM states now? + + + +- ++ + removed %n byte(s) in %1 + + tog bort %n byte i %1 +@@ -12026,7 +12026,7 @@ Do you really want to check all ROM states now? + + + +- ++ + %n file(s) + + %n fil +@@ -12034,363 +12034,363 @@ Do you really want to check all ROM states now? + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + YouTube on-disk cache cleared (%1) + + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + standard + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + + + +- ++ + triggering an automatic ROM check on next reload + + + +- ++ + ERROR: no match found (?) + + + +- ++ + ProjectMESS page for '%1' / '%2' + + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + + + +- +- ++ ++ + Export to... + Exportera till... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Välj fil... + + +- +- ++ ++ + <p>No data available</p> + <p>Inget data tillgängligt</p> + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + Inget data tillgängligt + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + Reset + + + +- ++ + Negate search + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- ++ + emulator #%1 is already embedded + + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + + + +- +- +- ++ ++ ++ + paused + + + +- ++ + Release emulator + + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + + + +- ++ + To favorites + Till favoriter + + +- ++ + Kill emulator + Döda emulator + + +- ++ + &Kill emulator + &Döda emulator + + +- ++ + WARNING: no matching window for emulator #%1 found + + + +- ++ + Embedding failed + + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12398,140 +12398,140 @@ Retry embedding? + + + +- ++ + Information + Information + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + + + +- +- ++ ++ + Scanning pause key + + + +- ++ + Are you sure you want to clear the favorites list? + + + +- ++ + Are you sure you want to clear the play history? + + + +- +- ++ ++ + Choose export file + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + Alla filer (*) + + +- +- ++ ++ + Choose import file + Välj importfil + + +- +- ++ ++ + WARNING: invalid inipath + + + +- +- ++ ++ + stopping current processing upon user request + + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Dina konfigurationsändringar har ännu inte tillämpats. + Verkligen avsluta? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + + + +- ++ + There are one or more running downloads. Quit anyway? + + + +- ++ + cleaning up + + + +- ++ + aborting running downloads + + + +- ++ + disconnecting audio source from audio sink + + + +- ++ + destroying audio effects dialog + + + +- ++ + destroying media player + + + +- ++ + destroying YouTube video widget + + + +- ++ + saving main widget layout + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + destroying process manager + + + +- ++ + killing %n running emulator(s) on exit + + +@@ -12539,7 +12539,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + +@@ -12547,86 +12547,86 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + + + +- ++ + so long and thanks for all the fish + + + +- ++ + Welcome to QMC2 v%1! + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + loading style sheet '%1' + + + +- ++ + removing current style sheet + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + %n video info record(s) loaded + + +@@ -12634,156 +12634,156 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + + + +- ++ + Add URL + Lägg till URL + + +- ++ + Enter valid MP3 stream URL: + + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + + + +- ++ + Buffering %p% + Buffrar %p% + + +- +- ++ ++ + running + + + +- ++ + Choose file to store download + + + +- +- ++ ++ + Play tagged - %p% + + + +- ++ + Add favorites - %p% + Lägg till favoriter - %p% + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + + + +- +- ++ ++ + Tag - %p% + + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12794,41 +12794,41 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + + + +- +- ++ ++ + Export global MAME configuration + + + +- ++ + Import from... + Importera från... + + +- +- ++ ++ + Import global MAME configuration + + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + <inipath>/mame.ini + +@@ -12985,14 +12985,12 @@ Please check the 'rompath' option in the global emulator configuration + + + +- + Go back + Gå bakåt + + + + +- + Go forward + Gå framåt + +@@ -13045,8 +13043,8 @@ Please check the 'rompath' option in the global emulator configuration + + + +- +- ++ ++ + Enter search string + + +@@ -13071,88 +13069,28 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Enter URL + + + +- +- Open link +- Öppna länk +- +- +- +- Open link in new window +- Öppna länk i nytt fönster +- +- +- +- Open image in new window +- Öppna bild i nytt fönster +- +- +- +- Save link as... +- Spara länk som... +- +- +- +- Copy link +- Kopiera länk +- +- +- +- Save image as... +- Spara bild som... +- +- +- +- Copy image +- Kopiera bild +- +- +- +- Copy image address +- Kopiera bildens adress +- +- +- +- Reload +- Uppdatera +- +- +- +- Stop +- Stoppa +- +- +- +- Copy +- Kopiera +- +- +- +- Inspect +- Inspektera +- +- +- ++ + WARNING: invalid network reply and/or network error + VARNING: ogiltigt nätverkssvar och/eller nätverksfel + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + Miniwebbläsare + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + + +@@ -13301,2782 +13239,2757 @@ Please check the 'rompath' option in the global emulator configuration + Grafiskt &gränssnitt + + +- ++ + Language + Språk + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + + + +- ++ + Show machine's description at the bottom of any images + + + +- ++ + Show machine name + + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + + + +- ++ + Restore saved machine selection at start and after reloading the machine list + + + +- ++ + Restore machine selection + + + +- ++ + Scaled preview + + + +- ++ + Show vertical machine status indicator in machine details + + + +- ++ + Machine status indicator + + + +- ++ + Application language + Programspråk + + +- +- DE (German) +- DE (Tyska) +- +- +- +- ES (Spanish) +- ES (Spanska) +- +- +- +- EL (Greek) +- EL (Grekiska) +- +- +- +- FR (French) +- FR (Franska) +- +- +- +- IT (Italian) +- IT (Italienska) +- +- +- +- PL (Polish) +- PL (Polska) +- +- +- +- PT (Portuguese) +- PT (Portugisiska) +- +- +- +- RO (Romanian) +- RO (Rumänska) +- +- +- +- SV (Swedish) +- SV (Svenska) +- +- +- +- US (English) +- US (Engelska) +- +- +- ++ + Scaled cabinet + + + +- ++ + Scaled controller + + + +- ++ + Scaled marquee + + + +- +- ++ ++ + Show status bar + Visa statusrad + + +- ++ + Show the menu bar + Visa menyraden + + +- ++ + Show menu bar + Visa menyrad + + +- ++ + Show short description of current processing in progress bar + + + +- ++ + Show progress texts + + + +- +- ++ ++ + Only when required + + + +- ++ + Retry loading images which weren't found before? + + + +- ++ + Retry loading images + + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + + + +- ++ + restart required + + + +- ++ + Scaled title + + + +- ++ + Scaled flyer + + + +- ++ + Application font (= system default if empty) + + + +- ++ + Browse application font + + + +- ++ + Scaled PCB + + + +- ++ + Emulator log size + + + +- ++ + Maximum number of lines to keep in emulator log browser + + + +- +- ++ ++ + unlimited + + + +- +- ++ ++ + lines + rader + + +- ++ + Front end log size + + + +- ++ + Maximum number of lines to keep in front end log browser + + + +- ++ + Application font + Programtypsnitt + + +- ++ + Style sheet + + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + + + +- ++ + Browse Qt style sheet file + + + +- ++ + GUI style + + + +- ++ + Application style (Default = use system's default style) + + + +- ++ + Smooth image scaling (nicer, but slower) + + + +- ++ + Smooth scaling + + + +- ++ + Image cache size + + + +- ++ + Image cache size in MB + + + +- ++ + MB + MB + + +- ++ + Use standard or custom color palette? + + + +- ++ + Log font + + + +- ++ + Font used in logs (= application font if empty) + + + +- ++ + Browse font used in logs + + + +- +- ++ ++ + Show tool bar + Visa verktygsrad + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + + + +- ++ + Unify with title + + + +- ++ + Minimize when launching emulators? + + + +- ++ + Minimize on emulator launch + + + +- ++ + Check for other instances of this QMC2 variant on startup + + + +- ++ + Check single instance + + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + + + +- ++ + Suppress Qt messages + + + +- ++ + Show splash screen when starting up? + + + +- ++ + Show splash screen + + + +- ++ + Customize the tool-bar + + + +- ++ + Tool-bar... + + + +- +- ++ ++ + F&iles / Directories + F&iler / Kataloger + + +- ++ + Front end log file + + + +- ++ + Front end log file (write) + + + +- ++ + Browse front end log file + + + +- ++ + Favorites file + + + +- ++ + Force QMC2's working directory to be the same as the executable's path + + + +- ++ + Set working directory from executable + + + +- ++ + Play history file + + + +- ++ + Play history file (write) + + + +- ++ + Browse play history file + + + +- ++ + Data directory + Datakatalog + + +- ++ + Frontend data directory (read) + + + +- ++ + Browse frontend data directory + + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + + + +- ++ + Use catver.ini + Använd catver.ini + + +- ++ + Path to catver.ini (read) + + + +- ++ + Browse path to catver.ini + + + +- +- +- ++ ++ ++ + Preview directory + + + +- ++ + Preview directory (read) + + + +- ++ + Browse preview directory + + + +- +- +- ++ ++ ++ + Flyer directory + + + +- ++ + Flyer directory (read) + + + +- ++ + Browse flyer directory + + + +- +- +- ++ ++ ++ + Icon directory + Ikonkatalog + + +- ++ + Icon directory (read) + + + +- ++ + Browse icon directory + + + +- +- +- ++ ++ ++ + Cabinet directory + + + +- ++ + Cabinet directory (read) + + + +- ++ + Browse cabinet directory + + + +- +- +- ++ ++ ++ + Controller directory + + + +- ++ + Controller directory (read) + + + +- ++ + Browse controller directory + + + +- +- +- ++ ++ ++ + Marquee directory + + + +- ++ + Marquee directory (read) + + + +- ++ + Default palette + + + +- ++ + Edit the color palette + + + +- ++ + Edit color palette... + + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + + + +- ++ + Browse marquee directory + + + +- +- +- ++ ++ ++ + Title directory + + + +- ++ + Title directory (read) + + + +- ++ + Browse title directory + + + +- +- +- ++ ++ ++ + PCB directory + + + +- ++ + PCB directory (read) + + + +- ++ + Browse PCB directory + + + +- ++ + Software snap-shot directory (read) + + + +- ++ + Browse software snap-shot directory + + + +- +- +- ++ ++ ++ + reload required + + + +- +- +- ++ ++ ++ + SW snap folder + + + +- ++ + Software notes folder + + + +- ++ + Folder used to store personal notes about any software titles (write) + + + +- ++ + Browse software notes folder + + + +- ++ + Enable the use of a template for (empty) software notes + + + +- ++ + Software notes template + + + +- ++ + HTML file used as a template for software-notes (read) + + + +- ++ + Browse software notes template + + + +- ++ + Enable the use of category.ini + + + +- ++ + Use category.ini + + + +- ++ + Path to category.ini (read) + + + +- ++ + Browse path to category.ini + + + +- ++ + System notes folder + + + +- ++ + Enable the use of a template for (empty) system notes + + + +- ++ + System notes template + + + +- ++ + HTML file used as a template for system-notes (read) + + + +- ++ + Folder used to store personal notes about any systems (write) + + + +- ++ + Browse system notes folder + + + +- ++ + Browse system notes template + + + +- ++ + Load software information database (from history.dat) + + + +- ++ + Software information database - history.dat (read) + + + +- ++ + Save machine selection on exit and before reloading the machine list + + + +- ++ + Save machine selection + + + +- ++ + Import MAME machine information to DAT-info database + + + +- ++ + Browse machine favorites file + + + +- ++ + MAME machine information database - history.dat (read) + + + +- ++ + Browse software information database (history.dat) + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + + + +- ++ + Machine favorites file (write) + + + +- ++ + Define additional artwork classes for systems and software-list entries + + + +- ++ + Set up additional artwork classes... + + + +- ++ + Choose active image formats and their priorities (per artwork class) + + + +- ++ + Select image formats... + + + +- ++ + Load MAME machine information database (history.dat) + + + +- ++ + Machine info (MAME) + + + +- ++ + Load MESS emulator information database (messinfo.dat) + + + +- ++ + MESS emulator information database - messinfo.dat (read) + + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + + + +- ++ + Parent image / video fallback + + + +- ++ + Open the component setup dialog + + + +- ++ + Component setup... + + + +- ++ + Show animation when loading, filtering or tagging the machine list? + + + +- ++ + Show loading animation + + + +- ++ + Scaled software snapshot + + + +- ++ + Select individual fallback settings per artwork class + + + +- ++ + Individual fallback settings... + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + + + +- ++ + Browse MESS emulator information database (messinfo.dat) + + + +- ++ + Video snap folder + + + +- ++ + Video snap folder (read) + + + +- ++ + Browse video snap folder + + + +- ++ + Optimize catver.ini for faster loading + + + +- ++ + Setup the icon cache database + + + +- ++ + Enable ROM state filtering? + + + +- ++ + ROM state filter + + + +- ++ + Update delay + + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + + + +- ++ + No SW snaps for visible details + + + +- ++ + Select sort criteria + + + +- ++ + ROM state + ROM-tillstånd + + +- ++ + Tag + Tagg + + +- ++ + Year + År + + +- ++ + Manufacturer + Tillverkare + + +- ++ + ROM types + ROM-typer + + +- ++ + Players + Spelare + + +- ++ + Driver status + Drivrutinsstatus + + +- ++ + Source file + Källfil + + +- ++ + Rank + + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + + + +- ++ + Sort order + Sorteringsordning + + +- ++ + Select sort order + Välj sorteringsordning + + +- ++ + Ascending + Stigande + + +- ++ + Descending + Fallande + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + + + +- ++ + Play on sub-list activation + + + +- ++ + Display ROM status icons in master lists? + + + +- ++ + Show ROM status icons + + + +- ++ + Cursor position + + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + + + +- ++ + Visible + + + +- ++ + Top + + + +- ++ + Bottom + + + +- ++ + Center + + + +- ++ + Responsiveness + + + +- ++ + immediate + + + +- ++ + Show ROM state C (correct)? + + + +- ++ + Show ROM state M (mostly correct)? + + + +- ++ + Show ROM state I (incorrect)? + + + +- ++ + Show ROM state N (not found)? + + + +- ++ + Show ROM state U (unknown)? + + + +- ++ + Sort criteria + + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + + + +- ++ + independent + + + +- ++ + embedded + + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + + + +- ++ + Above / Left + + + +- ++ + Above / Center + + + +- ++ + Above / Right + + + +- ++ + Below / Left + + + +- ++ + Below / Center + + + +- ++ + Below / Right + + + +- ++ + Disable snaps + + + +- ++ + none + ingen + + +- ++ + ms + ms + + +- ++ + Launch emulation on double-click events (may be annoying) + + + +- ++ + Double-click activation + + + +- ++ + SW snap position + + + +- ++ + Default launch-mode + + + +- ++ + Automatically trigger a ROM check if necessary + + + +- ++ + Auto-trigger ROM check + + + +- ++ + Display (or hide) device sets in master lists? + + + +- ++ + Show device sets + + + +- ++ + Display (or hide) BIOS sets in master lists? + + + +- ++ + Browse system manual folder + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + Show BIOS sets + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + &Shortcuts / Keys + G&envägar / Tangenter + + +- +- ++ ++ + Redefine key sequence + + + +- ++ + Reset key sequence to default + + + +- ++ + Reset + + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + + + +- +- ++ ++ + Function / Key + Funktion / Tangent + + +- ++ ++ + +- +- +- ++ ++ + Default + Standard + + +- ++ + Custom + Anpassad + + +- ++ + &Joystick + S&tyrspak + + +- ++ + Enable GUI control via joystick + + + +- ++ + Enable joystick control + Aktivera styrning med styrspak + + +- ++ + Rescan available joysticks + + + +- ++ + Rescan joysticks + + + +- ++ + Select joystick + Välj styrspak + + +- ++ + List of available joysticks - select the one you want to use for GUI control + + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + Inga styrspakar hittades + + +- ++ + Joystick information and settings + Information och inställningar för styrspak + + +- ++ + Axes: + Axlar: + + +- ++ + Number of joystick axes + Antal styrspaksaxlar + + +- +- +- +- ++ ++ ++ ++ + 0 + 0 + + +- ++ + Buttons: + Knappar: + + +- ++ + Number of joystick buttons + Antal styrspaksknappar + + +- ++ + Hats: + + + +- ++ + Number of coolie hats + + + +- ++ + Trackballs: + + + +- ++ + Number of trackballs + + + +- ++ + Automatically repeat joystick functions after specified delay + + + +- ++ + Auto repeat after + + + +- ++ + Repeat all joystick functions after how many milliseconds? + + + +- +- ++ ++ + ms + ms + + +- ++ + Event timeout + + + +- ++ + Process joystick events after how many milliseconds? + + + +- ++ + Calibrate joystick axes + + + +- ++ + Calibrate + Kalibrera + + +- ++ + Test all joystick functions + + + +- ++ + Test + + + +- ++ + Map joystick functions to GUI functions + + + +- ++ + Map + + + +- ++ + Remap a joystick function to the selected GUI function + + + +- ++ + Remap + + + +- ++ + Remove joystick mapping from selected GUI function + + + +- ++ + Remove + Ta bort + + +- ++ + Active joystick mappings; double-click to remap joystick function + + + +- ++ + Joystick function + + + +- ++ + Network / &Tools + + + +- ++ + Zip tool + Zip-verktyg + + +- +- +- ++ ++ ++ + Command + Kommando + + +- ++ + External zip tool, i.e. "zip" (read and execute) + + + +- ++ + Browse for zip tool + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + + + +- ++ + ROM tool + ROM-verktyg + + +- ++ + External ROM tool (it's completely up to you...) + + + +- ++ + Browse ROM tool + + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + + + +- +- +- +- ++ ++ ++ ++ + Working directory + Arbetskatalog + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + + + +- ++ + Browse working directory of the ROM tool + + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + + + +- ++ + Copy tool output to front end log + + + +- ++ + Automatically close the tool-executor dialog when the external process finished + + + +- ++ + Close dialog automatically + + + +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + + + +- ++ + Use HTTP proxy + Använd HTTP-proxyserver + + +- ++ + Host / IP + Värdnamn / IP + + +- ++ + Hostname or IP address of the HTTP proxy server + + + +- ++ + Port + Port + + +- ++ + Port to access the HTTP proxy service + + + +- ++ + User ID + + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + + + +- +- Password +- Lösenord +- +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- +- +- +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- +- +- +- ++ + Browser settings + + + +- ++ + Browse cookie database + + + +- ++ + Cookie database file (write) + + + +- ++ + Cookie database + + + +- ++ + Save and restore cookies used on web pages? + + + +- ++ + Restore cookies + + + +- ++ + Manage cookies stored in database + + + +- ++ + Manage stored cookies + + + +- ++ + Clear database + + + +- ++ + 7-zip tool + + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + + + +- ++ + Browse for 7-zip tool + + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + + + +- ++ + Machine list cache + + + +- ++ + Browse machine list cache file + + + +- ++ + Software list cache DB + + + +- ++ + Browse software list cache database file + + + +- ++ + Clean up user data database (removes obsolete entries) + + + +- ++ + Database file for caching the ouput from -listsoftware (write) + + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + + + +- ++ + Machine list database + + + +- ++ + Machine list database file (write) + + + +- ++ + Browse machine list database file + + + +- ++ + Foreign &emulators + + + +- ++ + Remove all cookies by recreating the database + + + +- ++ + Use native file dialogs + + + +- ++ + Kill emulators when QMC2 exits? + + + +- ++ + Kill emulators on exit + + + +- ++ + Terminate all other emulator instances when launching a new one? + + + +- ++ + One emulator at a time + + + +- ++ + Compressed cabinet file (read) + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + 7z + + +- ++ + Browse compressed cabinet file + + + +- ++ + Compressed controller file (read) + + + +- ++ + Browse compressed controller file + + + +- ++ + Compressed marquee file (read) + + + +- ++ + Browse compressed marquee file + + + +- ++ + Switch between specifying a title directory or a compressed title file + + + +- ++ + MAME emulator information database - mameinfo.dat (read) + + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a preview directory or a compressed preview file + + + +- ++ + Compressed preview file (read) + + + +- ++ + Browse compressed preview file + + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + + + +- ++ + Compressed flyer file (read) + + + +- ++ + Browse compressed flyer file + + + +- ++ + Switch between specifying an icon directory or a compressed icon file + + + +- ++ + Compressed icon file (read) + + + +- ++ + Browse compressed icon file + + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + + + +- ++ + Switch between specifying a controller directory or a compressed controller file + + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + + + +- ++ + Compressed title file (read) + + + +- ++ + Browse compressed title file + + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + + + +- ++ + Compressed PCB file (read) + + + +- ++ + Browse compressed PCB file + + + +- ++ + Compressed software snap-shot file (read) + + + +- ++ + Browse compressed software snap-shot file + + + +- ++ + Load MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + + + +- ++ + Load MESS machine information database (sysinfo.dat) + + + +- ++ + MESS machine information database - sysinfo.dat (read) + + + +- ++ + Browse MESS machine information database (sysinfo.dat) + + + +- ++ + E&mulator + E&mulator + + +- ++ + &Global configuration + &Global konfiguration + + +- +- ++ ++ + Executable file + Körbar fil + + +- ++ + Recreate user data database (removes <b>all</b> entries) + + + +- ++ + Emulator executable file (read and execute) + + + +- +- ++ ++ + Browse emulator executable file + + + +- ++ + Emulator log file + + + +- ++ + Emulator log file (write) + + + +- ++ + Browse emulator log file + + + +- ++ + Options template file + + + +- ++ + Options template file (read) + + + +- ++ + Browse options template file + + + +- ++ + ROM state cache + + + +- ++ + ROM state cache file (write) + + + +- ++ + Browse ROM state cache file + + + +- ++ + General software folder + + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + + + +- ++ + Browse general software folder + + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + + + +- +- ++ ++ + Browse working directory + + + +- ++ + Software state cache + + + +- ++ + Directory used to store individual state cache files for each software-list (write) + + + +- ++ + Browse software state cache directory + + + +- ++ + XML cache database + + + +- ++ + Database file for caching the output from -listxml (write) + + + +- ++ + Browse XML cache database file + + + +- ++ + User data database + + + +- ++ + Database file for storing/retrieving user data (write) + + + +- ++ + Browse user data database file + + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + + + +- ++ + Registered emulator's name + + + +- ++ + Replace emulator registration + + + +- ++ + Replace + Ersätt + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + + + +- ++ + Icon + Ikon + + +- ++ + Name + Namn + + +- ++ + Executable + + + +- ++ + Custom IDs + + + +- ++ + Register emulator + + + +- ++ + Emulator name + + + +- ++ + Deregister emulator + + + +- ++ + Import MESS emulator information to DAT-info database + + + +- ++ + Import MAME emulator information to DAT-info database + + + +- ++ + Import MESS machine information to DAT-info database + + + +- ++ + DAT-info database file + + + +- ++ + Browse DAT-info database file + + + +- ++ + DAT-info database file (write) + + + +- ++ + Machine info (MESS) + + + +- ++ + Emu info (MAME) + + + +- ++ + Emu info (MESS) + + + +- ++ + Software info + + + +- ++ + Import software information to DAT-info database + + + +- ++ + Browse MAME machine information database (history.dat) + + + +- +- Machine description ++ ++ Machine description ++ ++ ++ ++ ++ Machine name ++ ++ ++ ++ ++ Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) ++ ++ ++ ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) ++ ++ ++ ++ ++ pt_BR (Brazilian Portuguese) ++ ++ ++ ++ ++ ro (Romanian) + + + +- +- Machine name ++ ++ sv (Swedish) + + + +- +- Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) ++ ++ us (American English) + + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + + + +- ++ + Machine list cache file (write) + + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + + + +- ++ + Add + + + +- ++ + Remove + + + +- ++ + Command to execute the emulator (path to the executable file) + + + +- ++ + Apply settings + Tillämpa inställningar + + +- ++ + &Apply + T&illämpa + + +- ++ + Restore currently applied settings + + + +- ++ + &Restore + Åte&rställ + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + + + +- ++ + &Default + &Standard + + +- ++ + Close and apply settings + Stäng och tillämpa inställningar + + +- ++ + &Ok + &Ok + + +- ++ + Close and discard changes + Stäng och förkasta ändringar + + +- ++ + &Cancel + A&vbryt + + +- ++ + Minimize when launching (non-embedded) emulators? + + + +- +- +- +- ++ ++ ++ ++ + Category + Kategori + + +- +- +- +- ++ ++ ++ ++ + Version + Version + + +- ++ + Check all ROM states + + + +- ++ + Check images and icons + + + +- ++ + About QMC2 + Om QMC2 + + +- ++ + Analyze tagged sets + + + +- ++ + Export ROM Status + + + +- ++ + Copy tagged sets to favorites + + + +- ++ + Online documentation + + + +- ++ + Clear image cache + Töm bildcache + + +- ++ + Setup arcade mode + + + +- ++ + Clear ProjectMESS cache + + + +- ++ + Clear icon cache + Töm ikoncache + + +- +- ++ ++ + Open options dialog + + + +- ++ + Play (independent) + + + +- ++ + Play (embedded) + + + +- ++ + About Qt + Om Qt + + +- ++ + Check states of tagged ROMs + + + +- ++ + Recreate template map + + + +- ++ + Check template map + + + +- +- ++ ++ + Stop processing / exit QMC2 + + + +- ++ + Clear YouTube cache + Töm YouTube-cache + + +- ++ + Toggle ROM state C + + + +- ++ + Toggle ROM state M + + + +- ++ + Toggle ROM state I + + + +- ++ + Toggle ROM state N + + + +- ++ + Toggle ROM state U + + + +- ++ + Tag current set + + + +- ++ + Untag current set + + + +- ++ + Toggle tag mark + + + +- ++ + Toggle tag / cursor down + + + +- ++ + Toggle tag / cursor up + + + +- ++ + Tag all sets + + + +- ++ + Untag all sets + + + +- ++ + Invert all tags + Invertera alla taggar + + +- ++ + Tag visible sets + + + +- ++ + Untag visible sets + + + +- ++ + Invert visible tags + + + +- ++ + Hierarchical view + + + +- ++ + Run external ROM tool + + + +- ++ + Run ROM tool for tagged sets + + + +- ++ + Toggle full screen + Växla helskärm + + +- ++ + Software-list view-mode flat + + + +- ++ + Software-list view-mode tree + + + +- ++ + Previous track (audio player) + + + +- ++ + Next track (audio player) + + + +- ++ + Fast backward (audio player) + + + +- ++ + Fast forward (audio player) + + + +- ++ + Stop track (audio player) + + + +- ++ + Pause track (audio player) + + + +- ++ + Play track (audio player) + + + +- ++ + Raise volume (audio player) + + + +- ++ + Lower volume (audio player) + + + +- ++ + Plus (+) + + + +- ++ + Minus (-) + + + +- ++ + Cursor down + + + +- ++ + End + + + +- ++ + Escape + + + +- ++ + Cursor left + + + +- ++ + Home + + + +- ++ + Page down + + + +- ++ + Page up + + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- +- +- ++ + + + +@@ -16086,737 +15999,752 @@ Please check the 'rompath' option in the global emulator configuration + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + + + +- ++ + please reload machine list for some changes to take effect + + + +- ++ + sorting machine list by %1 in %2 order + + + +- ++ + triggering automatic reload of machine list + + + +- ++ + Enter key + + + +- ++ + Analyze current machine + + + +- ++ + Copy machine to favorites + + + +- ++ + Reload machine list + + + +- ++ + Check machine's ROM state + + + +- ++ + Open ROMAlyzer (system mode) + + + +- ++ + Open ROMAlyzer (software mode) + + + +- ++ + Rebuild current machine + + + +- ++ + Rebuild tagged machines + + + +- ++ + Check software-states + + + +- ++ + Launch arcade mode + + + +- ++ + Increase rank + + + +- ++ + Decrease rank + + + +- ++ + Return key + + + +- ++ + Cursor right + + + +- ++ + Tabulator + + + +- ++ + Cursor up + + + +- ++ + Activate item + + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + + + +- +- ++ ++ + Reset to default font + + + +- +- ++ ++ + No style sheet + + + +- ++ + image cache size set to %1 MB + + + +- +- ++ ++ + Confirm + Bekräfta + + +- ++ + &Local + + + +- ++ + &Overwrite + + + +- ++ + Do&n't apply + + + +- ++ + please restart QMC2 for some changes to take effect + + + +- ++ + ascending + stigande + + +- ++ + descending + fallande + + +- ++ + 7z error + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- +- ++ ++ + Preview file + + + +- +- ++ ++ + Flyer file + + + +- +- ++ ++ + Icon file + + + +- +- ++ ++ + Cabinet file + + + +- +- ++ ++ + Controller file + + + +- +- ++ ++ + Marquee file + + + +- +- ++ ++ + Title file + + + +- +- ++ ++ + PCB file + + + +- +- ++ ++ + SW snap file + + + +- +- +- ++ ++ ++ + Custom IDs... + + + +- ++ + Full detail view + + + +- +- +- +- ++ ++ ++ ++ + Category view + + + +- +- +- +- ++ ++ ++ ++ + Version view + + + +- ++ + libarchive error + + + +- ++ + Choose Qt style sheet file + + + +- ++ + Qt Style Sheets (*.qss) + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + Alla filer (*) + + +- ++ + Choose preview directory + + + +- ++ + Custom view + + + +- ++ + N/A + + + +- ++ + Choose flyer directory + + + +- ++ + Choose icon directory + + + +- ++ + Choose cabinet directory + + + +- ++ + Choose controller directory + + + +- ++ + Choose marquee directory + + + +- ++ + Choose title directory + + + +- ++ + Choose PCB directory + + + +- ++ + Choose options template file + + + +- +- ++ ++ + Choose emulator executable file + + + +- ++ + Choose emulator log file + + + +- ++ + Choose XML cache database file + + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + + + +- ++ + &Yes + + + +- ++ + &No + + + +- ++ + Choose user data database file + + + +- ++ + Choose cookie database file + + + +- ++ + Choose zip tool + + + +- ++ + Choose 7-zip tool + + + +- ++ + Choose ROM tool + + + +- +- +- ++ ++ ++ + Choose working directory + Välj arbetskatalog + + +- ++ + Choose play history file + + + +- ++ + Choose machine list database file + + + +- ++ + Choose ROM state cache file + + + +- ++ + Choose software state cache directory + + + +- ++ + Choose general software folder + + + +- ++ + Choose front end log file + + + +- ++ + Choose data directory + + + +- ++ + Choose dat-info database file + + + +- ++ + Choose MAME machine info DB + + + +- ++ + Choose software info DB + + + +- ++ + Choose catver.ini file + + + +- ++ + Choose category.ini file + + + +- ++ + Choose compressed preview file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + Alla filer + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + + + +- ++ + Choose compressed flyer file + + + +- ++ + Choose compressed icon file + + + +- ++ + Choose compressed cabinet file + + + +- ++ + Choose compressed controller file + + + +- ++ + Choose compressed marquee file + + + +- ++ + Choose compressed title file + + + +- ++ + Choose compressed PCB file + + + +- ++ + Choose compressed software snap file + + + +- ++ + Choose software snap directory + + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + + + +- +- ++ ++ + Default icon + + + +- +- ++ ++ + No icon + + + +- ++ + &Foreign emulators + + + +- ++ + Choose machine favorites file + + + +- ++ + Choose machine list cache file + + + +- ++ + Choose software list cache database file + + + +- ++ + Choose MESS machine info DB + + + +- ++ + Choose MAME emulator info DB + + + +- ++ + Choose MESS emulator info DB + + + +- ++ + Choose software notes folder + + + +- ++ + Choose software notes template + + + +- +- ++ ++ + HTML files (*.html *.htm) + HTML-filer (*.html *.htm) + + +- ++ + Choose system notes folder + + + +- ++ + Choose system notes template + + + +- ++ + Choose video snap folder + + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + shortcut map is clean + + + +- ++ + WARNING: shortcut map contains duplicates + + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + ERROR: couldn't initialize SDL joystick support + FEL: kund inte initiera stöd för SDL-styrspak + + +- ++ + joystick map is clean + + + +- ++ + WARNING: joystick map contains duplicates + + +@@ -17298,28 +17226,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + korrekta + + +- ++ + incorrect + felaktiga + + +- ++ + mostly correct + mestadels korrekta + + +- ++ + not found + hittade inte + + +- ++ + + + +@@ -17328,54 +17256,54 @@ Are you sure you want to do this? + okända + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + Standard + + +- ++ + Import from... + Importera från... + + +- +- ++ ++ + Export machine-specific MAME configuration + + + +- +- ++ ++ + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + + + +- ++ + Phonon features enabled - using Phonon v%1 + + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + + +@@ -17483,19 +17411,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + ja + + +- ++ + + no + nej + + +- ++ + + partially + +@@ -17543,7 +17471,7 @@ Are you sure you want to do this? + + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + + +@@ -21020,7 +20948,7 @@ Are you sure you want to do this? + + + +- ++ + Choose mame.ini + + +@@ -21034,7 +20962,7 @@ Are you sure you want to do this? + + + +- ++ + Choose ui.ini + + +@@ -21143,178 +21071,179 @@ Are you sure you want to do this? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + A&vbryt + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + Okänt + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21322,74 +21251,73 @@ Are you sure you want to do this? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + Standard + + +- +- ++ ++ + Choose emulator executable file + + + +- +- +- +- ++ ++ ++ ++ + All files (*) + Alla filer (*) + + +- ++ + Choose working directory + Välj arbetskatalog + + +- ++ + Choose ROM path + Välj ROM-sökväg + + +- ++ + Choose sample path + Välj sökväg för samplingar + + +- ++ + Choose hash path + + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23649,59 +23577,59 @@ Are you sure you want to do this? + ROM-sökväg + + +- ++ + Default + Standard + + +- ++ + Error + Fel + + +- ++ + The specified file isn't executable! + + + +- +- ++ ++ + Choose emulator executable file + + + +- +- ++ ++ + All files (*) + Alla filer (*) + + +- ++ + Choose working directory + Välj arbetskatalog + + +- ++ + Choose ROM path + Välj ROM-sökväg + + +- ++ + Choose sample path + Välj sökväg för samplingar + + +- ++ + Choose hash path + + + +- ++ + Single-instance check + + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23709,17 +23637,17 @@ Exit now, accept once or ignore completely? + + + +- ++ + &Exit + A&vsluta + + +- ++ + &Once + En &gång + + +- ++ + &Ignore + &Ignorera + +@@ -23862,49 +23790,49 @@ Exit now, accept once or ignore completely? + + + +- ++ + FLV 240P + FLV 240P + + + +- ++ + FLV 360P + FLV 360P + + + +- ++ + MP4 360P + MP4 360P + + + +- ++ + FLV 480P + FLV 480P + + + +- ++ + MP4 720P + MP4 720P + + + +- ++ + MP4 1080P + MP4 1080P + + + +- ++ + MP4 3072P + MP4 3072P + + + +- ++ + Start / pause / resume video playback + + +@@ -23915,20 +23843,16 @@ Exit now, accept once or ignore completely? + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + + + + +- ++ + Volume + + +@@ -23973,286 +23897,261 @@ Exit now, accept once or ignore completely? + + + +- ++ + Mute / unmute audio output + + + +- ++ + Volume level + + + +- ++ + Video progress + Videoförlopp + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + + + +- +- ++ ++ + Play this video + Spela upp denna video + + +- +- +- ++ ++ ++ + Copy video URL + + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + + + +- +- +- ++ ++ ++ + Copy author URL + + + +- +- ++ ++ + Paste video URL + + + +- +- ++ ++ + Local movie file... + + + +- ++ + Remove selected videos + + + +- +- +- ++ ++ + Full screen (return with toggle-key) + + + +- +- ++ ++ + Attach this video + + + +- ++ + Auto-suggest a search pattern? + + + +- ++ + Auto-suggest + + + +- ++ + Enter string to be appended + + + +- ++ + Append... + + + +- ++ + Enter search string + + + +- ++ + Appended string + + + +- ++ + Enter the string to be appended when suggesting a pattern: + + + +- ++ + Valid placeholder macros: + + + +- +- ++ ++ + All files (*) + Alla filer (*) + + +- +- ++ ++ + Choose movie file + + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + + + +- ++ + video player: the local movie file '%1' is already attached, ignored + + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + + + +- ++ + Buffering: %1% + + + +- +- Loading +- Läser in +- +- +- +- ++ + Playing + Spelar upp + + +- +- ++ + Paused + Pausad + + +- +- video player: playback error: %1 +- +- +- +- +- Video playback error: %1 +- +- +- +- ++ + Fetching info for video ID '%1' + + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + + + +- +- +- ++ ++ ++ + Video info error: %1 + + + +- ++ + video player: video info error: timeout occurred + + + +- ++ + video info error: timeout occurred + + + +- ++ + video info error: unknown reason + + + +- ++ + video player: video info error: %1 + + + +- +- ++ + Return to windowed mode + + + +- +- ++ + Full screen (press %1 to return) + + + +- ++ + video player: video image info error: %1 + + + +- ++ + video player: search request error: %1 + + + +- ++ + video player: search error: can't parse XML data + + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + + +diff --git a/data/lng/qmc2_us.qm b/data/lng/qmc2_us.qm +index b89855aea4177ab6098f7af39fb717956be31b8b..e711399db9f3f470095730ae81c23f0878681349 100644 +GIT binary patch +delta 25505 +zcmXV&cR)@58^@o|IOp7R?o~7-lu@EmXo{3d5;7u5WK;-cWMy5HkRr;#~M0jQ6k*{dsnb4Q@PyQveYpRqSynsYSJ +zvZ@-nTYLqBhXFLKhr9G%BR4AnXf*{$@*#kbjX>k_kSB5Ds%a#Xj%sA)cPiKnpKsF; +z*njJgvAA!KHPY^)Mi%fIIUV#Y^WO`n1GhY&1~Uh`GFDAww&8gOfX<_Ei}Ky)9VFE^{bxNX1pw*h(=0()>5VBkm~YrQqHQAYp<;kB*5 +zj7$YKHWgr4S0KVlfDsu$cDVo~j{;^q4=`>FkOTh#7z=?Mnx~Q3?*qDh8PJ#{wS+r3 +z^@#+QT8c0I0o*$dV9rh8NkIVDK5HZse*vF92$=bI)l+b(!CLPGzWF*3>nXsuWC2@Z +z4}9BkU~R+HX+j5Ol^yVJoNk(y7|$Y?>JI!$tQ>)9KGbpo*1&LC{SrF$F$!Ztkr!P7w4j)(Nw +zI1qMupdIRwp1`sq)whzD(sLFF$K!zw*r&SaysE!H0K%`Sz_P70@=E3vtdpuv)cG~5 +zdl1CuU4czN;u1o?K#*L20Dav7q;A1z#LgPo%RfIJPs-^YzAOf1**>356mkLs?I}>ssmQI +z#mx3LSiN@#9?zg!8v2z+Ej6;WrBLmX9nhQBU>)!Y=&dtgea8pr!WgJg{|Cg<6HCC> +zG#7XcN3dO!2F(2r)LMZ2We;`V;)PXFz+N{7&15FnS80#_Hv{aqg#dFV;9#>A9a3*_ +z7*-Q_uftG(ZWo{{WT>BuulrC78qC7?k=v_(WLFw&p}Huxfx(&JJR%+7${&s7(npQ# +zjU_nG-U-B#g7eZ-$UYUk{0N-am!b!L56-xC%*9omt2p!s{105yQ-O}Z2aRk8pn;r) +z##b$XSZxF^aXoW*G+l5F*vd`d^Uxh#*JSYdZ31xr4m7(M2i&wu1smUk +z7QGMECuwU~qM7`v%%C +z>jyMyo<`noD1`YJ0EzamVC-g%?D;$BFdN@AD@u(wcu~vS>MDbSG0FkD_Lzms-w`7G +zlYsr*2N8oX{%kl35i9Ee9Owhx0xZyUH$u1caloqPK(|?0KhzV3*F{q0t~;a +zk?J>VWYNj&Kn(bb-u2i=QL0_H=W`2S` +zb>o13&4j+iWx%WKgMJ%Tps%K@mL^{G_+mB8qyruQR$XP{YPM}HBt?D&*uM~xhH_wi +z_NgT%Rv2!R525q!>j2j1up7@d~`Gr0g$8nwePngvrvxdJVG3~3qYBs|Mu#*YmE +znfoC9JgS9P#W3sM4`9KcV0Qm1z|4lhT&IRWNBF?pml(zE&cVDkM}b_L4vX$50OLKr +zsz*#6lwZ|g=~D}!`zot%OU84t%731Eale%cSL?Fl%(CLVY@0~|k!KIOuKu1^8d=@H72Iv2kyjR>uyHa#;sz)@g3IgM7*00B +zy{k1Eio!nwZQKCPm?Z-f+~Dl7^G3XbN^q|I9-tTQ!}*)aD +ze8F?YW;}tf!PkI$UWBs!=YYhWfbYMj0SzGV6Hr&}*#bW!J-|pW?17&{@ee+afbvr) +zqrQ!Yzx&a6dz~PVioyDR9gWlwrjh+xL`XwC;#boMGtB|ct`X*iTbQgPf**3~A0h;! +zj~qZ~ +zV!C)Wz}NkxO2d&rdSz>5uTnK~rzgZ>`+q=o`Vve3Wk7R6iB-xMpl|w-YV}6|JpW0m +zql#wsH%QHi-oWm~kea1EFky>q{rRszpSlx=J$nIsVo8133fS|tq(S4|!0wii2CY$OJ}TBo +z(>;lEh6J?jKH_}o6grbI;`|ELU*A#0We|GauOS-AjC;hrL&+Fm330^z{XBp%jfwj= +z46-fe5w9ap0h|^P@0#C%)|y0oZ2AIAb0R+BXy^9{@yWysiCy4D0(mHQ-QXBVLM`$*e^Z2|Cc+jFQe +zo}MI~F5nUAk)V-9u7EuxS_7QI@WCPlS-zcyxZG0g0<>4v>x9-v*=bED~3W?&@PJ +z^^~Opy<1IvYiVn&w3rN8>jvy;IT>=~2X6C2GUN|(mq?O)Hvn-;BuS-sRdc_Qp^1^e +zBfgOl4+j9Zw<5`X%YhaTC!>FPV4xjB#;Egv)CePEKB22l4|@%ACh_> +z&rxVHNefE=3MWb00Mw^F-;?R_Gl1rMlbPXm0G~NYzq16$ui+Z$hU;X`#Q-2_MP%+! +z^zKhYGXFHXj`F!=!P=EQFc3wEKRd*VbEw%Y>i_Fav+eFSCHwEhWf}CH5&l@L_3-0rP6~7^u +zZ18USI+82HyFx5Xw;<=%GY%Z&V0yyKr)Uy(4A-$)qIrET)&I)eF@enw{QEp7k`v*m##b +zN4>*VrIP0_%YZE0PF@^6iTU6j^70XS2bVDN@@YR{J_32|{|rM>Pu0cRw))h?);r$BpDe4?LbDm#gvC4od!J@+}irsa0n+)7q7mE>=$=#Fgq-YX`GdeW{#c +z0T8%?$^|2VuDPJPRCiUzx1y#iafAF8tMSzx=rn6}ZgtmY^&@C42REP{b7>vr641qI +zv~Dx>yJJhJT{SFfv^+}f8t(4M7i8Zug +zi_UmzC(wpVBY@3&KpXBD39z}QMv}2mBWGFEWqkyYu#?o~IGUr`MK!*LgRw&nZ4!!y +z=*n5zWEHx!l3}#TUTa{TS5tS_X~4X9Q;$5%Qhcsb&&rd~7d4_y1JL)(UQ3(RLSN8$ +z0d4-!4t>sF>bn~^rE>}Oy&Vqh521elF0a6n`hzF1LnYL|R|g>9=FygyUIDdvLjwnz +zfvVK>G0U>2t;@Z&3uyn8uq-ysu|il;Oz +zBOB$HQ2EAYjac07;gp;9;v55$1h>@I`9dWp6r{@gmAR?z=L#1%U{3_WUCQ2 +zt^4(Iqsbftxa0Z??pZ^VC!^Uv&!eMqcA-BDp`)=R#73{Dql+&A>vV#S(c@BfdP&FB +zL)9)v(J}APZaSONF<&MD^!Y}|uE8qU14SbpZ>IjS33T{~hq>2lI?El;*7&U&*}K1V +zcFHS&^7C~58QjIQgR*BZRaJ_CXpy?gwwp3Nmu^^o6lgzH{bTE3oUo8?Y4iYy +z*)+NZlQvKd8fmX&jl9Vxn*9cg8fRb8te&vm6+y)Z*67@?6hjIZD#TaDb@lx~gj +z2I8Mhx2@X%^p8Tfm1hIl9!0l1;Xb~~rQ4h40=eKyw=b}QE)bSax8sd+uSGOxU@_2n +zHgsnqp0WRO=&mUAWSbYz-H)&^6!C`cvB&_nGnnp;ngHK1r4L?jb$W0JuIrTv^k62QpO(?|P=9xPe3>4xy9&JDQ+o6wZfC+3 +zjWjAkBMUu5k6!A44zC71`t1~uAGPVRX#&9IbM)9YKXjn+^mtrXV3l0y@%vT)Tieh= +zH(ZyG1+=ic4+gL!&FIN#Pk=m3qbEPi0UkS+oEAs|FYiY=vbjCIGIl%AguwDzVaOf(B7B6N<+6XkkGe}iZPf_`p%{R +zmCp`f*_sPz&n#7*kHupD!>Fm2{>*e_8+=c8mV5 +z-xX+hCjFg;S?Q-;^mmyZ(Dip|xsy4t`SG;;x`3%cgcuPFhOFC%eR`~oV+@Jjy86RB=(CxlPBaB_I{XoA~Ji+Ea(H^rs-W5D> +zQzN&(&G^evK-nKA^nV7#Z4(ol1fdSQ#&o8waG%VWZUt_%lP{Ayl%hTz#*~BESUR$2 +z`rKFyDP_#$%ng9ly3Dkf1uCLOtn$iqRMsIiSmm{Ufvs4`s&oy;`Ws_rjr@V;_GIQu +zF&6b1!YpcH$e3YZ7PsC3#7<*Ysr4|VuV&Vb(NWzT!>o&gF^BMFHM-rwT*HLbm^%Py +z`w(X1_fOv?Guz6@DUPgGM@+^awPCd~@^H7hvO3Q#vA`KWlhw_|V=yR_*>6D)mN!wI +zYv&ODvoCXK7>SlzmpLZL01HvI>-XXU&3`f&H~al0`Vwgfxca^!m*V7)6rzl +zLKY<9Av_2*CmLRIG7CAD20UN_3webBs9t*( +zx_lRqF=;IHHFESH)-eJNaH|XJ7@r5^@lB01{UGa%Su0Fm&cgR$!0I%Ub^UiiCp=i! +zd3XV5Tr{!)b}TX(Q?Gi(tVa^ILza$Z(Zle-OnJk4)~sv9?6V__3CY9qS}=s=pD(rB6W-j)Hp=Wo{MwFkPyC>A?p7(QOjVl&Wh7d>aOYyUmIz+!U< +zfaf%gw4}X8wsE&cZrg^%C4U1l*^R|l!xeBVWbqx&!Y_+=Vdhodaz-B%zNOW3$~!!h%*VH0QD;})ed<1<{@TJCIe +zwHeqbddQ~6-U9AFouv-JmF-oPrCz~8VMtGwR;Lu0wZzg2rep4DWYgN=?~~)%w3tXx +z*E={GUsPqYx>PBDCl|3fm9Tbk_dA;t +zl7+-uVtFq4KpS3R`}`TOnuTnC8NrXU|*R0p25rJrBY0uL3My%YMdZVg0O-{c3#s!a7fP#k$V^Iq)dBAmb-7&Xp&-G3} +zaKXE9{XBcLUn_1Hidys630|on4PbBwZZf^$<@HDBU~%b@M)s;eBX_ROolP+o +z4|n6v1JOa0jN-2IE&?atR2OG2V{sz)riB2tZgKCnxGv3nc+=EdSpM_oK1=cCeuH>( +z#UI#%KfHPC0hk=dXk;Bcx$j2oQ`)WO{=O$MIh?^;?naYr_lgHlj1<2+@_-H2K(apb +zpcCj5PG#~|tFSK;)szRX2?X+TA2JlwC(b^`)T6v@Sunu$j=WPmy4oA*JbVR)BiTtK +z`Ab@5Z~Py#h8qnnzeX1X!1-k#dzstVP`uU(UM?@&V4z@otZD@%O8E0`LB`9Ei<59u@W&SmpIRx{)I^XM=C@=-yUXjIGC`*W>0iJj;7who0{G +z&0}tP0JkE%uOEi%$31!9#h)>Z-Qs;uqf7|)R&O+P2sG~J1Mj0Zcyfg&*sKLIK*tll +zUByJT2_Iti31xRBJ~aIm(A5ebdNcx!e}4swzVo5w__~=kY6}-@;}~iRaBMaoQ@R<5 +ziwz&Q>lD!MYx%f5WO*zfw;#20e{(*m3A#G551&+)iJ{z#8@WC917`BcJ%fR+J2Y5}&f_A|tA=(~!~z^)4O+O7(&4o2T4eD3N{>~Eja$X&wt{5$3V +zH{bIG2N`0y%X07?UFSs2)`|$O~Sm5sdd}DhIdtblvP3!6cjqJy_v~P@mZ{%Bgsi?*#^K8Ky +z)Nze=8y7U-+p!`=rkvtC&SIo0ugh~fp)T?1$a4;1Wh3Dx&pF%@SJ9O3G=9WPMC3c4 +z@5R+N;k)Ow0+K$O@A(h?{jHmPFRnVZ?8tLtC@Q=KJn!Io6pD@cKJRj@lzry=azEnx +z`SE-My348k`Js;PVB}3!@Ixya0lk*X5AE0sWYrUXm{XvCUh<>;rU01C)yOPu`H8Mr +zL^Sc{1uZ@TnKnlwU7f=V=Hmx_u+hktw&evUmjPI(@q&wcfG)Yp3vS0?YBh_WOu_wW +zae$xc;s{hX>>p8i9mwQo%5ZhjasDIy>dcFm#sgisnV*kGNB(CcKmYI@&@Vsv#g!wm +zI&ZJ`YGO-2w^JuJ@eAL}_}$(E(F+Igd--@9%h&LGMW}ceFV)DcTJd|gaqau6{9#j+ +zDqBbJN0}19?ScGxOg$_`uI0~1;<{z{^B3K|V(l$Pt>orlT+x}o`GdkZ{SE&w9t}8U +zJAXH21TdXB|JWb_*vk@)+{MVh9FIi-JcxhW(+NnQ`utlS#_^(w{QJtOKx%US^UHNq +zLR5GCg^)t%4fr3eM3@bBs3zaWy1M<~HsC?NPT|#G#?9L>OyzNk-O0R4z +z<a}QwIw57f~SP%LPYE3_Sl82#x`$5ODg#seb{^)szZO+q>f07Ya^0Jb)}| +zE;Ky%2v}rOq2U8N>;Z~G!*WyX>D>`r+G15ksw6Z%gdXIsuh96UCzi)c1@{?G&{I?s +z+)vK{_SIbQ=yx4xyJLb^dN#CU+gb_UGtuQy%L;B|LeuC8=n4-B&FdFn^*=)hEJJDG +zQnP|DP6$C1*Kko&A*dF9;D%O0P)oGUuC>)n4_C86?}T>WP~%zc61uqJR;@a!-tcgB +z%6%bpZ|I51aCf2Sos&4hwOHu+M+RDSL5K;<#CIzfVy?_X2NkBecqWq*whANWqutI=6_V#$0-YQyB$uIVSTIHyHQ=B7dn1gR +zfzJ<9gwefmBO(q9DJ&A;z+NGx4GKwNnUFF7{lvMILdwfxAiEuf345`|-0Xxf*{c+L +z2BU=3{^--X1PasVeg^u`LzwyU|mP_wsAIxLBAy +z3(Y%vwJ`fp43I^c!kpHpaA2lPBRM@sBRxfs&w%za73OTmRT;@OvR{jo-!it$o +zk<%*p_mi;Fc_a2|EQOV4mI0ktD6G8R1mNfkVRcs>)*CBnh) +zdFuoU`>LRXG8ru#;^?&YoDmK?#{p?23Wq%;ATjkca_2t6;Vu|^{w4}XgfT!DEEA5T +z;z{k>S2%LQ3e&FHFNC9y?*O-%B%J7FhxOZ}9S{{18{WdYVxDI?D*~x`}Y1vI+3E8-xr0wL-CcL%6sQv!02((F6J{guUNqQis-=#E(P +z4@I-=EPNi2 +zj^^@Bz0l0n_;8Bw+sOn-?JN;oUSM!EiqQETrir;C+{gRh5-GAyxhRVKL^c!qmx^8# +zM`L-acfKf2nT7?p!=m^!17l;BD3xBpWMi5}!h$Q9b4(*Qc`WLVPQ^q!QZ$4{0BQJD +zG#Dpgoo0SNu~IWDRGv4)N>4_jkWEKoU1es7Xga3~Flnq<<@7CVR&*6D+u?QBG8L`Q +zpig$r6|FDfeHqVcWF6m&)~`yjA-qVm{)I}}`MFr*_k2|3HAS1tAwXQ~i?v_W#pXqp +zSSL@9S=kNI?!S{30OupbhDmr-bnX>A5Up17wKe9A6q}ghiR%?Cy4ha@^1G(!cJ2g_ +zq3c9yugR7JZ%-*OTG-O`P<3Jp2jkLdVxQ%> +zKRxrsxDu2@We3FgvSi>MMC@NFA1%;B9Du4Co{kn1?8WQzF)!Jff{+`d19hn0#N@;Vq*QJ;0}wni;4dB0K>C2 +zvb7V%B-2Ge>_>=0opAk}UBzMdeSmDyGi`~z`Z(G6gCduZhCnv3IU3MRQ$;&_n(oZhRE9;_*j4@GUT +zd%ZYu%mVCiwpB~~Y>l%wic^=~0jTL9rq;ZMg{w$$`m7%~)2A0_Oh>a`u~wY19_JIL +zzSGD?EfZ(jp;Q@hMx1%-DZYJ)IP>~?yv(T@xoy=7dc6>5wZSkk)?1vt{Q*GGPjOD~ +zcp&SI;@q$lVEqS*^MhZ2GbwE)F8Vje^dw%)n2Hk|4THqR;jS1E!o|f!Q2+tQ#U(xi +zfVJ+eX8Ajq(U;0Pm5c&%|JI>L1x`h+!~k% +zQ0IcUbwCVGJ(!DIk7ALztGBo<8e{v9uj2M8^|0UnMcm~+24LbrarX;6t7FQLbNd15rqR@2+|Vcqy@4#EW15sUj8&Medvn(`n+o$5giFnF}_=pdG)Who8P4Q93 +zAXI>@#Yf%u0{weceA*pn=J*})X;cXIT9d?5)2TQ=UPpW;qI=Ze)5wFyi_a~iz?trf +z6Q7sjL0PF6pZ`w5gx^zqQHEl!Zguh1DqPagm*T5OSU9&ntcC^p(Mk5|+(27n0~7Ik +zwR9|}TZ=!y70CG<@rU~(RL8x&5PC*Iz?2#H{ymSpdh +z*vc-L?0G+tq^9_Sk#>@zj{@ctDJf~Q(V2Xdl&!O|eqkz^c_m+{C@slo3;VCy>~pW@8o7|9W=uvk4)a`eRgE!-wK +zdFElfZznk&9|T=aUN`ahDp530?&=92qeG@sz(lE<1hm<{`CMxKy-{3ZVZYOyyx`G+|7s&^!q$OH>ar-n#DA-Nd-Eu_}x;?b=TDP+Bjvuqco(3PmD +zGEFpc*KJZeHzxqo;Zm3=VJb3Q>R5XT4&yzPI^8}2jI5G6H$!o4`9|tIBOKJ~!Bwj7 +zX(ol&N&{+QFGVC|0I4=!idc9Q=Ztr%!NCs3N++al>I7hu4`}3-2S|~XP=K42N|7zG +zVc|YOic;-?<<*d)TW15^cwLGcY>GNEQGr0kD +z%M>YY>QdBf^`!nskK;*BmIm0Q`1vw13ISQlD#s~e&8-S>epZ|<77W6 +zp%S{JMs=lxlb8iXg-Qw6uq0MeASINdG;=c5NPBG1$U2xvgF*uVW|T{V>tK24zy)b= +z2Ryrfr%FSTF!^e+NJ_ke0rABTDG7V@G>MbR#>jzK)%hxoNx%=9_FNjf +zIst3^U8R)NUqEu+N#l#rHsH)2Xq&b(CpfAbRNTOd> +zFz&BL_F@HcKafuUe!m~j#5ifrU);d^^QE~~J~(%IP|XT)FmBi?EyPkH>3=gI5E+U0Yga(+cZhbERe2OJQ9uNz2}4 +z;jGXTjl61sv~oVWzWooSHT_dDI3!Bz{%ptPY%Q(7yad?J<gtEI>wOjpV{^jWkA-vffw&8&@K2 +z>d_F$4R2{vG1~rQGc~JCYvZ!9Qcgz{O6^RfoP1m^W0JJ9_HJy|x07~$cL!2%Oe5Q1 +zA?<1%kKe#qF74`D6BA-C?TW35omVF9&csk~_@_qh`b^55oQJ|6YQG+=iOl9s&WpO8+EMOzIR +zBAwod1$k+ZRNM%C(<>&Oty>IiUAT018lJ0e?WA+t`T;p;DP3?|jbo)Y8tI~&>V;4* +zv!iRJtF +zrbthlp>Q@vOQqu?a3(B5D&2u0VDb#%h=gV +zdb#BXMz})hRS?Eyp|Fp*J)U$2t82`H{eRa8tN5@V2`sf+9 +z@6Jo#-?##+@m%_$Ma_rOkDVw<`%IO7Ryv8T!e7$QPA^g0wbaP=wU&OFqlFAW4#qJR +zr`6K0S?D@;&zF8b&cnR&lk_JSy>`?=9kdm3i)!ki8}5AS3LSiYk1l0hy7mLF(OVtW +z&MSOSluj3d_x`k-PKPtrV7Q^v-K!5Is-;c|_Xg6~r9?eZ9%b3IESk2hGO0A +z>plU}+eRaMZK`YNe-GIHs%o$H)s0Uvte*_gc^WnXv|X?BPJ0bdd9bdjelP0Bemb8R +zd$iGxI-h$t02;gNe0!Q;zIjpS--83}nyL%1js^M-bOCK7Y<6|k1uR5k^k1M0oQ2s> +z{A69=72K6lCta(g<^WUDb!~#sIGw-g+RU&7TKk#KU;E+eeqAVC18nJ6UHjGo&=)Gw +z92=tdkkegoEy8S#TOaB=?7_1e_E6VpO$dJDVV|yRSPsU| +zy1Iy=sW?VITi4AJeI^ai^>}{=)7Npj=v(N+((HA;9wL*s>tdR90C=)h7xOX-f&EyLvz~apl(1>FpxVj +zx&hCu@hf9axj)Ss&?0yhVrePO$rA9j7 +zvu~yL{O^gW*beVp3*hIXfTWWO&SW231>Cw;lWxqn*im8d%?wzDt^Bk3O +zjjOtKXM<4Xx@)9;yQvW!UF-H3sLQ_K31sb7-BuTT+0$RTtxe)^PWG~H>r;&7N0_>! +zqifr7wz?gA@-eCYp^?4|*2p{N>v9@80(e}~+DbyJK46KP+3=0AGh{&nyx6}DQ4PZbwv*` +zV_)1%S3E_)Z|%&`oz3+Guqf0>y06ekdta|$*rMreLDi$|c +zcT>e0Qgt)k-F~TjPfyS@?|)-6zR%?FX251j~k%89>iR%7%@o +z=nf>yCew>?BHU6o$*G0?fsL}M#TVdC)^cU{<3M}n$(0A;=S&nruDcDJH0!5LYnb6|E+2SJwt0d5=Ls!kTN!1> +z(gw1v1)BEIYjRz*0Q&ZjY`4EYew!h!f`dkAWVr`r`yKA+Y&*&IA|o($0lB_4UdWUq +zvSTQgwETY~F%UR#b#Az=vO};ulf9~vD~FQ`rn)RaztKNfXx#%vX|ZE$Q39ehP%q$ +z-CyCfM6ldF0kchyaJl#ju%X>4xgnk-X +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 +zLUH^q&% +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 +OtJQuchE28VWa)q7AyuLP + +delta 26095 +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 +zWn~R4dJx=^h5+4G4eku{$J6u;?o7oG_V

l}f&I>NmJ=#j3c!-J6F07uf{Va-WE +zZur3CY$3^gFB!m_4Chwx5E>G +zWp#u1BW3_Qwg^7H$p-eh7yP$vBS1uZowR2+`0wg0Ae*1Sr(qj`ce@3jgX#eB-40*> +zK}9e}hT_0$z?&Cqhb`<(SEs^{q4@N-B~Vs?lBjeo{Mm=+t?w%WDHwt8)z(RkVLDma +z0YVy~RbEXc%xpVw@dsfZyU}Xj62TXl_J|09=vK%5L!@m<7&HZ9xMPXd8bxGl8}v0_ +zi837RXmKJ@lGlKVj2cQR;16WvTT-E@5V-0?%oeQ#DBedZH5vt^caBc>ZnIAAEEB7( +z?||&^Cf0sSfbRN_R7pmk^IsIHT7Lw7&!0@}5*xtm1 +zB5y3QyNpt2*hNya&UF*8XAMcs<`>cNZzi>UQ*fawA=jfjV5H8-4?sh_i2dkTpucVs +z`}4&>Us2+)dk=tDEU7P70rvVdY0z{Reh?=Of>1m@D%45StCEHp6417LNyAG8Ku>=q +z4PV;>k2^~m4?w3`9E^-O24u!v;(C89ut9T(>qk_QW1AA!Z_j|W$|D|!p8`1jLp*DI +z2U>G7@v@BpHls7~3dbY*=rZxj#0%@@L%ePN{(cW$I~wGJPg=H>gDKB~1l&e#v~~t* +zecBOtY#C|&Upx@_McQ0zhW>_;;2m9n+V3T8|7{CU=^kl&4rRkDjdZ$@hOz6OPS%-| +z&g*bJDs~`Urs2mnt3)Cyz6KUwn?#JS33O2biK=Q1@L>muni2=ZvlZzvv;yk?PBQ7e +zDGS)lVlBejxlX|c5*v?xi!>l{l`R2sko!U~fbJr3&(PC+9jIknJJ9=n+68MnllfsX +zXtfLauX<$A;Zof0hh)%ieSX)qb`46kZ|Eg3pE5_ps?8SyXyczs_oGNugZ +z#j0e?PdAK_8X2q215!PVjQxzKy=5aZ?iDU>SeT_`dlZs?o3j;JObXEl9a)J*^H!^{<1Ggxrg=?I+CP@B>{z#BsBp= +zXWzBcT3{h~jR)YD|{P;}5wL^A)B +z7uqGsCI75mjuEdD`DZ7}wI@zwLAy=B?h&0lERiho*$1$-Ia&0eHqajHNS4i0;Icrn +zTI1{PXgYcOQDpIf`T)5N$+G?^2Rp4ND=%dNosvOT1-Ay$ssUM*odpo|OegK|iL8k+ +zEdb`2LDunW0MEXVb>mSP4ZKFyuf$L?F^p`i!GInNAUPOWx$6kBx$$YB9;IYU#bjXn +zR*@|yngJi2NVbk&4`hN1+0_}-@@z`>EIA3J&t$T%^C#eDW@KMR8t~`@vVY|lfNOin +zp*s;kpIs)0O^sdy34TlRtuXO@l}Jue3AoE$a(Y}5u)3eg>7#`}UA~aB0`BF@G;(&q +zbD$$6axMZd%5`2DIUvj~99+Wo3_0p5+s8^7lm +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 +zhiFl&E9xZQUhqrUDF?@1I@z}ontL>g3f1 +z^1HWiQ(`p!usN!f?Kb>TrUY;+k-vzp2ju5!{$dm^XjUkH*{v8$V*Xk|GY6NI?UvJAEu4~rncap8YBUG$93|i8~E2_v8Zb+X|^tQ7PT+&pPhzdv2+vv +z-LN&V3bV8@7rXF5F@oTP0e+{mAVhcpJvmGe!#L)y7X<}JBS_6ep<>HYOz|=V^9x&m +z6gL*kFXM5ZNsvUOmFgauil@B$=kqIlI@-2M%gb3&`$jYyQ=L0Y<&g0h)uw57whEho(Oh1y?_oE +z1iJ&zu}}s=U4n|Q*%QIu9dEYDH^F`*b|T^VB*CFO1@a|Ya40x{s=l32e<40DTPiqO +zV>EepLU8oQu%E>Rr~W5^+o*!m)~>j!`GV6nHy~Lpg+}Kd0qfC6X!M{i7V<=)QJERg +z{7CJBt6jeYKf(3X3}D||2yXqZ18sLy@R)__WBWkCb0&HzYF*Cln}y~*C!+T{D737P +z2m4j55Kw}upmB|IzWYaLO>x;W1BBK!vE;I@jnKLk9=gb2EzHf?V(=BA-8YnH)ou!1 +zoW0P|R@UaaIXmsID0FY+jy=%sLa*B=fy`SZ^!hCWJwHl_4$H(czCnn-G7p{2DDAo1 +z5L2I4LSkVq@R(p>kRoGg(@YrhGYa6xI3yNrN>2&HR!KlUy9mQYY$wHR7DhNH1GPfV +z$CElgMHo5X8oO>m!pIVo0{@H^Mknk%TbuP2aCEbjtf&fo&m4FTuAAUZmdgyFn#V9tQIq2`Y&9K +z%9+9pu`jZ5IZqE2W)!*NW~6Ag9=_pAt_gEy+Gm=Oz7>~k6xYf6o-F6TH??dJU;6Zw_T0nSwClW(wE}tT`pPNqJ{)Vt}^Dor)=Y*9PGO;Sv*i~5lSL_c<6jl$p2+XCI +zu=+p_UQlp3hfUMTdfJt9|2JXnx?Vu0^bpqmZJWP7E@bE8DtEFMHmJ$C4bj?jPX~+A +zHNvL3CjsnU2%B=Tca_*!vu*BRkz^%oX^xiHZ-KDG9W8jk2rZ(yvnlYtuyc1l7Iaq# +zJ3qF=gNcuSH34Y;t(@nrgk5)!0NkD??74=P`Ej_A=ZDeMK1tYH3FT46F~UKPUMcUR +zaHwG%kT#-l$PH~Qx}Hw%JVQ9t1*6WN!NOr-EKqHta5x1`IVMIpe7p*#RP!qeM;@a- +zuazwv?_C!dYb_k_>xe}IGvRm++WPVq!tpKpfIGes^1DjFEglN_JJ3lVTrU(%F2yRs +zJfQ%Mo-A4|oWe;ga;CR%#)wY+@dV+_2?6M|n?m836s+ZK)XCo76$&5XYTIrR3g2X# +z0NykcE|^yY9(Go^@U9IC;UeMUf+bi*sv=z4>I6JU5-yiw;Lmw3T#+yaPiZ3D@OH_I1&^W72QS#cFCIJ^>GrQ;oS*(baSiNj{lTH(!df8gPb +zg*Q)ZfbPDa`Lw84os(n2r#l!==Did?TZZEC6ooGdv+&p?X_Hzwo1SbEemPYHQY%}8 +z#xF4}nndXQ0eg$G2>0;*H${r9Q!W;Bo{MZI_8cp?h~gNm9`!jOic`~2{Kbmm(+rG? +z9YpEb6-*@3bP^U=&h1BaatniKI5G{B=oX?e6a{mmV$o=tj8)2ofntRgRZvwHi4~sU +z@m)9wiG`Ax!J=7uC1A=bvC^rV*d&-BTDQaNu4yLPoI%&zFjus>g!g4StCMx9EZV$& +zhE3dsqRmfK!3|%C)ql;$s`^{e_Hr-~=lWu;mvyjda9*sPr((wSORW3uq!qyV2(i%+ +zG!=tuIS*0oa7#PW{$*k_GqkwAgG3kmi$H$W5M9n42QqYx=xT8WXR|tsuB}yI2iJ;j +zNqw>YqKWQ>NdSR4<;?A`lRmv5delk--eZX9k=P1fmoIuO#Z08PB6=RjqtW(~*gVb` +zNV_Rw^VPVIO-6}c#=q^#Dz`+h=Y=@7cwhAPKMUN=Mf6TUDH^g?^!Y3U5kp1asn3C2 +zt||K7#E?Gsgy=W8Ily3loutAvv9%le<==S +zf>DCszp1zJV +zksHNsS`mtaGh!r$CDyj1R>8-PrVrB^`#6}E-52{V#r^4ZK#aSOdgsSOF}`FZaL)!} +z{|X221TrxJl`=dXBPP`?16tTkOlpe)(Wa9)@NbK-QYCSaCE9`2P;qcgdz`yX)5#qE +zEoUk#XKs>CZkZ``P1|N{&vpZoN3fY#|W)5#mrMT)&3S +z;;?&OKsN3aheILI)Z3ci>(K8>8*yZ#aA2EMoxFCoIOakW&~-P&{4J4UBnsF@mMcgEzVeb42$p|bh2^B#F=$bv5Yt)&MbI} +zZ+~B$d3`OgjX64bZJ%%duAdz}w^iHb=V5B}Ufi^02D;f(I$4b_V$Rpczz61wn*;IyYF`jHCq$!H +zNfb99!CG)vPjO364E4Wjh+C)D19JDPxYKnkz@&f0T`$pQ$KMh2tWN`U*e2%H!nC^5 +zNpaste17&R@j#_)90WFs2mWyZ`qU^M9%ltwk5-O7d?LhSgBJpY#p1D{I9_~lhInk8 +zCmytR;<2ZpIPN=BJZ?J#$n_ZU_>Znw?=BEeJgy61oh0UOnu#e}jCj&(G8WX|iv;p7^o^ +z)m}Y+@%0K^%FtKh>qlLH*LbQG`}>-vwi7?ScgLZIGVx0melGg^;t`*Lx)zEhcdh_y +z=q`S*It%OLt;AAr26BG8SnB!+rF3uc$Lbs`;3VNhEoMh-ocJs70k9EO#a~f)d{;dX +ze+@>j)ICM~y&L1=kwo#29lEtXyTw1=BXHG2#6Lm#=;zmLmq=6e-!mpl#2qhSL34>< +zJC)?@k=Sy)&X%$yHOJqN6(vQD0@ir4q@>Ql+4nd}**ph}7G_e#1L$7|sFE2(09!pu +zvXD=p`-+z=U2uC(OOn+)Yk;+hQkA#39!JhgRX?2r68WE0&9^K1z1~Cq{(zZLf==G} +zf@HhsHCEUQrMeBDp)HM*>P|#0@-<7c?~DijM5flewTJ2Wd#S;%d|=sQkWYc+j+Gn% +z3-~ejB}aEOfHUEelY1U6$Oy^l*eDu+hawz<@zFQ%ESb}P-c4K_lCNUh99 +zV!hu%YUOtubzx=6e*yk}O{f&G1MOh;TB&tKtSX(glv)SpqAswKg3iU`I&6}H*UCVv +zU6ewXo~TpPfDFzp!&9cD|Ma` +z4h`YOeyQ_ZluFx1>7;p&rSO`mKr7ly5lI<9s!ot1797E`;2YX|yk7HHQa5cPu#|^7 +zx#c`5vI5F=i)T_~E9_5rtdpWNdtmzmq@F=JKsR-fdhS07@Y6}^vn&haM4}WEIvnF{ +zwiNSj1`4DXQe4F%pj#VAanlw9-FIHv7W-dLFQf#YS-{eINC_R2aaie{ +zyZ!@jTBNNA^f0BwOGy>bak+#_NhdLx>NQMCx`suuCkv#cXDHyD%yiP;m36Yt?$UtJ +z0Du`~(!knS7&H%qZyd&zjW75c(?ikO*4oaizqkuSICXHE>iuu=VX$%?+mpsc^`<6835gO3`d}*v4 +zfK{Jc(%2;YpqYizxRps*<)0uWr~Cx6{ev{2upVBBBu$*O4wL6nY2uOtKzGiPCe=XC +z;c;J@^coGc^*(9xN?h3WLnRXgdZRX;Bbl0FDA3MIQ#%!7Z8=FwyF3jy&Kif|d!y&~ +zlV)zlL~mbpDLtkD8-Eq0^b07;e!xd=(787A_u(Z%@8@l+{lC~P{*=@O$;qHs)S(Y*)@z2`UD(7oW${M&5 +zn;##gCAMvV4jCpb!EOrc_Dx#yAsg!?vQBRET3S9I9pt`;(yIO`K!0UOYkqIVY12o_ +z-W>~&VXl*0*rk*9O_s9X+5nr(r42nA0V(p7HWcEi@LY7K9V`^ZQ%%z>NHGri$NxL#JE*z_^le-wD+$njeGLocy{c*sk>jdeb +zArg4?sahI?)XCh7dQYK*VU}RwNZ@X~6EeN_s+b +z;J9>Z+;J@Kw$Y?h>#+i_ERYJDpg(&5Lpoch5ZL-;>1-OBQRF%4+?IYo{3-vHnd@0?-uZqBOZ|VN-T=X)FrN?H` +zSYZj5p8Rc+Z`ve1ZBYkj2&PHT#z)|QR(t8$Hgx|f+ok7m3D~DNBfW5~h2CU@^iskE +zvh0`iau%*y*WS{rO{Ez2@}<|UF<1+=q&M04_Z!|yZ_ne^Z*Z1fbn=1adG=V7v0B>m1sPu;7r0osbdjL#4KOAPe>yET`kW7R=FBv~za(bHU(LgkMU#Jl4># +zo;6nCH|nJ6!wrqjI!_YoR0Q#;U +z67zz$n~^riTS!}cUPRg<-3;yH>Z3&$8NzCy+gLi=5H>Fj1MX^_RBU1Bu)7!wnA3GK +z-dWUs<8=s$h8`bpqd=)`=y?;}$_&ZS`yq17d_#1L4ggO!8=_xD0X=4K=;Mk3t<8Qz +z%wQ|rHg7{raueWDUk&{xV+kPM(hz$$7+6MCL;Ooz#@NP&gwugQZbusup4$MVI~fMp +zeF5e%*)VKyF?P&P8;0$k1D2#-reVbB1mKMv45Q#ResDc)TUa+b;hZLPa4>~#GfcIz +z0$MWJFtu+NoL-O(Qy)#mc)!k&Vvkle_=X|%59Vjj*Bhpv$7Ni+LMOKwYncAH1i0MQ +zFe3_I_s=!M3~dOo3mXhGM`&1m>t~p?uLM~2%{n>nV3_qEE?4E{I_ZELhPlurQHgSt#@e!=O2IL!-O&g46pKVz6!UabauNu~zZH>Cs +zRVR%t)ZTY+cIrLfkaNKu$m-38&5iM8ug)4aH;V&$c&uUbQ;fUEry`$W{;^8)>FC^c +z5;1JseE`$tQl0dRw@x1Z$gsVUBY@i_!}bf|=#GO7JMmjL^uuq%u01(8AMnz!>q}i= +zgFYE{+l&NOVy5MFbf6ywY4K^OH8h+~dWt#pD#PiAn2RrI +zVRXD{;b7!axl%JhHKbZVhI}!H#Dpc +zRkJYM>4z&*(!y{j6R)99oZ(qAI*6>9hF3`fPQDZw-r^iL%=9pP%)wCcahc)2MyODl +zw>5m~8;`RNQw^V2T4If6v*9bu0y@2#;cJ{1u&81~>D?JP*0#d%<8u+v7hw2_g;h(M +zWNs*9=-l^gH!+?NVa;O +z0le>J*=Fz-oaauHZ6-d&)N_Metuvm0Irrr17F{8h585uSKqIlQT6+r>f2SS^Ppl;Rf}c4=Wzi@uyK-3_SPgvF53lUxU<~d^)+Tt +zgXHc>m`8dh%iSNNF#Nns?*0=)=dR&$Pq+Hm@$M$~TJl#2zOEdoYV`#u8g@j@pHejyKXyNF{V*S+LHF<(*HnCqnd +zt>r-*P6O<0E)QOULH^lLdC2lk03V;qBmZt-)1&ezZfZ_8@sjg*E^i(sa_g +z26>0|0i4WzDDO%_e`eM~-Zi=lkO~LoT_?~Ych{Hqw8II}@H}}>SPrIgRph*rcG$I= +zF7LOn!qjl?0IjH-1LeE4-`(sivc}2BI95uRuGh({Q>}5NgXz~c`2;>q)>YFDh9gcmVC<-_u+Xb +zowQr2Hn_Wk%j#kBogJmP%b(@DOD*xhl*sq8jsjdAD&PB#De+A~zW)rxs@X01k;fNc +zLASJm?he%Tp!UAIooVWK`L#td=1HIBH^rr>w4>y=^>^TW@oo9-r%0>|zmwmUS_6kg +z@_S()kb*e*ePa~ZAI{6~+ZE#E$zJ&bFT#4kH~Hge{Qb$+@~8f3IB$AZF6oEwTNE#U +zuY?gayF~ucCmZwU>hh0lJl^w0$UiTP#>z;Yf92o5P^rt&I$2pI`A_O??7<)xUISj$ +zN&fQ^!`45W70AHw*8PV$jOsR&}HzO`nXj5N?X{9u+{l +zk&5baSQW%>lCMvtsRi1lOjPViSKGXi~0XyVw;yNN>gN^iu#&Q76gluhcx7i6J3aOY7lW +zZNVd@?%z@J<$KF{!&fK!dRM#9!_G7?Txpp20qCDvO2cd{(Vv;6G@khPdjK01=R;3` +zc^^<*$5#R9@{i)WT?1HMthnv}0PGy{BbH)({S?ogdw{hDrTLKqKo`d;UKMabs$WuC +z_G=CFw7242AFb;97sY!{Yjlv46`yP@3E70{)CTmlQE~*uuREGroypqVo_403(MsTH +z4B;1cD1ledKpkC`z}No)vvXBKj^bu!yi-ChlmKz7rnEbbA^q|;rTtZ$vOLmM33oY- +z8gqxz#S&%Gm{&?v5IUwswUnr=vDlxAQF=Tb3G8`irB^hH=_;zy2dfU;B}3_pMM=0p +zb*kiDxc&qCnytC_a_E=SNr^paiAHrviEGY*Jh`Bg&P~$Ey*nszmoEUkPtZx8hU=vN +z)Y8e8eA3CQtyba>pn{oFs`Rg*0g0=q^q+@SC#y{Da4!c_y(3D}92Buz6LoU)K1fXB +zld9=tOYM}TowyV3&y=LQ`24WiI@y|HCF$og{4Upgoy>uhGgs8fEn<{`XP*Q6WK;(G +z>;dqtp$tyVLZ#DG84`xY{$)p%Aus1aLuR&G8M*`4ZQE{T_yUx8YicT^ttMdC>v=if +z+bd%l55+cWftK0Z!Ib(^89OE$NP~LH*adi0BK|1jERmBADdVshLz@0kk{$7ku6?VM +z+ZHIv-V-sBy;hPFk@b!%;~#y(n7vw=u!mvI#7>zQhmTtaD-*HjLf2PRCRyM&wzBPX +za=Q{`(nvf)&oh)st3P9Ltcs-hLJ%E<~DzgCv@10pn +z`UQ+Xj}IyHMl1!Wa9Ww)w=0kqpOpCn-O)m2WkEkYM`eY|!oSUg@jDgm&*z=&lKUf_n6|QWl3U$5M@`lN~>) +zle>2=XNaOK`9d+}U8gMlehtU_N|oixJfO?ADl6i#sCsshvML|~=rku~)eT(sik*}- +zR(R45dTZHzeA`aWS2oX$Mu+OEY+i?a;IC{ujnby>F=gA28Ni-8DcfDP1M@$pY@d$0 +z(|wJy(>WgC=5S@_C@d-m{8DzFF9PoVpVqjq1MM5AMfCM>$~>$bN*{%z#q-MPRdg=vf|TQ*bFpxES2=MPWmMh} +zi@%IJg +zJpNEQTgew_oRxC+`V!E>V{A;T+bWmF;EiWa(#b0iS1#rKEu!vHF1=re0(_lvxzm1> +zZl%iALRD@*#$MEx +z7RsIe=(!s1SMFZLWX8_r5m5SaIowa=+jUz@yK~gPAylF{Fj^;1ce@ +zu_)!ipVz>O+b9oZ{J+MxwZVqr6P34m@tM@~Ub!(63XKw?Q%{oB#c#mejB9fF2F?r)a`Goy@bS +zoQsB+^Y->~etf5sSJ_m~c5&tGZcsjWp2Tp}RVfY_jb9$>rF=8%2UHoVd<%%i&V!Zm +zZPZF!_f*X`7XRBsuu|478|&u%wZPaQm-*{dHXsM{(Q7I@g*#!Xs$9erXZ}T%`}<@0 +zyt8W9gp#3qZB?m>9jG?e+TmC`mzv?K@x2u`0nF8k`!JR+@>I>DGJvh})yZo}s@c#e +zV8iaH=2Ohk-|y2Z#5wny;jh-%j$MyQ*Hqi*@mTtKr`AqF8?*~m>(nj8ZQyF1P56BL +zT(wTwYpj`stM#VO12!a2ZE&Ow&Pfrq!3~t~1OBLvn=s@~J*hSv;06QBEP%Lqr{ +z<~vj$BL>cp_o`0?6gQns*=7pV9--l080KHTFP8R@!(`vvd6hNzQtF0ed +zqpoVIw#iGtuloDGSA!PYU=7(*4Z4ix^U_%j@p1zaeoPICwgeV^Sq(XZ%jeTW4b{h| +zOVqZXV}PVvs_jAzs93+N?Z08H%-;pzw^uCqt!V5f^Mt*8(hU)FhB&V#B)tUae@0D=Ln#pYT^+Ol?Y66pI;12EV9Y0VsQFDG +zO;)QTY(s%2r>J8B(4mgItd2Q}Hyp509bZ9f+Fvy-nWm2aI~ck#MJI$E#+L?a%A*2+>vlTHaor>2yS!alaBrh1LV|IzYaITJVP +zWP5+9Gt)4_{i&(Ww#Oy7k)Y0LUWN+dtD5eP$vn9{PW?NdL@sYt)1z-={Xa-e-)fEh +zlsanq`CK5@P1U(gF()}(OP$wIz@<8<{xfnI#s)u~baJt}unyk(!4c}h4D56Fa4Ki) +z5S{FGf6X?bTlknlb!BK2_NNlnl|44&MD%QR-7lPIubZTs4+h?~f|{LX +z2CRjjx?yAy&@ffq*nA51rPin$593bs8m?|Sos1y|zwMUb+@t47bvOPe3KmjZ-JOp+ +z`}3o^yA*dkD@DycidS{`g_^es&#UiFbw6niyoHat|6VXaSdx0+3!di+$JK*zc=~^P +zs|O45@^(#74=u;-NZhW4CEA523{p?TCjhBkSIw{72LCnBOf^4|07+8R{BhVNatcvT +zhWtQB?4+LjJ_}$@zIwVc2JjWRYGLFTpaTr**)0zMvd5_BGEjFJH*1Fzqw6H4s&^XM +z0cmZm-YvX>Z&R$^>*ov1-CBLvbvNo?ES4qNnSv$t^|LgSvI +zes5N*UwU)}HrrqQnzIJ@AVvMw4sCAIF!g)ne(Xt=s^2fG_$4Isj_QwCT*Z_h+WRC2 +zTH%dmJ;2{2jmJhpWW3Sv!wl1{8AfH5C60gGG%EQR<|>{vsyO~Y&$l)j{bm5f%`+MU +z52B3}WAB9_>S-sV4LU8F@~^Slke)ys`WvhF!>wr0*J#@lx2ow>V=YHd +z>|l2=)~$%ns{1UXJ$FP+iJZ~|$ju+ddP8MQYg!xYuNs0yL8jRb^l;fQ(Acc%0boZQ +zj4l{>pjC*`%@dQmqpgkZCzfFGu9neb;4@$w%5?IYpR}}r&Zeb%j4gumfi3ezVs5Y< +zj4fV`#O&;q(R*hu3hpOHAN;QtEUCHCXVGMgE@eia=eVM2Ta3P!u3{WdpglG1nO8iuW@&-Pmad)|+z| +z8^gQJ!*-QHC$VT+&PB;O*`{0Nd^B2HG03?`{l54RO>p6}a^^MD$*p%A!(V1%W5&bS +zwJ9bfe%Fm%C+A_)&tQx=77j$ZVT`Ptfl367kuj(+jP}MJ0l14UamHTn(S#!pX!Qnr +zDDfYSv6b+gMX%H12Roa3KQ<7vDA6Y +zIU2tToWYFm6qF{uQc&Gx9i8Gf2c7bS>Ni1&4hf=3aw{aMPtYV!XptW-)8y9Gq#1FF +zQ$CR68)2&(XF;L=0lUDC)^hu&~Ji>@n +zxRPe)FCprlg*3+lvX%aZ&PT14s_kSte=}Ua2Vc_p*B(K)7tsYtc#Q$=Xx_I=iKVIEE7sY)Guj^O3I0z-;L7{ZXq;{~+o#>MDW!MU3 +z-YaT)c>x?o7+v-;ok$m^(R?Q@Qm1!leqcB3pE#Z7Z%;*@%bDhbtXDahskz<{Pr5|S +z5B+hzoUTxz3aHsU;7#Bbx+422kspkuD}L}NNi$*8b!e6wwGz@xlE!|z8}jawnXg16h+H!pFw_W7`+$_ +zXY{oj{e7e!mTxxw-Hh(_b)bLj8wI9k5xv%85$*;w)ZgU-y_UWXWzt9J^;;$sd%mYP +z9YJ(|<4AADLE5ghqUCKb5ozG}3aXpkrT4J22pO`0K6(b#_OOsXPAn$P)T;LM@q)WV +zy5535>4Y%&(GycdlB?1EG5xd8BdF9=`sc;&$ch}H&s}PXw6YnklAuE_X3?r)^(3i* +zRvpVGa>L*0tDWr$nb3z;`*b6+a{;ZM1XG{6p1wYY2&L_E`o<1YUUh@k^xXnR>oBcB +zHMyKNjJ_R-c8jOew+oyx7}IF&j$cuu^~Ek)*Rm<>K_RURfZYC>N9z{oV7sr-kB-pU +z4{GQ?Ww6y9JWXAa?In*+rlHBM*43`8i9ZOU=`R`Yg=RB0nR1fdjk{Brjrj#);t4x@V{R(yIc+eYZ9}oSNyr<%zp0}h|Y6ne-x9W&mQLB524SP +z%QWjS8i$Xub}cRwIe#5%Iv$ +z8fwkF8`)qxrE$!AB*b9+d*+>m#Qdr8tY>F6k^3gGUXK3o=?x01?FO(u3*5mQuVOx$ +zOQu~ZUY1Q7u)g`xM0V_8s!GWZI$FsB8a73$vkwahSxd4SIVWWczJ4 +zI3G5#-v}1i6<+8)i3M5YA&x!Bf*M2IC%+B>%1!M>X3jC}WG1yvb+ +zS?J1YI4cn>tQ~^1JZlq6vo|_Ku`yjB4qp#rU!!AG^H#8k%3dfy8odK<_z+v3|fki7mb7!WFhf)dL#kA{s +z5qZIJ76Y10Zkoqpv1Uy^|B%HFxe5Y8TgqZHV2av(V6pG)iR849=^9@l^5G{;=Z4uD +z#+a^WZ!EcSV!8kbQt4p@<=P6SJGqXiUcO+uo6caA53$LE-OOfHS=< +zCf1;5EMcKFeAC7(sS_T+p-@5T%?p-%qB$thRF-lcjL3i@W+2;PF6>zbsf8~S!ZJ`k +zu8u8WnUxrq&Q@%OO$Qk5er!hQZX(I6*sK%b7eI~t&9ZC|cmMVc%L;(zS?b5KPGbmO +z>)4#rZ;%#qW7*Bog&`|h_AFTYj(Zi98YC$wf4IZu4)P?@H{UBL2m6~oPPO;?{yqCH +z2FZ5vj<99k1{rDhrt%e{4g@f+g(aBBUm79bl(VW7;OqWM_J|f>i8hzmYX4fJ-dKpm<$zzxNj$;M+aCTYc1X?hcU7kG$+|6EgRW2gr +zX=iq=otm^!joQbqZCi_qu4(Mr-pxeqvV~p8W)SM}V@x&ET#Ye%*!|fMic51@#rS3* +zElb%WV=N(tOYF&Y`0kc#S>>Jq2nD0qvn>#gotxOpsilPERkP|WGm-8_vT6|Zsuw5N +z>*mEo?cbKY{)D({ekyxouO?Dx413=Nw~y(?YWu>7oBR}1oh@Q@;a7>1G$xFFIQ5XI +zf(kfk2C3xxKjWi=oRkF-_1GUxC(~Ue-#AlMy1i85VqzJt#vK`)XSOHO8qf$Eu6cX{zPHRQtojaJsmZc +zcWr}E!BD_G^$#I1znI!ix9@#nHTQ1O1C?3++%Y$2`am&7WGzgKcU-QhV{CT*fk?Zak!YI+XM@9x@u*XWvI2l9UQZ +zdo>T4vx2B%g81;-uzc5~Z +z%VTS164mNM3QFEb_@s>Gke{}EQmzXjF7tWZ5h$68y*&PG1!m`Z1*O;$KBaae3IvOI +zLhJR2cV_UU(=Uj8_82!Ha!^k^%hRu**Z1G%(+|U_1f=pz7szY-IebQzHzD6zaiiy1 +z4(v8>jGDST7~bH}R}@qrm%y@~rnKh@8FOWHH0tc&|HOG^5_P +zs^p7Xp@05;7S^L4i{9-EKx4MDw#bgGzdIFw3MnlJf=BXD+Ydh!j`9Z^6M%r|8@q5fzi-`qPL +zNu%sNe5>6?q7KjGTknOUP%)J6`pp9|wjk@?ud_j-?m +zSG}I^TmF{4S;|KT`J^*{wK!%-af4 +zb_hQ<$cso{p617s&mhBlcMm`Q+Y>@U=kQVn!#BB>pUlC2owj}X={kf`cQW}o8_bE6 +zJN(?LA;>Yjcg8rjui}rF +zVWk;58d@nB&ji{sVCuYvAwyz(eg`YsxXYS}%zZ#2GKUBVDNGLC2S!GaWX% +zTUx3F&)AIR$=gjeMg%g}!e)Oh>{E?`^8F+Q)nQE7){P_bhrXia=p#f`;wM_xSCl0F +zAX;7gmXOLw(b{1Ek+zi!JM1^B8pafq^&^Dc^x;HRS0n7+wFhMVc+xblZCIn4Y<6nqFQzOxTTp5vC*@^yBN8pVni2h{*iRyw{^sl)LeY{f)7+FS0s+Sn}5qk4+ln5w# +zL8K)n5pXyZ;d|w0Jdi2|wLuu4HdG86Y+Opnr0ZfZ+eJvX8wyHS8!0Gn?5Uty<1PmC +zUWBy1F9OfQ3w>NHLXx1)Z2OClG+UIJB#O{roR3~E!oD*T^~h8)BH=04g`5-N?J%@k +zyu`@bJ@EFHh|xP=qaOZ(7`G2%_B2mSF#dsh;kZCCp*|-3x|h&iK_X7GN=)jCvA$m+ +zCT*)Fs$CI6_w_>@Zxy=8Lqy%YgP3yDANJc%L8;+Ip+KFTqhMf$Fe +zM2<)j8UHLJr0a48Rf`G~lupKo%enz-`KMxq*#BW`Z6fQ)Pqx8^J(sveP|JQ{st$QQS5-(Z!Vlc_4(-Wc_x +zxVssecIPZ{cSkNEbH5VzPT!11=XGw;=yQKzaUCMNsbW}!8@RE +zjpB*31#-qm#goC0uqe<*R9fkXyfarkn~6!~Y9*e(!VuV +zNKsXmik(W`#LGfN`hBv*%TK;UK6lx)EyvwqUxcVT)fP@sPw}z;uS6C2xA@fW6OqfN +z>4;iCe@v?OLDSotelV6>Eq0v<&tAb-3{ris!_v0eM+KsVybe^TzX4d*sA5QM6Djp)i>h-_nXpx_9d0&(l3_bBYa{K^r@N@U555c$1a|ZzCKaD +zqx?cc0z(G%)}*8+Bx|EJiIFKOhJ@tk6isBZR^yZAYtTl<#i#ptr1@&J`iaTuiK*J? +zc0L|azCIrHt@)b$Dx@~%#GhsFl6z02xgK(pf&S(fQ)TCp7+ZO31KH9)*xbh;JDIKQ +z5X12k^Vkg8)!fBT&T7 + + +- +- ++ ++ + Artwork name + + +@@ -310,183 +310,183 @@ p, li { white-space: pre-wrap; } + + + +- +- ++ ++ + Select / deselect this artwork class for removal + + + +- +- ++ ++ + Enter a name for this artwork class (required) + + + +- +- ++ ++ + Choose... + + + +- +- ++ ++ + Choose an icon file to be used for this artwork class (optional) + + + +- +- ++ ++ + System + + + +- +- ++ ++ + Software + + + +- +- ++ ++ + Select system or software as <i>target</i> for this artwork class + + + +- +- ++ ++ + On + + + +- +- ++ ++ + Off + + + +- +- ++ ++ + Choose if images of this artwork class are scaled or not + + + +- +- ++ ++ + Folder + + + +- +- +- +- ++ ++ ++ ++ + Archive + + + +- +- ++ ++ + Choose if images are loaded from a folder or an archive for this artwork class + + + +- +- ++ ++ + ZIP + + + +- +- ++ ++ + 7z + + + +- +- ++ ++ + Select archive format + + + +- +- ++ ++ + Supported archives + + + +- +- ++ ++ + ZIP archives + + + +- +- ++ ++ + 7z archives + + + +- +- ++ ++ + Image archive + + + +- +- ++ ++ + Image archive for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple archives + + + +- +- ++ ++ + Browse image archive + + + +- +- +- ++ ++ ++ + All files (*) + All files (*) + + +- +- ++ ++ + Image folder + + + +- +- ++ ++ + Image folder for this artwork class (required) + + + +- +- ++ ++ + use semicolon (;) to separate multiple folders + + + +- +- ++ ++ + Browse image folder + + + +- ++ + Choose icon file + + + +- ++ + PNG files (*.png) + + +@@ -1218,7 +1218,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Choose pattern color + + +@@ -1341,17 +1341,17 @@ p, li { white-space: pre-wrap; } + &Ok + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ + All files (*) + All files (*) + +@@ -3444,42 +3444,42 @@ p, li { white-space: pre-wrap; } + + + +- ++ + Name + + + +- ++ + Domain + + + +- ++ + Path + + + +- ++ + Value + + + +- ++ + Expiry date + + + +- ++ + Secure? + + + +- ++ + HTTP only? + + + +- ++ + WARNING: failed to remove cookie from database: query = '%1', error = '%2' + + +@@ -4375,7 +4375,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + %1. variant of + %1. variant of + +@@ -4459,7 +4459,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + &Open archive + + +@@ -4503,7 +4503,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + No devices available + + +@@ -4562,7 +4562,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + N/A + N/A + +@@ -4572,27 +4572,27 @@ p, li { white-space: pre-wrap; } + Choose default device directory for '%1' + + +- ++ + &Close archive + + + +- ++ + Choose a unique configuration name + + + +- ++ + Unique configuration name: + + + +- ++ + Name conflict + + + +- ++ + A configuration named '%1' already exists. + + Do you want to choose a different name? +@@ -5277,25 +5277,25 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + +@@ -5441,42 +5441,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + FtpReply + +- ++ + FTP directory listing for %1 + + + +- ++ + Name + + + +- ++ + Type + + + +- ++ + Size + + + +- ++ + Parent directory + + + +- ++ + File + + + +- ++ + Folder + + + +- ++ + Unknown + + +@@ -5973,212 +5973,212 @@ Use local value for option '%1', overwrite with global value or don&ap + + HtmlEditor + +- +- ++ ++ + HTML + + + +- ++ + Common graphics formats (*.png *.jpg *.jpeg *.gif);; + + + +- ++ + Portable Network Graphics (PNG) (*.png);; + + + +- ++ + Joint Photographic Experts Group (JPEG) (*.jpg *.jpeg);; + + + +- ++ + Graphics Interchange Format (GIF) (*.gif);; + + + +- +- +- +- ++ ++ ++ ++ + All files (*) + All files (*) + + +- ++ + WYSIWYG + + + +- ++ + &Load... + + + +- ++ + Load notes from file + + + ++ + +- + Load notes from an HTML file + + + ++ + + +- + Save current notes + + + ++ + +- + Page load progress + + + +- ++ + Hide menu + + + +- ++ + Read only + + + +- ++ + Show HTML + + + +- +- ++ ++ + HTML files (*.html *.htm) + + + +- ++ + Select file to load + + + +- ++ + Select file to open + + + +- ++ + Save a copy + + + +- ++ + Open image... + + + +- ++ + Insert image from URL + + + +- +- ++ ++ + Enter URL: + + + +- ++ + Create link + + + +- ++ + Font + + + +- ++ + Select font: + + + +- ++ + XS + + + +- ++ + S + + + +- +- ++ ++ + M + + + +- ++ + L + + + +- ++ + XL + + + +- ++ + XXL + + + +- ++ + Font size + + + +- ++ + Font size: + + + +- ++ + Zoom: %1% + + + +- ++ + Select color + + + +- ++ + Choose image file + + + +- +- +- ++ ++ ++ + No data available + + + +- +- ++ ++ + Manual selection + + + +- +- ++ ++ + Multiple PDF manuals exist. Select the ones you want to open: + + +@@ -7094,55 +7094,55 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Preview + + + +- ++ + Flyer + + + +- ++ + Cabinet + + + +- ++ + Controller + + + +- ++ + Marquee + + + +- ++ + Title + + + +- ++ + PCB + + + +- ++ + Software snap + + + +- +- ++ ++ + deactivated + + + +- ++ ++ + +- + activated + + +@@ -7570,42 +7570,42 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickCalibrationWidget + +- ++ + Axis %1: + Axis %1: + + +- ++ + Current value of axis %1 + Current value of axis %1 + + +- ++ + DZ: + DZ: + + +- ++ + Deadzone of axis %1 + Deadzone of axis %1 + + +- ++ + S: + S: + + +- ++ + Sensitivity of axis %1 + Sensitivity of axis %1 + + +- ++ + Reset calibration of axis %1 + Reset calibration of axis %1 + + +- ++ + Enable/disable axis %1 + Enable/disable axis %1 + +@@ -7659,67 +7659,67 @@ Use local value for option '%1', overwrite with global value or don&ap + + JoystickTestWidget + +- ++ + A%1: %v + A%1: %v + + +- ++ + Current value of axis %1 + Current value of axis %1 + + +- ++ + B%1 + B%1 + + +- ++ + Current state of button %1 + Current state of button %1 + + +- ++ + H%1: 0 + H%1: 0 + + +- ++ + Current value of hat %1 + Current value of hat %1 + + +- ++ + T%1 DX: 0 + T%1 DX: 0 + + +- ++ + Current X-delta of trackball %1 + Current X-delta of trackball %1 + + +- ++ + T%1 DY: 0 + T%1 DY: 0 + + +- ++ + Current Y-delta of trackball %1 + Current Y-delta of trackball %1 + + +- ++ + H%1: %2 + H%1: %2 + + +- ++ + T%1 DX: %2 + T%1 DX: %2 + + +- ++ + T%1 DY: %2 + T%1 DY: %2 + +@@ -7779,186 +7779,186 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ ++ + + +- +- +- +- ++ ++ + unknown + + + +- +- +- ++ ++ ++ + good + + + +- +- ++ ++ + bad + + + +- +- +- ++ ++ ++ + preliminary + + + +- +- ++ ++ + supported + + + +- +- ++ ++ + unsupported + + + +- +- +- ++ ++ ++ + imperfect + + + +- ++ + yes + + + +- ++ + no + + + +- ++ + baddump + + + +- ++ + nodump + + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + + + +- ++ + On + + + +- ++ + Off + + + +- ++ + audio + + + +- ++ + Unused + + + +- ++ + original + + + +- ++ + compatible + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: can't open icon file, please check access permissions for %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + Waiting for data... + Waiting for data... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + %n machine +@@ -7966,103 +7966,103 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + XML data - %p% + + + +- ++ + verifying ROM status for '%1' + verifying ROM status for '%1' + + +- ++ + Updating + + + +- ++ + Name + + + +- ++ + Source file + + + +- ++ + Clone of + + + +- ++ + ROM of + + + +- ++ + Sample of + + + +- ++ + Is device? + + + +- ++ + Year + + + +- ++ + Manufacturer + + + +- +- ++ ++ + ROM + + + +- +- +- +- ++ ++ ++ ++ + N/A + N/A + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + %n supported set(s) + + %n supported set +@@ -8070,501 +8070,501 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + BIOS + + + +- ++ + Size + + + +- ++ + CRC + + + +- +- ++ ++ + Merge + + + +- +- ++ ++ + Region + + + +- ++ + Offset + + + +- +- +- +- ++ ++ ++ ++ + Status + + + +- ++ + Device reference + + + +- ++ + Chip + + + +- +- ++ ++ + Type + + + +- ++ + Clock + + + +- ++ + Width + + + +- ++ + Height + + + +- ++ + Refresh + + + +- +- ++ ++ + Sound + + + +- ++ + Channels + + + +- ++ + Input + + + +- ++ + Service + + + +- ++ + Tilt + + + +- ++ + Players + + + +- +- ++ ++ + Buttons + + + +- ++ + Coins + + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + + + +- ++ + year + + + +- ++ + manufacturer + + + +- ++ + machine name + + + +- ++ + ROM types + + + +- ++ + players + + + +- ++ + driver status + + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + + + +- ++ + version + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + + + +- ++ + libarchive error + + + ++ + +- + WARNING: the selected emulator executable cannot be identified as MAME + + + ++ + + + + +- +- +- ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + loading XML data and recreating cache + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + + + +- ++ + Mask + + + +- ++ + Setting + + + +- ++ + Value + + + +- ++ + Driver + + + +- ++ + Emulation + + + +- ++ + Color + + + +- ++ + Graphic + + + +- ++ + Cocktail + + + +- ++ + Protection + + + +- ++ + Save state + + + +- ++ + Palette size + + + +- ++ + BIOS set + + + +- ++ + Description + + + +- ++ + Sample + + + +- ++ + Disk + + + +- ++ + MD5 + + + +- ++ + Index + + + +- ++ + Adjuster + + + +- ++ + Software list + + + +- ++ + Category + + + +- ++ + Item + + + +- ++ + Interface + + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + + + +- ++ + loading ROM state from cache + + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + done (loading ROM state from cache, elapsed time = %1) + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + ++ + +- + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + and %n device(s) loaded + + and %n device loaded +@@ -8572,7 +8572,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + , %n BIOS set(s) + + , %n BIOS set +@@ -8580,275 +8580,275 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + + + +- ++ + determining emulator version and supported sets + + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + done (determining emulator version and supported sets, elapsed time = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + + + +- ++ + ROM, CHD + + + +- ++ + CHD + + + +- ++ + ? + + + +- +- ++ ++ + ascending + + + +- +- ++ ++ + descending + + + +- ++ + ROM state filter already active + + + +- ++ + please wait for ROM verification to finish and try again + + + +- ++ + please wait for reload to finish and try again + + + +- ++ + applying ROM state filter + + + +- ++ + State filter - %p% + + + +- ++ + done (applying ROM state filter, elapsed time = %1) + done (applying ROM state filter, elapsed time = %1) + + +- ++ + saving favorites + + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: can't open favorites file for writing, path = %1 + + +- ++ + saving play history + + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: can't open play history file for writing, path = %1 + + +- ++ + L: + L: + + +- ++ + C: + C: + + +- ++ + M: + M: + + +- ++ + I: + I: + + +- ++ + N: + N: + + +- ++ + U: + U: + + +- ++ + S: + S: + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERROR: can't open ROM state cache for writing, path = %1 + + +- +- +- ++ ++ ++ + ROM check - %p% + + + +- ++ + T: + T: + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + done (verifying ROM status for '%1', elapsed time = %2) + + +- +- ++ ++ + ROM state + + + +- +- ++ ++ + ROM status for '%1' is '%2' + ROM status for '%1' is '%2' + + +- ++ + pre-caching icons from ZIP archive + + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + done (pre-caching icons from ZIP archive, elapsed time = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + pre-caching icons from directory + + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + done (pre-caching icons from directory, elapsed time = %1) + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- ++ + loading catver.ini + + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + + + +- ++ + done (loading catver.ini, elapsed time = %1) + + + +- ++ + %1 category / %2 version records loaded + + + +- ++ + Category view - %p% + + + +- ++ + %n category record(s) loaded + + %n category record loaded +@@ -8856,12 +8856,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + + + +- ++ + %n cached ROM state(s) loaded + + %n cached ROM state loaded +@@ -8869,7 +8869,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + %n icon(s) loaded + + %n icon loaded +@@ -8877,297 +8877,297 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Icon cache - %p% + Icon cache - %p% + + +- ++ + unused + + + +- ++ + cpu + + + +- ++ + vector + + + +- ++ + lcd + + + +- ++ + Is BIOS? + Is BIOS? + + +- ++ + Runnable + + + +- ++ + Display + + + +- ++ + Rotate + + + +- ++ + Flip-X + + + +- ++ + Pixel clock + + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- +- ++ ++ ++ + Tag + + + +- ++ + Control + + + +- ++ + Minimum + + + +- ++ + Maximum + + + +- ++ + Sensitivity + + + +- ++ + Key Delta + + + +- ++ + Reverse + + + +- ++ + joy4way + + + +- ++ + joy8way + + + +- ++ + trackball + + + +- ++ + joy2way + + + +- ++ + doublejoy8way + + + +- ++ + dial + + + +- ++ + paddle + + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + + + +- ++ + lightgun + + + +- ++ + doublejoy4way + + + +- ++ + vdoublejoy2way + + + +- ++ + doublejoy2way + + + +- ++ + printer + + + +- ++ + cdrom + + + +- ++ + cartridge + + + +- ++ + cassette + + + +- ++ + quickload + + + +- ++ + floppydisk + + + +- ++ + serial + + + +- ++ + snapshot + + + +- ++ + Device + + + +- ++ + Instance + + + +- ++ + Brief name + + + +- ++ + Extension + + + +- ++ + Mandatory + + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + + + +- +- ++ ++ + emulator info: type = %1, version = %2 + emulator info: type = %1, version = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + + + +- +- ++ ++ + Optional + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + checking real status of %n set not mentioned during full audit +@@ -9175,7 +9175,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + done (checking real status of %n set not mentioned during full audit) +@@ -9183,30 +9183,30 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + RAM options + + + +- ++ + Option + + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + + +@@ -9375,18 +9375,18 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- +- +- ++ ++ ++ ++ + true + + + +- +- +- +- ++ ++ ++ ++ + false + + +@@ -9528,153 +9528,153 @@ Use local value for option '%1', overwrite with global value or don&ap + + MainWindow + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + + + +- ++ + Toggle maximization of embedded emulator windows + + + +- ++ + Searching machines - %p% + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- ++ + Embed emulator widget + + + +- ++ + &Embed + + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + + + +- ++ + &Kill + &Kill + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Play + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + To &favorites + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Check &ROM state + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Remove from favorites + + + +- +- ++ ++ + &Remove + &Remove + + +- ++ + Clear all favorites + + + +- +- ++ ++ + &Clear + &Clear + + +- ++ + Save favorites now + + + +- +- ++ ++ + &Save + &Save + + +- ++ + Remove from played + + + +- ++ + Clear all played + + + +- ++ + Save play-history now + + +@@ -9687,55 +9687,55 @@ Use local value for option '%1', overwrite with global value or don&ap + Waiting for data... + + +- ++ ++ + +- + please wait for ROM state filter to finish and try again + + + +- +- ++ ++ + please wait for ROM verification to finish and try again + + + +- ++ ++ + +- + please wait for image check to finish and try again + + + ++ + +- + ROM verification already active + + + ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ + please wait for reload to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9746,187 +9746,187 @@ It will overwrite existing cached data. + Do you really want to check all ROM states now? + + +- ++ + automatic ROM check triggered + + + +- ++ + image cache cleared + + + +- ++ + icon cache cleared + + + + +- ++ + About Qt + + + +- ++ + ERROR: no match found (?) + + + +- +- ++ ++ + Export to... + Export to... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Select file... + + +- +- ++ ++ + <p>No data available</p> + + + + +- ++ + Embedded emulators + + + +- ++ + Release emulator + + + +- ++ + WARNING: no matching window for emulator #%1 found + + + +- ++ + Embedding failed + + + +- +- ++ ++ + Scanning pause key + + + +- +- ++ ++ + Choose export file + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + + + +- +- ++ ++ + Choose import file + + + +- +- ++ ++ + WARNING: invalid inipath + + + +- +- ++ ++ + stopping current processing upon user request + + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Your configuration changes have not been applied yet. + Really quit? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + There are one or more emulators still running. + Should they be killed on exit? + + +- ++ + There are one or more running downloads. Quit anyway? + + + +- ++ + cleaning up + + + +- ++ + aborting running downloads + + + +- ++ + saving main widget layout + + + +- ++ + disconnecting audio source from audio sink + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + + + +- ++ + destroying YouTube video widget + + + +- ++ + destroying process manager + + + +- ++ + killing %n running emulator(s) on exit + + killing %n running emulator on exit +@@ -9934,7 +9934,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + keeping %n running emulator alive +@@ -9942,19 +9942,19 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + + + +- ++ + so long and thanks for all the fish + + + + ++ + +- + M.A.M.E. Catalog / Launcher II + + +@@ -9963,16 +9963,16 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Tag + + + + +- ++ + Icon / Value + + +@@ -9981,10 +9981,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Year + + +@@ -9993,10 +9993,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + + +@@ -10005,10 +10005,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Driver status + + +@@ -10016,9 +10016,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + Icon + + +@@ -10212,10 +10212,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Source file + + +@@ -10225,10 +10225,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10685,7 +10685,7 @@ Should they be killed on exit? + + + +- ++ + Internal browser + + +@@ -10890,12 +10890,12 @@ Should they be killed on exit? + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Lock ranks + + +@@ -10989,7 +10989,7 @@ Should they be killed on exit? + + + +- ++ + Internal PDF viewer + + +@@ -11067,13 +11067,13 @@ Should they be killed on exit? + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -11084,7 +11084,7 @@ Should they be killed on exit? + + + +- ++ + Category / Machine + + +@@ -11095,19 +11095,19 @@ Should they be killed on exit? + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -11265,9 +11265,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -11306,10 +11306,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -11448,10 +11448,10 @@ Should they be killed on exit? + Forcibly clear (remove) ALL emulator related caches + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analyse ROM... + +@@ -11471,13 +11471,13 @@ Should they be killed on exit? + + + +- +- ++ ++ ++ ++ + + +- +- +- ++ + please wait for ROMAlyzer to finish the current analysis and try again + + +@@ -11491,90 +11491,90 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Name + + + +- ++ + Are you sure you want to clear the favorites list? + Are you sure you want to clear the favorites list? + + +- ++ + Are you sure you want to clear the play history? + Are you sure you want to clear the play history? + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- ++ + Default configuration + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + +@@ -11604,10 +11604,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + ROM types + + +@@ -11616,10 +11616,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Players + + +@@ -11628,9 +11628,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + Category + + +@@ -11639,9 +11639,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + Version + + +@@ -11734,7 +11734,7 @@ Should they be killed on exit? + + + +- ++ + &Notes + + +@@ -11793,9 +11793,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -11863,21 +11863,21 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + paused + + + +- +- ++ ++ + Copy emulator command line to clipboard + + + +- +- ++ ++ + &Copy command + &Copy command + +@@ -11954,7 +11954,7 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + + +@@ -11983,7 +11983,7 @@ Should they be killed on exit? + + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + +@@ -12087,12 +12087,28 @@ Should they be killed on exit? + Toggle full screen / windowed mode + + ++ ++ ++ ++ ++ ++ Set tab position north ++ ++ ++ ++ ++ ++ ++ ++ &North ++ &North ++ + + + + + +- Set tab position north ++ Set tab position south + + + +@@ -12100,15 +12116,15 @@ Should they be killed on exit? + + + +- &North +- &North ++ &South ++ &South + + + + + + +- Set tab position south ++ Set tab position west + + + +@@ -12116,15 +12132,15 @@ Should they be killed on exit? + + + +- &South +- &South ++ &West ++ &West + + + + + + +- Set tab position west ++ Set tab position east + + + +@@ -12132,74 +12148,58 @@ Should they be killed on exit? + + + +- &West +- &West +- +- +- +- +- +- +- Set tab position east +- ++ &East ++ &East + + + + + + +- &East +- &East +- +- +- +- +- +- + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + +@@ -12224,7 +12224,7 @@ Should they be killed on exit? + Titl&e + + +- ++ + freed %n byte(s) in %1 + + freed %n byte in %1 +@@ -12232,7 +12232,7 @@ Should they be killed on exit? + + + +- ++ + %n entry(s) + + %n entry +@@ -12245,7 +12245,7 @@ Should they be killed on exit? + + + +- ++ + removed %n byte(s) in %1 + + removed %n byte in %1 +@@ -12253,7 +12253,7 @@ Should they be killed on exit? + + + +- ++ + %n file(s) + + %n file +@@ -12290,23 +12290,23 @@ Should they be killed on exit? + + + +- ++ + Choose file to store download + + + +- ++ + loading style sheet '%1' + loading style sheet '%1' + + +- ++ + removing current style sheet + + + +- +- ++ ++ + last message repeated %n time(s) + + last message repeated %n time +@@ -12314,17 +12314,17 @@ Should they be killed on exit? + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + + + +- ++ + Scan the pause key used by the emulator + + + +- ++ + Scan pause key... + + +@@ -12335,187 +12335,187 @@ Should they be killed on exit? + + + +- +- ++ ++ + Enter search string + + + +- ++ + Dock / undock this widget + + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + Reset + + + +- ++ + Negate search + + + +- ++ + sorry, devices cannot run standalone + + + +- ++ + No devices available + + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + N/A + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + YouTube on-disk cache cleared (%1) + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + + + +- ++ + triggering an automatic ROM check on next reload + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + ProjectMESS page for '%1' / '%2' + + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + +- +- ++ ++ + Toggle embedder options (hold down for menu) + + + +- ++ + To favorites + + + +- ++ + Kill emulator + + + +- ++ + &Kill emulator + + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12523,91 +12523,91 @@ Retry embedding? + + + +- ++ + Information + + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + destroying audio effects dialog + + + +- ++ + destroying media player + + + +- ++ + Welcome to QMC2 v%1! + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + + + +- ++ + %n video info record(s) loaded + + %n video info record loaded +@@ -12615,141 +12615,141 @@ Retry embedding? + + + +- ++ + Add URL + + + +- ++ + Enter valid MP3 stream URL: + + + +- ++ + Buffering %p% + + + +- +- ++ ++ + running + + + +- +- ++ ++ + Play tagged - %p% + + + +- ++ + Add favorites - %p% + + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + + + +- +- ++ ++ + Tag - %p% + + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12760,58 +12760,58 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + + + +- +- ++ ++ + Export global MAME configuration + + + +- ++ + Import from... + + + +- +- ++ ++ + Import global MAME configuration + + + +- +- ++ ++ + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + + + +- ++ + emulator #%1 is already embedded + + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + + +@@ -12968,14 +12968,12 @@ Please check the 'rompath' option in the global emulator configuration + + + +- + Go back + + + + + +- + Go forward + + +@@ -12999,8 +12997,8 @@ Please check the 'rompath' option in the global emulator configuration + + + +- +- ++ ++ + Enter search string + + +@@ -13054,88 +13052,28 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Enter URL + + + +- +- Open link +- +- +- +- +- Open link in new window +- +- +- +- +- Open image in new window +- +- +- +- +- Save link as... +- Save link as... +- +- +- +- Copy link +- +- +- +- +- Save image as... +- Save image as... +- +- +- +- Copy image +- +- +- +- +- Copy image address +- +- +- +- +- Reload +- +- +- +- +- Stop +- +- +- +- +- Copy +- +- +- +- +- Inspect +- +- +- +- ++ + WARNING: invalid network reply and/or network error + + + +- +- +- +- ++ ++ ++ ++ + MiniWebBrowser + + + +- +- +- +- ++ ++ ++ ++ + PDF viewer + + +@@ -13269,240 +13207,225 @@ Please check the 'rompath' option in the global emulator configuration + + Options + +- ++ + Check all ROM states + + + +- ++ + About QMC2 + + + +- ++ + Online documentation + + + +- ++ + Clear image cache + + + +- ++ + Clear icon cache + + + +- +- ++ ++ + Open options dialog + + + +- ++ + About Qt + + + +- ++ + Check states of tagged ROMs + + + +- ++ + Recreate template map + + + +- ++ + Check template map + + + +- +- ++ ++ + Stop processing / exit QMC2 + + + +- ++ + Clear YouTube cache + + + +- ++ + Open ROMAlyzer (system mode) + + + +- ++ + Open ROMAlyzer (software mode) + + + +- ++ + Tag current set + + + +- ++ + Untag current set + + + +- ++ + Toggle tag mark + + + +- ++ + Toggle tag / cursor down + + + +- ++ + Toggle tag / cursor up + + + +- ++ + Tag all sets + + + +- ++ + Untag all sets + + + +- ++ + Invert all tags + + + +- ++ + Tag visible sets + + + +- ++ + Untag visible sets + + + +- ++ + Invert visible tags + + + +- ++ + Full detail view + + + +- +- +- +- ++ ++ ++ ++ + Category view + + + +- +- +- +- ++ ++ ++ ++ + Version view + + + +- ++ + Custom view + + + +- ++ + Run external ROM tool + + + +- ++ + Run ROM tool for tagged sets + + + +- ++ + Software-list view-mode flat + + + +- ++ + Software-list view-mode tree + + + +- ++ + Plus (+) + + + +- ++ + Minus (-) + + + +- ++ + Cursor down + + + +- ++ + End + + + +- ++ + Escape + + + +- ++ + Cursor left + + + +- ++ + Home + + + +- ++ + Page down + + + +- ++ + Page up + + + +- +- +- +- +- +- +- +- +- +- +- +- +- use semicolon (;) to separate multiple folders +- +- +- ++ + + + +@@ -13512,725 +13435,740 @@ Please check the 'rompath' option in the global emulator configuration + + + ++ ++ ++ use semicolon (;) to separate multiple folders ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + use semicolon (;) to separate multiple files + + + +- ++ + please reload machine list for some changes to take effect + + + +- ++ + sorting machine list by %1 in %2 order + + + +- ++ + libarchive error + + + +- ++ + triggering automatic reload of machine list + + + +- ++ + &Foreign emulators + + + +- ++ + Enter key + + + +- ++ + Analyze current machine + + + +- ++ + Copy machine to favorites + + + +- ++ + Reload machine list + + + +- ++ + Check machine's ROM state + + + +- ++ + Rebuild current machine + + + +- ++ + Rebuild tagged machines + + + +- ++ + Hierarchical view + + + +- ++ + Check software-states + + + +- ++ + Launch arcade mode + + + +- ++ + Increase rank + + + +- ++ + Decrease rank + + + +- ++ + Return key + + + +- ++ + Cursor right + + + +- ++ + Tabulator + + + +- ++ + Cursor up + + + +- ++ + Activate item + + + +- ++ + WARNING: configuration is not writeable, please check access permissions for + + + +- +- ++ ++ + Reset to default font + + + +- ++ + image cache size set to %1 MB + image cache size set to %1 MB + + +- +- ++ ++ + Confirm + + + +- ++ + An open machine-specific emulator configuration has been detected. + Use local machine-settings, overwrite with global settings or don't apply? + + + +- ++ + &Local + &Local + + +- ++ + &Overwrite + &Overwrite + + +- ++ + Do&n't apply + Do&n't apply + + +- ++ + ascending + + + +- ++ + descending + + + +- ++ + 7z error + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: can't open icon file, please check access permissions for %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- +- ++ ++ + SW snap file + + + +- +- +- ++ ++ ++ + Custom IDs... + + + +- +- +- ++ ++ ++ + Specify pre-defined foreign IDs for this emulator, launchable from the 'foreign emulators' view + + + +- +- ++ ++ + Choose icon for this foreign emulator (hold down for menu) + + + +- +- ++ ++ + Default icon + + + +- +- ++ ++ + No icon + + + +- ++ + N/A + N/A + + +- ++ + Choose XML cache database file + + + +- ++ + This will remove <b>all</b> existing user data and recreate the database. + Are you sure you want to do this? + + + +- ++ + &Yes + + + +- ++ + &No + + + +- ++ + Choose user data database file + + + +- ++ + Choose cookie database file + + + +- ++ + Choose 7-zip tool + + + +- ++ + Choose ROM tool + + + +- +- +- ++ ++ ++ + Choose working directory + + + +- ++ + Choose machine favorites file + + + +- ++ + Choose machine list cache file + + + +- ++ + Choose machine list database file + + + +- ++ + Choose software state cache directory + + + +- ++ + Choose general software folder + + + +- ++ + Choose dat-info database file + + + +- ++ + Choose MESS machine info DB + + + +- ++ + Choose MAME emulator info DB + + + +- ++ + Choose MESS emulator info DB + + + +- ++ + Choose software info DB + + + +- ++ + Choose catver.ini file + + + +- ++ + Choose compressed preview file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z archives + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Supported archives + + + +- ++ + Choose compressed flyer file + + + +- ++ + Choose compressed icon file + + + +- ++ + Choose compressed cabinet file + + + +- ++ + Choose compressed controller file + + + +- ++ + Choose compressed marquee file + + + +- ++ + Choose compressed title file + + + +- ++ + Choose compressed PCB file + + + +- ++ + Choose compressed software snap file + + + +- ++ + Choose video snap folder + + + +- ++ + Choose system manual folder + + + +- ++ + Choose software manual folder + + + +- ++ + Choose image file + + + +- ++ + Supported image files (%1) + + + +- ++ ++ + +- +- +- ++ ++ + Default + + + +- +- ++ ++ + Preview file + + + +- ++ + Minimize when launching (non-embedded) emulators? + + + +- +- +- +- ++ ++ ++ ++ + Category + + + +- +- +- +- ++ ++ ++ ++ + Version + + + +- ++ + Check images and icons + + + +- ++ + Analyze tagged sets + + + +- ++ + Copy tagged sets to favorites + + + +- ++ + Clear ProjectMESS cache + + + +- ++ + Play (independent) + + + +- ++ + Play (embedded) + + + +- +- ++ ++ + No style sheet + + + +- +- +- ++ ++ ++ + Preview directory + + + +- +- ++ ++ + Flyer file + + + +- +- +- ++ ++ ++ + Flyer directory + + + +- +- ++ ++ + Icon file + + + +- +- +- ++ ++ ++ + Icon directory + + + +- +- ++ ++ + PCB file + + + +- +- +- ++ ++ ++ + PCB directory + + + +- ++ + Choose Qt style sheet file + + + +- ++ + Qt Style Sheets (*.qss) + Qt Style Sheets (*.qss) + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + All files (*) + + + +- ++ + Choose preview directory + + + +- ++ + Choose flyer directory + + + +- ++ + Choose icon directory + + + +- ++ + Choose PCB directory + + + +- ++ + Choose options template file + + + +- +- ++ ++ + Choose emulator executable file + + + +- ++ + Choose emulator log file + + + +- ++ + Choose zip tool + + + +- ++ + Choose play history file + + + +- ++ + Choose ROM state cache file + + + +- ++ + Choose software list cache database file + + + +- ++ + Choose data directory + + + +- ++ + Choose MAME machine info DB + + + +- ++ + Choose category.ini file + + + +- ++ + Choose software snap directory + + + +- ++ + Choose software notes folder + + + +- ++ + Choose software notes template + + + +- +- ++ ++ + HTML files (*.html *.htm) + + + +- ++ + Choose system notes folder + + + +- ++ + Choose system notes template + + + +- ++ + shortcut map is clean + + + +- ++ + WARNING: shortcut map contains duplicates + + +@@ -14245,2312 +14183,2312 @@ Are you sure you want to do this? + &GUI + + +- ++ + Application language + + + +- +- DE (German) +- +- +- +- +- US (English) +- +- +- +- ++ + Language + + + +- ++ + Image cache size in MB + + + +- ++ + MB + + + +- ++ + Image cache size + + + +- ++ + Application font + + + +- ++ + Show short description of current processing in progress bar + + + +- ++ + Smooth image scaling (nicer, but slower) + + + +- ++ + Smooth scaling + + + +- ++ + Retry loading images which weren't found before? + Retry loading images which weren't found before? + + +- ++ + Retry loading images + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + Scale image to fit frame size (otherwise use original size) + + + +- ++ + Scaled preview + + + +- ++ + Use standard or custom color palette? + Use standard or custom color palette? + + +- ++ + Scaled flyer + + + +- ++ + GUI style + + + +- ++ + Application font (= system default if empty) + + + +- ++ + Browse application font + + + +- +- ++ ++ + F&iles / Directories + F&iles / Directories + + +- ++ + Browse frontend data directory + + + +- ++ + Frontend data directory (read) + + + +- ++ + Data directory + + + +- ++ + Browse ROM state cache file + + + +- ++ + ROM state cache file (write) + + + +- ++ + ROM state cache + + + +- ++ + Play history file (write) + + + +- ++ + Favorites file + + + +- ++ + Play history file + + + +- ++ + Browse play history file + + + +- ++ + Icon directory (read) + + + +- ++ + Browse icon directory + + + +- ++ + Flyer directory (read) + + + +- ++ + Browse flyer directory + + + +- ++ + Preview directory (read) + + + +- ++ + Browse preview directory + + + +- ++ + Auto-trigger ROM check + + + +- ++ + Update delay + + + +- ++ + immediate + + + +- ++ + ms + + + +- ++ + Responsiveness + + + +- ++ + Select sort order + + + +- ++ + Ascending + + + +- ++ + Descending + + + +- ++ + Select sort criteria + + + +- ++ + ROM state + + + +- ++ + Year + + + +- ++ + Manufacturer + + + +- ++ + Sort order + + + +- ++ + Sort criteria + + + +- ++ + ROM state filter + + + +- ++ + Show ROM state C (correct)? + Show ROM state C (correct)? + + +- ++ + Show ROM state M (mostly correct)? + Show ROM state M (mostly correct)? + + +- ++ + Show ROM state I (incorrect)? + Show ROM state I (incorrect)? + + +- ++ + Show ROM state N (not found)? + Show ROM state N (not found)? + + +- ++ + Show ROM state U (unknown)? + Show ROM state U (unknown)? + + +- ++ + &Shortcuts / Keys + &Shortcuts / Keys + + +- ++ + Reset key sequence to default + + + +- ++ + Reset + + + +- +- ++ ++ + Redefine key sequence + + + +- ++ + Active shortcut definitions; double-click to redefine key sequence + + + +- ++ + Custom + + + +- ++ + Zip tool + + + +- ++ + Browse for zip tool + + + +- ++ + Zip tool argument list to remove entries from the ZIP archive (i. e. "$ARCHIVE$ -d $FILELIST$") + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Arguments + + + +- +- <font size="-1"><b>WARNING: stored passwords are <u>weakly</u> encrypted!</b></font> +- +- +- +- ++ + E&mulator + E&mulator + + +- ++ + &Global configuration + &Global configuration + + +- ++ + Browse emulator log file + + + +- ++ + Emulator log file (write) + + + +- ++ + Emulator log file + + + +- +- ++ ++ + Browse emulator executable file + + + +- +- ++ ++ + Executable file + + + +- ++ + Browse options template file + + + +- ++ + Options template file (read) + + + +- +- EL (Greek) +- +- +- +- +- PT (Portuguese) +- +- +- +- ++ + Show progress texts + + + +- ++ + Scaled PCB + + + +- ++ + Style sheet + + + +- ++ + Qt style sheet file (*.qss, leave empty for no style sheet) + Qt style sheet file (*.qss, leave empty for no style sheet) + + +- ++ + Browse Qt style sheet file + + + +- ++ + Log font + + + +- ++ + Font used in logs (= application font if empty) + + + +- ++ + Browse font used in logs + + + +- ++ + PCB directory (read) + + + +- ++ + Browse PCB directory + + + +- ++ + Enable the use of catver.ini -- get the newest version from http://www.progettoemma.net/?catlist + + + +- ++ + Use catver.ini + + + +- ++ + Path to catver.ini (read) + + + +- ++ + Browse path to catver.ini + + + +- ++ + ROM types + + + +- ++ + SW snap position + + + +- ++ + Above / Left + + + +- ++ + Above / Center + + + +- ++ + Above / Right + + + +- ++ + Below / Left + + + +- ++ + Below / Center + + + +- ++ + Below / Right + + + +- ++ + Directory used as the default software folder for the MESS device configurator (if a sub-folder named as the current machine exists, that folder will be selected instead) + + + +- ++ + Launch emulation directly when an item is activated in the search-, favorites- or played-lists (instead of jumping to the master list) + + + +- +- +- ++ ++ ++ + SW snap folder + + + +- ++ + Software snap-shot directory (read) + + + +- ++ + Browse software snap-shot directory + + + +- ++ + Players + + + +- ++ + Play on sub-list activation + + + +- ++ + Select the cursor position QMC2 uses when auto-scrolling to the current item (this setting applies to all views and lists!) + + + +- ++ + Visible + + + +- ++ + Top + + + +- ++ + Bottom + + + +- ++ + Center + + + +- ++ + Cursor position + + + +- ++ + Use a unifed tool- and title-bar on Mac OS X + + + +- ++ + Unify with title + + + +- ++ + Minimize when launching emulators? + + + +- ++ + Minimize on emulator launch + + + +- ++ + Suppress all messages sent through either the QDebug class or one of the qDebug() / qCritical() / qWarning() / qFatal() functions + + + +- ++ + Suppress Qt messages + + + +- ++ + Show splash screen when starting up? + + + +- ++ + Show splash screen + + + +- ++ + Software notes folder + + + +- ++ + Folder used to store personal notes about any software titles (write) + + + +- ++ + Browse software notes folder + + + +- ++ + Tag + + + +- ++ + Driver status + + + +- ++ + Display ROM status icons in master lists? + + + +- ++ + Show ROM status icons + + + +- ++ + Select the position where sofware snap-shots are displayed within software lists + + + +- ++ + Disable snaps + + + +- ++ + Display software snap-shots when hovering the software list with the mouse cursor + + + +- ++ + Enable ROM state filtering? + + + +- +- ES (Spanish) +- +- +- +- +- IT (Italian) +- +- +- +- +- RO (Romanian) +- +- +- +- +- SV (Swedish) +- +- +- +- ++ + Customize the tool-bar + + + +- ++ + Tool-bar... + + + +- ++ + Force QMC2's working directory to be the same as the executable's path + + + +- ++ + Set working directory from executable + + + +- ++ + Default palette + + + +- ++ + Edit the color palette + + + +- ++ + Edit color palette... + + + +- ++ + Use the system's own (native) file dialogs, otherwise Qt's built-in dialogs are used + + + +- ++ + Compressed cabinet file (read) + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Select compression format + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + ZIP + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + 7z + + + +- ++ + Browse compressed cabinet file + + + +- ++ + Compressed controller file (read) + + + +- ++ + Browse compressed controller file + + + +- ++ + Compressed marquee file (read) + + + +- ++ + Browse compressed marquee file + + + +- ++ + Switch between specifying a title directory or a compressed title file + + + +- ++ + MAME emulator information database - mameinfo.dat (read) + + + +- ++ + Browse MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a preview directory or a compressed preview file + + + +- ++ + Compressed preview file (read) + + + +- ++ + Browse compressed preview file + + + +- ++ + Switch between specifying a flyer directory or a compressed flyer file + + + +- ++ + Compressed flyer file (read) + + + +- ++ + Browse compressed flyer file + + + +- ++ + Switch between specifying an icon directory or a compressed icon file + + + +- ++ + Compressed icon file (read) + + + +- ++ + Browse compressed icon file + + + +- ++ + Switch between specifying a cabinet directory or a compressed cabinet file + + + +- ++ + Switch between specifying a controller directory or a compressed controller file + + + +- ++ + Switch between specifying a marquee directory or a compressed marquee file + + + +- ++ + Compressed title file (read) + + + +- ++ + Browse compressed title file + + + +- ++ + Switch between specifying a PCB directory or a compressed PCB file + + + +- ++ + Compressed PCB file (read) + + + +- ++ + Browse compressed PCB file + + + +- ++ + Compressed software snap-shot file (read) + + + +- ++ + Browse compressed software snap-shot file + + + +- ++ + Load MAME emulator information database (mameinfo.dat) + + + +- ++ + Switch between specifying a software snap directory or a compressed software snap file + + + +- ++ + Enable the use of a template for (empty) software notes + + + +- ++ + Software notes template + + + +- ++ + HTML file used as a template for software-notes (read) + + + +- ++ + Browse software notes template + + + +- ++ + Enable the use of category.ini + + + +- ++ + Use category.ini + + + +- ++ + Path to category.ini (read) + + + +- ++ + Browse path to category.ini + + + +- ++ + System notes folder + + + +- ++ + Enable the use of a template for (empty) system notes + + + +- ++ + System notes template + + + +- ++ + HTML file used as a template for system-notes (read) + + + +- ++ + Folder used to store personal notes about any systems (write) + + + +- ++ + Browse system notes folder + + + +- ++ + Browse system notes template + + + +- ++ + Load software information database (from history.dat) + + + +- ++ + Software information database - history.dat (read) + + + +- ++ + Browse software information database (history.dat) + + + +- ++ + Define additional artwork classes for systems and software-list entries + + + +- ++ + Set up additional artwork classes... + + + +- ++ + Choose active image formats and their priorities (per artwork class) + + + +- ++ + Select image formats... + + + +- ++ + Load MESS emulator information database (messinfo.dat) + + + +- ++ + MESS emulator information database - messinfo.dat (read) + + + +- ++ + Show machine's description at the bottom of any images + + + +- ++ + Show machine name + + + +- ++ + Show machine's description only when the machine list is not visible due to the current layout + + + +- ++ + Fall back to the parent's image / video if an indivual image / video is missing but there's one for the parent + + + +- ++ + Parent image / video fallback + + + +- ++ + Open the component setup dialog + + + +- ++ + Component setup... + + + +- ++ + Show the machine status indicator only when the machine list is not visible due to the current layout + + + +- ++ + Restore saved machine selection at start and after reloading the machine list + + + +- ++ + Restore machine selection + + + +- ++ + Show vertical machine status indicator in machine details + + + +- ++ + Machine status indicator + + + +- ++ + Save machine selection on exit and before reloading the machine list + + + +- ++ + Save machine selection + + + +- ++ + Show animation when loading, filtering or tagging the machine list? + + + +- ++ + Show loading animation + + + +- ++ + Scaled software snapshot + + + +- ++ + Select individual fallback settings per artwork class + + + +- ++ + Individual fallback settings... + + + +- ++ + Import MAME machine information to DAT-info database + + + +- ++ + Browse machine favorites file + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Archive + + + +- ++ + MAME machine information database - history.dat (read) + + + +- ++ + Browse MESS emulator information database (messinfo.dat) + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Option requires a reload of the machine list to take effect + + + +- ++ + Machine favorites file (write) + + + +- ++ + Load MAME machine information database (history.dat) + + + +- ++ + Machine info (MAME) + + + +- ++ + Browse MAME machine information database (history.dat) + + + +- ++ + Video snap folder + + + +- ++ + Video snap folder (read) + + + +- ++ + Browse video snap folder + + + +- ++ + Optimize catver.ini for faster loading + + + +- ++ + Setup the icon cache database + + + +- ++ + Automatically disable SW snaps when software-detail is visible (may be annoying) + + + +- ++ + No SW snaps for visible details + + + +- ++ + Machine description + + + +- ++ + Machine name + + + +- ++ + Source file + + + +- ++ + Rank + + + +- ++ + Number of item insertions between machine list updates during reload (higher means faster, but makes the GUI less responsive) + + + +- ++ + Select the default launch-mode (independent or embedded window) used when emulation is started by activating an entry in any list + + + +- ++ + independent + + + +- ++ + embedded + + + +- ++ + Delay update of any machine details (preview, flyer, info, configuration, ...) by how many milliseconds? + + + +- ++ + Default launch-mode + + + +- ++ + Display (or hide) device sets in master lists? + + + +- ++ + Show device sets + + + +- ++ + Display (or hide) BIOS sets in master lists? + + + +- ++ ++ de (German) ++ ++ ++ ++ ++ es (Spanish) ++ ++ ++ ++ ++ el (Greek) ++ ++ ++ ++ ++ fr (French) ++ ++ ++ ++ ++ it (Italian) ++ ++ ++ ++ ++ pl (Polish) ++ ++ ++ ++ ++ pt (Portuguese) ++ ++ ++ ++ ++ pt_BR (Brazilian Portuguese) ++ ++ ++ ++ ++ ro (Romanian) ++ ++ ++ ++ ++ sv (Swedish) ++ ++ ++ ++ ++ us (American English) ++ ++ ++ ++ + Show BIOS sets + + + +- ++ + ROM tool + + + +- ++ + External ROM tool (it's completely up to you...) + + + +- ++ + Browse ROM tool + + + +- ++ + ROM tool argument list (i. e. "$ID$ $DESCRIPTION$") + + + +- ++ + Browse working directory of the ROM tool + + + +- ++ + Copy the tool's output to the front end log (keeping it for debugging) + + + +- ++ + Copy tool output to front end log + + + +- ++ + Automatically close the tool-executor dialog when the external process finished + + + +- ++ + Close dialog automatically + + + +- ++ + Browser settings + + + +- ++ + Browse cookie database + + + +- ++ + Cookie database file (write) + + + +- ++ + Cookie database + + + +- ++ + Save and restore cookies used on web pages? + + + +- ++ + Remove all cookies by recreating the database + + + +- ++ + 7-zip tool + + + +- ++ + External 7-zip tool, i.e. "7za" (read and execute) + + + +- ++ + Browse for 7-zip tool + + + +- ++ + 7-zip tool argument list to remove entries from the 7-zip archive (i. e. "d $ARCHIVE$ $FILELIST$") + + + +- ++ + Options template file + + + +- ++ + Clean up user data database (removes obsolete entries) + + + +- ++ + Software state cache + + + +- ++ + Directory used to store individual state cache files for each software-list (write) + + + +- ++ + Browse software state cache directory + + + +- ++ + XML cache database + + + +- ++ + Database file for caching the output from -listxml (write) + + + +- ++ + Browse XML cache database file + + + +- ++ + User data database + + + +- ++ + Database file for storing/retrieving user data (write) + + + +- ++ + Browse user data database file + + + +- ++ + Indicates if the $ID$ placeholder is missing on the supplied command line (yellow) or not (green) + + + +- ++ + Replace + + + +- ++ + Arguments passed to the emulator -- use $ID$ as placeholder for the unique set ID, $DESCRIPTION$ for its description + + + +- +- +- +- ++ ++ ++ ++ + Working directory + + + +- +- ++ ++ + Working directory that's used when the emulator is executed (if empty, QMC2's current working directory is used) + + + +- +- ++ ++ + Browse working directory + + + +- ++ + General software folder + + + +- ++ + Working directory that's used when the ROM tool is executed (if empty, QMC2's current working directory is used) + + + +- ++ + Software list cache DB + + + +- ++ + Browse software list cache database file + + + +- ++ + Browse general software folder + + + +- ++ + Database file for caching the ouput from -listsoftware (write) + + + +- +- +- ++ ++ ++ + Automatically recreate all emulator caches when the output from '-listfull' changes + + + +- ++ + Name + + + +- ++ + Executable + + + +- ++ + Custom IDs + + + +- ++ + Register emulator + + + +- ++ + Add + + + +- ++ + Deregister emulator + + + +- ++ + Registered emulator's name + + + +- ++ + Command to execute the emulator (path to the executable file) + + + +- ++ + Replace emulator registration + + + +- ++ + Use native file dialogs + + + +- ++ + Network / &Tools + + + +- ++ + Restore cookies + + + +- ++ + Manage cookies stored in database + + + +- ++ + Manage stored cookies + + + +- ++ + Clear database + + + +- ++ + Recreate user data database (removes <b>all</b> entries) + + + +- ++ + Foreign &emulators + + + +- ++ + Icon + + + +- ++ + Emulator name + + + +- ++ + Remove + + + +- ++ + Machine list cache + + + +- ++ + Browse machine list cache file + + + +- ++ + Machine list cache file (write) + + + +- +- +- ++ ++ ++ + Skip emulator identification when the file's modification time hasn't changed + + + +- ++ + Machine list database + + + +- ++ + Machine list database file (write) + + + +- ++ + Browse machine list database file + + + +- ++ + Registered emulators -- you may select one of these in the machine-specific emulator configuration + + + +- ++ + Apply settings + + + +- ++ + &Apply + &Apply + + +- ++ + Restore currently applied settings + + + +- ++ + &Restore + &Restore + + +- ++ + Reset to default settings (click <i>Restore</i> to restore currently applied settings!) + + + +- ++ + &Default + &Default + + +- ++ + Close and apply settings + + + +- ++ + &Ok + &Ok + + +- ++ + Close and discard changes + + + +- ++ + &Cancel + &Cancel + + +- +- PL (Polish) +- +- +- +- ++ + External zip tool, i.e. "zip" (read and execute) + + + +- ++ + Emulator executable file (read and execute) + + + +- +- FR (French) +- +- +- +- ++ + Kill emulators when QMC2 exits? + + + +- ++ + Kill emulators on exit + + + +- ++ + Terminate all other emulator instances when launching a new one? + + + +- ++ + One emulator at a time + + + +- ++ + Load MESS machine information database (sysinfo.dat) + + + +- ++ + MESS machine information database - sysinfo.dat (read) + + + +- ++ + Browse MESS machine information database (sysinfo.dat) + + + +- ++ + Import MESS emulator information to DAT-info database + + + +- ++ + Import MAME emulator information to DAT-info database + + + +- ++ + Import MESS machine information to DAT-info database + + + +- ++ + DAT-info database file + + + +- ++ + Browse DAT-info database file + + + +- ++ + Browse system manual folder + + + +- ++ + DAT-info database file (write) + + + +- ++ + Machine info (MESS) + + + +- ++ + Emu info (MAME) + + + +- ++ + Emu info (MESS) + + + +- ++ + Software info + + + +- ++ + Import software information to DAT-info database + + + +- ++ + System manual folder (read) + + + +- ++ + Software manual folder (read) + + + +- ++ + Browse software manual folder + + + +- ++ + System manual folder + + + +- ++ + Software manual folder + + + +- ++ + Scan available software manuals + + + +- ++ + Scan available system manuals + + + +- ++ + Machine- / Software-&lists + + + +- ++ + Save the latest software selection (per system) + + + +- ++ + Save software selection + + + +- ++ + Restore the latest software selection (per system) + + + +- ++ + Restore software selection + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Common settings</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Machine lists</span></p></body></html> + + + +- ++ + <html><head/><body><p><span style=" font-weight:600;">Software lists</span></p></body></html> + + + +- ++ + Software snaps on mouse hover + + + +- ++ + Apply the state filter dynamically during a full ROM audit? + + + +- ++ + Apply state filter dynamically when checking ROMs + + + +- ++ + &Joystick + &Joystick + + +- ++ + Enable GUI control via joystick + + + +- ++ + Enable joystick control + + + +- ++ + Rescan available joysticks + + + +- ++ + Rescan joysticks + + + +- ++ + Select joystick + + + +- ++ + List of available joysticks - select the one you want to use for GUI control + + + +- +- +- +- +- ++ ++ ++ ++ ++ + No joysticks found + + + +- ++ + Joystick information and settings + + + +- ++ + Number of joystick axes + + + +- +- +- +- ++ ++ ++ ++ + 0 + + + +- ++ + Buttons: + Buttons: + + +- ++ + Number of joystick buttons + + + +- ++ + Hats: + Hats: + + +- ++ + Number of coolie hats + + + +- ++ + Trackballs: + Trackballs: + + +- ++ + Number of trackballs + + + +- ++ + Calibrate joystick axes + + + +- ++ + Test all joystick functions + + + +- ++ + Axes: + Axes: + + +- ++ + Automatically repeat joystick functions after specified delay + + + +- ++ + Auto repeat after + + + +- ++ + Repeat all joystick functions after how many milliseconds? + Repeat all joystick functions after how many milliseconds? + + +- +- ++ ++ + ms + + + +- ++ + Event timeout + + + +- ++ + Process joystick events after how many milliseconds? + Process joystick events after how many milliseconds? + + +- +- ++ ++ + Function / Key + + + +- ++ + Calibrate + + + +- ++ + Test + + + +- ++ + Map + + + +- ++ + Remap + + + +- ++ + Remove + + + +- ++ + Active joystick mappings; double-click to remap joystick function + + + +- ++ + Joystick function + + + +- ++ + Map joystick functions to GUI functions + + + +- ++ + Remap a joystick function to the selected GUI function + + + +- ++ + Remove joystick mapping from selected GUI function + + + +- ++ + ERROR: couldn't initialize SDL joystick support + + + +- ++ + joystick map is clean + + + +- ++ + WARNING: joystick map contains duplicates + + + +- ++ + please restart QMC2 for some changes to take effect + + + +- +- ++ ++ + Option requires a restart of QMC2 to take effect + + + +- ++ + restart required + + + +- +- +- ++ ++ ++ + reload required + + + +- ++ + none + + + +- +- ++ ++ + unlimited + + + +- +- ++ ++ + lines + + + +- ++ + Emulator log size + + + +- ++ + Maximum number of lines to keep in emulator log browser + + + +- ++ + Previous track (audio player) + + + +- ++ + Next track (audio player) + + + +- ++ + Fast backward (audio player) + + + +- ++ + Fast forward (audio player) + + + +- ++ + Stop track (audio player) + + + +- ++ + Pause track (audio player) + + + +- ++ + Play track (audio player) + + + +- ++ + Raise volume (audio player) + + + +- ++ + Lower volume (audio player) + + + +- ++ + Export ROM Status + + + +- +- ++ ++ + Only when required + + + +- ++ + Show the menu bar + + + +- ++ + Show menu bar + + + +- +- ++ ++ + Show status bar + + + +- +- ++ ++ + Show tool bar + + + +- ++ + Toggle ROM state C + + + +- ++ + Toggle ROM state M + + + +- ++ + Toggle ROM state I + + + +- ++ + Toggle ROM state N + + + +- ++ + Toggle ROM state U + + + +- ++ + Check for other instances of this QMC2 variant on startup + + + +- ++ + Check single instance + + + +- ++ + Setup arcade mode + + +@@ -16560,249 +16498,239 @@ Are you sure you want to do this? + &Front end + + +- ++ + Application style (Default = use system's default style) + + + +- ++ + Automatically trigger a ROM check if necessary + + + +- +- +- ++ ++ ++ + Command + + + +- ++ + Launch emulation on double-click events (may be annoying) + + + +- ++ + Double-click activation + + + +- ++ + Toggle full screen + + + +- +- ++ ++ + Cabinet file + + + +- +- +- ++ ++ ++ + Cabinet directory + + + +- +- ++ ++ + Controller file + + + +- +- +- ++ ++ ++ + Controller directory + + + +- ++ + Choose cabinet directory + + + +- ++ + Choose controller directory + + + +- ++ + Scaled cabinet + + + +- ++ + Scaled controller + + + +- ++ + Cabinet directory (read) + + + +- ++ + Browse cabinet directory + + + +- ++ + Controller directory (read) + + + +- ++ + Browse controller directory + + + +- +- ++ ++ + Marquee file + + + +- +- +- ++ ++ ++ + Marquee directory + + + +- +- ++ ++ + Title file + + + +- +- +- ++ ++ ++ + Title directory + + + +- ++ + Choose marquee directory + + + +- ++ + Choose title directory + + + +- ++ + Scaled marquee + + + +- ++ + Scaled title + + + +- ++ + Marquee directory (read) + + + +- ++ + Browse marquee directory + + + +- ++ + Title directory (read) + + + +- ++ + Browse title directory + + + +- ++ + Front end log size + + + +- ++ + Maximum number of lines to keep in front end log browser + + + +- ++ + Front end log file + + + +- ++ + Front end log file (write) + + + +- ++ + Browse front end log file + + + +- ++ + Choose front end log file + + + +- ++ + Use HTTP proxy + + + +- ++ + Host / IP + + + +- ++ + Hostname or IP address of the HTTP proxy server + + + +- ++ + Port + + + +- ++ + Port to access the HTTP proxy service + + + +- ++ + User ID + + + +- ++ + User ID to access the HTTP proxy service (empty = no authentication) + + + +- +- Password +- +- +- +- ++ + Enable / disable the use of an HTTP proxy on any web lookups + + +- +- +- Password to access the HTTP proxy service (empty = no authentication) +- +- + + + PCB +@@ -17281,28 +17209,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + + + +- ++ + incorrect + + + +- ++ + mostly correct + + + +- ++ + not found + + + +- ++ + + + +@@ -17311,43 +17239,43 @@ Are you sure you want to do this? + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Default + + + +- ++ + Import from... + Import from... + + +- +- ++ ++ + Export machine-specific MAME configuration + + + +- +- ++ ++ + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + GIT %1 + +@@ -17388,18 +17316,18 @@ Are you sure you want to do this? + + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + SDL joystick support enabled - using SDL v%1.%2.%3 + + +- ++ + Phonon features enabled - using Phonon v%1 + Phonon features enabled - using Phonon v%1 + + +- ++ + video player: XML error: fatal error on line %1, column %2: %3 + + +@@ -17471,19 +17399,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + + + +- ++ + + no + + + +- ++ + + partially + +@@ -21003,7 +20931,7 @@ Are you sure you want to do this? + + + +- ++ + Choose mame.ini + + +@@ -21017,7 +20945,7 @@ Are you sure you want to do this? + + + +- ++ + Choose ui.ini + + +@@ -21132,178 +21060,179 @@ Are you sure you want to do this? + + + +- +- ++ ++ + &Next > + + + +- +- ++ ++ + < &Back + + + +- +- ++ ++ + &Cancel + &Cancel + + +- +- ++ ++ + &Finish + + + +- +- +- ++ ++ ++ + Yes + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + No + + + +- ++ + %1.%2+ required + + + +- ++ ++ + +- ++ + +- + Unknown + + + +- ++ + can't parse version info + + + ++ + +- ++ + +- +- +- ++ ++ + emulator didn't start + + + +- +- ++ ++ + No ini-file found + + + ++ + +- + Couldn't determine ini-path + + + +- +- ++ ++ + incompatible binary + + + ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + +- ++ + + + + + + +- + No result + + + +- ++ + importing emulator settings from '%1' + + + +- +- ++ ++ + option '%1' with value '%2' ignored + + + +- ++ + WARNING: unknown option '%1' on line %2 ignored + + + +- +- ++ ++ + option '%1' with value '%2' imported + + + +- +- ++ ++ + WARNING: missing value on line %1, option '%2' ignored + + + +- +- ++ ++ + ERROR: can't open '%1' for reading + + + +- ++ + done (importing emulator settings from '%1') + + + +- ++ + importing front-end settings from '%1' + + + +- ++ + done (importing front-end settings from '%1') + + + ++ + + + +@@ -21311,74 +21240,73 @@ Are you sure you want to do this? + + + +- + Check result pending... + + + +- +- ++ ++ + Import emulator settings from %1 + + + +- +- ++ ++ + Import front-end settings from %1 + + + +- ++ + Import both emulator and front-end settings + + + +- ++ + Import nothing + + + +- ++ + Default + + + +- +- ++ ++ + Choose emulator executable file + + + +- +- +- +- ++ ++ ++ ++ + All files (*) + All files (*) + + +- ++ + Choose working directory + + + +- ++ + Choose ROM path + + + +- ++ + Choose sample path + + + +- ++ + Choose hash path + + + +- +- ++ ++ + Ini files (*.ini) + + +@@ -23523,54 +23451,54 @@ Are you sure you want to do this? + + Welcome + +- ++ + Default + + + +- ++ + Error + + + +- ++ + The specified file isn't executable! + The specified file isn't executable! + + +- +- ++ ++ + Choose emulator executable file + + + +- +- ++ ++ + All files (*) + + + +- ++ + Choose working directory + + + +- ++ + Choose ROM path + + + +- ++ + Choose sample path + + + +- ++ + Choose hash path + + + +- ++ + It appears that another instance of %1 is already running. + However, this can also be the leftover of a previous crash. + +@@ -23696,22 +23624,22 @@ Exit now, accept once or ignore completely? + + + +- ++ + Single-instance check + + + +- ++ + &Exit + &Exit + + +- ++ + &Once + &Once + + +- ++ + &Ignore + &Ignore + +@@ -23854,49 +23782,49 @@ Exit now, accept once or ignore completely? + + + +- ++ + FLV 240P + + + + +- ++ + FLV 360P + + + + +- ++ + MP4 360P + + + + +- ++ + FLV 480P + + + + +- ++ + MP4 720P + + + + +- ++ + MP4 1080P + + + + +- ++ + MP4 3072P + + + + +- ++ + Start / pause / resume video playback + + +@@ -23907,20 +23835,16 @@ Exit now, accept once or ignore completely? + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ + Remaining + + + + +- ++ + Volume + + +@@ -23965,286 +23889,261 @@ Exit now, accept once or ignore completely? + + + +- ++ + Mute / unmute audio output + + + +- ++ + Volume level + + + +- ++ + Video progress + + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ + Current buffer fill level: %1% + + + +- +- ++ ++ + Play this video + + + +- +- +- ++ ++ ++ + Copy video URL + + + +- +- +- ++ ++ ++ + Copy video URL (no country filter) + + + +- +- +- ++ ++ ++ + Copy author URL + + + +- +- ++ ++ + Paste video URL + + + +- +- ++ ++ + Local movie file... + + + +- ++ + Remove selected videos + + + +- +- +- ++ ++ + Full screen (return with toggle-key) + + + +- +- ++ ++ + Attach this video + + + +- ++ + Auto-suggest a search pattern? + + + +- ++ + Auto-suggest + + + +- ++ + Enter string to be appended + + + +- ++ + Append... + + + +- ++ + Enter search string + + + +- ++ + Appended string + + + +- ++ + Enter the string to be appended when suggesting a pattern: + + + +- ++ + Valid placeholder macros: + + + +- +- ++ ++ + All files (*) + All files (*) + + +- +- ++ ++ + Choose movie file + + + +- +- ++ + Full-screen mode -- press %1 to return to windowed mode + + + +- +- ++ + Full-screen mode -- press toggle-key to return to windowed mode + + + +- ++ + video player: the local movie file '%1' is already attached, ignored + + + +- ++ + video player: a video with the ID '%1' is already attached, ignored + + + +- ++ + Buffering: %1% + + + +- +- Loading +- +- +- +- +- ++ + Playing + + + +- +- ++ + Paused + + + +- +- video player: playback error: %1 +- +- +- +- +- Video playback error: %1 +- +- +- +- ++ + Fetching info for video ID '%1' + + + +- ++ + video player: video info error: ID = '%1', status = '%2', errorCode = '%3', errorText = '%4' + + + +- +- +- ++ ++ ++ + Video info error: %1 + + + +- ++ + video player: video info error: timeout occurred + + + +- ++ + video info error: timeout occurred + + + +- ++ + video info error: unknown reason + + + +- ++ + video player: video info error: %1 + + + +- +- ++ + Return to windowed mode + + + +- +- ++ + Full screen (press %1 to return) + + + +- ++ + video player: video image info error: %1 + + + +- ++ + video player: search request error: %1 + + + +- ++ + video player: search error: can't parse XML data + + + +- ++ + video player: can't determine the video ID from the reply URL '%1' -- please inform developers + + + +- ++ + video player: can't associate the returned image for video ID '%1' -- please inform developers + + + +- ++ + video player: can't save the image for video ID '%1' to the YouTube cache directory '%2' -- please check permissions + + + +- ++ + video player: can't save the image for video ID '%1', the YouTube cache directory '%2' does not exist -- please correct + + + +- ++ + video player: image download failed for video ID '%1', retrieved image is not valid + + + +- ++ + video player: image download failed for video ID '%1', error text = '%2' + + +diff --git a/qmc2.pro b/qmc2.pro +index 15eae4c44..acdad9d33 100644 +--- a/qmc2.pro ++++ b/qmc2.pro +@@ -297,6 +297,7 @@ TRANSLATIONS += data/lng/qmc2_de.ts \ + data/lng/qmc2_it.ts \ + data/lng/qmc2_pl.ts \ + data/lng/qmc2_pt.ts \ ++ data/lng/qmc2_pt_BR.ts \ + data/lng/qmc2_ro.ts \ + data/lng/qmc2_sv.ts \ + data/lng/qmc2_us.ts +diff --git a/src/arcade/arcadesettings.cpp b/src/arcade/arcadesettings.cpp +index 2e0f3be3b..5b5b2e9e2 100644 +--- a/src/arcade/arcadesettings.cpp ++++ b/src/arcade/arcadesettings.cpp +@@ -26,6 +26,8 @@ ArcadeSettings::ArcadeSettings(QString theme) + languageMap["sv"] = QLocale::Swedish; + languageMap["us"] = QLocale::English; + ++ countryMap["pt_BR"] = QLocale::Brazil; ++ + // theme-specific default values (add only if different from global default) + m_themeDefaults["darkone"]["sortByName"] = true; + +@@ -59,10 +61,27 @@ QLocale::Language ArcadeSettings::languageFromString(QString lang) + { + if ( languageMap.contains(lang) ) + return languageMap[lang]; +- else ++ else + return QLocale::English; + } + ++QString ArcadeSettings::countryToString(QLocale::Country country) ++{ ++ QString countryStr = countryMap.key(country); ++ if ( !countryStr.isEmpty() ) ++ return countryStr; ++ else ++ return "us"; ++} ++ ++QLocale::Country ArcadeSettings::countryFromString(QString country) ++{ ++ if ( countryMap.contains(country) ) ++ return countryMap[country]; ++ else ++ return QLocale::UnitedStates; ++} ++ + QString ArcadeSettings::keySequenceMapBaseKey() + { + return QString("Arcade/%1/keySequenceMap").arg(arcadeTheme); +diff --git a/src/arcade/arcadesettings.h b/src/arcade/arcadesettings.h +index b082d21f5..0c8ab93b9 100644 +--- a/src/arcade/arcadesettings.h ++++ b/src/arcade/arcadesettings.h +@@ -19,12 +19,17 @@ public: + QString frontEndPrefix; + QString emulatorPrefix; + QMap languageMap; ++ QMap countryMap; + + explicit ArcadeSettings(QString theme = QString()); + virtual ~ArcadeSettings(); + + QString languageToString(QLocale::Language); + QLocale::Language languageFromString(QString); ++ ++ QString countryToString(QLocale::Country); ++ QLocale::Country countryFromString(QString); ++ + QString keySequenceMapBaseKey(); + #if defined(QMC2_ARCADE_ENABLE_JOYSTICK) + QString joyFunctionMapBaseKey(); +diff --git a/src/arcade/main.cpp b/src/arcade/main.cpp +index 0d4140c81..b806d7ba2 100644 +--- a/src/arcade/main.cpp ++++ b/src/arcade/main.cpp +@@ -301,9 +301,11 @@ int main(int argc, char *argv[]) + QString language(globalConfig->defaultLanguage()); + if ( QMC2_ARCADE_CLI_LANG_VAL ) + language = QMC2_ARCADE_CLI_LANG; +- if ( !globalConfig->languageMap.contains(language) ) { ++ if ( !globalConfig->languageMap.contains(language) && !globalConfig->countryMap.contains(language) ) { + if ( QMC2_ARCADE_CLI_LANG_VAL ) { +- QMC2_ARCADE_LOG_STR_NT(QString("%1 is not a valid language - available languages: %2").arg(language).arg(QStringList(globalConfig->languageMap.keys()).join(", "))); ++ QStringList languages = globalConfig->languageMap.keys() + globalConfig->countryMap.keys(); ++ languages.sort(); ++ QMC2_ARCADE_LOG_STR_NT(QString("%1 is not a valid language - available languages: %2").arg(language).arg(languages.join(", "))); + delete globalConfig; + return 1; + } else +diff --git a/src/arcade/qmc2-arcade-common.qrc b/src/arcade/qmc2-arcade-common.qrc +index 84787a415..3a073012f 100644 +--- a/src/arcade/qmc2-arcade-common.qrc ++++ b/src/arcade/qmc2-arcade-common.qrc +@@ -9,6 +9,7 @@ + translations/qmc2-arcade_it.qm + translations/qmc2-arcade_pl.qm + translations/qmc2-arcade_pt.qm ++ translations/qmc2-arcade_pt_BR.qm + translations/qmc2-arcade_ro.qm + translations/qmc2-arcade_sv.qm + translations/qmc2-arcade_us.qm +diff --git a/src/arcade/qmc2-arcade.pro b/src/arcade/qmc2-arcade.pro +index d8aba30de..2ca1f9d5b 100644 +--- a/src/arcade/qmc2-arcade.pro ++++ b/src/arcade/qmc2-arcade.pro +@@ -168,6 +168,7 @@ TRANSLATIONS += translations/qmc2-arcade_de.ts \ + translations/qmc2-arcade_fr.ts \ + translations/qmc2-arcade_pl.ts \ + translations/qmc2-arcade_pt.ts \ ++ translations/qmc2-arcade_pt_BR.ts \ + translations/qmc2-arcade_ro.ts \ + translations/qmc2-arcade_sv.ts \ + translations/qmc2-arcade_us.ts +diff --git a/src/arcade/translations/qmc2-arcade_de.qm b/src/arcade/translations/qmc2-arcade_de.qm +index 7276efe7de7456245fd42864519068ae25208090..aeb16128c309ae95197fd4794332973ba3cb79a6 100644 +GIT binary patch +delta 2518 +zcmXAqdt8lq9>+iDoadb9Ip;j*Jn2fQ*vkDHrjT-pm_dXZNp~egC8ef3C70CM$SIXB +zVj5xwGm>_!d5udktldnC9d^nk+wQV6QH{$i_M6{d@89!#ewXj%^Zouxe^UO|rrc*O +z&jhd;$eGMobraxPfsGFti)BFV4Y +z-Z5^krSVm|N5fdP9GcpEKrTsPgNk-&-h=|HJHVHJ4wQ8>9@-7N5?4C(1U~+#7+9ak +znC1Zg>oo7Fz>12YWb9Q0Kbr!W&LSkIo-S!&%szwIdzXRjt%&y_u0D&zQC+~^R&2hJ +z0U4#{4+B&ULRzUCT^z$$^&Fq+={syZa%KeqBNwBjhyy};QQcMqEa}0?O7e1zGwO%D +z1R@-8A!ZzqT*a7m0vFxC0S27L7Nq?COK%{k +zNqM!z0a#_L{O^P7K+GNG^Fnfv6P10@X{3!tWnafnz>fJU!AbH3R=TTZHY#g`DbrN;MGpEobF^7I16hTm&1^ZX`E6V!Z1`$D +zFI1~CsgyP;88ckfOKm38`apH;*HkedCp5A_X0SR<6-0HKti{Xh5G^b2+ft+ +zT#`qI=0};*xid)9^|F9uQlshKVNDf_4|GAcCGT>H^fgN0r+D?zk0O5R+igI=V}4qA +zGUeaL?5K8<%gXtv33TtFF?>v6F~w&RZ#v!xjOKV#a|6jGg)j8(B(YxMkEZd!fpo_5 +z8~k_46dw17{2ecfbM;F8)l(|mMYs4j2HHQrUQpj77DNbwpA`^wO0bWodyJ=q!KDen +z++T!|Vl;J*89u_|Gh|O@3{_`2T1N +zyl8#wGi}onJL;i-)?TwYPK6q*efEYjW%Ad)80A6pQQDXOv~R3RH&i+T6#FtBtkRAD +zY7vDnc>@iISxLG%_vvCgU)|h)chgIdr(4)U9$5WB=YJp?m~>bd{CG3<$RypGqid*v +zH0a{;8-e}#y13sviMPxK-bvo$sXKY?EOn}}x{KMnfe{mR?YV)#aINk^LnR4djqb5; +z3kBAJv3!``BFh3;_(1RYgpQ3))4SR)0Lt_Aqh~*)cm(S=S=lO_MkY^g)XoiBKqwoX{?sTfIzAd@0Ua}py-bHX-ojU88zbh +zLO*~{7yrUj3tJn`nBpq_cU85-Qk+tFruSp~= +zdxLF}3$SZ~VS1lj0(c}CeEKuCyvH!ho-B9iHTWNY0nG9?EOqh)CR7>%r@aLhHyGlM +z9HO3L%~)Ar*z}e{Jh8!$^yn}dKF)Aro(G_rVR#&71^Asd^e!Z&s6g9q#7G7rD8ZNDA +zB`q!Ol2Y5Kn*>Hk>F!Lw?VUmcDm301Lj6 +zZn{1vZLX7k_t*@KTP3~we6EpRDfc+)RmGH4xSIFvw5c=cxY>0Hi<%tjcEz0@Raa1? +G8~A_0*y)x4 + +delta 2847 +zcmZ{mX;f2Z8pr=hZjzgun*;>}MIZ{eAn33tE(i)LYN;rSC?XPBqoC{vh+(T@KrEZc +zDhTd%si<^1&Jh)KY#pg0Ztb8QvCfRnsSDIf$2yPRo_^>#e&GDx+;@4N_x~&}KlO-r +z-xYsqW>^6r87PPn*ti^EZUPBI1y(5lX#kLTRp6FT;G?C$hV=ro9thlZNMP+7U|AC2 +zOJ}UP2&7LEn12^Yy+n3A1n%jD>|haKsD?0Th=pu0j24?fUfT@RW(sT?0*fkpAjpV? +zQ!0VDy#h1+5padRPZc4kZWK9t2_a7>10`Mv%|A_sB?9vvBIe!&GAu>BH!-XNiH?tf +z(l8`{wHXG~Sic`&Pct%hI{-D$1U65SauAc)#j^jcbt*@Mej_I_2`5pAmPXtVRao<*K0Nfco +zD|VrqPZh~dwgOF!B5Q|@q`+Z;O@1Ql+a#yxwrI?|`I2nW?5r*dQHQ|nVo_Y9D>*Vm +zv|$9vYrj*}(%Axdc8V^VQ5a(jM3*=904ozkUrGCDU7P577de#NL^ROAuv2s^`p-bV +zx#-6MI$&6V=+~usAZC=9>rV%aVPdb9-hjn3aaeReD|$ +zd0g>SGLL;kQZ)*!2`oP<9%HE3C)r-qNdl!wiv0>GzcM5T^k#srPIAUu0xa&9d=t16 +zND&D%3`lY +zE}Et%^D^si`~a(PSxh5^v*wV%MujZi)*jfUlqHS33}{Zv%H9=1gsZIOz;mbM0Oj`$fHXuNuNl0u5%#iJ3?N3r~{b5$cww$ +zC~XeNOTGFiX)nt6XUKuwjKKP3^1r5#Os?O{Z+Vj5O%LTiKcNC%bV5F;qWudhS?N9E +z&L=GEX9`5#XGg@7J@qkmCjB>8EyWHU!Hz&bO5>AggIGPqJ; +z{c*Nh(+4<-+1k8#%3D`<@9R`R@)>(_JjH3sYPQu71MF~N&*UWnLu1)9MiF2#z@D{y +zLG_f%KHqOm^|t06sqiu-3XPnUb8%4EA9Vx#ZYbibDI>zW6p1%<6uA^dif21D=2ME) +z)5}PSdx{LEg<9BfMX_HGFzG*v5>HyMw^np6wxC}67sX}sLsa-hil>7Vu^o36FC0DS +zdxYXu0PS;@aHBMPDdN|N1{&0j<0gGZ5~kJ*%x&g;za_&KbGW(xeg^ojTO3f9WHJaGU(d(C7}Xuz?iucH_1mc??XG +zaMfzEW4yo}y?lyVnTl&SCGM2GUc9@Y|Iqe$CIaqw|Mp4ZL3&Nffq*4_r=F_7-H>kEW +zXMi#FYPX`>RE3I{>Y2S3z+4}7$j}0yXp4H4krqq~RmY9|oE$i(HsrQYo4KYon$v}x +zx2la+G+(G!7avO^2aE#ie^7s#O@gsG>UNJI6u~le_r!F7pP}yic`h~oKJ`oA0D3l~ +z1sWD_G +zN$;V46Fgg!`L>b{b`)3@r`g=rPZ#=^=15f+84eS;<$~tKEmCGyq~@HhirRIl=BoYZ +z=ai%iHN7^}Pqv@a{Nj-eOkAb;wV4dZN9cjQwyhzYjZb;qN8_xMp@kokphGnDSPy3` +zMF#!%mx3t7mwPX?GJJ5BR!pbe4sd0uY$2mR9|sq$K3ThAV~SR%P1D8cBegL}x`bGL +zM6z>oMsiA2yw+K(OVjD&bZg_H{y3LBUF+Z~r(@(x0@kjJilE0EXifLOWHoE_hn@V* +s376lUF#Ur`I@P7sDYo6weZ+@P`F*#>?>C3Fg2UyxB@V4m%Q(yb1JL_6HUIzs + +diff --git a/src/arcade/translations/qmc2-arcade_de.ts b/src/arcade/translations/qmc2-arcade_de.ts +index 785f263a2..658033ec9 100644 +--- a/src/arcade/translations/qmc2-arcade_de.ts ++++ b/src/arcade/translations/qmc2-arcade_de.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + WARNUNG: DAT-Info Datenbank '%1' konnte nicht geöffnet werden: Fehler = '%2' + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + WARNUNG: '%1' konnte nicht von der DAT-Info Datenbank gelesen werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + WARNUNG: '%1' konnte nicht zur DAT-Info Datenbank hinzugefügt werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + WARNUNG: '%1' konnte nicht in der DAT-Info Datenbank geändert werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + WARNUNG: Anzahl der Tabellenzeilen konnte nicht aus der DAT-Info Datenbank ermittelt werden: Abfrage = '%1', Fehler = '%2' + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + WARNUNG: Die Einstellung '%1' konnte in der DAT-Info Datenbank nicht verändert werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + WARNUNG: %1 Tabelle konnte nicht entfernt werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- ++ ++ ++ ++ + software-info + Software-Info + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + WARNUNG: %1 Tabelle konnte nicht erstellt werden: Abfrage = '%2', Fehler = '%3' + + +- +- +- +- ++ ++ ++ ++ + emu-info + Emu-Info + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + Maschinen-Info + + +- +- ++ ++ + meta-data + Meta-Daten + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + DAT-Info Datenbank + + +- +- +- ++ ++ ++ + importing %1 from '%2' + Importiere %1 von '%2' + + +- +- ++ ++ + software info-texts + Software Info-Texte + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + Fertig (Importiere %1 von '%2') + + +- ++ + WARNING: can't open software info file '%1' + WARNUNG: kann Software Info Datei '%1' nicht öffnen + + +- ++ + %n software info record(s) imported + + %n Software Info Datensatz importiert +@@ -192,33 +192,33 @@ + + + +- +- ++ ++ + emulator info-texts + Emulator Info-Texte + + +- ++ + WARNING: missing '$end' in emulator info file %1 + WARNUNG: '$end' fehlt in Emulator Info Datei %1 + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + WARNUNG: '$mame' fehlt in Emulator Info Datei %1 + + +- ++ + WARNING: missing '$info' in emulator info file %1 + WARNUNG: '$info' fehlt in Emulator Info Datei %1 + + +- ++ + WARNING: can't open emulator info file %1 + WARNUNG: kann Emulator Info Datei '%1' nicht öffnen + + +- ++ + %n emulator info record(s) imported + + %n Emulator Info Datensatz importiert +@@ -226,33 +226,33 @@ + + + +- +- ++ ++ + system info-texts + System Info-Texte + + +- ++ + WARNING: missing '$end' in machine info file %1 + WARNUNG: '$end' fehlt in Maschinen Info Datei %1 + + +- ++ + WARNING: missing '$bio' in machine info file %1 + WARNUNG: '$bio' fehlt in Maschinen Info Datei %1 + + +- ++ + WARNING: missing '$info' in machine info file %1 + WARNUNG: '$info' fehlt in Maschinen Info Datei %1 + + +- ++ + WARNING: can't open machine info file %1 + WARNUNG: kann Maschinen Info Datei '%1' nicht öffnen + + +- ++ + %n machine info record(s) imported + + %n Maschinen Info Datensatz importiert +@@ -260,9 +260,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + WARNUNG: %1 Tabelle konnte nicht geändert werden: Abfrage = '%2', Fehler = '%3' + +@@ -336,23 +336,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + WARNUNG: kann %1 ZIP Datei '%2' nicht öffnen + + +- ++ + WARNING: Can't open %1 7z file '%2' + WARNUNG: kann %1 7z Datei '%2' nicht öffnen + + +- ++ + WARNING: Can't open %1 archive file '%2' + WARNUNG: kann %1 Archiv Datei '%2' nicht öffnen + + +- +- ++ ++ + Decompressing archive, please wait... + Dekomprimiere Archiv, bitte warten... + +@@ -378,7 +378,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + Joystick-Funktion '%1' ausgelöst - emuliere Event für zugeordnete Tasten-Sequenz '%2' + +@@ -386,24 +386,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + Tasten-Sequenz '%1' %2 - emuliere Event für zugeordnete Tasten-Sequenz '%3' + + +- +- ++ ++ + pressed + gedrückt + + +- +- ++ ++ + released + losgelassen + + +- ++ + key-sequence '%1' %2 - default event processing + Tasten-Sequenz '%1' %2 - Standard Event Verarbeitung + +@@ -411,22 +411,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + Lade Konfigurationsvorlage von '%1' + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + FATAL: XML Fehler beim Lesen der Vorlage: '%1' in Datei '%2' in Zeile %3, Spalte %4 + + +- ++ + Done (loading configuration template from '%1') + Fertig (Lade Konfigurationsvorlage von '%1') + + +- ++ + %n option(s) loaded + + %n Option geladen +@@ -434,169 +434,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + FATAL: Kann die Konfigurationsvorlage-Datei nicht öffnen: Grund = %1 + + +- ++ + No error occurred + Kein Fehler aufgetreten + + +- ++ + An error occurred when reading from the file + Beim Lesen der Datei ist ein Fehler aufgetreten + + +- ++ + An error occurred when writing to the file + Beim Schreiben der Datei ist ein Fehler aufgetreten + + +- ++ + A fatal error occurred + Ein fataler Fehler ist aufgetreten + + +- ++ + A resource error occurred + Ein Ressource-Fehler ist aufgetreten + + +- ++ + The file could not be opened + Die Datei konnte nicht geöffnet werden + + +- ++ + The operation was aborted + Die Operation wurde abgebrochen + + +- +- ++ ++ + A timeout occurred + Eine Zeitüberschreitung ist aufgetreten + + +- ++ + An unspecified error occurred + Ein unspezifischer Fehler ist aufgetreten + + +- ++ + The file could not be removed + Die Datei konnte nicht entfernt werden + + +- ++ + The file could not be renamed + Die Datei konnte nicht umbenannt werden + + +- ++ + The position in the file could not be changed + Die Position in der Datei konnte nicht verändert werden + + +- ++ + The file could not be resized + Die Größe der Datei konnte nicht geändert werden + + +- ++ + The file could not be accessed + Auf die Datei konnte nicht zugegriffen werden + + +- ++ + The file could not be copied + Die Datei konnte nicht kopiert werden + + +- +- ++ ++ + An unknown error occurred + Ein unbekannter Fehler ist aufgetreten + + +- ++ + The process failed to start + Der Prozess konnte nicht gestartet werden + + +- ++ + The process crashed + Der Prozess ist abgestürzt + + +- ++ + An error occurred when attempting to write to the process + Beim Versuch an den Prozess zu schreiben ist ein Fehler aufgetreten + + +- ++ + An error occurred when attempting to read from the process + Beim Versuch vom Prozess zu lesen ist ein Fehler aufgetreten + + +- ++ + Not running + Wird nicht ausgeführt + + +- ++ + Starting + Programm wird gestartet + + +- ++ + Running + Wird ausgeführt + + +- ++ + Unknown + Unbekannt + + +- ++ + Emulator #%1 error: reason = %2 + Emulator #%1 Fehler: Grund = %2 + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + Emulator #%1 beendet: exitCode = %2, exitStatus = %3 + + +- ++ + normal + normal + + +- ++ + crashed + abgestürzt + + +- ++ + Emulator #%1 stdout: %2 + Emulator #%1 stdout: %2 + + +- ++ + Emulator #%1 stderr: %2 + Emulator #%1 stderr: %2 + + +- ++ + Emulator #%1 started + Emulator #%1 gestartet + + +- ++ + Emulator #%1 state changed: newState = %2 + Emulator #%1 Statusänderung: newState = %2 + +@@ -604,59 +604,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + WARNUNG: ImageProvider::loadImage(): Falsche Bild ID '%1' angefragt + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + WARNUNG: ImageProvider::loadImage(): Kann Bild Datei '%1' nicht aus ZIP laden + + +- ++ + preview + Vorschau + + +- ++ + flyer + Flyer + + +- ++ + cabinet + Gehäuse + + +- ++ + controller + Controller + + +- ++ + marquee + Marquee + + +- ++ + title + Titel + + +- ++ + PCB + PCB + + +- ++ + software snapshot + Software Snapshot + + +- ++ + icon + Icon + +@@ -666,82 +666,72 @@ + QMC2 Arcade + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- %1 ist kein gültiges Grafik-System - verfügare Grafik-Systeme: %2 +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + %1 ist kein gültiger Emulator-Modus - verfügare Emulator-Modi: %2 + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + %1 ist kein gültiger Konsolen-Modus - verfügare Konsolen-Modi: %2 + + +- ++ + %1 is not valid theme - available themes: %2 + %1 ist kein gültiger Theme - verfügare Themes: %2 + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + %1 ist kein gültiger %2 Theme - verfügare %2 Themes: %3 + + +- ++ + (none) + (keine) + + +- ++ + emulator-mode: %1 + Emulator-Modus: %1 + + +- ++ + language: %1 + Sprache: %1 + + +- ++ + theme: %1 + Theme: %1 + + +- +- graphics-system: %1 +- Grafik-System: %1 +- +- +- ++ + console-mode: %1 + Konsolen-Modus: %1 + + +- ++ + Starting QML viewer using theme '%1' + Starte QML Anzeige unter Verwendung des Themes '%1' + + +- ++ + video snaps %1 + Video Snap %1 + + +- ++ + enabled + aktiviert + + +- ++ + disabled + deaktiviert + + +- ++ + QML viewer not started - please close the console window to exit + QML Anzeige nicht gestartet - bitte Konsolenfenster schließen um das Programm zu beenden + +@@ -1066,7 +1056,8 @@ + + + +- ++ ++ + can't open archive '%1' + kann Archiv '%1' nicht öffnen + +@@ -1531,126 +1522,121 @@ QMC2 Arcade neu starten! + + TweakedQmlApplicationViewer + +- ++ + Theme + Theme + + +- +- Graphics system +- Grafik-System +- +- +- ++ + Console mode + Konsolen-Modus + + +- ++ + Language + Sprache + + +- ++ + Video snaps + Video Snaps + + +- ++ + Loading global and theme-specific settings + Lade globale und Themen-spezifische Einstellungen + + +- ++ + Saving global and theme-specific settings + Speichere globale und Themen-spezifische Einstellungen + + +- ++ + Activating full-screen display + Aktiviere Vollbild-Darstellung + + +- ++ + Activating windowed display + Aktiviere Fenster-Darstellung + + +- ++ + correct + korrekt + + +- ++ + mostly correct + beinahe korrekt + + +- ++ + incorrect + inkorrekt + + +- ++ + not found + nicht gefunden + + +- ++ + unknown + unbekannt + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + WARNUNG: Die gefilterte Listen-Datei '%1' existiert nicht oder kann nicht geöffnet werden, verwende stattdessen die volle %2 + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + Maschinenliste + + +- ++ + machine + Maschine + + +- ++ + Loading %1 from '%2' + Lade %1 von '%2' + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + WARNUNG: Kann ROM Status Cache Datei '%1' nicht öffnen, bitte Zugriffsrechte prüfen + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + WARNUNG: Die ROM Status Cache Datei '%1' existiert nicht, bitte Haupt-Frontend ausführen um diese zu erstellen + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + FATAL: Kann die %1-Cache Datei '%2' nicht öffnen, bitte Zugriffsrechte prüfen + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + FATAL: Die %1-Cache Datei '%2' existiert nicht, bitte Haupt-Frontend ausführen um diese zu erstellen + + +- ++ + Done (loading %1 from '%2') + Fertig (Lade '%1' von '%2') + + +- ++ + %n non-device set(s) loaded + + %n unterstütztes Set (ohne Geräte-Sets) +@@ -1658,30 +1644,28 @@ QMC2 Arcade neu starten! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + Starte Emulator #%1 für %2 mit der ID '%3' + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + WARNUNG: TweakedQmlApplicationViewer::requestInfo(): Nicht unterstützte Info-Klasse '%1' + + +- +- ++ ++ + no info available + Keine Daten verfügbar + + +- +- ++ + Stopping QML viewer + Beende QML Viewer + + +- +- ++ + QML viewer stopped - please close the console window to exit + QML Viewer gestoppt - bitte zum Beenden Konsolenfenster schließen + +diff --git a/src/arcade/translations/qmc2-arcade_el.ts b/src/arcade/translations/qmc2-arcade_el.ts +index da5f6c3ed..5336973a7 100644 +--- a/src/arcade/translations/qmc2-arcade_el.ts ++++ b/src/arcade/translations/qmc2-arcade_el.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + WARNING: can't open software info file '%1' + + + +- ++ + %n software info record(s) imported + + +@@ -192,33 +192,33 @@ + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + WARNING: can't open emulator info file %1 + + + +- ++ + %n emulator info record(s) imported + + +@@ -226,33 +226,33 @@ + + + +- +- ++ ++ + system info-texts + + + +- ++ + WARNING: missing '$end' in machine info file %1 + + + +- ++ + WARNING: missing '$bio' in machine info file %1 + + + +- ++ + WARNING: missing '$info' in machine info file %1 + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -260,9 +260,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + +@@ -336,23 +336,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + + + +- ++ + WARNING: Can't open %1 7z file '%2' + + + +- ++ + WARNING: Can't open %1 archive file '%2' + + + +- +- ++ ++ + Decompressing archive, please wait... + + +@@ -378,7 +378,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + + +@@ -386,24 +386,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + + + +- +- ++ ++ + pressed + + + +- +- ++ ++ + released + + + +- ++ + key-sequence '%1' %2 - default event processing + + +@@ -411,22 +411,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + + + +- ++ + Done (loading configuration template from '%1') + + + +- ++ + %n option(s) loaded + + +@@ -434,169 +434,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + + + +- ++ + No error occurred + + + +- ++ + An error occurred when reading from the file + + + +- ++ + An error occurred when writing to the file + + + +- ++ + A fatal error occurred + + + +- ++ + A resource error occurred + + + +- ++ + The file could not be opened + + + +- ++ + The operation was aborted + + + +- +- ++ ++ + A timeout occurred + + + +- ++ + An unspecified error occurred + + + +- ++ + The file could not be removed + + + +- ++ + The file could not be renamed + + + +- ++ + The position in the file could not be changed + + + +- ++ + The file could not be resized + + + +- ++ + The file could not be accessed + + + +- ++ + The file could not be copied + + + +- +- ++ ++ + An unknown error occurred + + + +- ++ + The process failed to start + + + +- ++ + The process crashed + + + +- ++ + An error occurred when attempting to write to the process + + + +- ++ + An error occurred when attempting to read from the process + + + +- ++ + Not running + + + +- ++ + Starting + + + +- ++ + Running + + + +- ++ + Unknown + + + +- ++ + Emulator #%1 error: reason = %2 + + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + + + +- ++ + normal + + + +- ++ + crashed + + + +- ++ + Emulator #%1 stdout: %2 + + + +- ++ + Emulator #%1 stderr: %2 + + + +- ++ + Emulator #%1 started + + + +- ++ + Emulator #%1 state changed: newState = %2 + + +@@ -604,59 +604,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + + + +- ++ + preview + + + +- ++ + flyer + + + +- ++ + cabinet + + + +- ++ + controller + + + +- ++ + marquee + + + +- ++ + title + + + +- ++ + PCB + + + +- ++ + software snapshot + + + +- ++ + icon + + +@@ -666,82 +666,72 @@ + + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + + + +- ++ + %1 is not valid theme - available themes: %2 + + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + + + +- ++ + (none) + + + +- ++ + emulator-mode: %1 + + + +- ++ + language: %1 + + + +- ++ + theme: %1 + + + +- +- graphics-system: %1 +- +- +- +- ++ + console-mode: %1 + + + +- ++ + Starting QML viewer using theme '%1' + + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + + +@@ -1066,7 +1056,8 @@ + + + +- ++ ++ + can't open archive '%1' + + +@@ -1527,126 +1518,121 @@ take effect, please restart QMC2 Arcade! + + TweakedQmlApplicationViewer + +- ++ + Theme + + + +- +- Graphics system +- +- +- +- ++ + Console mode + + + +- ++ + Language + + + +- ++ + Video snaps + + + +- ++ + Loading global and theme-specific settings + + + +- ++ + Saving global and theme-specific settings + + + +- ++ + Activating full-screen display + + + +- ++ + Activating windowed display + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + unknown + + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + + + +- ++ + machine + + + +- ++ + Loading %1 from '%2' + + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + + + +- ++ + Done (loading %1 from '%2') + + + +- ++ + %n non-device set(s) loaded + + +@@ -1654,30 +1640,28 @@ take effect, please restart QMC2 Arcade! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + + + +- +- ++ ++ + no info available + + + +- +- ++ + Stopping QML viewer + + + +- +- ++ + QML viewer stopped - please close the console window to exit + + +diff --git a/src/arcade/translations/qmc2-arcade_es.ts b/src/arcade/translations/qmc2-arcade_es.ts +index 35f7859b3..ab7861c56 100644 +--- a/src/arcade/translations/qmc2-arcade_es.ts ++++ b/src/arcade/translations/qmc2-arcade_es.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + WARNING: can't open software info file '%1' + + + +- ++ + %n software info record(s) imported + + +@@ -192,33 +192,33 @@ + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + WARNING: can't open emulator info file %1 + + + +- ++ + %n emulator info record(s) imported + + +@@ -226,33 +226,33 @@ + + + +- +- ++ ++ + system info-texts + + + +- ++ + WARNING: missing '$end' in machine info file %1 + + + +- ++ + WARNING: missing '$bio' in machine info file %1 + + + +- ++ + WARNING: missing '$info' in machine info file %1 + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -260,9 +260,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + +@@ -336,23 +336,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + + + +- ++ + WARNING: Can't open %1 7z file '%2' + + + +- ++ + WARNING: Can't open %1 archive file '%2' + + + +- +- ++ ++ + Decompressing archive, please wait... + Descomprimiendo archivo, por favor espere... + +@@ -378,7 +378,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + + +@@ -386,24 +386,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + + + +- +- ++ ++ + pressed + + + +- +- ++ ++ + released + + + +- ++ + key-sequence '%1' %2 - default event processing + + +@@ -411,22 +411,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + Cargando la plantilla de configuración desde '%1' + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + ERROR: fallo XML leyendo plantilla: %1 en archivo '%2' en la línea %3, columna %4 + + +- ++ + Done (loading configuration template from '%1') + Hecho (cargando la plantilla de configuración desde '%1') + + +- ++ + %n option(s) loaded + + %n opción cargada +@@ -434,169 +434,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + ERROR: No se puede abrir el archivo de plantilla de configuración: razón = %1 + + +- ++ + No error occurred + Sin errores + + +- ++ + An error occurred when reading from the file + Ocurrió un error al leer el archivo + + +- ++ + An error occurred when writing to the file + Ocurrió un error al escribir el archivo + + +- ++ + A fatal error occurred + Ocurrió un error fatal + + +- ++ + A resource error occurred + Ocurrió un error de recursos + + +- ++ + The file could not be opened + El archivo no se pudo abrir + + +- ++ + The operation was aborted + La operación fue cancelada + + +- +- ++ ++ + A timeout occurred + Tiempo de espera agotado + + +- ++ + An unspecified error occurred + Ocurrió un error sin especificar + + +- ++ + The file could not be removed + El archivo no pudo ser eliminado + + +- ++ + The file could not be renamed + El archivo no pudo ser renombrado + + +- ++ + The position in the file could not be changed + La posición en el archivo no pudo ser cambiada + + +- ++ + The file could not be resized + El archivo no se pudo cambiar de tamaño + + +- ++ + The file could not be accessed + No se pudo acceder al archivo + + +- ++ + The file could not be copied + El archivo no pudo ser copiado + + +- +- ++ ++ + An unknown error occurred + Ocurrió un error desconocido + + +- ++ + The process failed to start + El proceso no pudo iniciarse + + +- ++ + The process crashed + El proceso falló + + +- ++ + An error occurred when attempting to write to the process + Ocurrió un error al intentar acceder al proceso + + +- ++ + An error occurred when attempting to read from the process + Ocurrió un error al intentar leer el proceso + + +- ++ + Not running + Parado + + +- ++ + Starting + Iniciando + + +- ++ + Running + Ejecutando + + +- ++ + Unknown + Desconocido + + +- ++ + Emulator #%1 error: reason = %2 + Emulador #%1 error: razón = %2 + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + Emulador #%1 finalizado: exitCode = %2, exitStatus = %3 + + +- ++ + normal + + + +- ++ + crashed + caído + + +- ++ + Emulator #%1 stdout: %2 + Emulador #%1 stdout: %2 + + +- ++ + Emulator #%1 stderr: %2 + Emulador #%1 stderr: %2 + + +- ++ + Emulator #%1 started + Emulador #%1 iniciado + + +- ++ + Emulator #%1 state changed: newState = %2 + Emulador #%1 estado cambiado: newState = %2 + +@@ -604,59 +604,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + + + +- ++ + preview + previsualización + + +- ++ + flyer + flyer + + +- ++ + cabinet + Cabina + + +- ++ + controller + Mando + + +- ++ + marquee + Marquesina + + +- ++ + title + título + + +- ++ + PCB + + + +- ++ + software snapshot + instantánea de software + + +- ++ + icon + icono + +@@ -666,82 +666,72 @@ + + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + + + +- ++ + %1 is not valid theme - available themes: %2 + %1 no es un tema válido -- temas disponibles: %2 + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + %1 no es un tema %2 válido - temas %2 disponibles: %3 + + +- ++ + (none) + (ninguno) + + +- ++ + emulator-mode: %1 + + + +- ++ + language: %1 + + + +- ++ + theme: %1 + tema: %1 + + +- +- graphics-system: %1 +- +- +- +- ++ + console-mode: %1 + + + +- ++ + Starting QML viewer using theme '%1' + Iniciando el visor QML usando tema '%1' + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + Visor QML no iniciado - por vaor cierra la ventana de la consola para salir + +@@ -1066,7 +1056,8 @@ + + + +- ++ ++ + can't open archive '%1' + + +@@ -1527,126 +1518,121 @@ take effect, please restart QMC2 Arcade! + + TweakedQmlApplicationViewer + +- ++ + Theme + + + +- +- Graphics system +- +- +- +- ++ + Console mode + + + +- ++ + Language + + + +- ++ + Video snaps + + + +- ++ + Loading global and theme-specific settings + + + +- ++ + Saving global and theme-specific settings + + + +- ++ + Activating full-screen display + + + +- ++ + Activating windowed display + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + unknown + + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + + + +- ++ + machine + + + +- ++ + Loading %1 from '%2' + + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + + + +- ++ + Done (loading %1 from '%2') + + + +- ++ + %n non-device set(s) loaded + + +@@ -1654,30 +1640,28 @@ take effect, please restart QMC2 Arcade! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + + + +- +- ++ ++ + no info available + + + +- +- ++ + Stopping QML viewer + + + +- +- ++ + QML viewer stopped - please close the console window to exit + + +diff --git a/src/arcade/translations/qmc2-arcade_fr.ts b/src/arcade/translations/qmc2-arcade_fr.ts +index 4160eeef6..05b01f459 100644 +--- a/src/arcade/translations/qmc2-arcade_fr.ts ++++ b/src/arcade/translations/qmc2-arcade_fr.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + WARNING: can't open software info file '%1' + + + +- ++ + %n software info record(s) imported + + +@@ -192,33 +192,33 @@ + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + WARNING: can't open emulator info file %1 + + + +- ++ + %n emulator info record(s) imported + + +@@ -226,33 +226,33 @@ + + + +- +- ++ ++ + system info-texts + + + +- ++ + WARNING: missing '$end' in machine info file %1 + + + +- ++ + WARNING: missing '$bio' in machine info file %1 + + + +- ++ + WARNING: missing '$info' in machine info file %1 + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -260,9 +260,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + +@@ -336,23 +336,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + + + +- ++ + WARNING: Can't open %1 7z file '%2' + + + +- ++ + WARNING: Can't open %1 archive file '%2' + + + +- +- ++ ++ + Decompressing archive, please wait... + + +@@ -378,7 +378,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + + +@@ -386,24 +386,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + + + +- +- ++ ++ + pressed + + + +- +- ++ ++ + released + + + +- ++ + key-sequence '%1' %2 - default event processing + + +@@ -411,22 +411,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + + + +- ++ + Done (loading configuration template from '%1') + + + +- ++ + %n option(s) loaded + + +@@ -434,169 +434,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + + + +- ++ + No error occurred + + + +- ++ + An error occurred when reading from the file + + + +- ++ + An error occurred when writing to the file + + + +- ++ + A fatal error occurred + + + +- ++ + A resource error occurred + + + +- ++ + The file could not be opened + + + +- ++ + The operation was aborted + + + +- +- ++ ++ + A timeout occurred + + + +- ++ + An unspecified error occurred + + + +- ++ + The file could not be removed + + + +- ++ + The file could not be renamed + + + +- ++ + The position in the file could not be changed + + + +- ++ + The file could not be resized + + + +- ++ + The file could not be accessed + + + +- ++ + The file could not be copied + + + +- +- ++ ++ + An unknown error occurred + + + +- ++ + The process failed to start + + + +- ++ + The process crashed + + + +- ++ + An error occurred when attempting to write to the process + + + +- ++ + An error occurred when attempting to read from the process + + + +- ++ + Not running + + + +- ++ + Starting + + + +- ++ + Running + + + +- ++ + Unknown + + + +- ++ + Emulator #%1 error: reason = %2 + + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + + + +- ++ + normal + + + +- ++ + crashed + + + +- ++ + Emulator #%1 stdout: %2 + + + +- ++ + Emulator #%1 stderr: %2 + + + +- ++ + Emulator #%1 started + + + +- ++ + Emulator #%1 state changed: newState = %2 + + +@@ -604,59 +604,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + + + +- ++ + preview + + + +- ++ + flyer + + + +- ++ + cabinet + + + +- ++ + controller + + + +- ++ + marquee + + + +- ++ + title + + + +- ++ + PCB + + + +- ++ + software snapshot + + + +- ++ + icon + + +@@ -666,82 +666,72 @@ + + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + + + +- ++ + %1 is not valid theme - available themes: %2 + + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + + + +- ++ + (none) + + + +- ++ + emulator-mode: %1 + + + +- ++ + language: %1 + + + +- ++ + theme: %1 + + + +- +- graphics-system: %1 +- +- +- +- ++ + console-mode: %1 + + + +- ++ + Starting QML viewer using theme '%1' + + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + + +@@ -1066,7 +1056,8 @@ + + + +- ++ ++ + can't open archive '%1' + + +@@ -1527,126 +1518,121 @@ take effect, please restart QMC2 Arcade! + + TweakedQmlApplicationViewer + +- ++ + Theme + + + +- +- Graphics system +- +- +- +- ++ + Console mode + + + +- ++ + Language + + + +- ++ + Video snaps + + + +- ++ + Loading global and theme-specific settings + + + +- ++ + Saving global and theme-specific settings + + + +- ++ + Activating full-screen display + + + +- ++ + Activating windowed display + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + unknown + + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + + + +- ++ + machine + + + +- ++ + Loading %1 from '%2' + + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + + + +- ++ + Done (loading %1 from '%2') + + + +- ++ + %n non-device set(s) loaded + + +@@ -1654,30 +1640,28 @@ take effect, please restart QMC2 Arcade! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + + + +- +- ++ ++ + no info available + + + +- +- ++ + Stopping QML viewer + + + +- +- ++ + QML viewer stopped - please close the console window to exit + + +diff --git a/src/arcade/translations/qmc2-arcade_it.ts b/src/arcade/translations/qmc2-arcade_it.ts +index 8d9f191df..19e52c35a 100644 +--- a/src/arcade/translations/qmc2-arcade_it.ts ++++ b/src/arcade/translations/qmc2-arcade_it.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + WARNING: can't open software info file '%1' + + + +- ++ + %n software info record(s) imported + + +@@ -192,33 +192,33 @@ + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + WARNING: can't open emulator info file %1 + + + +- ++ + %n emulator info record(s) imported + + +@@ -226,33 +226,33 @@ + + + +- +- ++ ++ + system info-texts + + + +- ++ + WARNING: missing '$end' in machine info file %1 + + + +- ++ + WARNING: missing '$bio' in machine info file %1 + + + +- ++ + WARNING: missing '$info' in machine info file %1 + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -260,9 +260,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + +@@ -336,23 +336,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + + + +- ++ + WARNING: Can't open %1 7z file '%2' + + + +- ++ + WARNING: Can't open %1 archive file '%2' + + + +- +- ++ ++ + Decompressing archive, please wait... + + +@@ -378,7 +378,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + + +@@ -386,24 +386,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + + + +- +- ++ ++ + pressed + + + +- +- ++ ++ + released + + + +- ++ + key-sequence '%1' %2 - default event processing + + +@@ -411,22 +411,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + + + +- ++ + Done (loading configuration template from '%1') + + + +- ++ + %n option(s) loaded + + +@@ -434,169 +434,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + + + +- ++ + No error occurred + + + +- ++ + An error occurred when reading from the file + + + +- ++ + An error occurred when writing to the file + + + +- ++ + A fatal error occurred + + + +- ++ + A resource error occurred + + + +- ++ + The file could not be opened + + + +- ++ + The operation was aborted + + + +- +- ++ ++ + A timeout occurred + + + +- ++ + An unspecified error occurred + + + +- ++ + The file could not be removed + + + +- ++ + The file could not be renamed + + + +- ++ + The position in the file could not be changed + + + +- ++ + The file could not be resized + + + +- ++ + The file could not be accessed + + + +- ++ + The file could not be copied + + + +- +- ++ ++ + An unknown error occurred + + + +- ++ + The process failed to start + + + +- ++ + The process crashed + + + +- ++ + An error occurred when attempting to write to the process + + + +- ++ + An error occurred when attempting to read from the process + + + +- ++ + Not running + + + +- ++ + Starting + + + +- ++ + Running + + + +- ++ + Unknown + + + +- ++ + Emulator #%1 error: reason = %2 + + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + + + +- ++ + normal + + + +- ++ + crashed + + + +- ++ + Emulator #%1 stdout: %2 + + + +- ++ + Emulator #%1 stderr: %2 + + + +- ++ + Emulator #%1 started + + + +- ++ + Emulator #%1 state changed: newState = %2 + + +@@ -604,59 +604,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + + + +- ++ + preview + + + +- ++ + flyer + + + +- ++ + cabinet + + + +- ++ + controller + + + +- ++ + marquee + + + +- ++ + title + + + +- ++ + PCB + + + +- ++ + software snapshot + + + +- ++ + icon + + +@@ -666,82 +666,72 @@ + + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + + + +- ++ + %1 is not valid theme - available themes: %2 + + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + + + +- ++ + (none) + + + +- ++ + emulator-mode: %1 + + + +- ++ + language: %1 + + + +- ++ + theme: %1 + + + +- +- graphics-system: %1 +- +- +- +- ++ + console-mode: %1 + + + +- ++ + Starting QML viewer using theme '%1' + + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + + +@@ -1066,7 +1056,8 @@ + + + +- ++ ++ + can't open archive '%1' + + +@@ -1527,126 +1518,121 @@ take effect, please restart QMC2 Arcade! + + TweakedQmlApplicationViewer + +- ++ + Theme + + + +- +- Graphics system +- +- +- +- ++ + Console mode + + + +- ++ + Language + + + +- ++ + Video snaps + + + +- ++ + Loading global and theme-specific settings + + + +- ++ + Saving global and theme-specific settings + + + +- ++ + Activating full-screen display + + + +- ++ + Activating windowed display + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + unknown + + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + + + +- ++ + machine + + + +- ++ + Loading %1 from '%2' + + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + + + +- ++ + Done (loading %1 from '%2') + + + +- ++ + %n non-device set(s) loaded + + +@@ -1654,30 +1640,28 @@ take effect, please restart QMC2 Arcade! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + + + +- +- ++ ++ + no info available + + + +- +- ++ + Stopping QML viewer + + + +- +- ++ + QML viewer stopped - please close the console window to exit + + +diff --git a/src/arcade/translations/qmc2-arcade_pl.ts b/src/arcade/translations/qmc2-arcade_pl.ts +index 1ffb1161f..e84136022 100644 +--- a/src/arcade/translations/qmc2-arcade_pl.ts ++++ b/src/arcade/translations/qmc2-arcade_pl.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + WARNING: can't open software info file '%1' + + + +- ++ + %n software info record(s) imported + + +@@ -193,33 +193,33 @@ + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + WARNING: can't open emulator info file %1 + + + +- ++ + %n emulator info record(s) imported + + +@@ -228,33 +228,33 @@ + + + +- +- ++ ++ + system info-texts + + + +- ++ + WARNING: missing '$end' in machine info file %1 + + + +- ++ + WARNING: missing '$bio' in machine info file %1 + + + +- ++ + WARNING: missing '$info' in machine info file %1 + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -263,9 +263,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + +@@ -339,23 +339,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + + + +- ++ + WARNING: Can't open %1 7z file '%2' + + + +- ++ + WARNING: Can't open %1 archive file '%2' + + + +- +- ++ ++ + Decompressing archive, please wait... + + +@@ -381,7 +381,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + + +@@ -389,24 +389,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + + + +- +- ++ ++ + pressed + + + +- +- ++ ++ + released + + + +- ++ + key-sequence '%1' %2 - default event processing + + +@@ -414,22 +414,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + + + +- ++ + Done (loading configuration template from '%1') + + + +- ++ + %n option(s) loaded + + +@@ -438,169 +438,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + + + +- ++ + No error occurred + + + +- ++ + An error occurred when reading from the file + + + +- ++ + An error occurred when writing to the file + + + +- ++ + A fatal error occurred + + + +- ++ + A resource error occurred + + + +- ++ + The file could not be opened + + + +- ++ + The operation was aborted + + + +- +- ++ ++ + A timeout occurred + + + +- ++ + An unspecified error occurred + + + +- ++ + The file could not be removed + + + +- ++ + The file could not be renamed + + + +- ++ + The position in the file could not be changed + + + +- ++ + The file could not be resized + + + +- ++ + The file could not be accessed + + + +- ++ + The file could not be copied + + + +- +- ++ ++ + An unknown error occurred + + + +- ++ + The process failed to start + + + +- ++ + The process crashed + + + +- ++ + An error occurred when attempting to write to the process + + + +- ++ + An error occurred when attempting to read from the process + + + +- ++ + Not running + + + +- ++ + Starting + + + +- ++ + Running + + + +- ++ + Unknown + + + +- ++ + Emulator #%1 error: reason = %2 + + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + + + +- ++ + normal + + + +- ++ + crashed + + + +- ++ + Emulator #%1 stdout: %2 + + + +- ++ + Emulator #%1 stderr: %2 + + + +- ++ + Emulator #%1 started + + + +- ++ + Emulator #%1 state changed: newState = %2 + + +@@ -608,59 +608,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + + + +- ++ + preview + + + +- ++ + flyer + + + +- ++ + cabinet + + + +- ++ + controller + + + +- ++ + marquee + + + +- ++ + title + + + +- ++ + PCB + + + +- ++ + software snapshot + + + +- ++ + icon + + +@@ -670,82 +670,72 @@ + + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + + + +- ++ + %1 is not valid theme - available themes: %2 + + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + + + +- ++ + (none) + + + +- ++ + emulator-mode: %1 + + + +- ++ + language: %1 + + + +- ++ + theme: %1 + + + +- +- graphics-system: %1 +- +- +- +- ++ + console-mode: %1 + + + +- ++ + Starting QML viewer using theme '%1' + + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + + +@@ -1070,7 +1060,8 @@ + + + +- ++ ++ + can't open archive '%1' + + +@@ -1531,126 +1522,121 @@ take effect, please restart QMC2 Arcade! + + TweakedQmlApplicationViewer + +- ++ + Theme + + + +- +- Graphics system +- +- +- +- ++ + Console mode + + + +- ++ + Language + + + +- ++ + Video snaps + + + +- ++ + Loading global and theme-specific settings + + + +- ++ + Saving global and theme-specific settings + + + +- ++ + Activating full-screen display + + + +- ++ + Activating windowed display + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + unknown + + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + + + +- ++ + machine + + + +- ++ + Loading %1 from '%2' + + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + + + +- ++ + Done (loading %1 from '%2') + + + +- ++ + %n non-device set(s) loaded + + +@@ -1659,30 +1645,28 @@ take effect, please restart QMC2 Arcade! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + + + +- +- ++ ++ + no info available + + + +- +- ++ + Stopping QML viewer + + + +- +- ++ + QML viewer stopped - please close the console window to exit + + +diff --git a/src/arcade/translations/qmc2-arcade_pt.qm b/src/arcade/translations/qmc2-arcade_pt.qm +index 62f974e9b944dce3e12a522b33a17c70c67129d3..fe2fd6c9a8ca997d8f20bb5f87a57d59cc44d1ce 100644 +GIT binary patch +delta 2491 +zcmXYydst2B9>>3X@3n8MeUVC(Qi_P9ky1!WluJjhH4NoiGSa=2%Z|*bUDA~?F2}fr +zV+MP~@t9{qxlL!H5oZ{eXD}WQ&bZVtIXGY5`RlXRyWaKwe!uVU^8Rv0SzE6xceGpr +zkO?eJ6s#@>q$|LDPr;IYfI0?P@IWx55EwrNnESb4nv;8JEv_jJn4@_AL?dF}p`fY+W!{EHpn}-j_xWP5R?A?M( +zQW0~3>jQqpv@LX2oq-vT1A*1vm|1v~hFt`6E+XmrX(0Cxq=b=E5|Qr9U_L8H=Edc( +zpe*IX1FBvk?~7hE+*7dHhGlkqpL!F8;c*s{yaZy?aWZiL +zkbGJ&dq3*^4+Hk?IDL%!izlFAs02ip;MSOQz%d`Udnf_lb$D7j&_a(6D>O%JK+Oq- +zTd!0)a8|G;S>bk#sZhLA^nU++^&Ca`vSy~HRWRMASiIezj<_h6xC8;Nk&0c7y8!>U +ziZhO#fteP?xuvbZgcij`^*!#pq`2HnhmsZvW(Fv(CR+Xl5K05G^6W-eV3MEm$(;){4CS+m +zfvle|mF@HMfZ%pz`|Y2ByaJWZJPL?OQH^Y-qeV|uktW@JO0-`U`JQEERa=$rmZAfy +z;*v%R^F&n|wFVg1MYT8C5tw#aRTriLB0W@>Ca-58O@f(QRKK665TBn`z027S{Jp2- +z;QuYqeUId&b7HO5N+b9GhV3U@5+yg0EX9SouPlv*86xqU$y(ZQgDm +zak!KVGY<$8Og%3ZMtcJRR%wlr>s<~?6+hmi!3ok=g;e&VH&Sg>F`LC#FvBF(t>(Ia +zmUOC?0_2~PnhWMqkQnJd_FNy>CS6Zh$kOO6-CD)?heS$u+^ebZz#QqpNfz^hO;ShO +z6)JF7ty;lunm8Hdz)syIM1Ouf86_Xjqrtv>vJX{owm +z>n#f0Td-=sddn4N$Z3-LXc!%e`9Xc*_K(1bO!bZMs$j{>GWV(aT_bm-MQG$i?&#O3 +zN!rfbmOT-yo~B9ZK`E?mnv6c@0P{ml<@;`k^U>_udmC67FPIgeu|-z`ea>sn)D}^y +z?=+V!%x!*>=E2J{){IT_bd4jhsJCE_qt@%xTIRsxzBVwVogXe~hrC${j2)#NIy;N3 +z)y7sWXK3ZxS&NvXUQOD0AJKvJF@n{~(dkIWRgm>FTTs4irz_$*#|ViHCI0_PDVP +zX9zBF*PFGJ(5G7OeQ*#kyq7*@6N_S+tWR&51N0BmXNA-Q;m-Q(qf@EG6n&nw3z!_M +zFO6yidS~j(Lb!icSAF9|XTYyWf6n5xk8@z9{&5F$x9YI|xo;3Zgz8_$@JFu(+0(p( +zx&KYDJVf^UCnZcS6U2U-jU3&=035cXUmqNZImK#q+ER90S%v(H<@T)Wx0It+_xM!X>$FlwSaq@ +ze5)uHaBGq89NP+vsh97LY5_{l36?k6bt>otjC^h9cAti(@3ixF84FZ|+gaE4Wr|`1 +z7mv5Au4bTD4Xy{bP +z;&Odu=n_lMHXLR+Q4s~`CK!Iua+J*~5d1XF@XPK9 +z-Vw(QH&3gmz*xcZwTAnTuCW#p3=e!Maa^6@dB`Bv&~RgyYA;|}q;XjLM&6>MjbZOo +zGrqtW?!wx$xNJ1W?0XIbB^f8Vk799o7-NUN0Y)_#lXv`sinIt;O*E#yp_F|bjTygw +z#hGny+#ktW(RMT5O>kf_{@2(RO(hE^8as-d*abfeR)!h>ckKf2gfsXoY_nOb4`X+SPuu$k_?8qJAmF};Y0;T_^Bm~r3iJct=eIAV57 +zd_TV)exLdUXBj7g+&Cr+M43yd~F5AGrRsDaYNFa + +delta 2784 +zcmaKuc~lfv7RJBsuI}o+R6s-ln*m%97eEvdK~W)QKvWQvD2l9YXb_r36w?BFz@|l@ +zStJHE#x)t#i0J4siVGSOmx=pmf{wy4MspMbqj8<|GsHYJ_!3quewY8Em* +zI)M^T7{4ok2^EU}UZBQ`{EhBF#c{^k2&`1m?`TI9Pl*9^4%m9V8u&nq#)cl?qm5|R +zJp*F)<5==2;A0VE?nAVAe+~5Q#i_%z-uyGp_;Wyb4%$A*1Z-E}?qD(Cu^vw?UM9-u +zsYrI938;$}Ik{)h$(JzJNkvXKuK}XBq9N~|7rz!wS$P>qwq?xf7Nu?VrbOn8(g%(Q +z28D>Ww{8c#--u4z_5&6k7oA&v9f&w4`cB#oED%ILT&9Fl_b_G~MK_X7M}Xy%L{EBY +z1ADXRO{AU{=8Kg*c~qO@;=uVqfPd=&`H>=B=>8wAX8 +z5dU)TJOvICcU5{(|9mR$P0R--+!goU{X4MYghVb(17^iYf-h5|W{V_5EAIfxLL?#Y +zSm9x95IdX9p^|lFt-xGQi6wLm^%W$$^tPmQAIYI02@tB3{B6z#K(AuVz9V_^EeTN? +zCwZH@mGV(@Hr@vT$DN$3+>Uy+lN*}5m(KBm8@g&A<=@S?EQgD0A;CA;Ggfcl;%k4U +zmKd;^Tb8hcn!bR`gFqX6!kEc(#bIv1STnaqO!xaYa+R0bDWD(sc`+$F<~6rFbRAVl +z&u9$i4i(XT?`-bmZW5pX+~w6vNRSEKt-f^MtB1S2D3yBq71vfs=l37O-E*!cg}rjQ +z&STWf$+x%{J=aKqi&Dudnx>>e#;haK*>+>;1%otYKMhSvIHU22G+z<}$RCq2bj6C(ZW8db<{wzN5j5}MU4J%9HSFlC|i&J?R3=W0qEEq&Wc +zD>92@%4AwGqE(i%m1}4I_^b9?GiTO~bro+4fy`sWuIaIYwDi +zSQRkrTiNN|r6koZ*$*bF?aH09&S&M+GYzt*YiwzHk{I(MdDoLAR0CZH?;Frdb1d)^ +zUVj37IEwdQoK39aqpbyWvr1wLU6B~bB*v9^d$uB;)c4)TQ~=Ky{Yyk*ZB +zz@?YBTs}-q6~R{qQq3e9e&;(=T7QMnI)wiwnhLpyF8sz36&I=^|_cEJci!x0Iv*LJ}^$$e6oNIrR<&9uTdZ{_rUUu2+U#p##`# +zRYue%k^_1wV;>l4u6vb9JCn#>nw9#pGr+pTN|XL&J6*g|mTo2`e1nzizUrjFXO;C@ +z3b5K!*?8_CIa{o*# +zfnx8g+y>47s(w4C7dERqJxJntz3T1&AL^l@ +zn*P#_GqKjMt>tFk4O5{m)6M +zmzpm_s3mv@&4WcY)N{8qJz*qR;bYB?6EQSn;-oHg;xQ? + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + AVISO: falha ao abrir base de dados de informação DAT '%1' erro = '%2' + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + AVISO: falha ao carregar '%1' da base de dados de informação DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + AVISO: falha ao adicionar '%1' na base de dados de informação DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + AVISO: falha ao atualizar '%1' na base de dados de informação DAT: consulta = '%2', erro = '%3' + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + AVISO: falha ao carregar o número de linhas da base de dados de informação DAT: consulta = '%1', erro = '%2' + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + AVISO: falha ao alterar a configuração '%1' na base de dados de informação DAT: consulta = '%2', erro = '%3' + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + AVISO: falha ao remover tabela '%1': consulta = '%2', erro = '%3' + + +- +- +- +- ++ ++ ++ ++ + software-info + informação de software + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + AVISO: falha ao criar tabela '%1': consulta = '%2', erro = '%3' + + +- +- +- +- ++ ++ ++ ++ + emu-info + informação de emulador + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + informação de máquina + + +- +- ++ ++ + meta-data + meta dados + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + base de dados de informação DAT + + +- +- +- ++ ++ ++ + importing %1 from '%2' + importando %1 de '%2' + + +- +- ++ ++ + software info-texts + textos de informação de software + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + feito (importando %1 de '%2') + + +- ++ + WARNING: can't open software info file '%1' + AVISO: não foi possível abrir arquivo de informação de software '%1' + + +- ++ + %n software info record(s) imported + + %n registro de informação de software importado +@@ -192,33 +192,33 @@ + + + +- +- ++ ++ + emulator info-texts + textos de informação de emulador + + +- ++ + WARNING: missing '$end' in emulator info file %1 + AVISO: '$end' faltando no arquivo de informação de emulador %1 + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + AVISO: '$mame' faltando no arquivo de informação de emulador %1 + + +- ++ + WARNING: missing '$info' in emulator info file %1 + AVISO: '$info' faltando no arquivo de informação de emulador %1 + + +- ++ + WARNING: can't open emulator info file %1 + AVISO: não foi possível abrir arquivo de informação de emulador %1 + + +- ++ + %n emulator info record(s) imported + + %n registro de informação de emulador importado +@@ -226,33 +226,33 @@ + + + +- +- ++ ++ + system info-texts + textos de informação de sistema + + +- ++ + WARNING: missing '$end' in machine info file %1 + AVISO: faltando '$end' no arquivo de informação de máquina %1 + + +- ++ + WARNING: missing '$bio' in machine info file %1 + AVISO: faltando '$bio' no arquivo de informação de máquina %1 + + +- ++ + WARNING: missing '$info' in machine info file %1 + AVISO: faltando '$info' no arquivo de informação de máquina %1 + + +- ++ + WARNING: can't open machine info file %1 + AVISO: impossível abrir arquivo de informação de máquina %1 + + +- ++ + %n machine info record(s) imported + + %n registro de informação de máquina importado +@@ -260,9 +260,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + AVISO: falha ao alterar a tabela %1: query = '%2', erro = '%3' + +@@ -336,23 +336,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + AVISO: não foi possível abrir o arquivo ZIP de %1 '%2' + + +- ++ + WARNING: Can't open %1 7z file '%2' + AVISO: não foi possível abrir o arquivo 7z de %1 '%2' + + +- ++ + WARNING: Can't open %1 archive file '%2' + AVISO: não foi possível abrir o arquivo de %1 '%2' + + +- +- ++ ++ + Decompressing archive, please wait... + Descomprimindo arquivo, por favor espere... + +@@ -378,7 +378,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + Função de joystick '%1' ativada - emulando evento para a sequência de teclas mapeada '%2' + +@@ -386,24 +386,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + sequência de teclas '%1' %2 - emulando evento para a sequência de teclas mapeada '%3' + + +- +- ++ ++ + pressed + pressionada + + +- +- ++ ++ + released + solta + + +- ++ + key-sequence '%1' %2 - default event processing + sequência de teclas '%1' %2 - processamento de eventos padrão + +@@ -411,22 +411,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + Carregando modelo de configuração de '%1' + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + FATAL: erro de XML lendo o modelo: '%1' no arquivo '%2' na linha %3, coluna %4 + + +- ++ + Done (loading configuration template from '%1') + Feito (carregando modelo de configuração de '%1') + + +- ++ + %n option(s) loaded + + %n opção carregada +@@ -434,169 +434,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + FATAL: Não foi possível abrir o arquivo do modelo de configuração: motivo = %1 + + +- ++ + No error occurred + Nenhum erro ocorrido + + +- ++ + An error occurred when reading from the file + Ocorreu um erro durante a leitura do arquivo + + +- ++ + An error occurred when writing to the file + Ocorreu um erro durante a escrita para o arquivo + + +- ++ + A fatal error occurred + Ocorreu um erro fatal + + +- ++ + A resource error occurred + Ocorreu um erro de recurso + + +- ++ + The file could not be opened + O arquivo não pode ser aberto + + +- ++ + The operation was aborted + A operação foi abortada + + +- +- ++ ++ + A timeout occurred + Ocorreu um estouro de tempo + + +- ++ + An unspecified error occurred + Ocorreu um erro não especificado + + +- ++ + The file could not be removed + O arquivo não pode ser removido + + +- ++ + The file could not be renamed + O arquivo não pode ser renomeado + + +- ++ + The position in the file could not be changed + A posição no arquivo não pode ser alterada + + +- ++ + The file could not be resized + O arquivo não pode ser redimensionado + + +- ++ + The file could not be accessed + O arquivo não pode ser acessado + + +- ++ + The file could not be copied + O arquivo não pode ser copiado + + +- +- ++ ++ + An unknown error occurred + Ocorreu um erro desconhecido + + +- ++ + The process failed to start + O processo falhou ao iniciar + + +- ++ + The process crashed + O processo teve um erro catastrófico + + +- ++ + An error occurred when attempting to write to the process + Ocorreu um erro durante tentativa de escrever para o processo + + +- ++ + An error occurred when attempting to read from the process + Ocorreu um erro durante tentativa de ler do processo + + +- ++ + Not running + Não executando + + +- ++ + Starting + Iniciando + + +- ++ + Running + Executando + + +- ++ + Unknown + Desconhecido + + +- ++ + Emulator #%1 error: reason = %2 + Erro no emulador #%1: motivo = %2 + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + Emulador #%1 terminado: código de saída = %2, condição de saída = %3 + + +- ++ + normal + normal + + +- ++ + crashed + falha catastrófica + + +- ++ + Emulator #%1 stdout: %2 + Saída padrão do Emulador #%1: %2 + + +- ++ + Emulator #%1 stderr: %2 + Saída de erro padrão do Emulador #%1: %2 + + +- ++ + Emulator #%1 started + Emulator #%1 iniciado + + +- ++ + Emulator #%1 state changed: newState = %2 + Estado do emulator #%1 alterado: novo estado = %2 + +@@ -604,59 +604,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + AVISO: ImageProvider::loadImage(): ID de imagem inválido '%1' requisitado + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + AVISO: ImageProvider::loadImage(): não foi possível carregar o arquivo de imagem '%1' do ZIP + + +- ++ + preview + pré-visualização + + +- ++ + flyer + + + +- ++ + cabinet + gabinete + + +- ++ + controller + controle + + +- ++ + marquee + + + +- ++ + title + título + + +- ++ + PCB + + + +- ++ + software snapshot + snapshot de software + + +- ++ + icon + ícone + +@@ -666,82 +666,72 @@ + Arcade QMC2 + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- %1 não é um sistema gráfico válido - sistemas gráficos disponíveis: %2 +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + %1 não é um modo de emulador válido - modos de emulador disponíveis: %2 + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + %1 não é um modo de console válido - modos de console disponíveis: %2 + + +- ++ + %1 is not valid theme - available themes: %2 + %1 não é um tema válido - temas disponíveis: %2 + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + %1 não é um tema de %2 válido - temas %2 disponíveis: %3 + + +- ++ + (none) + (nenhum) + + +- ++ + emulator-mode: %1 + modo de emulador: %1 + + +- ++ + language: %1 + língua: %1 + + +- ++ + theme: %1 + tema: %1 + + +- +- graphics-system: %1 +- sistema gráfico: %1 +- +- +- ++ + console-mode: %1 + modo de console: %1 + + +- ++ + Starting QML viewer using theme '%1' + Iniciando visualizador QML usando o tema '%1' + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + Visualizador QML não iniciado - por favor feche a janela do console para sair + +@@ -1066,7 +1056,8 @@ + + + +- ++ ++ + can't open archive '%1' + impossível abrir arquivo '%1' + +@@ -1529,126 +1520,121 @@ terem efeito, por favor reinicie o Arcade do QMC2! + + TweakedQmlApplicationViewer + +- ++ + Theme + Tema + + +- +- Graphics system +- Sistema gráfico +- +- +- ++ + Console mode + Modo de console + + +- ++ + Language + Língua + + +- ++ + Video snaps + Snaps de vídeo + + +- ++ + Loading global and theme-specific settings + Carregando configurações globais e específicas do tema + + +- ++ + Saving global and theme-specific settings + Salvando configurações globais e específicas do tema + + +- ++ + Activating full-screen display + Ativando tela cheia + + +- ++ + Activating windowed display + Ativando modo janela + + +- ++ + correct + correto + + +- ++ + mostly correct + maioria correto + + +- ++ + incorrect + incorreto + + +- ++ + not found + não encontrado + + +- ++ + unknown + desconhecido + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + AVISO: arquivo de lista filtrado '%1' não existe ou não está acessível, revertendo para a %2 completa + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + lista de máquinas + + +- ++ + machine + máquina + + +- ++ + Loading %1 from '%2' + Carregando %1 de '%2' + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + AVISO: Não foi possível abrir o arquivo de cache de estados de ROM '%1', por favor verifque as permissões + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + AVISO: O arquivo de cache de estados de ROM '%1' não existe, por favor rode o executável do front-end principal para criá-lo + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + FATAL: Não foi possível abrir o arquivo de cache de %1 '%2', por favor verifique as permissões + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + AVISO: O arquivo de cache de %1 '%2' não existe, por favor rode o executável do front-end principal para criá-lo + + +- ++ + Done (loading %1 from '%2') + Feito (carregando %1 de '%2') + + +- ++ + %n non-device set(s) loaded + + %n conjunto de não-dispositivo carregado +@@ -1656,30 +1642,28 @@ terem efeito, por favor reinicie o Arcade do QMC2! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + Iniciando emulador #%1 para %2 ID '%3' + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + AVISO:TweakedQmlApplicationViewer::requestInfo(): classe de informação não suportada '%1' + + +- +- ++ ++ + no info available + informação não disponível + + +- +- ++ + Stopping QML viewer + Parando visualizador QML + + +- +- ++ + QML viewer stopped - please close the console window to exit + Visualizador QML parado - por favor feche a janela do console para sair + +diff --git a/src/arcade/translations/qmc2-arcade_pt_BR.qm b/src/arcade/translations/qmc2-arcade_pt_BR.qm +new file mode 100644 +index 0000000000000000000000000000000000000000..8845050f92cc8cd3cb1a0918e4231c8ea13dbd98 +GIT binary patch +literal 45782 +zcmeHwd6-;PnfK}RnqIS!gg`<8iCIVoNWx+p0-er6m~135YzkIaRd*LuS2eYylL)dZ +z0WvCxq5{e$i|dRcI6gWef_!d(sJM)xeBhuW;|A*B!uR`~_ny1dJ-4g6(=2~{PoDJc +zuDbWU%X#g=bW4mg&>uRMwI!CUze?c|8bhc8xDb;wxZA#tpX}R86P&2NdtJE3Cs#A`A +zzfwb+<$BR^YV$Yn`HF&i^NoPnFiV~J+hde^-(S^RF8e&--YeI=Mb-b42LSi8YVbr{ +zdzY*87d@-g^;=Zon-?f`^LcW;<8Zb6gYy7)sa)@PPQASae1c +zsRz68{F&FPCr>_Ksp&EG^Ft;mb$qM({l24t*L!LjKKnVP?)+oT?0Grh@q}FOyrpLL +z4>2DT*4Mm&-(Po3P50X$RjPQ4Trd6Cn#|2hfydsO?5yLITCln1_J?j)>ZH4CzBX-& +zQs@1x=HXpGQ0lFdYra|kj8f-rsQK=rz-Raoxn6!p%@ck9q14{HYJT@3oOJ3|u=0!(m74XN31|0#USN{_-W5vCo;Ts{Ef--vE|Tj-gA=~;iIqyd +zWzB@IUw;th{Nf4E|Kb~ff5C)5Tm$;*S50^^xf^nE=7bl2{$r)CKD)N5V>R%)r*_q& +z!1u%V*RE~)CHQoKTyOqB?bcsiuGEoVuH8<05B!hX_+7wzWoK>f=^rX}=$mSH{~q)G +z;kVabdG$l!-?wV_t;7ANchugQo`(6DUwiL~wMuP!x%RQG?@?;kD!INhR{OjE1AcvQ +zU+v2~Z&vE8HFZ;$-lNpQ&(s~>bO7Xfpl<%oPb)Qla^3t3Kcm$73AtWeS9kXPImqkV +z<@&Kh>*62y6Zq0wHA9=!u60*pKL0G&OMg{&@1^+sq(kbydKdV#@6NhMFYZ-p%{_HL +znvBm+{Ak@z&KZCl9a#6|CE(ZEf3N$+9DaUi-Lqc;KT7>|FTL=6@ZqQRwHHGFitTc} +zbbI}&2Q0_^|5M-pZ_u;SlXAUmU;Xad)1W_3*I%$0_xCKVziK|7zv`6wYi@cH`Vo`s +z#~!c0@%xy^88!8vKN0wxJ+1y5KYv82jeoEIukQbZSmf$|b8=Ftnx^{ahX0~eM^F8q +zHUM7tef2Ltgy-`2%Jq_i8k+m?{2O;P%zkX0Qgc4p(0?=J1`h$hZum<> +ze!;^^P2SdUE%mGK%7)wT{5j_F3Aw)Wiw&RKaII3uE^GMOU3} +zuhiiWH12pG?82&lG`{s*%>z#8N`>uIE_}bmL@9qa7pGzC}J$fJH +z@1Kp=ti-(5UfFoZ?nb3PGE1(v-Pri$BKUgjeT`47!2I0R-T2q%U?)y}u<@lfJilSM +zss1OpzW>ptrgc-58t7`8H3)cv=zdfyTeb?Wcd;SY>XU%F}^XuO$wK>_m;c?)9z>4P0A4n>7+((6PaDYfGh%}=j>T&bJxmg}uQZJBiO +zB&D`I*fRTS~qz^8_m+@v2Wb=W6buDW6&=IuGTURd99-F2Wp +zzP9Dg<1dE3UeNO3R{{T^O)cO4;`d-@PLb>FziIjJ9`Nmu|89BiD%hpX548OD(Dy0T +ze_QLM%kG2Ss%f3R19WA#%Jss0>-5w3_hWLs@XxKY&%%7q{cG!j#y7(c&TKv6-OC}j +zds>$t_rK8RU$!3q1@JR*d+W+aL09JF){_p$_%pxWy6#%=r?<9s>kjDCs(0cF_&087 +zJ-u%${MNTyzj)0$r6#tweyb67GV@QlUeMb5(~tGQPhH#kvj=Lyr}=Wd_4?LdJ_kM| +zKh^r|q6dNhtkyrSSO$69+cy2W!pg8BUwfQV +zjSsawea=+GCcE2S*Z}@sJE`rZy$3*Fek|A92iyMs!*9SJJ<+bFPJ!I~q`mou1nk2R +za^2h6-tr>wZoRyH<^gq(gF^eVtMPZsJKIlqa)wgto@qaG%H>L3Gp+rstML5^pKibC +zlG`EweeG8r0Q!!;x&5kx@cFw}wD0?L9&kS_*V`AgzxP7$uer7T{^KTtAJ4UaZ^^Jy +zZI8A;^Vc=-CqHZdQ_p7j>C5DL`I|dtEW`ZeHg(MIgB{$RlIy!RcN~$x_(wg|vHm-F +zZs4Yl#E~DueIJqQJN9&>z7P4@F}q{<2e3P5{;gxr%kRgyC&=}tzK#p-dqJs_FYWlm +z^^XGXX1QMW)sBCA0{rOtZO2y*X@i}=spH#o{{XsP>iFAn1*Mk8JN|ha;GI7y4Wm}V +zOsiv6w~DE_%Br*)#PwPAw94U=KKxAMn#MOpl~Q^9%i)e8e3Df0COoPd@PBf5Ha!?G +zrgPa?p_m&QN+lcd>C{#6#CiSsTq&D$zpo*<1!}zpmB26rn$*DJVH8{dQ??c3`C>ZT +zAB!7EBSL6bJs2~K@HnS3D&>yT*ptf^a+wq#ZgYM=EuBr~hBabCY91bnX>{_Sw;u== +zKsl+7sRVuwY9xgtm +zli>&bA`s>0BLU9?98u@=1`tpMmp6yc%f?cJrA)k-%g55$zFaJyO62m%1%-vN^x#k~ +zUzBN`zB*o9kFRlw_r?pUjqz-}Kb6-E%(}FMDe==0ra}Y`LIo@b)l=$xu#lAU?-AK| +zu?up4*%#Mr3-+2P3yX1iFkH?F_s%jmFsq2I+KdcJGv5GJIm-Y24uWwv8lVC +zk_9$O0!mgTA^XY*8QlbNQbs>XVRe`f{XSaFcPHuy8+k!J(Dcopcl7*9Q}uWmg#!?! +zk`}iZuErL`A$$X%h4ctjNeCf5G5sZJL9cavcwNx2V$21V;Myo +zy$y<-Vdi*<-AWsS@~L={eq{gU?y)h+T|$#C;gZLMN|Gg^@~dUMwpbX~mntR(M5y}m +zxxw+3q!-4Cm3B6Y@-kduKvjhFNg!oHDuz=Te45pMhJTHhuYl)_@D=bPu1|e)B)jvu +z;aCFcXfalq=SK&e#?p#TWb>$gF0HU|Nr#Cco2I3-%jZEW +zGvmW!Vg|K%5P +zp)0SSNgRw1rp7*rU9gWSSk0o&+!x?Ce=XQpOeU$O0A=#?g|6+Joy?)Qxj@RnG<}Ht +zbu7g!dts#t#bUq=)~-h=X}K_)V03gbuF~+Q==^(^CXit#^G~VQ^RIHyBbLow;8Oz@ +zud|riRV-A(V^Q_2b>U36v$Psec8-Qr$OYBvC`eU2ou*YlN;Yo2)E#Q#V5%7JWR0{E +zqWd#9Wo0xM`qV(7th%`wSp=gXwHZiN@$BUNki!CGhv5uev~PW_u)9!94eC{e>gfDY +znO7QnG0+P#rC>O6)-0(Cv+@MeKS>Ft!v4Hd_u^vJc$6bHxn9m*5=LC +z)GIH=)fFq&+gK_^wF;cG6(~j);3vk&Ii^qk3ft>dJhxhSSzc$Wz*O5(!N^Sg?UGR;sJO)zO6W60WuRk{NjH1YpYZcaQKF|{{uUtis7d1(4J3=C;HH}s +z%(YM>%Pi?^x|oh<(tD(fX=HUe84V!}R3(LETEJ|X_E@Hl=m)EcT*Hp*g-(9X29qWH +z=OQ+5HJYgghw>>Y8OHPI6WWxt-~x(^hqE +znRf4g^TKi9oS7L(`6t!tT}yD4)Rw8_jb{`!;CA23MMoT(foS=B;Qi%9S!nb{Kiu72CFYL+sof64rF$ +zyjY<$#Lhv=b<-)%hq_bncy&q{EC&W)9j;p?Jf&ydis@uf)n^0%9S+e`FxrFyceGpl_@F7H_P=m#JcFa{}}x# +zTS{pj&(n!W2C<$u;;}B5PYY4Vm?4$yie*s=L^sR4rHf>=DuK1jz=0nacV=F)%|cp50)$4cxFK9_o|d77}uH5N+};2{4h +zH)5NOAa?eZvI*UwEGCdcqIjzp7nNigqepYJ=e +z3|+KF&07irlc~OVDN}UF8_MSr;)Ey$?f;V6y@q73O|yeYtLA@3&=O|1otoEX>ID~n +z(^yXgKcu8v&4f#@n2kqsbXPEY<2iRSZ>ELLACEL@k1s~aHqK0U97Z$j6{AATN?D1?$A7b?Q+L=otMqej(T*1Fd1xd6)YTrAZz$=F8vj9D3N-Fg_Li&bc8f +z6l{6R`_L%&#Ad;H(%-NhP5Km~2V(r%hbEWt}7 +zUGk=M$BOB}RIY^n+zO;6BSFcI4CB5DgyxZEl?4Q^k3vi>%{0Fevl_HI9%5bHXcpG} +zk_NBX@BkW!<3-eJ1- +zMbjwa`4RCd7NHTCd>JT60FQ;L(@vFXd(P7WEtZ +ze;`imNo1s?*L2%0)^-(g5Mz8yye_2=&;3)f^E#R)?xM%U-HE7ODL-V5*>=PzUh}Mr +z_N9Oo90s{je0wi&DBo&ja53IbqDiUF>A7+ipZ)}1l4~9>8F)R9PbuvFm|u9zyNzd+ +zd&2iGb16C|Kv5sEqrw2=_SCL)u_u=_u{;07&bDGnBKRme>1q5CweU5ZC;4+dzf?{O +zU{l~$x@b3A)Tw}tXtJt&a>GbS3zi$lxXBdL1JnENF|%A07M7z5VU#5%W<9B4a!a@u +z#jGtzRlSK6=PT1s{C#mV{vsozX<}IyF}gdcGsCCUgTV>N$bkOjK*?12Qq1w46Eu1c?Zlna4gTRKFUq#HJ* +zP|1-@fB}x*Ubbw?6=V5QHVY3Kh5t189{=-tR2R#}ts_4@CAf6> +z@I-D1aZ?oKU84l;E9$xIjQ}i_wJ5-&WjR%jYPJ(}`&mBQPPMFWMUu_nuy +zq7(TZTYy2(_OA0-Vb)~+$6I&A)8o&(TGnU599jv^`JyaGZmQ3bkhdBS1_|r=& +zmLoYz7qpp<$97^VGs*fcBnN8&ow4{%?2P5+Pxr$DLd0bxpz+krz2~M9MP1#!DiU*v +z3y7uo56JQfQl{s4Sv9dsrE!G3BJaVIl+H*r_}_l1d|Awiz?u$&A_PDaU)UhquUF +zSm5+0b}T2MoZ%1Xyh237f-EW#y1o#Yy#_4w_Neu)DXHDkvnnLS(_x+SPW6R#j#ClS +z_xMt^mQy$OERA*N6R1gt9{#X4Z*KDAy#fmPQB3=!{W1B087qlTJlmurr++#;$J0Wlqu#O>i0p^jfEO8;(N6 +zhV?l%EM2m!5Tg3*aL5V#sO^J>f +zZU;DL3|s{Epi9;2)69t)f$og1E*8@CM++8q!I6uK;4ma?8(+U#GPpcf5YfM_{cV8i +zZ$gayr-pd+jE?GZNtLk0f7(cJ9fw%~XR$no5F75JANP1^FnJ@A8(c@w%^5DIyrUXM +z;#4WCT@{3t48-|DWSG-ef^|z>e?;R(NQy62XX$j2O9M>cxX|)e;MMI5{6r7E^v(o{ +zQnoAK+IJ+LUIY0S9Tg79N+$!W6oMW~owus%9hh|VSx`Oh2zhI)o57^J`!5s6V)H=k +z$k@r~;K9;Jst-%eSVGo2M*;$Ha|AhIgrpyoc`T=aNUwL4kmL$G*rmkiSH52j#0#!* +zi>Y7WbABRg?Ceo8Bdx=8vKHYPCdQCY`4;ts+h}VdgFO;WCOW|)5fy+oo8s7 +z-#0;uV8E08sj%T*62Yal8V_=V^GGMADR!|qz{5g=?aiS(WH6*r`H0~~eCV4*pN1d~ +zJP%DuS!F=UA96nl;hl}ZdmE;P>*!;{ +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 +zEb{))EBi>P0W`9MD2bl8( +zGB}t|AO9q85UI%Ujgwh7y_gIZJ%vnNq% +zMVt@QDnH_O0T;s-35E4WfvPYo_bQvl;RI`17QYWND}N%>w6~sB@-5)vDRTza*gf$& +z_xv#5Y1i(8aL^_5J%;<`l7BNMmppoQyq?^4zsq1c?nutQI{y1hfeF~IhM{F~oQlN$ +z_*3Dv_=3D4{4=d<%ns-UcHo-Qcgs0G4b?HH}Kiz!Fudx#8QJU{N8m+kZw>j<24AyGIZ4`Zf1 +zM?vV~EDU#LUz``Aoa6Enu{ZK`xNY4r!6?AF5@GNl`= +zB2jY#^KJ}TU|?TD-|7tQp6XC>{5gy?K{M%<&E0m|+Xr)nB3g4s!^~%0wx$ +z>#tWWF=qsOhZRr81`Vxi?jgWc@%~_+@H0u0^hvr-yu#4Lz|N$KyqXD3q%O&Dw$A@X +zr}Mum9HUn28gaJKdFU3@6_z*P^xfT8IceFo?A`GH}OCL}@ewvbDu_BxDP^ +z#R7*t2C?kXES5;)Y5Z=i)<}(F0Ss0{KxBJDCm!b!4K#oh8vYNqQqdKRygz+1OQ4+t +zJh9QgGu@B#OaLhP-WBUM8@W7f)0Qa1)0Pl{hPZmLBhHj6F|odVT<#!^PM>S&@mYFi +z>8q%F(sN5~K|RrZcw%pA02u?`-4=TMU=34Ts3@1X4hpB&G}DGxY2fKt0X;hs{05lb +z>d12m7O84UK*nCE(KH%%{${~Vh%@1X;CP|xcMqAd%OJt)eIx&94O~bVErJDfYV2<2WWcbEMox76vzVIxNk>{i&>+u +zn>X-~kqKtWo`v(^WvJ2HTgxD? +zhRL*modcE|OHH34%IO~3;Y!#{pLPWRf%$s`d*suiiRyHM`hwgzv_y9|ZBuyqq^YyKap +Cu~P8> + +literal 0 +HcmV?d00001 + +diff --git a/src/arcade/translations/qmc2-arcade_pt_BR.ts b/src/arcade/translations/qmc2-arcade_pt_BR.ts +new file mode 100644 +index 000000000..1453dd668 +--- /dev/null ++++ b/src/arcade/translations/qmc2-arcade_pt_BR.ts +@@ -0,0 +1,1956 @@ ++ ++ ++ ++ ++ BackgroundAnimation ++ ++ ++ ++ Starting animation ++ Iniciando a animação ++ ++ ++ ++ ++ Animation stopped ++ A animação foi interrompida ++ ++ ++ ++ ConsoleWindow ++ ++ ++ Console ++ Console ++ ++ ++ ++ DatInfoDatabaseManager ++ ++ ++ WARNING: failed to open DAT-info database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir a informação do banco de dados DAT '%1' erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao carregar a informação '%1' do banco de dados DAT: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar a informação '%1' no banco de dados DAT: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar a informação '%1' no banco de dados DAT: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao carregar informação da quantidade das linhas no banco de dados DAT: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração da informação '%1' no banco de dados DAT: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to remove %1 table: query = '%2', error = '%3' ++ AVISO: houve uma falha ao remover a tabela '%1': consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ software-info ++ informação do programa ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to create %1 table: query = '%2', error = '%3' ++ AVISO: houve uma falha ao criar a tabela '%1': consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ emu-info ++ informação do emulador ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ machine-info ++ informação da máquina ++ ++ ++ ++ ++ meta-data ++ meta dados ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ DAT-info database ++ informação do banco de dados DAT ++ ++ ++ ++ ++ ++ importing %1 from '%2' ++ importando %1 de '%2' ++ ++ ++ ++ ++ software info-texts ++ textos com as informações do programa ++ ++ ++ ++ ++ ++ done (importing %1 from '%2') ++ feito (importando %1 de '%2') ++ ++ ++ ++ WARNING: can't open software info file '%1' ++ AVISO: não foi possível abrir o arquivo de informação do programa '%1' ++ ++ ++ ++ %n software info record(s) imported ++ ++ %n registro com a informação do programa foi importado ++ %n os registros com as informações do programa foram importados ++ ++ ++ ++ ++ ++ emulator info-texts ++ textos com as informações do emulador ++ ++ ++ ++ WARNING: missing '$end' in emulator info file %1 ++ AVISO: '$end' está faltando no arquivo de informação do emulador %1 ++ ++ ++ ++ WARNING: missing '$mame' in emulator info file %1 ++ AVISO: '$mame' está faltando no arquivo de informação do emulador %1 ++ ++ ++ ++ WARNING: missing '$info' in emulator info file %1 ++ AVISO: '$info' está faltando no arquivo de informação do emulador %1 ++ ++ ++ ++ WARNING: can't open emulator info file %1 ++ AVISO: não foi possível abrir arquivo de informação do emulador %1 ++ ++ ++ ++ %n emulator info record(s) imported ++ ++ %n o registro com a informação do emulador foi importado ++ %n os registros com as informações do emulador foram importados ++ ++ ++ ++ ++ ++ system info-texts ++ textos com as informações do sistema ++ ++ ++ ++ WARNING: missing '$end' in machine info file %1 ++ AVISO: '$end' está faltando no arquivo de informação da máquina %1 ++ ++ ++ ++ WARNING: missing '$bio' in machine info file %1 ++ AVISO: '$bio' está faltando no arquivo de informação da máquina %1 ++ ++ ++ ++ WARNING: missing '$info' in machine info file %1 ++ AVISO: '$info' está faltando no arquivo de informação da máquina %1 ++ ++ ++ ++ WARNING: can't open machine info file %1 ++ AVISO: impossível abrir arquivo de informação da máquina %1 ++ ++ ++ ++ %n machine info record(s) imported ++ ++ %n o registro com a informação da máquina foi importado ++ %n os registros com as informações das máquinas foram importados ++ ++ ++ ++ ++ ++ ++ WARNING: failed to alter %1 table: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a tabela %1: consulta = '%2', erro = '%3' ++ ++ ++ ++ IconCacheDatabaseManager ++ ++ ++ WARNING: failed to open icon cache database '%1': error = '%2' ++ AVISO: houve uma falha ao abrir o banco de dados do cache dos ícones '%1': erro = '%2' ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ WARNING: failed to fetch '%1' from icon cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao carregar '%1' do banco de dados do cache dos ícones: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ ++ WARNING: failed to add '%1' to icon cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao adicionar '%1' ao banco de dados do cache dos ícones: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to update '%1' in icon cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao atualizar '%1' no banco de dados do cache dos ícones: consulta = '%2', erro = '%3' ++ ++ ++ ++ WARNING: failed to fetch row count from icon cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao ler quantidade de linhas do banco de dados do cache dos ícones: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to change the '%1' setting for the icon cache database: query = '%2', error = '%3' ++ AVISO: houve uma falha ao alterar a configuração de '%1' do banco de dados do cache dos ícones: consulta = '%2', erro = '%3' ++ ++ ++ ++ ++ ++ WARNING: failed to remove icon cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao remover o banco de dados do cache ícones: consulta = '%1', erro = '%2' ++ ++ ++ ++ ++ ++ WARNING: failed to create icon cache database: query = '%1', error = '%2' ++ AVISO: houve uma falha ao criar o banco de dados do cache dos ícones: consulta = '%1', erro = '%2' ++ ++ ++ ++ icon cache database '%1' initialized ++ o baco de dados do cache dos ícones '%1' foi inicializado ++ ++ ++ ++ ImageProvider ++ ++ ++ WARNING: Can't open %1 ZIP file '%2' ++ AVISO: não foi possível abrir o arquivo ZIP de %1 '%2' ++ ++ ++ ++ WARNING: Can't open %1 7z file '%2' ++ AVISO: não foi possível abrir o arquivo 7z de %1 '%2' ++ ++ ++ ++ WARNING: Can't open %1 archive file '%2' ++ AVISO: não foi possível abrir o arquivo de %1 '%2' ++ ++ ++ ++ ++ Decompressing archive, please wait... ++ Descomprimindo o arquivo, aguarde... ++ ++ ++ ++ Joystick ++ ++ ++ ERROR: couldn't initialize SDL joystick support ++ ERRO: foi impossível inicializar suporte ao joysticks do SDL ++ ++ ++ ++ SDL joystick #%1 opened: name = %2, axes = %3, buttons = %4, hats = %5, trackballs = %6 ++ Joystick SDL #%1 aberto: nome = %2, eixos = %3, botões = %4, hats = %5, trackballs = %6 ++ ++ ++ ++ SDL joystick #%1 closed ++ Joystick SDL #%1 foi fechado ++ ++ ++ ++ JoystickManager ++ ++ ++ joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' ++ A função do joystick '%1' foi ativada - emulando o evento para a sequencia do mapeamento das teclas'%2' ++ ++ ++ ++ KeyEventFilter ++ ++ ++ key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' ++ sequência das teclas '%1' %2 - emulando o evento para a sequencia do mapeamento das teclas '%3' ++ ++ ++ ++ ++ pressed ++ foi pressionado ++ ++ ++ ++ ++ released ++ foi liberado ++ ++ ++ ++ key-sequence '%1' %2 - default event processing ++ sequência de teclas '%1' %2 - processamento de eventos padrão ++ ++ ++ ++ ProcessManager ++ ++ ++ Loading configuration template from '%1' ++ Carregando modelo de configuração de '%1' ++ ++ ++ ++ FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 ++ FATAL: erro de XML lendo o modelo: '%1' no arquivo '%2' na linha %3, coluna %4 ++ ++ ++ ++ Done (loading configuration template from '%1') ++ Feito (carregando modelo de configuração de '%1') ++ ++ ++ ++ %n option(s) loaded ++ ++ %n a opção foi carregada ++ %n as opções foram carregadas ++ ++ ++ ++ ++ FATAL: Can't open the configuration template file: reason = %1 ++ FATAL: Não foi possível abrir o arquivo do modelo de configuração: motivo = %1 ++ ++ ++ ++ No error occurred ++ Não ocorreu nenhum erro ++ ++ ++ ++ An error occurred when reading from the file ++ Ocorreu um erro durante a leitura do arquivo ++ ++ ++ ++ An error occurred when writing to the file ++ Ocorreu um erro durante a escrita para o arquivo ++ ++ ++ ++ A fatal error occurred ++ Ocorreu um erro fatal ++ ++ ++ ++ A resource error occurred ++ Ocorreu um erro de recurso ++ ++ ++ ++ The file could not be opened ++ O arquivo não pode ser aberto ++ ++ ++ ++ The operation was aborted ++ A operação foi abortada ++ ++ ++ ++ ++ A timeout occurred ++ Ocorreu um estouro de tempo ++ ++ ++ ++ An unspecified error occurred ++ Ocorreu um erro não especificado ++ ++ ++ ++ The file could not be removed ++ O arquivo não pode ser removido ++ ++ ++ ++ The file could not be renamed ++ O arquivo não pode ser renomeado ++ ++ ++ ++ The position in the file could not be changed ++ A posição no arquivo não pode ser alterada ++ ++ ++ ++ The file could not be resized ++ O arquivo não pode ser redimensionado ++ ++ ++ ++ The file could not be accessed ++ O arquivo não pode ser acessado ++ ++ ++ ++ The file could not be copied ++ O arquivo não pode ser copiado ++ ++ ++ ++ ++ An unknown error occurred ++ Ocorreu um erro desconhecido ++ ++ ++ ++ The process failed to start ++ O processo falhou ao iniciar ++ ++ ++ ++ The process crashed ++ O processo travou ++ ++ ++ ++ An error occurred when attempting to write to the process ++ Ocorreu um erro durante tentativa de escrever para o processo ++ ++ ++ ++ An error occurred when attempting to read from the process ++ Ocorreu um erro ao tentar ler a partir do processo ++ ++ ++ ++ Not running ++ Não está sendo executado ++ ++ ++ ++ Starting ++ Iniciando ++ ++ ++ ++ Running ++ Executando ++ ++ ++ ++ Unknown ++ Desconhecido ++ ++ ++ ++ Emulator #%1 error: reason = %2 ++ Erro #%1 no emulador: motivo = %2 ++ ++ ++ ++ Emulator #%1 finished: exitCode = %2, exitStatus = %3 ++ Emulador #%1 foi encerrado: código de saída = %2, condição da saída = %3 ++ ++ ++ ++ normal ++ normal ++ ++ ++ ++ crashed ++ travou ++ ++ ++ ++ Emulator #%1 stdout: %2 ++ Saída padrão do emulador #%1: %2 ++ ++ ++ ++ Emulator #%1 stderr: %2 ++ Saída de erro padrão do emulador #%1: %2 ++ ++ ++ ++ Emulator #%1 started ++ O emulador #%1 foi iniciado ++ ++ ++ ++ Emulator #%1 state changed: newState = %2 ++ A condição do emulador #%1 foi alterado: nova condição= %2 ++ ++ ++ ++ QObject ++ ++ ++ ++ WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested ++ AVISO: ImageProvider::loadImage(): Foi pedido um ID '%1' inválido da imagem ++ ++ ++ ++ ++ WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP ++ AVISO: ImageProvider::loadImage(): não foi possível carregar o arquivo de imagem '%1' a partir do ZIP ++ ++ ++ ++ preview ++ pré-visualização ++ ++ ++ ++ flyer ++ panfleto ++ ++ ++ ++ cabinet ++ gabinete ++ ++ ++ ++ controller ++ controle ++ ++ ++ ++ marquee ++ marquise ++ ++ ++ ++ title ++ título ++ ++ ++ ++ PCB ++ PCI ++ ++ ++ ++ software snapshot ++ captura da tela do programa ++ ++ ++ ++ icon ++ ícone ++ ++ ++ ++ QMC2 Arcade ++ Arcade QMC2 ++ ++ ++ ++ %1 is not a valid emulator-mode - available emulator-modes: %2 ++ %1 não é um modo válido do emulador- modos disponíveis do emulador: %2 ++ ++ ++ ++ %1 is not a valid console-mode - available console-modes: %2 ++ %1 não é um modo de console válido - modos de console disponíveis: %2 ++ ++ ++ ++ %1 is not valid theme - available themes: %2 ++ %1 não é um tema válido - temas disponíveis: %2 ++ ++ ++ ++ %1 is not a valid %2 theme - available %2 themes: %3 ++ %1 não é um tema %2 válido - temas %2 disponíveis: %3 ++ ++ ++ ++ (none) ++ (nenhum) ++ ++ ++ ++ emulator-mode: %1 ++ modo emulador: %1 ++ ++ ++ ++ language: %1 ++ idioma: %1 ++ ++ ++ ++ theme: %1 ++ tema: %1 ++ ++ ++ ++ console-mode: %1 ++ modo console: %1 ++ ++ ++ ++ Starting QML viewer using theme '%1' ++ Iniciando o visualizador QML usando o tema '%1' ++ ++ ++ ++ video snaps %1 ++ capturas de vídeo %1 ++ ++ ++ ++ enabled ++ ativado ++ ++ ++ ++ disabled ++ desativado ++ ++ ++ ++ QML viewer not started - please close the console window to exit ++ O visualizador QML não foi iniciado - feche a janela do console para encerrar ++ ++ ++ ++ [context] Previous component / List page up / Info page up ++ [contexto] Componente anterior / Sobe a página da lista / Sobe a página da informação ++ ++ ++ ++ [context] Next component / List page down / Info page down ++ [contexto] Próximo componente / Desce a página da lista / Desce a página da informação ++ ++ ++ ++ [context] Hide list / Previous item / Slide left / Cycle backwards ++ [contexto] Esconde a lista / Item anterior / Desliza à esquerda / Gira para trás ++ ++ ++ ++ [context] Show list / Next item / Slide right / Cycle forwards ++ [contexto] Mostra a lista / Próximo item / Deslizar à direita / Girar para frente ++ ++ ++ ++ [context] Show toolbar / List up / Info up / Previous widget ++ [contexto] Mostra a barra de ferramentas / Lista para cima / Informação para cima / elemento anterior ++ ++ ++ ++ [context] Hide toolbar / List down / Info down / Next widget ++ [contexto] Esconde a barra de ferramentas / Lista para baixo / Informação para baixo / Próximo elemento ++ ++ ++ ++ [context] Select / Set / Toggle details / Start emulation ++ [contexto] Seleciona / Define / Alterna os detalhes / Inicia a emulação ++ ++ ++ ++ [context] Zoom in / List top ++ [contexto] Mais aproximação / Topo da lista ++ ++ ++ ++ [context] Zoom out / List bottom ++ [contexto] Menos aproximação / Fim da lista ++ ++ ++ ++ [context] List page up / Flick page up ++ [contexto] Sobe a página da lista / Flick Sobe a página ++ ++ ++ ++ [context] List page down / Flick page down ++ [contexto] Desce a página da lista / Flick Desce a página ++ ++ ++ ++ [context] List top ++ [contexto] Topo da lista ++ ++ ++ ++ [context] List bottom ++ [contexto] Fim da lista ++ ++ ++ ++ [context] Set primary display data item ++ [contexto] Define o item dos dados da tela primária ++ ++ ++ ++ [context] Set secondary display data item ++ [contexto] Define o item dos dados da tela secundária ++ ++ ++ ++ [global] Zoom in ++ [global] Mais aproximação ++ ++ ++ ++ [global] Zoom out ++ [global] Menos aproximação ++ ++ ++ ++ ++ ++ [global] Start emulation ++ [global] Iniciar a emulação ++ ++ ++ ++ [global] Toggle video playback ++ [global] Alternar a reprodução do vídeo ++ ++ ++ ++ [global] Flip cabinet / machine-card ++ [global] Gira a máquina de cartão / gabinete ++ ++ ++ ++ [context] Abort machine launch / Hide preferences ++ [contexto] Aborta a execução da máquina / Esconde as preferências ++ ++ ++ ++ [global] Search ++ [global] Procura ++ ++ ++ ++ [global] Toggle preferences ++ [global] Alterna as preferências ++ ++ ++ ++ [global] Cursor up ++ [global] Cursor para cima ++ ++ ++ ++ [global] Cursor down ++ [global] Cursor para baixo ++ ++ ++ ++ [global] Cursor left ++ [global] Cursor para a esquerda ++ ++ ++ ++ [global] Cursor right ++ [global] Cursor para a direita ++ ++ ++ ++ [global] Page up ++ Sobe a página ++ ++ ++ ++ [global] Page down ++ Desce a página ++ ++ ++ ++ [global] Start of list ++ [global] Início da lista ++ ++ ++ ++ [global] End of list ++ [global] Fim da lista ++ ++ ++ ++ [global] Focus search box ++ [global] Dar foco à caixa de busca ++ ++ ++ ++ [global] Toggle menu-bar ++ [global] Alterna a barra de menu ++ ++ ++ ++ ++ [global] Next component ++ [global] Próximo componente ++ ++ ++ ++ ++ [global] Previous component ++ [global] Componente anterior ++ ++ ++ ++ [global] Toggle list ++ [global] Alterna a lista ++ ++ ++ ++ [global] Toggle toolbar ++ [global] Alterna a barra de ferramentas ++ ++ ++ ++ ++ ++ ++ [global] Toggle full-screen / windowed mode ++ [global] Alterna para tela cheia / modo janela ++ ++ ++ ++ ++ ++ [global] Exit ++ [global] Encerrar ++ ++ ++ ++ SevenZipFile ++ ++ ++ file name '%1' not found ++ o nome o arquivo '%1' não foi encontrado ++ ++ ++ ++ ++ archive not open ++ arquivo não aberto ++ ++ ++ ++ ++ null-buffer not allowed ++ buffer nulo não permitido ++ ++ ++ ++ ++ ++ ++ ++ ++ extraction of file '%1' (index %2) failed ++ a extração do arquivo '%1' (índice %2) falhou ++ ++ ++ ++ no error ++ nenhum erro ++ ++ ++ ++ incorrect data ++ dados incorretos ++ ++ ++ ++ out of memory ++ sem memória ++ ++ ++ ++ incorrect CRC ++ CRC incorreto ++ ++ ++ ++ unsupported compression ++ compressão incompatível ++ ++ ++ ++ incorrect properties ++ propriedades incorretas ++ ++ ++ ++ premature end-of-file (input) ++ fim prematuro do arquivo (entrada) ++ ++ ++ ++ premature end-of-file (output) ++ fim prematuro do arquivo (saída) ++ ++ ++ ++ failed reading ++ falha ao ler ++ ++ ++ ++ failed writing ++ falha ao escrever ++ ++ ++ ++ failed signalling progress ++ falha ao sinalizar o progresso ++ ++ ++ ++ fatal error ++ erro fatal ++ ++ ++ ++ thread error ++ erro do processo ++ ++ ++ ++ invalid archive structure ++ estrutura inválida do arquivo ++ ++ ++ ++ invalid header structure ++ estrutura inválida do cabeçalho ++ ++ ++ ++ unknown error ++ erro desconhecido ++ ++ ++ ++ no file name specified ++ nenhum nome de arquivo foi especificado ++ ++ ++ ++ ++ ++ can't open archive '%1' ++ é impossível abrir o arquivo '%1' ++ ++ ++ ++ ToxicWaste ++ ++ ++ ++ Initialization done ++ Inicialização terminada ++ ++ ++ ++ ++ ID ++ ID ++ ++ ++ ++ ++ ROM state ++ Condição da ROM ++ ++ ++ ++ ++ Flyer image ++ Imagem do panfleto ++ ++ ++ ++ ++ Cabinet image ++ Imagem do gabinete ++ ++ ++ ++ ++ Controller image ++ Imagem do controle ++ ++ ++ ++ ++ Marquee image ++ Imagem de marquise ++ ++ ++ ++ ++ Title image ++ Imagem do título ++ ++ ++ ++ ++ PCB image ++ Imagem do PCB ++ ++ ++ ++ ++ Preview image ++ Imagem da pré-visualização ++ ++ ++ ++ ++ Starting initialization ++ Começando a inicialização ++ ++ ++ ++ ++ Images ++ Imagens ++ ++ ++ ++ ++ Emu info ++ informação do emulador ++ ++ ++ ++ ++ Machine info ++ Informação da máquina ++ ++ ++ ++ ++ Really quit? ++ Deseja encerrar? ++ ++ ++ ++ ++ Yes ++ Sim ++ ++ ++ ++ ++ No ++ Não ++ ++ ++ ++ ++ Switches ++ Interruptores ++ ++ ++ ++ ++ Show floating-bubbles animation? ++ Mostra a animação das bolhas flutuantes? ++ ++ ++ ++ ++ Draw animation in the foreground? ++ Desenha a animação em primeiro plano? ++ ++ ++ ++ ++ Show radial wave effect on background? ++ Mostra o efeito de onda radial no plano de fundo? ++ ++ ++ ++ ++ Auto-stop animation and wave effect? ++ Parar automaticamente a animação e o efeito de onda? ++ ++ ++ ++ ++ Show FPS counter in the menu-bar? ++ Mostra o contador de QPS na barra do menu? ++ ++ ++ ++ ++ Confirm when quitting the application? ++ Confirmar quando encerrar a aplicação? ++ ++ ++ ++ ++ Position the cabinet automatically? ++ Posicionar o gabinete automaticamente? ++ ++ ++ ++ ++ Sliders ++ Controles deslizantes ++ ++ ++ ++ ++ Cabinet zoom ++ Aproximação do gabinete ++ ++ ++ ++ ++ Cabinet X center offset ++ Deslocamento do centro X do gabinete ++ ++ ++ ++ ++ Cabinet Y center offset ++ Deslocamento do centro Y do gabinete ++ ++ ++ ++ ++ Cabinet opacity ++ Opacidade do gabinete ++ ++ ++ ++ ++ Background opacity ++ Opacidade do plano de fundo ++ ++ ++ ++ ++ Machine list opacity ++ Opacidade da lista das máquinas ++ ++ ++ ++ ++ Backend ++ Infraestrutura ++ ++ ++ ++ ++ Option ++ Opção ++ ++ ++ ++ ++ Value ++ Valor ++ ++ ++ ++ ++ For customized default backend options to ++take effect, please restart QMC2 Arcade! ++ Para que as opções personalizadas de infraestrutura padrão ++surtam efeito, reinicie o Arcade QMC2! ++ ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ ++ FPS ++ QPS ++ ++ ++ ++ ++ Starting shader effect ++ Iniciando o efeito shader ++ ++ ++ ++ ++ Shader effect stopped ++ O efeito shader foi interrompido ++ ++ ++ ++ ToxicWaste-video ++ ++ ++ ++ Starting initialization ++ Começando a inicialização ++ ++ ++ ++ ++ Images ++ Imagens ++ ++ ++ ++ ++ Emu info ++ informação do emulador ++ ++ ++ ++ ++ Machine info ++ Informação da máquina ++ ++ ++ ++ ++ Really quit? ++ Deseja encerrar? ++ ++ ++ ++ ++ Yes ++ Sim ++ ++ ++ ++ ++ No ++ Não ++ ++ ++ ++ ++ Switches ++ Interruptores ++ ++ ++ ++ ++ Show floating-bubbles animation? ++ Mostra a animação das bolhas flutuantes? ++ ++ ++ ++ ++ Draw animation in the foreground? ++ Desenha a animação em primeiro plano? ++ ++ ++ ++ ++ Show radial wave effect on background? ++ Mostra o efeito de onda radial no plano de fundo? ++ ++ ++ ++ ++ Auto-stop animation and wave effect? ++ Parar automaticamente a animação e o efeito de onda? ++ ++ ++ ++ ++ Show FPS counter in the menu-bar? ++ Mostra o contador de QPS na barra do menu? ++ ++ ++ ++ ++ Confirm when quitting the application? ++ Confirmar quando encerrar a aplicação? ++ ++ ++ ++ ++ Position the cabinet automatically? ++ Posicionar o gabinete automaticamente? ++ ++ ++ ++ ++ Sliders ++ Controles deslizantes ++ ++ ++ ++ ++ Cabinet zoom ++ Aproximação do gabinete ++ ++ ++ ++ ++ Cabinet X center offset ++ Deslocamento do centro X do gabinete ++ ++ ++ ++ ++ Cabinet Y center offset ++ Deslocamento do centro Y do gabinete ++ ++ ++ ++ ++ Cabinet opacity ++ Opacidade do gabinete ++ ++ ++ ++ ++ Background opacity ++ Opacidade do plano de fundo ++ ++ ++ ++ ++ Machine list opacity ++ Opacidade da lista das máquinas ++ ++ ++ ++ Video player volume ++ Volume do tocador de vídeo ++ ++ ++ ++ Video auto play ++ Reprodução automática do vídeo ++ ++ ++ ++ off ++ desligado ++ ++ ++ ++ after ++ depois ++ ++ ++ ++ s ++ s ++ ++ ++ ++ ++ Backend ++ Infraestrutura ++ ++ ++ ++ ++ Option ++ Opção ++ ++ ++ ++ ++ Value ++ Valor ++ ++ ++ ++ ++ For customized default backend options to ++take effect, please restart QMC2 Arcade! ++ Para que as opções personalizadas de infraestrutura padrão ++surtam efeito, reinicie o Arcade QMC2! ++ ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ ++ FPS ++ QPS ++ ++ ++ ++ ++ Starting shader effect ++ Iniciando o efeito shader ++ ++ ++ ++ ++ Shader effect stopped ++ O efeito shader foi interrompido ++ ++ ++ ++ TweakedQmlApplicationViewer ++ ++ ++ Theme ++ Tema ++ ++ ++ ++ Console mode ++ Modo de console ++ ++ ++ ++ Language ++ Idioma ++ ++ ++ ++ Video snaps ++ Capturas de vídeo ++ ++ ++ ++ Loading global and theme-specific settings ++ Carregando as configurações globais e as específicas do tema ++ ++ ++ ++ Saving global and theme-specific settings ++ Salvando as configurações globais e as específicas do tema ++ ++ ++ ++ Activating full-screen display ++ Ativando a tela cheia ++ ++ ++ ++ Activating windowed display ++ Ativando o modo janela ++ ++ ++ ++ correct ++ correto ++ ++ ++ ++ mostly correct ++ maioria correto ++ ++ ++ ++ incorrect ++ incorreto ++ ++ ++ ++ not found ++ não encontrado ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 ++ AVISO: o arquivo de filtro da lista '%1' não existe ou não está acessível, revertendo para a %2 completa ++ ++ ++ ++ ++ ++ ++ ++ machine list ++ lista das máquinas ++ ++ ++ ++ machine ++ máquina ++ ++ ++ ++ Loading %1 from '%2' ++ Carregando %1 de '%2' ++ ++ ++ ++ WARNING: Can't open ROM state cache file '%1', please check permissions ++ AVISO: Não foi possível abrir o arquivo de cache das condições da ROM '%1', verifique as permissões ++ ++ ++ ++ WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it ++ AVISO: O arquivo do cache das condições da ROM '%1' não existe, rode o executável do front-end principal para criá-lo ++ ++ ++ ++ FATAL: Can't open %1 cache file '%2', please check permissions ++ FATAL: Não foi possível abrir o arquivo %1 '%2' do cache, verifique as permissões ++ ++ ++ ++ FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it ++ AVISO: O arquivo do cache %1 '%2' não existe, rode o executável do front-end principal para criá-lo ++ ++ ++ ++ Done (loading %1 from '%2') ++ Feito (carregando %1 de '%2') ++ ++ ++ ++ %n non-device set(s) loaded ++ ++ %n o conjunto de não-dispositivo foi carregado ++ %n os conjuntos de não-dispositivos foram carregados ++ ++ ++ ++ ++ Starting emulator #%1 for %2 ID '%3' ++ Iniciando o emulador #%1 para %2 ID '%3' ++ ++ ++ ++ WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' ++ AVISO:TweakedQmlApplicationViewer::requestInfo(): a classe de informação não é compatível '%1' ++ ++ ++ ++ ++ no info available ++ nenhuma informação disponível ++ ++ ++ ++ Stopping QML viewer ++ Parando o visualizador QML ++ ++ ++ ++ QML viewer stopped - please close the console window to exit ++ O visualizador QML está parado - feche a janela do console para encerrar ++ ++ ++ ++ darkone ++ ++ ++ ++ ID ++ ID ++ ++ ++ ++ ++ ROM state ++ Condição da ROM ++ ++ ++ ++ ++ ++ ++ ++ ++ no info available ++ nenhuma informação disponível ++ ++ ++ ++ ++ Preferences ++ Preferências ++ ++ ++ ++ ++ behaviour ++ comportamento ++ ++ ++ ++ ++ FPS counter ++ contador de QPS ++ ++ ++ ++ ++ lights out in ++ apaga as luzes em ++ ++ ++ ++ ++ secs ++ segs ++ ++ ++ ++ ++ scale ++ escala ++ ++ ++ ++ ++ effects ++ efeitos ++ ++ ++ ++ ++ screen lighting ++ iluminação da tela ++ ++ ++ ++ ++ launch flash? ++ inicia o flash? ++ ++ ++ ++ ++ launch zoom? ++ aproximar na inicialização? ++ ++ ++ ++ ++ colour scheme ++ esquema de cor ++ ++ ++ ++ ++ dark ++ escuro ++ ++ ++ ++ ++ metal ++ metal ++ ++ ++ ++ ++ backend ++ infraestrutura ++ ++ ++ ++ ++ sort by name? ++ ordenar por nome? ++ ++ ++ ++ ++ auto-hide toolbar ++ auto-oculta a barra de ferramentas ++ ++ ++ ++ ++ ++ ++ opacity ++ opacidade ++ ++ ++ ++ ++ back lighting ++ luz de fundo ++ ++ ++ ++ ++ FPS ++ QPS ++ ++ ++ ++ darkone-video ++ ++ ++ ++ Preferences ++ Preferências ++ ++ ++ ++ ++ behaviour ++ comportamento ++ ++ ++ ++ ++ sort by name? ++ ordenar por nome? ++ ++ ++ ++ ++ auto-hide toolbar ++ auto-oculta a barra de ferramentas ++ ++ ++ ++ ++ FPS counter ++ contador de QPS ++ ++ ++ ++ ++ lights out in ++ apaga as luzes em ++ ++ ++ ++ ++ secs ++ segs ++ ++ ++ ++ ++ scale ++ escala ++ ++ ++ ++ video snaps ++ capturas de vídeo ++ ++ ++ ++ volume ++ volume ++ ++ ++ ++ auto-play ++ auto-reprodução ++ ++ ++ ++ off ++ desligado ++ ++ ++ ++ s ++ s ++ ++ ++ ++ ++ effects ++ efeitos ++ ++ ++ ++ ++ screen lighting ++ iluminação da tela ++ ++ ++ ++ ++ ++ ++ opacity ++ opacidade ++ ++ ++ ++ ++ back lighting ++ luz de fundo ++ ++ ++ ++ ++ launch flash? ++ inicia o flash? ++ ++ ++ ++ ++ launch zoom? ++ aproximar na inicialização? ++ ++ ++ ++ ++ colour scheme ++ esquema de cor ++ ++ ++ ++ ++ dark ++ escuro ++ ++ ++ ++ ++ metal ++ metal ++ ++ ++ ++ ++ backend ++ infraestrutura ++ ++ ++ ++ ++ FPS ++ QPS ++ ++ ++ +diff --git a/src/arcade/translations/qmc2-arcade_ro.ts b/src/arcade/translations/qmc2-arcade_ro.ts +index 1fc18b46d..33ae87a61 100644 +--- a/src/arcade/translations/qmc2-arcade_ro.ts ++++ b/src/arcade/translations/qmc2-arcade_ro.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + WARNING: can't open software info file '%1' + + + +- ++ + %n software info record(s) imported + + +@@ -193,33 +193,33 @@ + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + WARNING: can't open emulator info file %1 + + + +- ++ + %n emulator info record(s) imported + + +@@ -228,33 +228,33 @@ + + + +- +- ++ ++ + system info-texts + + + +- ++ + WARNING: missing '$end' in machine info file %1 + + + +- ++ + WARNING: missing '$bio' in machine info file %1 + + + +- ++ + WARNING: missing '$info' in machine info file %1 + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -263,9 +263,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + +@@ -339,23 +339,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + + + +- ++ + WARNING: Can't open %1 7z file '%2' + + + +- ++ + WARNING: Can't open %1 archive file '%2' + + + +- +- ++ ++ + Decompressing archive, please wait... + + +@@ -381,7 +381,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + + +@@ -389,24 +389,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + + + +- +- ++ ++ + pressed + + + +- +- ++ ++ + released + + + +- ++ + key-sequence '%1' %2 - default event processing + + +@@ -414,22 +414,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + + + +- ++ + Done (loading configuration template from '%1') + + + +- ++ + %n option(s) loaded + + +@@ -438,169 +438,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + + + +- ++ + No error occurred + + + +- ++ + An error occurred when reading from the file + + + +- ++ + An error occurred when writing to the file + + + +- ++ + A fatal error occurred + + + +- ++ + A resource error occurred + + + +- ++ + The file could not be opened + + + +- ++ + The operation was aborted + + + +- +- ++ ++ + A timeout occurred + + + +- ++ + An unspecified error occurred + + + +- ++ + The file could not be removed + + + +- ++ + The file could not be renamed + + + +- ++ + The position in the file could not be changed + + + +- ++ + The file could not be resized + + + +- ++ + The file could not be accessed + + + +- ++ + The file could not be copied + + + +- +- ++ ++ + An unknown error occurred + + + +- ++ + The process failed to start + + + +- ++ + The process crashed + + + +- ++ + An error occurred when attempting to write to the process + + + +- ++ + An error occurred when attempting to read from the process + + + +- ++ + Not running + + + +- ++ + Starting + + + +- ++ + Running + + + +- ++ + Unknown + + + +- ++ + Emulator #%1 error: reason = %2 + + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + + + +- ++ + normal + + + +- ++ + crashed + + + +- ++ + Emulator #%1 stdout: %2 + + + +- ++ + Emulator #%1 stderr: %2 + + + +- ++ + Emulator #%1 started + + + +- ++ + Emulator #%1 state changed: newState = %2 + + +@@ -608,59 +608,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + + + +- ++ + preview + + + +- ++ + flyer + + + +- ++ + cabinet + + + +- ++ + controller + + + +- ++ + marquee + + + +- ++ + title + + + +- ++ + PCB + + + +- ++ + software snapshot + + + +- ++ + icon + + +@@ -670,82 +670,72 @@ + + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + + + +- ++ + %1 is not valid theme - available themes: %2 + + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + + + +- ++ + (none) + + + +- ++ + emulator-mode: %1 + + + +- ++ + language: %1 + + + +- ++ + theme: %1 + + + +- +- graphics-system: %1 +- +- +- +- ++ + console-mode: %1 + + + +- ++ + Starting QML viewer using theme '%1' + + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + + +@@ -1070,7 +1060,8 @@ + + + +- ++ ++ + can't open archive '%1' + + +@@ -1531,126 +1522,121 @@ take effect, please restart QMC2 Arcade! + + TweakedQmlApplicationViewer + +- ++ + Theme + + + +- +- Graphics system +- +- +- +- ++ + Console mode + + + +- ++ + Language + + + +- ++ + Video snaps + + + +- ++ + Loading global and theme-specific settings + + + +- ++ + Saving global and theme-specific settings + + + +- ++ + Activating full-screen display + + + +- ++ + Activating windowed display + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + unknown + + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + + + +- ++ + machine + + + +- ++ + Loading %1 from '%2' + + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + + + +- ++ + Done (loading %1 from '%2') + + + +- ++ + %n non-device set(s) loaded + + +@@ -1659,30 +1645,28 @@ take effect, please restart QMC2 Arcade! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + + + +- +- ++ ++ + no info available + + + +- +- ++ + Stopping QML viewer + + + +- +- ++ + QML viewer stopped - please close the console window to exit + + +diff --git a/src/arcade/translations/qmc2-arcade_sv.ts b/src/arcade/translations/qmc2-arcade_sv.ts +index 06f7a418a..e7c39a3a4 100644 +--- a/src/arcade/translations/qmc2-arcade_sv.ts ++++ b/src/arcade/translations/qmc2-arcade_sv.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + WARNING: can't open software info file '%1' + + + +- ++ + %n software info record(s) imported + + +@@ -192,33 +192,33 @@ + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + WARNING: can't open emulator info file %1 + + + +- ++ + %n emulator info record(s) imported + + +@@ -226,33 +226,33 @@ + + + +- +- ++ ++ + system info-texts + + + +- ++ + WARNING: missing '$end' in machine info file %1 + + + +- ++ + WARNING: missing '$bio' in machine info file %1 + + + +- ++ + WARNING: missing '$info' in machine info file %1 + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + +@@ -260,9 +260,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + +@@ -336,23 +336,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + + + +- ++ + WARNING: Can't open %1 7z file '%2' + + + +- ++ + WARNING: Can't open %1 archive file '%2' + + + +- +- ++ ++ + Decompressing archive, please wait... + + +@@ -378,7 +378,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + + +@@ -386,24 +386,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + + + +- +- ++ ++ + pressed + + + +- +- ++ ++ + released + + + +- ++ + key-sequence '%1' %2 - default event processing + + +@@ -411,22 +411,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + + + +- ++ + Done (loading configuration template from '%1') + + + +- ++ + %n option(s) loaded + + +@@ -434,169 +434,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + + + +- ++ + No error occurred + + + +- ++ + An error occurred when reading from the file + + + +- ++ + An error occurred when writing to the file + + + +- ++ + A fatal error occurred + + + +- ++ + A resource error occurred + + + +- ++ + The file could not be opened + + + +- ++ + The operation was aborted + + + +- +- ++ ++ + A timeout occurred + + + +- ++ + An unspecified error occurred + + + +- ++ + The file could not be removed + + + +- ++ + The file could not be renamed + + + +- ++ + The position in the file could not be changed + + + +- ++ + The file could not be resized + + + +- ++ + The file could not be accessed + + + +- ++ + The file could not be copied + + + +- +- ++ ++ + An unknown error occurred + + + +- ++ + The process failed to start + + + +- ++ + The process crashed + + + +- ++ + An error occurred when attempting to write to the process + + + +- ++ + An error occurred when attempting to read from the process + + + +- ++ + Not running + + + +- ++ + Starting + + + +- ++ + Running + + + +- ++ + Unknown + + + +- ++ + Emulator #%1 error: reason = %2 + + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + + + +- ++ + normal + + + +- ++ + crashed + + + +- ++ + Emulator #%1 stdout: %2 + + + +- ++ + Emulator #%1 stderr: %2 + + + +- ++ + Emulator #%1 started + + + +- ++ + Emulator #%1 state changed: newState = %2 + + +@@ -604,59 +604,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + + + +- ++ + preview + + + +- ++ + flyer + + + +- ++ + cabinet + + + +- ++ + controller + + + +- ++ + marquee + + + +- ++ + title + + + +- ++ + PCB + + + +- ++ + software snapshot + + + +- ++ + icon + + +@@ -666,82 +666,72 @@ + + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + + + +- ++ + %1 is not valid theme - available themes: %2 + + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + + + +- ++ + (none) + + + +- ++ + emulator-mode: %1 + + + +- ++ + language: %1 + + + +- ++ + theme: %1 + + + +- +- graphics-system: %1 +- +- +- +- ++ + console-mode: %1 + + + +- ++ + Starting QML viewer using theme '%1' + + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + + +@@ -1066,7 +1056,8 @@ + + + +- ++ ++ + can't open archive '%1' + + +@@ -1527,126 +1518,121 @@ take effect, please restart QMC2 Arcade! + + TweakedQmlApplicationViewer + +- ++ + Theme + + + +- +- Graphics system +- +- +- +- ++ + Console mode + + + +- ++ + Language + + + +- ++ + Video snaps + + + +- ++ + Loading global and theme-specific settings + + + +- ++ + Saving global and theme-specific settings + + + +- ++ + Activating full-screen display + + + +- ++ + Activating windowed display + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + unknown + + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + + + +- ++ + machine + + + +- ++ + Loading %1 from '%2' + + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + + + +- ++ + Done (loading %1 from '%2') + + + +- ++ + %n non-device set(s) loaded + + +@@ -1654,30 +1640,28 @@ take effect, please restart QMC2 Arcade! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + + + +- +- ++ ++ + no info available + + + +- +- ++ + Stopping QML viewer + + + +- +- ++ + QML viewer stopped - please close the console window to exit + + +diff --git a/src/arcade/translations/qmc2-arcade_us.qm b/src/arcade/translations/qmc2-arcade_us.qm +index 78cebd1efa4d8208f3e85f6cbe93aa8d6151d331..8541730a0c8384217aaa1364140cf420c08230e4 100644 +GIT binary patch +delta 2391 +zcmXArdsI_b7RGmyo7|h5n_LhfA_P=G3?M3s5r`n7M4mybFr%}uEeK_nQNbrx8Xv6D +zB4Z1I;-j|IC)(OFQb4O+qN3DR2Nl#AwL(?uYSoGsMr&)G56@q}`#NXu{eAoFr1XfQ +zwn_2+VCNJfT1pi62cvyE5!XpHA%!uijYw@LicDj)#uKHyMl^m4V~n0LX&qzgF{0T; +zME)y?=AR~-w3;z)J<;;Bh=aWcXip_g-DaZb03AGXAbG1uaG*m5doN3ez=6q$pI39C$xHOA-HeJM1{k7;{arur>mTgew*ewUFz! +zVvw^?(YERe(Wo7YZ`F74YK!7hJ5rdqhHf|*xnB9O`y3n` +z8=-t$ftpmal>NEIuzt3(zw5t5Q#w_GJPiwOtERT^fhL)%M4<<~$e41~bx0ZP^jE#R +z`3w}PR+ZaI;j_1Df5Bi_@q?-*s*AJULpk+~lM_{szJUU^VXBuaYN7Cc&LiSW +zBKJpJfZ&P7tmlGPd`{%n!3CFmf%{;_=AIa7%LbqQhO> +zN|Lc4pE0`ILu<~w* +z8{?3Wd64>C*T0EI%y!M;Mmon|SHC=i*D;YAF%Pf3IgRO}4R#;Yv_=?!OXx4asUolUVoXwcFmH&DfB6qxmcu76;jkJ0cz-N3IP;07Z5Eo= +z7h)9n3Qc7SjEa2W_>d;Gyxzc$n6)4U;i!mA3Hm +z8`v;byUf}GL$_;}H_nCpbU(!{uFYx|T7uTO9M52@+bC;R1~H6%%eCuG;xU~?-DoyV%x+C7& +zlnE{tyPJ2y<`VJFw9Alj9AjFv&TXw5e0p7H>cO_*{kp)RNknN5UFg&wP<^^?vD-Bw +zIY3vo(F{8rj8X2oswz|!QmNZNX)VrEvaa>yY04ofS9kua4xEc2jOj~sKPEs9!!X_b +zG7N|SQTJfD3xUj%+lFQgkiC*uCh{Nm5o6R0$t!E%zLPPkR5Hzjk8Yeail2jdn(WdG +zMzbKrwxf)(A4yXJu$zvPY?W|5R4dKOMEjfm2_jljvMWt6&g7);cnqaUA4)g(CSbf* +zO5dMS;cX9NnqKO;k0QekNcTdZ>F8eRi4`qiPSkr<1>jKi>0|n9V4b9o`ydy^UUD@G +z{slUH!LE-{X)a^>H~PgdAdzvNzUcNRkmjcTV4?-T=XU*_`5tH}hrTZrzD|qKKi}jD +z3)&geee{1^JBKJE4CFBg(OV7TjvQpGW{f@InymGA4l&FfREpn?vxa$P90r=f;9R!{ +zQM?Rgp2*d+%uwco=TqM_lz(1?-48OR^%~wUvEg4txS_@34&Ad19pNj9G&>DdbO8&)kI6Y>w&BBxj8QG} +zf=+Zo&~$m_6`cIwVtMt;YHVy~OqS#|&3!oOe~~|}X-D8=j8>Oie-&l>&6Q91<8RG~ +y0Qr32V-%Jr|87}|c=zN#cTXpQBAyjsuAFEn5{LRX{A`Yw8s<*iZEUbY_x}SCDv8nn + +delta 2590 +zcmZ9NX;f2Z8pod`H@R7Ea#4gR2t+^;5Rpx`5H>Z6Kv3&aoxw?2GXpMwSgIIN=Tw1l +z3c*sVwl1hx#RU|XI^%{~Z5>(_wc4VsIGj1!Dhfx%QRh$J`P5Ipd+(d~S^m$Gt*w$Z +z$0Q#OvCko*Vxoj~j2XE^+;yVxTZ}0VBDsYq;x?o4Uqn-9;M|=t_EW}`G{&?KiQXw9 +z@`8=|=ZKsJ@QFeOKDrQAad#Dm88CB?|7MBZlWhLC5H1 +z?pPvwlplLAbfTO>JtmJGJP +zkz9PggJ|?i$z^#L(KvU>ckKuvQpFgzQF0^qI8po#$>Y9AB2ALy%?ulUH$$rKT}qVP +zD>c0vPb7?yX67PCBI$x_sG`%TW4eY2V%Ni4v_cr8t4eKS7q%-T+O!Ws{T-z|D-Q+Z|0(Kl?-3x~lV# +z-dk2}UPCl$scg4x2qa!0YmJu?`S!@Zo&I;E6UP{LP4@UJC}4ghdt15{;mA4X(8EN7 +z9&E +zdEUWHno1F`etRHepS(CC}(OrV@8~!(90Lq +z`cY9d`XUkki=uX*^~ZWE8g}1BJ<1tP!xSy4wM6oHxv09Qx}>xk>6FuV+jQ?rf2j2D1l7+$NUW= +z^q!W*zj%m|^&P_ZYjNM(Un##0PU=u9&CZx8XQf-=K%Q%q!#`O>^Js*t(qG6%AulP@ +zn-OR7N#zH_Iiis3jL}7)@4(h$Om`?Zid_ioo^sQwLO9x|-2QS2>gB3z_D7wDeXeY= +z=Mhbu?a(Up_B+a+T^>ZCJ&Z9GDv^gwdUus?Qy9^R6{^CGScgG!)#9tznZrz~660xv +z{X(_m$U8_oUsc96K;CVtYI6sXYprU%5x)<4S9Lx^kG4Lpy6Cb8Q(mEZ)Q|E^+^c#T +z5Q*{jRO%E8tsR@CR}s!@#&m_oX{8g~{!`=e0Oo^NX?)$L5T!?J +z0+W71{&zGBoo*6|KAOr8{gHP+WAta5x;o?=@I=ayQA&<~N#^?^gb@sr!l`&?J;4u&7 +zbmD~3{7kIZn?m6FaFjnv2#2F-h7-)S&?7KUm_7^h +z;qfJLjvW(Q)3wBzCr6+=Yz#mp^fdUhwy?nexPuE!Hy=Sm))kdZT}qOK912+ +zr(O6OI_l?Xi+-!vC%7a&yp=*Cu3Z`s1HM_LhD73T&ysA5R>qWD;_{=t*x9Y(-uiZYpUfC%5D(sf +zD4ui0Q(jsOZ-w}cZx0e{6FWT%X(%O^i?1S!;ka9TvjdL9{%XUfs%n|5cJneNjSMl^ +ziVX`EmKdytQfq-N+mKgeU6gOjDh?_xD=x_?Gz1x}rB+*k^}T|e-=8@)`x{zH{1XKy +i=il9ObVhi!9EsSWcM{G2w`XAX9M-hpmN{u(Y5xZT&dcQh + +diff --git a/src/arcade/translations/qmc2-arcade_us.ts b/src/arcade/translations/qmc2-arcade_us.ts +index 6ac603f46..87453b47f 100644 +--- a/src/arcade/translations/qmc2-arcade_us.ts ++++ b/src/arcade/translations/qmc2-arcade_us.ts +@@ -1,6 +1,6 @@ + + +- ++ + + BackgroundAnimation + +@@ -27,164 +27,164 @@ + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- + machine-info + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + +- +- +- +- +- ++ ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + WARNING: can't open software info file '%1' + + + +- ++ + %n software info record(s) imported + + %n software info record imported +@@ -192,33 +192,33 @@ + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + WARNING: can't open emulator info file %1 + + + +- ++ + %n emulator info record(s) imported + + %n emulator info record imported +@@ -226,33 +226,33 @@ + + + +- +- ++ ++ + system info-texts + + + +- ++ + WARNING: missing '$end' in machine info file %1 + + + +- ++ + WARNING: missing '$bio' in machine info file %1 + + + +- ++ + WARNING: missing '$info' in machine info file %1 + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + %n machine info record imported +@@ -260,9 +260,9 @@ + + + ++ ++ + +- +- + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + +@@ -336,23 +336,23 @@ + + ImageProvider + +- ++ + WARNING: Can't open %1 ZIP file '%2' + + + +- ++ + WARNING: Can't open %1 7z file '%2' + + + +- ++ + WARNING: Can't open %1 archive file '%2' + + + +- +- ++ ++ + Decompressing archive, please wait... + + +@@ -378,7 +378,7 @@ + + JoystickManager + +- ++ + joystick-function '%1' triggered - emulating event for mapped key-sequence '%2' + + +@@ -386,24 +386,24 @@ + + KeyEventFilter + +- ++ + key-sequence '%1' %2 - emulating event for mapped key-sequence '%3' + + + +- +- ++ ++ + pressed + + + +- +- ++ ++ + released + + + +- ++ + key-sequence '%1' %2 - default event processing + + +@@ -411,22 +411,22 @@ + + ProcessManager + +- ++ + Loading configuration template from '%1' + + + +- ++ + FATAL: XML error reading template: '%1' in file '%2' at line %3, column %4 + + + +- ++ + Done (loading configuration template from '%1') + + + +- ++ + %n option(s) loaded + + %n option loaded +@@ -434,169 +434,169 @@ + + + +- ++ + FATAL: Can't open the configuration template file: reason = %1 + + + +- ++ + No error occurred + + + +- ++ + An error occurred when reading from the file + + + +- ++ + An error occurred when writing to the file + + + +- ++ + A fatal error occurred + + + +- ++ + A resource error occurred + + + +- ++ + The file could not be opened + + + +- ++ + The operation was aborted + + + +- +- ++ ++ + A timeout occurred + + + +- ++ + An unspecified error occurred + + + +- ++ + The file could not be removed + + + +- ++ + The file could not be renamed + + + +- ++ + The position in the file could not be changed + + + +- ++ + The file could not be resized + + + +- ++ + The file could not be accessed + + + +- ++ + The file could not be copied + + + +- +- ++ ++ + An unknown error occurred + + + +- ++ + The process failed to start + + + +- ++ + The process crashed + + + +- ++ + An error occurred when attempting to write to the process + + + +- ++ + An error occurred when attempting to read from the process + + + +- ++ + Not running + + + +- ++ + Starting + + + +- ++ + Running + + + +- ++ + Unknown + + + +- ++ + Emulator #%1 error: reason = %2 + + + +- ++ + Emulator #%1 finished: exitCode = %2, exitStatus = %3 + + + +- ++ + normal + + + +- ++ + crashed + + + +- ++ + Emulator #%1 stdout: %2 + + + +- ++ + Emulator #%1 stderr: %2 + + + +- ++ + Emulator #%1 started + + + +- ++ + Emulator #%1 state changed: newState = %2 + + +@@ -604,59 +604,59 @@ + + QObject + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): invalid image ID '%1' requested + + + +- +- ++ ++ + WARNING: ImageProvider::loadImage(): unable to load image file '%1' from ZIP + + + +- ++ + preview + + + +- ++ + flyer + + + +- ++ + cabinet + + + +- ++ + controller + + + +- ++ + marquee + + + +- ++ + title + + + +- ++ + PCB + + + +- ++ + software snapshot + + + +- ++ + icon + + +@@ -666,82 +666,72 @@ + + + +- +- %1 is not a valid graphics-system - available graphics-systems: %2 +- +- +- +- ++ + %1 is not a valid emulator-mode - available emulator-modes: %2 + + + +- ++ + %1 is not a valid console-mode - available console-modes: %2 + + + +- ++ + %1 is not valid theme - available themes: %2 + + + +- ++ + %1 is not a valid %2 theme - available %2 themes: %3 + + + +- ++ + (none) + + + +- ++ + emulator-mode: %1 + + + +- ++ + language: %1 + + + +- ++ + theme: %1 + + + +- +- graphics-system: %1 +- +- +- +- ++ + console-mode: %1 + + + +- ++ + Starting QML viewer using theme '%1' + + + +- ++ + video snaps %1 + + + +- ++ + enabled + + + +- ++ + disabled + + + +- ++ + QML viewer not started - please close the console window to exit + + +@@ -1066,7 +1056,8 @@ + + + +- ++ ++ + can't open archive '%1' + + +@@ -1527,126 +1518,121 @@ take effect, please restart QMC2 Arcade! + + TweakedQmlApplicationViewer + +- ++ + Theme + + + +- +- Graphics system +- +- +- +- ++ + Console mode + + + +- ++ + Language + + + +- ++ + Video snaps + + + +- ++ + Loading global and theme-specific settings + + + +- ++ + Saving global and theme-specific settings + + + +- ++ + Activating full-screen display + + + +- ++ + Activating windowed display + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- ++ + unknown + + + +- ++ + WARNING: filtered list file '%1' doesn't exist or isn't accessible, falling back to the full %2 + + + +- +- +- +- +- ++ ++ ++ ++ ++ + machine list + + + +- ++ + machine + + + +- ++ + Loading %1 from '%2' + + + +- ++ + WARNING: Can't open ROM state cache file '%1', please check permissions + + + +- ++ + WARNING: The ROM state cache file '%1' doesn't exist, please run main front-end executable to create it + + + +- ++ + FATAL: Can't open %1 cache file '%2', please check permissions + + + +- ++ + FATAL: The %1 cache file '%2' doesn't exist, please run main front-end executable to create it + + + +- ++ + Done (loading %1 from '%2') + + + +- ++ + %n non-device set(s) loaded + + %n non-device set loaded +@@ -1654,30 +1640,28 @@ take effect, please restart QMC2 Arcade! + + + +- ++ + Starting emulator #%1 for %2 ID '%3' + + + +- ++ + WARNING: TweakedQmlApplicationViewer::requestInfo(): unsupported info class '%1' + + + +- +- ++ ++ + no info available + + + +- +- ++ + Stopping QML viewer + + + +- +- ++ + QML viewer stopped - please close the console window to exit + + +diff --git a/src/options.cpp b/src/options.cpp +index 5a457ae6f..802ae5f18 100644 +--- a/src/options.cpp ++++ b/src/options.cpp +@@ -888,7 +888,7 @@ void Options::on_pushButtonApply_clicked() + config->setValue(QMC2_FRONTEND_PREFIX + "GUI/RetryLoadingImages", qmc2RetryLoadingImages); + qmc2ParentImageFallback = checkBoxParentImageFallback->isChecked(); + config->setValue(QMC2_FRONTEND_PREFIX + "GUI/ParentImageFallback", qmc2ParentImageFallback); +- s = comboBoxLanguage->currentText().left(2).toLower(); ++ s = comboBoxLanguage->currentText().split(' ').first(); + needRestart |= (config->value(QMC2_FRONTEND_PREFIX + "GUI/Language", "us").toString() != s); + config->setValue(QMC2_FRONTEND_PREFIX + "GUI/Language", s); + +@@ -1836,7 +1836,7 @@ void Options::restoreCurrentConfig(bool useDefaultSettings) + checkBoxRetryLoadingImages->setChecked(qmc2RetryLoadingImages); + qmc2ParentImageFallback = config->value(QMC2_FRONTEND_PREFIX + "GUI/ParentImageFallback", true).toBool(); + checkBoxParentImageFallback->setChecked(qmc2ParentImageFallback); +- comboBoxLanguage->setCurrentIndex(comboBoxLanguage->findText(config->value(QMC2_FRONTEND_PREFIX + "GUI/Language", "us").toString().toUpper(), Qt::MatchContains | Qt::MatchCaseSensitive)); ++ comboBoxLanguage->setCurrentIndex(comboBoxLanguage->findText(config->value(QMC2_FRONTEND_PREFIX + "GUI/Language", "us").toString(), Qt::MatchContains | Qt::MatchCaseSensitive)); + comboBoxStyle->clear(); + comboBoxStyle->addItem(QObject::tr("Default")); + comboBoxStyle->addItems(QStyleFactory::keys()); +diff --git a/src/setupwizard.cpp b/src/setupwizard.cpp +index 02d51ad18..c4092f1a8 100644 +--- a/src/setupwizard.cpp ++++ b/src/setupwizard.cpp +@@ -74,7 +74,7 @@ SetupWizard::SetupWizard(QSettings *cfg, QWidget *parent) : + m_defaultStyle = QApplication::style()->objectName(); + + // initialize available languages and mewUi-to-QMC2 mappings +- m_availableLanguages << "de" << "es" << "el" << "fr" << "it" << "pl" << "pt" << "ro" << "sv" << "us"; ++ m_availableLanguages << "de" << "es" << "el" << "fr" << "it" << "pl" << "pt" << "pt_BR" << "ro" << "sv" << "us"; + m_uiToQmc2Hash.insert("cabinets_directory", QMC2_EMULATOR_PREFIX + "FilesAndDirectories/CabinetDirectory"); + m_uiToQmc2Hash.insert("cpanels_directory", QMC2_EMULATOR_PREFIX + "FilesAndDirectories/ControllerDirectory"); + m_uiToQmc2Hash.insert("pcbs_directory", QMC2_EMULATOR_PREFIX + "FilesAndDirectories/PCBDirectory"); +@@ -730,7 +730,14 @@ void SetupWizard::setupLanguage() + lang = "sv"; + break; + default: +- lang = "us"; ++ switch ( QLocale::system().country() ) { ++ case QLocale::Brazil: ++ lang = "pt_BR"; ++ break; ++ default: ++ lang = "us"; ++ break; ++ } + break; + } + m_customSettings->setValue(QMC2_FRONTEND_PREFIX + "GUI/Language", lang); +diff --git a/src/tools/qchdman/main.cpp b/src/tools/qchdman/main.cpp +index 9a9bf3f30..07696d6de 100644 +--- a/src/tools/qchdman/main.cpp ++++ b/src/tools/qchdman/main.cpp +@@ -29,7 +29,7 @@ int main(int argc, char *argv[]) + + // load translations + QString language = globalConfig->preferencesLanguage(); +- if ( !globalConfig->languageMap.contains(language) ) ++ if ( !globalConfig->languageMap.contains(language) && !globalConfig->countryMap.contains(language) ) + language = "us"; + QTranslator qchdmanTranslator; + if ( qchdmanTranslator.load(QString("qchdman_%1").arg(language), ":/translations") ) +diff --git a/src/tools/qchdman/preferencesdialog.cpp b/src/tools/qchdman/preferencesdialog.cpp +index 0c5f71982..7d7b0e414 100644 +--- a/src/tools/qchdman/preferencesdialog.cpp ++++ b/src/tools/qchdman/preferencesdialog.cpp +@@ -38,7 +38,9 @@ void PreferencesDialog::applySettings() + { + // GUI + QString lang = ui->comboBoxLanguage->currentText(); +- globalConfig->setPreferencesLanguage(lang.mid(lang.indexOf("(") + 1, 2)); ++ QRegExp exp("\\((.*)\\)"); ++ exp.indexIn(lang); ++ globalConfig->setPreferencesLanguage(exp.cap(1)); + globalConfig->setPreferencesGuiStyle(ui->comboBoxStyle->currentText()); + qApp->setStyle(globalConfig->preferencesGuiStyle()); + globalConfig->setPreferencesAppFont(ui->fontComboBoxAppFont->currentFont().toString()); +diff --git a/src/tools/qchdman/preferencesdialog.ui b/src/tools/qchdman/preferencesdialog.ui +index 2f93978f6..aa7a4cac8 100644 +--- a/src/tools/qchdman/preferencesdialog.ui ++++ b/src/tools/qchdman/preferencesdialog.ui +@@ -6,8 +6,8 @@ + + 0 + 0 +- 369 +- 257 ++ 407 ++ 334 + + + +@@ -125,6 +125,11 @@ + Portuguese (pt) + + ++ ++ ++ Brazilian Portuguese (pt_BR) ++ ++ + + + Romanian (ro) +@@ -137,7 +142,7 @@ + + + +- English (us) ++ American English (us) + + + +diff --git a/src/tools/qchdman/qchdman.pro b/src/tools/qchdman/qchdman.pro +index abaa2a7e6..95bdcd087 100644 +--- a/src/tools/qchdman/qchdman.pro ++++ b/src/tools/qchdman/qchdman.pro +@@ -71,6 +71,7 @@ TRANSLATIONS += translations/qchdman_de.ts \ + translations/qchdman_fr.ts \ + translations/qchdman_pl.ts \ + translations/qchdman_pt.ts \ ++ translations/qchdman_pt_BR.ts \ + translations/qchdman_ro.ts \ + translations/qchdman_sv.ts \ + translations/qchdman_us.ts +diff --git a/src/tools/qchdman/qchdman.qrc b/src/tools/qchdman/qchdman.qrc +index 17b8bd1eb..692ba7e6b 100644 +--- a/src/tools/qchdman/qchdman.qrc ++++ b/src/tools/qchdman/qchdman.qrc +@@ -43,6 +43,7 @@ + translations/qchdman_it.qm + translations/qchdman_pl.qm + translations/qchdman_pt.qm ++ translations/qchdman_pt_BR.qm + translations/qchdman_ro.qm + translations/qchdman_sv.qm + translations/qchdman_us.qm +diff --git a/src/tools/qchdman/qchdmansettings.h b/src/tools/qchdman/qchdmansettings.h +index 8c2dd5a66..f4d634d88 100644 +--- a/src/tools/qchdman/qchdmansettings.h ++++ b/src/tools/qchdman/qchdmansettings.h +@@ -18,6 +18,7 @@ class QtChdmanGuiSettings : public Settings + + public: + QMap languageMap; ++ QMap countryMap; + + QtChdmanGuiSettings() : Settings(QSettings::IniFormat, QSettings::UserScope, QCHDMAN_APP_NAME) + { +@@ -31,6 +32,8 @@ public: + languageMap["ro"] = QLocale::Romanian; + languageMap["sv"] = QLocale::Swedish; + languageMap["us"] = QLocale::English; ++ ++ countryMap["pt_BR"] = QLocale::Brazil; + } + + ~QtChdmanGuiSettings() +@@ -55,6 +58,23 @@ public: + return QLocale::English; + } + ++ QString countryToString(QLocale::Country country) ++ { ++ QString countryStr = countryMap.key(country); ++ if ( !countryStr.isEmpty() ) ++ return countryStr; ++ else ++ return "us"; ++ } ++ ++ QLocale::Country countryFromString(QString country) ++ { ++ if ( countryMap.contains(country) ) ++ return countryMap[country]; ++ else ++ return QLocale::UnitedStates; ++ } ++ + public slots: + // General + void setApplicationVersion(QString version) { setValue("Version", version); } +diff --git a/src/tools/qchdman/translations/qchdman_de.qm b/src/tools/qchdman/translations/qchdman_de.qm +index cad0cef262dce7fae5f3611ca256389a09ef4cb8..6a1d398f2488bbdcf4c724849436a06099871e19 100644 +GIT binary patch +delta 3044 +zcmZWrdst2B9)9=UYwfkxz9vPDTO&y(go<)4a)}A0$Yn@{W(aMKNkcPeh{2Ft4wExX +zOom*N+%HW^g_-@0$$9BOk}IZMB$0tOm~%fAc(@L+v!4Qk-(sib3 +zu>nY2f$Y+4K!(BU}HWQU?LMU0z+yV7!C!iT7KP6ke_Rfz#f6+oAEDz~x%7A9Ra +z>;yCLjZ%&Lh~wRDR1@}o5B%<+3YpF4JFY5=#7y2yR#}$R0|#1Ei7pCoGf1_pv;puM +zrP^M!11R`hbvTUke@Rpojav!ySE=rebp#x2tXSSfRevD{aP?H{lPYfk?~PD*{vsCG +zv_##xg%f`sqV}3Nj0>98gTAC>XJ)E{2XVunzEoRm8Mx^?bw;veg=u84#%GHHx +zqDv2TWou%7cXi`}+e~P(MvmJ7^j@zq4<&KWR~m`b!piPdK-n=XJ~?j1H)%r3GdJMUF=3q> +zvnmvY?W51KY|~QQ-mw!oj?=z>lA5og~VwtJgZaGw|(8 +zT6fQQ;DxK!cRB-Jd7~X-;&`7@?T`i%Dc+@>wU`Rtxu}gi$T$~6v@s5MSe8fHPwZ@g +zN4>QRZ3MtAS-Y@l7Ht`#{VX(;eIQ@^RfBy6D;BQZ5bX$5t<-Ma^Ni0OQj^6_NyXZ# +z{;5FuHAxuAygtxK#`+=_X0~LjppyH>hLyYEpayXR8oK>B8159z?c&7^x>I&dPN{p8VW>3q#_ +zw%i)&_JaV@t(5L;B+bDSrTf!60<9lOzlJlwp9`g`*w)meomBNWjV<%6RGoL5fe*@f +zwHLS*Da*NAm~V>QY9Q0=v{!C*g8AnJ$+im^?^=jFYSMlnZ>AjBwUJJ7lgG?mPG>~F +zmV=IQp!WkgC~p{0Jy;&+Oh@!8lqYVYGM&Ta1(5~7;j8lUN&V>XujDUUdXjLWykSfh +zuxEw*?a5=nt2OeT7aIU&kbLq`6p%ZCNP@Yp^2x04iHY)gFFK=WrJQHUWP%2{z%hf) +zxOG{+9Lb~do<=V2L&=U7$R(O=o|P#1kG;&erA&U7xsok6O@3KRPq$tmH%(%oA7bR@ +zihOpi{fg<`^VK@V#+gp(+o;$lrUL=flp(%U^jV8C^maV0yIUFBavyk}u8hbk;u)Ew +ze3a7R7F*~YWnM%Bt$19S7rz|Pf1!L<$puG#Og$&HO}ee5Y~!|uKqYmsg$?wSlDjkq +z(6}gPhm%&>E9IPu9slVk%K2#$Z;(u-V0>F%O>?aH=UJtoh>qEPO)31C(YF;V#o|cn +zWv7(3uLiRHlsm3WPhx9;rM6FKjJ?h-AVgp-?erQX!(#V*~=1>wAE +zTIn8@YPdnX?(qmR)#q5TYn2uEg;}v-wZ2OjH#E=F`-Tr=<960BygHl(anP@>@uZVH +zh^vUAesygFajJf8TqvD3MZdP1O6F$ha}!6?A*Xig%Qf8C!>s>x45ia8*H=sb09Hll +zYws@Rjd4%^^m9kxL7D!g$gWwQqW|-uKR-K$8-y6H8<20%j^=xZID^?Qg-!}EIAt;O +zwrvdo{af)$t1<+K(aMh-4dMB;dRDq&s>>GMwTlchKTM+J`_~y}Ws>RhYD45zGAtTm +zSQ=r+%=CujUZ;5HjWw(v_6m4uXGq(ypNH%Z!?py@b6#jTZP~%@S!Ou>yaiC3442*c +z-2So^TRaRmGV|FrGYt3hsAxZvq1xMx&CuOY{m#;vdku9x2dA+;yBZn~MN`6Nqv+T~ +zLbb+L7UIoDqbq?C4?^ck1g7L%z@*Ut|%*%}A-Mqv2@LV$Qz(dBGPzrp#$XMGigBWd6 +zUHXW59WzPcq|v+XLcy7r!m)>`+Umrs(WT19e1V-`52diXlGvGu +zWv)}Vc#B)=CeL=+Q~Cz0-VcO7*GF)E4Ce9w|54ohoqNpStYEnPk3xI@xQL}O^I{lw +h{DQc}@pIy%EzwTh7A~IQAMBRB$unKdPV{|J`X34Wxmo}K + +delta 2901 +zcmX9=4Oq=*AHGlj?{og=93>?yOg@}G(i&ZlpTShiX%w$8z +zB1APG*;3Td2Zd0ZWF%8dnUCIi?_K9ySJ!<#PtX5(e)s*mf4}G1wOPEkN&MQ;UInBX +zfMI|Q2Q_@tqi4KV9mKscz)=&#QW0?I1@Y=sz$*meiypvvCmTMAfFzazMO`3u)&TxX +z@{R^dTy6N|Jfw*&K!^U2wiW^|B{sbN!iLX-ApIZ#zSWQp^W$!>L0+GUc-(CdC3FmM +z?>!qfoq)$l0T_~j-ep{9?2O(IUnfq2@1_didNBOfYy-}PVQkD?;McVnyQKjC{>CjE +z3cNNJ<9)ba%SvK0U{1k=`6T522ZDkkINyNDo}UWDMdO{H8HnGzc)vOXsJ)Iw^Bw^s#v@ug54@QZH!%;k;81S*fO(hPP{4HwT*8s<_8Kg1sRY3Pw3?5~LOiZf5Kbs7O +z9x;ra#d!~V!`r*}0DsIiOqs`VMYJJGA(Ow;3{lJKfdhet6+JYde7hmGqy-q1Y}i`7 +z4Jar!WQKBmRgs}MXcaJclHt}w7ocN18&-Z~XR5gZbb8aSo7ZQHfUgVey0vk^)%AAX +zQ~kN{h28L#l4KK +zBZZC^1A&W9!pJ*mK-NoPYN9s<+ib(O7eYjo6*zoLn0MkhaL^(w3S9u?D#G%MJigpp +zSZ}7VxDA8=eHRCn18 +z6z>%7ccUN|+k}>k(~RFN8WuSMu3@6kvpeu$q1gT`1HN@r?0%pG7!W7+`mhzq3l?Y2 +ziQ&AHIPU~A^J8gJtk9)@H*r<(+d%0{8$LAH@b6kNq0s~Q`K9=k2k90Di(3OvFz>TC`-=5nq><$f8y=34gsanl)(S}s +z3Zb80m&A~h#NQ-8VI@#+mL~P1%~~f&QzoYaY0XktwKs5RoHXMs?bc(pG~0*!pL3SB +zlt-|j`j<=J^`UKUbdvUT9Rc+0DDC_57}a_z<@j;KduOGK8>=X5q|}^zhpJ>qk8{F+ +zlhdVt26g~magxzE9q@FL&1>s`zT@R~n*`uyjNGpF8L(%YY`=s2_ov7%llWa>p6s@n +z^976L&VI*PP*tns&d-L@pJ(N+3S~Cd%kG}sxWXcP4q6H{Ma#bLa>JrA@*5V;4|qj> +zqlJMK*UPh`sa&O5o|ADLIP<-{pkpPFFbEt#m{Ebj^E3lgoLo} +z3*@yeRZP@gIdQJp1^B&8-ma$Uqmh%s=XooWY0(E@tg7RS%X>=;KVbwqzK3}VBt>dxPOO&0r +zsFP!pl0J-nNn5TQ$k;?(U6ljb1wj0R041+3fGxJaQt{guhTBJ}+{iG8|DaUA+Zky8 +zK>0n48$3I$++Nfk=s#b%-H^-{c}l6xui(ZRDjx3!E+1CaoXzB$pxO^3y)L^|`)u+* +zwq13INixTTbLR-rx3{OsK!kjOlMzFKWp;>jufeh6Al4Cl&U*&j{?n=>aM>M0d2UNdoTjX +zP9-wH>}WOj&>muun&(Yt6qTv@QRyTYrWU%S(Ggc1)$?;$BAo>F*8!C5h=Y1b$YPB| +zsDJJz<2E<7F?|(VY^~aSmtJlksXm*=jrL`$FRBWFUV}8tzvBzuT03_-W#DM7!-`ZO +zAYFUImx?w9Y9lL_(z-jfk!{r+H)wAjDrRj=(`F^OU7=OFX$!+!XvJgN!liM5=`-z< +z8h()ZH0hG!9RI48kiuj2@mkV|C|*6Xmb3ggAoS2q1u(3#k=khkJN%!yTHZ{BH^vjK +zaI!P6qGL9Eu4#qEbj(f{?c4|4J;ho3RT@jZ!nG3DS|&bGtL#M@S;^Yf)zm4gkJcEj +z@s3T>T9fPP5bqqLVdh~TIM3Lj9~0&7XzYD*KCPN*^uNr6m@gUMim7A54j3bbh`htH +zj1gs*086-FW~j$~%i*Yx{|m-Iw^ga2dTuW&s%aUbtQ +zUp*y;>)aRXC!)3ir`+@tO>KakML+M!vFmvozKGS!(+k)&oAv5^D(W*sul4a@NyO;2 +z|5|!~lYZZ8L^3^oOm96nmr9H?OD@mo{Q+kCDB|VOW(P3h(+ACtK`!i)1Cllvz2Y-= +zndfy0qlYweR1^tcTw{(IeFk_q+Po&Aj<1I`RQ|5N`IK|oL<8_@VU7zghH1(nePrxyt~z~GZ3iTZdLL$zSdS) +z9WB9pYrf+4bJ%Dd{_rQhHSDYb{tUA*$r>KZ@zB}UWed3O +z)O~AewF9505!QyG#Z32y*0z28&hzpD;C~~8m;CX449NVGM$OLh(|h&GsvH<>$jb6w +XB^f#;tsLlX(31`g?3Lx?_ps#ui$#-F + +diff --git a/src/tools/qchdman/translations/qchdman_de.ts b/src/tools/qchdman/translations/qchdman_de.ts +index 89bac0412..851739d16 100644 +--- a/src/tools/qchdman/translations/qchdman_de.ts ++++ b/src/tools/qchdman/translations/qchdman_de.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + Alle Dateien (*) + + +- ++ + Choose project file + Projekt Datei auswählen + + +- ++ + Project files (*.prj) + Projekt Dateien (*.prj) + + +- ++ + Choose script file + Skript Datei auswählen + + +- ++ + Script files (*.scr) + Skript Dateien (*.scr) + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + Laufende Skripte / Projekte: %1 / %2 + + +- ++ + Project '%1' doesn't exist + Projekt '%1' existiert nicht + + +- ++ + Script '%1' doesn't exist + Skript '%1' existiert nicht + + +- +- ++ ++ + Confirm + Bestätigen + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -521,7 +521,7 @@ Fortfahren? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -534,7 +534,7 @@ Das Schließen seines Fensters führt zum Abbruch des externen Prozesses! + Fortfahren? + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -580,105 +580,110 @@ Fortfahren? + Sprache + + +- ++ + Style + Style + + +- ++ + Font + Schriftart + + +- ++ + Application font + Allgemeine Schriftart der Applikation + + +- +- +- ++ ++ ++ + Size + Größe + + +- ++ + Application font size + Größe der allgemeinen Applikationsschriftart + + +- +- ++ ++ + Log font + Log-Schriftart + + +- ++ + Log font size + Größe der Log-Schriftart + + +- ++ + Maximize new project or script windows + Neue Projekt- oder Skript-Fenster maximieren + + +- ++ + Maximize windows + Fenster maximieren + + +- ++ + Display project help texts + Projekt Hilfe Texte anzeigen + + +- ++ + <b>Paths to program binaries</b> + <b>Pfade zu binären Programmdateien</b> + + +- ++ + Non-CHD input + Nicht-CHD Eingabe + + +- ++ + <b>Preferred folders for input &amp; output files</b> + <b>Bevorzugte Ordner für Ein- &amp; Ausgabe Dateien</b> + + +- ++ + CHD output + CHD Ausgabe + + +- ++ + Non-CHD output + Nicht-CHD Ausgabe + + +- ++ + Preferred folder to use for non-CHD output files + Bevorzugter Ordner für Nicht-CHD Ausgabe Dateien + + +- ++ ++ American English (us) ++ Amerikanisches Englisch (us) ++ ++ ++ + Preferred folder to use for CHD output files + Bevorzugter Ordner für CHD Ausgabe Dateien + + +- ++ + Preferred folder to search for non-CHD input files + Bevorzugter Ordner für Nicht-CHD Eingabe Dateien + + +- ++ + Preferred folder to search for CHD input files + Bevorzugter Ordner für CHD Eingabe Dateien + + +- ++ + Select the GUI style + GUI Style auswählen + +@@ -724,72 +729,72 @@ Fortfahren? + + + +- Romanian (ro) +- Rumänisch (ro) ++ Brazilian Portuguese (pt_BR) ++ Brasilianisches Portugiesisch (pt_BR) + + + +- Swedish (sv) +- Schwedisch (sv) ++ Romanian (ro) ++ Rumänisch (ro) + + + +- English (us) +- Englisch (us) ++ Swedish (sv) ++ Schwedisch (sv) + + +- ++ + Make sure project help texts are shown + Sicherstellen, dass die Projekt Hilfe Texte angezeigt werden + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + Verwendung der nativen Datei-Dialoge des Systems oder der in Qt eingebauten Dialoge + + +- ++ + Use native file dialogs + Native Dialoge verwenden + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + Namen der Ein-/Ausgabe-Kanäle (stdout / stderr) beim Loggen der CHDMAN Ausgaben einschließen + + +- ++ + Log channel names + Kanalbezeichnungen loggen + + +- +- ++ ++ + Editor font + Editor-Schriftart + + +- ++ + Editor font size + Größe der Editor-Schriftart + + +- ++ + Paths + Pfade + + +- ++ + CHD input + CHD Eingabe + + +- ++ + CHDMAN binary + CHDMAN Binary + + +- ++ + Path to the CHDMAN binary + Pfad zum CHDMAN Binary + +@@ -2024,71 +2029,99 @@ Meta-Daten einer CHD entfernen. + Kommando kopieren + + ++ ++ + + Info + + + ++ ++ + + Verify + + + ++ ++ + + Copy + + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/tools/qchdman/translations/qchdman_el.ts b/src/tools/qchdman/translations/qchdman_el.ts +index 310486b71..8ca733569 100644 +--- a/src/tools/qchdman/translations/qchdman_el.ts ++++ b/src/tools/qchdman/translations/qchdman_el.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + + + +- ++ + Choose project file + + + +- ++ + Project files (*.prj) + + + +- ++ + Choose script file + + + +- ++ + Script files (*.scr) + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + + + +- ++ + Project '%1' doesn't exist + + + +- ++ + Script '%1' doesn't exist + + + +- +- ++ ++ + Confirm + + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -517,7 +517,7 @@ Proceed? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -526,7 +526,7 @@ Proceed? + + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -604,125 +604,125 @@ Proceed? + + + +- Romanian (ro) ++ Brazilian Portuguese (pt_BR) + + + + +- Swedish (sv) ++ Romanian (ro) + + + + +- English (us) ++ Swedish (sv) + + + +- ++ + Style + + + +- ++ + Select the GUI style + + + +- ++ + Font + + + +- ++ + Application font + + + +- +- +- ++ ++ ++ + Size + + + +- ++ + Application font size + + + +- +- ++ ++ + Log font + + + +- ++ + Log font size + + + +- ++ + Maximize new project or script windows + + + +- ++ + Maximize windows + + + +- ++ + Make sure project help texts are shown + + + +- ++ + Display project help texts + + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + + + +- ++ + Use native file dialogs + + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + + + +- ++ + Log channel names + + + +- +- ++ ++ + Editor font + + + +- ++ + Editor font size + + + +- ++ + Paths + + + +- ++ + CHD input + + + +- ++ + CHDMAN binary + + +@@ -732,52 +732,57 @@ Proceed? + + + +- ++ + Path to the CHDMAN binary + + + +- ++ + <b>Paths to program binaries</b> + + + +- ++ + Non-CHD input + + + +- ++ + <b>Preferred folders for input &amp; output files</b> + + + +- ++ + CHD output + + + +- ++ + Non-CHD output + + + +- ++ + Preferred folder to use for non-CHD output files + + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + + + +- ++ + Preferred folder to search for non-CHD input files + + + +- ++ + Preferred folder to search for CHD input files + + +@@ -1802,71 +1807,99 @@ Remove meta-data from a CHD. + + + ++ ++ + + Info + + + ++ ++ + + Verify + + + ++ ++ + + Copy + + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/tools/qchdman/translations/qchdman_es.qm b/src/tools/qchdman/translations/qchdman_es.qm +index d60b17636b1895892be451eb7ec942923615a220..7c1d7376916b5f1c7081baabb8a14d82e5156b57 100644 +GIT binary patch +delta 2087 +zcmX9Add{bTXo4IXa!8-N+K$-vRJZ`9y-7Fy7#;H+&HpD^`C@`!jPD8_t&l9j%IuJ81on7=>=%3*h)IMe-d=H)YOM#c5*^a9&hg +zil76H$qHjgDljj}Y~G2fiVoCVbIkSlbN>Aa< +zh@VlM*)pT`4+G}xVr*{(0vG%l|KSRtU^5ez?FqCsny@dC*{0KCG4kA*9W9MOwvpKr +z5f2pkFiE%UfVxzsX+amzvxMo|^_-M=$=sfJ0_+SkY%;Ui@;By(X*ypoVHsCvpu2>% +zyg|=j8E2g@+yNZQS-0I2KuH-J8>gpz7j{Pr>2)HO-F_x +z2fqA`J?>7l&sP~9nuSEgvfoD2+f7<_$f*E0wVz`{!l`yMI5zwm;V`$HISh39aU0jy +z0O@gD)SxGj>&3;~$ObG`+}5RZzx;FV)O`|h_V?V`-<6Zd_YKL6O$xYMIsKGb1NWw2 +zm~t54#+su@>OLN$9|3j={ER$uQgbvvV`vgMX3LwG5XVe^-fkV8E4Sxo=hJ>!E$^_r +zk)kf-9VWeitTnu&KpOCR-f6xyQ2#UUy@}#fjPdVjXzk#|zc)_rt*PqZx9(j+rkLX6 +zE>eKfD}21|LlWsR|5qyuN~@OtbOuW%68OaMZ~*uCW8?iKniZeD-419S=1-N4l4&0s +zHnBD-zWlRg2H>AH0_#KcZE^(l3nPhlM6i%LsgQSspkj$`eDwKK(aoga`@{lpNbK)^m+Oo;2Is#b~zBmYDm`Hy&LY9Wmrb1^%p4oH>7 +zve((5a@vbmYPV5S_7YN06qblr>L|0q*Wz_gDqLl**r}@l-fa`R?J9`aQ?WO$l`?J< +z`~FB7=EaG(naebT8pY9?RKV?XaWazbWdw_F`zceaK}j>ct_hZ`_m@(f-=tM_M(V{U +z(kENS4X-)Nlu{|_21%egARSofMPC+3N2XKF=#nxDp94a(Wbo6`a9SZXCp7|$R%%^I +zFV&ury4Ty#kkXmZ*e-P&sWyiqq@G}Vl8!^fMNqTgYGRsetMz=^b +zZHJ|af)`W+$6=)+ww?knReD_83E0k82J1&i!y)Cid$$2G%7ndhlt~sQzT2xFF%;1L +ztm?l(tEqWd)sS!o*m^?sd|)p%X|(F)0XyKDpXv=4NiL6-*?2nddP(L3X8on} +zihlvUY3j5Ls@COFbw)9%ej;F#3BpShT{7}O+(M$ts7&=kyPf%baMcnR50d_zdKG7O7z{W7(R +zFDX{LQfqtf1yyvt)=NouRj%4C$ye!5R<7L_F9BymwLf|pX~ur1ovNbmv#jHRzMGd< +NNHw!AFLrjX{~x75m3;ofPx^hc?Q=QHRTv>WwFv2(FjdAF+IIx{&?p*zu)`4`}^+wzI$J874vNs +zbI8tm7Qn3s6iN%~g1>NePuT&sG6^u2fW5;4$}zAHLx9QOgZ5L{6gpw6}6#h)zLvkcq`4sg2$?i|In2Kd~wfKS^! +z2x0y}`wI)29ieY#fSF#H{o=R8^gev@?*kVj;hSDeglrIyv<0YYGja;|lxT$Iya9Co +zMcB)1qH`YW+9W7A?uyKC&e*-wGmMhjjq +zW3z|#z?T8+=X#=DK5Tqo6&z8)e!GtDZU|@lTueY=2ge47l6D_*Y-lr3?ZNpnX+UQN +zw{}%Eka?PmcxSZj%>%U(w1Henmxe{tb83qk`f&8uu^`DJ!^}2YX55 +zx7-h=e#+E^d(#*J9I@ds{2|~N&rirFCpDJw6Z*!0jE{NiQsS7C#XEjL=PIK3sRguO +zHp)Bu){}I9<(s +zaDEvdb%p{Q2Ol%(0g$KT|7>SNX^rxKnZS~X1U@k|6u@0RW2Bdgwt>&v;z(M0@P%c= +zwAL9TS%;K#{^z}Z?+Y%C!9r$p-pN~3UrXcJHLYh-an_$ku-7x6u} +zQF7n`F({gPYvo7c2klEKy$mtfB@l2b72~72NY$6(-ta%rc_%UT?K~Pe5n^6Y9k4G% +zEPI`Y6mU-BrP|Fvk(Q8p;_#q&sg5!$@)lb?Nw~^?i0y`IK+lO?jwgY0?&9^RE0l4I +z*za+S0GAx8ad$nyXr(L5 +z=%(5}scV%34XI`e_J~rKnY2kgCUt*8B}vpsx2N<01xuv|?!?42UwXKoGAn44hBr!7 +zA`fZQG(;Lq_fRS}oTI>A%Gu4)z@$0K_mc*IDYKQE@7@B$2n$}{ru=LQ5xf$v%sNJ; +zx|XZVKK*Z?DN%V~_zAGEU3swEg~kx8JcK0Lzo@*D8$#!O=AnmKy%GxE_ +zek59=tgE98YP(>fduq9Hp*St2SiN;x1pO>e +zstty0nx+bM(jTuI08@$xcu=tR{ADi`D%t>AbaZ!^_vp7!l2dOz7d +z2Do8+!AGi|Ja-}j5r=Kqjv*MJ!z}D1)Qi;g;OUY5 + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + Todos los archivos (*) + + +- ++ + Choose project file + + + +- ++ + Project files (*.prj) + + + +- ++ + Choose script file + + + +- ++ + Script files (*.scr) + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + + + +- ++ + Project '%1' doesn't exist + Proyecto '%1' no existe + + +- ++ + Script '%1' doesn't exist + + + +- +- ++ ++ + Confirm + Confirmar + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -517,7 +517,7 @@ Proceed? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -530,7 +530,7 @@ Proceed? + ¿Continuar? + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -576,105 +576,110 @@ Proceed? + + + +- ++ + Style + Estilo + + +- ++ + Font + Tipografía + + +- ++ + Application font + Tipografía de la aplicación + + +- +- +- ++ ++ ++ + Size + Tamaño + + +- ++ + Application font size + Tamaño de tipografía de la aplicación + + +- +- ++ ++ + Log font + Tipografía del log + + +- ++ + Log font size + Tamaño de tipografía del log + + +- ++ + Maximize new project or script windows + + + +- ++ + Maximize windows + + + +- ++ + Display project help texts + Mostrar los textos de ayuda del proyecto + + +- ++ + <b>Paths to program binaries</b> + <b>Ruta a los binarios del programa</b> + + +- ++ + Non-CHD input + Entrada no-CHD + + +- ++ + <b>Preferred folders for input &amp; output files</b> + <b>Carpetas preferidas para archivos de entrada y &amp; salida</b> + + +- ++ + CHD output + Salida CHD + + +- ++ + Non-CHD output + Salida no-CHD + + +- ++ + Preferred folder to use for non-CHD output files + Carpeta preferida para archivos de salida no-CHD + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + Carpeta preferida para archivos de salida CHD + + +- ++ + Preferred folder to search for non-CHD input files + Carpeta preferida para buscar archivos de entrada no-CHD + + +- ++ + Preferred folder to search for CHD input files + Carpeta preferida para buscar archivos de entrada CHD + + +- ++ + Select the GUI style + Seleccionar el estilo de la interfaz + +@@ -720,72 +725,72 @@ Proceed? + + + +- Romanian (ro) +- Rumano (ro) ++ Brazilian Portuguese (pt_BR) ++ + + + +- Swedish (sv) +- Sueco (sv) ++ Romanian (ro) ++ Rumano (ro) + + + +- English (us) +- Inglés (us) ++ Swedish (sv) ++ Sueco (sv) + + +- ++ + Make sure project help texts are shown + Asegurarse que los textos de ayuda del proyecto son mostrados + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + Usar los diálogos nativos de la aplicación o los propios de Qt + + +- ++ + Use native file dialogs + Usar diálogos nativos + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + Incluir los nombres de los canales I/O (stdout / stderr) en el log de la salida de CHDMAN + + +- ++ + Log channel names + Incluir los nombres de los canales en el log + + +- +- ++ ++ + Editor font + + + +- ++ + Editor font size + + + +- ++ + Paths + Rutas + + +- ++ + CHD input + Entrada CHD + + +- ++ + CHDMAN binary + Binario CHDMAN + + +- ++ + Path to the CHDMAN binary + Ruta al binario de CHDMAN + +@@ -1983,71 +1988,99 @@ Remove meta-data from a CHD. + Copiar comando al portapapeles + + ++ ++ + + Info + + + ++ ++ + + Verify + Verificar + + ++ ++ + + Copy + Copiar + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/tools/qchdman/translations/qchdman_fr.ts b/src/tools/qchdman/translations/qchdman_fr.ts +index 5ce902783..6b7bbcc87 100644 +--- a/src/tools/qchdman/translations/qchdman_fr.ts ++++ b/src/tools/qchdman/translations/qchdman_fr.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + + + +- ++ + Choose project file + + + +- ++ + Project files (*.prj) + + + +- ++ + Choose script file + + + +- ++ + Script files (*.scr) + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + + + +- ++ + Project '%1' doesn't exist + + + +- ++ + Script '%1' doesn't exist + + + +- +- ++ ++ + Confirm + + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -517,7 +517,7 @@ Proceed? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -526,7 +526,7 @@ Proceed? + + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -568,105 +568,110 @@ Proceed? + + + +- ++ + Style + + + +- ++ + Font + + + +- ++ + Application font + + + +- +- +- ++ ++ ++ + Size + + + +- ++ + Application font size + + + +- +- ++ ++ + Log font + + + +- ++ + Log font size + + + +- ++ + Maximize new project or script windows + + + +- ++ + Maximize windows + + + +- ++ + Display project help texts + + + +- ++ + <b>Paths to program binaries</b> + + + +- ++ + Non-CHD input + + + +- ++ + <b>Preferred folders for input &amp; output files</b> + + + +- ++ + CHD output + + + +- ++ + Non-CHD output + + + +- ++ + Preferred folder to use for non-CHD output files + + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + + + +- ++ + Preferred folder to search for non-CHD input files + + + +- ++ + Preferred folder to search for CHD input files + + + +- ++ + Select the GUI style + + +@@ -712,72 +717,72 @@ Proceed? + + + +- Romanian (ro) ++ Brazilian Portuguese (pt_BR) + + + + +- Swedish (sv) ++ Romanian (ro) + + + + +- English (us) ++ Swedish (sv) + + + +- ++ + Make sure project help texts are shown + + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + + + +- ++ + Use native file dialogs + + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + + + +- ++ + Log channel names + + + +- +- ++ ++ + Editor font + + + +- ++ + Editor font size + + + +- ++ + Paths + + + +- ++ + CHD input + + + +- ++ + CHDMAN binary + + + +- ++ + Path to the CHDMAN binary + + +@@ -1802,71 +1807,99 @@ Remove meta-data from a CHD. + + + ++ ++ + + Info + + + ++ ++ + + Verify + + + ++ ++ + + Copy + + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/tools/qchdman/translations/qchdman_it.ts b/src/tools/qchdman/translations/qchdman_it.ts +index fb9b143c9..c48939bf6 100644 +--- a/src/tools/qchdman/translations/qchdman_it.ts ++++ b/src/tools/qchdman/translations/qchdman_it.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + + + +- ++ + Choose project file + + + +- ++ + Project files (*.prj) + + + +- ++ + Choose script file + + + +- ++ + Script files (*.scr) + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + + + +- ++ + Project '%1' doesn't exist + + + +- ++ + Script '%1' doesn't exist + + + +- +- ++ ++ + Confirm + + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -517,7 +517,7 @@ Proceed? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -526,7 +526,7 @@ Proceed? + + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -568,105 +568,110 @@ Proceed? + + + +- ++ + Style + + + +- ++ + Font + + + +- ++ + Application font + + + +- +- +- ++ ++ ++ + Size + + + +- ++ + Application font size + + + +- +- ++ ++ + Log font + + + +- ++ + Log font size + + + +- ++ + Maximize new project or script windows + + + +- ++ + Maximize windows + + + +- ++ + Display project help texts + + + +- ++ + <b>Paths to program binaries</b> + + + +- ++ + Non-CHD input + + + +- ++ + <b>Preferred folders for input &amp; output files</b> + + + +- ++ + CHD output + + + +- ++ + Non-CHD output + + + +- ++ + Preferred folder to use for non-CHD output files + + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + + + +- ++ + Preferred folder to search for non-CHD input files + + + +- ++ + Preferred folder to search for CHD input files + + + +- ++ + Select the GUI style + + +@@ -712,72 +717,72 @@ Proceed? + + + +- Romanian (ro) ++ Brazilian Portuguese (pt_BR) + + + + +- Swedish (sv) ++ Romanian (ro) + + + + +- English (us) ++ Swedish (sv) + + + +- ++ + Make sure project help texts are shown + + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + + + +- ++ + Use native file dialogs + + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + + + +- ++ + Log channel names + + + +- +- ++ ++ + Editor font + + + +- ++ + Editor font size + + + +- ++ + Paths + + + +- ++ + CHD input + + + +- ++ + CHDMAN binary + + + +- ++ + Path to the CHDMAN binary + + +@@ -1802,71 +1807,99 @@ Remove meta-data from a CHD. + + + ++ ++ + + Info + + + ++ ++ + + Verify + + + ++ ++ + + Copy + + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/tools/qchdman/translations/qchdman_pl.ts b/src/tools/qchdman/translations/qchdman_pl.ts +index 998644fbf..196c50d47 100644 +--- a/src/tools/qchdman/translations/qchdman_pl.ts ++++ b/src/tools/qchdman/translations/qchdman_pl.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + + + +- ++ + Choose project file + + + +- ++ + Project files (*.prj) + + + +- ++ + Choose script file + + + +- ++ + Script files (*.scr) + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + + + +- ++ + Project '%1' doesn't exist + + + +- ++ + Script '%1' doesn't exist + + + +- +- ++ ++ + Confirm + + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -518,7 +518,7 @@ Proceed? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -527,7 +527,7 @@ Proceed? + + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -569,105 +569,110 @@ Proceed? + + + +- ++ + Style + + + +- ++ + Font + + + +- ++ + Application font + + + +- +- +- ++ ++ ++ + Size + + + +- ++ + Application font size + + + +- +- ++ ++ + Log font + + + +- ++ + Log font size + + + +- ++ + Maximize new project or script windows + + + +- ++ + Maximize windows + + + +- ++ + Display project help texts + + + +- ++ + <b>Paths to program binaries</b> + + + +- ++ + Non-CHD input + + + +- ++ + <b>Preferred folders for input &amp; output files</b> + + + +- ++ + CHD output + + + +- ++ + Non-CHD output + + + +- ++ + Preferred folder to use for non-CHD output files + + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + + + +- ++ + Preferred folder to search for non-CHD input files + + + +- ++ + Preferred folder to search for CHD input files + + + +- ++ + Select the GUI style + + +@@ -713,72 +718,72 @@ Proceed? + + + +- Romanian (ro) ++ Brazilian Portuguese (pt_BR) + + + + +- Swedish (sv) ++ Romanian (ro) + + + + +- English (us) ++ Swedish (sv) + + + +- ++ + Make sure project help texts are shown + + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + + + +- ++ + Use native file dialogs + + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + + + +- ++ + Log channel names + + + +- +- ++ ++ + Editor font + + + +- ++ + Editor font size + + + +- ++ + Paths + + + +- ++ + CHD input + + + +- ++ + CHDMAN binary + + + +- ++ + Path to the CHDMAN binary + + +@@ -1803,71 +1808,99 @@ Remove meta-data from a CHD. + + + ++ ++ + + Info + + + ++ ++ + + Verify + + + ++ ++ + + Copy + + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/tools/qchdman/translations/qchdman_pt.qm b/src/tools/qchdman/translations/qchdman_pt.qm +index 2b51a9c24e9f3dbee1bfb5500787c8369bb8520a..a97271a6946a33a21fc540af73a4d879e70d624f 100644 +GIT binary patch +delta 2675 +zcmX9=d0fru9)5o3x1aMn=TNzoODJiwFNMmkkgaGFV}`P1MnW|vhQkoD&Nw3b9U?Vk +z2}K(zCX`aT8j2Q|#uBMa%W%Kyujli==RM!$`9AOS{x+WGlH#~u%sK+#=K##$c68|R +ztF4`(3%FAez|~rC_c@?rDYz1Epx-fYEw;e@<~C%o89a9%D6|1@B?CQUz&nNk|2^D> +z3~Inntq05qV{!n?N9|apZ9|6J4*oYDaDET|JjLx%0%6BFU|ek+L|-@HeQG;4H^V-a +z1%}T;?*cj~A4c!j0|^V@yr&qb41-JL0V-?&CPpj-ik=v?jJe?)CJ&7Uw2Lt%h|0J5 +z0UjO;fY0Xeocsq+&=+1D2L{RT9qSHM7~#9^1K>~&-?vfJ#skdCItu)pfZ5k6t4lZ* +zm-zs1tgvj+TVT{UgvqzT2pw?hBhk>c1s4i;0qd?JDStm;=(-S@T`z%AMId)dF5nn| +z$KpC*#%xsDL;@L(4DVJ-g(Wfe1vxZ?7-swxC%`F~nfMLue|3bJaUvFYSIT%TqILOZ +zCRFqW!`x&-SJeO)(wQ~3GVs`+S({Hh54p|6!kKfvrSL*kF_Y`D5g3}yJeg_< +znE&05PYo(fc@fZgg35aRGGO0vm31rq{wzV|=sg~=Xi<&aKuq17rkXjD65ZXZ3NL!Y +zQ)~H(F`b=m$h*lsnN5{d&*Lg>qJi}Pa5Y<~W948wrnvKLi61G;g6BMZNRR7y&LMx|lJPRv&2UWU +zP}v0h9xZe{LfxEuBUnzSU-Q=sUH8&{UT49|b+kXoO&DEI*@^}U0bvfnQ#&E>48{3lxUj_HA#r<7_}p$fdq^m|#Dpu^gjd9jYFFS|53%^E8*uNT +z_;5GXG}0)R&9wqdPl?a`tLYAW6f2gQ(o7DD6|bTJ>v>{jRx!m5lJMaK@MMQ1CGRDb +zh6)`GjARl*F&8_X^LDBT%MB&F0#d2A9H +z#cb)#2~)DRZ>8G!jbwdwQr&YBq-hVS$&cbBHcBm}L|U&#S@&gK{F~gthLkXPsoZJJ +zQNT4>9_{P~7c@o4V~WFpe;<&?w3d;CEaeG_x%5=j%HKp4krGD9OXt^<)Ewlc;lzkW +zE&o_f=aaLI>7uzISdQ9HX%#csI4Tqv79%IGz6`J)a+)iZ^(W+XhMf0rPR{sRBxAIa +zb3D!IJt$~HhVzhfaz6nlbLCs#QS>8yIK6&;8TTqK|vm%+u4qdp6Z{wI01k4R&PB@e7{?v +zj{5xt@X|}Yv$h=YpQYY?%Z7}inTaKuaI>gAjk< +ze3tsJe3s%5P`{c$b!f)6p|M#~8!ohO{qt7S)0a}|tu@a6<0*tnv;3|rQLtaLrP_fc +zGJtRs-N8D|mgn`fUaHx)(uXAEq1jd`k`h*GlGnHcH?lP)ET!z9sChPpC{aUGDINs2 +zx@w+34kITC*1Y}65~vB*)bV~KrKhho%~j**5uc=ROX!a-_KM(62P^^<{n#j4pHaFe +zQqSgk#ceo!R@}@`X8Mvw8?qJuY|`-MwaOgZy>v@^EAyr`kc2oTAf5_s4pai~Qh|jD +z%If)M)O(H+Ip8Wiiq*=_@gImAqY}L<4hG!)m$E;C4%$Gu7J7iZEmOJnu9b!~Sh?Mo +z)?E&@A;ZThh4I$$j +zQJ!=?|4GwE9inm9E!XaRTuLJEsJ$|SDt7)}n-w2O52Ts4Dm@aoy-i!~LmWR!(LNt` +zl5m1itFfDLRyTAK-RW|ws^uSJq-KC2PR|^3r(HX}m?6_g&$oIr-Asz+ +zr?)7mp>GH`{oo&H|5c#gNln>IT=XMfU!_OeS?@Z&4rt2N&tFSxr=I#%OXytAI{ncy +x^7Kxf^{FF}+TjS_|eFK(&5%&<^Bqc9|AOI_|P(soWWlz5(t#f1P{{hKONW}mE + +delta 2733 +zcmX9=d0dTY8@}G&{harlqvTW8NG1DHQCU-{OobNNK847bGLFW?G{@GEk1R*Z7|hs` +zeI$iqM96ZKl1U=TN47>PQXk)~{y4wu_dMr$@8!C$=f0oxRBrVlZnLGi1n|=UW>70S +zMQ*WkFw6mWFcvsB1l%1CFfRpH5(xBt4z9@#DDY@O1}5;_9iZ@A@Lgn}M+$i7CBXfv +z7G#)#;3w1pmet@>@&N0&vi;;2_|zK7<@tSXm8+28G_fp2b}E@{5Apjy91`=?gm!XV(MSy +z)jbFE%7cJ65r~R-3yfHgCGs^e!W10*Ks0o2!k>kSfPq1}DVebITwLsY8jRT`_wVj$U5Gy0{~z$u_GyPvtYvvp{2C!-}8@`g5x}0P-X*fB$SzxBO +zC3aM;M1(tEpOmn1v~2L0U$er4NP<Oy4U&{U!Fwf@i?n;q2}D +zM?m68ws1)_U~J1;`4l;@FS=9iCB*1iXQY|pj5Ou;>$#`QRC +z0tUY29KNduuJz)k&yEHDo5Dq$qZ*{IHO8=A9TU0Ly`BIM@M)B>rRv8Onjz08LXYb-`Z44RIz+*(o@Plf`6YG3S0>=W^i2% +z&xJOXjlhv|!F(5GbJAI`_M?AI*M-j8X#aM&(8WCiczQ?Z(&$RMiWh7|;!G7S*!F2h +zx|=2Raf$&xH3)7q=o%It5JqZgf8a)8WF2`ciWS0_I028Nh1o~R&h-^Sq}4s*_Ji=P +zr3Emk&P7<%h65Zv3yT`VNk@Y4V^9!)tHLjJr9kO%A#tuX@G3yqzPEClz0bYxezpXdW +z?}QY%g);B1lcHzm0hu<^&mlvA{CCod=6=B01}V|^IB@8`v@7cr@V{}=-gl%MDM!jW +zHV3%qLr5_hE?P)g$M@65D(QkVRsODrl&eppq>`jOYZ7d^pLA_@HZ=lKx-p1IIy+3d +z&8AbMm@2*5*Oppas#KG<8W`p#)jlIZw(TZ0hLD{TBc!HMBF(-*)_z?VSIcc|NeP2a +z%k7r$20XvWBi+2b#!sNxu);|_ULb2&*UOdfkYpGHNEJTsw)TG=o1!mv7$nv=XR +zh8R(+gvrEzN4Y+!8ZdJXGX_cahW>7%f{(V*UhCn*^T6O8G2LH-dnOus1CcWxz +zbSUtrO7+sjlKuXwS7Rv-_2?Efev(v%#@4ORF6th^o%yLl`WyBouPjFlQmGCp|0gaNJ>Q7HSXo!zjxJdfY{d-05rUO>tif(iQt?Lw< +zN$VGt%CA~IxmkHJB8i$&fKq>KE{&h*8s55* +z0y?QN*AqURrLh17d^JvE>2FPU=A_0mwAr{))jMo~CZcO7y@U2>^m1R%pu#?JOo2A)UR!U+w*PNM1k-Md9a?@thpq#FGniEg6=&q(J +zh`26==Gl+~^x#M|@@j{P^;(zlx@HKrBX(d!4(9n92v2B6(<0esbrz*5beK-=CqxR4vimKVm7^m)UsL?Tdyn&i%op?c} +z$4{!xQag#P?a^5kRFm{J>IVHl`>&4ZTvg=F!d*A~^;v33t8|`YYN<@-y0AD}yDro% +zjihsVS9QC~skgW5pnK(-Pa~{M*PKe<^$CxpkRA~4B&o@WMmQE@u7vd7%GSPp{{?SE +tVICIZCG@aCPs9*9(jycQ=%;u^&083$pKsGMM(=36G_YfOj%!2d{{h%0S5yE1 + +diff --git a/src/tools/qchdman/translations/qchdman_pt.ts b/src/tools/qchdman/translations/qchdman_pt.ts +index 64d0a0408..36f4ad1e5 100644 +--- a/src/tools/qchdman/translations/qchdman_pt.ts ++++ b/src/tools/qchdman/translations/qchdman_pt.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + Todos os arquivos (*) + + +- ++ + Choose project file + Escolher arquivo de projeto + + +- ++ + Project files (*.prj) + Arquivos de projeto (*.prj) + + +- ++ + Choose script file + Escolher arquivo de script + + +- ++ + Script files (*.scr) + Arquivos de script (*.scr) + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + Scripts / projetos em execução: %1 / %2 + + +- ++ + Project '%1' doesn't exist + Projeto '%1' não existe + + +- ++ + Script '%1' doesn't exist + Script '%1' não existe + + +- +- ++ ++ + Confirm + Confirmar + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -521,7 +521,7 @@ Continuar? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -534,7 +534,7 @@ Fechar sua janela ira matar o processo externo! + Deseja continuar? + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -580,105 +580,110 @@ Deseja continuar? + Língua + + +- ++ + Style + Estilo + + +- ++ + Font + Fonte + + +- ++ + Application font + Fonte da aplicação + + +- +- +- ++ ++ ++ + Size + Tamanho + + +- ++ + Application font size + Tamanho da fonte da aplicação + + +- +- ++ ++ + Log font + Fonte do Log + + +- ++ + Log font size + Tamanho da fonte do log + + +- ++ + Maximize new project or script windows + Maximizar janelas de novos projetos ou scripts + + +- ++ + Maximize windows + Maximizar janelas + + +- ++ + Display project help texts + Mostrar textos de ajuda do projeto + + +- ++ + <b>Paths to program binaries</b> + <b>Caminhos para os binários dos programas</b> + + +- ++ + Non-CHD input + Entrada para não CHD + + +- ++ + <b>Preferred folders for input &amp; output files</b> + <b>Pastas preferenciais para arquivos de entrada &amp; saída</b> + + +- ++ + CHD output + Saída para CHDs + + +- ++ + Non-CHD output + Saída para não CHDs + + +- ++ + Preferred folder to use for non-CHD output files + Pasta preferencial para usar para arquivos de saída não CHD + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + Pasta preferencial para usar para arquivos de saída CHD + + +- ++ + Preferred folder to search for non-CHD input files + Pasta preferencial para buscar por arquivos de entrada não CHD + + +- ++ + Preferred folder to search for CHD input files + Pasta preferencial para buscar por arquivos de entrada CHD + + +- ++ + Select the GUI style + Selecionar estilo da interface gráfica + +@@ -724,72 +729,72 @@ Deseja continuar? + + + +- Romanian (ro) +- Romeno (ro) ++ Brazilian Portuguese (pt_BR) ++ + + + +- Swedish (sv) +- Sueco (sv) ++ Romanian (ro) ++ Romeno (ro) + + + +- English (us) +- Inglês (us) ++ Swedish (sv) ++ Sueco (sv) + + +- ++ + Make sure project help texts are shown + Fazer com que os textos de ajuda dos projetos sejam mostrados + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + Usar os diálogos de arquivo nativos da plataforma ou os do Qt + + +- ++ + Use native file dialogs + Usar diálogos de arquivo nativos + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + Incluir os nomes dos canais de E/S (stdout / stderr) quando logando a saída do CHDMAN + + +- ++ + Log channel names + Nomes dos canais de log + + +- +- ++ ++ + Editor font + Fonte do editor + + +- ++ + Editor font size + Tamanho da fonte do editor + + +- ++ + Paths + Caminhos + + +- ++ + CHD input + Entrada para CHDs + + +- ++ + CHDMAN binary + Executável do CHDMAN + + +- ++ + Path to the CHDMAN binary + Caminho para o executável binário do CHDMAN + +@@ -2025,71 +2030,99 @@ Remover meta-dados de um CHD. + Copiar comando para a área de transferência + + ++ ++ + + Info + Informação + + ++ ++ + + Verify + Verificar + + ++ ++ + + Copy + Copiar + + ++ ++ + + CreateRaw + CriarRaw + + ++ ++ + + CreateHD + CriarHD + + ++ ++ + + CreateCD + CriarCD + + ++ ++ + + CreateLD + CriarLD + + ++ ++ + + ExtractRaw + ExtrairRaw + + ++ ++ + + ExtractHD + ExtrairHD + + ++ ++ + + ExtractCD + ExtrairCD + + ++ ++ + + ExtractLD + ExtrairLD + + ++ ++ + + DumpMeta + Baixar Metadados + + ++ ++ + + AddMeta + Adicionar Metadados + + ++ ++ + + DelMeta + Remover Metadados +diff --git a/src/tools/qchdman/translations/qchdman_pt_BR.qm b/src/tools/qchdman/translations/qchdman_pt_BR.qm +new file mode 100644 +index 0000000000000000000000000000000000000000..bc4eda9a377752b3d124df937481f544a6fef2ff +GIT binary patch +literal 71923 +zcmeHw37A|}mH+MZzGfvR5aT0jC!{+hgcw2$bUIr@(rMD2g+)KBtE#(;R9CgNB1r5sxDxxei<1+gH{qA}9EmiMTRYF*d`SPV- +z)vI^UJ@?#m&wlS)^VQglA3X8FD{eb+*0)~$k#F9=PN^29RPFgnRSn4Xpr5yH)L#w2C(!cWqUh#^Xx;$N#EL@4Fd;S8DUV)0A3#l{#zX +z231x4d0ekhs`Vr4>=BG-{#k0-!kjZq;8?qpE73P&>PNlzQYAwe#&y +zDfRNds-3^P6yv&E?Y{A9rQY&Wb>6pu$J$S-;rn+e^@p5F4gF53u3nXE{GO_6UZ+0s +zKcLIYu2cVh$7M>rsY-q6_V?ra%hb1CdabIe|C+k>>|2#u^+xrx`iqnr_?>!i?wghR +z&P`Rd8}0*MZ>?JNlUp!vH&k_h1^BP|aMh+);r>aluR7KECn*WV7huYA1f%3H5e>Wa<6z +ze!gXSWW`W>yHck@HlU+KU+|7mIU%@;nR)RSjd-}cM{ +zO1)=h^&PpiQgb#}|Mc^pRBHCutACaqR_eIBs_%cSy6KYeBG>D6yg>VF=u?Oh5!uDPbRzwa8Q +zzVPeXbMHS@sjuy>J^v=~^TMCk4z2|JJO5DozB|AdE2?Tgc+$tv-|pIvS!*sD-(5H9Js9U>_tZ^#@Q+G;K3zBYL!j4}uBw~ai*|RuukNLn1N*ID(Lucqtk<}Lx;2WQtUS&>)jZ=a}J{Yt>Q=dE>TwBi1WbL!4` +z8hHFiPu*Y+bbBaL7yS(2{P0h8i5d5R-%hC8GYxX_e=n>Xn^Xh&acAAw9|y6{{#v(x +z#|})yqjhh2`aaC-{<_QJGZk>Jd*8o4f$yDl@9&(YRNF~)AFKr*PQ9S+!>6@DDE_|g +zx~X{n<>Pe+SG^bOYP`N?4aU3VlKR%iZUwl%)lX@>5qx}o{n`K0sMG^P^*i7DI?!!H +z{jTdU|M@@EkNgnyJ!w(>=zSR9tT)K@S6O|nYW#Kml@9~{Z`+tO8xTchKB1d2OU1tFnJBeed37? +zlfMGGeEVGuQ__HUUuVPSU08RwpWSfQf@hTa>h6ZKM=nw-d3;0f7xDd+-3`4rb}RM! +zi4EK4_CVk4Xc%}m=rZ@7hII56rM|wd;i6qH$NJdOaPeO{f$!>u%g+9sQlGh^;X_~j +zqNQnxduKP?n7sz$8*aE| +zCiwrL)$qM2*4YU+HT+;X==F_@8*Z!q64p&i!{Z;F3c3C6h9|ChlTv5QYk2Yz@b|QL +zHvDlH;C%7+hCkm2`YrlFV;jH!^tQ%HbHP8SUetKpYp+&n(=Qs&SPgpq^)-!W-kpaW +zIj8Z=zuXVLo7}kZbGKr>T-x}mOYZ{zT-2D1JPrQ5xG|XrJ(_nm?tcK!Uw?Arft%2N +z>Teof*LfP`XsYpzq~n*CHeULE;L-Bx#`mtxDz*CCjn^IcvQpLKjo(-gJRg|S_|2*x +zEA^Lq8*jLvURBlYY`mrKC0GwN`dZca`o>#s{i{-+YHa-Oh3M}in;L&myGd15y}9xB +zSr008!q%v64332TN|HsdF+SlmHNN8Hox`Z6-xc+XSiO1>($L~edKBI*^K75XLdloUDN#b2kY_tgy!pB +z+oRMio15>gM!(BG*!;`0H(}nkG(TAX0j1vY_U1=^mV>^!srh%Wo2k^}pKN}zb{E$5 +zg62Ox1iR~mnwFXb+O0jmrLG6RA3vjIV%Mek{y>ZMIgES8cUm^Anhg1OdCT^l;Ojpf +zXgT-hTd+q2SKZa};L1fk#B{g=6re|NXO +z^Jn*AJYR#%rRmAC|X1^vyRzUJtfDyaV&_^KZ01^74=4y1A|DJFfy= +zrnl9f3%pOB+cxo0*ts)Sw4M0l9?08iZSxw(F~4WDt=tU!zkY4on*Y}iIe%?i*V|9Q +zy8md~x^G^hs+yLyZMp>V_$41}i)^@DRkhT$y{6-8$j3Lfy?*<-(EHQdu2_O`J^iw_ +ze|rG(QvF}s(;ve6oOms+7vcJcwx_SY82Y;t*Eiw12iHq*{kMr#7hMHC_{hYn4+Ed4 +z;uGs{XoTJQPZOuLZAZWFo;c$tkAcr`nYer}?mzLRiKjIIuc_~y_=?|t4f67`iR-&D +zp1*!)V&wJszGmmdeF;2w>je|9z90H(`i&ERbK0%oo9x8Dd=l-JZb<<7J24ZgN%gC= +z8dMn-hvA@99sbvL4W{!s%!_K)pVlWL$@Fj)A78Bo@OTXWv&ypn##DmM@i%AR;kPXQ +zXVhL5v7hdAz)$N+Cavv>;gMX{+8)owGkfE)&cNR0sP#p#BPy@^$pCUfWgV!E-RZIM +z450>sTCTR>@hFf=sb8U~rTWyLFz%$j%kP^s!V%oz=U%nL0e$?Y-W}Gacq*QWB(1*u +zU@{T4wj`qQR5l*iSB=`H_BgF4Y}*s~)C@HS0;Sc3=$C}E)H!Oa>Q>90mM!OO?Otw; +zWzrYMqrsyZR9$G-gE8ea_CpvM$H)<6)Il}mjILX41~Iqd`Cj}wgl9Ni9Cuue;_o^5 +zW~s;Ue++js8lJ_ebFi6pPR{Dyynbs}ueE7MkCn(;W06eGN)K7NkzhJp8;IF(0cK&i +z2p+_cwDID<1mAg|Ei?ER!3a37GM*SdTWVPU#=B9B)O~`mw +zl1>Ire~a1)6fe{Ri8!6s_s0P?n4VQ*Y6F%PXPUD_-XSeHHd2Fg$EC<8GPn+6p*(Jn +zEv28}q8!t7i8!l3Xz?06OQ^DF58~6G040I7Kw1+%>C}(@x8iz^+5tY=qOTj&cHG&7 +z@7pzR4Pef@)akgF(6mniGCv88*$-Ek^q0X?!}!iIaP~M)Y&Qxllfa!b=bh7TtSihA +zdg|7_Y{B32(A)RaP58ya{~h?-1wP+k<7j^A!u=f@cm6h@VQfX~Ui~!N_5tcP{JjgK +z?7X}NY_g#4aKgB3=}`msbdmq`rfb6}4|O3(gCdW=&S$yteKWL)ZO4Gs)qAeBt84rAuHJ!jPsfwF5lCArzBev#5~E|u1ixS*!oAG?tx}GgP1Ls=ljJ2_6pm#%mzqN7OcB{+k>)Jlh)4gL$*LJIK$M(K$ +z{Tn*1AhxUeFO0o359L9BazYyGE2sA9`5|vmQtriE#Whdt#qUw|Yuq2hC*dOgR?LAN +zXvy^zS4(ltEw!S5{2Os6uQ@rQc{PpCTpi?4axbCFI@=3)8DRX7zPB9rr618XMgy@e +z+qCPRx$;PxC|Z*1AJf;gT7-MWtH$30XF%qZZPRG!D%&RtId>=n36o6^<-lL@)2;Dz +z-ik(2RwnMUG#NOOiY*0~jizIXp>f{Gr(%$O6myV%qgh+-Tj8qFieSZ1S!PGT&4c5* +z?MC+AZ})C(Oap2pmq@2hx8hg_=wNR=lf`#yx#dA=Qs3kYYd^cWj00+!=e +zG6IB5yI?zFIi_923`sr+@^XSiuu))&O5j8$)d+sedI&gqNRuHGw_@>JB$3PpcToo* +zo76f-VpLn3)^PzgZH**SyAr8bdY?9+_}tmP=gtm&ZmaLPt)b5i_?{aGd~T9j09lvO +zyu@|v>h;6PZLdTog~EgQ7`X`Q33pF;GG4{8drjeiaRF<=3pvs2GoA&dn+7@YY)_3FTzA_(O? +z>L6%TlRRMk2+4>-uvr{nU6XGq0Q973UTs&4)glL@R$9|Tn8B>ozIag(GJQ%+Th|z( +zGA93v*ydkjgo&VS*T%yzo}ei~lX8z_=^SR +zpk3b`$wniwK)##j@DZglm#5gMgi#D>q74a}l&dToM1oaX>ro4Efm4f6^7=_ja)^fT +zSmh4BQ@cmf>1^CsIogI-g2E|WZ|E15f~yVAzJ0gZbrZQK{oxUbU2{Q-^pD{VXw(0CxI +zaf^pwTbxF9nowKHHE@X|4FU<{?ZG98GzcVyw}DFpX%I+&8J;opLmJS0=ES?>Y0=~9 +zA4v@5P6`}V7zlTSUJ!xf3tQ1%Q8`GKmXo$*O05_Dbl!P~at$U?}qKuTV +zhClK()r6+TGV!5!CZ3AM1C?M597H)s*mS!^2^I#S;%Yy5OY9&CD~T2{VIj&_V>yVt +z^r=yYlrP(oj>N3^emKgB)UXkg)=(xr8mjAJ5NE~|G;XM)IMM5c2x-w6I5HT{_G4)D +za47_7LlZ$Ef}rRppnskx>MraEUdVLM3xMg-4h5XkrXdQhApoZ#&_NDKsa^Un&6<7A +zym+*75S!0HOr*5>Ywj(r^`?6uc*fx(!1m$Ftxa?PQ+kf!vOCRcdgJ>8SJ^*%n1)PE +z^_|5(etvcl!eYaiu*J)#2hK%gOldBU7&rqyzk~8A+r|*np}#tqAMVh0GM7SjJe!Ln +ziX`ElSbQjwPa@Qqf$bX41kK47&j_V|86iIpITA)jUO9I29qi!Y<_`s*vr6Ez4=lF_ +z{|^a+xlGT7_x9CVO%2e>^O=ulMQIRH<8W<%GKov78clw +z_`XohSIh91gpfdxM{YTQkMEP{zO``vvV~SG9nYo~A{I!g8N>-IfnlLL7~r*_Q#y&A +z@Ha9Lny#~WoaxRujGbed3j>|T_Cj?Bm|Rg5D-u4ja}CZ=8qUchOoY@x5aM(6EV;=J +z>N4sfNyreOYw=Iq9!JP0XH-TY%^9F`HA5+AZ8kKKIDx==i-0W!dVaaiF2oDvG!pSV +z@<^Q6)%b-|Z6UtNPj3EZ?)H2trB}Rm@v_!ZXH2WD`OENi{_-GVwE!Q6qL@7Mm>K<% +zy@4Lz4DaJWLHsg^2zP4OG|Vkq?`iI73_ubLD5ir%aXqr#)731~l`~WZ?n)4UmZy7K +z7EyG|P_2LUHVN2l$japm8j1y*HG(rGrWbE6&QeCqY~8J`zukc_@xv7qG_^H!#h${wUE^gVw6va7x`kWNhNP*IN_*b!pzD*SlsDtxnW^_TiftG&HFg>CC7z9189kKw1F8 +z3;!W9?WLHtqWKIwom_I<%7~EdY-(bph~gHBgha+fi*QBgXb=A|d4cJUXHtg8)coePzPP&shKEU$RpI&;W-iif-@TTZuU7X{L{ +z6q)WUNhWGXKRX@{BT9I_U`0O^Oa$}>Bx18hat8X +z1GupEoVlwR2+=_ciUR0%Q%nQNR|u$ufXspkS_IQ|u>#ez5g&s9L(pg%c4;jWEYIfw!M#}iv<}*_l$L@}7D{&VaPWp8 +zr75pn9XTbkcO-AMcP-s%ZO#u3q1+@;L(YN_kD+-|1MNm#goTI{y~%D5u(oJyC~38K +zueUaC>FO>4Cr57wGax+C9GRGid%#VO +z#tsNx>*GUA@&-bjZnuqU)QU&fjHXemy~NN+bP}0E3nO^j2*_-;mm>Cb4B>#DDFP~{ +zPIL0WXvAs{CCvh~W`V$O~K=4WAhXk +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 +zhwtbdb1jN#d(5?P=A%qiyga +zx4ixlET+Fl?ca1s#oC`%K_%LsPLQ~(Y+-6xCFpZB*a3dm(5p$sA*9|m0hbp;P}7Uy +za~Vc7_8vo4{&1q7Vhox21FNwkL@}`|UHIlSWj8Ek0+|w|lM{n!MbSnj&S5z#j;+5S +zRBS3v`mVBv4n#@5NzSV_%sd;jus`kJmUB=zRVIos}oYn1wf?WBKgrxhTS& +z3_MC@gCts5LqMs(HuP6nfW)G!tS{_InazX+i?P_Al9+WSj5-DU0n-!WIm7UTo)2%x +zj_!#MgV5aJ1)q(tm8vx!7Yi_JQ%Kjo(TOf?GHI1x|k3;Fw?fLi(lL +zW-ry?u5ah9)DA1bq3vs`tIh0l)@ea=JiI5Cu=z$y+1!x=2R|PWqLc@@I2rq$krCIT +zeJ)Esykj_4?7>|F+#MiPN#fJNonl*w@9D$BV|){(G>D +zhghHvLoJb&I`TkERzFm-G($h3DmL{`J +zsjvvbO@kOE&N?^NXi=C`cpnYPkjleH$ILxb#cBAV*zEHw@MDJD3u(xi(3@+cs_-myw*&nDo4AgpV&8v45?tC#-IrOE2{>|c*AZYF)>;^wVW +ze{OO6d#j|bTtl$-pSvuw`0Lhw^Jog!RdMI$P=oIRo#}w!s`<+CJW7M_)lUXF2-_q3 +z!lLh)$i8Fl!Ljn~KzHLGJ8+&);kbK=bLUIPx%s3M+b;HlUzjlWg!h#6ht|W!NtQga +z!Mi_}!C&rsH9NzY-lRk?-iR(CF1LuB~p`T|HZJizQj(C>Zi*rYwpMxt9W6{3BHVW +zSF*HA2RvMtm^&W$Y|!oyb5xH6PWTiZD>4s-3PUSLhq!p5LM488=fx0yI3_qLAj#=c +z9rtVm=LZV}Cw39~CFgqF36z`qfJHe?7@7DN-EMi@!cX-h^TB^oHu5%^nEx2q58C6{%+XMmmlZ6+q~>sS=r}BIcsn9(qWe8Z?Bi` +z$=TihY`4ij%YsR~)rAmbd$+&TQL@AZd-dflF#6bn!%+-!CRp&vQMJE61aTa;UFz_~ +zv23UM#}UUblo?!kB)F8qICAGRxz17Pja4sfBL$RH +zD0kq#>})Dm>LkkT=9DdNQupYu-Y!;) +zwSj8UTU6|-MZ5#TsVeT;*>kjL$isJ!52v=+)sQcas^1bysIK7saae#jdhG=0zX#qFw(zEY|Y( +z;zeH>XfF6l3_bP&>kE&$(T8zBtZO82U%K8IbnNKXfHPprxzSZ0D6n99VCK_xp{>Ec +zVkd;ZCxQuDz9f|{vb+Y1l3ko1o>ToR#S`&a4VMKx+A?y?iGh4{xW#hJ)*wd6;D9(* +zd-XO*limwEe2Ymw<5ux#n1I*2sGs;{N)HaVa0{00SA}Q2XI@y5L4?TUEiYQWJl97j +z;zZ}cbe8LI?`q4=S>a7CIO92;iX^?Lm9VC({D82Qa-_{K}kioY{qT@-{H{ +z@G~C6Gpu1sdX>CrlB@zRdz2Jdx%Sm_84M}j-{qGZMeekEz|YG&oo8(5 +zYDT<=E|JQ`hjCc=_;by|TBAIhjBp9g#!(Sn;5vE}vO|vY(1aJ;)nf2m1P4kcJny5M +zY~lxa&H3Wa$lgTAyXPQex(Y;yiB$%bAIob)Y~gD{|7v>h3!;Kk#1LY?wbQ!yYN;dnop!r7=6w{43~nc +zOBL6Hf5TcuNgY}jDn$88V+seEoaJcgeOcg3yT-;)xzN)y%oAX6f=gl)FL&oeEgubg +zNuXL4zypPa9h?{*mLlECukLtXvM!N|WX5?yt{HVFY5~GV&Ux}O9bce9v2aieK#trf +zCy?Elrzv(Pp2~xeDdXG8Du%BI)q%H}c_YY$1GI|!=9?D#&!yk-?AF8W +zF2{v&!@5K0x7?tMdoMTYU=G=Vcci);!k1~fBb?m5V}mO(qWO5(z;kz{AHO7*s|)WK13ShIm^lAl~+h +z##g9^DjVladz?@N)Pm)QdS($ag)=F}Ky{lFH*_cYF0EWTgq|Y>b^^^Dv+0~K^m<%t4%S!r +zm71lUB_1~s#V>T6hM}kU#%g{}0heL>GuwJ!Gk$V6-v5O6szR^$bfLAlGnbCy?{F-E +zzp2bH{wA{NFdaEfkDR;67|Ph_rgSziLt>n6m$qm +z8w*h4Jc+#^uA4Ve>8=Ozil}SuWCII22%M-9&@TZFc@bL(B7+`8$cTJ7^Wz#7_5Av9A7k-WG`49bfgvEjjYU?1Rp#BhV4s06pOKsUzLI32PzMm!ob +zS-dYem3^g^Gl_HL=whkur&yJJsorLgtX&AgbI{m-5W6TUdYN)?yzBBz?lz|i +z)3d};!(p0bbs*5Cm|S{g=7e{4#C!dsys?O(g&fSMqqD5F)Y{DRi*fCj6O2QK(XO_m +zHIFWk1cosn!wtoHdoy|nzy%sr$_>8*S>P->=(ZwzvBxs*UkK1X?ANAN5jExp^SwzX +z5u)A{Q`mk#FLy1rlP7Qro%6zdxs$Ta;#XC#Ex;K)iNYb}d8XXUO3Q$sc)u7^(T_!R +z#`E%i07fh`fal+NP8*5u9Ejot!X1DwW9-M9Te|Rl8Cnkm1BM*r04|B^@R&ZgowRb< +zbJzMK^geoWxBI&LFeYCWLNLm67s-IZIXq*nPp200M3HDRkK^8PYIgtTu8w6^bR-_# +z(~-@OhOp5P>|?W;lm;Vv44MGfbdl-v29HaNc&(!xJZFY(HV#3Mp1F%)B{B5|c2Odz +z9z#&w|GMC~HUSUyEhMzT{gG6+V8i94WgCWuAZ|*%jg&m1*OWd@K8!~$d{$`F#S+U( +zOwmHr-2&LGCopwNN#y1HPX~MX8ixKw5Q2QirFfuZF>^rPp;15l7_{Q~aLZ#Voey0Z +z;EYIr3mZ_ck1>s{QEZ_xb8#puWT9ONQ*JY8$a)#52(8KuM*s3{cabYyr4xc(WkjpQ +zaty<(%qE-=ymnSZH8CVjit8 +zO2%3^f7!wi?&+%#A=+n2pj|mK$J@wck&mwom-Ey%460C6GJHdwK+Pbgv8bvbb41ja +zgmjtKF=q|9(|FQGZljN;Q@KbYMZEYzbT^Ud~}Rys1P0sO0sQ2YM%SSBsni}M|TjDH?5ZqAG%-z!Nf3Z +zXBWA1GR1{{W1IMJ9DNC=v9ril5{3%dZR@P7#?5^DJWucop}^|0!l(!I*q~Ob6%I|9 +znD(ZoXY{P!uyRE~iNr`OG(#Ok^&WV-Tth@#p8joaIJZRDwm5??c7FNXPg9Tc +znyC;{y{#aaZ6c4MurVBy2oU)v?)O35FI__^IMX2L*CY|6oOdZsTxMMA;>=)R$g8om +z^~b@5v1$t_Pe-28$z4D-J+WjM*R-hHv`l06H|{W7Z4ch6v_FJ;V_-DuvYdJlR~?te +z*yuKMT>C*0lW?X}Ehp*)9~Bks&$;%$z;mf|vPKKaC6U68+*CAf;iY1^kwn%bJ#l=J +z7|9qw7@4N&5fnK2&fsfUuNg9SORd9e1*r%qA!T-bFFbLeH23ICq4t|XfX#+$O~1nw +zH5TX{2UL@QqCNj(f0vuW& +zlf8Xt7dWJowH})A-4T2>76Vz-$XwS_?<^sziU&oih4fdbHgxSrNhW=Xua==KpB5_* +z@sHXuB>I;n%D)OaD#xIOMS_-+o;;O$&cM8tbng0_i5@-H6UQcB!xrJ%BJCC2Wx1gi +zbzE+&pTpP^kXJM>=`!%Y1aGL!y!A)2NJUlBbd=aC4IRnBa@pnanF&z}Q?F}bo+tAO +z99rK6`CI%ZYC`H`{XNMWU0n*FwIwl%BaLZgr}CqN@eI`lRBSY!&Ejo=RJeK68pZM% +z8snbxjX4)+;XWERCCrD=xOSW+M|Rh2fgcpI4Azvj*u*s43fNISV!DYj(862WI(=&- +zT41ro!i!qhYTL{$I3bNmX}@b=C|~5?IOCeeC}xMw|CX&hSrgJHXP)s>nduOZD!j*B +ze19&4vKEYN;V!1o$qy2rH%>>yf!eS&of#Ve3xq%_6jfCFy~x6Ba^^#77+h|f+`D~~ +zYvH0iA&hCJ>6FkYmVg)m9rUCf#2S0C6Js>qF@ISIW=1szuf1;7r*?SqOl`dm=Xdw* +z2vd%`i!wJHZ(&BnY!ITMC#r$oaRi_FwDEtL#y1;mT^md~+*DtNOA7o5E{C5&pt +z1*?^d+Ua)Zw4}<**-Vj~E$oTnDFGIy0OOK6fNx}Gw>E%f6Owm4pqH2k&9JHhmrM(N +zm?q;993Kq_7!{YcutHG-v_u$@inUT9>gAM!pH$^E1Kpd#;DehF@yizSNNCu>VgDK1 +zzz6%Vj|Ai1pUCDYnK^A?oLj8%sT0V#bWk`UN%SkS&L5vWt}l||Yl$l=E9)!bi89@w +zQ`eu7S04&@6ncR31JNLtCg?~=?OWJ<_d)+iWI7xj|17u;ZQ%Pmoq3q) +zr15ab=e3=J3AivAQ+J)0CgD5?Oizs+I<_O5_+$c)u1h_o&lA?P5MGRjDfyKJ97FaO +zHsn+}HGO)ZRPVfdp(iqMoasq(Kew!mWiAZkg9W-ifNyM7Jvl)OYvX2;f_5q`do_5G+n{v$>9wYOKE`(v+^#a}sVIV5WU@n}rJ)e>=4p@T8 +zf)L1(u5lsjSiCb^^?<@?dPw6Is3<3W;54e~$I=aHG0WQm$cr12#u~*x2SO7eSdnaJ +zXJ-f;8l(QCzN~)=UK+m{2UfFG|CEaI&elewZl>vK)JtJ7dXim8WKsT=2uF(%%Dr4fsB2?EOPlnION{x%Zt$1=YddBpc3lMeAaHk4%XJO^W$HL~~bwyo~omhDM7_JOx +zb9TtbQEh|@N6U2B3X<%fbl9->rmlM{tTW0v+KkgS&nv4EYZn0@+0*g)ab^77E^SM+BS25;S3E +z0lC9QMrd2ex&)@f~bM2?M=bVUI}uMEANS}ZGCGUAXC9mo0v}8ig%RoO9$eaQEbqIqfLI# +zh!JJNqah2l*OvKi{LWRXA#prMD7uvqCjRHn?z{oS^eog4Xk3a*A{g=uBliMW|6E*o +z^du5aHqUTjF^0x0 +zd3L+>YYR^M91!Z|NM+HLb!Gjd-6&sJg<@)!(|6&&Ti(G^h9S=~owa-Asy$YJSAS1| +z$21Zf3S*%|>%Y6Ge{X%N-G6sL|DhWSrhy;mG|~P$sAUH%Qim^UBKgoT^#EGZ2BzId +z6P{KitrvG$y3q^d^{fJv^8N?Y%X_3QXkDkvLm4(lNOD(z17NX1cNk^PlojqRKdn^8Vkf-9TSJ7 +zLJfn_`aEQTou>&TidnYenLL6CgH%e~aKg?XW%l7PDcge4QLIr(jyhzjNnsyn$dK5= +z48jd_)TPpy(MU3+O}mydvL8>BzBuu&j^VkS-ps{hc=1fFS=e=#&aAdVGZT_~nLQfZBAC_(bVb!u_{ +zy3_&Ol);uInd1;h?P%pLK}5cROHQz%Og0Z`0P0*rqM +z*-rORYJ`B|9zar!!3;a6>ol+LPN#+vnS$L!saSenRkc#;@UpE=^SiahD@)Seh7WSO +zO4Vev=xiRuFN|Cmj(6pVtyonP{&nfOrj5$jorIxC7(T-c8ROC7J@I(L0KULovA@ar +z6ztNg9DB?_5EXe^ov3^3(`>*x3>tVW4$i1E9NN9Q&zsJGc8}&WOo}DPjYH7c)PxfP +zvgACxM;cxxDT50R^xDHe^c`TF$1^-W&|bVJHZ=imG#-zg;h#^3sxeJf@)nt44ER1f +znwB2rN&V4GVoXZWX~F~zvJAp+(+GQ`Y;-nAddAKBadnLX-esMrut5f81LBB?j5e&p +z$(6|7o`5HogT-7cjngfu9k*1ot9x_56Qk3v)807fo9RXI0K`1awI$jDc5WfWtt|_DK}XjReD+69|v2PKs%^cc8Tz +zXz3)j?gzswKDb5jqfCJ!cVHRJkV)2}p?IW>&&xvMjEP+=?xG!&abVenn5OU~2-Hpt +zhDNxAWI4QGPWnSxbu@WAC?zU#XNKZ7Ob;L!-^!S*~f)Bbkw)FujOU> +zGJZu6$NGEov0_MXTPp0$7>?{!VjV`{(!&)c>*^an9wQOGA`t&D&P?&B%i(cIO2FZ& +zm-(mQDC$Ay|E-b4%ad-&`J%m|+Ez<&dS`GUPrUNmSZ)3Vy!p0AcWn65OK +zGE*a-pnv+T4htNeK+*sYU?7<|%>U)V18BmO@CZ$BrF#9oNXF#wiphUuj-0gN?n=al +z<2fzrtRm4Qy42B14gt*BM_ExM1=7v~l4r&kU)=RPYxN;J9&&hEv}w~uQYfIl(}fDt%Zicdtq>Xdg#Mjnr4gCw-&a-^k23o*iV<(|l-jzw +zzE&5q26I9MC8)*S4BF`m2L8PDy9_^3O^_W8n@}t;*dQBT#NI4sH8F-f)N>|p@z%)x +z#AtrhQ-hm?v5~b#;z{o4uxu*Yr6|S78VjBdsVPHtY17b~wvw##4JMCiTuHHIao1Dq +z;-H|ymIj!NP8~~e)8lQwTnHluYT-FvG?TUd?a_yy6a$&3>oVy}OD>di!lmvL_YS2e +z8gQeC+93fNOp(_G)Ynjjc;-&eJ^Oj?YHU{dYivA%)hb_NQ%oqH1?koO#t$wSm`f@Y +zjlg$-(v_ZrNmY5_Nijxc>Q0Iq99G#$F__Mhu9dNrjNo(i&E$TMljIb(6~m{}q~GE) +zWEhQGZHTOp3S-930%oKw;%7vuh?0A5!f2We+bNF2H0tPnF~ajgYvVi}IgHU{0}ho& +zJj=E?z*t~7U=&O7UzTZ*@R(tDgSc05QC#sD) ++ ++ ++ ++ AboutDialog ++ ++ ++ About ++ Sobre ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ Qt based graphical user interface to CHDMAN, the MAME CHD management tool ++ Interface gráfica feita em Qt para o CHDMAN, a ferramenta de gerenciamento de CHDs do MAME ++ ++ ++ ++ Copyright ++ Direitos autorais ++ ++ ++ ++ All Rights Reserved. ++ Todos os direitos reservados. ++ ++ ++ ++ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the license, or (at your option) any later version. ++ Este programa é um software livre, você pode redistribuí-lo e/ou modificá-lo sobre os termos da Licença Pública Geral GNU como publicada pela Free Software Foundation, tanto na versão 2 da licença, o (a seu critério) qualquer versão posterior. ++ ++ ++ ++ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++ Este programa é distribuído na esperança de que será útil, mas SEM QUALQUER GARANTIA; incluindo qualquer garantia implícita de COMERCIALIZAÇÃO OU ADEQUAÇÃO A UM DETERMINADO PROPÓSITO. ++ ++ ++ ++ See the ++ Veja a ++ ++ ++ ++ GNU General Public License ++ Licença Pública Geral GNU ++ ++ ++ ++ for more details. ++ para obter mais detalhes. ++ ++ ++ ++ Qt CHDMAN GUI is part of the ++ A Interface Gráfica CHDMAN feita em Qt é parte do ++ ++ ++ ++ QMC2 project ++ projeto QMC2 ++ ++ ++ ++ MainWindow ++ ++ ++ MainWindow ++ MainWindow ++ ++ ++ ++ &Window ++ Jane&la ++ ++ ++ ++ View mode ++ Modo de visualização ++ ++ ++ ++ &Help ++ &Ajuda ++ ++ ++ ++ Create a new project ++ Criar um novo projeto ++ ++ ++ ++ Ctrl+N ++ Ctrl+N ++ ++ ++ ++ Load existing project from file ++ Carrega o projeto existente a partir de um arquivo ++ ++ ++ ++ Ctrl+L ++ Ctrl+L ++ ++ ++ ++ Save ++ Salvar ++ ++ ++ ++ Ctrl+S ++ Ctrl+S ++ ++ ++ ++ Save as... ++ Salvar como... ++ ++ ++ ++ Ctrl+Shift+S ++ Ctrl+Shift+S ++ ++ ++ ++ Exit ++ Encerrar ++ ++ ++ ++ Quit GUI ++ Encerrar a interface ++ ++ ++ ++ Ctrl+X ++ Ctrl+X ++ ++ ++ ++ Next ++ Próximo ++ ++ ++ ++ Ctrl+Alt+N ++ Ctrl+Alt+N ++ ++ ++ ++ Previous ++ Anterior ++ ++ ++ ++ Ctrl+Alt+P ++ Ctrl+Alt+P ++ ++ ++ ++ Tile ++ Lado a lado ++ ++ ++ ++ Ctrl+Alt+T ++ Ctrl+Alt+T ++ ++ ++ ++ Cascade ++ Cascata ++ ++ ++ ++ Ctrl+Alt+C ++ Ctrl+Alt+C ++ ++ ++ ++ Close ++ Fechar ++ ++ ++ ++ Close all ++ Fechar todas ++ ++ ++ ++ &File ++ &Arquivo ++ ++ ++ ++ Recent projects ++ Projetos recentes ++ ++ ++ ++ Recent scripts ++ Scripts recentes ++ ++ ++ ++ New project ++ Novo projeto ++ ++ ++ ++ Load project... ++ Abrir um projeto... ++ ++ ++ ++ Save project or script to file ++ Salva o projeto ou o script num arquivo ++ ++ ++ ++ Save project or script under a different name ++ Salva projeto ou o script com um novo nome ++ ++ ++ ++ Select next window ++ Seleciona a próxima janela ++ ++ ++ ++ Select previous window ++ Seleciona a janela anterior ++ ++ ++ ++ Tile windows ++ Janelas lado a lado ++ ++ ++ ++ Cascade windows ++ Janelas em cascata ++ ++ ++ ++ Close active window ++ Fecha a janela ativa ++ ++ ++ ++ Close all windows ++ Fecha todas as janelas ++ ++ ++ ++ About... ++ Sobre... ++ ++ ++ ++ About this program ++ Sobre este programa ++ ++ ++ ++ About Qt... ++ Sobre o Qt... ++ ++ ++ ++ About Qt ++ Sobre o Qt ++ ++ ++ ++ Preferences... ++ Preferências... ++ ++ ++ ++ General preferences ++ Preferências gerais ++ ++ ++ ++ Ctrl+P ++ Ctrl+P ++ ++ ++ ++ View in windowed mode ++ Ver em modo janela ++ ++ ++ ++ View in tabbed mode ++ Ver em abas ++ ++ ++ ++ Save all projects or scripts ++ Salva todos os projetos ou scripts ++ ++ ++ ++ Load script... ++ Abrir um script... ++ ++ ++ ++ Load existing script from file ++ Abre um script já existente a partir de um arquivo ++ ++ ++ ++ Ctrl+Shift+L ++ Ctrl+Shift+L ++ ++ ++ ++ Wiki... ++ Wiki... ++ ++ ++ ++ Open our wiki in the default browser ++ Abre o nosso wiki no navegador padrão ++ ++ ++ ++ Forum... ++ Fórum... ++ ++ ++ ++ Open our forum in the default browser ++ Abre o nosso fórum no navegador padrão ++ ++ ++ ++ Bug tracker... ++ Gerenciador de defeitos (bug tracker)... ++ ++ ++ ++ Open our bug-tracking system in the default browser ++ Abre a nossa ferramenta de gerenciamento de defeitos no navegador padrão ++ ++ ++ ++ Windowed ++ Modo janela ++ ++ ++ ++ Ctrl+Shift+W ++ Ctrl+Shift+W ++ ++ ++ ++ Tabbed ++ Abas ++ ++ ++ ++ Ctrl+Shift+T ++ Ctrl+Shift+T ++ ++ ++ ++ Save all ++ Salvar todos ++ ++ ++ ++ Ctrl+Alt+S ++ Ctrl+Alt+S ++ ++ ++ ++ New script ++ Novo script ++ ++ ++ ++ Create a new script ++ Cria um novo script ++ ++ ++ ++ Ctrl+Shift+N ++ Ctrl+Shift+N ++ ++ ++ ++ avhu (A/V Huffman) ++ avhu (A/V Huffman) ++ ++ ++ ++ cdfl (CD FLAC) ++ cdfl (CD FLAC) ++ ++ ++ ++ cdlz (CD LZMA) ++ cdlz (CD LZMA) ++ ++ ++ ++ cdzl (CD Deflate) ++ cdzl (CD Deflate) ++ ++ ++ ++ flac (FLAC) ++ flac (FLAC) ++ ++ ++ ++ huff (Huffman) ++ huff (Huffman) ++ ++ ++ ++ lzma (LZMA) ++ lzma (LZMA) ++ ++ ++ ++ zlib (Deflate) ++ zlib (Descomprimir) ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose project file ++ Escolha o arquivo do projeto ++ ++ ++ ++ Project files (*.prj) ++ Arquivos do projeto (*.prj) ++ ++ ++ ++ Choose script file ++ Escolha o script ++ ++ ++ ++ Script files (*.scr) ++ Arquivos script (*.scr) ++ ++ ++ ++ ++ KB ++ KB ++ ++ ++ ++ ++ MB ++ MB ++ ++ ++ ++ ++ GB ++ GB ++ ++ ++ ++ TB ++ TB ++ ++ ++ ++ Running scripts / projects: %1 / %2 ++ Scripts / projetos em execução: %1 / %2 ++ ++ ++ ++ Project '%1' doesn't exist ++ O projeto '%1' não existe ++ ++ ++ ++ Script '%1' doesn't exist ++ O script '%1' não existe ++ ++ ++ ++ ++ Confirm ++ Confirmar ++ ++ ++ ++ There are %n script(s) currently running. ++ ++Proceed? ++ ++ Atualmente há %n script(s) em execução. ++ ++Prosseguir? ++ Atualmente há %n script(s) em execução. ++ ++Prosseguir? ++ ++ ++ ++ ++ There is 1 project currently running. ++ ++Closing its window will kill the external process! ++ ++Proceed? ++ Atualmente há 1 projeto em andamento. ++ ++Ao fechar esta janela, o processo externo será morto! ++ ++Prosseguir? ++ ++ ++ ++ There are %1 projects currently running. ++ ++Closing their windows will kill the external processes! ++ ++Proceed? ++ Atualmente há %1 projeto(s) em andamento. ++ ++Ao fechar a janela deles, o processo externo será morto! ++ ++Prosseguir? ++ ++ ++ ++ PreferencesDialog ++ ++ ++ Preferences ++ Preferências ++ ++ ++ ++ Ok ++ Ok ++ ++ ++ ++ Apply ++ Aplicar ++ ++ ++ ++ Cancel ++ Cancelar ++ ++ ++ ++ GUI ++ Interface Gráfica ++ ++ ++ ++ Language ++ Idioma ++ ++ ++ ++ Style ++ Estilo ++ ++ ++ ++ Font ++ Fonte ++ ++ ++ ++ Application font ++ Fonte da aplicação ++ ++ ++ ++ ++ ++ Size ++ Tamanho ++ ++ ++ ++ Application font size ++ Tamanho da fonte da aplicação ++ ++ ++ ++ ++ Log font ++ Fonte do registro ++ ++ ++ ++ Log font size ++ Tamanho da fonte do registro ++ ++ ++ ++ Maximize new project or script windows ++ Expande as janelas dos novos projetos ou dos scripts ++ ++ ++ ++ Maximize windows ++ Expande as janelas ++ ++ ++ ++ Display project help texts ++ Mostra os textos de ajuda do projeto ++ ++ ++ ++ <b>Paths to program binaries</b> ++ <b>Caminhos para os binários dos programas</b> ++ ++ ++ ++ Non-CHD input ++ Entrada para os não CHD ++ ++ ++ ++ <b>Preferred folders for input &amp; output files</b> ++ <b>Pastas preferenciais para os arquivos de entrada &amp; e os gerados</b> ++ ++ ++ ++ CHD output ++ Saída para os CHDs ++ ++ ++ ++ Non-CHD output ++ Saída para os não CHDs ++ ++ ++ ++ Preferred folder to use for non-CHD output files ++ Pasta preferencial para usar com os arquivos gerados, não CHD ++ ++ ++ ++ American English (us) ++ ++ ++ ++ ++ Preferred folder to use for CHD output files ++ Pasta preferencial para usar com os CHDs que forem gerados ++ ++ ++ ++ Preferred folder to search for non-CHD input files ++ Pasta preferencial para buscar pelos arquivos de entrada não CHD ++ ++ ++ ++ Preferred folder to search for CHD input files ++ Pasta preferencial para buscar pelos arquivos de entrada CHD ++ ++ ++ ++ Select the GUI style ++ Selecione o estilo da interface gráfica ++ ++ ++ ++ Select the GUI language (requires a restart to take effect!) ++ Selecione o idioma da interface gráfica (requer reinício para surtir efeito!) ++ ++ ++ ++ German (de) ++ Alemão (de) ++ ++ ++ ++ Spanish (es) ++ Espanhol (es) ++ ++ ++ ++ Greek (el) ++ Grego (el) ++ ++ ++ ++ French (fr) ++ Francês (fr) ++ ++ ++ ++ Italian (it) ++ Italiano (it) ++ ++ ++ ++ Polish (pl) ++ Polonês (pl) ++ ++ ++ ++ Portuguese (pt) ++ Português (pt) ++ ++ ++ ++ Brazilian Portuguese (pt_BR) ++ ++ ++ ++ ++ Romanian (ro) ++ Romeno (ro) ++ ++ ++ ++ Swedish (sv) ++ Sueco (sv) ++ ++ ++ ++ Make sure project help texts are shown ++ Faça com que os textos de ajuda dos projetos sejam exibidos ++ ++ ++ ++ Use the platform's native file dialogs or the Qt built-in ones ++ Use as janelas nativas da plataforma ou os do Qt ++ ++ ++ ++ Use native file dialogs ++ Use as janelas nativas do arquivo ++ ++ ++ ++ Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output ++ Inclui os nomes dos canais de E/S (stdout / stderr) ao fazer o registro da saída do CHDMAN ++ ++ ++ ++ Log channel names ++ Nomes dos canais de registro ++ ++ ++ ++ ++ Editor font ++ Fonte do editor ++ ++ ++ ++ Editor font size ++ Tamanho da fonte do editor ++ ++ ++ ++ Paths ++ Caminhos ++ ++ ++ ++ CHD input ++ Entrada para os CHDs ++ ++ ++ ++ CHDMAN binary ++ Executável do CHDMAN ++ ++ ++ ++ Path to the CHDMAN binary ++ Caminho para o executável do CHDMAN ++ ++ ++ ++ Choose CHDMAN binary ++ Escolha o binário do CHDMAN ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ Choose preferred CHD input path ++ Escolha o caminho preferencial para entrada dos CHDs ++ ++ ++ ++ Choose preferred non-CHD input path ++ Escolha o caminho preferencial para entrada dos não CHDs ++ ++ ++ ++ Choose preferred CHD output path ++ Escolha o caminho preferencial para a saída do CHDs ++ ++ ++ ++ Choose preferred non-CHD output path ++ Escolha o caminho preferencial para saída dos não CHDs ++ ++ ++ ++ ProjectWidget ++ ++ ++ Select project type ++ Seleciona o tipo do projeto ++ ++ ++ ++ Display information about a CHD input file ++ Mostra a informação sobre um arquivo CHD ++ ++ ++ ++ Verify the integrity of a CHD input file ++ Verifica a integridade de um arquivo CHD ++ ++ ++ ++ Copy data from one CHD to another ++ Copia os dados de um CHD para outro ++ ++ ++ ++ Create a raw CHD from an input file ++ Cria um arquivo CHD bruto a partir de um arquivo ++ ++ ++ ++ Create an HD CHD from an input file ++ Cria um CHD HD a partir de um arquivo ++ ++ ++ ++ Create a CD CHD from an input file ++ Cria um CD CHD a partir de um arquivo ++ ++ ++ ++ Create an LD CHD from an input file ++ Criar um LD CHD a partir de um arquivo ++ ++ ++ ++ Extract a raw file from a CHD input file ++ Extrai um arquivo bruto a partir de um CHD ++ ++ ++ ++ Extract an HD file from a CHD input file ++ Extrai um arquivo HD a partir de um CHD ++ ++ ++ ++ Extract a CD file from a CHD input file ++ Extrai um arquivo CD a partir de um CHD ++ ++ ++ ++ Extract an LD AVI file from a CHD input file ++ Extrai um arquivo LD AVI a partir de um CHD ++ ++ ++ ++ Dump meta-data from a CHD ++ Extrai o metadados de uma imagem a partir de um CHD ++ ++ ++ ++ Add meta-data to a CHD ++ Adiciona um metadados num CHD ++ ++ ++ ++ Remove meta-data from a CHD ++ Remove os metadados de um CHD ++ ++ ++ ++ Project status / progress ++ Condição do projeto / progresso ++ ++ ++ ++ ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ Run this project ++ Executa este projeto ++ ++ ++ ++ Terminate the running process ++ Encerra os processos em execução ++ ++ ++ ++ Tools menu ++ Menu de ferramentas ++ ++ ++ ++ Output additional information (--verbose) ++ Mostra as informações adicionais (--verbose) ++ ++ ++ ++ Verbose output ++ Saída detalhada ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ CHD input file (--input) ++ Arquivo CHD (--input) ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ CHD input file (required) ++ Arquivo CHD (obrigatório) ++ ++ ++ ++ <p> ++<b>CHDMAN Info</b> ++</p> ++Displays information about a CHD file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--verbose, -v: output additional information ++</p> ++ <p> ++<b>Info do CHDMAN</b> ++</p> ++Exibe as informações sobre o CHD. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--verbose, -v: gera informação adicional ++</p> ++ ++ ++ ++ ++ ++ ++ ++ ++ Parent CHD input file (--inputparent) ++ Arquivo principal do CHD (--inputparent) ++ ++ ++ ++ ++ ++ ++ ++ ++ Parent CHD input file ++ Arquivo principal do CHD ++ ++ ++ ++ <p> ++<b>CHDMAN Verify</b> ++</p> ++Verifies a CHD's integrity. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--inputparent, -ip &lt;filename&gt;: parent file name for input CHD ++</p> ++ <p> ++<b>Verificação do CHDMAN</b> ++</p> ++Afere a integridade dos CHDs. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--inputparent, -ip &lt;filename&gt;: nome do arquivo principal do CHD ++</p> ++ ++ ++ ++ ++ ++ ++ ++ Starting byte offset within the input (--inputstartbyte) ++ Deslocamento inicial em bytes (--inputstartbyte) ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ auto ++ automático ++ ++ ++ ++ ++ ++ ++ ++ Size in bytes of each hunk (--hunksize) ++ Tamanho em bytes de cada bloco/pedaço (--hunksize) ++ ++ ++ ++ ++ ++ ++ ++ Input hunks ++ Blocos de entrada ++ ++ ++ ++ ++ ++ ++ ++ Input bytes ++ Bytes de entrada ++ ++ ++ ++ ++ ++ ++ ++ Effective length of input in bytes (--inputbytes) ++ Tamanho efetivo da entrada em bytes (--inputbytes) ++ ++ ++ ++ <p> ++<b>CHDMAN Copy</b> ++</p> ++Copies data from one CHD to another of the same type. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--inputparent, -ip &lt;filename&gt;: parent file name for input CHD<br> ++--outputparent, -op &lt;filename&gt;: parent file name for output CHD<br> ++--force, -f: force overwriting an existing file<br> ++--numprocessors, -np &lt;processors&gt;: limit the number of processors to use during compression<br> ++--inputstartbyte, -isb &lt;offset&gt;: starting byte offset within the input<br> ++--inputstarthunk, -ish &lt;offset&gt;: starting hunk offset within the input<br> ++--inputbytes, -ib &lt;length&gt;: effective length of input in bytes<br> ++--inputhunks, -ih &lt;length&gt;: effective length of input in hunks<br> ++--hunksize, -hs &lt;bytes&gt;: size of each hunk in bytes<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: which compression codecs to use (up to 4) ++</p> ++ <p> ++<b>Cópia do CHDMAN</b> ++</p> ++Faz a cópia dos dados de mesmo tipo de um CHD para outro. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado (obrigatório)<br> ++--inputparent, -ip &lt;filename&gt;: nome do arquivo CHD principal<br> ++--outputparent, -op &lt;filename&gt;: nome do arquivo principal do CHD que será gerado<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--numprocessors, -np &lt;processors&gt;: limita a quantidade de processadores durante o processo de compressão<br> ++--inputstartbyte, -isb &lt;offset&gt;: deslocamento inicial em bytes em relação ao arquivo<br> ++--inputstarthunk, -ish &lt;offset&gt;: deslocamento inicial do bloco/pedaço em relação ao arquivo<br> ++--inputbytes, -ib &lt;length&gt;: comprimento efetivo da entrada em bytes<br> ++--inputhunks, -ih &lt;length&gt;: comprimento efetivo da entrada em blocos/pedaços<br> ++--hunksize, -hs &lt;bytes&gt;: o tamanho de cada bloco/pedaço em bytes<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: qual tipo de codec de compressão utilizar (até 4) ++</p> ++ ++ ++ ++ Size in bytes of each unit (--unitsize) ++ Tamanho em bytes de cada unidade (--unitsize) ++ ++ ++ ++ <p> ++<b>CHDMAN CreateRaw</b> ++</p> ++Creates a new raw CHD from an input file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--outputparent, -op &lt;filename&gt;: parent file name for output CHD<br> ++--force, -f: force overwriting an existing file<br> ++--numprocessors, -np &lt;processors&gt;: limit the number of processors to use during compression<br> ++--inputstartbyte, -isb &lt;offset&gt;: starting byte offset within the input<br> ++--inputstarthunk, -ish &lt;offset&gt;: starting hunk offset within the input<br> ++--inputbytes, -ib &lt;length&gt;: effective length of input in bytes<br> ++--inputhunks, -ih &lt;length&gt;: effective length of input in hunks<br> ++--hunksize, -hs &lt;bytes&gt;: size of each hunk in bytes (required)<br> ++--unitsize, -us &lt;bytes&gt;: size of each unit in bytes (required)<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: which compression codecs to use (up to 4) ++</p> ++ <p> ++<b>CHDMAN CreateRaw</b> ++</p> ++Cria um novo CHD bruto a partir de um arquivo. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado (obrigatório)<br> ++--outputparent, -op &lt;filename&gt;: nome do arquivo CHD principal<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--numprocessors, -np &lt;processors&gt;: limita a quantidade de processadores durante o processo de compressão<br> ++--inputstartbyte, -isb &lt;offset&gt;: deslocamento inicial em bytes em relação ao arquivo<br> ++--inputstarthunk, -ish &lt;offset&gt;: deslocamento inicial do bloco/pedaço em relação ao arquivo<br> ++--inputbytes, -ib &lt;length&gt;: comprimento efetivo da entrada em bytes<br> ++--inputhunks, -ih &lt;length&gt;: comprimento efetivo da entrada em blocos/pedaços<br> ++--hunksize, -hs &lt;bytes&gt;: o tamanho de cada bloco/pedaço em bytes (obrigatório)<br> ++--unitsize, -us &lt;bytes&gt;: o tamanho de cada unicada em bytes (obrigatório)<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: qual tipo de codec de compressão utilizar (até 4) ++</p> ++ ++ ++ ++ <p> ++<b>CHDMAN CreateHD</b> ++</p> ++Creates a new HD CHD from an input file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--outputparent, -op &lt;filename&gt;: parent file name for output CHD<br> ++--ident, -id &lt;filename&gt;: name of ident file to provide CHS information<br> ++--force, -f: force overwriting an existing file<br> ++--numprocessors, -np &lt;processors&gt;: limit the number of processors to use during compression<br> ++--inputstartbyte, -isb &lt;offset&gt;: starting byte offset within the input<br> ++--inputstarthunk, -ish &lt;offset&gt;: starting hunk offset within the input<br> ++--inputbytes, -ib &lt;length&gt;: effective length of input in bytes<br> ++--inputhunks, -ih &lt;length&gt;: effective length of input in hunks<br> ++--hunksize, -hs &lt;bytes&gt;: size of each hunk in bytes (required)<br> ++--chs, -chs &lt;cylinders,heads,sectors&gt;: specifies CHS values directly<br> ++--sectorsize, -ss &lt;bytes&gt;: size of each hard disk sector in bytes<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: which compression codecs to use (up to 4) ++</p> ++ <p> ++<b>CHDMAN CreateHD</b> ++</p> ++Cria um novo HD CHD a partir de um arquivo. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado (obrigatório)<br> ++--outputparent, -op &lt;filename&gt;: nome do arquivo CHD principal<br> ++--ident, -id &lt;filename&gt;: nome do arquivo de identificação que proverá a informação de CHS<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--numprocessors, -np &lt;processors&gt;: limita a quantidade de processadores durante o processo de compressão<br> ++--inputstartbyte, -isb &lt;offset&gt;: deslocamento inicial em bytes em relação ao arquivo<br> ++--inputstarthunk, -ish &lt;offset&gt;: deslocamento inicial do bloco/pedaço em relação ao arquivo<br> ++--inputbytes, -ib &lt;length&gt;: comprimento efetivo da entrada em bytes<br> ++--inputhunks, -ih &lt;length&gt;: comprimento efetivo da entrada em blocos/pedaços<br> ++--hunksize, -hs &lt;bytes&gt;: o tamanho de cada bloco/pedaço em bytes (obrigatório)<br> ++--chs, -chs &lt;cylinders,heads,sectors&gt;: determina diretamente os valores CHS (cilindro, cabeça, setor)<br> ++--sectorsize, -ss &lt;bytes&gt;: o tamanho de cada setor do disco rígido em bytes<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: qual tipo de codec de compressão utilizar (até 4) ++</p> ++ ++ ++ ++ Size in bytes of each hard disk sector (--sectorsize) ++ O tamanho em bytes de cada setor do disco (--sectorsize) ++ ++ ++ ++ Ident file to provide CHS information (--ident) ++ Arquivo de identificação que proverá as informações de CHS (--ident) ++ ++ ++ ++ Cyls / Heads / Sectors ++ Cilindros / Cabeças / Setores ++ ++ ++ ++ Calculated hard disk capacity (if applicable) ++ Capacidade calculada do disco (se aplicável) ++ ++ ++ ++ Set disk geometry from predefined templates ++ Define a geometria do disco a partir de modelos predefinidos ++ ++ ++ ++ CD input file (--input) ++ Arquivo CD (--input) ++ ++ ++ ++ CD input file (required) ++ Arquivo CD (obrigatório) ++ ++ ++ ++ <p> ++<b>CHDMAN CreateCD</b> ++</p> ++Creates a CD CHD from an input file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--outputparent, -op &lt;filename&gt;: parent file name for output CHD<br> ++--force, -f: force overwriting an existing file<br> ++--numprocessors, -np &lt;processors&gt;: limit the number of processors to use during compression<br> ++--hunksize, -hs &lt;bytes&gt;: size of each hunk in bytes<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: which compression codecs to use (up to 4) ++</p> ++ <p> ++<b>CHDMAN CreateCD</b> ++</p> ++Cria um CD CHD a partir de um arquivo. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado (obrigatório)<br> ++--outputparent, -op &lt;filename&gt;: nome do arquivo principal do CHD que será gerado<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--numprocessors, -np &lt;processors&gt;: limita a quantidade de processadores durante o processo de compressão<br> ++--hunksize, -hs &lt;bytes&gt;: o tamanho de cada bloco/pedaço em bytes<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: qual tipo de codec de compressão utilizar (até 4) ++</p> ++ ++ ++ ++ ++ Effective length of input in frames (--inputframes) ++ Tamanho efetivo da entrada em quadros (--inputframes) ++ ++ ++ ++ ++ Input frames ++ Quadros de entrada ++ ++ ++ ++ LD input file (--input) ++ Arquivo CD (--input) ++ ++ ++ ++ LD input file (required) ++ Arquivo LD (obrigatório) ++ ++ ++ ++ ++ Starting frame within the input (--inputstartframe) ++ Quadro inicial dentro da entrada (--inputstartframe) ++ ++ ++ ++ ++ Input start frame ++ Quadro inicial da entrada ++ ++ ++ ++ <p> ++<b>CHDMAN CreateLD</b> ++</p> ++Creates a laser-disc CHD from an input file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--outputparent, -op &lt;filename&gt;: parent file name for output CHD<br> ++--force, -f: force overwriting an existing file<br> ++--numprocessors, -np &lt;processors&gt;: limit the number of processors to use during compression<br> ++--inputstartframe, -isf &lt;offset&gt;: starting frame within the input<br> ++--inputframes, -if &lt;length&gt;: effective length of input in frames<br> ++--hunksize, -hs &lt;bytes&gt;: size of each hunk in bytes<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: which compression codecs to use (up to 4) ++</p> ++ <p> ++<b>CHDMAN CreateLD</b> ++</p> ++Cria um LD CHD a partir de um arquivo. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (required)<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado (obrigatório)<br> ++--outputparent, -op &lt;filename&gt;: nome do arquivo principal do CHD que será gerado<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--numprocessors, -np &lt;processors&gt;: limita a quantidade de processadores durante o processo de compressão<br> ++--inputstartframe, -isf &lt;offset&gt;: inicio do quadro dentro da entrada<br> ++--inputframes, -if &lt;length&gt;: comprimento efetivo da entrada em quadros<br> ++--hunksize, -hs &lt;bytes&gt;: o tamanho de cada bloco/pedaço em bytes<br> ++--compression, -c &lt;none|type1[,type2[,...]]&gt;: qual tipo de codec de compressão utilizar (até 4) ++</p> ++ ++ ++ ++ <p> ++<b>CHDMAN ExtractRaw</b> ++</p> ++Extracts a raw file from a CHD input file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--inputparent, -op &lt;filename&gt;: parent file name for input CHD<br> ++--force, -f: force overwriting an existing file<br> ++--inputstartbyte, -isb &lt;offset&gt;: starting byte offset within the input<br> ++--inputstarthunk, -ish &lt;offset&gt;: starting hunk offset within the input<br> ++--inputbytes, -ib &lt;length&gt;: effective length of input in bytes<br> ++--inputhunks, -ih &lt;length&gt;: effective length of input in hunks ++</p> ++ <p> ++<b>CHDMAN ExtractRaw</b> ++</p> ++Faz a extração bruta de um arquivo a partir de um arquivo CHD. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado (obrigatório)<br> ++--inputparent, -op &lt;filename&gt;: nome do arquivo CHD principal<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--inputstartbyte, -isb &lt;offset&gt;: deslocamento inicial em bytes em relação ao arquivo<br> ++--inputstarthunk, -ish &lt;offset&gt;: deslocamento inicial do bloco/pedaço em relação ao arquivo<br> ++--inputbytes, -ib &lt;length&gt;: comprimento efetivo da entrada em bytes<br> ++--inputhunks, -ih &lt;length&gt;: comprimento efetivo da entrada em blocos/pedaços ++</p> ++ ++ ++ ++ <p> ++<b>CHDMAN ExtractHD</b> ++</p> ++Extracts an HD file from a CHD input file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--inputparent, -op &lt;filename&gt;: parent file name for input CHD<br> ++--force, -f: force overwriting an existing file<br> ++--inputstartbyte, -isb &lt;offset&gt;: starting byte offset within the input<br> ++--inputstarthunk, -ish &lt;offset&gt;: starting hunk offset within the input<br> ++--inputbytes, -ib &lt;length&gt;: effective length of input in bytes<br> ++--inputhunks, -ih &lt;length&gt;: effective length of input in hunks ++</p> ++ <p> ++<b>CHDMAN ExtractHD</b> ++</p> ++Faz a extração de um arquivo HD a partir de um CHD. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado (obrigatório)<br> ++--inputparent, -op &lt;filename&gt;: nome do arquivo CHD principal<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--inputstartbyte, -isb &lt;offset&gt;: deslocamento inicial em bytes em relação ao arquivo<br> ++--inputstarthunk, -ish &lt;offset&gt;: deslocamento inicial do bloco/pedaço em relação ao arquivo<br> ++--inputbytes, -ib &lt;length&gt;: comprimento efetivo da entrada em bytes<br> ++--inputhunks, -ih &lt;length&gt;: comprimento efetivo da entrada em blocos/pedaços ++</p> ++ ++ ++ ++ <p> ++<b>CHDMAN ExtractCD</b> ++</p> ++Extracts a CD file from a CHD input file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--inputparent, -ip &lt;filename&gt;: parent file name for input CHD<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--outputbin, -ob &lt;filename&gt;: output file name for binary data<br> ++--force, -f: force overwriting an existing file ++</p> ++ ++ <p> ++<b>CHDMAN ExtractCD</b> ++</p> ++Faz a extração de um arquivo CD a partir de um CHD. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--inputparent, -ip &lt;filename&gt;: nome do arquivo CHD principal<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado (obrigatório)<br> ++--outputbin, -ob &lt;filename&gt;: nome do arquivo gerado para dados binários<br> ++--force, -f: impõem a substituição de um arquivo já existente ++</p> ++ ++ ++ ++ ++ <p> ++<b>CHDMAN DumpMeta</b> ++</p> ++Dump meta-data from a CHD to stdout or file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--output, -o &lt;filename&gt;: output file name<br> ++--force, -f: force overwriting an existing file<br> ++--tag, -t &lt;tag&gt;: 4-character tag for meta-data (required)<br> ++--index, -ix &lt;index&gt;: indexed instance of this meta-data tag ++</p> ++ <p> ++<b>CHDMAN DumpMeta</b> ++</p> ++Faz a extração dos metadados a partir de um CHD para um arquivo ou para o stdout. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--output, -o &lt;filename&gt;: nome do arquivo que será gerado<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--tag, -t &lt;tag&gt;: etiqueta com 4 caracteres para os metadados (obrigatório)<br> ++--index, -ix &lt;index&gt;: instância indexada da etiqueta deste metadados ++</p> ++ ++ ++ ++ File containing the meta-data (--valuefile) ++ O arquivo contendo os metadados (--valuefile) ++ ++ ++ ++ Meta-data value file ++ O valor do arquivo de metadados ++ ++ ++ ++ Text for the meta-data (--valuetext) ++ O texto para os metadados (--valuetext) ++ ++ ++ ++ Meta-data value text ++ O valor do texto dos metadados ++ ++ ++ ++ Don't include in SHA-1 check-sum ++ Não inclua o check-sum SHA-1 ++ ++ ++ ++ <p> ++<b>CHDMAN AddMeta</b> ++</p> ++Add meta-data to a CHD. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--valuefile, -vf &lt;file&gt;: file containing data to add<br> ++--valuetext, -vt &lt;text&gt;: text for the meta-data<br> ++--tag, -t &lt;tag&gt;: 4-character tag for meta-data (required)<br> ++--index, -ix &lt;index&gt;: indexed instance of this meta-data tag<br> ++--nochecksum, -nocs: do not include this meta-data information in the overall SHA-1 check-sum ++</p> ++ <p> ++<b>CHDMAN AddMeta</b> ++</p> ++Adiciona os metadados ao CHD. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--valuefile, -vf &lt;file&gt;: o arquivo que contém os dados que serão adicionados<br> ++--valuetext, -vt &lt;text&gt;: o texto para os metadados<br> ++--tag, -t &lt;tag&gt;: etiqueta com 4 caracteres para os metadados (obrigatório)<br> ++--index, -ix &lt;index&gt;: instância indexada da etiqueta deste metadados<br> ++--nochecksum, -nocs: não inclua essa informação de metadados na marcação do check-sum SHA-1 global ++</p> ++ ++ ++ ++ ++ ++ ++ ++ Compression ++ Compressão ++ ++ ++ ++ ++ ++ ++ ++ Input start byte ++ Byte inicial da entrada ++ ++ ++ ++ ++ ++ ++ ++ Parent CHD output file (--outputparent) ++ CHD principal do arquivo que será gerado (--outputparent) ++ ++ ++ ++ ++ ++ ++ ++ Parent CHD output file ++ CHD principal do arquivo que será gerado ++ ++ ++ ++ ++ ++ ++ ++ CHD output file (--output) ++ CHD que será gerado (--output) ++ ++ ++ ++ ++ ++ ++ ++ CHD output file (required) ++ CHD que será gerado (obrigatório) ++ ++ ++ ++ ++ ++ ++ ++ Hunk size ++ Tamanho do bloco/pedaço ++ ++ ++ ++ ++ ++ ++ ++ Number of CPUs ++ Quantidade de CPUs ++ ++ ++ ++ ++ ++ ++ ++ Input start hunk ++ Bloco/pedaço inicial da entrada ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Force overwriting output files (--force) ++ Impõem a substituição dos arquivos já existentes (--force) ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Overwrite existing files ++ Substituir os arquivos já existentes ++ ++ ++ ++ ++ ++ ++ ++ Limit the number of processors to use during compression (--numprocessors) ++ Limita a quantidade de processadores durante o processo de compressão (--numprocessors) ++ ++ ++ ++ ++ ++ ++ ++ Starting hunk offset within the input (--inputstarthunk) ++ Deslocamento inicial do bloco/pedaço em relação ao arquivo (--inputstarthunk) ++ ++ ++ ++ ++ ++ ++ ++ Effective length of input in hunks (--inputhunks) ++ Comprimento efetivo da entrada em blocos/pedaços (--inputhunks) ++ ++ ++ ++ ++ ++ ++ ++ Select up to 4 compression codecs to use (--compression) ++ Selecione até 4 codecs de compressão para usar (--compression) ++ ++ ++ ++ ++ (required) ++ (obrigatório) ++ ++ ++ ++ ++ Input file (--input) ++ Nome do arquivo (--input) ++ ++ ++ ++ Input file (required) ++ Nome do arquivo (obrigatório) ++ ++ ++ ++ Unit size ++ Tamanho da unidade ++ ++ ++ ++ Sector size ++ Tamanho do setor ++ ++ ++ ++ Ident file ++ Arquivo de identificação ++ ++ ++ ++ Sectors (--chs) ++ Setores (--chs) ++ ++ ++ ++ Heads (--chs) ++ Cabeças (--chs) ++ ++ ++ ++ Input file ++ Nome do arquivo ++ ++ ++ ++ Cylinders (--chs) ++ Cilindros (--chs) ++ ++ ++ ++ Disk capacity ++ Capacidade do disco ++ ++ ++ ++ From template ++ A partir do modelo ++ ++ ++ ++ ++ ++ ++ Output file (--output) ++ Arquivo gerado (--output) ++ ++ ++ ++ ++ ++ Output file (required) ++ Arquivo gerado (obrigatório) ++ ++ ++ ++ Binary output file (--outputbin) ++ Arquivo binário gerado (--outputbin) ++ ++ ++ ++ Binary output file ++ Arquivo binário gerado ++ ++ ++ ++ LD output file (--output) ++ Arquivo LD gerado (--output) ++ ++ ++ ++ LD output file (required) ++ Arquivo LD gerado (obrigatório) ++ ++ ++ ++ <p> ++<b>CHDMAN ExtractLD</b> ++</p> ++Extracts a laser-disc AVI file from a CHD input file. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--output, -o &lt;filename&gt;: output file name (required)<br> ++--inputparent, -ip &lt;filename&gt;: parent file name for input CHD<br> ++--force, -f: force overwriting an existing file<br> ++--inputstartframe, -isf &lt;offset&gt;: starting frame within the input<br> ++--inputframes, -if &lt;length&gt;: effective length of input in frames ++</p> ++ <p> ++<b>CHDMAN ExtractLD</b> ++</p> ++Faz a extração AVI de um laser-disc a partir de um CHD. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--output, -o &lt;filename&gt;: nome arquivo que será gerado (obrigatório)<br> ++--inputparent, -ip &lt;filename&gt;: nome do arquivo CHD principal<br> ++--force, -f: impõem a substituição de um arquivo já existente<br> ++--inputstartframe, -isf &lt;offset&gt;: inicio do quadro dentro da entrada<br> ++--inputframes, -if &lt;length&gt;: comprimento efetivo da entrada em quadros ++</p> ++ ++ ++ ++ ++ ++ Tag (required) ++ Etiqueta (obrigatório) ++ ++ ++ ++ ++ ++ Indexed instance of this meta-data tag (--index) ++ Instância indexada desta etiqueta de metadados (--index) ++ ++ ++ ++ Output file (leave empty to use stdout) ++ Arquivo gerado (deixe vazio para utilizar a saída padrão) ++ ++ ++ ++ ++ ++ Index ++ Índice ++ ++ ++ ++ ++ ++ 4-character tag for meta-data (--tag) ++ Etiqueta com 4 caracteres o metadados (--tag) ++ ++ ++ ++ Do not include this meta-data information in the overall SHA-1 check-sum (--nochecksum) ++ Não inclua essa informação de metadados na marcação do check-sum SHA-1 global (--nochecksum) ++ ++ ++ ++ <p> ++<b>CHDMAN DelMeta</b> ++</p> ++Remove meta-data from a CHD. ++<p> ++<b>Parameters</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: input file name (required)<br> ++--tag, -t &lt;tag&gt;: 4-character tag for meta-data (required)<br> ++--index, -ix &lt;index&gt;: indexed instance of this meta-data tag ++</p> ++ <p> ++<b>CHDMAN DelMeta</b> ++</p> ++Faz a remoção dos metadados de um CHD. ++<p> ++<b>Parâmetros</b> ++</p> ++<p> ++--input, -i &lt;filename&gt;: nome do arquivo (obrigatório)<br> ++--tag, -t &lt;tag&gt;: etiqueta com 4 caracteres para os metadados (obrigatório)<br> ++--index, -ix &lt;index&gt;: instância indexada da etiqueta deste metadados ++</p> ++ ++ ++ ++ Project log ++ Registro do projeto ++ ++ ++ ++ Select ++ Selecionar ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ default ++ padrão ++ ++ ++ ++ ++ ++ ++ ++ none ++ nenhum ++ ++ ++ ++ Load ++ Carregar ++ ++ ++ ++ Save ++ Salvar ++ ++ ++ ++ Save as... ++ Salvar como... ++ ++ ++ ++ Clone to ++ Copiar para ++ ++ ++ ++ Morph to ++ Transformar para ++ ++ ++ ++ Copy stdout to clipboard ++ Copia a saída padrão para a área de transferência ++ ++ ++ ++ Copy stderr to clipboard ++ Copiar saída de erro para a área de transferência ++ ++ ++ ++ Copy command to clipboard ++ Copia o comando para a área de transferência ++ ++ ++ ++ ++ ++ Info ++ Informação ++ ++ ++ ++ ++ ++ Verify ++ Verificar ++ ++ ++ ++ ++ ++ Copy ++ Copiar ++ ++ ++ ++ ++ ++ CreateRaw ++ CreateRaw ++ ++ ++ ++ ++ ++ CreateHD ++ CreateHD ++ ++ ++ ++ ++ ++ CreateCD ++ CreateCD ++ ++ ++ ++ ++ ++ CreateLD ++ CreateLD ++ ++ ++ ++ ++ ++ ExtractRaw ++ ExtractRaw ++ ++ ++ ++ ++ ++ ExtractHD ++ ExtractHD ++ ++ ++ ++ ++ ++ ExtractCD ++ ExtractCD ++ ++ ++ ++ ++ ++ ExtractLD ++ ExtractLD ++ ++ ++ ++ ++ ++ DumpMeta ++ Extrair os metadados ++ ++ ++ ++ ++ ++ AddMeta ++ Adicionar os metadados ++ ++ ++ ++ ++ ++ DelMeta ++ Remover os metadados ++ ++ ++ ++ starting process ++ iniciando o processo ++ ++ ++ ++ ++ Starting ++ Iniciando ++ ++ ++ ++ terminating process ++ concluindo o processo ++ ++ ++ ++ ++ process started: PID = %1 ++ o processo foi iniciado: PID = %1 ++ ++ ++ ++ ++ Running ++ Executando ++ ++ ++ ++ normal ++ normal ++ ++ ++ ++ terminated ++ finalizado ++ ++ ++ ++ ++ crashed ++ falha ++ ++ ++ ++ stdout ++ saída padrão ++ ++ ++ ++ stderr ++ saída de erro ++ ++ ++ ++ failed to start ++ falha ao iniciar ++ ++ ++ ++ timed out ++ estouro de tempo ++ ++ ++ ++ write error ++ erro de escrita ++ ++ ++ ++ read error ++ erro de leitura ++ ++ ++ ++ Qt CHDMAN GUI project file -- please do not edit manually ++ Arquivo do projeto Qt CHDMAN GUI -- não faça a edição manual ++ ++ ++ ++ ++ ++ unknown ++ desconhecido ++ ++ ++ ++ process error: %1 ++ erro do processo: %1 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ CHD files (*.chd) ++ Arquivos CHD (*.chd) ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Choose CHD input file ++ Escolha arquivo CHD ++ ++ ++ ++ ++ ++ ++ ++ ++ Choose parent CHD input file ++ Escolha o arquivo CHD principal ++ ++ ++ ++ ++ ++ ++ ++ Choose CHD output file ++ Escolha o arquivo CHD que será gerado ++ ++ ++ ++ ++ ++ ++ ++ Choose parent CHD output file ++ Escolha o arquivo do CHD principal que será gerado ++ ++ ++ ++ ++ Choose input file ++ Escolha arquivo ++ ++ ++ ++ Choose ident file ++ Escolha arquivo de identificação ++ ++ ++ ++ ++ CUE files (*.cue) ++ Arquivos CUE (*.cue) ++ ++ ++ ++ ++ TOC files (*.toc) ++ Arquivos TOC (*.toc) ++ ++ ++ ++ ++ GDI files (*.gdi) ++ Arquivos GDI (*.gdi) ++ ++ ++ ++ ++ NRG files (*.nrg) ++ Arquivos NRG (*.nrg) ++ ++ ++ ++ ++ Compatible files (*.cue *.toc *.gdi *.nrg *.iso) ++ Arquivos compatíveis (*.cue *.toc *.gdi *.nrg *.iso) ++ ++ ++ ++ ++ ISO files (*.iso) ++ Arquivos ISO (*.iso) ++ ++ ++ ++ Choose CD input file ++ Escolha o arquivo CD ++ ++ ++ ++ ++ AVI files (*.avi) ++ Arquivos AVI (*.avi) ++ ++ ++ ++ Choose LD input file ++ Escolha o arquivo LD ++ ++ ++ ++ ++ Raw disk image (*.img) ++ Imagem de disco raw (*.img) ++ ++ ++ ++ ++ Mac disk image (*.dmg) ++ Imagem de disco do Mac (*.dmg) ++ ++ ++ ++ ++ Apple IIgs disk image (*.2mg) ++ Imagem de disco IIgs da Apple (*.2mg) ++ ++ ++ ++ ++ FM-Towns disk image (*.h0 *.h1 *.h2 *.h3 *.h4) ++ Imagem de disco FM-Towns (*.h0 *.h1 *.h2 *.h3 *.h4) ++ ++ ++ ++ ++ IDE64 disk image (*.hdd) ++ Imagem de disco IDE64 (*.hdd) ++ ++ ++ ++ ++ ++ ++ ++ Choose output file ++ Escolha arquivo que será gerado ++ ++ ++ ++ X68k SASI disk image (*.hdf) ++ Imagem de disco X68k SASI (*.hdf) ++ ++ ++ ++ X68k SCSI disk image (*.hds) ++ Imagem de disco X68k SCSI (*.hds) ++ ++ ++ ++ Binary CD files (*.bin) ++ Arquivos binários CD (*.bin) ++ ++ ++ ++ Choose binary output file ++ Escolha o arquivo binário que será gerado ++ ++ ++ ++ Choose meta-data value file ++ Escolha o arquivo com os valores dos metadados ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ process finished: exitCode = %1, exitStatus = %2, execTime = %3 ++ o processo foi concluído: código gerado = %1, condição da saída = %2, tempo de execução = %3 ++ ++ ++ ++ ++ Choose project file ++ Escolha o arquivo do projeto ++ ++ ++ ++ ++ Project files (*.prj) ++ Arquivos do projeto (*.prj) ++ ++ ++ ++ Failed loading project '%1' ++ Houve uma falha ao carregar o projeto '%1' ++ ++ ++ ++ ++ Noname-%1 ++ Semnome-%1 ++ ++ ++ ++ Project '%1' saved ++ Projeto '%1' salvo ++ ++ ++ ++ Failed saving project '%1' ++ Houve uma falha ao salvar o projeto '%1' ++ ++ ++ ++ cloning to '%1' is not supported yet ++ a clonagem para '%1' ainda não é suportado ++ ++ ++ ++ morphing to '%1' is not supported yet ++ a transformação para '%1' ainda não suportado ++ ++ ++ ++ ProjectWindow ++ ++ ++ Noname-%1 ++ Semnome-%1 ++ ++ ++ ++ ++ Confirm ++ Confirmar ++ ++ ++ ++ Project '%1' is currently running. ++ ++Closing its window will kill the external process! ++ ++Proceed? ++ O projeto '%1' já está sendo executado ++ ++Ao fechar esta janela, o processo externo será morto! ++ ++Prosseguir? ++ ++ ++ ++ Script '%1' is currently running. ++ ++Proceed? ++ O script '%1' já está sendo executado ++ ++Prosseguir? ++ ++ ++ ++ ScriptEngine ++ ++ ++ Choose file ++ Escolha um arquivo ++ ++ ++ ++ Choose folder ++ Escolha uma pasta ++ ++ ++ ++ Input text ++ Texto da entrada ++ ++ ++ ++ Choose item ++ Escolha um item ++ ++ ++ ++ ++ Input value ++ Valor da entrada ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ warning ++ aviso ++ ++ ++ ++ ++ ++ ++ project '%1' already exists ++ o projeto '%1' já existe ++ ++ ++ ++ project type '%1' doesn't exists - valid types are: %2 ++ o tipo de projeto '%1' não existe - tipos válidos: %2 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ project '%1' doesn't exists ++ o projeto '%1' não existe ++ ++ ++ ++ project '%1' hasn't run yet ++ o projeto '%1' não foi executado ainda ++ ++ ++ ++ none ++ nenhum ++ ++ ++ ++ CHS template for vendorName = '%1', diskName = '%2' doesn't exist ++ O modelo do CHS para o vendorName = '%1', diskName = '%2' não existe ++ ++ ++ ++ project '%1' is already running ++ o projeto '%1' já está sendo executado ++ ++ ++ ++ ScriptWidget ++ ++ ++ Script status / progress ++ Condição do script / progresso ++ ++ ++ ++ ++ Idle ++ Ocioso ++ ++ ++ ++ Run this script ++ Executa este script ++ ++ ++ ++ Tools menu ++ Menu de ferramentas ++ ++ ++ ++ Script editor ++ Editor de script ++ ++ ++ ++ Script log ++ Registro do script ++ ++ ++ ++ Project monitor ++ Monitor do projeto ++ ++ ++ ++ Project ID ++ ID do Projeto ++ ++ ++ ++ Progress ++ Progresso ++ ++ ++ ++ Command ++ Comando ++ ++ ++ ++ Terminate the running script ++ Interrompe o script em execução ++ ++ ++ ++ Maximum number of lines held in script log ++ Quantidade máxima de linhas no registro do script ++ ++ ++ ++ Limit ++ Limite ++ ++ ++ ++ No limit ++ Sem limite ++ ++ ++ ++ Load ++ Carregar ++ ++ ++ ++ Save ++ Salvar ++ ++ ++ ++ Save as... ++ Salvar como... ++ ++ ++ ++ Clone ++ Clonar ++ ++ ++ ++ Copy log to clipboard ++ Copiar o registro para a área de transferência ++ ++ ++ ++ Running ++ Executando ++ ++ ++ ++ ++ Choose script file ++ Escolha o script ++ ++ ++ ++ ++ All files (*) ++ Todos os arquivos (*) ++ ++ ++ ++ ++ Script files (*.scr) ++ Arquivos script (*.scr) ++ ++ ++ ++ Failed loading script '%1' ++ Houve uma falha ao carregar o script '%1' ++ ++ ++ ++ ++ Noname-%1 ++ Semnome-%1 ++ ++ ++ ++ Qt CHDMAN GUI script file -- please do not edit manually ++ Arquivo de script do Qt CHDMAN GUI -- não faça a edição manual ++ ++ ++ ++ Script '%1' saved ++ O script '%1' foi salvo ++ ++ ++ ++ Failed saving script '%1' ++ Houve uma falha ao salvar o script '%1' ++ ++ ++ +diff --git a/src/tools/qchdman/translations/qchdman_ro.ts b/src/tools/qchdman/translations/qchdman_ro.ts +index 1228643c1..c97b57140 100644 +--- a/src/tools/qchdman/translations/qchdman_ro.ts ++++ b/src/tools/qchdman/translations/qchdman_ro.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + + + +- ++ + Choose project file + + + +- ++ + Project files (*.prj) + + + +- ++ + Choose script file + + + +- ++ + Script files (*.scr) + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + + + +- ++ + Project '%1' doesn't exist + + + +- ++ + Script '%1' doesn't exist + + + +- +- ++ ++ + Confirm + + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -518,7 +518,7 @@ Proceed? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -527,7 +527,7 @@ Proceed? + + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -569,105 +569,110 @@ Proceed? + + + +- ++ + Style + + + +- ++ + Font + + + +- ++ + Application font + + + +- +- +- ++ ++ ++ + Size + + + +- ++ + Application font size + + + +- +- ++ ++ + Log font + + + +- ++ + Log font size + + + +- ++ + Maximize new project or script windows + + + +- ++ + Maximize windows + + + +- ++ + Display project help texts + + + +- ++ + <b>Paths to program binaries</b> + + + +- ++ + Non-CHD input + + + +- ++ + <b>Preferred folders for input &amp; output files</b> + + + +- ++ + CHD output + + + +- ++ + Non-CHD output + + + +- ++ + Preferred folder to use for non-CHD output files + + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + + + +- ++ + Preferred folder to search for non-CHD input files + + + +- ++ + Preferred folder to search for CHD input files + + + +- ++ + Select the GUI style + + +@@ -713,72 +718,72 @@ Proceed? + + + +- Romanian (ro) ++ Brazilian Portuguese (pt_BR) + + + + +- Swedish (sv) ++ Romanian (ro) + + + + +- English (us) ++ Swedish (sv) + + + +- ++ + Make sure project help texts are shown + + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + + + +- ++ + Use native file dialogs + + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + + + +- ++ + Log channel names + + + +- +- ++ ++ + Editor font + + + +- ++ + Editor font size + + + +- ++ + Paths + + + +- ++ + CHD input + + + +- ++ + CHDMAN binary + + + +- ++ + Path to the CHDMAN binary + + +@@ -1803,71 +1808,99 @@ Remove meta-data from a CHD. + + + ++ ++ + + Info + + + ++ ++ + + Verify + + + ++ ++ + + Copy + + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/tools/qchdman/translations/qchdman_sv.qm b/src/tools/qchdman/translations/qchdman_sv.qm +index 90861c477651221234c23db197517817b47c0bf5..608e3741e91cfe6d0bc8a66830de8729ef856c47 100644 +GIT binary patch +delta 1248 +zcmX9;YfzL`7=Av!%YM6jy9?XOrRBcJ3Zj4t0xKf7T{luw5e6lT&=iqqgi*QJ>L`si +zg2}eoMRE#*0dEz$42IH>R3w5rz{D_yLX47`B{ELNSg-T_dgh$>J@0wm=Y7s;tY>Z> +zXWrL)0^m0Qj77$PqNB6J?1rb{8q0x*XW;rdK)V9mP!?d=1@7P3Kx~|hmKN|_KdrZe +z4^RT$Q{ZFEfVeXL>(7m0NPK;q`34@|id)_+H*LRO&h39-=ip(nEk2&~1Ju^O2F +z3&Up&16~zO`1Nk;@jR2}N&tfPFxHK<|DqSOy5S^UlE;+pngr$?Va{dKzPZ6s%y`>v +zZqp@n6|2?Xs&o)F|kwS +zaQh?fkeH(~rtg%|>f!Krv)WDEn9)g1+ITa&4@lX`=iVY(;l2EaH#Si@FaG#kYR>$G +zZ#sCM#Hr`o%+K>oeD4uza_Khyk#n5r83m6z7Fbdt1eh;Sex4AdAUZ04Az3qv>f{M; +zlq~`h)(HitDZXI0Q0OyA@o-)!((9<;xZ{Cap#7L|C*DD6PZc_47myA`=BMO{#cwOJ +z9aW_9l%jZ;%IflDH2cVCJ*8+lT}LVuDOy~lR%)~2@^9(D+y#n((F|bGw1}w&QgcES +z+dd$(){CC5bu@*G;_{p(VBs8bWmg*TQqpVUDx;0Yv{)=DpkYTC#l1803ERal{;mbY +z8u4;$I9c_!*j3sLg!+m<7IYAyVDTE;O4jrhA2#nNGyUusWUVOy%I;UZ$!F~{T30H& +zd!Es$4az>hF{0O`95fN#$ZwQG2T0|}IOW59YS-|!a@sjb7PLBE<-F}ls)L`Ag_3_) +z9XfTFEMro29L^#!jH;U@xqzurb>Bj#RHHKbbjuiaUq;L8?n5l)`Bk~!&a{&IUG5Vj +zWi&gz`y)Pw#BP(gLW+m5l3??t9y%p$${||sm4eRx3fMh*r8U`SX~@^4f~%xj>?cx1 +zz8-M@PpXb;r@ZBm+ +zpVr1e`qR|Y8^=I=o+HN0=eTOvuV92SdqmGV3(=$DQZC?|I*Ip7WgN-fKsg +zwpOOu*GB~S7XZd8V{q@Gi1|)~6nEKS(|HFqxhtz&OO%Hq!oFKPK<^$3R*K?SM +zRWAjSjtM1Q6n|<6+|D{?;|MdKH}>QY&LtasKBla^4=r^_v!QR=SA$$Eo~c +zQS5yiK&$BEd5+o^#O%U$U`e(3On)Y@YUN3BO?VDqs2A-eH0)@*`1<2Tl!zBU`m+fT +z4~pj#qR5)DV!z`AVA?EREa@Xcq2gt>o2(fqPM@d;!u?#MtSx=3a`0JyQiGS#_P%m( +z=n36wS6(qpQr7#*(MX~j`$Rdmk5rDWQ%)CCyFvdbXWe(mf-cvKoWHYCwf{r1P}(w8 +zf005 +zG`pA8GkhV5%}QK3#lzM}LQWv{a6!_gH`01oGM@esaC#3*YYR@(Gys*v8Tp|~F}eRc0K;AN6-^ph!!i>1lJC?Z-X{g&be0=G!B +zr#6$v^E5t=N96H~8a+tt_;HQz8X~Z)S(CM%?rGN%a&T?u^?5y-S3-(NnVp)Nj0=E; +z(Hxu@r(Z>Y#*;@SLr-a@&NYy)jM~tV9J2jUtw~u!A8)sIg>xMlqD-6q<`SAqqt+eE +z0jZz6F7t80Wx6C4?dtaEifhjj(cQYo?X(VJ%7N_K?zzHiLGg28K^4ld85M9~8;W7X +j0_>poDEjLG0zHzYs;r{ivBkJxhr`tzVd!>;o{Rkt*HKoz + +diff --git a/src/tools/qchdman/translations/qchdman_sv.ts b/src/tools/qchdman/translations/qchdman_sv.ts +index 64054d57d..50a379e98 100644 +--- a/src/tools/qchdman/translations/qchdman_sv.ts ++++ b/src/tools/qchdman/translations/qchdman_sv.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + avhu (A/V Huffman) + + +- ++ + cdfl (CD FLAC) + cdfl (CD FLAC) + + +- ++ + cdlz (CD LZMA) + cdlz (CD LZMA) + + +- ++ + cdzl (CD Deflate) + cdzl (CD Deflate) + + +- ++ + flac (FLAC) + flac (FLAC) + + +- ++ + huff (Huffman) + huff (Huffman) + + +- ++ + lzma (LZMA) + lzma (LZMA) + + +- ++ + zlib (Deflate) + zlib (Deflate) + + +- +- ++ ++ + All files (*) + Alla filer (*) + + +- ++ + Choose project file + + + +- ++ + Project files (*.prj) + + + +- ++ + Choose script file + + + +- ++ + Script files (*.scr) + + + +- +- ++ ++ + KB + KB + + +- +- ++ ++ + MB + MB + + +- +- ++ ++ + GB + GB + + +- ++ + TB + TB + + +- ++ + Running scripts / projects: %1 / %2 + + + +- ++ + Project '%1' doesn't exist + Projektet "%1" finns inte + + +- ++ + Script '%1' doesn't exist + + + +- +- ++ ++ + Confirm + Bekräfta + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -517,7 +517,7 @@ Proceed? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -530,7 +530,7 @@ Stängning av dess fönster kommer att döda den externa processen! + Fortsätta? + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -612,125 +612,125 @@ Fortsätta? + + + +- Romanian (ro) +- Rumänska (ro) ++ Brazilian Portuguese (pt_BR) ++ + + + +- Swedish (sv) +- Svenska (sv) ++ Romanian (ro) ++ Rumänska (ro) + + + +- English (us) +- Engelska (us) ++ Swedish (sv) ++ Svenska (sv) + + +- ++ + Style + Stil + + +- ++ + Select the GUI style + Välj stil för gränssnitt + + +- ++ + Font + Typsnitt + + +- ++ + Application font + Programtypsnitt + + +- +- +- ++ ++ ++ + Size + Storlek + + +- ++ + Application font size + Storlek för programtypsnitt + + +- +- ++ ++ + Log font + Loggtypsnitt + + +- ++ + Log font size + Storlek för loggtypsnitt + + +- ++ + Maximize new project or script windows + + + +- ++ + Maximize windows + + + +- ++ + Make sure project help texts are shown + Försäkra dig om att projektets hjälptexter visas + + +- ++ + Display project help texts + Visa projektets hjälptexter + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + Använd plattformens inbyggda fildialoger eller Qt:s inbyggda + + +- ++ + Use native file dialogs + Använd inbyggda fildialoger + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + + + +- ++ + Log channel names + + + +- +- ++ ++ + Editor font + + + +- ++ + Editor font size + + + +- ++ + Paths + Sökvägar + + +- ++ + CHD input + + + +- ++ + CHDMAN binary + CHDMAN-binärfil + +@@ -740,52 +740,57 @@ Fortsätta? + + + +- ++ + Path to the CHDMAN binary + Sökväg till CHDMAN-binärfil + + +- ++ + <b>Paths to program binaries</b> + + + +- ++ + Non-CHD input + + + +- ++ + <b>Preferred folders for input &amp; output files</b> + + + +- ++ + CHD output + + + +- ++ + Non-CHD output + + + +- ++ + Preferred folder to use for non-CHD output files + + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + + + +- ++ + Preferred folder to search for non-CHD input files + + + +- ++ + Preferred folder to search for CHD input files + + +@@ -1820,71 +1825,99 @@ Remove meta-data from a CHD. + Kopiera kommando till urklipp + + ++ ++ + + Info + Info + + ++ ++ + + Verify + Verifiera + + ++ ++ + + Copy + Kopiera + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/tools/qchdman/translations/qchdman_us.qm b/src/tools/qchdman/translations/qchdman_us.qm +index 3d640c0e529042190aca5d2e62c525ae046175ae..3d1f72d2af1c52d279441ebfd7c99972340e9f13 100644 +GIT binary patch +delta 2920 +zcmX9=3sjWV7Tz=e`=5VicqyWQ2!dglm4Yucke7fwL>L5l$Qx81&cHP^8Pm}4Dm_M2 +zZf2IRz(=MDrJ_ZWk_uRem!%LQt|Bu^VYNuJ``yO1T;Dop&e`YN-~RUgxxP`o|8@1- +z4z@N#+;Sp1Z$+1#?|4oz=Ma0ioM>@9vF$98Je}CCc%tz#u}?gS61Q5hWIb_gJJB*P +z;#?&nhdadimJ%&bvSP_M#4R2s()>l-o)#iqg%vZ#TG4ocxDPoZw?5)dBCcH<@!LNk +zGUo-8U|{_ +zuw9ps715%#bBMkF85b?DXnU93*J18b58~Ys;8*v5qkJD0?B{P-mCqrO3 +z0*8`e+hZb^CuI1w3YnQ{S@S-k*_D+1C5TM&r@Wp7qMRpGl=~}@`*A9jE)$s!(BVIz +zjLlK{^hPz&tN=RQwj1jubkXHAqBWGb$ +zceD_xWK~cDGH?r4g{5^9IUZ9jIdBlls8vgIu}*7OnFM6A#!qEhJBV}-s@8i-M5$@2 +z4Q<09zCyL9wU)@RQ1yuc=QCW{V{MRAbl11vc`FJoPTy3&LV58Pjrk-ftr5-8ngzUYH +zXsjigkjLl)K+k0wGwxbAQSw?Q;NBsksAeX<+84UDTd_2l$u{ZXI2Dt7_6$*kz!Vuk +zC)SQxcMY$ndNJFz(3d;IG)zNbR~}|At-Mc^Tftl(=_T^FVQ!Qb6Itw;aS=&&%untT +z9(%|PA8P_to>dh&5b4jbjMrpb4q@%T2DvPEc5;0ik#jmbrEr8O?sqmNtDGqFDw}&2 +z#R$)|lra-uieWcTy-Sp`(Tb~Lt+*zgts3$sir>io+Z(AF-e>oOql+AWu(U9<%pL5N +zu9?s`ioNw4>S!>scalLkV~Fkds6nA4*}<)c;6y(wMqcBXu0*1eK#q+`fP)J;HsKub +zJ8mBHI#EFi7d;)uD&e`Mv2{eD>0DBeFN8YEE&mz@8?%DT^h5kancH;(`Zs8gtLDx~kHO@oe{43nGx4NOEfqPVQ58|xh9ycaIwBy{f +z8Dk)t4^KnOh@6~w?Un)H0p8|av|?rjZ___Y6tb7MeIGJ}eaSmTfFAzUgalY`6TfA+8|6-k +z;;VCDS1 +z43^iR&we4X@fpz!A0huL^mKepDC|ZWdd7+w{#G>J6ZQ;r!&Iw;5AHxGO{Y-j58H$a +zLjAFKL3c!`Z@7fQtaK4B37Fa}q`Kmwm(Z7l0LEP5Zjn7& +z=(2G4K@BE?v(Vq%iQnr*dVBya@q;Kf?nJ&xqOCvDv-K5i8<2lAFWMC&Uh;f#QQ{H! +zvqOyV8i7;hi;?*iD9nq37<~#G6Kcii<{ZhZOz2yYOpBTo0ODK`{EJ`1y&0L^0mt +z1z$L0*&(snREGrTiY-ouFx%3c#LHRe6y1m7w=YAo#m|e^nbYVMFY)04WNc~^hw3(C +zxYmk~?!(japg5X{Kw(khlkQ8HQN@z(|LbH{vhjdZoR3Ol*6$;ld_{U?E)-pTObX~M +zLx~EcfTulh7%zpMXhjRmkkYDLzK2z+q}3V2_V(ts5hmqH=t8gv^10$KE04@y4*|S-Ey*`$+JFXK6VOCr +z+~x<#T$L5as;n6Lq7{oLX(k)+ps-&vHz^1X_*7GJ +zH5dhn&}n#T3va7gS9O&5cQ$6wU+ +zMM66EtfpW157FEp&HdY@7*<}IUte=VhO;$~I84p-&6+>&Erg@|6}ABPCdmpPj^DLs +z6@6e8)_IEC31qH}Dj~CNG2AvQaRyj<T2K7uCJD!a>Z&VG|})>Mm62`OiP +zdx{cibL7r}I*P2YoGx?OZeBnh{bG^2*Y5rUS7}JAUMD1hjZ>#i|I;Jr*r1!#9u7xpbd#lWu!*VA`7Hvi$QYf!c`2sd*Sf%M +zGa!7IZebI2H0g9U#UWaNeq6^Oe3`F*`Cr)28Lyus<2AWlKmV66u&&Yv +z2Z845|LQX~VC`nBUt554aS8f;J$7K>rhhP}6;oU#f)shIg2|3pkw;_;sg +z%sf3qd1u#(?q0OZ^Pv4Hq18@_aR5*UP0U$#I}o_+MDy27CmMN_7Wg4v?o?m}5xl{|rRjAJOuz7@}ooC@14*B9BxmkggJ$;<+ZA)46KuiRb~N|1I8Vp@zx0P)!tC&*T`hh$5~s +zZ+?aBOFEftTIkAEGc}XY&=m1Zik8Dt}+iiphx^6X5i#S(63`vISxenYL@XDLzMM9JNyd}PW_G@bD|Z59oTW% +zgG7oDEkwu%-RuA&M{i&Uln-jAZwO +z;zl{9T3eW@mMHdG`xIy$#(wt;dTJcU-i}8RDM#2I&k8i1*uE`C;YvRn8a8rFdn{b} +zE5}B}z|9^U8&e0|!uc~B!P$-r_lC)G>$s>zl|=I#I8&D|(Sl?y;R~2;L^7A^hxo?J +z+^(BwnPqepx9`OxNVtwW;vRqpj&aA|J_oTjbG7~mm|4Vq^==1L)o_n1?m=ZQ?n$kQ +zXmKj{m(K`@HIb+OIHFPecRWUpjDO9+9!f0a^MFapW^0y8~tD85<@)vSI!nVNWm8rnw6TZbK){ +zEunHI>=IlroH)4ybWaE;Y8ugytgnSjy>l^OON3kh3WiV>!nf}_VSJ1hx)NP+&`Y>u +zLV*0y!rh$V&|{r&_hAL5g0s-ma0|bm5b4Qb-142GSi2MTnnb&qD9_GUw5vh=VRfQ? +zF5;OUi}Pb~E22xp1zv;D?XhUcT#tr$*Nfq2u`xPa3~va6KF`Dm&rqW0g2d?epp5+^ +zF*mIVmTD8%$4*56N!;-CB@mu0mK#nH&0Q>h@ab8ioLKSDqjDnVy!h!S>9F!SAP9zU +z6+b<71lTQJ@`W?v;>8AYCDHT!Vw2NR%(ui=@oE}wi0(u2%gK<;a7S!ms&GfV#GekM +zV)G`kzj6}}go}^w!^?7?I24OOA!_lDjz+X#ilqB{Z8|Rv^Mq5Jlcf=B_Y;jNl3tww +zMOUUsvu~|Ni?XEIPrInhd0S&eagTB@H5T1%3pi>ez$ubq`HEfFw&4@ymo9PuJL +zWW#)e)YJ^e1TB@WtU&bHN2M>h5a{J7wL14e$Iqm1$Dxd{SyFp3bP8jn{uBu}t4|uN +z=z~LCI%U<8Gf3DjkMKsLhKI`&>N0T!wQ|tcXb68%4lC?M!;Z-5(^$-cL^-{!g-8go +z;fmYxTh7zb*g*O1{bj(Tn!-yH`B%9>|xsQz7=Pa{abwJXbD% +z4$E37V!zz#2c5FhDpVv8o`A?e19H!;cX`0{f1;SA?6*dd!+%GG9 +zD1O&oQ1o+3;Us6p{S+!!hLqrGb{KBclt?42ykfIrYW&;klaz$9JE6b>B{|Fj$>(iT +zQY*o9LsD7y>s-0-)Q3+BB@ +zP_10}G2znA;&2_|F`%@%7d2zD&X-I +z%HSu;$^;4$>9(LH}76!{#>bz`JL(Dl*z%?CXL +ztD9+w!qj_1H)pF48t{%T@FMig|3Vj1j47++>r#RtxVc`pYSMlTwP;;YBnp^+O;<6I +zMI+pFA9aIxcBi#W<83L@s}3MdMx9=`B;ix7RPUgRM6^NusJ1?wa?wwI9sB7w^wVWz +zlMD5;emoDG1nB1mf#%9GeM%A5ZddecvhZA_tl!^d4;JqFhtr!OZj}D%ahx0V?<}H% +rG0Zdk;oBHD4gcJn)GB}Fm66ut9{Z|FJTIzMiuHAmSE>TNlH&gddZ;WQ + +diff --git a/src/tools/qchdman/translations/qchdman_us.ts b/src/tools/qchdman/translations/qchdman_us.ts +index b2ee81e10..d37ceddb8 100644 +--- a/src/tools/qchdman/translations/qchdman_us.ts ++++ b/src/tools/qchdman/translations/qchdman_us.ts +@@ -1,6 +1,6 @@ + + +- ++ + + AboutDialog + +@@ -397,117 +397,117 @@ + + + +- ++ + avhu (A/V Huffman) + + + +- ++ + cdfl (CD FLAC) + + + +- ++ + cdlz (CD LZMA) + + + +- ++ + cdzl (CD Deflate) + + + +- ++ + flac (FLAC) + + + +- ++ + huff (Huffman) + + + +- ++ + lzma (LZMA) + + + +- ++ + zlib (Deflate) + + + +- +- ++ ++ + All files (*) + + + +- ++ + Choose project file + + + +- ++ + Project files (*.prj) + + + +- ++ + Choose script file + + + +- ++ + Script files (*.scr) + + + +- +- ++ ++ + KB + + + +- +- ++ ++ + MB + + + +- +- ++ ++ + GB + + + +- ++ + TB + + + +- ++ + Running scripts / projects: %1 / %2 + + + +- ++ + Project '%1' doesn't exist + + + +- ++ + Script '%1' doesn't exist + + + +- +- ++ ++ + Confirm + + + +- ++ + There are %n script(s) currently running. + + Proceed? +@@ -521,7 +521,7 @@ Proceed? + + + +- ++ + There is 1 project currently running. + + Closing its window will kill the external process! +@@ -530,7 +530,7 @@ Proceed? + + + +- ++ + There are %1 projects currently running. + + Closing their windows will kill the external processes! +@@ -572,105 +572,110 @@ Proceed? + + + +- ++ + Style + + + +- ++ + Font + + + +- ++ + Application font + + + +- +- +- ++ ++ ++ + Size + + + +- ++ + Application font size + + + +- +- ++ ++ + Log font + + + +- ++ + Log font size + + + +- ++ + Maximize new project or script windows + + + +- ++ + Maximize windows + + + +- ++ + Display project help texts + + + +- ++ + <b>Paths to program binaries</b> + + + +- ++ + Non-CHD input + + + +- ++ + <b>Preferred folders for input &amp; output files</b> + + + +- ++ + CHD output + + + +- ++ + Non-CHD output + + + +- ++ + Preferred folder to use for non-CHD output files + + + +- ++ ++ American English (us) ++ ++ ++ ++ + Preferred folder to use for CHD output files + + + +- ++ + Preferred folder to search for non-CHD input files + + + +- ++ + Preferred folder to search for CHD input files + + + +- ++ + Select the GUI style + + +@@ -716,72 +721,72 @@ Proceed? + + + +- Romanian (ro) ++ Brazilian Portuguese (pt_BR) + + + + +- Swedish (sv) ++ Romanian (ro) + + + + +- English (us) ++ Swedish (sv) + + + +- ++ + Make sure project help texts are shown + + + +- ++ + Use the platform's native file dialogs or the Qt built-in ones + + + +- ++ + Use native file dialogs + + + +- ++ + Include the names of the I/O channels (stdout / stderr) when logging CHDMAN output + + + +- ++ + Log channel names + + + +- +- ++ ++ + Editor font + + + +- ++ + Editor font size + + + +- ++ + Paths + + + +- ++ + CHD input + + + +- ++ + CHDMAN binary + + + +- ++ + Path to the CHDMAN binary + + +@@ -1806,71 +1811,99 @@ Remove meta-data from a CHD. + + + ++ ++ + + Info + + + ++ ++ + + Verify + + + ++ ++ + + Copy + + + ++ ++ + + CreateRaw + + + ++ ++ + + CreateHD + + + ++ ++ + + CreateCD + + + ++ ++ + + CreateLD + + + ++ ++ + + ExtractRaw + + + ++ ++ + + ExtractHD + + + ++ ++ + + ExtractCD + + + ++ ++ + + ExtractLD + + + ++ ++ + + DumpMeta + + + ++ ++ + + AddMeta + + + ++ ++ + + DelMeta + +diff --git a/src/welcome.cpp b/src/welcome.cpp +index 1b4493b4f..e768f5c9d 100644 +--- a/src/welcome.cpp ++++ b/src/welcome.cpp +@@ -25,7 +25,7 @@ extern QTranslator *qmc2Translator; + Welcome::Welcome(QWidget *parent) : + QDialog(parent) + { +- availableLanguages << "de" << "es" << "el" << "fr" << "it" << "pl" << "pt" << "ro" << "sv" << "us"; ++ availableLanguages << "de" << "es" << "el" << "fr" << "it" << "pl" << "pt" << "pt_BR" << "ro" << "sv" << "us"; + checkOkay = false; + hide(); + if ( !checkConfig() ) { +@@ -243,7 +243,14 @@ void Welcome::setupLanguage() + lang = "sv"; + break; + default: +- lang = "us"; ++ switch ( QLocale::system().country() ) { ++ case QLocale::Brazil: ++ lang = "pt_BR"; ++ break; ++ default: ++ lang = "us"; ++ break; ++ } + break; + } + startupConfig->setValue(QMC2_FRONTEND_PREFIX + "GUI/Language", lang); +diff --git a/ui/options.ui b/ui/options.ui +index db8888913..bb152c381 100644 +--- a/ui/options.ui ++++ b/ui/options.ui +@@ -300,52 +300,57 @@ + + + +- DE (German) ++ de (German) + + + + +- ES (Spanish) ++ es (Spanish) + + + + +- EL (Greek) ++ el (Greek) + + + + +- FR (French) ++ fr (French) + + + + +- IT (Italian) ++ it (Italian) + + + + +- PL (Polish) ++ pl (Polish) + + + + +- PT (Portuguese) ++ pt (Portuguese) + + + + +- RO (Romanian) ++ pt_BR (Brazilian Portuguese) + + + + +- SV (Swedish) ++ ro (Romanian) + + + + +- US (English) ++ sv (Swedish) ++ ++ ++ ++ ++ us (American English) + + + +-- +2.43.0 + diff --git a/41.patch b/41.patch new file mode 100644 index 0000000..49b7c2d --- /dev/null +++ b/41.patch @@ -0,0 +1,29339 @@ +From 96cfca3fecde5462d5d9105ba96cac68fbe22052 Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Wed, 21 Feb 2024 22:00:11 +0100 +Subject: [PATCH 1/4] imp: updated bundled zlib to 1.3.1 + +--- + src/zlib/README.zlib | 19 +- + src/zlib/adler32.c | 32 +- + src/zlib/compress.c | 21 +- + src/zlib/crc32.c | 255 +++++--------- + src/zlib/deflate.c | 796 ++++++++++++++++++++----------------------- + src/zlib/deflate.h | 55 ++- + src/zlib/gzclose.c | 4 +- + src/zlib/gzguts.h | 31 +- + src/zlib/gzlib.c | 113 ++---- + src/zlib/gzread.c | 96 ++---- + src/zlib/gzwrite.c | 84 ++--- + src/zlib/infback.c | 47 +-- + src/zlib/inffast.c | 5 +- + src/zlib/inffast.h | 2 +- + src/zlib/inflate.c | 138 ++------ + src/zlib/inftrees.c | 17 +- + src/zlib/inftrees.h | 12 +- + src/zlib/trees.c | 645 ++++++++++++++++------------------- + src/zlib/uncompr.c | 16 +- + src/zlib/zconf.h | 37 +- + src/zlib/zlib.h | 401 +++++++++++----------- + src/zlib/zutil.c | 62 +--- + src/zlib/zutil.h | 46 +-- + 23 files changed, 1219 insertions(+), 1715 deletions(-) + +diff --git a/src/zlib/README.zlib b/src/zlib/README.zlib +index 024b79d3d..c5f917540 100644 +--- a/src/zlib/README.zlib ++++ b/src/zlib/README.zlib +@@ -1,6 +1,6 @@ + ZLIB DATA COMPRESSION LIBRARY + +-zlib 1.2.12 is a general purpose data compression library. All the code is ++zlib 1.3.1 is a general purpose data compression library. All the code is + thread safe. The data format used by the zlib library is described by RFCs + (Request for Comments) 1950 to 1952 in the files + http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and +@@ -29,18 +29,17 @@ PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. + + Mark Nelson wrote an article about zlib for the Jan. 1997 + issue of Dr. Dobb's Journal; a copy of the article is available at +-http://marknelson.us/1997/01/01/zlib-engine/ . ++https://marknelson.us/posts/1997/01/01/zlib-engine.html . + +-The changes made in version 1.2.12 are documented in the file ChangeLog. ++The changes made in version 1.3.1 are documented in the file ChangeLog. + + Unsupported third party contributions are provided in directory contrib/ . + +-zlib is available in Java using the java.util.zip package, documented at +-http://java.sun.com/developer/technicalArticles/Programming/compression/ . ++zlib is available in Java using the java.util.zip package. Follow the API ++Documentation link at: https://docs.oracle.com/search/?q=java.util.zip . + +-A Perl interface to zlib written by Paul Marquess is available +-at CPAN (Comprehensive Perl Archive Network) sites, including +-http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . ++A Perl interface to zlib and bzip2 written by Paul Marquess ++can be found at https://github.com/pmqs/IO-Compress . + + A Python interface to zlib written by A.M. Kuchling is + available in Python 1.5 and later versions, see +@@ -64,7 +63,7 @@ Notes for some targets: + - zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +-- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is ++- On Digital Unix 4.0D (formerly OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + + - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with +@@ -84,7 +83,7 @@ Acknowledgments: + + Copyright notice: + +- (C) 1995-2022 Jean-loup Gailly and Mark Adler ++ (C) 1995-2024 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages +diff --git a/src/zlib/adler32.c b/src/zlib/adler32.c +index d0be4380a..04b81d29b 100644 +--- a/src/zlib/adler32.c ++++ b/src/zlib/adler32.c +@@ -7,8 +7,6 @@ + + #include "zutil.h" + +-local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); +- + #define BASE 65521U /* largest prime smaller than 65536 */ + #define NMAX 5552 + /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ +@@ -60,11 +58,7 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); + #endif + + /* ========================================================================= */ +-uLong ZEXPORT adler32_z(adler, buf, len) +- uLong adler; +- const Bytef *buf; +- z_size_t len; +-{ ++uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len) { + unsigned long sum2; + unsigned n; + +@@ -131,20 +125,12 @@ uLong ZEXPORT adler32_z(adler, buf, len) + } + + /* ========================================================================= */ +-uLong ZEXPORT adler32(adler, buf, len) +- uLong adler; +- const Bytef *buf; +- uInt len; +-{ ++uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len) { + return adler32_z(adler, buf, len); + } + + /* ========================================================================= */ +-local uLong adler32_combine_(adler1, adler2, len2) +- uLong adler1; +- uLong adler2; +- z_off64_t len2; +-{ ++local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2) { + unsigned long sum1; + unsigned long sum2; + unsigned rem; +@@ -169,18 +155,10 @@ local uLong adler32_combine_(adler1, adler2, len2) + } + + /* ========================================================================= */ +-uLong ZEXPORT adler32_combine(adler1, adler2, len2) +- uLong adler1; +- uLong adler2; +- z_off_t len2; +-{ ++uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, z_off_t len2) { + return adler32_combine_(adler1, adler2, len2); + } + +-uLong ZEXPORT adler32_combine64(adler1, adler2, len2) +- uLong adler1; +- uLong adler2; +- z_off64_t len2; +-{ ++uLong ZEXPORT adler32_combine64(uLong adler1, uLong adler2, z_off64_t len2) { + return adler32_combine_(adler1, adler2, len2); + } +diff --git a/src/zlib/compress.c b/src/zlib/compress.c +index e2db404ab..f43bacf7a 100644 +--- a/src/zlib/compress.c ++++ b/src/zlib/compress.c +@@ -19,13 +19,8 @@ + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. + */ +-int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) +- Bytef *dest; +- uLongf *destLen; +- const Bytef *source; +- uLong sourceLen; +- int level; +-{ ++int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, ++ uLong sourceLen, int level) { + z_stream stream; + int err; + const uInt max = (uInt)-1; +@@ -65,12 +60,8 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) + + /* =========================================================================== + */ +-int ZEXPORT compress (dest, destLen, source, sourceLen) +- Bytef *dest; +- uLongf *destLen; +- const Bytef *source; +- uLong sourceLen; +-{ ++int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, ++ uLong sourceLen) { + return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); + } + +@@ -78,9 +69,7 @@ int ZEXPORT compress (dest, destLen, source, sourceLen) + If the default memLevel or windowBits for deflateInit() is changed, then + this function needs to be updated. + */ +-uLong ZEXPORT compressBound (sourceLen) +- uLong sourceLen; +-{ ++uLong ZEXPORT compressBound(uLong sourceLen) { + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13; + } +diff --git a/src/zlib/crc32.c b/src/zlib/crc32.c +index a1bdce5c2..6c38f5c04 100644 +--- a/src/zlib/crc32.c ++++ b/src/zlib/crc32.c +@@ -98,10 +98,6 @@ + # endif + #endif + +-/* Local functions. */ +-local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); +-local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); +- + /* If available, use the ARM processor CRC32 instruction. */ + #if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 + # define ARMCRC32 +@@ -114,9 +110,7 @@ local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); + instruction, if one is available. This assumes that word_t is either 32 bits + or 64 bits. + */ +-local z_word_t byte_swap(word) +- z_word_t word; +-{ ++local z_word_t byte_swap(z_word_t word) { + # if W == 8 + return + (word & 0xff00000000000000) >> 56 | +@@ -137,24 +131,77 @@ local z_word_t byte_swap(word) + } + #endif + ++#ifdef DYNAMIC_CRC_TABLE ++/* ========================================================================= ++ * Table of powers of x for combining CRC-32s, filled in by make_crc_table() ++ * below. ++ */ ++ local z_crc_t FAR x2n_table[32]; ++#else ++/* ========================================================================= ++ * Tables for byte-wise and braided CRC-32 calculations, and a table of powers ++ * of x for combining CRC-32s, all made by make_crc_table(). ++ */ ++# include "crc32.h" ++#endif ++ + /* CRC polynomial. */ + #define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ + +-#ifdef DYNAMIC_CRC_TABLE ++/* ++ Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, ++ reflected. For speed, this requires that a not be zero. ++ */ ++local z_crc_t multmodp(z_crc_t a, z_crc_t b) { ++ z_crc_t m, p; ++ ++ m = (z_crc_t)1 << 31; ++ p = 0; ++ for (;;) { ++ if (a & m) { ++ p ^= b; ++ if ((a & (m - 1)) == 0) ++ break; ++ } ++ m >>= 1; ++ b = b & 1 ? (b >> 1) ^ POLY : b >> 1; ++ } ++ return p; ++} ++ ++/* ++ Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been ++ initialized. ++ */ ++local z_crc_t x2nmodp(z_off64_t n, unsigned k) { ++ z_crc_t p; ++ ++ p = (z_crc_t)1 << 31; /* x^0 == 1 */ ++ while (n) { ++ if (n & 1) ++ p = multmodp(x2n_table[k & 31], p); ++ n >>= 1; ++ k++; ++ } ++ return p; ++} + ++#ifdef DYNAMIC_CRC_TABLE ++/* ========================================================================= ++ * Build the tables for byte-wise and braided CRC-32 calculations, and a table ++ * of powers of x for combining CRC-32s. ++ */ + local z_crc_t FAR crc_table[256]; +-local z_crc_t FAR x2n_table[32]; +-local void make_crc_table OF((void)); + #ifdef W + local z_word_t FAR crc_big_table[256]; + local z_crc_t FAR crc_braid_table[W][256]; + local z_word_t FAR crc_braid_big_table[W][256]; +- local void braid OF((z_crc_t [][256], z_word_t [][256], int, int)); ++ local void braid(z_crc_t [][256], z_word_t [][256], int, int); + #endif + #ifdef MAKECRCH +- local void write_table OF((FILE *, const z_crc_t FAR *, int)); +- local void write_table32hi OF((FILE *, const z_word_t FAR *, int)); +- local void write_table64 OF((FILE *, const z_word_t FAR *, int)); ++ local void write_table(FILE *, const z_crc_t FAR *, int); ++ local void write_table32hi(FILE *, const z_word_t FAR *, int); ++ local void write_table64(FILE *, const z_word_t FAR *, int); + #endif /* MAKECRCH */ + + /* +@@ -167,7 +214,6 @@ local void make_crc_table OF((void)); + + /* Definition of once functionality. */ + typedef struct once_s once_t; +-local void once OF((once_t *, void (*)(void))); + + /* Check for the availability of atomics. */ + #if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ +@@ -187,10 +233,7 @@ struct once_s { + invoke once() at the same time. The state must be a once_t initialized with + ONCE_INIT. + */ +-local void once(state, init) +- once_t *state; +- void (*init)(void); +-{ ++local void once(once_t *state, void (*init)(void)) { + if (!atomic_load(&state->done)) { + if (atomic_flag_test_and_set(&state->begun)) + while (!atomic_load(&state->done)) +@@ -213,10 +256,7 @@ struct once_s { + + /* Test and set. Alas, not atomic, but tries to minimize the period of + vulnerability. */ +-local int test_and_set OF((int volatile *)); +-local int test_and_set(flag) +- int volatile *flag; +-{ ++local int test_and_set(int volatile *flag) { + int was; + + was = *flag; +@@ -225,10 +265,7 @@ local int test_and_set(flag) + } + + /* Run the provided init() function once. This is not thread-safe. */ +-local void once(state, init) +- once_t *state; +- void (*init)(void); +-{ ++local void once(once_t *state, void (*init)(void)) { + if (!state->done) { + if (test_and_set(&state->begun)) + while (!state->done) +@@ -270,8 +307,7 @@ local once_t made = ONCE_INIT; + combinations of CRC register values and incoming bytes. + */ + +-local void make_crc_table() +-{ ++local void make_crc_table(void) { + unsigned i, j, n; + z_crc_t p; + +@@ -438,11 +474,7 @@ local void make_crc_table() + Write the 32-bit values in table[0..k-1] to out, five per line in + hexadecimal separated by commas. + */ +-local void write_table(out, table, k) +- FILE *out; +- const z_crc_t FAR *table; +- int k; +-{ ++local void write_table(FILE *out, const z_crc_t FAR *table, int k) { + int n; + + for (n = 0; n < k; n++) +@@ -455,11 +487,7 @@ local void write_table(out, table, k) + Write the high 32-bits of each value in table[0..k-1] to out, five per line + in hexadecimal separated by commas. + */ +-local void write_table32hi(out, table, k) +-FILE *out; +-const z_word_t FAR *table; +-int k; +-{ ++local void write_table32hi(FILE *out, const z_word_t FAR *table, int k) { + int n; + + for (n = 0; n < k; n++) +@@ -475,11 +503,7 @@ int k; + bits. If not, then the type cast and format string can be adjusted + accordingly. + */ +-local void write_table64(out, table, k) +- FILE *out; +- const z_word_t FAR *table; +- int k; +-{ ++local void write_table64(FILE *out, const z_word_t FAR *table, int k) { + int n; + + for (n = 0; n < k; n++) +@@ -489,8 +513,7 @@ local void write_table64(out, table, k) + } + + /* Actually do the deed. */ +-int main() +-{ ++int main(void) { + make_crc_table(); + return 0; + } +@@ -502,12 +525,7 @@ int main() + Generate the little and big-endian braid tables for the given n and z_word_t + size w. Each array must have room for w blocks of 256 elements. + */ +-local void braid(ltl, big, n, w) +- z_crc_t ltl[][256]; +- z_word_t big[][256]; +- int n; +- int w; +-{ ++local void braid(z_crc_t ltl[][256], z_word_t big[][256], int n, int w) { + int k; + z_crc_t i, p, q; + for (k = 0; k < w; k++) { +@@ -522,69 +540,13 @@ local void braid(ltl, big, n, w) + } + #endif + +-#else /* !DYNAMIC_CRC_TABLE */ +-/* ======================================================================== +- * Tables for byte-wise and braided CRC-32 calculations, and a table of powers +- * of x for combining CRC-32s, all made by make_crc_table(). +- */ +-#include "crc32.h" + #endif /* DYNAMIC_CRC_TABLE */ + +-/* ======================================================================== +- * Routines used for CRC calculation. Some are also required for the table +- * generation above. +- */ +- +-/* +- Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, +- reflected. For speed, this requires that a not be zero. +- */ +-local z_crc_t multmodp(a, b) +- z_crc_t a; +- z_crc_t b; +-{ +- z_crc_t m, p; +- +- m = (z_crc_t)1 << 31; +- p = 0; +- for (;;) { +- if (a & m) { +- p ^= b; +- if ((a & (m - 1)) == 0) +- break; +- } +- m >>= 1; +- b = b & 1 ? (b >> 1) ^ POLY : b >> 1; +- } +- return p; +-} +- +-/* +- Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been +- initialized. +- */ +-local z_crc_t x2nmodp(n, k) +- z_off64_t n; +- unsigned k; +-{ +- z_crc_t p; +- +- p = (z_crc_t)1 << 31; /* x^0 == 1 */ +- while (n) { +- if (n & 1) +- p = multmodp(x2n_table[k & 31], p); +- n >>= 1; +- k++; +- } +- return p; +-} +- + /* ========================================================================= + * This function can be used by asm versions of crc32(), and to force the + * generation of the CRC tables in a threaded application. + */ +-const z_crc_t FAR * ZEXPORT get_crc_table() +-{ ++const z_crc_t FAR * ZEXPORT get_crc_table(void) { + #ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); + #endif /* DYNAMIC_CRC_TABLE */ +@@ -610,11 +572,8 @@ const z_crc_t FAR * ZEXPORT get_crc_table() + #define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ + #define Z_BATCH_MIN 800 /* fewest words in a final batch */ + +-unsigned long ZEXPORT crc32_z(crc, buf, len) +- unsigned long crc; +- const unsigned char FAR *buf; +- z_size_t len; +-{ ++unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, ++ z_size_t len) { + z_crc_t val; + z_word_t crc1, crc2; + const z_word_t *word; +@@ -630,7 +589,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) + #endif /* DYNAMIC_CRC_TABLE */ + + /* Pre-condition the CRC */ +- crc ^= 0xffffffff; ++ crc = (~crc) & 0xffffffff; + + /* Compute the CRC up to a word boundary. */ + while (len && ((z_size_t)buf & 7) != 0) { +@@ -645,8 +604,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) + len &= 7; + + /* Do three interleaved CRCs to realize the throughput of one crc32x +- instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three +- CRCs are combined into a single CRC after each set of batches. */ ++ instruction per cycle. Each CRC is calculated on Z_BATCH words. The ++ three CRCs are combined into a single CRC after each set of batches. */ + while (num >= 3 * Z_BATCH) { + crc1 = 0; + crc2 = 0; +@@ -714,18 +673,14 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) + least-significant byte of the word as the first byte of data, without any pre + or post conditioning. This is used to combine the CRCs of each braid. + */ +-local z_crc_t crc_word(data) +- z_word_t data; +-{ ++local z_crc_t crc_word(z_word_t data) { + int k; + for (k = 0; k < W; k++) + data = (data >> 8) ^ crc_table[data & 0xff]; + return (z_crc_t)data; + } + +-local z_word_t crc_word_big(data) +- z_word_t data; +-{ ++local z_word_t crc_word_big(z_word_t data) { + int k; + for (k = 0; k < W; k++) + data = (data << 8) ^ +@@ -736,11 +691,8 @@ local z_word_t crc_word_big(data) + #endif + + /* ========================================================================= */ +-unsigned long ZEXPORT crc32_z(crc, buf, len) +- unsigned long crc; +- const unsigned char FAR *buf; +- z_size_t len; +-{ ++unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, ++ z_size_t len) { + /* Return initial CRC, if requested. */ + if (buf == Z_NULL) return 0; + +@@ -749,7 +701,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) + #endif /* DYNAMIC_CRC_TABLE */ + + /* Pre-condition the CRC */ +- crc ^= 0xffffffff; ++ crc = (~crc) & 0xffffffff; + + #ifdef W + +@@ -772,8 +724,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) + words = (z_word_t const *)buf; + + /* Do endian check at execution time instead of compile time, since ARM +- processors can change the endianess at execution time. If the +- compiler knows what the endianess will be, it can optimize out the ++ processors can change the endianness at execution time. If the ++ compiler knows what the endianness will be, it can optimize out the + check and the unused branch. */ + endian = 1; + if (*(unsigned char *)&endian) { +@@ -1060,39 +1012,26 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) + #endif + + /* ========================================================================= */ +-unsigned long ZEXPORT crc32(crc, buf, len) +- unsigned long crc; +- const unsigned char FAR *buf; +- uInt len; +-{ ++unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, ++ uInt len) { + return crc32_z(crc, buf, len); + } + + /* ========================================================================= */ +-uLong ZEXPORT crc32_combine64(crc1, crc2, len2) +- uLong crc1; +- uLong crc2; +- z_off64_t len2; +-{ ++uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { + #ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); + #endif /* DYNAMIC_CRC_TABLE */ +- return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; ++ return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff); + } + + /* ========================================================================= */ +-uLong ZEXPORT crc32_combine(crc1, crc2, len2) +- uLong crc1; +- uLong crc2; +- z_off_t len2; +-{ +- return crc32_combine64(crc1, crc2, len2); ++uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) { ++ return crc32_combine64(crc1, crc2, (z_off64_t)len2); + } + + /* ========================================================================= */ +-uLong ZEXPORT crc32_combine_gen64(len2) +- z_off64_t len2; +-{ ++uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { + #ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); + #endif /* DYNAMIC_CRC_TABLE */ +@@ -1100,17 +1039,11 @@ uLong ZEXPORT crc32_combine_gen64(len2) + } + + /* ========================================================================= */ +-uLong ZEXPORT crc32_combine_gen(len2) +- z_off_t len2; +-{ +- return crc32_combine_gen64(len2); ++uLong ZEXPORT crc32_combine_gen(z_off_t len2) { ++ return crc32_combine_gen64((z_off64_t)len2); + } + + /* ========================================================================= */ +-uLong crc32_combine_op(crc1, crc2, op) +- uLong crc1; +- uLong crc2; +- uLong op; +-{ +- return multmodp(op, crc1) ^ crc2; ++uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) { ++ return multmodp(op, crc1) ^ (crc2 & 0xffffffff); + } +diff --git a/src/zlib/deflate.c b/src/zlib/deflate.c +index 799fb93cc..012ea8148 100644 +--- a/src/zlib/deflate.c ++++ b/src/zlib/deflate.c +@@ -1,5 +1,5 @@ + /* deflate.c -- compress data using the deflation algorithm +- * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler ++ * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +@@ -52,7 +52,7 @@ + #include "deflate.h" + + const char deflate_copyright[] = +- " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; ++ " deflate 1.3.1 Copyright 1995-2024 Jean-loup Gailly and Mark Adler "; + /* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot +@@ -60,9 +60,6 @@ const char deflate_copyright[] = + copyright string in the executable of your product. + */ + +-/* =========================================================================== +- * Function prototypes. +- */ + typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ +@@ -70,35 +67,16 @@ typedef enum { + finish_done /* finish done, accept no more input or output */ + } block_state; + +-typedef block_state (*compress_func) OF((deflate_state *s, int flush)); ++typedef block_state (*compress_func)(deflate_state *s, int flush); + /* Compression function. Returns the block state after the call. */ + +-local int deflateStateCheck OF((z_streamp strm)); +-local void slide_hash OF((deflate_state *s)); +-local void fill_window OF((deflate_state *s)); +-local block_state deflate_stored OF((deflate_state *s, int flush)); +-local block_state deflate_fast OF((deflate_state *s, int flush)); ++local block_state deflate_stored(deflate_state *s, int flush); ++local block_state deflate_fast(deflate_state *s, int flush); + #ifndef FASTEST +-local block_state deflate_slow OF((deflate_state *s, int flush)); +-#endif +-local block_state deflate_rle OF((deflate_state *s, int flush)); +-local block_state deflate_huff OF((deflate_state *s, int flush)); +-local void lm_init OF((deflate_state *s)); +-local void putShortMSB OF((deflate_state *s, uInt b)); +-local void flush_pending OF((z_streamp strm)); +-local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); +-#ifdef ASMV +-# pragma message("Assembler code may have bugs -- use at your own risk") +- void match_init OF((void)); /* asm code initialization */ +- uInt longest_match OF((deflate_state *s, IPos cur_match)); +-#else +-local uInt longest_match OF((deflate_state *s, IPos cur_match)); +-#endif +- +-#ifdef ZLIB_DEBUG +-local void check_match OF((deflate_state *s, IPos start, IPos match, +- int length)); ++local block_state deflate_slow(deflate_state *s, int flush); + #endif ++local block_state deflate_rle(deflate_state *s, int flush); ++local block_state deflate_huff(deflate_state *s, int flush); + + /* =========================================================================== + * Local data +@@ -160,7 +138,7 @@ local const config configuration_table[10] = { + * characters, so that a running hash key can be computed from the previous + * key instead of complete recalculation each time. + */ +-#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) ++#define UPDATE_HASH(s,h,c) (h = (((h) << s->hash_shift) ^ (c)) & s->hash_mask) + + + /* =========================================================================== +@@ -191,9 +169,9 @@ local const config configuration_table[10] = { + */ + #define CLEAR_HASH(s) \ + do { \ +- s->head[s->hash_size-1] = NIL; \ ++ s->head[s->hash_size - 1] = NIL; \ + zmemzero((Bytef *)s->head, \ +- (unsigned)(s->hash_size-1)*sizeof(*s->head)); \ ++ (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \ + } while (0) + + /* =========================================================================== +@@ -201,9 +179,12 @@ local const config configuration_table[10] = { + * bit values at the expense of memory usage). We slide even when level == 0 to + * keep the hash table consistent if we switch back to level > 0 later. + */ +-local void slide_hash(s) +- deflate_state *s; +-{ ++#if defined(__has_feature) ++# if __has_feature(memory_sanitizer) ++ __attribute__((no_sanitize("memory"))) ++# endif ++#endif ++local void slide_hash(deflate_state *s) { + unsigned n, m; + Posf *p; + uInt wsize = s->w_size; +@@ -227,30 +208,177 @@ local void slide_hash(s) + #endif + } + ++/* =========================================================================== ++ * Read a new buffer from the current input stream, update the adler32 ++ * and total number of bytes read. All deflate() input goes through ++ * this function so some applications may wish to modify it to avoid ++ * allocating a large strm->next_in buffer and copying from it. ++ * (See also flush_pending()). ++ */ ++local unsigned read_buf(z_streamp strm, Bytef *buf, unsigned size) { ++ unsigned len = strm->avail_in; ++ ++ if (len > size) len = size; ++ if (len == 0) return 0; ++ ++ strm->avail_in -= len; ++ ++ zmemcpy(buf, strm->next_in, len); ++ if (strm->state->wrap == 1) { ++ strm->adler = adler32(strm->adler, buf, len); ++ } ++#ifdef GZIP ++ else if (strm->state->wrap == 2) { ++ strm->adler = crc32(strm->adler, buf, len); ++ } ++#endif ++ strm->next_in += len; ++ strm->total_in += len; ++ ++ return len; ++} ++ ++/* =========================================================================== ++ * Fill the window when the lookahead becomes insufficient. ++ * Updates strstart and lookahead. ++ * ++ * IN assertion: lookahead < MIN_LOOKAHEAD ++ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD ++ * At least one byte has been read, or avail_in == 0; reads are ++ * performed for at least two bytes (required for the zip translate_eol ++ * option -- not supported here). ++ */ ++local void fill_window(deflate_state *s) { ++ unsigned n; ++ unsigned more; /* Amount of free space at the end of the window. */ ++ uInt wsize = s->w_size; ++ ++ Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); ++ ++ do { ++ more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); ++ ++ /* Deal with !@#$% 64K limit: */ ++ if (sizeof(int) <= 2) { ++ if (more == 0 && s->strstart == 0 && s->lookahead == 0) { ++ more = wsize; ++ ++ } else if (more == (unsigned)(-1)) { ++ /* Very unlikely, but possible on 16 bit machine if ++ * strstart == 0 && lookahead == 1 (input done a byte at time) ++ */ ++ more--; ++ } ++ } ++ ++ /* If the window is almost full and there is insufficient lookahead, ++ * move the upper half to the lower one to make room in the upper half. ++ */ ++ if (s->strstart >= wsize + MAX_DIST(s)) { ++ ++ zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); ++ s->match_start -= wsize; ++ s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ ++ s->block_start -= (long) wsize; ++ if (s->insert > s->strstart) ++ s->insert = s->strstart; ++ slide_hash(s); ++ more += wsize; ++ } ++ if (s->strm->avail_in == 0) break; ++ ++ /* If there was no sliding: ++ * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && ++ * more == window_size - lookahead - strstart ++ * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) ++ * => more >= window_size - 2*WSIZE + 2 ++ * In the BIG_MEM or MMAP case (not yet supported), ++ * window_size == input_size + MIN_LOOKAHEAD && ++ * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. ++ * Otherwise, window_size == 2*WSIZE so more >= 2. ++ * If there was sliding, more >= WSIZE. So in all cases, more >= 2. ++ */ ++ Assert(more >= 2, "more < 2"); ++ ++ n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); ++ s->lookahead += n; ++ ++ /* Initialize the hash value now that we have some input: */ ++ if (s->lookahead + s->insert >= MIN_MATCH) { ++ uInt str = s->strstart - s->insert; ++ s->ins_h = s->window[str]; ++ UPDATE_HASH(s, s->ins_h, s->window[str + 1]); ++#if MIN_MATCH != 3 ++ Call UPDATE_HASH() MIN_MATCH-3 more times ++#endif ++ while (s->insert) { ++ UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); ++#ifndef FASTEST ++ s->prev[str & s->w_mask] = s->head[s->ins_h]; ++#endif ++ s->head[s->ins_h] = (Pos)str; ++ str++; ++ s->insert--; ++ if (s->lookahead + s->insert < MIN_MATCH) ++ break; ++ } ++ } ++ /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, ++ * but this is not important since only literal bytes will be emitted. ++ */ ++ ++ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); ++ ++ /* If the WIN_INIT bytes after the end of the current data have never been ++ * written, then zero those bytes in order to avoid memory check reports of ++ * the use of uninitialized (or uninitialised as Julian writes) bytes by ++ * the longest match routines. Update the high water mark for the next ++ * time through here. WIN_INIT is set to MAX_MATCH since the longest match ++ * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. ++ */ ++ if (s->high_water < s->window_size) { ++ ulg curr = s->strstart + (ulg)(s->lookahead); ++ ulg init; ++ ++ if (s->high_water < curr) { ++ /* Previous high water mark below current data -- zero WIN_INIT ++ * bytes or up to end of window, whichever is less. ++ */ ++ init = s->window_size - curr; ++ if (init > WIN_INIT) ++ init = WIN_INIT; ++ zmemzero(s->window + curr, (unsigned)init); ++ s->high_water = curr + init; ++ } ++ else if (s->high_water < (ulg)curr + WIN_INIT) { ++ /* High water mark at or above current data, but below current data ++ * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up ++ * to end of window, whichever is less. ++ */ ++ init = (ulg)curr + WIN_INIT - s->high_water; ++ if (init > s->window_size - s->high_water) ++ init = s->window_size - s->high_water; ++ zmemzero(s->window + s->high_water, (unsigned)init); ++ s->high_water += init; ++ } ++ } ++ ++ Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, ++ "not enough room for search"); ++} ++ + /* ========================================================================= */ +-int ZEXPORT deflateInit_(strm, level, version, stream_size) +- z_streamp strm; +- int level; +- const char *version; +- int stream_size; +-{ ++int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version, ++ int stream_size) { + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ + } + + /* ========================================================================= */ +-int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, +- version, stream_size) +- z_streamp strm; +- int level; +- int method; +- int windowBits; +- int memLevel; +- int strategy; +- const char *version; +- int stream_size; +-{ ++int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, ++ int windowBits, int memLevel, int strategy, ++ const char *version, int stream_size) { + deflate_state *s; + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; +@@ -285,6 +413,8 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; ++ if (windowBits < -15) ++ return Z_STREAM_ERROR; + windowBits = -windowBits; + } + #ifdef GZIP +@@ -314,7 +444,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + s->hash_bits = (uInt)memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; +- s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); ++ s->hash_shift = ((s->hash_bits + MIN_MATCH-1) / MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); +@@ -340,11 +470,11 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + * sym_buf value to read moves forward three bytes. From that symbol, up to + * 31 bits are written to pending_buf. The closest the written pending_buf + * bits gets to the next sym_buf symbol to read is just before the last +- * code is written. At that time, 31*(n-2) bits have been written, just +- * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at +- * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 ++ * code is written. At that time, 31*(n - 2) bits have been written, just ++ * after 24*(n - 2) bits have been consumed from sym_buf. sym_buf starts at ++ * 8*n bits into pending_buf. (Note that the symbol buffer fills when n - 1 + * symbols are written.) The closest the writing gets to what is unread is +- * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and ++ * then n + 14 bits. Here n is lit_bufsize, which is 16384 by default, and + * can range from 128 to 32768. + * + * Therefore, at a minimum, there are 142 bits of space between what is +@@ -363,7 +493,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + * symbols from which it is being constructed. + */ + +- s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); ++ s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, LIT_BUFS); + s->pending_buf_size = (ulg)s->lit_bufsize * 4; + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || +@@ -373,8 +503,14 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + deflateEnd (strm); + return Z_MEM_ERROR; + } ++#ifdef LIT_MEM ++ s->d_buf = (ushf *)(s->pending_buf + (s->lit_bufsize << 1)); ++ s->l_buf = s->pending_buf + (s->lit_bufsize << 2); ++ s->sym_end = s->lit_bufsize - 1; ++#else + s->sym_buf = s->pending_buf + s->lit_bufsize; + s->sym_end = (s->lit_bufsize - 1) * 3; ++#endif + /* We avoid equality with lit_bufsize*3 because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. +@@ -390,9 +526,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + /* ========================================================================= + * Check for a valid deflate stream state. Return 0 if ok, 1 if not. + */ +-local int deflateStateCheck (strm) +- z_streamp strm; +-{ ++local int deflateStateCheck(z_streamp strm) { + deflate_state *s; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) +@@ -413,11 +547,8 @@ local int deflateStateCheck (strm) + } + + /* ========================================================================= */ +-int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) +- z_streamp strm; +- const Bytef *dictionary; +- uInt dictLength; +-{ ++int ZEXPORT deflateSetDictionary(z_streamp strm, const Bytef *dictionary, ++ uInt dictLength) { + deflate_state *s; + uInt str, n; + int wrap; +@@ -482,11 +613,8 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) + } + + /* ========================================================================= */ +-int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) +- z_streamp strm; +- Bytef *dictionary; +- uInt *dictLength; +-{ ++int ZEXPORT deflateGetDictionary(z_streamp strm, Bytef *dictionary, ++ uInt *dictLength) { + deflate_state *s; + uInt len; + +@@ -504,9 +632,7 @@ int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) + } + + /* ========================================================================= */ +-int ZEXPORT deflateResetKeep (strm) +- z_streamp strm; +-{ ++int ZEXPORT deflateResetKeep(z_streamp strm) { + deflate_state *s; + + if (deflateStateCheck(strm)) { +@@ -541,10 +667,32 @@ int ZEXPORT deflateResetKeep (strm) + return Z_OK; + } + ++/* =========================================================================== ++ * Initialize the "longest match" routines for a new zlib stream ++ */ ++local void lm_init(deflate_state *s) { ++ s->window_size = (ulg)2L*s->w_size; ++ ++ CLEAR_HASH(s); ++ ++ /* Set the default configuration parameters: ++ */ ++ s->max_lazy_match = configuration_table[s->level].max_lazy; ++ s->good_match = configuration_table[s->level].good_length; ++ s->nice_match = configuration_table[s->level].nice_length; ++ s->max_chain_length = configuration_table[s->level].max_chain; ++ ++ s->strstart = 0; ++ s->block_start = 0L; ++ s->lookahead = 0; ++ s->insert = 0; ++ s->match_length = s->prev_length = MIN_MATCH-1; ++ s->match_available = 0; ++ s->ins_h = 0; ++} ++ + /* ========================================================================= */ +-int ZEXPORT deflateReset (strm) +- z_streamp strm; +-{ ++int ZEXPORT deflateReset(z_streamp strm) { + int ret; + + ret = deflateResetKeep(strm); +@@ -554,10 +702,7 @@ int ZEXPORT deflateReset (strm) + } + + /* ========================================================================= */ +-int ZEXPORT deflateSetHeader (strm, head) +- z_streamp strm; +- gz_headerp head; +-{ ++int ZEXPORT deflateSetHeader(z_streamp strm, gz_headerp head) { + if (deflateStateCheck(strm) || strm->state->wrap != 2) + return Z_STREAM_ERROR; + strm->state->gzhead = head; +@@ -565,11 +710,7 @@ int ZEXPORT deflateSetHeader (strm, head) + } + + /* ========================================================================= */ +-int ZEXPORT deflatePending (strm, pending, bits) +- unsigned *pending; +- int *bits; +- z_streamp strm; +-{ ++int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) { + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + if (pending != Z_NULL) + *pending = strm->state->pending; +@@ -579,19 +720,21 @@ int ZEXPORT deflatePending (strm, pending, bits) + } + + /* ========================================================================= */ +-int ZEXPORT deflatePrime (strm, bits, value) +- z_streamp strm; +- int bits; +- int value; +-{ ++int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) { + deflate_state *s; + int put; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + s = strm->state; ++#ifdef LIT_MEM ++ if (bits < 0 || bits > 16 || ++ (uchf *)s->d_buf < s->pending_out + ((Buf_size + 7) >> 3)) ++ return Z_BUF_ERROR; ++#else + if (bits < 0 || bits > 16 || + s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; ++#endif + do { + put = Buf_size - s->bi_valid; + if (put > bits) +@@ -606,11 +749,7 @@ int ZEXPORT deflatePrime (strm, bits, value) + } + + /* ========================================================================= */ +-int ZEXPORT deflateParams(strm, level, strategy) +- z_streamp strm; +- int level; +- int strategy; +-{ ++int ZEXPORT deflateParams(z_streamp strm, int level, int strategy) { + deflate_state *s; + compress_func func; + +@@ -655,13 +794,8 @@ int ZEXPORT deflateParams(strm, level, strategy) + } + + /* ========================================================================= */ +-int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) +- z_streamp strm; +- int good_length; +- int max_lazy; +- int nice_length; +- int max_chain; +-{ ++int ZEXPORT deflateTune(z_streamp strm, int good_length, int max_lazy, ++ int nice_length, int max_chain) { + deflate_state *s; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; +@@ -674,36 +808,47 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) + } + + /* ========================================================================= +- * For the default windowBits of 15 and memLevel of 8, this function returns +- * a close to exact, as well as small, upper bound on the compressed size. +- * They are coded as constants here for a reason--if the #define's are +- * changed, then this function needs to be changed as well. The return +- * value for 15 and 8 only works for those exact settings. ++ * For the default windowBits of 15 and memLevel of 8, this function returns a ++ * close to exact, as well as small, upper bound on the compressed size. This ++ * is an expansion of ~0.03%, plus a small constant. ++ * ++ * For any setting other than those defaults for windowBits and memLevel, one ++ * of two worst case bounds is returned. This is at most an expansion of ~4% or ++ * ~13%, plus a small constant. + * +- * For any setting other than those defaults for windowBits and memLevel, +- * the value returned is a conservative worst case for the maximum expansion +- * resulting from using fixed blocks instead of stored blocks, which deflate +- * can emit on compressed data for some combinations of the parameters. ++ * Both the 0.03% and 4% derive from the overhead of stored blocks. The first ++ * one is for stored blocks of 16383 bytes (memLevel == 8), whereas the second ++ * is for stored blocks of 127 bytes (the worst case memLevel == 1). The ++ * expansion results from five bytes of header for each stored block. + * +- * This function could be more sophisticated to provide closer upper bounds for +- * every combination of windowBits and memLevel. But even the conservative +- * upper bound of about 14% expansion does not seem onerous for output buffer +- * allocation. ++ * The larger expansion of 13% results from a window size less than or equal to ++ * the symbols buffer size (windowBits <= memLevel + 7). In that case some of ++ * the data being compressed may have slid out of the sliding window, impeding ++ * a stored block from being emitted. Then the only choice is a fixed or ++ * dynamic block, where a fixed block limits the maximum expansion to 9 bits ++ * per 8-bit byte, plus 10 bits for every block. The smallest block size for ++ * which this can occur is 255 (memLevel == 2). ++ * ++ * Shifts are used to approximate divisions, for speed. + */ +-uLong ZEXPORT deflateBound(strm, sourceLen) +- z_streamp strm; +- uLong sourceLen; +-{ ++uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) { + deflate_state *s; +- uLong complen, wraplen; ++ uLong fixedlen, storelen, wraplen; ++ ++ /* upper bound for fixed blocks with 9-bit literals and length 255 ++ (memLevel == 2, which is the lowest that may not use stored blocks) -- ++ ~13% overhead plus a small constant */ ++ fixedlen = sourceLen + (sourceLen >> 3) + (sourceLen >> 8) + ++ (sourceLen >> 9) + 4; + +- /* conservative upper bound for compressed data */ +- complen = sourceLen + +- ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; ++ /* upper bound for stored blocks with length 127 (memLevel == 1) -- ++ ~4% overhead plus a small constant */ ++ storelen = sourceLen + (sourceLen >> 5) + (sourceLen >> 7) + ++ (sourceLen >> 11) + 7; + +- /* if can't get parameters, return conservative bound plus zlib wrapper */ ++ /* if can't get parameters, return larger bound plus a zlib wrapper */ + if (deflateStateCheck(strm)) +- return complen + 6; ++ return (fixedlen > storelen ? fixedlen : storelen) + 6; + + /* compute wrapper length */ + s = strm->state; +@@ -740,11 +885,13 @@ uLong ZEXPORT deflateBound(strm, sourceLen) + wraplen = 6; + } + +- /* if not default parameters, return conservative bound */ ++ /* if not default parameters, return one of the conservative bounds */ + if (s->w_bits != 15 || s->hash_bits != 8 + 7) +- return complen + wraplen; ++ return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) + ++ wraplen; + +- /* default settings: return tight bound for that case */ ++ /* default settings: return tight bound for that case -- ~0.03% overhead ++ plus a small constant */ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13 - 6 + wraplen; + } +@@ -754,10 +901,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen) + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +-local void putShortMSB (s, b) +- deflate_state *s; +- uInt b; +-{ ++local void putShortMSB(deflate_state *s, uInt b) { + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); + } +@@ -768,9 +912,7 @@ local void putShortMSB (s, b) + * applications may wish to modify it to avoid allocating a large + * strm->next_out buffer and copying into it. (See also read_buf()). + */ +-local void flush_pending(strm) +- z_streamp strm; +-{ ++local void flush_pending(z_streamp strm) { + unsigned len; + deflate_state *s = strm->state; + +@@ -801,10 +943,7 @@ local void flush_pending(strm) + } while (0) + + /* ========================================================================= */ +-int ZEXPORT deflate (strm, flush) +- z_streamp strm; +- int flush; +-{ ++int ZEXPORT deflate(z_streamp strm, int flush) { + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + +@@ -856,7 +995,7 @@ int ZEXPORT deflate (strm, flush) + s->status = BUSY_STATE; + if (s->status == INIT_STATE) { + /* zlib header */ +- uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; ++ uInt header = (Z_DEFLATED + ((s->w_bits - 8) << 4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) +@@ -1116,9 +1255,7 @@ int ZEXPORT deflate (strm, flush) + } + + /* ========================================================================= */ +-int ZEXPORT deflateEnd (strm) +- z_streamp strm; +-{ ++int ZEXPORT deflateEnd(z_streamp strm) { + int status; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; +@@ -1142,11 +1279,10 @@ int ZEXPORT deflateEnd (strm) + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +-int ZEXPORT deflateCopy (dest, source) +- z_streamp dest; +- z_streamp source; +-{ ++int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { + #ifdef MAXSEG_64K ++ (void)dest; ++ (void)source; + return Z_STREAM_ERROR; + #else + deflate_state *ds; +@@ -1170,7 +1306,7 @@ int ZEXPORT deflateCopy (dest, source) + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); +- ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); ++ ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, LIT_BUFS); + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { +@@ -1181,10 +1317,15 @@ int ZEXPORT deflateCopy (dest, source) + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); +- zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); ++ zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); ++#ifdef LIT_MEM ++ ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1)); ++ ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2); ++#else + ds->sym_buf = ds->pending_buf + ds->lit_bufsize; ++#endif + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; +@@ -1194,71 +1335,6 @@ int ZEXPORT deflateCopy (dest, source) + #endif /* MAXSEG_64K */ + } + +-/* =========================================================================== +- * Read a new buffer from the current input stream, update the adler32 +- * and total number of bytes read. All deflate() input goes through +- * this function so some applications may wish to modify it to avoid +- * allocating a large strm->next_in buffer and copying from it. +- * (See also flush_pending()). +- */ +-local unsigned read_buf(strm, buf, size) +- z_streamp strm; +- Bytef *buf; +- unsigned size; +-{ +- unsigned len = strm->avail_in; +- +- if (len > size) len = size; +- if (len == 0) return 0; +- +- strm->avail_in -= len; +- +- zmemcpy(buf, strm->next_in, len); +- if (strm->state->wrap == 1) { +- strm->adler = adler32(strm->adler, buf, len); +- } +-#ifdef GZIP +- else if (strm->state->wrap == 2) { +- strm->adler = crc32(strm->adler, buf, len); +- } +-#endif +- strm->next_in += len; +- strm->total_in += len; +- +- return len; +-} +- +-/* =========================================================================== +- * Initialize the "longest match" routines for a new zlib stream +- */ +-local void lm_init (s) +- deflate_state *s; +-{ +- s->window_size = (ulg)2L*s->w_size; +- +- CLEAR_HASH(s); +- +- /* Set the default configuration parameters: +- */ +- s->max_lazy_match = configuration_table[s->level].max_lazy; +- s->good_match = configuration_table[s->level].good_length; +- s->nice_match = configuration_table[s->level].nice_length; +- s->max_chain_length = configuration_table[s->level].max_chain; +- +- s->strstart = 0; +- s->block_start = 0L; +- s->lookahead = 0; +- s->insert = 0; +- s->match_length = s->prev_length = MIN_MATCH-1; +- s->match_available = 0; +- s->ins_h = 0; +-#ifndef FASTEST +-#ifdef ASMV +- match_init(); /* initialize the asm code */ +-#endif +-#endif +-} +- + #ifndef FASTEST + /* =========================================================================== + * Set match_start to the longest match starting at the given string and +@@ -1269,14 +1345,7 @@ local void lm_init (s) + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +-#ifndef ASMV +-/* For 80x86 and 680x0, an optimized version will be provided in match.asm or +- * match.S. The code will be functionally equivalent. +- */ +-local uInt longest_match(s, cur_match) +- deflate_state *s; +- IPos cur_match; /* current match */ +-{ ++local uInt longest_match(deflate_state *s, IPos cur_match) { + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ +@@ -1297,10 +1366,10 @@ local uInt longest_match(s, cur_match) + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; +- register ush scan_end = *(ushf*)(scan+best_len-1); ++ register ush scan_end = *(ushf*)(scan + best_len - 1); + #else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; +- register Byte scan_end1 = scan[best_len-1]; ++ register Byte scan_end1 = scan[best_len - 1]; + register Byte scan_end = scan[best_len]; + #endif + +@@ -1318,7 +1387,8 @@ local uInt longest_match(s, cur_match) + */ + if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; + +- Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); ++ Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, ++ "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); +@@ -1336,43 +1406,44 @@ local uInt longest_match(s, cur_match) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ +- if (*(ushf*)(match+best_len-1) != scan_end || ++ if (*(ushf*)(match + best_len - 1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at +- * strstart+3, +5, ... up to strstart+257. We check for insufficient ++ * strstart + 3, + 5, up to strstart + 257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made +- * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is ++ * at strstart + 257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { +- } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && +- *(ushf*)(scan+=2) == *(ushf*)(match+=2) && +- *(ushf*)(scan+=2) == *(ushf*)(match+=2) && +- *(ushf*)(scan+=2) == *(ushf*)(match+=2) && ++ } while (*(ushf*)(scan += 2) == *(ushf*)(match += 2) && ++ *(ushf*)(scan += 2) == *(ushf*)(match += 2) && ++ *(ushf*)(scan += 2) == *(ushf*)(match += 2) && ++ *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + +- /* Here, scan <= window+strstart+257 */ +- Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); ++ /* Here, scan <= window + strstart + 257 */ ++ Assert(scan <= s->window + (unsigned)(s->window_size - 1), ++ "wild scan"); + if (*scan == *match) scan++; + +- len = (MAX_MATCH - 1) - (int)(strend-scan); ++ len = (MAX_MATCH - 1) - (int)(strend - scan); + scan = strend - (MAX_MATCH-1); + + #else /* UNALIGNED_OK */ + +- if (match[best_len] != scan_end || +- match[best_len-1] != scan_end1 || +- *match != *scan || +- *++match != scan[1]) continue; ++ if (match[best_len] != scan_end || ++ match[best_len - 1] != scan_end1 || ++ *match != *scan || ++ *++match != scan[1]) continue; + +- /* The check at best_len-1 can be removed because it will be made ++ /* The check at best_len - 1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that +@@ -1382,7 +1453,7 @@ local uInt longest_match(s, cur_match) + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; +- * the 256th check will be made at strstart+258. ++ * the 256th check will be made at strstart + 258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && +@@ -1391,7 +1462,8 @@ local uInt longest_match(s, cur_match) + *++scan == *++match && *++scan == *++match && + scan < strend); + +- Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); ++ Assert(scan <= s->window + (unsigned)(s->window_size - 1), ++ "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; +@@ -1403,9 +1475,9 @@ local uInt longest_match(s, cur_match) + best_len = len; + if (len >= nice_match) break; + #ifdef UNALIGNED_OK +- scan_end = *(ushf*)(scan+best_len-1); ++ scan_end = *(ushf*)(scan + best_len - 1); + #else +- scan_end1 = scan[best_len-1]; ++ scan_end1 = scan[best_len - 1]; + scan_end = scan[best_len]; + #endif + } +@@ -1415,17 +1487,13 @@ local uInt longest_match(s, cur_match) + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; + } +-#endif /* ASMV */ + + #else /* FASTEST */ + + /* --------------------------------------------------------------------------- + * Optimized version for FASTEST only + */ +-local uInt longest_match(s, cur_match) +- deflate_state *s; +- IPos cur_match; /* current match */ +-{ ++local uInt longest_match(deflate_state *s, IPos cur_match) { + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ +@@ -1436,7 +1504,8 @@ local uInt longest_match(s, cur_match) + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + +- Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); ++ Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, ++ "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + +@@ -1446,7 +1515,7 @@ local uInt longest_match(s, cur_match) + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + +- /* The check at best_len-1 can be removed because it will be made ++ /* The check at best_len - 1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that +@@ -1456,7 +1525,7 @@ local uInt longest_match(s, cur_match) + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; +- * the 256th check will be made at strstart+258. ++ * the 256th check will be made at strstart + 258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && +@@ -1465,7 +1534,7 @@ local uInt longest_match(s, cur_match) + *++scan == *++match && *++scan == *++match && + scan < strend); + +- Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); ++ Assert(scan <= s->window + (unsigned)(s->window_size - 1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + +@@ -1485,23 +1554,27 @@ local uInt longest_match(s, cur_match) + /* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +-local void check_match(s, start, match, length) +- deflate_state *s; +- IPos start, match; +- int length; +-{ ++local void check_match(deflate_state *s, IPos start, IPos match, int length) { + /* check that the match is indeed a match */ +- if (zmemcmp(s->window + match, +- s->window + start, length) != EQUAL) { +- fprintf(stderr, " start %u, match %u, length %d\n", +- start, match, length); ++ Bytef *back = s->window + (int)match, *here = s->window + start; ++ IPos len = length; ++ if (match == (IPos)-1) { ++ /* match starts one byte before the current window -- just compare the ++ subsequent length-1 bytes */ ++ back++; ++ here++; ++ len--; ++ } ++ if (zmemcmp(back, here, len) != EQUAL) { ++ fprintf(stderr, " start %u, match %d, length %d\n", ++ start, (int)match, length); + do { +- fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); +- } while (--length != 0); ++ fprintf(stderr, "(%02x %02x)", *back++, *here++); ++ } while (--len != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { +- fprintf(stderr,"\\[%d,%d]", start-match, length); ++ fprintf(stderr,"\\[%d,%d]", start - match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } + } +@@ -1509,137 +1582,6 @@ local void check_match(s, start, match, length) + # define check_match(s, start, match, length) + #endif /* ZLIB_DEBUG */ + +-/* =========================================================================== +- * Fill the window when the lookahead becomes insufficient. +- * Updates strstart and lookahead. +- * +- * IN assertion: lookahead < MIN_LOOKAHEAD +- * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD +- * At least one byte has been read, or avail_in == 0; reads are +- * performed for at least two bytes (required for the zip translate_eol +- * option -- not supported here). +- */ +-local void fill_window(s) +- deflate_state *s; +-{ +- unsigned n; +- unsigned more; /* Amount of free space at the end of the window. */ +- uInt wsize = s->w_size; +- +- Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); +- +- do { +- more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); +- +- /* Deal with !@#$% 64K limit: */ +- if (sizeof(int) <= 2) { +- if (more == 0 && s->strstart == 0 && s->lookahead == 0) { +- more = wsize; +- +- } else if (more == (unsigned)(-1)) { +- /* Very unlikely, but possible on 16 bit machine if +- * strstart == 0 && lookahead == 1 (input done a byte at time) +- */ +- more--; +- } +- } +- +- /* If the window is almost full and there is insufficient lookahead, +- * move the upper half to the lower one to make room in the upper half. +- */ +- if (s->strstart >= wsize+MAX_DIST(s)) { +- +- zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); +- s->match_start -= wsize; +- s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ +- s->block_start -= (long) wsize; +- if (s->insert > s->strstart) +- s->insert = s->strstart; +- slide_hash(s); +- more += wsize; +- } +- if (s->strm->avail_in == 0) break; +- +- /* If there was no sliding: +- * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && +- * more == window_size - lookahead - strstart +- * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) +- * => more >= window_size - 2*WSIZE + 2 +- * In the BIG_MEM or MMAP case (not yet supported), +- * window_size == input_size + MIN_LOOKAHEAD && +- * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. +- * Otherwise, window_size == 2*WSIZE so more >= 2. +- * If there was sliding, more >= WSIZE. So in all cases, more >= 2. +- */ +- Assert(more >= 2, "more < 2"); +- +- n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); +- s->lookahead += n; +- +- /* Initialize the hash value now that we have some input: */ +- if (s->lookahead + s->insert >= MIN_MATCH) { +- uInt str = s->strstart - s->insert; +- s->ins_h = s->window[str]; +- UPDATE_HASH(s, s->ins_h, s->window[str + 1]); +-#if MIN_MATCH != 3 +- Call UPDATE_HASH() MIN_MATCH-3 more times +-#endif +- while (s->insert) { +- UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +-#ifndef FASTEST +- s->prev[str & s->w_mask] = s->head[s->ins_h]; +-#endif +- s->head[s->ins_h] = (Pos)str; +- str++; +- s->insert--; +- if (s->lookahead + s->insert < MIN_MATCH) +- break; +- } +- } +- /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, +- * but this is not important since only literal bytes will be emitted. +- */ +- +- } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); +- +- /* If the WIN_INIT bytes after the end of the current data have never been +- * written, then zero those bytes in order to avoid memory check reports of +- * the use of uninitialized (or uninitialised as Julian writes) bytes by +- * the longest match routines. Update the high water mark for the next +- * time through here. WIN_INIT is set to MAX_MATCH since the longest match +- * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. +- */ +- if (s->high_water < s->window_size) { +- ulg curr = s->strstart + (ulg)(s->lookahead); +- ulg init; +- +- if (s->high_water < curr) { +- /* Previous high water mark below current data -- zero WIN_INIT +- * bytes or up to end of window, whichever is less. +- */ +- init = s->window_size - curr; +- if (init > WIN_INIT) +- init = WIN_INIT; +- zmemzero(s->window + curr, (unsigned)init); +- s->high_water = curr + init; +- } +- else if (s->high_water < (ulg)curr + WIN_INIT) { +- /* High water mark at or above current data, but below current data +- * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up +- * to end of window, whichever is less. +- */ +- init = (ulg)curr + WIN_INIT - s->high_water; +- if (init > s->window_size - s->high_water) +- init = s->window_size - s->high_water; +- zmemzero(s->window + s->high_water, (unsigned)init); +- s->high_water += init; +- } +- } +- +- Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +- "not enough room for search"); +-} +- + /* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. +@@ -1680,12 +1622,9 @@ local void fill_window(s) + * + * deflate_stored() is written to minimize the number of times an input byte is + * copied. It is most efficient with large input and output buffers, which +- * maximizes the opportunites to have a single copy from next_in to next_out. ++ * maximizes the opportunities to have a single copy from next_in to next_out. + */ +-local block_state deflate_stored(s, flush) +- deflate_state *s; +- int flush; +-{ ++local block_state deflate_stored(deflate_state *s, int flush) { + /* Smallest worthy block size when not flushing or finishing. By default + * this is 32K. This can be as small as 507 bytes for memLevel == 1. For + * large input and output buffers, the stored block size will be larger. +@@ -1869,10 +1808,7 @@ local block_state deflate_stored(s, flush) + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +-local block_state deflate_fast(s, flush) +- deflate_state *s; +- int flush; +-{ ++local block_state deflate_fast(deflate_state *s, int flush) { + IPos hash_head; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + +@@ -1890,7 +1826,7 @@ local block_state deflate_fast(s, flush) + if (s->lookahead == 0) break; /* flush the current block */ + } + +- /* Insert the string window[strstart .. strstart+2] in the ++ /* Insert the string window[strstart .. strstart + 2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; +@@ -1938,7 +1874,7 @@ local block_state deflate_fast(s, flush) + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; +- UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); ++ UPDATE_HASH(s, s->ins_h, s->window[s->strstart + 1]); + #if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times + #endif +@@ -1949,7 +1885,7 @@ local block_state deflate_fast(s, flush) + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); +- _tr_tally_lit (s, s->window[s->strstart], bflush); ++ _tr_tally_lit(s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } +@@ -1971,10 +1907,7 @@ local block_state deflate_fast(s, flush) + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +-local block_state deflate_slow(s, flush) +- deflate_state *s; +- int flush; +-{ ++local block_state deflate_slow(deflate_state *s, int flush) { + IPos hash_head; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + +@@ -1993,7 +1926,7 @@ local block_state deflate_slow(s, flush) + if (s->lookahead == 0) break; /* flush the current block */ + } + +- /* Insert the string window[strstart .. strstart+2] in the ++ /* Insert the string window[strstart .. strstart + 2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; +@@ -2035,17 +1968,17 @@ local block_state deflate_slow(s, flush) + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + +- check_match(s, s->strstart-1, s->prev_match, s->prev_length); ++ check_match(s, s->strstart - 1, s->prev_match, s->prev_length); + +- _tr_tally_dist(s, s->strstart -1 - s->prev_match, ++ _tr_tally_dist(s, s->strstart - 1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. +- * strstart-1 and strstart are already inserted. If there is not ++ * strstart - 1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ +- s->lookahead -= s->prev_length-1; ++ s->lookahead -= s->prev_length - 1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { +@@ -2063,8 +1996,8 @@ local block_state deflate_slow(s, flush) + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ +- Tracevv((stderr,"%c", s->window[s->strstart-1])); +- _tr_tally_lit(s, s->window[s->strstart-1], bflush); ++ Tracevv((stderr,"%c", s->window[s->strstart - 1])); ++ _tr_tally_lit(s, s->window[s->strstart - 1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } +@@ -2082,8 +2015,8 @@ local block_state deflate_slow(s, flush) + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { +- Tracevv((stderr,"%c", s->window[s->strstart-1])); +- _tr_tally_lit(s, s->window[s->strstart-1], bflush); ++ Tracevv((stderr,"%c", s->window[s->strstart - 1])); ++ _tr_tally_lit(s, s->window[s->strstart - 1], bflush); + s->match_available = 0; + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; +@@ -2102,10 +2035,7 @@ local block_state deflate_slow(s, flush) + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +-local block_state deflate_rle(s, flush) +- deflate_state *s; +- int flush; +-{ ++local block_state deflate_rle(deflate_state *s, int flush) { + int bflush; /* set if current block must be flushed */ + uInt prev; /* byte at distance one to match */ + Bytef *scan, *strend; /* scan goes up to strend for length of run */ +@@ -2140,7 +2070,8 @@ local block_state deflate_rle(s, flush) + if (s->match_length > s->lookahead) + s->match_length = s->lookahead; + } +- Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); ++ Assert(scan <= s->window + (uInt)(s->window_size - 1), ++ "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ +@@ -2155,7 +2086,7 @@ local block_state deflate_rle(s, flush) + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); +- _tr_tally_lit (s, s->window[s->strstart], bflush); ++ _tr_tally_lit(s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } +@@ -2175,10 +2106,7 @@ local block_state deflate_rle(s, flush) + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +-local block_state deflate_huff(s, flush) +- deflate_state *s; +- int flush; +-{ ++local block_state deflate_huff(deflate_state *s, int flush) { + int bflush; /* set if current block must be flushed */ + + for (;;) { +@@ -2195,7 +2123,7 @@ local block_state deflate_huff(s, flush) + /* Output a literal byte */ + s->match_length = 0; + Tracevv((stderr,"%c", s->window[s->strstart])); +- _tr_tally_lit (s, s->window[s->strstart], bflush); ++ _tr_tally_lit(s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + if (bflush) FLUSH_BLOCK(s, 0); +diff --git a/src/zlib/deflate.h b/src/zlib/deflate.h +index 17c226113..300c6ada6 100644 +--- a/src/zlib/deflate.h ++++ b/src/zlib/deflate.h +@@ -1,5 +1,5 @@ + /* deflate.h -- internal compression state +- * Copyright (C) 1995-2018 Jean-loup Gailly ++ * Copyright (C) 1995-2024 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +@@ -23,6 +23,10 @@ + # define GZIP + #endif + ++/* define LIT_MEM to slightly increase the speed of deflate (order 1% to 2%) at ++ the cost of a larger memory footprint */ ++/* #define LIT_MEM */ ++ + /* =========================================================================== + * Internal compression state. + */ +@@ -217,7 +221,14 @@ typedef struct internal_state { + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + ++#ifdef LIT_MEM ++# define LIT_BUFS 5 ++ ushf *d_buf; /* buffer for distances */ ++ uchf *l_buf; /* buffer for literals/lengths */ ++#else ++# define LIT_BUFS 4 + uchf *sym_buf; /* buffer for distances and literals/lengths */ ++#endif + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for +@@ -239,7 +250,7 @@ typedef struct internal_state { + * - I can't count above 4 + */ + +- uInt sym_next; /* running index in sym_buf */ ++ uInt sym_next; /* running index in symbol buffer */ + uInt sym_end; /* symbol table full when sym_next reaches this */ + + ulg opt_len; /* bit length of current block with optimal trees */ +@@ -291,14 +302,14 @@ typedef struct internal_state { + memory checker errors from longest match routines */ + + /* in trees.c */ +-void ZLIB_INTERNAL _tr_init OF((deflate_state *s)); +-int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +-void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, +- ulg stored_len, int last)); +-void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s)); +-void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); +-void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, +- ulg stored_len, int last)); ++void ZLIB_INTERNAL _tr_init(deflate_state *s); ++int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc); ++void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, ++ ulg stored_len, int last); ++void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s); ++void ZLIB_INTERNAL _tr_align(deflate_state *s); ++void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, ++ ulg stored_len, int last); + + #define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +@@ -318,6 +329,25 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + extern const uch ZLIB_INTERNAL _dist_code[]; + #endif + ++#ifdef LIT_MEM ++# define _tr_tally_lit(s, c, flush) \ ++ { uch cc = (c); \ ++ s->d_buf[s->sym_next] = 0; \ ++ s->l_buf[s->sym_next++] = cc; \ ++ s->dyn_ltree[cc].Freq++; \ ++ flush = (s->sym_next == s->sym_end); \ ++ } ++# define _tr_tally_dist(s, distance, length, flush) \ ++ { uch len = (uch)(length); \ ++ ush dist = (ush)(distance); \ ++ s->d_buf[s->sym_next] = dist; \ ++ s->l_buf[s->sym_next++] = len; \ ++ dist--; \ ++ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ ++ s->dyn_dtree[d_code(dist)].Freq++; \ ++ flush = (s->sym_next == s->sym_end); \ ++ } ++#else + # define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->sym_buf[s->sym_next++] = 0; \ +@@ -329,14 +359,15 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + # define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ +- s->sym_buf[s->sym_next++] = dist; \ +- s->sym_buf[s->sym_next++] = dist >> 8; \ ++ s->sym_buf[s->sym_next++] = (uch)dist; \ ++ s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \ + s->sym_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } ++#endif + #else + # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) + # define _tr_tally_dist(s, distance, length, flush) \ +diff --git a/src/zlib/gzclose.c b/src/zlib/gzclose.c +index caeb99a31..48d6a86f0 100644 +--- a/src/zlib/gzclose.c ++++ b/src/zlib/gzclose.c +@@ -8,9 +8,7 @@ + /* gzclose() is in a separate file so that it is linked in only if it is used. + That way the other gzclose functions can be used instead to avoid linking in + unneeded compression or decompression routines. */ +-int ZEXPORT gzclose(file) +- gzFile file; +-{ ++int ZEXPORT gzclose(gzFile file) { + #ifndef NO_GZCOMPRESS + gz_statep state; + +diff --git a/src/zlib/gzguts.h b/src/zlib/gzguts.h +index 57faf3716..eba72085b 100644 +--- a/src/zlib/gzguts.h ++++ b/src/zlib/gzguts.h +@@ -1,5 +1,5 @@ + /* gzguts.h -- zlib internal header definitions for gz* operations +- * Copyright (C) 2004-2019 Mark Adler ++ * Copyright (C) 2004-2024 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +@@ -7,9 +7,8 @@ + # ifndef _LARGEFILE_SOURCE + # define _LARGEFILE_SOURCE 1 + # endif +-# ifdef _FILE_OFFSET_BITS +-# undef _FILE_OFFSET_BITS +-# endif ++# undef _FILE_OFFSET_BITS ++# undef _TIME_BITS + #endif + + #ifdef HAVE_HIDDEN +@@ -119,8 +118,8 @@ + + /* gz* functions always use library allocation functions */ + #ifndef STDC +- extern voidp malloc OF((uInt size)); +- extern void free OF((voidpf ptr)); ++ extern voidp malloc(uInt size); ++ extern void free(voidpf ptr); + #endif + + /* get errno and strerror definition */ +@@ -138,10 +137,10 @@ + + /* provide prototypes for these when building zlib without LFS */ + #if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 +- ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); +- ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); +- ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); +- ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); ++ ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); ++ ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); ++ ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); ++ ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); + #endif + + /* default memLevel */ +@@ -203,17 +202,13 @@ typedef struct { + typedef gz_state FAR *gz_statep; + + /* shared functions */ +-void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); ++void ZLIB_INTERNAL gz_error(gz_statep, int, const char *); + #if defined UNDER_CE +-char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); ++char ZLIB_INTERNAL *gz_strwinerror(DWORD error); + #endif + + /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t + value -- needed when comparing unsigned to z_off64_t, which is signed + (possible z_off64_t types off_t, off64_t, and long are all signed) */ +-#ifdef INT_MAX +-# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) +-#else +-unsigned ZLIB_INTERNAL gz_intmax OF((void)); +-# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) +-#endif ++unsigned ZLIB_INTERNAL gz_intmax(void); ++#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) +diff --git a/src/zlib/gzlib.c b/src/zlib/gzlib.c +index dddaf2687..983153cc8 100644 +--- a/src/zlib/gzlib.c ++++ b/src/zlib/gzlib.c +@@ -1,5 +1,5 @@ + /* gzlib.c -- zlib functions common to reading and writing gzip files +- * Copyright (C) 2004-2019 Mark Adler ++ * Copyright (C) 2004-2024 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +@@ -15,10 +15,6 @@ + #endif + #endif + +-/* Local functions */ +-local void gz_reset OF((gz_statep)); +-local gzFile gz_open OF((const void *, int, const char *)); +- + #if defined UNDER_CE + + /* Map the Windows error number in ERROR to a locale-dependent error message +@@ -30,9 +26,7 @@ local gzFile gz_open OF((const void *, int, const char *)); + + The gz_strwinerror function does not change the current setting of + GetLastError. */ +-char ZLIB_INTERNAL *gz_strwinerror (error) +- DWORD error; +-{ ++char ZLIB_INTERNAL *gz_strwinerror(DWORD error) { + static char buf[1024]; + + wchar_t *msgbuf; +@@ -72,9 +66,7 @@ char ZLIB_INTERNAL *gz_strwinerror (error) + #endif /* UNDER_CE */ + + /* Reset gzip file state */ +-local void gz_reset(state) +- gz_statep state; +-{ ++local void gz_reset(gz_statep state) { + state->x.have = 0; /* no output data available */ + if (state->mode == GZ_READ) { /* for reading ... */ + state->eof = 0; /* not at end of file */ +@@ -90,11 +82,7 @@ local void gz_reset(state) + } + + /* Open a gzip file either by name or file descriptor. */ +-local gzFile gz_open(path, fd, mode) +- const void *path; +- int fd; +- const char *mode; +-{ ++local gzFile gz_open(const void *path, int fd, const char *mode) { + gz_statep state; + z_size_t len; + int oflag; +@@ -269,26 +257,17 @@ local gzFile gz_open(path, fd, mode) + } + + /* -- see zlib.h -- */ +-gzFile ZEXPORT gzopen(path, mode) +- const char *path; +- const char *mode; +-{ ++gzFile ZEXPORT gzopen(const char *path, const char *mode) { + return gz_open(path, -1, mode); + } + + /* -- see zlib.h -- */ +-gzFile ZEXPORT gzopen64(path, mode) +- const char *path; +- const char *mode; +-{ ++gzFile ZEXPORT gzopen64(const char *path, const char *mode) { + return gz_open(path, -1, mode); + } + + /* -- see zlib.h -- */ +-gzFile ZEXPORT gzdopen(fd, mode) +- int fd; +- const char *mode; +-{ ++gzFile ZEXPORT gzdopen(int fd, const char *mode) { + char *path; /* identifier for error messages */ + gzFile gz; + +@@ -306,19 +285,13 @@ gzFile ZEXPORT gzdopen(fd, mode) + + /* -- see zlib.h -- */ + #ifdef WIDECHAR +-gzFile ZEXPORT gzopen_w(path, mode) +- const wchar_t *path; +- const char *mode; +-{ ++gzFile ZEXPORT gzopen_w(const wchar_t *path, const char *mode) { + return gz_open(path, -2, mode); + } + #endif + + /* -- see zlib.h -- */ +-int ZEXPORT gzbuffer(file, size) +- gzFile file; +- unsigned size; +-{ ++int ZEXPORT gzbuffer(gzFile file, unsigned size) { + gz_statep state; + + /* get internal structure and check integrity */ +@@ -335,16 +308,14 @@ int ZEXPORT gzbuffer(file, size) + /* check and set requested size */ + if ((size << 1) < size) + return -1; /* need to be able to double it */ +- if (size < 2) +- size = 2; /* need two bytes to check magic header */ ++ if (size < 8) ++ size = 8; /* needed to behave well with flushing */ + state->want = size; + return 0; + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzrewind(file) +- gzFile file; +-{ ++int ZEXPORT gzrewind(gzFile file) { + gz_statep state; + + /* get internal structure */ +@@ -365,11 +336,7 @@ int ZEXPORT gzrewind(file) + } + + /* -- see zlib.h -- */ +-z_off64_t ZEXPORT gzseek64(file, offset, whence) +- gzFile file; +- z_off64_t offset; +- int whence; +-{ ++z_off64_t ZEXPORT gzseek64(gzFile file, z_off64_t offset, int whence) { + unsigned n; + z_off64_t ret; + gz_statep state; +@@ -442,11 +409,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence) + } + + /* -- see zlib.h -- */ +-z_off_t ZEXPORT gzseek(file, offset, whence) +- gzFile file; +- z_off_t offset; +- int whence; +-{ ++z_off_t ZEXPORT gzseek(gzFile file, z_off_t offset, int whence) { + z_off64_t ret; + + ret = gzseek64(file, (z_off64_t)offset, whence); +@@ -454,9 +417,7 @@ z_off_t ZEXPORT gzseek(file, offset, whence) + } + + /* -- see zlib.h -- */ +-z_off64_t ZEXPORT gztell64(file) +- gzFile file; +-{ ++z_off64_t ZEXPORT gztell64(gzFile file) { + gz_statep state; + + /* get internal structure and check integrity */ +@@ -471,9 +432,7 @@ z_off64_t ZEXPORT gztell64(file) + } + + /* -- see zlib.h -- */ +-z_off_t ZEXPORT gztell(file) +- gzFile file; +-{ ++z_off_t ZEXPORT gztell(gzFile file) { + z_off64_t ret; + + ret = gztell64(file); +@@ -481,9 +440,7 @@ z_off_t ZEXPORT gztell(file) + } + + /* -- see zlib.h -- */ +-z_off64_t ZEXPORT gzoffset64(file) +- gzFile file; +-{ ++z_off64_t ZEXPORT gzoffset64(gzFile file) { + z_off64_t offset; + gz_statep state; + +@@ -504,9 +461,7 @@ z_off64_t ZEXPORT gzoffset64(file) + } + + /* -- see zlib.h -- */ +-z_off_t ZEXPORT gzoffset(file) +- gzFile file; +-{ ++z_off_t ZEXPORT gzoffset(gzFile file) { + z_off64_t ret; + + ret = gzoffset64(file); +@@ -514,9 +469,7 @@ z_off_t ZEXPORT gzoffset(file) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzeof(file) +- gzFile file; +-{ ++int ZEXPORT gzeof(gzFile file) { + gz_statep state; + + /* get internal structure and check integrity */ +@@ -531,10 +484,7 @@ int ZEXPORT gzeof(file) + } + + /* -- see zlib.h -- */ +-const char * ZEXPORT gzerror(file, errnum) +- gzFile file; +- int *errnum; +-{ ++const char * ZEXPORT gzerror(gzFile file, int *errnum) { + gz_statep state; + + /* get internal structure and check integrity */ +@@ -552,9 +502,7 @@ const char * ZEXPORT gzerror(file, errnum) + } + + /* -- see zlib.h -- */ +-void ZEXPORT gzclearerr(file) +- gzFile file; +-{ ++void ZEXPORT gzclearerr(gzFile file) { + gz_statep state; + + /* get internal structure and check integrity */ +@@ -578,11 +526,7 @@ void ZEXPORT gzclearerr(file) + memory). Simply save the error message as a static string. If there is an + allocation failure constructing the error message, then convert the error to + out of memory. */ +-void ZLIB_INTERNAL gz_error(state, err, msg) +- gz_statep state; +- int err; +- const char *msg; +-{ ++void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) { + /* free previously allocated message and clear */ + if (state->msg != NULL) { + if (state->err != Z_MEM_ERROR) +@@ -619,21 +563,20 @@ void ZLIB_INTERNAL gz_error(state, err, msg) + #endif + } + +-#ifndef INT_MAX + /* portably return maximum value for an int (when limits.h presumed not + available) -- we need to do this to cover cases where 2's complement not + used, since C standard permits 1's complement and sign-bit representations, + otherwise we could just use ((unsigned)-1) >> 1 */ +-unsigned ZLIB_INTERNAL gz_intmax() +-{ +- unsigned p, q; +- +- p = 1; ++unsigned ZLIB_INTERNAL gz_intmax(void) { ++#ifdef INT_MAX ++ return INT_MAX; ++#else ++ unsigned p = 1, q; + do { + q = p; + p <<= 1; + p++; + } while (p > q); + return q >> 1; +-} + #endif ++} +diff --git a/src/zlib/gzread.c b/src/zlib/gzread.c +index 884c9bfe4..4168cbc88 100644 +--- a/src/zlib/gzread.c ++++ b/src/zlib/gzread.c +@@ -5,25 +5,12 @@ + + #include "gzguts.h" + +-/* Local functions */ +-local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *)); +-local int gz_avail OF((gz_statep)); +-local int gz_look OF((gz_statep)); +-local int gz_decomp OF((gz_statep)); +-local int gz_fetch OF((gz_statep)); +-local int gz_skip OF((gz_statep, z_off64_t)); +-local z_size_t gz_read OF((gz_statep, voidp, z_size_t)); +- + /* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from + state->fd, and update state->eof, state->err, and state->msg as appropriate. + This function needs to loop on read(), since read() is not guaranteed to + read the number of bytes requested, depending on the type of descriptor. */ +-local int gz_load(state, buf, len, have) +- gz_statep state; +- unsigned char *buf; +- unsigned len; +- unsigned *have; +-{ ++local int gz_load(gz_statep state, unsigned char *buf, unsigned len, ++ unsigned *have) { + int ret; + unsigned get, max = ((unsigned)-1 >> 2) + 1; + +@@ -53,9 +40,7 @@ local int gz_load(state, buf, len, have) + If strm->avail_in != 0, then the current data is moved to the beginning of + the input buffer, and then the remainder of the buffer is loaded with the + available data from the input file. */ +-local int gz_avail(state) +- gz_statep state; +-{ ++local int gz_avail(gz_statep state) { + unsigned got; + z_streamp strm = &(state->strm); + +@@ -88,9 +73,7 @@ local int gz_avail(state) + case, all further file reads will be directly to either the output buffer or + a user buffer. If decompressing, the inflate state will be initialized. + gz_look() will return 0 on success or -1 on failure. */ +-local int gz_look(state) +- gz_statep state; +-{ ++local int gz_look(gz_statep state) { + z_streamp strm = &(state->strm); + + /* allocate read buffers and inflate memory */ +@@ -157,11 +140,9 @@ local int gz_look(state) + the output buffer is larger than the input buffer, which also assures + space for gzungetc() */ + state->x.next = state->out; +- if (strm->avail_in) { +- memcpy(state->x.next, strm->next_in, strm->avail_in); +- state->x.have = strm->avail_in; +- strm->avail_in = 0; +- } ++ memcpy(state->x.next, strm->next_in, strm->avail_in); ++ state->x.have = strm->avail_in; ++ strm->avail_in = 0; + state->how = COPY; + state->direct = 1; + return 0; +@@ -172,9 +153,7 @@ local int gz_look(state) + data. If the gzip stream completes, state->how is reset to LOOK to look for + the next gzip stream or raw data, once state->x.have is depleted. Returns 0 + on success, -1 on failure. */ +-local int gz_decomp(state) +- gz_statep state; +-{ ++local int gz_decomp(gz_statep state) { + int ret = Z_OK; + unsigned had; + z_streamp strm = &(state->strm); +@@ -226,9 +205,7 @@ local int gz_decomp(state) + looked for to determine whether to copy or decompress. Returns -1 on error, + otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the + end of the input file has been reached and all data has been processed. */ +-local int gz_fetch(state) +- gz_statep state; +-{ ++local int gz_fetch(gz_statep state) { + z_streamp strm = &(state->strm); + + do { +@@ -256,10 +233,7 @@ local int gz_fetch(state) + } + + /* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */ +-local int gz_skip(state, len) +- gz_statep state; +- z_off64_t len; +-{ ++local int gz_skip(gz_statep state, z_off64_t len) { + unsigned n; + + /* skip over len bytes or reach end-of-file, whichever comes first */ +@@ -291,11 +265,7 @@ local int gz_skip(state, len) + input. Return the number of bytes read. If zero is returned, either the + end of file was reached, or there was an error. state->err must be + consulted in that case to determine which. */ +-local z_size_t gz_read(state, buf, len) +- gz_statep state; +- voidp buf; +- z_size_t len; +-{ ++local z_size_t gz_read(gz_statep state, voidp buf, z_size_t len) { + z_size_t got; + unsigned n; + +@@ -372,11 +342,7 @@ local z_size_t gz_read(state, buf, len) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzread(file, buf, len) +- gzFile file; +- voidp buf; +- unsigned len; +-{ ++int ZEXPORT gzread(gzFile file, voidp buf, unsigned len) { + gz_statep state; + + /* get internal structure */ +@@ -408,12 +374,7 @@ int ZEXPORT gzread(file, buf, len) + } + + /* -- see zlib.h -- */ +-z_size_t ZEXPORT gzfread(buf, size, nitems, file) +- voidp buf; +- z_size_t size; +- z_size_t nitems; +- gzFile file; +-{ ++z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file) { + z_size_t len; + gz_statep state; + +@@ -444,9 +405,7 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file) + #else + # undef gzgetc + #endif +-int ZEXPORT gzgetc(file) +- gzFile file; +-{ ++int ZEXPORT gzgetc(gzFile file) { + unsigned char buf[1]; + gz_statep state; + +@@ -471,17 +430,12 @@ int ZEXPORT gzgetc(file) + return gz_read(state, buf, 1) < 1 ? -1 : buf[0]; + } + +-int ZEXPORT gzgetc_(file) +-gzFile file; +-{ ++int ZEXPORT gzgetc_(gzFile file) { + return gzgetc(file); + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzungetc(c, file) +- int c; +- gzFile file; +-{ ++int ZEXPORT gzungetc(int c, gzFile file) { + gz_statep state; + + /* get internal structure */ +@@ -489,6 +443,10 @@ int ZEXPORT gzungetc(c, file) + return -1; + state = (gz_statep)file; + ++ /* in case this was just opened, set up the input buffer */ ++ if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) ++ (void)gz_look(state); ++ + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) +@@ -538,11 +496,7 @@ int ZEXPORT gzungetc(c, file) + } + + /* -- see zlib.h -- */ +-char * ZEXPORT gzgets(file, buf, len) +- gzFile file; +- char *buf; +- int len; +-{ ++char * ZEXPORT gzgets(gzFile file, char *buf, int len) { + unsigned left, n; + char *str; + unsigned char *eol; +@@ -602,9 +556,7 @@ char * ZEXPORT gzgets(file, buf, len) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzdirect(file) +- gzFile file; +-{ ++int ZEXPORT gzdirect(gzFile file) { + gz_statep state; + + /* get internal structure */ +@@ -622,9 +574,7 @@ int ZEXPORT gzdirect(file) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzclose_r(file) +- gzFile file; +-{ ++int ZEXPORT gzclose_r(gzFile file) { + int ret, err; + gz_statep state; + +diff --git a/src/zlib/gzwrite.c b/src/zlib/gzwrite.c +index a8ffc8f53..435b4621b 100644 +--- a/src/zlib/gzwrite.c ++++ b/src/zlib/gzwrite.c +@@ -5,18 +5,10 @@ + + #include "gzguts.h" + +-/* Local functions */ +-local int gz_init OF((gz_statep)); +-local int gz_comp OF((gz_statep, int)); +-local int gz_zero OF((gz_statep, z_off64_t)); +-local z_size_t gz_write OF((gz_statep, voidpc, z_size_t)); +- + /* Initialize state for writing a gzip file. Mark initialization by setting + state->size to non-zero. Return -1 on a memory allocation failure, or 0 on + success. */ +-local int gz_init(state) +- gz_statep state; +-{ ++local int gz_init(gz_statep state) { + int ret; + z_streamp strm = &(state->strm); + +@@ -70,10 +62,7 @@ local int gz_init(state) + deflate() flush value. If flush is Z_FINISH, then the deflate() state is + reset to start a new gzip stream. If gz->direct is true, then simply write + to the output file without compressing, and ignore flush. */ +-local int gz_comp(state, flush) +- gz_statep state; +- int flush; +-{ ++local int gz_comp(gz_statep state, int flush) { + int ret, writ; + unsigned have, put, max = ((unsigned)-1 >> 2) + 1; + z_streamp strm = &(state->strm); +@@ -151,10 +140,7 @@ local int gz_comp(state, flush) + + /* Compress len zeros to output. Return -1 on a write error or memory + allocation failure by gz_comp(), or 0 on success. */ +-local int gz_zero(state, len) +- gz_statep state; +- z_off64_t len; +-{ ++local int gz_zero(gz_statep state, z_off64_t len) { + int first; + unsigned n; + z_streamp strm = &(state->strm); +@@ -184,11 +170,7 @@ local int gz_zero(state, len) + + /* Write len bytes from buf to file. Return the number of bytes written. If + the returned value is less than len, then there was an error. */ +-local z_size_t gz_write(state, buf, len) +- gz_statep state; +- voidpc buf; +- z_size_t len; +-{ ++local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) { + z_size_t put = len; + + /* if len is zero, avoid unnecessary operations */ +@@ -252,11 +234,7 @@ local z_size_t gz_write(state, buf, len) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzwrite(file, buf, len) +- gzFile file; +- voidpc buf; +- unsigned len; +-{ ++int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len) { + gz_statep state; + + /* get internal structure */ +@@ -280,12 +258,8 @@ int ZEXPORT gzwrite(file, buf, len) + } + + /* -- see zlib.h -- */ +-z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) +- voidpc buf; +- z_size_t size; +- z_size_t nitems; +- gzFile file; +-{ ++z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, z_size_t nitems, ++ gzFile file) { + z_size_t len; + gz_statep state; + +@@ -310,10 +284,7 @@ z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzputc(file, c) +- gzFile file; +- int c; +-{ ++int ZEXPORT gzputc(gzFile file, int c) { + unsigned have; + unsigned char buf[1]; + gz_statep state; +@@ -358,10 +329,7 @@ int ZEXPORT gzputc(file, c) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzputs(file, s) +- gzFile file; +- const char *s; +-{ ++int ZEXPORT gzputs(gzFile file, const char *s) { + z_size_t len, put; + gz_statep state; + +@@ -388,8 +356,7 @@ int ZEXPORT gzputs(file, s) + #include + + /* -- see zlib.h -- */ +-int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) +-{ ++int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) { + int len; + unsigned left; + char *next; +@@ -460,8 +427,7 @@ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) + return len; + } + +-int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) +-{ ++int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) { + va_list va; + int ret; + +@@ -474,13 +440,10 @@ int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) + #else /* !STDC && !Z_HAVE_STDARG_H */ + + /* -- see zlib.h -- */ +-int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, +- a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) +- gzFile file; +- const char *format; +- int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, +- a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; +-{ ++int ZEXPORTVA gzprintf(gzFile file, const char *format, int a1, int a2, int a3, ++ int a4, int a5, int a6, int a7, int a8, int a9, int a10, ++ int a11, int a12, int a13, int a14, int a15, int a16, ++ int a17, int a18, int a19, int a20) { + unsigned len, left; + char *next; + gz_statep state; +@@ -562,10 +525,7 @@ int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, + #endif + + /* -- see zlib.h -- */ +-int ZEXPORT gzflush(file, flush) +- gzFile file; +- int flush; +-{ ++int ZEXPORT gzflush(gzFile file, int flush) { + gz_statep state; + + /* get internal structure */ +@@ -594,11 +554,7 @@ int ZEXPORT gzflush(file, flush) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzsetparams(file, level, strategy) +- gzFile file; +- int level; +- int strategy; +-{ ++int ZEXPORT gzsetparams(gzFile file, int level, int strategy) { + gz_statep state; + z_streamp strm; + +@@ -609,7 +565,7 @@ int ZEXPORT gzsetparams(file, level, strategy) + strm = &(state->strm); + + /* check that we're writing and that there's no error */ +- if (state->mode != GZ_WRITE || state->err != Z_OK) ++ if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct) + return Z_STREAM_ERROR; + + /* if no change is requested, then do nothing */ +@@ -636,9 +592,7 @@ int ZEXPORT gzsetparams(file, level, strategy) + } + + /* -- see zlib.h -- */ +-int ZEXPORT gzclose_w(file) +- gzFile file; +-{ ++int ZEXPORT gzclose_w(gzFile file) { + int ret = Z_OK; + gz_statep state; + +diff --git a/src/zlib/infback.c b/src/zlib/infback.c +index a390c58e8..e7b25b307 100644 +--- a/src/zlib/infback.c ++++ b/src/zlib/infback.c +@@ -15,9 +15,6 @@ + #include "inflate.h" + #include "inffast.h" + +-/* function prototypes */ +-local void fixedtables OF((struct inflate_state FAR *state)); +- + /* + strm provides memory allocation functions in zalloc and zfree, or + Z_NULL to use the library memory allocation functions. +@@ -25,13 +22,9 @@ local void fixedtables OF((struct inflate_state FAR *state)); + windowBits is in the range 8..15, and window is a user-supplied + window and output buffer that is 2**windowBits bytes. + */ +-int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size) +-z_streamp strm; +-int windowBits; +-unsigned char FAR *window; +-const char *version; +-int stream_size; +-{ ++int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, ++ unsigned char FAR *window, const char *version, ++ int stream_size) { + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || +@@ -66,6 +59,7 @@ int stream_size; + state->window = window; + state->wnext = 0; + state->whave = 0; ++ state->sane = 1; + return Z_OK; + } + +@@ -79,9 +73,7 @@ int stream_size; + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +-local void fixedtables(state) +-struct inflate_state FAR *state; +-{ ++local void fixedtables(struct inflate_state FAR *state) { + #ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; +@@ -247,13 +239,8 @@ struct inflate_state FAR *state; + inflateBack() can also return Z_STREAM_ERROR if the input parameters + are not correct, i.e. strm is Z_NULL or the state was not initialized. + */ +-int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc) +-z_streamp strm; +-in_func in; +-void FAR *in_desc; +-out_func out; +-void FAR *out_desc; +-{ ++int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, ++ out_func out, void FAR *out_desc) { + struct inflate_state FAR *state; + z_const unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ +@@ -605,33 +592,33 @@ void FAR *out_desc; + break; + + case DONE: +- /* inflate stream terminated properly -- write leftover output */ ++ /* inflate stream terminated properly */ + ret = Z_STREAM_END; +- if (left < state->wsize) { +- if (out(out_desc, state->window, state->wsize - left)) +- ret = Z_BUF_ERROR; +- } + goto inf_leave; + + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + +- default: /* can't happen, but makes compilers happy */ ++ default: ++ /* can't happen, but makes compilers happy */ + ret = Z_STREAM_ERROR; + goto inf_leave; + } + +- /* Return unused input */ ++ /* Write leftover output and return unused input */ + inf_leave: ++ if (left < state->wsize) { ++ if (out(out_desc, state->window, state->wsize - left) && ++ ret == Z_STREAM_END) ++ ret = Z_BUF_ERROR; ++ } + strm->next_in = next; + strm->avail_in = have; + return ret; + } + +-int ZEXPORT inflateBackEnd(strm) +-z_streamp strm; +-{ ++int ZEXPORT inflateBackEnd(z_streamp strm) { + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + ZFREE(strm, strm->state); +diff --git a/src/zlib/inffast.c b/src/zlib/inffast.c +index 1fec7f363..9354676e7 100644 +--- a/src/zlib/inffast.c ++++ b/src/zlib/inffast.c +@@ -47,10 +47,7 @@ + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +-void ZLIB_INTERNAL inflate_fast(strm, start) +-z_streamp strm; +-unsigned start; /* inflate()'s starting value for strm->avail_out */ +-{ ++void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) { + struct inflate_state FAR *state; + z_const unsigned char FAR *in; /* local strm->next_in */ + z_const unsigned char FAR *last; /* have enough input while in < last */ +diff --git a/src/zlib/inffast.h b/src/zlib/inffast.h +index e5c1aa4ca..49c6d156c 100644 +--- a/src/zlib/inffast.h ++++ b/src/zlib/inffast.h +@@ -8,4 +8,4 @@ + subject to change. Applications should only use zlib.h. + */ + +-void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); ++void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start); +diff --git a/src/zlib/inflate.c b/src/zlib/inflate.c +index 7be8c6366..94ecff015 100644 +--- a/src/zlib/inflate.c ++++ b/src/zlib/inflate.c +@@ -91,20 +91,7 @@ + # endif + #endif + +-/* function prototypes */ +-local int inflateStateCheck OF((z_streamp strm)); +-local void fixedtables OF((struct inflate_state FAR *state)); +-local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, +- unsigned copy)); +-#ifdef BUILDFIXED +- void makefixed OF((void)); +-#endif +-local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, +- unsigned len)); +- +-local int inflateStateCheck(strm) +-z_streamp strm; +-{ ++local int inflateStateCheck(z_streamp strm) { + struct inflate_state FAR *state; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) +@@ -116,9 +103,7 @@ z_streamp strm; + return 0; + } + +-int ZEXPORT inflateResetKeep(strm) +-z_streamp strm; +-{ ++int ZEXPORT inflateResetKeep(z_streamp strm) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; +@@ -142,9 +127,7 @@ z_streamp strm; + return Z_OK; + } + +-int ZEXPORT inflateReset(strm) +-z_streamp strm; +-{ ++int ZEXPORT inflateReset(z_streamp strm) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; +@@ -155,10 +138,7 @@ z_streamp strm; + return inflateResetKeep(strm); + } + +-int ZEXPORT inflateReset2(strm, windowBits) +-z_streamp strm; +-int windowBits; +-{ ++int ZEXPORT inflateReset2(z_streamp strm, int windowBits) { + int wrap; + struct inflate_state FAR *state; + +@@ -168,6 +148,8 @@ int windowBits; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { ++ if (windowBits < -15) ++ return Z_STREAM_ERROR; + wrap = 0; + windowBits = -windowBits; + } +@@ -193,12 +175,8 @@ int windowBits; + return inflateReset(strm); + } + +-int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) +-z_streamp strm; +-int windowBits; +-const char *version; +-int stream_size; +-{ ++int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, ++ const char *version, int stream_size) { + int ret; + struct inflate_state FAR *state; + +@@ -237,22 +215,17 @@ int stream_size; + return ret; + } + +-int ZEXPORT inflateInit_(strm, version, stream_size) +-z_streamp strm; +-const char *version; +-int stream_size; +-{ ++int ZEXPORT inflateInit_(z_streamp strm, const char *version, ++ int stream_size) { + return inflateInit2_(strm, DEF_WBITS, version, stream_size); + } + +-int ZEXPORT inflatePrime(strm, bits, value) +-z_streamp strm; +-int bits; +-int value; +-{ ++int ZEXPORT inflatePrime(z_streamp strm, int bits, int value) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; ++ if (bits == 0) ++ return Z_OK; + state = (struct inflate_state FAR *)strm->state; + if (bits < 0) { + state->hold = 0; +@@ -276,9 +249,7 @@ int value; + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +-local void fixedtables(state) +-struct inflate_state FAR *state; +-{ ++local void fixedtables(struct inflate_state FAR *state) { + #ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; +@@ -340,7 +311,7 @@ struct inflate_state FAR *state; + + a.out > inffixed.h + */ +-void makefixed() ++void makefixed(void) + { + unsigned low, size; + struct inflate_state state; +@@ -394,11 +365,7 @@ void makefixed() + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +-local int updatewindow(strm, end, copy) +-z_streamp strm; +-const Bytef *end; +-unsigned copy; +-{ ++local int updatewindow(z_streamp strm, const Bytef *end, unsigned copy) { + struct inflate_state FAR *state; + unsigned dist; + +@@ -620,10 +587,7 @@ unsigned copy; + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +-int ZEXPORT inflate(strm, flush) +-z_streamp strm; +-int flush; +-{ ++int ZEXPORT inflate(z_streamp strm, int flush) { + struct inflate_state FAR *state; + z_const unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ +@@ -764,8 +728,9 @@ int flush; + if (copy > have) copy = have; + if (copy) { + if (state->head != Z_NULL && +- state->head->extra != Z_NULL) { +- len = state->head->extra_len - state->length; ++ state->head->extra != Z_NULL && ++ (len = state->head->extra_len - state->length) < ++ state->head->extra_max) { + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); +@@ -1298,9 +1263,7 @@ int flush; + return ret; + } + +-int ZEXPORT inflateEnd(strm) +-z_streamp strm; +-{ ++int ZEXPORT inflateEnd(z_streamp strm) { + struct inflate_state FAR *state; + if (inflateStateCheck(strm)) + return Z_STREAM_ERROR; +@@ -1312,11 +1275,8 @@ z_streamp strm; + return Z_OK; + } + +-int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength) +-z_streamp strm; +-Bytef *dictionary; +-uInt *dictLength; +-{ ++int ZEXPORT inflateGetDictionary(z_streamp strm, Bytef *dictionary, ++ uInt *dictLength) { + struct inflate_state FAR *state; + + /* check state */ +@@ -1335,11 +1295,8 @@ uInt *dictLength; + return Z_OK; + } + +-int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) +-z_streamp strm; +-const Bytef *dictionary; +-uInt dictLength; +-{ ++int ZEXPORT inflateSetDictionary(z_streamp strm, const Bytef *dictionary, ++ uInt dictLength) { + struct inflate_state FAR *state; + unsigned long dictid; + int ret; +@@ -1370,10 +1327,7 @@ uInt dictLength; + return Z_OK; + } + +-int ZEXPORT inflateGetHeader(strm, head) +-z_streamp strm; +-gz_headerp head; +-{ ++int ZEXPORT inflateGetHeader(z_streamp strm, gz_headerp head) { + struct inflate_state FAR *state; + + /* check state */ +@@ -1398,11 +1352,8 @@ gz_headerp head; + called again with more data and the *have state. *have is initialized to + zero for the first call. + */ +-local unsigned syncsearch(have, buf, len) +-unsigned FAR *have; +-const unsigned char FAR *buf; +-unsigned len; +-{ ++local unsigned syncsearch(unsigned FAR *have, const unsigned char FAR *buf, ++ unsigned len) { + unsigned got; + unsigned next; + +@@ -1421,9 +1372,7 @@ unsigned len; + return next; + } + +-int ZEXPORT inflateSync(strm) +-z_streamp strm; +-{ ++int ZEXPORT inflateSync(z_streamp strm) { + unsigned len; /* number of bytes to look at or looked at */ + int flags; /* temporary to save header status */ + unsigned long in, out; /* temporary to save total_in and total_out */ +@@ -1438,7 +1387,7 @@ z_streamp strm; + /* if first time, start search in bit buffer */ + if (state->mode != SYNC) { + state->mode = SYNC; +- state->hold <<= state->bits & 7; ++ state->hold >>= state->bits & 7; + state->bits -= state->bits & 7; + len = 0; + while (state->bits >= 8) { +@@ -1479,9 +1428,7 @@ z_streamp strm; + block. When decompressing, PPP checks that at the end of input packet, + inflate is waiting for these length bytes. + */ +-int ZEXPORT inflateSyncPoint(strm) +-z_streamp strm; +-{ ++int ZEXPORT inflateSyncPoint(z_streamp strm) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; +@@ -1489,10 +1436,7 @@ z_streamp strm; + return state->mode == STORED && state->bits == 0; + } + +-int ZEXPORT inflateCopy(dest, source) +-z_streamp dest; +-z_streamp source; +-{ ++int ZEXPORT inflateCopy(z_streamp dest, z_streamp source) { + struct inflate_state FAR *state; + struct inflate_state FAR *copy; + unsigned char FAR *window; +@@ -1536,10 +1480,7 @@ z_streamp source; + return Z_OK; + } + +-int ZEXPORT inflateUndermine(strm, subvert) +-z_streamp strm; +-int subvert; +-{ ++int ZEXPORT inflateUndermine(z_streamp strm, int subvert) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; +@@ -1554,10 +1495,7 @@ int subvert; + #endif + } + +-int ZEXPORT inflateValidate(strm, check) +-z_streamp strm; +-int check; +-{ ++int ZEXPORT inflateValidate(z_streamp strm, int check) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; +@@ -1569,9 +1507,7 @@ int check; + return Z_OK; + } + +-long ZEXPORT inflateMark(strm) +-z_streamp strm; +-{ ++long ZEXPORT inflateMark(z_streamp strm) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) +@@ -1582,9 +1518,7 @@ z_streamp strm; + (state->mode == MATCH ? state->was - state->length : 0)); + } + +-unsigned long ZEXPORT inflateCodesUsed(strm) +-z_streamp strm; +-{ ++unsigned long ZEXPORT inflateCodesUsed(z_streamp strm) { + struct inflate_state FAR *state; + if (inflateStateCheck(strm)) return (unsigned long)-1; + state = (struct inflate_state FAR *)strm->state; +diff --git a/src/zlib/inftrees.c b/src/zlib/inftrees.c +index 09462a740..98cfe1644 100644 +--- a/src/zlib/inftrees.c ++++ b/src/zlib/inftrees.c +@@ -1,5 +1,5 @@ + /* inftrees.c -- generate Huffman trees for efficient decoding +- * Copyright (C) 1995-2022 Mark Adler ++ * Copyright (C) 1995-2024 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +@@ -9,7 +9,7 @@ + #define MAXBITS 15 + + const char inflate_copyright[] = +- " inflate 1.2.12 Copyright 1995-2022 Mark Adler "; ++ " inflate 1.3.1 Copyright 1995-2024 Mark Adler "; + /* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot +@@ -29,14 +29,9 @@ const char inflate_copyright[] = + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +-int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work) +-codetype type; +-unsigned short FAR *lens; +-unsigned codes; +-code FAR * FAR *table; +-unsigned FAR *bits; +-unsigned short FAR *work; +-{ ++int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, ++ unsigned codes, code FAR * FAR *table, ++ unsigned FAR *bits, unsigned short FAR *work) { + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ +@@ -62,7 +57,7 @@ unsigned short FAR *work; + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, +- 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202}; ++ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, +diff --git a/src/zlib/inftrees.h b/src/zlib/inftrees.h +index baa53a0b1..396f74b5d 100644 +--- a/src/zlib/inftrees.h ++++ b/src/zlib/inftrees.h +@@ -38,11 +38,11 @@ typedef struct { + /* Maximum size of the dynamic table. The maximum number of code structures is + 1444, which is the sum of 852 for literal/length codes and 592 for distance + codes. These values were found by exhaustive searches using the program +- examples/enough.c found in the zlib distribtution. The arguments to that ++ examples/enough.c found in the zlib distribution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes +- returns returns 852, and "enough 30 6 15" for distance codes returns 592. +- The initial root table size (9 or 6) is found in the fifth argument of the ++ returns 852, and "enough 30 6 15" for distance codes returns 592. The ++ initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in inflate.c and infback.c. If the root table size is + changed, then these maximum sizes would be need to be recalculated and + updated. */ +@@ -57,6 +57,6 @@ typedef enum { + DISTS + } codetype; + +-int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, +- unsigned codes, code FAR * FAR *table, +- unsigned FAR *bits, unsigned short FAR *work)); ++int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, ++ unsigned codes, code FAR * FAR *table, ++ unsigned FAR *bits, unsigned short FAR *work); +diff --git a/src/zlib/trees.c b/src/zlib/trees.c +index f73fd99c3..6a523ef34 100644 +--- a/src/zlib/trees.c ++++ b/src/zlib/trees.c +@@ -1,5 +1,5 @@ + /* trees.c -- output deflated data using Huffman coding +- * Copyright (C) 1995-2021 Jean-loup Gailly ++ * Copyright (C) 1995-2024 Jean-loup Gailly + * detect_data_type() function provided freely by Cosmin Truta, 2006 + * For conditions of distribution and use, see copyright notice in zlib.h + */ +@@ -122,39 +122,116 @@ struct static_tree_desc_s { + int max_length; /* max bit length for the codes */ + }; + +-local const static_tree_desc static_l_desc = ++#ifdef NO_INIT_GLOBAL_POINTERS ++# define TCONST ++#else ++# define TCONST const ++#endif ++ ++local TCONST static_tree_desc static_l_desc = + {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +-local const static_tree_desc static_d_desc = ++local TCONST static_tree_desc static_d_desc = + {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +-local const static_tree_desc static_bl_desc = ++local TCONST static_tree_desc static_bl_desc = + {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + + /* =========================================================================== +- * Local (static) routines in this file. ++ * Output a short LSB first on the stream. ++ * IN assertion: there is enough room in pendingBuf. ++ */ ++#define put_short(s, w) { \ ++ put_byte(s, (uch)((w) & 0xff)); \ ++ put_byte(s, (uch)((ush)(w) >> 8)); \ ++} ++ ++/* =========================================================================== ++ * Reverse the first len bits of a code, using straightforward code (a faster ++ * method would use a table) ++ * IN assertion: 1 <= len <= 15 ++ */ ++local unsigned bi_reverse(unsigned code, int len) { ++ register unsigned res = 0; ++ do { ++ res |= code & 1; ++ code >>= 1, res <<= 1; ++ } while (--len > 0); ++ return res >> 1; ++} ++ ++/* =========================================================================== ++ * Flush the bit buffer, keeping at most 7 bits in it. ++ */ ++local void bi_flush(deflate_state *s) { ++ if (s->bi_valid == 16) { ++ put_short(s, s->bi_buf); ++ s->bi_buf = 0; ++ s->bi_valid = 0; ++ } else if (s->bi_valid >= 8) { ++ put_byte(s, (Byte)s->bi_buf); ++ s->bi_buf >>= 8; ++ s->bi_valid -= 8; ++ } ++} ++ ++/* =========================================================================== ++ * Flush the bit buffer and align the output on a byte boundary ++ */ ++local void bi_windup(deflate_state *s) { ++ if (s->bi_valid > 8) { ++ put_short(s, s->bi_buf); ++ } else if (s->bi_valid > 0) { ++ put_byte(s, (Byte)s->bi_buf); ++ } ++ s->bi_buf = 0; ++ s->bi_valid = 0; ++#ifdef ZLIB_DEBUG ++ s->bits_sent = (s->bits_sent + 7) & ~7; ++#endif ++} ++ ++/* =========================================================================== ++ * Generate the codes for a given tree and bit counts (which need not be ++ * optimal). ++ * IN assertion: the array bl_count contains the bit length statistics for ++ * the given tree and the field len is set for all tree elements. ++ * OUT assertion: the field code is set for all tree elements of non ++ * zero code length. + */ ++local void gen_codes(ct_data *tree, int max_code, ushf *bl_count) { ++ ush next_code[MAX_BITS+1]; /* next code value for each bit length */ ++ unsigned code = 0; /* running code value */ ++ int bits; /* bit index */ ++ int n; /* code index */ + +-local void tr_static_init OF((void)); +-local void init_block OF((deflate_state *s)); +-local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); +-local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); +-local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); +-local void build_tree OF((deflate_state *s, tree_desc *desc)); +-local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); +-local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); +-local int build_bl_tree OF((deflate_state *s)); +-local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, +- int blcodes)); +-local void compress_block OF((deflate_state *s, const ct_data *ltree, +- const ct_data *dtree)); +-local int detect_data_type OF((deflate_state *s)); +-local unsigned bi_reverse OF((unsigned code, int len)); +-local void bi_windup OF((deflate_state *s)); +-local void bi_flush OF((deflate_state *s)); ++ /* The distribution counts are first used to generate the code values ++ * without bit reversal. ++ */ ++ for (bits = 1; bits <= MAX_BITS; bits++) { ++ code = (code + bl_count[bits - 1]) << 1; ++ next_code[bits] = (ush)code; ++ } ++ /* Check that the bit counts in bl_count are consistent. The last code ++ * must be all ones. ++ */ ++ Assert (code + bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1, ++ "inconsistent bit counts"); ++ Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); ++ ++ for (n = 0; n <= max_code; n++) { ++ int len = tree[n].Len; ++ if (len == 0) continue; ++ /* Now reverse the bits */ ++ tree[n].Code = (ush)bi_reverse(next_code[len]++, len); ++ ++ Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", ++ n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len] - 1)); ++ } ++} + + #ifdef GEN_TREES_H +-local void gen_trees_header OF((void)); ++local void gen_trees_header(void); + #endif + + #ifndef ZLIB_DEBUG +@@ -167,33 +244,18 @@ local void gen_trees_header OF((void)); + send_bits(s, tree[c].Code, tree[c].Len); } + #endif + +-/* =========================================================================== +- * Output a short LSB first on the stream. +- * IN assertion: there is enough room in pendingBuf. +- */ +-#define put_short(s, w) { \ +- put_byte(s, (uch)((w) & 0xff)); \ +- put_byte(s, (uch)((ush)(w) >> 8)); \ +-} +- + /* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ + #ifdef ZLIB_DEBUG +-local void send_bits OF((deflate_state *s, int value, int length)); +- +-local void send_bits(s, value, length) +- deflate_state *s; +- int value; /* value to send */ +- int length; /* number of bits */ +-{ ++local void send_bits(deflate_state *s, int value, int length) { + Tracevv((stderr," l %2d v %4x ", length, value)); + Assert(length > 0 && length <= 15, "invalid length"); + s->bits_sent += (ulg)length; + + /* If not enough room in bi_buf, use (valid) bits from bi_buf and +- * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) ++ * (16 - bi_valid) bits from value, leaving (width - (16 - bi_valid)) + * unused bits in value. + */ + if (s->bi_valid > (int)Buf_size - length) { +@@ -229,8 +291,7 @@ local void send_bits(s, value, length) + /* =========================================================================== + * Initialize the various 'constant' tables. + */ +-local void tr_static_init() +-{ ++local void tr_static_init(void) { + #if defined(GEN_TREES_H) || !defined(STDC) + static int static_init_done = 0; + int n; /* iterates over tree elements */ +@@ -256,7 +317,7 @@ local void tr_static_init() + length = 0; + for (code = 0; code < LENGTH_CODES-1; code++) { + base_length[code] = length; +- for (n = 0; n < (1< dist code (0..29) */ + dist = 0; + for (code = 0 ; code < 16; code++) { + base_dist[code] = dist; +- for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ + for ( ; code < D_CODES; code++) { + base_dist[code] = dist << 7; +- for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { ++ for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = (uch)code; + } + } +- Assert (dist == 256, "tr_static_init: 256+dist != 512"); ++ Assert (dist == 256, "tr_static_init: 256 + dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; +@@ -312,7 +373,7 @@ local void tr_static_init() + } + + /* =========================================================================== +- * Genererate the file trees.h describing the static trees. ++ * Generate the file trees.h describing the static trees. + */ + #ifdef GEN_TREES_H + # ifndef ZLIB_DEBUG +@@ -321,10 +382,9 @@ local void tr_static_init() + + # define SEPARATOR(i, last, width) \ + ((i) == (last)? "\n};\n\n" : \ +- ((i) % (width) == (width)-1 ? ",\n" : ", ")) ++ ((i) % (width) == (width) - 1 ? ",\n" : ", ")) + +-void gen_trees_header() +-{ ++void gen_trees_header(void) { + FILE *header = fopen("trees.h", "w"); + int i; + +@@ -373,12 +433,26 @@ void gen_trees_header() + } + #endif /* GEN_TREES_H */ + ++/* =========================================================================== ++ * Initialize a new block. ++ */ ++local void init_block(deflate_state *s) { ++ int n; /* iterates over tree elements */ ++ ++ /* Initialize the trees. */ ++ for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; ++ for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; ++ for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; ++ ++ s->dyn_ltree[END_BLOCK].Freq = 1; ++ s->opt_len = s->static_len = 0L; ++ s->sym_next = s->matches = 0; ++} ++ + /* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +-void ZLIB_INTERNAL _tr_init(s) +- deflate_state *s; +-{ ++void ZLIB_INTERNAL _tr_init(deflate_state *s) { + tr_static_init(); + + s->l_desc.dyn_tree = s->dyn_ltree; +@@ -401,24 +475,6 @@ void ZLIB_INTERNAL _tr_init(s) + init_block(s); + } + +-/* =========================================================================== +- * Initialize a new block. +- */ +-local void init_block(s) +- deflate_state *s; +-{ +- int n; /* iterates over tree elements */ +- +- /* Initialize the trees. */ +- for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; +- for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; +- for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; +- +- s->dyn_ltree[END_BLOCK].Freq = 1; +- s->opt_len = s->static_len = 0L; +- s->sym_next = s->matches = 0; +-} +- + #define SMALLEST 1 + /* Index within the heap array of least frequent node in the Huffman tree */ + +@@ -448,17 +504,13 @@ local void init_block(s) + * when the heap property is re-established (each father smaller than its + * two sons). + */ +-local void pqdownheap(s, tree, k) +- deflate_state *s; +- ct_data *tree; /* the tree to restore */ +- int k; /* node to move down */ +-{ ++local void pqdownheap(deflate_state *s, ct_data *tree, int k) { + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && +- smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { ++ smaller(tree, s->heap[j + 1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ +@@ -483,10 +535,7 @@ local void pqdownheap(s, tree, k) + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +-local void gen_bitlen(s, desc) +- deflate_state *s; +- tree_desc *desc; /* the tree descriptor */ +-{ ++local void gen_bitlen(deflate_state *s, tree_desc *desc) { + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; +@@ -507,7 +556,7 @@ local void gen_bitlen(s, desc) + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + +- for (h = s->heap_max+1; h < HEAP_SIZE; h++) { ++ for (h = s->heap_max + 1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; +@@ -518,7 +567,7 @@ local void gen_bitlen(s, desc) + + s->bl_count[bits]++; + xbits = 0; +- if (n >= base) xbits = extra[n-base]; ++ if (n >= base) xbits = extra[n - base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (unsigned)(bits + xbits); + if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); +@@ -530,10 +579,10 @@ local void gen_bitlen(s, desc) + + /* Find the first bit length which could increase: */ + do { +- bits = max_length-1; ++ bits = max_length - 1; + while (s->bl_count[bits] == 0) bits--; +- s->bl_count[bits]--; /* move one leaf down the tree */ +- s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ ++ s->bl_count[bits]--; /* move one leaf down the tree */ ++ s->bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] +@@ -561,48 +610,9 @@ local void gen_bitlen(s, desc) + } + } + +-/* =========================================================================== +- * Generate the codes for a given tree and bit counts (which need not be +- * optimal). +- * IN assertion: the array bl_count contains the bit length statistics for +- * the given tree and the field len is set for all tree elements. +- * OUT assertion: the field code is set for all tree elements of non +- * zero code length. +- */ +-local void gen_codes (tree, max_code, bl_count) +- ct_data *tree; /* the tree to decorate */ +- int max_code; /* largest code with non zero frequency */ +- ushf *bl_count; /* number of codes at each bit length */ +-{ +- ush next_code[MAX_BITS+1]; /* next code value for each bit length */ +- unsigned code = 0; /* running code value */ +- int bits; /* bit index */ +- int n; /* code index */ +- +- /* The distribution counts are first used to generate the code values +- * without bit reversal. +- */ +- for (bits = 1; bits <= MAX_BITS; bits++) { +- code = (code + bl_count[bits-1]) << 1; +- next_code[bits] = (ush)code; +- } +- /* Check that the bit counts in bl_count are consistent. The last code +- * must be all ones. +- */ +- Assert (code + bl_count[MAX_BITS]-1 == (1< ++#endif + + /* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. +@@ -612,10 +622,7 @@ local void gen_codes (tree, max_code, bl_count) + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +-local void build_tree(s, desc) +- deflate_state *s; +- tree_desc *desc; /* the tree descriptor */ +-{ ++local void build_tree(deflate_state *s, tree_desc *desc) { + ct_data *tree = desc->dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; +@@ -624,7 +631,7 @@ local void build_tree(s, desc) + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in +- * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. ++ * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n + 1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; +@@ -652,7 +659,7 @@ local void build_tree(s, desc) + } + desc->max_code = max_code; + +- /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, ++ /* The elements heap[heap_len/2 + 1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); +@@ -700,11 +707,7 @@ local void build_tree(s, desc) + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +-local void scan_tree (s, tree, max_code) +- deflate_state *s; +- ct_data *tree; /* the tree to be scanned */ +- int max_code; /* and its largest code of non zero frequency */ +-{ ++local void scan_tree(deflate_state *s, ct_data *tree, int max_code) { + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ +@@ -714,10 +717,10 @@ local void scan_tree (s, tree, max_code) + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; +- tree[max_code+1].Len = (ush)0xffff; /* guard */ ++ tree[max_code + 1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { +- curlen = nextlen; nextlen = tree[n+1].Len; ++ curlen = nextlen; nextlen = tree[n + 1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { +@@ -745,11 +748,7 @@ local void scan_tree (s, tree, max_code) + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +-local void send_tree (s, tree, max_code) +- deflate_state *s; +- ct_data *tree; /* the tree to be scanned */ +- int max_code; /* and its largest code of non zero frequency */ +-{ ++local void send_tree(deflate_state *s, ct_data *tree, int max_code) { + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ +@@ -758,11 +757,11 @@ local void send_tree (s, tree, max_code) + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + +- /* tree[max_code+1].Len = -1; */ /* guard already set */ ++ /* tree[max_code + 1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { +- curlen = nextlen; nextlen = tree[n+1].Len; ++ curlen = nextlen; nextlen = tree[n + 1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { +@@ -773,13 +772,13 @@ local void send_tree (s, tree, max_code) + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); +- send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); ++ send_code(s, REP_3_6, s->bl_tree); send_bits(s, count - 3, 2); + + } else if (count <= 10) { +- send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); ++ send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count - 3, 3); + + } else { +- send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); ++ send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count - 11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { +@@ -796,9 +795,7 @@ local void send_tree (s, tree, max_code) + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +-local int build_bl_tree(s) +- deflate_state *s; +-{ ++local int build_bl_tree(deflate_state *s) { + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ +@@ -807,8 +804,8 @@ local int build_bl_tree(s) + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); +- /* opt_len now includes the length of the tree representations, except +- * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. ++ /* opt_len now includes the length of the tree representations, except the ++ * lengths of the bit lengths codes and the 5 + 5 + 4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format +@@ -819,7 +816,7 @@ local int build_bl_tree(s) + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ +- s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4; ++ s->opt_len += 3*((ulg)max_blindex + 1) + 5 + 5 + 4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + +@@ -831,42 +828,36 @@ local int build_bl_tree(s) + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +-local void send_all_trees(s, lcodes, dcodes, blcodes) +- deflate_state *s; +- int lcodes, dcodes, blcodes; /* number of codes for each tree */ +-{ ++local void send_all_trees(deflate_state *s, int lcodes, int dcodes, ++ int blcodes) { + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); +- send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ +- send_bits(s, dcodes-1, 5); +- send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ ++ send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ ++ send_bits(s, dcodes - 1, 5); ++ send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + +- send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ ++ send_tree(s, (ct_data *)s->dyn_ltree, lcodes - 1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + +- send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ ++ send_tree(s, (ct_data *)s->dyn_dtree, dcodes - 1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); + } + + /* =========================================================================== + * Send a stored block + */ +-void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) +- deflate_state *s; +- charf *buf; /* input block */ +- ulg stored_len; /* length of input block */ +- int last; /* one if this is the last block for a file */ +-{ +- send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ ++void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, ++ ulg stored_len, int last) { ++ send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */ + bi_windup(s); /* align on byte boundary */ + put_short(s, (ush)stored_len); + put_short(s, (ush)~stored_len); +@@ -877,16 +868,14 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; + s->bits_sent += 2*16; +- s->bits_sent += stored_len<<3; ++ s->bits_sent += stored_len << 3; + #endif + } + + /* =========================================================================== + * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) + */ +-void ZLIB_INTERNAL _tr_flush_bits(s) +- deflate_state *s; +-{ ++void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s) { + bi_flush(s); + } + +@@ -894,9 +883,7 @@ void ZLIB_INTERNAL _tr_flush_bits(s) + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +-void ZLIB_INTERNAL _tr_align(s) +- deflate_state *s; +-{ ++void ZLIB_INTERNAL _tr_align(deflate_state *s) { + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); + #ifdef ZLIB_DEBUG +@@ -905,16 +892,108 @@ void ZLIB_INTERNAL _tr_align(s) + bi_flush(s); + } + ++/* =========================================================================== ++ * Send the block data compressed using the given Huffman trees ++ */ ++local void compress_block(deflate_state *s, const ct_data *ltree, ++ const ct_data *dtree) { ++ unsigned dist; /* distance of matched string */ ++ int lc; /* match length or unmatched char (if dist == 0) */ ++ unsigned sx = 0; /* running index in symbol buffers */ ++ unsigned code; /* the code to send */ ++ int extra; /* number of extra bits to send */ ++ ++ if (s->sym_next != 0) do { ++#ifdef LIT_MEM ++ dist = s->d_buf[sx]; ++ lc = s->l_buf[sx++]; ++#else ++ dist = s->sym_buf[sx++] & 0xff; ++ dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; ++ lc = s->sym_buf[sx++]; ++#endif ++ if (dist == 0) { ++ send_code(s, lc, ltree); /* send a literal byte */ ++ Tracecv(isgraph(lc), (stderr," '%c' ", lc)); ++ } else { ++ /* Here, lc is the match length - MIN_MATCH */ ++ code = _length_code[lc]; ++ send_code(s, code + LITERALS + 1, ltree); /* send length code */ ++ extra = extra_lbits[code]; ++ if (extra != 0) { ++ lc -= base_length[code]; ++ send_bits(s, lc, extra); /* send the extra length bits */ ++ } ++ dist--; /* dist is now the match distance - 1 */ ++ code = d_code(dist); ++ Assert (code < D_CODES, "bad d_code"); ++ ++ send_code(s, code, dtree); /* send the distance code */ ++ extra = extra_dbits[code]; ++ if (extra != 0) { ++ dist -= (unsigned)base_dist[code]; ++ send_bits(s, dist, extra); /* send the extra distance bits */ ++ } ++ } /* literal or match pair ? */ ++ ++ /* Check for no overlay of pending_buf on needed symbols */ ++#ifdef LIT_MEM ++ Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow"); ++#else ++ Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); ++#endif ++ ++ } while (sx < s->sym_next); ++ ++ send_code(s, END_BLOCK, ltree); ++} ++ ++/* =========================================================================== ++ * Check if the data type is TEXT or BINARY, using the following algorithm: ++ * - TEXT if the two conditions below are satisfied: ++ * a) There are no non-portable control characters belonging to the ++ * "block list" (0..6, 14..25, 28..31). ++ * b) There is at least one printable character belonging to the ++ * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). ++ * - BINARY otherwise. ++ * - The following partially-portable control characters form a ++ * "gray list" that is ignored in this detection algorithm: ++ * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). ++ * IN assertion: the fields Freq of dyn_ltree are set. ++ */ ++local int detect_data_type(deflate_state *s) { ++ /* block_mask is the bit mask of block-listed bytes ++ * set bits 0..6, 14..25, and 28..31 ++ * 0xf3ffc07f = binary 11110011111111111100000001111111 ++ */ ++ unsigned long block_mask = 0xf3ffc07fUL; ++ int n; ++ ++ /* Check for non-textual ("block-listed") bytes. */ ++ for (n = 0; n <= 31; n++, block_mask >>= 1) ++ if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) ++ return Z_BINARY; ++ ++ /* Check for textual ("allow-listed") bytes. */ ++ if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 ++ || s->dyn_ltree[13].Freq != 0) ++ return Z_TEXT; ++ for (n = 32; n < LITERALS; n++) ++ if (s->dyn_ltree[n].Freq != 0) ++ return Z_TEXT; ++ ++ /* There are no "block-listed" or "allow-listed" bytes: ++ * this stream either is empty or has tolerated ("gray-listed") bytes only. ++ */ ++ return Z_BINARY; ++} ++ + /* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and write out the encoded block. + */ +-void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) +- deflate_state *s; +- charf *buf; /* input block, or NULL if too old */ +- ulg stored_len; /* length of input block */ +- int last; /* one if this is the last block for a file */ +-{ ++void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, ++ ulg stored_len, int last) { + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + +@@ -943,14 +1022,17 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ +- opt_lenb = (s->opt_len+3+7)>>3; +- static_lenb = (s->static_len+3+7)>>3; ++ opt_lenb = (s->opt_len + 3 + 7) >> 3; ++ static_lenb = (s->static_len + 3 + 7) >> 3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->sym_next / 3)); + +- if (static_lenb <= opt_lenb) opt_lenb = static_lenb; ++#ifndef FORCE_STATIC ++ if (static_lenb <= opt_lenb || s->strategy == Z_FIXED) ++#endif ++ opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); +@@ -960,7 +1042,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) + #ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ + #else +- if (stored_len+4 <= opt_lenb && buf != (char*)0) { ++ if (stored_len + 4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ + #endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. +@@ -971,21 +1053,17 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) + */ + _tr_stored_block(s, buf, stored_len, last); + +-#ifdef FORCE_STATIC +- } else if (static_lenb >= 0) { /* force static trees */ +-#else +- } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { +-#endif +- send_bits(s, (STATIC_TREES<<1)+last, 3); ++ } else if (static_lenb == opt_lenb) { ++ send_bits(s, (STATIC_TREES<<1) + last, 3); + compress_block(s, (const ct_data *)static_ltree, + (const ct_data *)static_dtree); + #ifdef ZLIB_DEBUG + s->compressed_len += 3 + s->static_len; + #endif + } else { +- send_bits(s, (DYN_TREES<<1)+last, 3); +- send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, +- max_blindex+1); ++ send_bits(s, (DYN_TREES<<1) + last, 3); ++ send_all_trees(s, s->l_desc.max_code + 1, s->d_desc.max_code + 1, ++ max_blindex + 1); + compress_block(s, (const ct_data *)s->dyn_ltree, + (const ct_data *)s->dyn_dtree); + #ifdef ZLIB_DEBUG +@@ -1004,22 +1082,23 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) + s->compressed_len += 7; /* align on byte boundary */ + #endif + } +- Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, +- s->compressed_len-7*last)); ++ Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len >> 3, ++ s->compressed_len - 7*last)); + } + + /* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +-int ZLIB_INTERNAL _tr_tally (s, dist, lc) +- deflate_state *s; +- unsigned dist; /* distance of matched string */ +- unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +-{ +- s->sym_buf[s->sym_next++] = dist; +- s->sym_buf[s->sym_next++] = dist >> 8; +- s->sym_buf[s->sym_next++] = lc; ++int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc) { ++#ifdef LIT_MEM ++ s->d_buf[s->sym_next] = (ush)dist; ++ s->l_buf[s->sym_next++] = (uch)lc; ++#else ++ s->sym_buf[s->sym_next++] = (uch)dist; ++ s->sym_buf[s->sym_next++] = (uch)(dist >> 8); ++ s->sym_buf[s->sym_next++] = (uch)lc; ++#endif + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; +@@ -1031,152 +1110,8 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) + (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + +- s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; ++ s->dyn_ltree[_length_code[lc] + LITERALS + 1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } + return (s->sym_next == s->sym_end); + } +- +-/* =========================================================================== +- * Send the block data compressed using the given Huffman trees +- */ +-local void compress_block(s, ltree, dtree) +- deflate_state *s; +- const ct_data *ltree; /* literal tree */ +- const ct_data *dtree; /* distance tree */ +-{ +- unsigned dist; /* distance of matched string */ +- int lc; /* match length or unmatched char (if dist == 0) */ +- unsigned sx = 0; /* running index in sym_buf */ +- unsigned code; /* the code to send */ +- int extra; /* number of extra bits to send */ +- +- if (s->sym_next != 0) do { +- dist = s->sym_buf[sx++] & 0xff; +- dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; +- lc = s->sym_buf[sx++]; +- if (dist == 0) { +- send_code(s, lc, ltree); /* send a literal byte */ +- Tracecv(isgraph(lc), (stderr," '%c' ", lc)); +- } else { +- /* Here, lc is the match length - MIN_MATCH */ +- code = _length_code[lc]; +- send_code(s, code+LITERALS+1, ltree); /* send the length code */ +- extra = extra_lbits[code]; +- if (extra != 0) { +- lc -= base_length[code]; +- send_bits(s, lc, extra); /* send the extra length bits */ +- } +- dist--; /* dist is now the match distance - 1 */ +- code = d_code(dist); +- Assert (code < D_CODES, "bad d_code"); +- +- send_code(s, code, dtree); /* send the distance code */ +- extra = extra_dbits[code]; +- if (extra != 0) { +- dist -= (unsigned)base_dist[code]; +- send_bits(s, dist, extra); /* send the extra distance bits */ +- } +- } /* literal or match pair ? */ +- +- /* Check that the overlay between pending_buf and sym_buf is ok: */ +- Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); +- +- } while (sx < s->sym_next); +- +- send_code(s, END_BLOCK, ltree); +-} +- +-/* =========================================================================== +- * Check if the data type is TEXT or BINARY, using the following algorithm: +- * - TEXT if the two conditions below are satisfied: +- * a) There are no non-portable control characters belonging to the +- * "block list" (0..6, 14..25, 28..31). +- * b) There is at least one printable character belonging to the +- * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). +- * - BINARY otherwise. +- * - The following partially-portable control characters form a +- * "gray list" that is ignored in this detection algorithm: +- * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). +- * IN assertion: the fields Freq of dyn_ltree are set. +- */ +-local int detect_data_type(s) +- deflate_state *s; +-{ +- /* block_mask is the bit mask of block-listed bytes +- * set bits 0..6, 14..25, and 28..31 +- * 0xf3ffc07f = binary 11110011111111111100000001111111 +- */ +- unsigned long block_mask = 0xf3ffc07fUL; +- int n; +- +- /* Check for non-textual ("block-listed") bytes. */ +- for (n = 0; n <= 31; n++, block_mask >>= 1) +- if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) +- return Z_BINARY; +- +- /* Check for textual ("allow-listed") bytes. */ +- if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 +- || s->dyn_ltree[13].Freq != 0) +- return Z_TEXT; +- for (n = 32; n < LITERALS; n++) +- if (s->dyn_ltree[n].Freq != 0) +- return Z_TEXT; +- +- /* There are no "block-listed" or "allow-listed" bytes: +- * this stream either is empty or has tolerated ("gray-listed") bytes only. +- */ +- return Z_BINARY; +-} +- +-/* =========================================================================== +- * Reverse the first len bits of a code, using straightforward code (a faster +- * method would use a table) +- * IN assertion: 1 <= len <= 15 +- */ +-local unsigned bi_reverse(code, len) +- unsigned code; /* the value to invert */ +- int len; /* its bit length */ +-{ +- register unsigned res = 0; +- do { +- res |= code & 1; +- code >>= 1, res <<= 1; +- } while (--len > 0); +- return res >> 1; +-} +- +-/* =========================================================================== +- * Flush the bit buffer, keeping at most 7 bits in it. +- */ +-local void bi_flush(s) +- deflate_state *s; +-{ +- if (s->bi_valid == 16) { +- put_short(s, s->bi_buf); +- s->bi_buf = 0; +- s->bi_valid = 0; +- } else if (s->bi_valid >= 8) { +- put_byte(s, (Byte)s->bi_buf); +- s->bi_buf >>= 8; +- s->bi_valid -= 8; +- } +-} +- +-/* =========================================================================== +- * Flush the bit buffer and align the output on a byte boundary +- */ +-local void bi_windup(s) +- deflate_state *s; +-{ +- if (s->bi_valid > 8) { +- put_short(s, s->bi_buf); +- } else if (s->bi_valid > 0) { +- put_byte(s, (Byte)s->bi_buf); +- } +- s->bi_buf = 0; +- s->bi_valid = 0; +-#ifdef ZLIB_DEBUG +- s->bits_sent = (s->bits_sent+7) & ~7; +-#endif +-} +diff --git a/src/zlib/uncompr.c b/src/zlib/uncompr.c +index f03a1a865..5e256663b 100644 +--- a/src/zlib/uncompr.c ++++ b/src/zlib/uncompr.c +@@ -24,12 +24,8 @@ + Z_DATA_ERROR if the input data was corrupted, including if the input data is + an incomplete zlib stream. + */ +-int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) +- Bytef *dest; +- uLongf *destLen; +- const Bytef *source; +- uLong *sourceLen; +-{ ++int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, ++ uLong *sourceLen) { + z_stream stream; + int err; + const uInt max = (uInt)-1; +@@ -83,11 +79,7 @@ int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) + err; + } + +-int ZEXPORT uncompress (dest, destLen, source, sourceLen) +- Bytef *dest; +- uLongf *destLen; +- const Bytef *source; +- uLong sourceLen; +-{ ++int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, ++ uLong sourceLen) { + return uncompress2(dest, destLen, source, &sourceLen); + } +diff --git a/src/zlib/zconf.h b/src/zlib/zconf.h +index 5e1d68a00..62adc8d84 100644 +--- a/src/zlib/zconf.h ++++ b/src/zlib/zconf.h +@@ -1,5 +1,5 @@ + /* zconf.h -- configuration of the zlib compression library +- * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler ++ * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +@@ -38,6 +38,9 @@ + # define crc32 z_crc32 + # define crc32_combine z_crc32_combine + # define crc32_combine64 z_crc32_combine64 ++# define crc32_combine_gen z_crc32_combine_gen ++# define crc32_combine_gen64 z_crc32_combine_gen64 ++# define crc32_combine_op z_crc32_combine_op + # define crc32_z z_crc32_z + # define deflate z_deflate + # define deflateBound z_deflateBound +@@ -238,7 +241,11 @@ + #endif + + #ifdef Z_SOLO +- typedef unsigned long z_size_t; ++# ifdef _WIN64 ++ typedef unsigned long long z_size_t; ++# else ++ typedef unsigned long z_size_t; ++# endif + #else + # define z_longlong long long + # if defined(NO_SIZE_T) +@@ -293,14 +300,6 @@ + # endif + #endif + +-#ifndef Z_ARG /* function prototypes for stdarg */ +-# if defined(STDC) || defined(Z_HAVE_STDARG_H) +-# define Z_ARG(args) args +-# else +-# define Z_ARG(args) () +-# endif +-#endif +- + /* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have +@@ -349,6 +348,9 @@ + # ifdef FAR + # undef FAR + # endif ++# ifndef WIN32_LEAN_AND_MEAN ++# define WIN32_LEAN_AND_MEAN ++# endif + # include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +@@ -467,11 +469,18 @@ typedef uLong FAR uLongf; + # undef _LARGEFILE64_SOURCE + #endif + +-#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) +-# define Z_HAVE_UNISTD_H ++#ifndef Z_HAVE_UNISTD_H ++# ifdef __WATCOMC__ ++# define Z_HAVE_UNISTD_H ++# endif ++#endif ++#ifndef Z_HAVE_UNISTD_H ++# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) ++# define Z_HAVE_UNISTD_H ++# endif + #endif + #ifndef Z_SOLO +-# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) ++# if defined(Z_HAVE_UNISTD_H) + # include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ + # ifdef VMS + # include /* for off_t */ +@@ -507,7 +516,7 @@ typedef uLong FAR uLongf; + #if !defined(_WIN32) && defined(Z_LARGE64) + # define z_off64_t off64_t + #else +-# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) ++# if defined(_WIN32) && !defined(__GNUC__) + # define z_off64_t __int64 + # else + # define z_off64_t z_off_t +diff --git a/src/zlib/zlib.h b/src/zlib/zlib.h +index 4a98e38bf..8d4b932ea 100644 +--- a/src/zlib/zlib.h ++++ b/src/zlib/zlib.h +@@ -1,7 +1,7 @@ + /* zlib.h -- interface of the 'zlib' general purpose compression library +- version 1.2.12, March 11th, 2022 ++ version 1.3.1, January 22nd, 2024 + +- Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler ++ Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages +@@ -37,11 +37,11 @@ + extern "C" { + #endif + +-#define ZLIB_VERSION "1.2.12" +-#define ZLIB_VERNUM 0x12c0 ++#define ZLIB_VERSION "1.3.1" ++#define ZLIB_VERNUM 0x1310 + #define ZLIB_VER_MAJOR 1 +-#define ZLIB_VER_MINOR 2 +-#define ZLIB_VER_REVISION 12 ++#define ZLIB_VER_MINOR 3 ++#define ZLIB_VER_REVISION 1 + #define ZLIB_VER_SUBREVISION 0 + + /* +@@ -78,8 +78,8 @@ extern "C" { + even in the case of corrupted input. + */ + +-typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +-typedef void (*free_func) OF((voidpf opaque, voidpf address)); ++typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); ++typedef void (*free_func)(voidpf opaque, voidpf address); + + struct internal_state; + +@@ -217,7 +217,7 @@ typedef gz_header FAR *gz_headerp; + + /* basic functions */ + +-ZEXTERN const char * ZEXPORT zlibVersion OF((void)); ++ZEXTERN const char * ZEXPORT zlibVersion(void); + /* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check +@@ -225,12 +225,12 @@ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); + */ + + /* +-ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); ++ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default +- allocation functions. ++ allocation functions. total_in, total_out, adler, and msg are initialized. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at all +@@ -247,7 +247,7 @@ ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + */ + + +-ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); ++ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); + /* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce +@@ -276,7 +276,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. See deflatePending(), +- which can be used if desired to determine whether or not there is more ouput ++ which can be used if desired to determine whether or not there is more output + in that case. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to +@@ -320,8 +320,8 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that +- avail_out is greater than six to avoid repeated flush markers due to +- avail_out == 0 on return. ++ avail_out is greater than six when the flush marker begins, in order to avoid ++ repeated flush markers upon calling deflate() again when avail_out == 0. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there was +@@ -360,7 +360,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); + */ + + +-ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); ++ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); + /* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending +@@ -375,7 +375,7 @@ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); + + + /* +-ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); ++ZEXTERN int ZEXPORT inflateInit(z_streamp strm); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by +@@ -383,7 +383,8 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates +- them to use default allocation functions. ++ them to use default allocation functions. total_in, total_out, adler, and ++ msg are initialized. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the +@@ -397,7 +398,7 @@ ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + */ + + +-ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); ++ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); + /* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce +@@ -517,7 +518,7 @@ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); + */ + + +-ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); ++ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); + /* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending +@@ -535,12 +536,12 @@ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); + */ + + /* +-ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, +- int level, +- int method, +- int windowBits, +- int memLevel, +- int strategy)); ++ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, ++ int level, ++ int method, ++ int windowBits, ++ int memLevel, ++ int strategy); + + This is another version of deflateInit with more compression options. The + fields zalloc, zfree and opaque must be initialized before by the caller. +@@ -607,9 +608,9 @@ ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + compression: this will be done by deflate(). + */ + +-ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, +- const Bytef *dictionary, +- uInt dictLength)); ++ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, ++ const Bytef *dictionary, ++ uInt dictLength); + /* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. When using the zlib format, this +@@ -651,16 +652,16 @@ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + not perform any compression: this will be done by deflate(). + */ + +-ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, +- Bytef *dictionary, +- uInt *dictLength)); ++ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, ++ Bytef *dictionary, ++ uInt *dictLength); + /* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. +- Similary, if dictLength is Z_NULL, then it is not set. ++ Similarly, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up +@@ -673,8 +674,8 @@ ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, + stream state is inconsistent. + */ + +-ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, +- z_streamp source)); ++ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, ++ z_streamp source); + /* + Sets the destination stream as a complete copy of the source stream. + +@@ -691,20 +692,20 @@ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + destination. + */ + +-ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); ++ZEXTERN int ZEXPORT deflateReset(z_streamp strm); + /* + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been +- set unchanged. ++ set unchanged. total_in, total_out, adler, and msg are initialized. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). + */ + +-ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, +- int level, +- int strategy)); ++ZEXTERN int ZEXPORT deflateParams(z_streamp strm, ++ int level, ++ int strategy); + /* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2(). This can be +@@ -729,7 +730,7 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be +- applied to the the data compressed after deflateParams(). ++ applied to the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if +@@ -740,11 +741,11 @@ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + retried with more output space. + */ + +-ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, +- int good_length, +- int max_lazy, +- int nice_length, +- int max_chain)); ++ZEXTERN int ZEXPORT deflateTune(z_streamp strm, ++ int good_length, ++ int max_lazy, ++ int nice_length, ++ int max_chain); + /* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for +@@ -757,8 +758,8 @@ ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +-ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, +- uLong sourceLen)); ++ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, ++ uLong sourceLen); + /* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or +@@ -772,9 +773,9 @@ ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + than Z_FINISH or Z_NO_FLUSH are used. + */ + +-ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, +- unsigned *pending, +- int *bits)); ++ZEXTERN int ZEXPORT deflatePending(z_streamp strm, ++ unsigned *pending, ++ int *bits); + /* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not +@@ -787,9 +788,9 @@ ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, + stream state was inconsistent. + */ + +-ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, +- int bits, +- int value)); ++ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, ++ int bits, ++ int value); + /* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits +@@ -804,8 +805,8 @@ ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + source stream state was inconsistent. + */ + +-ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, +- gz_headerp head)); ++ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, ++ gz_headerp head); + /* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called +@@ -821,16 +822,17 @@ ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, +- the time set to zero, and os set to 255, with no extra, name, or comment +- fields. The gzip header is returned to the default state by deflateReset(). ++ the time set to zero, and os set to the current operating system, with no ++ extra, name, or comment fields. The gzip header is returned to the default ++ state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + + /* +-ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, +- int windowBits)); ++ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, ++ int windowBits); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized +@@ -883,9 +885,9 @@ ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + deferred until inflate() is called. + */ + +-ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, +- const Bytef *dictionary, +- uInt dictLength)); ++ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, ++ const Bytef *dictionary, ++ uInt dictLength); + /* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, +@@ -906,22 +908,22 @@ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + inflate(). + */ + +-ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, +- Bytef *dictionary, +- uInt *dictLength)); ++ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, ++ Bytef *dictionary, ++ uInt *dictLength); + /* + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. +- Similary, if dictLength is Z_NULL, then it is not set. ++ Similarly, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. + */ + +-ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); ++ZEXTERN int ZEXPORT inflateSync(z_streamp strm); + /* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all +@@ -934,14 +936,14 @@ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. +- In the success case, the application may save the current current value of +- total_in which indicates where valid compressed data was found. In the +- error case, the application may repeatedly call inflateSync, providing more +- input each time, until success or end of the input data. ++ In the success case, the application may save the current value of total_in ++ which indicates where valid compressed data was found. In the error case, ++ the application may repeatedly call inflateSync, providing more input each ++ time, until success or end of the input data. + */ + +-ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, +- z_streamp source)); ++ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, ++ z_streamp source); + /* + Sets the destination stream as a complete copy of the source stream. + +@@ -956,18 +958,19 @@ ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + destination. + */ + +-ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); ++ZEXTERN int ZEXPORT inflateReset(z_streamp strm); + /* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. ++ total_in, total_out, adler, and msg are initialized. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). + */ + +-ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, +- int windowBits)); ++ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, ++ int windowBits); + /* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted +@@ -980,9 +983,9 @@ ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, + the windowBits parameter is invalid. + */ + +-ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, +- int bits, +- int value)); ++ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, ++ int bits, ++ int value); + /* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the +@@ -1001,7 +1004,7 @@ ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + stream state was inconsistent. + */ + +-ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); ++ZEXTERN long ZEXPORT inflateMark(z_streamp strm); + /* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the +@@ -1029,8 +1032,8 @@ ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); + source stream state was inconsistent. + */ + +-ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, +- gz_headerp head)); ++ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, ++ gz_headerp head); + /* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after +@@ -1070,8 +1073,8 @@ ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + */ + + /* +-ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, +- unsigned char FAR *window)); ++ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, ++ unsigned char FAR *window); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized +@@ -1091,13 +1094,13 @@ ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + the version of the header file. + */ + +-typedef unsigned (*in_func) OF((void FAR *, +- z_const unsigned char FAR * FAR *)); +-typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); ++typedef unsigned (*in_func)(void FAR *, ++ z_const unsigned char FAR * FAR *); ++typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); + +-ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, +- in_func in, void FAR *in_desc, +- out_func out, void FAR *out_desc)); ++ZEXTERN int ZEXPORT inflateBack(z_streamp strm, ++ in_func in, void FAR *in_desc, ++ out_func out, void FAR *out_desc); + /* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is potentially more efficient than +@@ -1165,7 +1168,7 @@ ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + cannot return Z_OK. + */ + +-ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); ++ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm); + /* + All memory allocated by inflateBackInit() is freed. + +@@ -1173,7 +1176,7 @@ ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); + state was inconsistent. + */ + +-ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); ++ZEXTERN uLong ZEXPORT zlibCompileFlags(void); + /* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: +@@ -1226,8 +1229,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); + you need special options. + */ + +-ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, +- const Bytef *source, uLong sourceLen)); ++ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, ++ const Bytef *source, uLong sourceLen); + /* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size +@@ -1241,9 +1244,9 @@ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + buffer. + */ + +-ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, +- const Bytef *source, uLong sourceLen, +- int level)); ++ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, ++ const Bytef *source, uLong sourceLen, ++ int level); + /* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte +@@ -1257,15 +1260,15 @@ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + Z_STREAM_ERROR if the level parameter is invalid. + */ + +-ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); ++ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); + /* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. + */ + +-ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, +- const Bytef *source, uLong sourceLen)); ++ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, ++ const Bytef *source, uLong sourceLen); + /* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size +@@ -1282,8 +1285,8 @@ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + buffer with the uncompressed data up to that point. + */ + +-ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, +- const Bytef *source, uLong *sourceLen)); ++ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, ++ const Bytef *source, uLong *sourceLen); + /* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of +@@ -1302,7 +1305,7 @@ ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, + typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ + + /* +-ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); ++ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); + + Open the gzip (.gz) file at path for reading and decompressing, or + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") +@@ -1339,7 +1342,7 @@ ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); + file could not be opened. + */ + +-ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); ++ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); + /* + Associate a gzFile with the file descriptor fd. File descriptors are + obtained from calls like open, dup, creat, pipe or fileno (if the file has +@@ -1362,7 +1365,7 @@ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); + will not detect if fd is invalid (unless fd is -1). + */ + +-ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); ++ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size); + /* + Set the internal buffer size used by this library's functions for file to + size. The default buffer size is 8192 bytes. This function must be called +@@ -1378,7 +1381,7 @@ ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); + too late. + */ + +-ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); ++ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy); + /* + Dynamically update the compression level and strategy for file. See the + description of deflateInit2 for the meaning of these parameters. Previously +@@ -1389,7 +1392,7 @@ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); + or Z_MEM_ERROR if there is a memory allocation error. + */ + +-ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); ++ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len); + /* + Read and decompress up to len uncompressed bytes from file into buf. If + the input file is not in gzip format, gzread copies the given number of +@@ -1419,8 +1422,8 @@ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); + Z_STREAM_ERROR. + */ + +-ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, +- gzFile file)); ++ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, ++ gzFile file); + /* + Read and decompress up to nitems items of size size from file into buf, + otherwise operating as gzread() does. This duplicates the interface of +@@ -1437,22 +1440,22 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a +- multiple of size, then the final partial item is nevetheless read into buf ++ multiple of size, then the final partial item is nevertheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as the behavior of fread() implementations in common libraries, + but it prevents the direct use of gzfread() to read a concurrently written +- file, reseting and retrying on end-of-file, when size is not 1. ++ file, resetting and retrying on end-of-file, when size is not 1. + */ + +-ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); ++ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); + /* + Compress and write the len uncompressed bytes at buf to file. gzwrite + returns the number of uncompressed bytes written or 0 in case of error. + */ + +-ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, +- z_size_t nitems, gzFile file)); ++ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, ++ z_size_t nitems, gzFile file); + /* + Compress and write nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If +@@ -1465,7 +1468,7 @@ ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, + is returned, and the error state is set to Z_STREAM_ERROR. + */ + +-ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); ++ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); + /* + Convert, format, compress, and write the arguments (...) to file under + control of the string format, as in fprintf. gzprintf returns the number of +@@ -1480,7 +1483,7 @@ ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); + This can be determined using zlibCompileFlags(). + */ + +-ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); ++ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); + /* + Compress and write the given null-terminated string s to file, excluding + the terminating null character. +@@ -1488,7 +1491,7 @@ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); + gzputs returns the number of characters written, or -1 in case of error. + */ + +-ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); ++ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); + /* + Read and decompress bytes from file into buf, until len-1 characters are + read, or until a newline character is read and transferred to buf, or an +@@ -1502,13 +1505,13 @@ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); + buf are indeterminate. + */ + +-ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); ++ZEXTERN int ZEXPORT gzputc(gzFile file, int c); + /* + Compress and write c, converted to an unsigned char, into file. gzputc + returns the value that was written, or -1 in case of error. + */ + +-ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); ++ZEXTERN int ZEXPORT gzgetc(gzFile file); + /* + Read and decompress one byte from file. gzgetc returns this byte or -1 + in case of end of file or error. This is implemented as a macro for speed. +@@ -1517,7 +1520,7 @@ ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); + points to has been clobbered or not. + */ + +-ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); ++ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); + /* + Push c back onto the stream for file to be read as the first character on + the next read. At least one character of push-back is always allowed. +@@ -1529,7 +1532,7 @@ ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); + gzseek() or gzrewind(). + */ + +-ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); ++ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); + /* + Flush all pending output to file. The parameter flush is as in the + deflate() function. The return value is the zlib error number (see function +@@ -1545,8 +1548,8 @@ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); + */ + + /* +-ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, +- z_off_t offset, int whence)); ++ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, ++ z_off_t offset, int whence); + + Set the starting position to offset relative to whence for the next gzread + or gzwrite on file. The offset represents a number of bytes in the +@@ -1564,7 +1567,7 @@ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + would be before the current position. + */ + +-ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); ++ZEXTERN int ZEXPORT gzrewind(gzFile file); + /* + Rewind file. This function is supported only for reading. + +@@ -1572,7 +1575,7 @@ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); + */ + + /* +-ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); ++ZEXTERN z_off_t ZEXPORT gztell(gzFile file); + + Return the starting position for the next gzread or gzwrite on file. + This position represents a number of bytes in the uncompressed data stream, +@@ -1583,7 +1586,7 @@ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); + */ + + /* +-ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); ++ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file); + + Return the current compressed (actual) read or write offset of file. This + offset includes the count of bytes that precede the gzip stream, for example +@@ -1592,7 +1595,7 @@ ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); + be used for a progress indicator. On error, gzoffset() returns -1. + */ + +-ZEXTERN int ZEXPORT gzeof OF((gzFile file)); ++ZEXTERN int ZEXPORT gzeof(gzFile file); + /* + Return true (1) if the end-of-file indicator for file has been set while + reading, false (0) otherwise. Note that the end-of-file indicator is set +@@ -1607,7 +1610,7 @@ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); + has grown since the previous end of file was detected. + */ + +-ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); ++ZEXTERN int ZEXPORT gzdirect(gzFile file); + /* + Return true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. +@@ -1628,7 +1631,7 @@ ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); + gzip file reading and decompression, which may not be desired.) + */ + +-ZEXTERN int ZEXPORT gzclose OF((gzFile file)); ++ZEXTERN int ZEXPORT gzclose(gzFile file); + /* + Flush all pending output for file, if necessary, close file and + deallocate the (de)compression state. Note that once file is closed, you +@@ -1641,8 +1644,8 @@ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); + last read ended in the middle of a gzip stream, or Z_OK on success. + */ + +-ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); +-ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); ++ZEXTERN int ZEXPORT gzclose_r(gzFile file); ++ZEXTERN int ZEXPORT gzclose_w(gzFile file); + /* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to +@@ -1653,7 +1656,7 @@ ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); + zlib library. + */ + +-ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); ++ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); + /* + Return the error message for the last error which occurred on file. + errnum is set to zlib error number. If an error occurred in the file system +@@ -1669,7 +1672,7 @@ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); + functions above that do not distinguish those cases in their return values. + */ + +-ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); ++ZEXTERN void ZEXPORT gzclearerr(gzFile file); + /* + Clear the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip +@@ -1686,7 +1689,7 @@ ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); + library. + */ + +-ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); ++ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); + /* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. An Adler-32 value is in the range of a 32-bit +@@ -1706,15 +1709,15 @@ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); + if (adler != original_adler) error(); + */ + +-ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf, +- z_size_t len)); ++ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, ++ z_size_t len); + /* + Same as adler32(), but with a size_t length. + */ + + /* +-ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, +- z_off_t len2)); ++ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, ++ z_off_t len2); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for +@@ -1724,7 +1727,7 @@ ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + negative, the result has no meaning or utility. + */ + +-ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); ++ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); + /* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. +@@ -1742,30 +1745,30 @@ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); + if (crc != original_crc) error(); + */ + +-ZEXTERN uLong ZEXPORT crc32_z OF((uLong crc, const Bytef *buf, +- z_size_t len)); ++ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, ++ z_size_t len); + /* + Same as crc32(), but with a size_t length. + */ + + /* +-ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); ++ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and +- len2. ++ len2. len2 must be non-negative. + */ + + /* +-ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t len2)); ++ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); + + Return the operator corresponding to length len2, to be used with +- crc32_combine_op(). ++ crc32_combine_op(). len2 must be non-negative. + */ + +-ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); ++ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); + /* + Give the same result as crc32_combine(), using op in place of len2. op is + is generated from len2 by crc32_combine_gen(). This will be faster than +@@ -1778,20 +1781,20 @@ ZEXTERN uLong ZEXPORT crc32_combine_op OF((uLong crc1, uLong crc2, uLong op)); + /* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +-ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, +- const char *version, int stream_size)); +-ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, +- const char *version, int stream_size)); +-ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, +- int windowBits, int memLevel, +- int strategy, const char *version, +- int stream_size)); +-ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, +- const char *version, int stream_size)); +-ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, +- unsigned char FAR *window, +- const char *version, +- int stream_size)); ++ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, ++ const char *version, int stream_size); ++ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, ++ const char *version, int stream_size); ++ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, ++ int windowBits, int memLevel, ++ int strategy, const char *version, ++ int stream_size); ++ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, ++ const char *version, int stream_size); ++ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, ++ unsigned char FAR *window, ++ const char *version, ++ int stream_size); + #ifdef Z_PREFIX_SET + # define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +@@ -1836,7 +1839,7 @@ struct gzFile_s { + unsigned char *next; + z_off64_t pos; + }; +-ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ ++ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ + #ifdef Z_PREFIX_SET + # undef z_gzgetc + # define z_gzgetc(g) \ +@@ -1853,13 +1856,13 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ + * without large file support, _LFS64_LARGEFILE must also be true + */ + #ifdef Z_LARGE64 +- ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); +- ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); +- ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); +- ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); +- ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); +- ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); +- ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off64_t)); ++ ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); ++ ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); ++ ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); ++ ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); ++ ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); ++ ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); ++ ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); + #endif + + #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +@@ -1881,50 +1884,50 @@ ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ + # define crc32_combine_gen crc32_combine_gen64 + # endif + # ifndef Z_LARGE64 +- ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); +- ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); +- ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); +- ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); +- ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); +- ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +- ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); ++ ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); ++ ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); ++ ZEXTERN z_off_t ZEXPORT gztell64(gzFile); ++ ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); ++ ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); ++ ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); ++ ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); + # endif + #else +- ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); +- ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); +- ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); +- ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); +- ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); +- ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); +- ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); ++ ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); ++ ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); ++ ZEXTERN z_off_t ZEXPORT gztell(gzFile); ++ ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); ++ ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); ++ ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); ++ ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); + #endif + + #else /* Z_SOLO */ + +- ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); +- ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); +- ZEXTERN uLong ZEXPORT crc32_combine_gen OF((z_off_t)); ++ ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); ++ ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); ++ ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); + + #endif /* !Z_SOLO */ + + /* undocumented functions */ +-ZEXTERN const char * ZEXPORT zError OF((int)); +-ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); +-ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); +-ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); +-ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); +-ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); +-ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); +-ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); ++ZEXTERN const char * ZEXPORT zError(int); ++ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); ++ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); ++ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); ++ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); ++ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); ++ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); ++ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); + #if defined(_WIN32) && !defined(Z_SOLO) +-ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, +- const char *mode)); ++ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, ++ const char *mode); + #endif + #if defined(STDC) || defined(Z_HAVE_STDARG_H) + # ifndef Z_SOLO +-ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, +- const char *format, +- va_list va)); ++ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, ++ const char *format, ++ va_list va); + # endif + #endif + +diff --git a/src/zlib/zutil.c b/src/zlib/zutil.c +index dcab28a0d..b1c5d2d3c 100644 +--- a/src/zlib/zutil.c ++++ b/src/zlib/zutil.c +@@ -24,13 +24,11 @@ z_const char * const z_errmsg[10] = { + }; + + +-const char * ZEXPORT zlibVersion() +-{ ++const char * ZEXPORT zlibVersion(void) { + return ZLIB_VERSION; + } + +-uLong ZEXPORT zlibCompileFlags() +-{ ++uLong ZEXPORT zlibCompileFlags(void) { + uLong flags; + + flags = 0; +@@ -61,9 +59,11 @@ uLong ZEXPORT zlibCompileFlags() + #ifdef ZLIB_DEBUG + flags += 1 << 8; + #endif ++ /* + #if defined(ASMV) || defined(ASMINF) + flags += 1 << 9; + #endif ++ */ + #ifdef ZLIB_WINAPI + flags += 1 << 10; + #endif +@@ -119,9 +119,7 @@ uLong ZEXPORT zlibCompileFlags() + # endif + int ZLIB_INTERNAL z_verbose = verbose; + +-void ZLIB_INTERNAL z_error (m) +- char *m; +-{ ++void ZLIB_INTERNAL z_error(char *m) { + fprintf(stderr, "%s\n", m); + exit(1); + } +@@ -130,9 +128,7 @@ void ZLIB_INTERNAL z_error (m) + /* exported to allow conversion of error code to string for compress() and + * uncompress() + */ +-const char * ZEXPORT zError(err) +- int err; +-{ ++const char * ZEXPORT zError(int err) { + return ERR_MSG(err); + } + +@@ -146,22 +142,14 @@ const char * ZEXPORT zError(err) + + #ifndef HAVE_MEMCPY + +-void ZLIB_INTERNAL zmemcpy(dest, source, len) +- Bytef* dest; +- const Bytef* source; +- uInt len; +-{ ++void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len) { + if (len == 0) return; + do { + *dest++ = *source++; /* ??? to be unrolled */ + } while (--len != 0); + } + +-int ZLIB_INTERNAL zmemcmp(s1, s2, len) +- const Bytef* s1; +- const Bytef* s2; +- uInt len; +-{ ++int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len) { + uInt j; + + for (j = 0; j < len; j++) { +@@ -170,10 +158,7 @@ int ZLIB_INTERNAL zmemcmp(s1, s2, len) + return 0; + } + +-void ZLIB_INTERNAL zmemzero(dest, len) +- Bytef* dest; +- uInt len; +-{ ++void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len) { + if (len == 0) return; + do { + *dest++ = 0; /* ??? to be unrolled */ +@@ -214,8 +199,7 @@ local ptr_table table[MAX_PTR]; + * a protected system like OS/2. Use Microsoft C instead. + */ + +-voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) +-{ ++voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { + voidpf buf; + ulg bsize = (ulg)items*size; + +@@ -240,8 +224,7 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) + return buf; + } + +-void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) +-{ ++void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { + int n; + + (void)opaque; +@@ -277,14 +260,12 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) + # define _hfree hfree + #endif + +-voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size) +-{ ++voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size) { + (void)opaque; + return _halloc((long)items, size); + } + +-void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) +-{ ++void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { + (void)opaque; + _hfree(ptr); + } +@@ -297,25 +278,18 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) + #ifndef MY_ZCALLOC /* Any system without a special alloc function */ + + #ifndef STDC +-extern voidp malloc OF((uInt size)); +-extern voidp calloc OF((uInt items, uInt size)); +-extern void free OF((voidpf ptr)); ++extern voidp malloc(uInt size); ++extern voidp calloc(uInt items, uInt size); ++extern void free(voidpf ptr); + #endif + +-voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) +- voidpf opaque; +- unsigned items; +- unsigned size; +-{ ++voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { + (void)opaque; + return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : + (voidpf)calloc(items, size); + } + +-void ZLIB_INTERNAL zcfree (opaque, ptr) +- voidpf opaque; +- voidpf ptr; +-{ ++void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { + (void)opaque; + free(ptr); + } +diff --git a/src/zlib/zutil.h b/src/zlib/zutil.h +index d9a20ae1b..48dd7feba 100644 +--- a/src/zlib/zutil.h ++++ b/src/zlib/zutil.h +@@ -1,5 +1,5 @@ + /* zutil.h -- internal interface and configuration of the compression library +- * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler ++ * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +@@ -56,7 +56,7 @@ typedef unsigned long ulg; + extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ + /* (size given to avoid silly warnings with Visual C++) */ + +-#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] ++#define ERR_MSG(err) z_errmsg[(err) < -6 || (err) > 2 ? 9 : 2 - (err)] + + #define ERR_RETURN(strm,err) \ + return (strm->msg = ERR_MSG(err), (err)) +@@ -137,17 +137,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ + # endif + #endif + +-#if defined(MACOS) || defined(TARGET_OS_MAC) ++#if defined(MACOS) + # define OS_CODE 7 +-# ifndef Z_SOLO +-# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +-# include /* for fdopen */ +-# else +-# ifndef fdopen +-# define fdopen(fd,mode) NULL /* No fdopen() */ +-# endif +-# endif +-# endif + #endif + + #ifdef __acorn +@@ -170,18 +161,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ + # define OS_CODE 19 + #endif + +-#if defined(_BEOS_) || defined(RISCOS) +-# define fdopen(fd,mode) NULL /* No fdopen() */ +-#endif +- +-#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX +-# if defined(_WIN32_WCE) +-# define fdopen(fd,mode) NULL /* No fdopen() */ +-# else +-# define fdopen(fd,type) _fdopen(fd,type) +-# endif +-#endif +- + #if defined(__BORLANDC__) && !defined(MSDOS) + #pragma warn -8004 + #pragma warn -8008 +@@ -191,8 +170,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ + /* provide prototypes for these when building zlib without LFS */ + #if !defined(_WIN32) && \ + (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) +- ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); +- ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); ++ ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); ++ ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); ++ ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); + #endif + + /* common defaults */ +@@ -231,16 +211,16 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ + # define zmemzero(dest, len) memset(dest, 0, len) + # endif + #else +- void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); +- int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); +- void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); ++ void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len); ++ int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len); ++ void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len); + #endif + + /* Diagnostic functions */ + #ifdef ZLIB_DEBUG + # include + extern int ZLIB_INTERNAL z_verbose; +- extern void ZLIB_INTERNAL z_error OF((char *m)); ++ extern void ZLIB_INTERNAL z_error(char *m); + # define Assert(cond,msg) {if(!(cond)) z_error(msg);} + # define Trace(x) {if (z_verbose>=0) fprintf x ;} + # define Tracev(x) {if (z_verbose>0) fprintf x ;} +@@ -257,9 +237,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ + #endif + + #ifndef Z_SOLO +- voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, +- unsigned size)); +- void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); ++ voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, ++ unsigned size); ++ void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr); + #endif + + #define ZALLOC(strm, items, size) \ + +From f60071745897c8769d34d4c513b06eb3e3af0425 Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Wed, 21 Feb 2024 22:12:26 +0100 +Subject: [PATCH 2/4] imp: updated bundled LZMA SDK to 23.01 + +--- + qmc2.pro | 2 +- + src/lzma/7z.h | 12 +- + src/lzma/7zAlloc.c | 69 ++-- + src/lzma/7zAlloc.h | 6 +- + src/lzma/7zArcIn.c | 405 ++++++++++----------- + src/lzma/7zBuf.h | 6 +- + src/lzma/7zCrc.c | 130 ++++--- + src/lzma/7zCrc.h | 14 +- + src/lzma/7zCrcOpt.c | 16 +- + src/lzma/7zDec.c | 172 +++++---- + src/lzma/7zFile.c | 33 +- + src/lzma/7zFile.h | 9 +- + src/lzma/7zStream.c | 67 ++-- + src/lzma/7zTypes.h | 274 +++++++++------ + src/lzma/7zVersion.h | 10 +- + src/lzma/7zWindows.h | 101 ++++++ + src/lzma/Aes.c | 108 +++--- + src/lzma/Aes.h | 36 +- + src/lzma/AesOpt.c | 348 ++++++++++-------- + src/lzma/Alloc.c | 192 ++++++---- + src/lzma/Alloc.h | 19 +- + src/lzma/Bcj2.c | 319 +++++++++-------- + src/lzma/Bcj2.h | 270 +++++++++++--- + src/lzma/Bcj2Enc.c | 559 +++++++++++++++++++---------- + src/lzma/Bra.c | 496 ++++++++++++++++++-------- + src/lzma/Bra.h | 115 +++--- + src/lzma/Bra86.c | 221 +++++++++--- + src/lzma/BraIA64.c | 57 +-- + src/lzma/Compiler.h | 162 +++++++-- + src/lzma/CpuArch.c | 795 ++++++++++++++++++++++++++++++------------ + src/lzma/CpuArch.h | 233 +++++++++---- + src/lzma/Delta.h | 6 +- + src/lzma/DllSecur.c | 127 +++---- + src/lzma/DllSecur.h | 6 +- + src/lzma/LzFind.c | 519 +++++++++++++++------------ + src/lzma/LzFind.h | 53 ++- + src/lzma/LzFindMt.c | 70 ++-- + src/lzma/LzFindMt.h | 10 +- + src/lzma/LzFindOpt.c | 14 +- + src/lzma/LzHash.h | 8 +- + src/lzma/Lzma2Dec.c | 12 +- + src/lzma/Lzma2Dec.h | 15 +- + src/lzma/Lzma2DecMt.c | 155 ++++---- + src/lzma/Lzma2DecMt.h | 20 +- + src/lzma/Lzma2Enc.c | 174 ++++----- + src/lzma/Lzma2Enc.h | 20 +- + src/lzma/Lzma86.h | 6 +- + src/lzma/Lzma86Dec.c | 7 +- + src/lzma/Lzma86Enc.c | 7 +- + src/lzma/LzmaDec.c | 190 +++++----- + src/lzma/LzmaDec.h | 17 +- + src/lzma/LzmaEnc.c | 389 ++++++++++----------- + src/lzma/LzmaEnc.h | 23 +- + src/lzma/LzmaLib.c | 8 +- + src/lzma/LzmaLib.h | 12 +- + src/lzma/MtCoder.c | 104 +++--- + src/lzma/MtCoder.h | 50 +-- + src/lzma/MtDec.c | 101 ++---- + src/lzma/MtDec.h | 34 +- + src/lzma/Ppmd.h | 12 +- + src/lzma/Ppmd7.c | 186 +++++----- + src/lzma/Ppmd7.h | 10 +- + src/lzma/Ppmd7Dec.c | 57 +-- + src/lzma/Ppmd7Enc.c | 87 +++-- + src/lzma/Precomp.h | 6 +- + src/lzma/RotateDefs.h | 28 +- + src/lzma/Sha256.c | 150 ++++---- + src/lzma/Sha256.h | 12 +- + src/lzma/Sha256Opt.c | 129 ++++--- + src/lzma/Sort.h | 6 +- + src/lzma/Threads.c | 86 +++-- + src/lzma/Threads.h | 50 +-- + src/lzma/Xz.c | 4 +- + src/lzma/Xz.h | 56 ++- + src/lzma/XzCrc64.c | 32 +- + src/lzma/XzCrc64.h | 12 +- + src/lzma/XzCrc64Opt.c | 28 +- + src/lzma/XzDec.c | 300 +++++++++------- + src/lzma/XzEnc.c | 270 +++++++------- + src/lzma/XzEnc.h | 23 +- + src/lzma/XzIn.c | 75 ++-- + src/lzma/lzma-sdk.txt | 2 +- + src/sevenzipfile.cpp | 2 +- + 83 files changed, 5514 insertions(+), 3522 deletions(-) + create mode 100644 src/lzma/7zWindows.h + +diff --git a/qmc2.pro b/qmc2.pro +index 90bd30a45..9891fedee 100644 +--- a/qmc2.pro ++++ b/qmc2.pro +@@ -303,7 +303,7 @@ TRANSLATIONS += data/lng/qmc2_de.ts \ + data/lng/qmc2_us.ts + RESOURCES += qmc2.qrc + QMAKE_MAKEFILE = Makefile.qmake +-DEFINES += _7ZIP_PPMD_SUPPORT _7ZIP_ST ++DEFINES += Z7_PPMD_SUPPORT Z7_ST + + contains(DEFINES, QMC2_LIBARCHIVE_ENABLED) { + SOURCES += src/archivefile.cpp +diff --git a/src/lzma/7z.h b/src/lzma/7z.h +index 304f75ffc..9e27c0152 100644 +--- a/src/lzma/7z.h ++++ b/src/lzma/7z.h +@@ -1,8 +1,8 @@ + /* 7z.h -- 7z interface +-2018-07-02 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_H +-#define __7Z_H ++#ifndef ZIP7_INC_7Z_H ++#define ZIP7_INC_7Z_H + + #include "7zTypes.h" + +@@ -98,7 +98,7 @@ typedef struct + UInt64 SzAr_GetFolderUnpackSize(const CSzAr *p, UInt32 folderIndex); + + SRes SzAr_DecodeFolder(const CSzAr *p, UInt32 folderIndex, +- ILookInStream *stream, UInt64 startPos, ++ ILookInStreamPtr stream, UInt64 startPos, + Byte *outBuffer, size_t outSize, + ISzAllocPtr allocMain); + +@@ -174,7 +174,7 @@ UInt16 *SzArEx_GetFullNameUtf16_Back(const CSzArEx *p, size_t fileIndex, UInt16 + + SRes SzArEx_Extract( + const CSzArEx *db, +- ILookInStream *inStream, ++ ILookInStreamPtr inStream, + UInt32 fileIndex, /* index of file */ + UInt32 *blockIndex, /* index of solid block */ + Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ +@@ -196,7 +196,7 @@ SZ_ERROR_INPUT_EOF + SZ_ERROR_FAIL + */ + +-SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, ++SRes SzArEx_Open(CSzArEx *p, ILookInStreamPtr inStream, + ISzAllocPtr allocMain, ISzAllocPtr allocTemp); + + EXTERN_C_END +diff --git a/src/lzma/7zAlloc.c b/src/lzma/7zAlloc.c +index c924a529f..2f0659af6 100644 +--- a/src/lzma/7zAlloc.c ++++ b/src/lzma/7zAlloc.c +@@ -1,5 +1,5 @@ +-/* 7zAlloc.c -- Allocation functions +-2017-04-03 : Igor Pavlov : Public domain */ ++/* 7zAlloc.c -- Allocation functions for 7z processing ++2023-03-04 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -7,74 +7,83 @@ + + #include "7zAlloc.h" + +-/* #define _SZ_ALLOC_DEBUG */ +-/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ ++/* #define SZ_ALLOC_DEBUG */ ++/* use SZ_ALLOC_DEBUG to debug alloc/free operations */ + +-#ifdef _SZ_ALLOC_DEBUG ++#ifdef SZ_ALLOC_DEBUG + ++/* + #ifdef _WIN32 +-#include ++#include "7zWindows.h" + #endif ++*/ + + #include +-int g_allocCount = 0; +-int g_allocCountTemp = 0; ++static int g_allocCount = 0; ++static int g_allocCountTemp = 0; + ++static void Print_Alloc(const char *s, size_t size, int *counter) ++{ ++ const unsigned size2 = (unsigned)size; ++ fprintf(stderr, "\n%s count = %10d : %10u bytes; ", s, *counter, size2); ++ (*counter)++; ++} ++static void Print_Free(const char *s, int *counter) ++{ ++ (*counter)--; ++ fprintf(stderr, "\n%s count = %10d", s, *counter); ++} + #endif + + void *SzAlloc(ISzAllocPtr p, size_t size) + { +- UNUSED_VAR(p); ++ UNUSED_VAR(p) + if (size == 0) + return 0; +- #ifdef _SZ_ALLOC_DEBUG +- fprintf(stderr, "\nAlloc %10u bytes; count = %10d", (unsigned)size, g_allocCount); +- g_allocCount++; ++ #ifdef SZ_ALLOC_DEBUG ++ Print_Alloc("Alloc", size, &g_allocCount); + #endif + return malloc(size); + } + + void SzFree(ISzAllocPtr p, void *address) + { +- UNUSED_VAR(p); +- #ifdef _SZ_ALLOC_DEBUG +- if (address != 0) +- { +- g_allocCount--; +- fprintf(stderr, "\nFree; count = %10d", g_allocCount); +- } ++ UNUSED_VAR(p) ++ #ifdef SZ_ALLOC_DEBUG ++ if (address) ++ Print_Free("Free ", &g_allocCount); + #endif + free(address); + } + + void *SzAllocTemp(ISzAllocPtr p, size_t size) + { +- UNUSED_VAR(p); ++ UNUSED_VAR(p) + if (size == 0) + return 0; +- #ifdef _SZ_ALLOC_DEBUG +- fprintf(stderr, "\nAlloc_temp %10u bytes; count = %10d", (unsigned)size, g_allocCountTemp); +- g_allocCountTemp++; ++ #ifdef SZ_ALLOC_DEBUG ++ Print_Alloc("Alloc_temp", size, &g_allocCountTemp); ++ /* + #ifdef _WIN32 + return HeapAlloc(GetProcessHeap(), 0, size); + #endif ++ */ + #endif + return malloc(size); + } + + void SzFreeTemp(ISzAllocPtr p, void *address) + { +- UNUSED_VAR(p); +- #ifdef _SZ_ALLOC_DEBUG +- if (address != 0) +- { +- g_allocCountTemp--; +- fprintf(stderr, "\nFree_temp; count = %10d", g_allocCountTemp); +- } ++ UNUSED_VAR(p) ++ #ifdef SZ_ALLOC_DEBUG ++ if (address) ++ Print_Free("Free_temp ", &g_allocCountTemp); ++ /* + #ifdef _WIN32 + HeapFree(GetProcessHeap(), 0, address); + return; + #endif ++ */ + #endif + free(address); + } +diff --git a/src/lzma/7zAlloc.h b/src/lzma/7zAlloc.h +index 44778f9b2..b2b8b0cdd 100644 +--- a/src/lzma/7zAlloc.h ++++ b/src/lzma/7zAlloc.h +@@ -1,8 +1,8 @@ + /* 7zAlloc.h -- Allocation functions +-2017-04-03 : Igor Pavlov : Public domain */ ++2023-03-04 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_ALLOC_H +-#define __7Z_ALLOC_H ++#ifndef ZIP7_INC_7Z_ALLOC_H ++#define ZIP7_INC_7Z_ALLOC_H + + #include "7zTypes.h" + +diff --git a/src/lzma/7zArcIn.c b/src/lzma/7zArcIn.c +index c2405bdef..14b77551e 100644 +--- a/src/lzma/7zArcIn.c ++++ b/src/lzma/7zArcIn.c +@@ -1,5 +1,5 @@ + /* 7zArcIn.c -- 7z Input functions +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-05-11 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -10,10 +10,11 @@ + #include "7zCrc.h" + #include "CpuArch.h" + +-#define MY_ALLOC(T, p, size, alloc) { \ +- if ((p = (T *)ISzAlloc_Alloc(alloc, (size) * sizeof(T))) == NULL) return SZ_ERROR_MEM; } ++#define MY_ALLOC(T, p, size, alloc) \ ++ { if ((p = (T *)ISzAlloc_Alloc(alloc, (size) * sizeof(T))) == NULL) return SZ_ERROR_MEM; } + +-#define MY_ALLOC_ZE(T, p, size, alloc) { if ((size) == 0) p = NULL; else MY_ALLOC(T, p, size, alloc) } ++#define MY_ALLOC_ZE(T, p, size, alloc) \ ++ { if ((size) == 0) p = NULL; else MY_ALLOC(T, p, size, alloc) } + + #define MY_ALLOC_AND_CPY(to, size, from, alloc) \ + { MY_ALLOC(Byte, to, size, alloc); memcpy(to, from, size); } +@@ -58,7 +59,7 @@ enum EIdEnum + + const Byte k7zSignature[k7zSignatureSize] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; + +-#define SzBitUi32s_Init(p) { (p)->Defs = NULL; (p)->Vals = NULL; } ++#define SzBitUi32s_INIT(p) { (p)->Defs = NULL; (p)->Vals = NULL; } + + static SRes SzBitUi32s_Alloc(CSzBitUi32s *p, size_t num, ISzAllocPtr alloc) + { +@@ -69,8 +70,8 @@ static SRes SzBitUi32s_Alloc(CSzBitUi32s *p, size_t num, ISzAllocPtr alloc) + } + else + { +- MY_ALLOC(Byte, p->Defs, (num + 7) >> 3, alloc); +- MY_ALLOC(UInt32, p->Vals, num, alloc); ++ MY_ALLOC(Byte, p->Defs, (num + 7) >> 3, alloc) ++ MY_ALLOC(UInt32, p->Vals, num, alloc) + } + return SZ_OK; + } +@@ -81,7 +82,7 @@ static void SzBitUi32s_Free(CSzBitUi32s *p, ISzAllocPtr alloc) + ISzAlloc_Free(alloc, p->Vals); p->Vals = NULL; + } + +-#define SzBitUi64s_Init(p) { (p)->Defs = NULL; (p)->Vals = NULL; } ++#define SzBitUi64s_INIT(p) { (p)->Defs = NULL; (p)->Vals = NULL; } + + static void SzBitUi64s_Free(CSzBitUi64s *p, ISzAllocPtr alloc) + { +@@ -96,7 +97,7 @@ static void SzAr_Init(CSzAr *p) + p->NumFolders = 0; + + p->PackPositions = NULL; +- SzBitUi32s_Init(&p->FolderCRCs); ++ SzBitUi32s_INIT(&p->FolderCRCs) + + p->FoCodersOffsets = NULL; + p->FoStartPackStreamIndex = NULL; +@@ -142,11 +143,11 @@ void SzArEx_Init(CSzArEx *p) + p->FileNameOffsets = NULL; + p->FileNames = NULL; + +- SzBitUi32s_Init(&p->CRCs); +- SzBitUi32s_Init(&p->Attribs); +- // SzBitUi32s_Init(&p->Parents); +- SzBitUi64s_Init(&p->MTime); +- SzBitUi64s_Init(&p->CTime); ++ SzBitUi32s_INIT(&p->CRCs) ++ SzBitUi32s_INIT(&p->Attribs) ++ // SzBitUi32s_INIT(&p->Parents) ++ SzBitUi64s_INIT(&p->MTime) ++ SzBitUi64s_INIT(&p->CTime) + } + + void SzArEx_Free(CSzArEx *p, ISzAllocPtr alloc) +@@ -180,11 +181,20 @@ static int TestSignatureCandidate(const Byte *testBytes) + return 1; + } + +-#define SzData_Clear(p) { (p)->Data = NULL; (p)->Size = 0; } ++#define SzData_CLEAR(p) { (p)->Data = NULL; (p)->Size = 0; } ++ ++#define SZ_READ_BYTE_SD_NOCHECK(_sd_, dest) \ ++ (_sd_)->Size--; dest = *(_sd_)->Data++; ++ ++#define SZ_READ_BYTE_SD(_sd_, dest) \ ++ if ((_sd_)->Size == 0) return SZ_ERROR_ARCHIVE; \ ++ SZ_READ_BYTE_SD_NOCHECK(_sd_, dest) + +-#define SZ_READ_BYTE_SD(_sd_, dest) if ((_sd_)->Size == 0) return SZ_ERROR_ARCHIVE; (_sd_)->Size--; dest = *(_sd_)->Data++; + #define SZ_READ_BYTE(dest) SZ_READ_BYTE_SD(sd, dest) +-#define SZ_READ_BYTE_2(dest) if (sd.Size == 0) return SZ_ERROR_ARCHIVE; sd.Size--; dest = *sd.Data++; ++ ++#define SZ_READ_BYTE_2(dest) \ ++ if (sd.Size == 0) return SZ_ERROR_ARCHIVE; \ ++ sd.Size--; dest = *sd.Data++; + + #define SKIP_DATA(sd, size) { sd->Size -= (size_t)(size); sd->Data += (size_t)(size); } + #define SKIP_DATA2(sd, size) { sd.Size -= (size_t)(size); sd.Data += (size_t)(size); } +@@ -192,25 +202,25 @@ static int TestSignatureCandidate(const Byte *testBytes) + #define SZ_READ_32(dest) if (sd.Size < 4) return SZ_ERROR_ARCHIVE; \ + dest = GetUi32(sd.Data); SKIP_DATA2(sd, 4); + +-static MY_NO_INLINE SRes ReadNumber(CSzData *sd, UInt64 *value) ++static Z7_NO_INLINE SRes ReadNumber(CSzData *sd, UInt64 *value) + { + Byte firstByte, mask; + unsigned i; + UInt32 v; + +- SZ_READ_BYTE(firstByte); ++ SZ_READ_BYTE(firstByte) + if ((firstByte & 0x80) == 0) + { + *value = firstByte; + return SZ_OK; + } +- SZ_READ_BYTE(v); ++ SZ_READ_BYTE(v) + if ((firstByte & 0x40) == 0) + { + *value = (((UInt32)firstByte & 0x3F) << 8) | v; + return SZ_OK; + } +- SZ_READ_BYTE(mask); ++ SZ_READ_BYTE(mask) + *value = v | ((UInt32)mask << 8); + mask = 0x20; + for (i = 2; i < 8; i++) +@@ -218,11 +228,11 @@ static MY_NO_INLINE SRes ReadNumber(CSzData *sd, UInt64 *value) + Byte b; + if ((firstByte & mask) == 0) + { +- UInt64 highPart = (unsigned)firstByte & (unsigned)(mask - 1); ++ const UInt64 highPart = (unsigned)firstByte & (unsigned)(mask - 1); + *value |= (highPart << (8 * i)); + return SZ_OK; + } +- SZ_READ_BYTE(b); ++ SZ_READ_BYTE(b) + *value |= ((UInt64)b << (8 * i)); + mask >>= 1; + } +@@ -230,7 +240,7 @@ static MY_NO_INLINE SRes ReadNumber(CSzData *sd, UInt64 *value) + } + + +-static MY_NO_INLINE SRes SzReadNumber32(CSzData *sd, UInt32 *value) ++static Z7_NO_INLINE SRes SzReadNumber32(CSzData *sd, UInt32 *value) + { + Byte firstByte; + UInt64 value64; +@@ -244,7 +254,7 @@ static MY_NO_INLINE SRes SzReadNumber32(CSzData *sd, UInt32 *value) + sd->Size--; + return SZ_OK; + } +- RINOK(ReadNumber(sd, &value64)); ++ RINOK(ReadNumber(sd, &value64)) + if (value64 >= (UInt32)0x80000000 - 1) + return SZ_ERROR_UNSUPPORTED; + if (value64 >= ((UInt64)(1) << ((sizeof(size_t) - 1) * 8 + 4))) +@@ -258,10 +268,10 @@ static MY_NO_INLINE SRes SzReadNumber32(CSzData *sd, UInt32 *value) + static SRes SkipData(CSzData *sd) + { + UInt64 size; +- RINOK(ReadNumber(sd, &size)); ++ RINOK(ReadNumber(sd, &size)) + if (size > sd->Size) + return SZ_ERROR_ARCHIVE; +- SKIP_DATA(sd, size); ++ SKIP_DATA(sd, size) + return SZ_OK; + } + +@@ -270,22 +280,22 @@ static SRes WaitId(CSzData *sd, UInt32 id) + for (;;) + { + UInt64 type; +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + if (type == id) + return SZ_OK; + if (type == k7zIdEnd) + return SZ_ERROR_ARCHIVE; +- RINOK(SkipData(sd)); ++ RINOK(SkipData(sd)) + } + } + + static SRes RememberBitVector(CSzData *sd, UInt32 numItems, const Byte **v) + { +- UInt32 numBytes = (numItems + 7) >> 3; ++ const UInt32 numBytes = (numItems + 7) >> 3; + if (numBytes > sd->Size) + return SZ_ERROR_ARCHIVE; + *v = sd->Data; +- SKIP_DATA(sd, numBytes); ++ SKIP_DATA(sd, numBytes) + return SZ_OK; + } + +@@ -307,48 +317,48 @@ static UInt32 CountDefinedBits(const Byte *bits, UInt32 numItems) + return sum; + } + +-static MY_NO_INLINE SRes ReadBitVector(CSzData *sd, UInt32 numItems, Byte **v, ISzAllocPtr alloc) ++static Z7_NO_INLINE SRes ReadBitVector(CSzData *sd, UInt32 numItems, Byte **v, ISzAllocPtr alloc) + { + Byte allAreDefined; + Byte *v2; +- UInt32 numBytes = (numItems + 7) >> 3; ++ const UInt32 numBytes = (numItems + 7) >> 3; + *v = NULL; +- SZ_READ_BYTE(allAreDefined); ++ SZ_READ_BYTE(allAreDefined) + if (numBytes == 0) + return SZ_OK; + if (allAreDefined == 0) + { + if (numBytes > sd->Size) + return SZ_ERROR_ARCHIVE; +- MY_ALLOC_AND_CPY(*v, numBytes, sd->Data, alloc); +- SKIP_DATA(sd, numBytes); ++ MY_ALLOC_AND_CPY(*v, numBytes, sd->Data, alloc) ++ SKIP_DATA(sd, numBytes) + return SZ_OK; + } +- MY_ALLOC(Byte, *v, numBytes, alloc); ++ MY_ALLOC(Byte, *v, numBytes, alloc) + v2 = *v; + memset(v2, 0xFF, (size_t)numBytes); + { +- unsigned numBits = (unsigned)numItems & 7; ++ const unsigned numBits = (unsigned)numItems & 7; + if (numBits != 0) + v2[(size_t)numBytes - 1] = (Byte)((((UInt32)1 << numBits) - 1) << (8 - numBits)); + } + return SZ_OK; + } + +-static MY_NO_INLINE SRes ReadUi32s(CSzData *sd2, UInt32 numItems, CSzBitUi32s *crcs, ISzAllocPtr alloc) ++static Z7_NO_INLINE SRes ReadUi32s(CSzData *sd2, UInt32 numItems, CSzBitUi32s *crcs, ISzAllocPtr alloc) + { + UInt32 i; + CSzData sd; + UInt32 *vals; + const Byte *defs; +- MY_ALLOC_ZE(UInt32, crcs->Vals, numItems, alloc); ++ MY_ALLOC_ZE(UInt32, crcs->Vals, numItems, alloc) + sd = *sd2; + defs = crcs->Defs; + vals = crcs->Vals; + for (i = 0; i < numItems; i++) + if (SzBitArray_Check(defs, i)) + { +- SZ_READ_32(vals[i]); ++ SZ_READ_32(vals[i]) + } + else + vals[i] = 0; +@@ -359,7 +369,7 @@ static MY_NO_INLINE SRes ReadUi32s(CSzData *sd2, UInt32 numItems, CSzBitUi32s *c + static SRes ReadBitUi32s(CSzData *sd, UInt32 numItems, CSzBitUi32s *crcs, ISzAllocPtr alloc) + { + SzBitUi32s_Free(crcs, alloc); +- RINOK(ReadBitVector(sd, numItems, &crcs->Defs, alloc)); ++ RINOK(ReadBitVector(sd, numItems, &crcs->Defs, alloc)) + return ReadUi32s(sd, numItems, crcs, alloc); + } + +@@ -367,36 +377,36 @@ static SRes SkipBitUi32s(CSzData *sd, UInt32 numItems) + { + Byte allAreDefined; + UInt32 numDefined = numItems; +- SZ_READ_BYTE(allAreDefined); ++ SZ_READ_BYTE(allAreDefined) + if (!allAreDefined) + { +- size_t numBytes = (numItems + 7) >> 3; ++ const size_t numBytes = (numItems + 7) >> 3; + if (numBytes > sd->Size) + return SZ_ERROR_ARCHIVE; + numDefined = CountDefinedBits(sd->Data, numItems); +- SKIP_DATA(sd, numBytes); ++ SKIP_DATA(sd, numBytes) + } + if (numDefined > (sd->Size >> 2)) + return SZ_ERROR_ARCHIVE; +- SKIP_DATA(sd, (size_t)numDefined * 4); ++ SKIP_DATA(sd, (size_t)numDefined * 4) + return SZ_OK; + } + + static SRes ReadPackInfo(CSzAr *p, CSzData *sd, ISzAllocPtr alloc) + { +- RINOK(SzReadNumber32(sd, &p->NumPackStreams)); ++ RINOK(SzReadNumber32(sd, &p->NumPackStreams)) + +- RINOK(WaitId(sd, k7zIdSize)); +- MY_ALLOC(UInt64, p->PackPositions, (size_t)p->NumPackStreams + 1, alloc); ++ RINOK(WaitId(sd, k7zIdSize)) ++ MY_ALLOC(UInt64, p->PackPositions, (size_t)p->NumPackStreams + 1, alloc) + { + UInt64 sum = 0; + UInt32 i; +- UInt32 numPackStreams = p->NumPackStreams; ++ const UInt32 numPackStreams = p->NumPackStreams; + for (i = 0; i < numPackStreams; i++) + { + UInt64 packSize; + p->PackPositions[i] = sum; +- RINOK(ReadNumber(sd, &packSize)); ++ RINOK(ReadNumber(sd, &packSize)) + sum += packSize; + if (sum < packSize) + return SZ_ERROR_ARCHIVE; +@@ -407,16 +417,16 @@ static SRes ReadPackInfo(CSzAr *p, CSzData *sd, ISzAllocPtr alloc) + for (;;) + { + UInt64 type; +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + if (type == k7zIdEnd) + return SZ_OK; + if (type == k7zIdCRC) + { + /* CRC of packed streams is unused now */ +- RINOK(SkipBitUi32s(sd, p->NumPackStreams)); ++ RINOK(SkipBitUi32s(sd, p->NumPackStreams)) + continue; + } +- RINOK(SkipData(sd)); ++ RINOK(SkipData(sd)) + } + } + +@@ -442,7 +452,7 @@ SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd) + f->NumPackStreams = 0; + f->UnpackStream = 0; + +- RINOK(SzReadNumber32(sd, &numCoders)); ++ RINOK(SzReadNumber32(sd, &numCoders)) + if (numCoders == 0 || numCoders > SZ_NUM_CODERS_IN_FOLDER_MAX) + return SZ_ERROR_UNSUPPORTED; + +@@ -453,7 +463,7 @@ SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd) + unsigned idSize, j; + UInt64 id; + +- SZ_READ_BYTE(mainByte); ++ SZ_READ_BYTE(mainByte) + if ((mainByte & 0xC0) != 0) + return SZ_ERROR_UNSUPPORTED; + +@@ -481,12 +491,12 @@ SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd) + { + UInt32 numStreams; + +- RINOK(SzReadNumber32(sd, &numStreams)); ++ RINOK(SzReadNumber32(sd, &numStreams)) + if (numStreams > k_NumCodersStreams_in_Folder_MAX) + return SZ_ERROR_UNSUPPORTED; + coder->NumStreams = (Byte)numStreams; + +- RINOK(SzReadNumber32(sd, &numStreams)); ++ RINOK(SzReadNumber32(sd, &numStreams)) + if (numStreams != 1) + return SZ_ERROR_UNSUPPORTED; + } +@@ -499,7 +509,7 @@ SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd) + if ((mainByte & 0x20) != 0) + { + UInt32 propsSize = 0; +- RINOK(SzReadNumber32(sd, &propsSize)); ++ RINOK(SzReadNumber32(sd, &propsSize)) + if (propsSize > sd->Size) + return SZ_ERROR_ARCHIVE; + if (propsSize >= 0x80) +@@ -549,12 +559,12 @@ SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd) + { + CSzBond *bp = f->Bonds + i; + +- RINOK(SzReadNumber32(sd, &bp->InIndex)); ++ RINOK(SzReadNumber32(sd, &bp->InIndex)) + if (bp->InIndex >= numInStreams || streamUsed[bp->InIndex]) + return SZ_ERROR_ARCHIVE; + streamUsed[bp->InIndex] = True7z; + +- RINOK(SzReadNumber32(sd, &bp->OutIndex)); ++ RINOK(SzReadNumber32(sd, &bp->OutIndex)) + if (bp->OutIndex >= numCoders || coderUsed[bp->OutIndex]) + return SZ_ERROR_ARCHIVE; + coderUsed[bp->OutIndex] = True7z; +@@ -584,7 +594,7 @@ SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd) + for (i = 0; i < numPackStreams; i++) + { + UInt32 index; +- RINOK(SzReadNumber32(sd, &index)); ++ RINOK(SzReadNumber32(sd, &index)) + if (index >= numInStreams || streamUsed[index]) + return SZ_ERROR_ARCHIVE; + streamUsed[index] = True7z; +@@ -598,7 +608,7 @@ SRes SzGetNextFolderItem(CSzFolder *f, CSzData *sd) + } + + +-static MY_NO_INLINE SRes SkipNumbers(CSzData *sd2, UInt32 num) ++static Z7_NO_INLINE SRes SkipNumbers(CSzData *sd2, UInt32 num) + { + CSzData sd; + sd = *sd2; +@@ -606,7 +616,7 @@ static MY_NO_INLINE SRes SkipNumbers(CSzData *sd2, UInt32 num) + { + Byte firstByte, mask; + unsigned i; +- SZ_READ_BYTE_2(firstByte); ++ SZ_READ_BYTE_2(firstByte) + if ((firstByte & 0x80) == 0) + continue; + if ((firstByte & 0x40) == 0) +@@ -622,7 +632,7 @@ static MY_NO_INLINE SRes SkipNumbers(CSzData *sd2, UInt32 num) + mask >>= 1; + if (i > sd.Size) + return SZ_ERROR_ARCHIVE; +- SKIP_DATA2(sd, i); ++ SKIP_DATA2(sd, i) + } + *sd2 = sd; + return SZ_OK; +@@ -645,30 +655,30 @@ static SRes ReadUnpackInfo(CSzAr *p, + const Byte *startBufPtr; + Byte external; + +- RINOK(WaitId(sd2, k7zIdFolder)); ++ RINOK(WaitId(sd2, k7zIdFolder)) + +- RINOK(SzReadNumber32(sd2, &numFolders)); ++ RINOK(SzReadNumber32(sd2, &numFolders)) + if (numFolders > numFoldersMax) + return SZ_ERROR_UNSUPPORTED; + p->NumFolders = numFolders; + +- SZ_READ_BYTE_SD(sd2, external); ++ SZ_READ_BYTE_SD(sd2, external) + if (external == 0) + sd = *sd2; + else + { + UInt32 index; +- RINOK(SzReadNumber32(sd2, &index)); ++ RINOK(SzReadNumber32(sd2, &index)) + if (index >= numTempBufs) + return SZ_ERROR_ARCHIVE; + sd.Data = tempBufs[index].data; + sd.Size = tempBufs[index].size; + } + +- MY_ALLOC(size_t, p->FoCodersOffsets, (size_t)numFolders + 1, alloc); +- MY_ALLOC(UInt32, p->FoStartPackStreamIndex, (size_t)numFolders + 1, alloc); +- MY_ALLOC(UInt32, p->FoToCoderUnpackSizes, (size_t)numFolders + 1, alloc); +- MY_ALLOC_ZE(Byte, p->FoToMainUnpackSizeIndex, (size_t)numFolders, alloc); ++ MY_ALLOC(size_t, p->FoCodersOffsets, (size_t)numFolders + 1, alloc) ++ MY_ALLOC(UInt32, p->FoStartPackStreamIndex, (size_t)numFolders + 1, alloc) ++ MY_ALLOC(UInt32, p->FoToCoderUnpackSizes, (size_t)numFolders + 1, alloc) ++ MY_ALLOC_ZE(Byte, p->FoToMainUnpackSizeIndex, (size_t)numFolders, alloc) + + startBufPtr = sd.Data; + +@@ -681,7 +691,7 @@ static SRes ReadUnpackInfo(CSzAr *p, + + p->FoCodersOffsets[fo] = (size_t)(sd.Data - startBufPtr); + +- RINOK(SzReadNumber32(&sd, &numCoders)); ++ RINOK(SzReadNumber32(&sd, &numCoders)) + if (numCoders == 0 || numCoders > k_Scan_NumCoders_MAX) + return SZ_ERROR_UNSUPPORTED; + +@@ -691,7 +701,7 @@ static SRes ReadUnpackInfo(CSzAr *p, + unsigned idSize; + UInt32 coderInStreams; + +- SZ_READ_BYTE_2(mainByte); ++ SZ_READ_BYTE_2(mainByte) + if ((mainByte & 0xC0) != 0) + return SZ_ERROR_UNSUPPORTED; + idSize = (mainByte & 0xF); +@@ -699,15 +709,15 @@ static SRes ReadUnpackInfo(CSzAr *p, + return SZ_ERROR_UNSUPPORTED; + if (idSize > sd.Size) + return SZ_ERROR_ARCHIVE; +- SKIP_DATA2(sd, idSize); ++ SKIP_DATA2(sd, idSize) + + coderInStreams = 1; + + if ((mainByte & 0x10) != 0) + { + UInt32 coderOutStreams; +- RINOK(SzReadNumber32(&sd, &coderInStreams)); +- RINOK(SzReadNumber32(&sd, &coderOutStreams)); ++ RINOK(SzReadNumber32(&sd, &coderInStreams)) ++ RINOK(SzReadNumber32(&sd, &coderOutStreams)) + if (coderInStreams > k_Scan_NumCodersStreams_in_Folder_MAX || coderOutStreams != 1) + return SZ_ERROR_UNSUPPORTED; + } +@@ -717,10 +727,10 @@ static SRes ReadUnpackInfo(CSzAr *p, + if ((mainByte & 0x20) != 0) + { + UInt32 propsSize; +- RINOK(SzReadNumber32(&sd, &propsSize)); ++ RINOK(SzReadNumber32(&sd, &propsSize)) + if (propsSize > sd.Size) + return SZ_ERROR_ARCHIVE; +- SKIP_DATA2(sd, propsSize); ++ SKIP_DATA2(sd, propsSize) + } + } + +@@ -734,7 +744,7 @@ static SRes ReadUnpackInfo(CSzAr *p, + Byte coderUsed[k_Scan_NumCoders_MAX]; + + UInt32 i; +- UInt32 numBonds = numCoders - 1; ++ const UInt32 numBonds = numCoders - 1; + if (numInStreams < numBonds) + return SZ_ERROR_ARCHIVE; + +@@ -750,12 +760,12 @@ static SRes ReadUnpackInfo(CSzAr *p, + { + UInt32 index; + +- RINOK(SzReadNumber32(&sd, &index)); ++ RINOK(SzReadNumber32(&sd, &index)) + if (index >= numInStreams || streamUsed[index]) + return SZ_ERROR_ARCHIVE; + streamUsed[index] = True7z; + +- RINOK(SzReadNumber32(&sd, &index)); ++ RINOK(SzReadNumber32(&sd, &index)) + if (index >= numCoders || coderUsed[index]) + return SZ_ERROR_ARCHIVE; + coderUsed[index] = True7z; +@@ -767,7 +777,7 @@ static SRes ReadUnpackInfo(CSzAr *p, + for (i = 0; i < numPackStreams; i++) + { + UInt32 index; +- RINOK(SzReadNumber32(&sd, &index)); ++ RINOK(SzReadNumber32(&sd, &index)) + if (index >= numInStreams || streamUsed[index]) + return SZ_ERROR_ARCHIVE; + streamUsed[index] = True7z; +@@ -802,7 +812,7 @@ static SRes ReadUnpackInfo(CSzAr *p, + const size_t dataSize = (size_t)(sd.Data - startBufPtr); + p->FoStartPackStreamIndex[fo] = packStreamIndex; + p->FoCodersOffsets[fo] = dataSize; +- MY_ALLOC_ZE_AND_CPY(p->CodersData, dataSize, startBufPtr, alloc); ++ MY_ALLOC_ZE_AND_CPY(p->CodersData, dataSize, startBufPtr, alloc) + } + + if (external != 0) +@@ -812,21 +822,21 @@ static SRes ReadUnpackInfo(CSzAr *p, + sd = *sd2; + } + +- RINOK(WaitId(&sd, k7zIdCodersUnpackSize)); ++ RINOK(WaitId(&sd, k7zIdCodersUnpackSize)) + +- MY_ALLOC_ZE(UInt64, p->CoderUnpackSizes, (size_t)numCodersOutStreams, alloc); ++ MY_ALLOC_ZE(UInt64, p->CoderUnpackSizes, (size_t)numCodersOutStreams, alloc) + { + UInt32 i; + for (i = 0; i < numCodersOutStreams; i++) + { +- RINOK(ReadNumber(&sd, p->CoderUnpackSizes + i)); ++ RINOK(ReadNumber(&sd, p->CoderUnpackSizes + i)) + } + } + + for (;;) + { + UInt64 type; +- RINOK(ReadID(&sd, &type)); ++ RINOK(ReadID(&sd, &type)) + if (type == k7zIdEnd) + { + *sd2 = sd; +@@ -834,10 +844,10 @@ static SRes ReadUnpackInfo(CSzAr *p, + } + if (type == k7zIdCRC) + { +- RINOK(ReadBitUi32s(&sd, numFolders, &p->FolderCRCs, alloc)); ++ RINOK(ReadBitUi32s(&sd, numFolders, &p->FolderCRCs, alloc)) + continue; + } +- RINOK(SkipData(&sd)); ++ RINOK(SkipData(&sd)) + } + } + +@@ -862,13 +872,13 @@ static SRes ReadSubStreamsInfo(CSzAr *p, CSzData *sd, CSubStreamInfo *ssi) + { + UInt64 type = 0; + UInt32 numSubDigests = 0; +- UInt32 numFolders = p->NumFolders; ++ const UInt32 numFolders = p->NumFolders; + UInt32 numUnpackStreams = numFolders; + UInt32 numUnpackSizesInData = 0; + + for (;;) + { +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + if (type == k7zIdNumUnpackStream) + { + UInt32 i; +@@ -878,7 +888,7 @@ static SRes ReadSubStreamsInfo(CSzAr *p, CSzData *sd, CSubStreamInfo *ssi) + for (i = 0; i < numFolders; i++) + { + UInt32 numStreams; +- RINOK(SzReadNumber32(sd, &numStreams)); ++ RINOK(SzReadNumber32(sd, &numStreams)) + if (numUnpackStreams > numUnpackStreams + numStreams) + return SZ_ERROR_UNSUPPORTED; + numUnpackStreams += numStreams; +@@ -892,7 +902,7 @@ static SRes ReadSubStreamsInfo(CSzAr *p, CSzData *sd, CSubStreamInfo *ssi) + } + if (type == k7zIdCRC || type == k7zIdSize || type == k7zIdEnd) + break; +- RINOK(SkipData(sd)); ++ RINOK(SkipData(sd)) + } + + if (!ssi->sdNumSubStreams.Data) +@@ -908,9 +918,9 @@ static SRes ReadSubStreamsInfo(CSzAr *p, CSzData *sd, CSubStreamInfo *ssi) + if (type == k7zIdSize) + { + ssi->sdSizes.Data = sd->Data; +- RINOK(SkipNumbers(sd, numUnpackSizesInData)); ++ RINOK(SkipNumbers(sd, numUnpackSizesInData)) + ssi->sdSizes.Size = (size_t)(sd->Data - ssi->sdSizes.Data); +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + } + + for (;;) +@@ -920,14 +930,14 @@ static SRes ReadSubStreamsInfo(CSzAr *p, CSzData *sd, CSubStreamInfo *ssi) + if (type == k7zIdCRC) + { + ssi->sdCRCs.Data = sd->Data; +- RINOK(SkipBitUi32s(sd, numSubDigests)); ++ RINOK(SkipBitUi32s(sd, numSubDigests)) + ssi->sdCRCs.Size = (size_t)(sd->Data - ssi->sdCRCs.Data); + } + else + { +- RINOK(SkipData(sd)); ++ RINOK(SkipData(sd)) + } +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + } + } + +@@ -940,31 +950,31 @@ static SRes SzReadStreamsInfo(CSzAr *p, + { + UInt64 type; + +- SzData_Clear(&ssi->sdSizes); +- SzData_Clear(&ssi->sdCRCs); +- SzData_Clear(&ssi->sdNumSubStreams); ++ SzData_CLEAR(&ssi->sdSizes) ++ SzData_CLEAR(&ssi->sdCRCs) ++ SzData_CLEAR(&ssi->sdNumSubStreams) + + *dataOffset = 0; +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + if (type == k7zIdPackInfo) + { +- RINOK(ReadNumber(sd, dataOffset)); ++ RINOK(ReadNumber(sd, dataOffset)) + if (*dataOffset > p->RangeLimit) + return SZ_ERROR_ARCHIVE; +- RINOK(ReadPackInfo(p, sd, alloc)); ++ RINOK(ReadPackInfo(p, sd, alloc)) + if (p->PackPositions[p->NumPackStreams] > p->RangeLimit - *dataOffset) + return SZ_ERROR_ARCHIVE; +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + } + if (type == k7zIdUnpackInfo) + { +- RINOK(ReadUnpackInfo(p, sd, numFoldersMax, tempBufs, numTempBufs, alloc)); +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadUnpackInfo(p, sd, numFoldersMax, tempBufs, numTempBufs, alloc)) ++ RINOK(ReadID(sd, &type)) + } + if (type == k7zIdSubStreamsInfo) + { +- RINOK(ReadSubStreamsInfo(p, sd, ssi)); +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadSubStreamsInfo(p, sd, ssi)) ++ RINOK(ReadID(sd, &type)) + } + else + { +@@ -976,7 +986,7 @@ static SRes SzReadStreamsInfo(CSzAr *p, + } + + static SRes SzReadAndDecodePackedStreams( +- ILookInStream *inStream, ++ ILookInStreamPtr inStream, + CSzData *sd, + CBuf *tempBufs, + UInt32 numFoldersMax, +@@ -988,7 +998,7 @@ static SRes SzReadAndDecodePackedStreams( + UInt32 fo; + CSubStreamInfo ssi; + +- RINOK(SzReadStreamsInfo(p, sd, numFoldersMax, NULL, 0, &dataStartPos, &ssi, allocTemp)); ++ RINOK(SzReadStreamsInfo(p, sd, numFoldersMax, NULL, 0, &dataStartPos, &ssi, allocTemp)) + + dataStartPos += baseOffset; + if (p->NumFolders == 0) +@@ -1000,7 +1010,7 @@ static SRes SzReadAndDecodePackedStreams( + for (fo = 0; fo < p->NumFolders; fo++) + { + CBuf *tempBuf = tempBufs + fo; +- UInt64 unpackSize = SzAr_GetFolderUnpackSize(p, fo); ++ const UInt64 unpackSize = SzAr_GetFolderUnpackSize(p, fo); + if ((size_t)unpackSize != unpackSize) + return SZ_ERROR_MEM; + if (!Buf_Create(tempBuf, (size_t)unpackSize, allocTemp)) +@@ -1010,8 +1020,8 @@ static SRes SzReadAndDecodePackedStreams( + for (fo = 0; fo < p->NumFolders; fo++) + { + const CBuf *tempBuf = tempBufs + fo; +- RINOK(LookInStream_SeekTo(inStream, dataStartPos)); +- RINOK(SzAr_DecodeFolder(p, fo, inStream, dataStartPos, tempBuf->data, tempBuf->size, allocTemp)); ++ RINOK(LookInStream_SeekTo(inStream, dataStartPos)) ++ RINOK(SzAr_DecodeFolder(p, fo, inStream, dataStartPos, tempBuf->data, tempBuf->size, allocTemp)) + } + + return SZ_OK; +@@ -1046,7 +1056,7 @@ static SRes SzReadFileNames(const Byte *data, size_t size, UInt32 numFiles, size + return (pos == size) ? SZ_OK : SZ_ERROR_ARCHIVE; + } + +-static MY_NO_INLINE SRes ReadTime(CSzBitUi64s *p, UInt32 num, ++static Z7_NO_INLINE SRes ReadTime(CSzBitUi64s *p, UInt32 num, + CSzData *sd2, + const CBuf *tempBufs, UInt32 numTempBufs, + ISzAllocPtr alloc) +@@ -1057,22 +1067,22 @@ static MY_NO_INLINE SRes ReadTime(CSzBitUi64s *p, UInt32 num, + Byte *defs; + Byte external; + +- RINOK(ReadBitVector(sd2, num, &p->Defs, alloc)); ++ RINOK(ReadBitVector(sd2, num, &p->Defs, alloc)) + +- SZ_READ_BYTE_SD(sd2, external); ++ SZ_READ_BYTE_SD(sd2, external) + if (external == 0) + sd = *sd2; + else + { + UInt32 index; +- RINOK(SzReadNumber32(sd2, &index)); ++ RINOK(SzReadNumber32(sd2, &index)) + if (index >= numTempBufs) + return SZ_ERROR_ARCHIVE; + sd.Data = tempBufs[index].data; + sd.Size = tempBufs[index].size; + } + +- MY_ALLOC_ZE(CNtfsFileTime, p->Vals, num, alloc); ++ MY_ALLOC_ZE(CNtfsFileTime, p->Vals, num, alloc) + vals = p->Vals; + defs = p->Defs; + for (i = 0; i < num; i++) +@@ -1082,7 +1092,7 @@ static MY_NO_INLINE SRes ReadTime(CSzBitUi64s *p, UInt32 num, + return SZ_ERROR_ARCHIVE; + vals[i].Low = GetUi32(sd.Data); + vals[i].High = GetUi32(sd.Data + 4); +- SKIP_DATA2(sd, 8); ++ SKIP_DATA2(sd, 8) + } + else + vals[i].High = vals[i].Low = 0; +@@ -1100,7 +1110,7 @@ static MY_NO_INLINE SRes ReadTime(CSzBitUi64s *p, UInt32 num, + static SRes SzReadHeader2( + CSzArEx *p, /* allocMain */ + CSzData *sd, +- ILookInStream *inStream, ++ ILookInStreamPtr inStream, + CBuf *tempBufs, UInt32 *numTempBufs, + ISzAllocPtr allocMain, + ISzAllocPtr allocTemp +@@ -1111,26 +1121,26 @@ static SRes SzReadHeader2( + { + UInt64 type; + +- SzData_Clear(&ssi.sdSizes); +- SzData_Clear(&ssi.sdCRCs); +- SzData_Clear(&ssi.sdNumSubStreams); ++ SzData_CLEAR(&ssi.sdSizes) ++ SzData_CLEAR(&ssi.sdCRCs) ++ SzData_CLEAR(&ssi.sdNumSubStreams) + + ssi.NumSubDigests = 0; + ssi.NumTotalSubStreams = 0; + +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + + if (type == k7zIdArchiveProperties) + { + for (;;) + { + UInt64 type2; +- RINOK(ReadID(sd, &type2)); ++ RINOK(ReadID(sd, &type2)) + if (type2 == k7zIdEnd) + break; +- RINOK(SkipData(sd)); ++ RINOK(SkipData(sd)) + } +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + } + + if (type == k7zIdAdditionalStreamsInfo) +@@ -1148,15 +1158,15 @@ static SRes SzReadHeader2( + + if (res != SZ_OK) + return res; +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + } + + if (type == k7zIdMainStreamsInfo) + { + RINOK(SzReadStreamsInfo(&p->db, sd, (UInt32)1 << 30, tempBufs, *numTempBufs, +- &p->dataPos, &ssi, allocMain)); ++ &p->dataPos, &ssi, allocMain)) + p->dataPos += p->startPosAfterHeader; +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + } + + if (type == k7zIdEnd) +@@ -1174,23 +1184,23 @@ static SRes SzReadHeader2( + const Byte *emptyStreams = NULL; + const Byte *emptyFiles = NULL; + +- RINOK(SzReadNumber32(sd, &numFiles)); ++ RINOK(SzReadNumber32(sd, &numFiles)) + p->NumFiles = numFiles; + + for (;;) + { + UInt64 type; + UInt64 size; +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + if (type == k7zIdEnd) + break; +- RINOK(ReadNumber(sd, &size)); ++ RINOK(ReadNumber(sd, &size)) + if (size > sd->Size) + return SZ_ERROR_ARCHIVE; + + if (type >= ((UInt32)1 << 8)) + { +- SKIP_DATA(sd, size); ++ SKIP_DATA(sd, size) + } + else switch ((unsigned)type) + { +@@ -1200,7 +1210,7 @@ static SRes SzReadHeader2( + const Byte *namesData; + Byte external; + +- SZ_READ_BYTE(external); ++ SZ_READ_BYTE(external) + if (external == 0) + { + namesSize = (size_t)size - 1; +@@ -1209,7 +1219,7 @@ static SRes SzReadHeader2( + else + { + UInt32 index; +- RINOK(SzReadNumber32(sd, &index)); ++ RINOK(SzReadNumber32(sd, &index)) + if (index >= *numTempBufs) + return SZ_ERROR_ARCHIVE; + namesData = (tempBufs)[index].data; +@@ -1218,25 +1228,25 @@ static SRes SzReadHeader2( + + if ((namesSize & 1) != 0) + return SZ_ERROR_ARCHIVE; +- MY_ALLOC(size_t, p->FileNameOffsets, numFiles + 1, allocMain); +- MY_ALLOC_ZE_AND_CPY(p->FileNames, namesSize, namesData, allocMain); ++ MY_ALLOC(size_t, p->FileNameOffsets, numFiles + 1, allocMain) ++ MY_ALLOC_ZE_AND_CPY(p->FileNames, namesSize, namesData, allocMain) + RINOK(SzReadFileNames(p->FileNames, namesSize, numFiles, p->FileNameOffsets)) + if (external == 0) + { +- SKIP_DATA(sd, namesSize); ++ SKIP_DATA(sd, namesSize) + } + break; + } + case k7zIdEmptyStream: + { +- RINOK(RememberBitVector(sd, numFiles, &emptyStreams)); ++ RINOK(RememberBitVector(sd, numFiles, &emptyStreams)) + numEmptyStreams = CountDefinedBits(emptyStreams, numFiles); + emptyFiles = NULL; + break; + } + case k7zIdEmptyFile: + { +- RINOK(RememberBitVector(sd, numEmptyStreams, &emptyFiles)); ++ RINOK(RememberBitVector(sd, numEmptyStreams, &emptyFiles)) + break; + } + case k7zIdWinAttrib: +@@ -1245,22 +1255,22 @@ static SRes SzReadHeader2( + CSzData sdSwitch; + CSzData *sdPtr; + SzBitUi32s_Free(&p->Attribs, allocMain); +- RINOK(ReadBitVector(sd, numFiles, &p->Attribs.Defs, allocMain)); ++ RINOK(ReadBitVector(sd, numFiles, &p->Attribs.Defs, allocMain)) + +- SZ_READ_BYTE(external); ++ SZ_READ_BYTE(external) + if (external == 0) + sdPtr = sd; + else + { + UInt32 index; +- RINOK(SzReadNumber32(sd, &index)); ++ RINOK(SzReadNumber32(sd, &index)) + if (index >= *numTempBufs) + return SZ_ERROR_ARCHIVE; + sdSwitch.Data = (tempBufs)[index].data; + sdSwitch.Size = (tempBufs)[index].size; + sdPtr = &sdSwitch; + } +- RINOK(ReadUi32s(sdPtr, numFiles, &p->Attribs, allocMain)); ++ RINOK(ReadUi32s(sdPtr, numFiles, &p->Attribs, allocMain)) + break; + } + /* +@@ -1273,11 +1283,11 @@ static SRes SzReadHeader2( + break; + } + */ +- case k7zIdMTime: RINOK(ReadTime(&p->MTime, numFiles, sd, tempBufs, *numTempBufs, allocMain)); break; +- case k7zIdCTime: RINOK(ReadTime(&p->CTime, numFiles, sd, tempBufs, *numTempBufs, allocMain)); break; ++ case k7zIdMTime: RINOK(ReadTime(&p->MTime, numFiles, sd, tempBufs, *numTempBufs, allocMain)) break; ++ case k7zIdCTime: RINOK(ReadTime(&p->CTime, numFiles, sd, tempBufs, *numTempBufs, allocMain)) break; + default: + { +- SKIP_DATA(sd, size); ++ SKIP_DATA(sd, size) + } + } + } +@@ -1288,10 +1298,10 @@ static SRes SzReadHeader2( + for (;;) + { + UInt64 type; +- RINOK(ReadID(sd, &type)); ++ RINOK(ReadID(sd, &type)) + if (type == k7zIdEnd) + break; +- RINOK(SkipData(sd)); ++ RINOK(SkipData(sd)) + } + + { +@@ -1303,40 +1313,37 @@ static SRes SzReadHeader2( + UInt64 unpackPos = 0; + const Byte *digestsDefs = NULL; + const Byte *digestsVals = NULL; +- UInt32 digestsValsIndex = 0; +- UInt32 digestIndex; +- Byte allDigestsDefined = 0; ++ UInt32 digestIndex = 0; + Byte isDirMask = 0; + Byte crcMask = 0; + Byte mask = 0x80; + +- MY_ALLOC(UInt32, p->FolderToFile, p->db.NumFolders + 1, allocMain); +- MY_ALLOC_ZE(UInt32, p->FileToFolder, p->NumFiles, allocMain); +- MY_ALLOC(UInt64, p->UnpackPositions, p->NumFiles + 1, allocMain); +- MY_ALLOC_ZE(Byte, p->IsDirs, (p->NumFiles + 7) >> 3, allocMain); ++ MY_ALLOC(UInt32, p->FolderToFile, p->db.NumFolders + 1, allocMain) ++ MY_ALLOC_ZE(UInt32, p->FileToFolder, p->NumFiles, allocMain) ++ MY_ALLOC(UInt64, p->UnpackPositions, p->NumFiles + 1, allocMain) ++ MY_ALLOC_ZE(Byte, p->IsDirs, (p->NumFiles + 7) >> 3, allocMain) + +- RINOK(SzBitUi32s_Alloc(&p->CRCs, p->NumFiles, allocMain)); ++ RINOK(SzBitUi32s_Alloc(&p->CRCs, p->NumFiles, allocMain)) + + if (ssi.sdCRCs.Size != 0) + { +- SZ_READ_BYTE_SD(&ssi.sdCRCs, allDigestsDefined); ++ Byte allDigestsDefined = 0; ++ SZ_READ_BYTE_SD_NOCHECK(&ssi.sdCRCs, allDigestsDefined) + if (allDigestsDefined) + digestsVals = ssi.sdCRCs.Data; + else + { +- size_t numBytes = (ssi.NumSubDigests + 7) >> 3; ++ const size_t numBytes = (ssi.NumSubDigests + 7) >> 3; + digestsDefs = ssi.sdCRCs.Data; + digestsVals = digestsDefs + numBytes; + } + } + +- digestIndex = 0; +- + for (i = 0; i < numFiles; i++, mask >>= 1) + { + if (mask == 0) + { +- UInt32 byteIndex = (i - 1) >> 3; ++ const UInt32 byteIndex = (i - 1) >> 3; + p->IsDirs[byteIndex] = isDirMask; + p->CRCs.Defs[byteIndex] = crcMask; + isDirMask = 0; +@@ -1374,18 +1381,17 @@ static SRes SzReadHeader2( + numSubStreams = 1; + if (ssi.sdNumSubStreams.Data) + { +- RINOK(SzReadNumber32(&ssi.sdNumSubStreams, &numSubStreams)); ++ RINOK(SzReadNumber32(&ssi.sdNumSubStreams, &numSubStreams)) + } + remSubStreams = numSubStreams; + if (numSubStreams != 0) + break; + { +- UInt64 folderUnpackSize = SzAr_GetFolderUnpackSize(&p->db, folderIndex); ++ const UInt64 folderUnpackSize = SzAr_GetFolderUnpackSize(&p->db, folderIndex); + unpackPos += folderUnpackSize; + if (unpackPos < folderUnpackSize) + return SZ_ERROR_ARCHIVE; + } +- + folderIndex++; + } + } +@@ -1397,47 +1403,44 @@ static SRes SzReadHeader2( + + if (--remSubStreams == 0) + { +- UInt64 folderUnpackSize = SzAr_GetFolderUnpackSize(&p->db, folderIndex); +- UInt64 startFolderUnpackPos = p->UnpackPositions[p->FolderToFile[folderIndex]]; ++ const UInt64 folderUnpackSize = SzAr_GetFolderUnpackSize(&p->db, folderIndex); ++ const UInt64 startFolderUnpackPos = p->UnpackPositions[p->FolderToFile[folderIndex]]; + if (folderUnpackSize < unpackPos - startFolderUnpackPos) + return SZ_ERROR_ARCHIVE; + unpackPos = startFolderUnpackPos + folderUnpackSize; + if (unpackPos < folderUnpackSize) + return SZ_ERROR_ARCHIVE; + +- if (numSubStreams == 1 && SzBitWithVals_Check(&p->db.FolderCRCs, i)) ++ if (numSubStreams == 1 && SzBitWithVals_Check(&p->db.FolderCRCs, folderIndex)) + { + p->CRCs.Vals[i] = p->db.FolderCRCs.Vals[folderIndex]; + crcMask |= mask; + } +- else if (allDigestsDefined || (digestsDefs && SzBitArray_Check(digestsDefs, digestIndex))) +- { +- p->CRCs.Vals[i] = GetUi32(digestsVals + (size_t)digestsValsIndex * 4); +- digestsValsIndex++; +- crcMask |= mask; +- } +- + folderIndex++; + } + else + { + UInt64 v; +- RINOK(ReadNumber(&ssi.sdSizes, &v)); ++ RINOK(ReadNumber(&ssi.sdSizes, &v)) + unpackPos += v; + if (unpackPos < v) + return SZ_ERROR_ARCHIVE; +- if (allDigestsDefined || (digestsDefs && SzBitArray_Check(digestsDefs, digestIndex))) ++ } ++ if ((crcMask & mask) == 0 && digestsVals) ++ { ++ if (!digestsDefs || SzBitArray_Check(digestsDefs, digestIndex)) + { +- p->CRCs.Vals[i] = GetUi32(digestsVals + (size_t)digestsValsIndex * 4); +- digestsValsIndex++; ++ p->CRCs.Vals[i] = GetUi32(digestsVals); ++ digestsVals += 4; + crcMask |= mask; + } ++ digestIndex++; + } + } + + if (mask != 0x80) + { +- UInt32 byteIndex = (i - 1) >> 3; ++ const UInt32 byteIndex = (i - 1) >> 3; + p->IsDirs[byteIndex] = isDirMask; + p->CRCs.Defs[byteIndex] = crcMask; + } +@@ -1454,7 +1457,7 @@ static SRes SzReadHeader2( + break; + if (!ssi.sdNumSubStreams.Data) + return SZ_ERROR_ARCHIVE; +- RINOK(SzReadNumber32(&ssi.sdNumSubStreams, &numSubStreams)); ++ RINOK(SzReadNumber32(&ssi.sdNumSubStreams, &numSubStreams)) + if (numSubStreams != 0) + return SZ_ERROR_ARCHIVE; + /* +@@ -1479,7 +1482,7 @@ static SRes SzReadHeader2( + static SRes SzReadHeader( + CSzArEx *p, + CSzData *sd, +- ILookInStream *inStream, ++ ILookInStreamPtr inStream, + ISzAllocPtr allocMain, + ISzAllocPtr allocTemp) + { +@@ -1498,7 +1501,7 @@ static SRes SzReadHeader( + for (i = 0; i < NUM_ADDITIONAL_STREAMS_MAX; i++) + Buf_Free(tempBufs + i, allocTemp); + +- RINOK(res); ++ RINOK(res) + + if (sd->Size != 0) + return SZ_ERROR_FAIL; +@@ -1508,7 +1511,7 @@ static SRes SzReadHeader( + + static SRes SzArEx_Open2( + CSzArEx *p, +- ILookInStream *inStream, ++ ILookInStreamPtr inStream, + ISzAllocPtr allocMain, + ISzAllocPtr allocTemp) + { +@@ -1521,9 +1524,9 @@ static SRes SzArEx_Open2( + SRes res; + + startArcPos = 0; +- RINOK(ILookInStream_Seek(inStream, &startArcPos, SZ_SEEK_CUR)); ++ RINOK(ILookInStream_Seek(inStream, &startArcPos, SZ_SEEK_CUR)) + +- RINOK(LookInStream_Read2(inStream, header, k7zStartHeaderSize, SZ_ERROR_NO_ARCHIVE)); ++ RINOK(LookInStream_Read2(inStream, header, k7zStartHeaderSize, SZ_ERROR_NO_ARCHIVE)) + + if (!TestSignatureCandidate(header)) + return SZ_ERROR_NO_ARCHIVE; +@@ -1552,14 +1555,14 @@ static SRes SzArEx_Open2( + + { + Int64 pos = 0; +- RINOK(ILookInStream_Seek(inStream, &pos, SZ_SEEK_END)); ++ RINOK(ILookInStream_Seek(inStream, &pos, SZ_SEEK_END)) + if ((UInt64)pos < (UInt64)startArcPos + nextHeaderOffset || + (UInt64)pos < (UInt64)startArcPos + k7zStartHeaderSize + nextHeaderOffset || + (UInt64)pos < (UInt64)startArcPos + k7zStartHeaderSize + nextHeaderOffset + nextHeaderSize) + return SZ_ERROR_INPUT_EOF; + } + +- RINOK(LookInStream_SeekTo(inStream, (UInt64)startArcPos + k7zStartHeaderSize + nextHeaderOffset)); ++ RINOK(LookInStream_SeekTo(inStream, (UInt64)startArcPos + k7zStartHeaderSize + nextHeaderOffset)) + + if (!Buf_Create(&buf, nextHeaderSizeT, allocTemp)) + return SZ_ERROR_MEM; +@@ -1634,10 +1637,10 @@ static SRes SzArEx_Open2( + } + + +-SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, ++SRes SzArEx_Open(CSzArEx *p, ILookInStreamPtr inStream, + ISzAllocPtr allocMain, ISzAllocPtr allocTemp) + { +- SRes res = SzArEx_Open2(p, inStream, allocMain, allocTemp); ++ const SRes res = SzArEx_Open2(p, inStream, allocMain, allocTemp); + if (res != SZ_OK) + SzArEx_Free(p, allocMain); + return res; +@@ -1646,7 +1649,7 @@ SRes SzArEx_Open(CSzArEx *p, ILookInStream *inStream, + + SRes SzArEx_Extract( + const CSzArEx *p, +- ILookInStream *inStream, ++ ILookInStreamPtr inStream, + UInt32 fileIndex, + UInt32 *blockIndex, + Byte **tempBuf, +@@ -1656,7 +1659,7 @@ SRes SzArEx_Extract( + ISzAllocPtr allocMain, + ISzAllocPtr allocTemp) + { +- UInt32 folderIndex = p->FileToFolder[fileIndex]; ++ const UInt32 folderIndex = p->FileToFolder[fileIndex]; + SRes res = SZ_OK; + + *offset = 0; +@@ -1673,13 +1676,13 @@ SRes SzArEx_Extract( + + if (*tempBuf == NULL || *blockIndex != folderIndex) + { +- UInt64 unpackSizeSpec = SzAr_GetFolderUnpackSize(&p->db, folderIndex); ++ const UInt64 unpackSizeSpec = SzAr_GetFolderUnpackSize(&p->db, folderIndex); + /* + UInt64 unpackSizeSpec = + p->UnpackPositions[p->FolderToFile[(size_t)folderIndex + 1]] - + p->UnpackPositions[p->FolderToFile[folderIndex]]; + */ +- size_t unpackSize = (size_t)unpackSizeSpec; ++ const size_t unpackSize = (size_t)unpackSizeSpec; + + if (unpackSize != unpackSizeSpec) + return SZ_ERROR_MEM; +@@ -1707,7 +1710,7 @@ SRes SzArEx_Extract( + + if (res == SZ_OK) + { +- UInt64 unpackPos = p->UnpackPositions[fileIndex]; ++ const UInt64 unpackPos = p->UnpackPositions[fileIndex]; + *offset = (size_t)(unpackPos - p->UnpackPositions[p->FolderToFile[folderIndex]]); + *outSizeProcessed = (size_t)(p->UnpackPositions[(size_t)fileIndex + 1] - unpackPos); + if (*offset + *outSizeProcessed > *outBufferSize) +@@ -1723,8 +1726,8 @@ SRes SzArEx_Extract( + + size_t SzArEx_GetFileNameUtf16(const CSzArEx *p, size_t fileIndex, UInt16 *dest) + { +- size_t offs = p->FileNameOffsets[fileIndex]; +- size_t len = p->FileNameOffsets[fileIndex + 1] - offs; ++ const size_t offs = p->FileNameOffsets[fileIndex]; ++ const size_t len = p->FileNameOffsets[fileIndex + 1] - offs; + if (dest != 0) + { + size_t i; +diff --git a/src/lzma/7zBuf.h b/src/lzma/7zBuf.h +index 81d1b5b64..c0ba8a7b6 100644 +--- a/src/lzma/7zBuf.h ++++ b/src/lzma/7zBuf.h +@@ -1,8 +1,8 @@ + /* 7zBuf.h -- Byte Buffer +-2017-04-03 : Igor Pavlov : Public domain */ ++2023-03-04 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_BUF_H +-#define __7Z_BUF_H ++#ifndef ZIP7_INC_7Z_BUF_H ++#define ZIP7_INC_7Z_BUF_H + + #include "7zTypes.h" + +diff --git a/src/lzma/7zCrc.c b/src/lzma/7zCrc.c +index f186324dd..c995a8be4 100644 +--- a/src/lzma/7zCrc.c ++++ b/src/lzma/7zCrc.c +@@ -1,5 +1,5 @@ +-/* 7zCrc.c -- CRC32 init +-2021-04-01 : Igor Pavlov : Public domain */ ++/* 7zCrc.c -- CRC32 calculation and init ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -13,22 +13,20 @@ + #else + #define CRC_NUM_TABLES 9 + +- #define CRC_UINT32_SWAP(v) ((v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | (v << 24)) +- +- UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, const UInt32 *table); +- UInt32 MY_FAST_CALL CrcUpdateT1_BeT8(UInt32 v, const void *data, size_t size, const UInt32 *table); ++ UInt32 Z7_FASTCALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, const UInt32 *table); ++ UInt32 Z7_FASTCALL CrcUpdateT1_BeT8(UInt32 v, const void *data, size_t size, const UInt32 *table); + #endif + + #ifndef MY_CPU_BE +- UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table); +- UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table); ++ UInt32 Z7_FASTCALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table); ++ UInt32 Z7_FASTCALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table); + #endif + +-typedef UInt32 (MY_FAST_CALL *CRC_FUNC)(UInt32 v, const void *data, size_t size, const UInt32 *table); +- ++/* + extern + CRC_FUNC g_CrcUpdateT4; + CRC_FUNC g_CrcUpdateT4; ++*/ + extern + CRC_FUNC g_CrcUpdateT8; + CRC_FUNC g_CrcUpdateT8; +@@ -44,20 +42,22 @@ CRC_FUNC g_CrcUpdate; + + UInt32 g_CrcTable[256 * CRC_NUM_TABLES]; + +-UInt32 MY_FAST_CALL CrcUpdate(UInt32 v, const void *data, size_t size) ++UInt32 Z7_FASTCALL CrcUpdate(UInt32 v, const void *data, size_t size) + { + return g_CrcUpdate(v, data, size, g_CrcTable); + } + +-UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size) ++UInt32 Z7_FASTCALL CrcCalc(const void *data, size_t size) + { + return g_CrcUpdate(CRC_INIT_VAL, data, size, g_CrcTable) ^ CRC_INIT_VAL; + } + ++#if CRC_NUM_TABLES < 4 \ ++ || (CRC_NUM_TABLES == 4 && defined(MY_CPU_BE)) \ ++ || (!defined(MY_CPU_LE) && !defined(MY_CPU_BE)) + #define CRC_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) +- +-UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const UInt32 *table); +-UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const UInt32 *table) ++UInt32 Z7_FASTCALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const UInt32 *table); ++UInt32 Z7_FASTCALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const UInt32 *table) + { + const Byte *p = (const Byte *)data; + const Byte *pEnd = p + size; +@@ -65,7 +65,7 @@ UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const U + v = CRC_UPDATE_BYTE_2(v, *p); + return v; + } +- ++#endif + + /* ---------- hardware CRC ---------- */ + +@@ -78,16 +78,29 @@ UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const U + #if defined(_MSC_VER) + #if defined(MY_CPU_ARM64) + #if (_MSC_VER >= 1910) ++ #ifndef __clang__ + #define USE_ARM64_CRC ++ #include ++ #endif + #endif + #endif + #elif (defined(__clang__) && (__clang_major__ >= 3)) \ + || (defined(__GNUC__) && (__GNUC__ > 4)) + #if !defined(__ARM_FEATURE_CRC32) + #define __ARM_FEATURE_CRC32 1 +- #if (!defined(__clang__) || (__clang_major__ > 3)) // fix these numbers ++ #if defined(__clang__) ++ #if defined(MY_CPU_ARM64) ++ #define ATTRIB_CRC __attribute__((__target__("crc"))) ++ #else ++ #define ATTRIB_CRC __attribute__((__target__("armv8-a,crc"))) ++ #endif ++ #else ++ #if defined(MY_CPU_ARM64) ++ #define ATTRIB_CRC __attribute__((__target__("+crc"))) ++ #else + #define ATTRIB_CRC __attribute__((__target__("arch=armv8-a+crc"))) + #endif ++ #endif + #endif + #if defined(__ARM_FEATURE_CRC32) + #define USE_ARM64_CRC +@@ -105,7 +118,7 @@ UInt32 MY_FAST_CALL CrcUpdateT1(UInt32 v, const void *data, size_t size, const U + + #pragma message("ARM64 CRC emulation") + +-MY_FORCE_INLINE ++Z7_FORCE_INLINE + UInt32 __crc32b(UInt32 v, UInt32 data) + { + const UInt32 *table = g_CrcTable; +@@ -113,7 +126,7 @@ UInt32 __crc32b(UInt32 v, UInt32 data) + return v; + } + +-MY_FORCE_INLINE ++Z7_FORCE_INLINE + UInt32 __crc32w(UInt32 v, UInt32 data) + { + const UInt32 *table = g_CrcTable; +@@ -124,7 +137,7 @@ UInt32 __crc32w(UInt32 v, UInt32 data) + return v; + } + +-MY_FORCE_INLINE ++Z7_FORCE_INLINE + UInt32 __crc32d(UInt32 v, UInt64 data) + { + const UInt32 *table = g_CrcTable; +@@ -156,9 +169,9 @@ UInt32 __crc32d(UInt32 v, UInt64 data) + // #pragma message("USE ARM HW CRC") + + ATTRIB_CRC +-UInt32 MY_FAST_CALL CrcUpdateT0_32(UInt32 v, const void *data, size_t size, const UInt32 *table); ++UInt32 Z7_FASTCALL CrcUpdateT0_32(UInt32 v, const void *data, size_t size, const UInt32 *table); + ATTRIB_CRC +-UInt32 MY_FAST_CALL CrcUpdateT0_32(UInt32 v, const void *data, size_t size, const UInt32 *table) ++UInt32 Z7_FASTCALL CrcUpdateT0_32(UInt32 v, const void *data, size_t size, const UInt32 *table) + { + const Byte *p = (const Byte *)data; + UNUSED_VAR(table); +@@ -188,9 +201,9 @@ UInt32 MY_FAST_CALL CrcUpdateT0_32(UInt32 v, const void *data, size_t size, cons + } + + ATTRIB_CRC +-UInt32 MY_FAST_CALL CrcUpdateT0_64(UInt32 v, const void *data, size_t size, const UInt32 *table); ++UInt32 Z7_FASTCALL CrcUpdateT0_64(UInt32 v, const void *data, size_t size, const UInt32 *table); + ATTRIB_CRC +-UInt32 MY_FAST_CALL CrcUpdateT0_64(UInt32 v, const void *data, size_t size, const UInt32 *table) ++UInt32 Z7_FASTCALL CrcUpdateT0_64(UInt32 v, const void *data, size_t size, const UInt32 *table) + { + const Byte *p = (const Byte *)data; + UNUSED_VAR(table); +@@ -219,6 +232,9 @@ UInt32 MY_FAST_CALL CrcUpdateT0_64(UInt32 v, const void *data, size_t size, cons + return v; + } + ++#undef T0_32_UNROLL_BYTES ++#undef T0_64_UNROLL_BYTES ++ + #endif // defined(USE_ARM64_CRC) || defined(USE_CRC_EMU) + + #endif // MY_CPU_LE +@@ -226,7 +242,7 @@ UInt32 MY_FAST_CALL CrcUpdateT0_64(UInt32 v, const void *data, size_t size, cons + + + +-void MY_FAST_CALL CrcGenerateTable() ++void Z7_FASTCALL CrcGenerateTable(void) + { + UInt32 i; + for (i = 0; i < 256; i++) +@@ -239,64 +255,62 @@ void MY_FAST_CALL CrcGenerateTable() + } + for (i = 256; i < 256 * CRC_NUM_TABLES; i++) + { +- UInt32 r = g_CrcTable[(size_t)i - 256]; ++ const UInt32 r = g_CrcTable[(size_t)i - 256]; + g_CrcTable[i] = g_CrcTable[r & 0xFF] ^ (r >> 8); + } + + #if CRC_NUM_TABLES < 4 +- +- g_CrcUpdate = CrcUpdateT1; +- +- #else +- +- #ifdef MY_CPU_LE +- +- g_CrcUpdateT4 = CrcUpdateT4; +- g_CrcUpdate = CrcUpdateT4; +- +- #if CRC_NUM_TABLES >= 8 ++ g_CrcUpdate = CrcUpdateT1; ++ #elif defined(MY_CPU_LE) ++ // g_CrcUpdateT4 = CrcUpdateT4; ++ #if CRC_NUM_TABLES < 8 ++ g_CrcUpdate = CrcUpdateT4; ++ #else // CRC_NUM_TABLES >= 8 + g_CrcUpdateT8 = CrcUpdateT8; +- ++ /* + #ifdef MY_CPU_X86_OR_AMD64 + if (!CPU_Is_InOrder()) + #endif +- g_CrcUpdate = CrcUpdateT8; ++ */ ++ g_CrcUpdate = CrcUpdateT8; + #endif +- + #else + { +- #ifndef MY_CPU_BE ++ #ifndef MY_CPU_BE + UInt32 k = 0x01020304; + const Byte *p = (const Byte *)&k; + if (p[0] == 4 && p[1] == 3) + { +- g_CrcUpdateT4 = CrcUpdateT4; +- g_CrcUpdate = CrcUpdateT4; +- #if CRC_NUM_TABLES >= 8 +- g_CrcUpdateT8 = CrcUpdateT8; +- g_CrcUpdate = CrcUpdateT8; ++ #if CRC_NUM_TABLES < 8 ++ // g_CrcUpdateT4 = CrcUpdateT4; ++ g_CrcUpdate = CrcUpdateT4; ++ #else // CRC_NUM_TABLES >= 8 ++ g_CrcUpdateT8 = CrcUpdateT8; ++ g_CrcUpdate = CrcUpdateT8; + #endif + } + else if (p[0] != 1 || p[1] != 2) + g_CrcUpdate = CrcUpdateT1; + else +- #endif ++ #endif // MY_CPU_BE + { + for (i = 256 * CRC_NUM_TABLES - 1; i >= 256; i--) + { +- UInt32 x = g_CrcTable[(size_t)i - 256]; +- g_CrcTable[i] = CRC_UINT32_SWAP(x); ++ const UInt32 x = g_CrcTable[(size_t)i - 256]; ++ g_CrcTable[i] = Z7_BSWAP32(x); + } +- g_CrcUpdateT4 = CrcUpdateT1_BeT4; +- g_CrcUpdate = CrcUpdateT1_BeT4; +- #if CRC_NUM_TABLES >= 8 +- g_CrcUpdateT8 = CrcUpdateT1_BeT8; +- g_CrcUpdate = CrcUpdateT1_BeT8; ++ #if CRC_NUM_TABLES <= 4 ++ g_CrcUpdate = CrcUpdateT1; ++ #elif CRC_NUM_TABLES <= 8 ++ // g_CrcUpdateT4 = CrcUpdateT1_BeT4; ++ g_CrcUpdate = CrcUpdateT1_BeT4; ++ #else // CRC_NUM_TABLES > 8 ++ g_CrcUpdateT8 = CrcUpdateT1_BeT8; ++ g_CrcUpdate = CrcUpdateT1_BeT8; + #endif + } + } +- #endif +- #endif ++ #endif // CRC_NUM_TABLES < 4 + + #ifdef MY_CPU_LE + #ifdef USE_ARM64_CRC +@@ -320,3 +334,7 @@ void MY_FAST_CALL CrcGenerateTable() + #endif + #endif + } ++ ++#undef kCrcPoly ++#undef CRC64_NUM_TABLES ++#undef CRC_UPDATE_BYTE_2 +diff --git a/src/lzma/7zCrc.h b/src/lzma/7zCrc.h +index 8fd579587..4afaeae4a 100644 +--- a/src/lzma/7zCrc.h ++++ b/src/lzma/7zCrc.h +@@ -1,8 +1,8 @@ + /* 7zCrc.h -- CRC32 calculation +-2013-01-18 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_CRC_H +-#define __7Z_CRC_H ++#ifndef ZIP7_INC_7Z_CRC_H ++#define ZIP7_INC_7Z_CRC_H + + #include "7zTypes.h" + +@@ -11,14 +11,16 @@ EXTERN_C_BEGIN + extern UInt32 g_CrcTable[]; + + /* Call CrcGenerateTable one time before other CRC functions */ +-void MY_FAST_CALL CrcGenerateTable(void); ++void Z7_FASTCALL CrcGenerateTable(void); + + #define CRC_INIT_VAL 0xFFFFFFFF + #define CRC_GET_DIGEST(crc) ((crc) ^ CRC_INIT_VAL) + #define CRC_UPDATE_BYTE(crc, b) (g_CrcTable[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) + +-UInt32 MY_FAST_CALL CrcUpdate(UInt32 crc, const void *data, size_t size); +-UInt32 MY_FAST_CALL CrcCalc(const void *data, size_t size); ++UInt32 Z7_FASTCALL CrcUpdate(UInt32 crc, const void *data, size_t size); ++UInt32 Z7_FASTCALL CrcCalc(const void *data, size_t size); ++ ++typedef UInt32 (Z7_FASTCALL *CRC_FUNC)(UInt32 v, const void *data, size_t size, const UInt32 *table); + + EXTERN_C_END + +diff --git a/src/lzma/7zCrcOpt.c b/src/lzma/7zCrcOpt.c +index 69fad9ca2..9c649290d 100644 +--- a/src/lzma/7zCrcOpt.c ++++ b/src/lzma/7zCrcOpt.c +@@ -1,5 +1,5 @@ + /* 7zCrcOpt.c -- CRC32 calculation +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -9,8 +9,8 @@ + + #define CRC_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) + +-UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table); +-UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table) ++UInt32 Z7_FASTCALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table); ++UInt32 Z7_FASTCALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const UInt32 *table) + { + const Byte *p = (const Byte *)data; + for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++) +@@ -29,8 +29,8 @@ UInt32 MY_FAST_CALL CrcUpdateT4(UInt32 v, const void *data, size_t size, const U + return v; + } + +-UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table); +-UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table) ++UInt32 Z7_FASTCALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table); ++UInt32 Z7_FASTCALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const UInt32 *table) + { + const Byte *p = (const Byte *)data; + for (; size > 0 && ((unsigned)(ptrdiff_t)p & 7) != 0; size--, p++) +@@ -61,11 +61,11 @@ UInt32 MY_FAST_CALL CrcUpdateT8(UInt32 v, const void *data, size_t size, const U + + #ifndef MY_CPU_LE + +-#define CRC_UINT32_SWAP(v) ((v >> 24) | ((v >> 8) & 0xFF00) | ((v << 8) & 0xFF0000) | (v << 24)) ++#define CRC_UINT32_SWAP(v) Z7_BSWAP32(v) + + #define CRC_UPDATE_BYTE_2_BE(crc, b) (table[(((crc) >> 24) ^ (b))] ^ ((crc) << 8)) + +-UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, const UInt32 *table) ++UInt32 Z7_FASTCALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, const UInt32 *table) + { + const Byte *p = (const Byte *)data; + table += 0x100; +@@ -86,7 +86,7 @@ UInt32 MY_FAST_CALL CrcUpdateT1_BeT4(UInt32 v, const void *data, size_t size, co + return CRC_UINT32_SWAP(v); + } + +-UInt32 MY_FAST_CALL CrcUpdateT1_BeT8(UInt32 v, const void *data, size_t size, const UInt32 *table) ++UInt32 Z7_FASTCALL CrcUpdateT1_BeT8(UInt32 v, const void *data, size_t size, const UInt32 *table) + { + const Byte *p = (const Byte *)data; + table += 0x100; +diff --git a/src/lzma/7zDec.c b/src/lzma/7zDec.c +index 94b676f89..380391c59 100644 +--- a/src/lzma/7zDec.c ++++ b/src/lzma/7zDec.c +@@ -1,11 +1,11 @@ + /* 7zDec.c -- Decoding from 7z folder +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + + #include + +-/* #define _7ZIP_PPMD_SUPPPORT */ ++/* #define Z7_PPMD_SUPPORT */ + + #include "7z.h" + #include "7zCrc.h" +@@ -16,27 +16,49 @@ + #include "Delta.h" + #include "LzmaDec.h" + #include "Lzma2Dec.h" +-#ifdef _7ZIP_PPMD_SUPPPORT ++#ifdef Z7_PPMD_SUPPORT + #include "Ppmd7.h" + #endif + + #define k_Copy 0 +-#ifndef _7Z_NO_METHOD_LZMA2 ++#ifndef Z7_NO_METHOD_LZMA2 + #define k_LZMA2 0x21 + #endif + #define k_LZMA 0x30101 + #define k_BCJ2 0x303011B +-#ifndef _7Z_NO_METHODS_FILTERS ++ ++#if !defined(Z7_NO_METHODS_FILTERS) ++#define Z7_USE_BRANCH_FILTER ++#endif ++ ++#if !defined(Z7_NO_METHODS_FILTERS) || \ ++ defined(Z7_USE_NATIVE_BRANCH_FILTER) && defined(MY_CPU_ARM64) ++#define Z7_USE_FILTER_ARM64 ++#ifndef Z7_USE_BRANCH_FILTER ++#define Z7_USE_BRANCH_FILTER ++#endif ++#define k_ARM64 0xa ++#endif ++ ++#if !defined(Z7_NO_METHODS_FILTERS) || \ ++ defined(Z7_USE_NATIVE_BRANCH_FILTER) && defined(MY_CPU_ARMT) ++#define Z7_USE_FILTER_ARMT ++#ifndef Z7_USE_BRANCH_FILTER ++#define Z7_USE_BRANCH_FILTER ++#endif ++#define k_ARMT 0x3030701 ++#endif ++ ++#ifndef Z7_NO_METHODS_FILTERS + #define k_Delta 3 + #define k_BCJ 0x3030103 + #define k_PPC 0x3030205 + #define k_IA64 0x3030401 + #define k_ARM 0x3030501 +-#define k_ARMT 0x3030701 + #define k_SPARC 0x3030805 + #endif + +-#ifdef _7ZIP_PPMD_SUPPPORT ++#ifdef Z7_PPMD_SUPPORT + + #define k_PPMD 0x30401 + +@@ -49,12 +71,12 @@ typedef struct + UInt64 processed; + BoolInt extra; + SRes res; +- const ILookInStream *inStream; ++ ILookInStreamPtr inStream; + } CByteInToLook; + +-static Byte ReadByte(const IByteIn *pp) ++static Byte ReadByte(IByteInPtr pp) + { +- CByteInToLook *p = CONTAINER_FROM_VTBL(pp, CByteInToLook, vt); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CByteInToLook) + if (p->cur != p->end) + return *p->cur++; + if (p->res == SZ_OK) +@@ -67,13 +89,13 @@ static Byte ReadByte(const IByteIn *pp) + p->cur = p->begin; + p->end = p->begin + size; + if (size != 0) +- return *p->cur++;; ++ return *p->cur++; + } + p->extra = True7z; + return 0; + } + +-static SRes SzDecodePpmd(const Byte *props, unsigned propsSize, UInt64 inSize, const ILookInStream *inStream, ++static SRes SzDecodePpmd(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStreamPtr inStream, + Byte *outBuffer, SizeT outSize, ISzAllocPtr allocMain) + { + CPpmd7 ppmd; +@@ -138,14 +160,14 @@ static SRes SzDecodePpmd(const Byte *props, unsigned propsSize, UInt64 inSize, c + #endif + + +-static SRes SzDecodeLzma(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStream *inStream, ++static SRes SzDecodeLzma(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStreamPtr inStream, + Byte *outBuffer, SizeT outSize, ISzAllocPtr allocMain) + { + CLzmaDec state; + SRes res = SZ_OK; + +- LzmaDec_Construct(&state); +- RINOK(LzmaDec_AllocateProbs(&state, props, propsSize, allocMain)); ++ LzmaDec_CONSTRUCT(&state) ++ RINOK(LzmaDec_AllocateProbs(&state, props, propsSize, allocMain)) + state.dic = outBuffer; + state.dicBufSize = outSize; + LzmaDec_Init(&state); +@@ -196,18 +218,18 @@ static SRes SzDecodeLzma(const Byte *props, unsigned propsSize, UInt64 inSize, I + } + + +-#ifndef _7Z_NO_METHOD_LZMA2 ++#ifndef Z7_NO_METHOD_LZMA2 + +-static SRes SzDecodeLzma2(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStream *inStream, ++static SRes SzDecodeLzma2(const Byte *props, unsigned propsSize, UInt64 inSize, ILookInStreamPtr inStream, + Byte *outBuffer, SizeT outSize, ISzAllocPtr allocMain) + { + CLzma2Dec state; + SRes res = SZ_OK; + +- Lzma2Dec_Construct(&state); ++ Lzma2Dec_CONSTRUCT(&state) + if (propsSize != 1) + return SZ_ERROR_DATA; +- RINOK(Lzma2Dec_AllocateProbs(&state, props[0], allocMain)); ++ RINOK(Lzma2Dec_AllocateProbs(&state, props[0], allocMain)) + state.decoder.dic = outBuffer; + state.decoder.dicBufSize = outSize; + Lzma2Dec_Init(&state); +@@ -257,7 +279,7 @@ static SRes SzDecodeLzma2(const Byte *props, unsigned propsSize, UInt64 inSize, + #endif + + +-static SRes SzDecodeCopy(UInt64 inSize, ILookInStream *inStream, Byte *outBuffer) ++static SRes SzDecodeCopy(UInt64 inSize, ILookInStreamPtr inStream, Byte *outBuffer) + { + while (inSize > 0) + { +@@ -265,13 +287,13 @@ static SRes SzDecodeCopy(UInt64 inSize, ILookInStream *inStream, Byte *outBuffer + size_t curSize = (1 << 18); + if (curSize > inSize) + curSize = (size_t)inSize; +- RINOK(ILookInStream_Look(inStream, &inBuf, &curSize)); ++ RINOK(ILookInStream_Look(inStream, &inBuf, &curSize)) + if (curSize == 0) + return SZ_ERROR_INPUT_EOF; + memcpy(outBuffer, inBuf, curSize); + outBuffer += curSize; + inSize -= curSize; +- RINOK(ILookInStream_Skip(inStream, curSize)); ++ RINOK(ILookInStream_Skip(inStream, curSize)) + } + return SZ_OK; + } +@@ -282,12 +304,12 @@ static BoolInt IS_MAIN_METHOD(UInt32 m) + { + case k_Copy: + case k_LZMA: +- #ifndef _7Z_NO_METHOD_LZMA2 ++ #ifndef Z7_NO_METHOD_LZMA2 + case k_LZMA2: +- #endif +- #ifdef _7ZIP_PPMD_SUPPPORT ++ #endif ++ #ifdef Z7_PPMD_SUPPORT + case k_PPMD: +- #endif ++ #endif + return True7z; + } + return False7z; +@@ -317,7 +339,7 @@ static SRes CheckSupportedFolder(const CSzFolder *f) + } + + +- #ifndef _7Z_NO_METHODS_FILTERS ++ #if defined(Z7_USE_BRANCH_FILTER) + + if (f->NumCoders == 2) + { +@@ -333,13 +355,20 @@ static SRes CheckSupportedFolder(const CSzFolder *f) + return SZ_ERROR_UNSUPPORTED; + switch ((UInt32)c->MethodID) + { ++ #if !defined(Z7_NO_METHODS_FILTERS) + case k_Delta: + case k_BCJ: + case k_PPC: + case k_IA64: + case k_SPARC: + case k_ARM: ++ #endif ++ #ifdef Z7_USE_FILTER_ARM64 ++ case k_ARM64: ++ #endif ++ #ifdef Z7_USE_FILTER_ARMT + case k_ARMT: ++ #endif + break; + default: + return SZ_ERROR_UNSUPPORTED; +@@ -372,15 +401,16 @@ static SRes CheckSupportedFolder(const CSzFolder *f) + return SZ_ERROR_UNSUPPORTED; + } + +-#ifndef _7Z_NO_METHODS_FILTERS +-#define CASE_BRA_CONV(isa) case k_ ## isa: isa ## _Convert(outBuffer, outSize, 0, 0); break; +-#endif ++ ++ ++ ++ + + static SRes SzFolder_Decode2(const CSzFolder *folder, + const Byte *propsData, + const UInt64 *unpackSizes, + const UInt64 *packPositions, +- ILookInStream *inStream, UInt64 startPos, ++ ILookInStreamPtr inStream, UInt64 startPos, + Byte *outBuffer, SizeT outSize, ISzAllocPtr allocMain, + Byte *tempBuf[]) + { +@@ -389,7 +419,7 @@ static SRes SzFolder_Decode2(const CSzFolder *folder, + SizeT tempSize3 = 0; + Byte *tempBuf3 = 0; + +- RINOK(CheckSupportedFolder(folder)); ++ RINOK(CheckSupportedFolder(folder)) + + for (ci = 0; ci < folder->NumCoders; ci++) + { +@@ -404,8 +434,8 @@ static SRes SzFolder_Decode2(const CSzFolder *folder, + SizeT outSizeCur = outSize; + if (folder->NumCoders == 4) + { +- UInt32 indices[] = { 3, 2, 0 }; +- UInt64 unpackSize = unpackSizes[ci]; ++ const UInt32 indices[] = { 3, 2, 0 }; ++ const UInt64 unpackSize = unpackSizes[ci]; + si = indices[ci]; + if (ci < 2) + { +@@ -431,37 +461,37 @@ static SRes SzFolder_Decode2(const CSzFolder *folder, + } + offset = packPositions[si]; + inSize = packPositions[(size_t)si + 1] - offset; +- RINOK(LookInStream_SeekTo(inStream, startPos + offset)); ++ RINOK(LookInStream_SeekTo(inStream, startPos + offset)) + + if (coder->MethodID == k_Copy) + { + if (inSize != outSizeCur) /* check it */ + return SZ_ERROR_DATA; +- RINOK(SzDecodeCopy(inSize, inStream, outBufCur)); ++ RINOK(SzDecodeCopy(inSize, inStream, outBufCur)) + } + else if (coder->MethodID == k_LZMA) + { +- RINOK(SzDecodeLzma(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)); ++ RINOK(SzDecodeLzma(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)) + } +- #ifndef _7Z_NO_METHOD_LZMA2 ++ #ifndef Z7_NO_METHOD_LZMA2 + else if (coder->MethodID == k_LZMA2) + { +- RINOK(SzDecodeLzma2(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)); ++ RINOK(SzDecodeLzma2(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)) + } +- #endif +- #ifdef _7ZIP_PPMD_SUPPPORT ++ #endif ++ #ifdef Z7_PPMD_SUPPORT + else if (coder->MethodID == k_PPMD) + { +- RINOK(SzDecodePpmd(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)); ++ RINOK(SzDecodePpmd(propsData + coder->PropsOffset, coder->PropsSize, inSize, inStream, outBufCur, outSizeCur, allocMain)) + } +- #endif ++ #endif + else + return SZ_ERROR_UNSUPPORTED; + } + else if (coder->MethodID == k_BCJ2) + { +- UInt64 offset = packPositions[1]; +- UInt64 s3Size = packPositions[2] - offset; ++ const UInt64 offset = packPositions[1]; ++ const UInt64 s3Size = packPositions[2] - offset; + + if (ci != 3) + return SZ_ERROR_UNSUPPORTED; +@@ -473,8 +503,8 @@ static SRes SzFolder_Decode2(const CSzFolder *folder, + if (!tempBuf[2] && tempSizes[2] != 0) + return SZ_ERROR_MEM; + +- RINOK(LookInStream_SeekTo(inStream, startPos + offset)); +- RINOK(SzDecodeCopy(s3Size, inStream, tempBuf[2])); ++ RINOK(LookInStream_SeekTo(inStream, startPos + offset)) ++ RINOK(SzDecodeCopy(s3Size, inStream, tempBuf[2])) + + if ((tempSizes[0] & 3) != 0 || + (tempSizes[1] & 3) != 0 || +@@ -493,26 +523,22 @@ static SRes SzFolder_Decode2(const CSzFolder *folder, + p.destLim = outBuffer + outSize; + + Bcj2Dec_Init(&p); +- RINOK(Bcj2Dec_Decode(&p)); ++ RINOK(Bcj2Dec_Decode(&p)) + + { + unsigned i; + for (i = 0; i < 4; i++) + if (p.bufs[i] != p.lims[i]) + return SZ_ERROR_DATA; +- +- if (!Bcj2Dec_IsFinished(&p)) +- return SZ_ERROR_DATA; +- +- if (p.dest != p.destLim +- || p.state != BCJ2_STREAM_MAIN) ++ if (p.dest != p.destLim || !Bcj2Dec_IsMaybeFinished(&p)) + return SZ_ERROR_DATA; + } + } + } +- #ifndef _7Z_NO_METHODS_FILTERS ++ #if defined(Z7_USE_BRANCH_FILTER) + else if (ci == 1) + { ++ #if !defined(Z7_NO_METHODS_FILTERS) + if (coder->MethodID == k_Delta) + { + if (coder->PropsSize != 1) +@@ -522,31 +548,53 @@ static SRes SzFolder_Decode2(const CSzFolder *folder, + Delta_Init(state); + Delta_Decode(state, (unsigned)(propsData[coder->PropsOffset]) + 1, outBuffer, outSize); + } ++ continue; + } +- else ++ #endif ++ ++ #ifdef Z7_USE_FILTER_ARM64 ++ if (coder->MethodID == k_ARM64) ++ { ++ UInt32 pc = 0; ++ if (coder->PropsSize == 4) ++ pc = GetUi32(propsData + coder->PropsOffset); ++ else if (coder->PropsSize != 0) ++ return SZ_ERROR_UNSUPPORTED; ++ z7_BranchConv_ARM64_Dec(outBuffer, outSize, pc); ++ continue; ++ } ++ #endif ++ ++ #if !defined(Z7_NO_METHODS_FILTERS) || defined(Z7_USE_FILTER_ARMT) + { + if (coder->PropsSize != 0) + return SZ_ERROR_UNSUPPORTED; ++ #define CASE_BRA_CONV(isa) case k_ ## isa: Z7_BRANCH_CONV_DEC(isa)(outBuffer, outSize, 0); break; // pc = 0; + switch (coder->MethodID) + { ++ #if !defined(Z7_NO_METHODS_FILTERS) + case k_BCJ: + { +- UInt32 state; +- x86_Convert_Init(state); +- x86_Convert(outBuffer, outSize, 0, &state, 0); ++ UInt32 state = Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL; ++ z7_BranchConvSt_X86_Dec(outBuffer, outSize, 0, &state); // pc = 0 + break; + } + CASE_BRA_CONV(PPC) + CASE_BRA_CONV(IA64) + CASE_BRA_CONV(SPARC) + CASE_BRA_CONV(ARM) ++ #endif ++ #if !defined(Z7_NO_METHODS_FILTERS) || defined(Z7_USE_FILTER_ARMT) + CASE_BRA_CONV(ARMT) ++ #endif + default: + return SZ_ERROR_UNSUPPORTED; + } ++ continue; + } +- } +- #endif ++ #endif ++ } // (c == 1) ++ #endif + else + return SZ_ERROR_UNSUPPORTED; + } +@@ -556,7 +604,7 @@ static SRes SzFolder_Decode2(const CSzFolder *folder, + + + SRes SzAr_DecodeFolder(const CSzAr *p, UInt32 folderIndex, +- ILookInStream *inStream, UInt64 startPos, ++ ILookInStreamPtr inStream, UInt64 startPos, + Byte *outBuffer, size_t outSize, + ISzAllocPtr allocMain) + { +diff --git a/src/lzma/7zFile.c b/src/lzma/7zFile.c +index 13d2efa47..ba5daa133 100644 +--- a/src/lzma/7zFile.c ++++ b/src/lzma/7zFile.c +@@ -1,5 +1,5 @@ + /* 7zFile.c -- File IO +-2021-04-29 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -268,7 +268,7 @@ WRes File_Write(CSzFile *p, const void *data, size_t *size) + return errno; + if (processed == 0) + break; +- data = (void *)((Byte *)data + (size_t)processed); ++ data = (const void *)((const Byte *)data + (size_t)processed); + originalSize -= (size_t)processed; + *size += (size_t)processed; + } +@@ -287,7 +287,8 @@ WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin) + DWORD moveMethod; + UInt32 low = (UInt32)*pos; + LONG high = (LONG)((UInt64)*pos >> 16 >> 16); /* for case when UInt64 is 32-bit only */ +- switch (origin) ++ // (int) to eliminate clang warning ++ switch ((int)origin) + { + case SZ_SEEK_SET: moveMethod = FILE_BEGIN; break; + case SZ_SEEK_CUR: moveMethod = FILE_CURRENT; break; +@@ -308,7 +309,7 @@ WRes File_Seek(CSzFile *p, Int64 *pos, ESzSeek origin) + + int moveMethod; // = origin; + +- switch (origin) ++ switch ((int)origin) + { + case SZ_SEEK_SET: moveMethod = SEEK_SET; break; + case SZ_SEEK_CUR: moveMethod = SEEK_CUR; break; +@@ -387,10 +388,10 @@ WRes File_GetLength(CSzFile *p, UInt64 *length) + + /* ---------- FileSeqInStream ---------- */ + +-static SRes FileSeqInStream_Read(const ISeqInStream *pp, void *buf, size_t *size) ++static SRes FileSeqInStream_Read(ISeqInStreamPtr pp, void *buf, size_t *size) + { +- CFileSeqInStream *p = CONTAINER_FROM_VTBL(pp, CFileSeqInStream, vt); +- WRes wres = File_Read(&p->file, buf, size); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CFileSeqInStream) ++ const WRes wres = File_Read(&p->file, buf, size); + p->wres = wres; + return (wres == 0) ? SZ_OK : SZ_ERROR_READ; + } +@@ -403,18 +404,18 @@ void FileSeqInStream_CreateVTable(CFileSeqInStream *p) + + /* ---------- FileInStream ---------- */ + +-static SRes FileInStream_Read(const ISeekInStream *pp, void *buf, size_t *size) ++static SRes FileInStream_Read(ISeekInStreamPtr pp, void *buf, size_t *size) + { +- CFileInStream *p = CONTAINER_FROM_VTBL(pp, CFileInStream, vt); +- WRes wres = File_Read(&p->file, buf, size); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CFileInStream) ++ const WRes wres = File_Read(&p->file, buf, size); + p->wres = wres; + return (wres == 0) ? SZ_OK : SZ_ERROR_READ; + } + +-static SRes FileInStream_Seek(const ISeekInStream *pp, Int64 *pos, ESzSeek origin) ++static SRes FileInStream_Seek(ISeekInStreamPtr pp, Int64 *pos, ESzSeek origin) + { +- CFileInStream *p = CONTAINER_FROM_VTBL(pp, CFileInStream, vt); +- WRes wres = File_Seek(&p->file, pos, origin); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CFileInStream) ++ const WRes wres = File_Seek(&p->file, pos, origin); + p->wres = wres; + return (wres == 0) ? SZ_OK : SZ_ERROR_READ; + } +@@ -428,10 +429,10 @@ void FileInStream_CreateVTable(CFileInStream *p) + + /* ---------- FileOutStream ---------- */ + +-static size_t FileOutStream_Write(const ISeqOutStream *pp, const void *data, size_t size) ++static size_t FileOutStream_Write(ISeqOutStreamPtr pp, const void *data, size_t size) + { +- CFileOutStream *p = CONTAINER_FROM_VTBL(pp, CFileOutStream, vt); +- WRes wres = File_Write(&p->file, data, &size); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CFileOutStream) ++ const WRes wres = File_Write(&p->file, data, &size); + p->wres = wres; + return size; + } +diff --git a/src/lzma/7zFile.h b/src/lzma/7zFile.h +index 788abb6b9..f5069cd9e 100644 +--- a/src/lzma/7zFile.h ++++ b/src/lzma/7zFile.h +@@ -1,8 +1,8 @@ + /* 7zFile.h -- File IO +-2021-02-15 : Igor Pavlov : Public domain */ ++2023-03-05 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_FILE_H +-#define __7Z_FILE_H ++#ifndef ZIP7_INC_FILE_H ++#define ZIP7_INC_FILE_H + + #ifdef _WIN32 + #define USE_WINDOWS_FILE +@@ -10,7 +10,8 @@ + #endif + + #ifdef USE_WINDOWS_FILE +-#include ++#include "7zWindows.h" ++ + #else + // note: USE_FOPEN mode is limited to 32-bit file size + // #define USE_FOPEN +diff --git a/src/lzma/7zStream.c b/src/lzma/7zStream.c +index 28a14604f..74e75b65a 100644 +--- a/src/lzma/7zStream.c ++++ b/src/lzma/7zStream.c +@@ -1,5 +1,5 @@ + /* 7zStream.c -- 7z Stream functions +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -7,12 +7,33 @@ + + #include "7zTypes.h" + +-SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType) ++ ++SRes SeqInStream_ReadMax(ISeqInStreamPtr stream, void *buf, size_t *processedSize) ++{ ++ size_t size = *processedSize; ++ *processedSize = 0; ++ while (size != 0) ++ { ++ size_t cur = size; ++ const SRes res = ISeqInStream_Read(stream, buf, &cur); ++ *processedSize += cur; ++ buf = (void *)((Byte *)buf + cur); ++ size -= cur; ++ if (res != SZ_OK) ++ return res; ++ if (cur == 0) ++ return SZ_OK; ++ } ++ return SZ_OK; ++} ++ ++/* ++SRes SeqInStream_Read2(ISeqInStreamPtr stream, void *buf, size_t size, SRes errorType) + { + while (size != 0) + { + size_t processed = size; +- RINOK(ISeqInStream_Read(stream, buf, &processed)); ++ RINOK(ISeqInStream_Read(stream, buf, &processed)) + if (processed == 0) + return errorType; + buf = (void *)((Byte *)buf + processed); +@@ -21,42 +42,44 @@ SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes + return SZ_OK; + } + +-SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size) ++SRes SeqInStream_Read(ISeqInStreamPtr stream, void *buf, size_t size) + { + return SeqInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF); + } ++*/ ++ + +-SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf) ++SRes SeqInStream_ReadByte(ISeqInStreamPtr stream, Byte *buf) + { + size_t processed = 1; +- RINOK(ISeqInStream_Read(stream, buf, &processed)); ++ RINOK(ISeqInStream_Read(stream, buf, &processed)) + return (processed == 1) ? SZ_OK : SZ_ERROR_INPUT_EOF; + } + + + +-SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset) ++SRes LookInStream_SeekTo(ILookInStreamPtr stream, UInt64 offset) + { + Int64 t = (Int64)offset; + return ILookInStream_Seek(stream, &t, SZ_SEEK_SET); + } + +-SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size) ++SRes LookInStream_LookRead(ILookInStreamPtr stream, void *buf, size_t *size) + { + const void *lookBuf; + if (*size == 0) + return SZ_OK; +- RINOK(ILookInStream_Look(stream, &lookBuf, size)); ++ RINOK(ILookInStream_Look(stream, &lookBuf, size)) + memcpy(buf, lookBuf, *size); + return ILookInStream_Skip(stream, *size); + } + +-SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType) ++SRes LookInStream_Read2(ILookInStreamPtr stream, void *buf, size_t size, SRes errorType) + { + while (size != 0) + { + size_t processed = size; +- RINOK(ILookInStream_Read(stream, buf, &processed)); ++ RINOK(ILookInStream_Read(stream, buf, &processed)) + if (processed == 0) + return errorType; + buf = (void *)((Byte *)buf + processed); +@@ -65,16 +88,16 @@ SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRe + return SZ_OK; + } + +-SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size) ++SRes LookInStream_Read(ILookInStreamPtr stream, void *buf, size_t size) + { + return LookInStream_Read2(stream, buf, size, SZ_ERROR_INPUT_EOF); + } + + + +-#define GET_LookToRead2 CLookToRead2 *p = CONTAINER_FROM_VTBL(pp, CLookToRead2, vt); ++#define GET_LookToRead2 Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CLookToRead2) + +-static SRes LookToRead2_Look_Lookahead(const ILookInStream *pp, const void **buf, size_t *size) ++static SRes LookToRead2_Look_Lookahead(ILookInStreamPtr pp, const void **buf, size_t *size) + { + SRes res = SZ_OK; + GET_LookToRead2 +@@ -93,7 +116,7 @@ static SRes LookToRead2_Look_Lookahead(const ILookInStream *pp, const void **buf + return res; + } + +-static SRes LookToRead2_Look_Exact(const ILookInStream *pp, const void **buf, size_t *size) ++static SRes LookToRead2_Look_Exact(ILookInStreamPtr pp, const void **buf, size_t *size) + { + SRes res = SZ_OK; + GET_LookToRead2 +@@ -113,14 +136,14 @@ static SRes LookToRead2_Look_Exact(const ILookInStream *pp, const void **buf, si + return res; + } + +-static SRes LookToRead2_Skip(const ILookInStream *pp, size_t offset) ++static SRes LookToRead2_Skip(ILookInStreamPtr pp, size_t offset) + { + GET_LookToRead2 + p->pos += offset; + return SZ_OK; + } + +-static SRes LookToRead2_Read(const ILookInStream *pp, void *buf, size_t *size) ++static SRes LookToRead2_Read(ILookInStreamPtr pp, void *buf, size_t *size) + { + GET_LookToRead2 + size_t rem = p->size - p->pos; +@@ -134,7 +157,7 @@ static SRes LookToRead2_Read(const ILookInStream *pp, void *buf, size_t *size) + return SZ_OK; + } + +-static SRes LookToRead2_Seek(const ILookInStream *pp, Int64 *pos, ESzSeek origin) ++static SRes LookToRead2_Seek(ILookInStreamPtr pp, Int64 *pos, ESzSeek origin) + { + GET_LookToRead2 + p->pos = p->size = 0; +@@ -153,9 +176,9 @@ void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead) + + + +-static SRes SecToLook_Read(const ISeqInStream *pp, void *buf, size_t *size) ++static SRes SecToLook_Read(ISeqInStreamPtr pp, void *buf, size_t *size) + { +- CSecToLook *p = CONTAINER_FROM_VTBL(pp, CSecToLook, vt); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSecToLook) + return LookInStream_LookRead(p->realStream, buf, size); + } + +@@ -164,9 +187,9 @@ void SecToLook_CreateVTable(CSecToLook *p) + p->vt.Read = SecToLook_Read; + } + +-static SRes SecToRead_Read(const ISeqInStream *pp, void *buf, size_t *size) ++static SRes SecToRead_Read(ISeqInStreamPtr pp, void *buf, size_t *size) + { +- CSecToRead *p = CONTAINER_FROM_VTBL(pp, CSecToRead, vt); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSecToRead) + return ILookInStream_Read(p->realStream, buf, size); + } + +diff --git a/src/lzma/7zTypes.h b/src/lzma/7zTypes.h +index 49291ce2a..e16175049 100644 +--- a/src/lzma/7zTypes.h ++++ b/src/lzma/7zTypes.h +@@ -1,8 +1,8 @@ + /* 7zTypes.h -- Basic types +-2021-12-25 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_TYPES_H +-#define __7Z_TYPES_H ++#ifndef ZIP7_7Z_TYPES_H ++#define ZIP7_7Z_TYPES_H + + #ifdef _WIN32 + /* #include */ +@@ -52,6 +52,11 @@ typedef int SRes; + #define MY_ALIGN(n) + #endif + #else ++ /* ++ // C11/C++11: ++ #include ++ #define MY_ALIGN(n) alignas(n) ++ */ + #define MY_ALIGN(n) __attribute__ ((aligned(n))) + #endif + +@@ -62,7 +67,7 @@ typedef int SRes; + typedef unsigned WRes; + #define MY_SRes_HRESULT_FROM_WRes(x) HRESULT_FROM_WIN32(x) + +-// #define MY_HRES_ERROR__INTERNAL_ERROR MY_SRes_HRESULT_FROM_WRes(ERROR_INTERNAL_ERROR) ++// #define MY_HRES_ERROR_INTERNAL_ERROR MY_SRes_HRESULT_FROM_WRes(ERROR_INTERNAL_ERROR) + + #else // _WIN32 + +@@ -70,13 +75,13 @@ typedef unsigned WRes; + typedef int WRes; + + // (FACILITY_ERRNO = 0x800) is 7zip's FACILITY constant to represent (errno) errors in HRESULT +-#define MY__FACILITY_ERRNO 0x800 +-#define MY__FACILITY_WIN32 7 +-#define MY__FACILITY__WRes MY__FACILITY_ERRNO ++#define MY_FACILITY_ERRNO 0x800 ++#define MY_FACILITY_WIN32 7 ++#define MY_FACILITY_WRes MY_FACILITY_ERRNO + + #define MY_HRESULT_FROM_errno_CONST_ERROR(x) ((HRESULT)( \ + ( (HRESULT)(x) & 0x0000FFFF) \ +- | (MY__FACILITY__WRes << 16) \ ++ | (MY_FACILITY_WRes << 16) \ + | (HRESULT)0x80000000 )) + + #define MY_SRes_HRESULT_FROM_WRes(x) \ +@@ -120,23 +125,19 @@ typedef int WRes; + #define ERROR_INVALID_REPARSE_DATA ((HRESULT)0x80071128L) + #define ERROR_REPARSE_TAG_INVALID ((HRESULT)0x80071129L) + +-// if (MY__FACILITY__WRes != FACILITY_WIN32), ++// if (MY_FACILITY_WRes != FACILITY_WIN32), + // we use FACILITY_WIN32 for COM errors: + #define E_OUTOFMEMORY ((HRESULT)0x8007000EL) + #define E_INVALIDARG ((HRESULT)0x80070057L) +-#define MY__E_ERROR_NEGATIVE_SEEK ((HRESULT)0x80070083L) ++#define MY_E_ERROR_NEGATIVE_SEEK ((HRESULT)0x80070083L) + + /* + // we can use FACILITY_ERRNO for some COM errors, that have errno equivalents: + #define E_OUTOFMEMORY MY_HRESULT_FROM_errno_CONST_ERROR(ENOMEM) + #define E_INVALIDARG MY_HRESULT_FROM_errno_CONST_ERROR(EINVAL) +-#define MY__E_ERROR_NEGATIVE_SEEK MY_HRESULT_FROM_errno_CONST_ERROR(EINVAL) ++#define MY_E_ERROR_NEGATIVE_SEEK MY_HRESULT_FROM_errno_CONST_ERROR(EINVAL) + */ + +-// gcc / clang : (sizeof(long) == sizeof(void*)) in 32/64 bits +-typedef long INT_PTR; +-typedef unsigned long UINT_PTR; +- + #define TEXT(quote) quote + + #define FILE_ATTRIBUTE_READONLY 0x0001 +@@ -160,18 +161,18 @@ typedef unsigned long UINT_PTR; + + + #ifndef RINOK +-#define RINOK(x) { int __result__ = (x); if (__result__ != 0) return __result__; } ++#define RINOK(x) { const int _result_ = (x); if (_result_ != 0) return _result_; } + #endif + + #ifndef RINOK_WRes +-#define RINOK_WRes(x) { WRes __result__ = (x); if (__result__ != 0) return __result__; } ++#define RINOK_WRes(x) { const WRes _result_ = (x); if (_result_ != 0) return _result_; } + #endif + + typedef unsigned char Byte; + typedef short Int16; + typedef unsigned short UInt16; + +-#ifdef _LZMA_UINT32_IS_ULONG ++#ifdef Z7_DECL_Int32_AS_long + typedef long Int32; + typedef unsigned long UInt32; + #else +@@ -210,37 +211,51 @@ typedef size_t SIZE_T; + #endif // _WIN32 + + +-#define MY_HRES_ERROR__INTERNAL_ERROR ((HRESULT)0x8007054FL) +- ++#define MY_HRES_ERROR_INTERNAL_ERROR ((HRESULT)0x8007054FL) + +-#ifdef _SZ_NO_INT_64 + +-/* define _SZ_NO_INT_64, if your compiler doesn't support 64-bit integers. +- NOTES: Some code will work incorrectly in that case! */ ++#ifdef Z7_DECL_Int64_AS_long + + typedef long Int64; + typedef unsigned long UInt64; + + #else + +-#if defined(_MSC_VER) || defined(__BORLANDC__) ++#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(__clang__) + typedef __int64 Int64; + typedef unsigned __int64 UInt64; +-#define UINT64_CONST(n) n ++#else ++#if defined(__clang__) || defined(__GNUC__) ++#include ++typedef int64_t Int64; ++typedef uint64_t UInt64; + #else + typedef long long int Int64; + typedef unsigned long long int UInt64; +-#define UINT64_CONST(n) n ## ULL ++// #define UINT64_CONST(n) n ## ULL ++#endif + #endif + + #endif + +-#ifdef _LZMA_NO_SYSTEM_SIZE_T +-typedef UInt32 SizeT; ++#define UINT64_CONST(n) n ++ ++ ++#ifdef Z7_DECL_SizeT_AS_unsigned_int ++typedef unsigned int SizeT; + #else + typedef size_t SizeT; + #endif + ++/* ++#if (defined(_MSC_VER) && _MSC_VER <= 1200) ++typedef size_t MY_uintptr_t; ++#else ++#include ++typedef uintptr_t MY_uintptr_t; ++#endif ++*/ ++ + typedef int BoolInt; + /* typedef BoolInt Bool; */ + #define True7z 1 +@@ -248,23 +263,23 @@ typedef int BoolInt; + + + #ifdef _WIN32 +-#define MY_STD_CALL __stdcall ++#define Z7_STDCALL __stdcall + #else +-#define MY_STD_CALL ++#define Z7_STDCALL + #endif + + #ifdef _MSC_VER + + #if _MSC_VER >= 1300 +-#define MY_NO_INLINE __declspec(noinline) ++#define Z7_NO_INLINE __declspec(noinline) + #else +-#define MY_NO_INLINE ++#define Z7_NO_INLINE + #endif + +-#define MY_FORCE_INLINE __forceinline ++#define Z7_FORCE_INLINE __forceinline + +-#define MY_CDECL __cdecl +-#define MY_FAST_CALL __fastcall ++#define Z7_CDECL __cdecl ++#define Z7_FASTCALL __fastcall + + #else // _MSC_VER + +@@ -272,27 +287,25 @@ typedef int BoolInt; + || (defined(__clang__) && (__clang_major__ >= 4)) \ + || defined(__INTEL_COMPILER) \ + || defined(__xlC__) +-#define MY_NO_INLINE __attribute__((noinline)) +-// #define MY_FORCE_INLINE __attribute__((always_inline)) inline ++#define Z7_NO_INLINE __attribute__((noinline)) ++#define Z7_FORCE_INLINE __attribute__((always_inline)) inline + #else +-#define MY_NO_INLINE ++#define Z7_NO_INLINE ++#define Z7_FORCE_INLINE + #endif + +-#define MY_FORCE_INLINE +- +- +-#define MY_CDECL ++#define Z7_CDECL + + #if defined(_M_IX86) \ + || defined(__i386__) +-// #define MY_FAST_CALL __attribute__((fastcall)) +-// #define MY_FAST_CALL __attribute__((cdecl)) +-#define MY_FAST_CALL ++// #define Z7_FASTCALL __attribute__((fastcall)) ++// #define Z7_FASTCALL __attribute__((cdecl)) ++#define Z7_FASTCALL + #elif defined(MY_CPU_AMD64) +-// #define MY_FAST_CALL __attribute__((ms_abi)) +-#define MY_FAST_CALL ++// #define Z7_FASTCALL __attribute__((ms_abi)) ++#define Z7_FASTCALL + #else +-#define MY_FAST_CALL ++#define Z7_FASTCALL + #endif + + #endif // _MSC_VER +@@ -300,41 +313,49 @@ typedef int BoolInt; + + /* The following interfaces use first parameter as pointer to structure */ + +-typedef struct IByteIn IByteIn; +-struct IByteIn ++// #define Z7_C_IFACE_CONST_QUAL ++#define Z7_C_IFACE_CONST_QUAL const ++ ++#define Z7_C_IFACE_DECL(a) \ ++ struct a ## _; \ ++ typedef Z7_C_IFACE_CONST_QUAL struct a ## _ * a ## Ptr; \ ++ typedef struct a ## _ a; \ ++ struct a ## _ ++ ++ ++Z7_C_IFACE_DECL (IByteIn) + { +- Byte (*Read)(const IByteIn *p); /* reads one byte, returns 0 in case of EOF or error */ ++ Byte (*Read)(IByteInPtr p); /* reads one byte, returns 0 in case of EOF or error */ + }; + #define IByteIn_Read(p) (p)->Read(p) + + +-typedef struct IByteOut IByteOut; +-struct IByteOut ++Z7_C_IFACE_DECL (IByteOut) + { +- void (*Write)(const IByteOut *p, Byte b); ++ void (*Write)(IByteOutPtr p, Byte b); + }; + #define IByteOut_Write(p, b) (p)->Write(p, b) + + +-typedef struct ISeqInStream ISeqInStream; +-struct ISeqInStream ++Z7_C_IFACE_DECL (ISeqInStream) + { +- SRes (*Read)(const ISeqInStream *p, void *buf, size_t *size); ++ SRes (*Read)(ISeqInStreamPtr p, void *buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) < input(*size)) is allowed */ + }; + #define ISeqInStream_Read(p, buf, size) (p)->Read(p, buf, size) + ++/* try to read as much as avail in stream and limited by (*processedSize) */ ++SRes SeqInStream_ReadMax(ISeqInStreamPtr stream, void *buf, size_t *processedSize); + /* it can return SZ_ERROR_INPUT_EOF */ +-SRes SeqInStream_Read(const ISeqInStream *stream, void *buf, size_t size); +-SRes SeqInStream_Read2(const ISeqInStream *stream, void *buf, size_t size, SRes errorType); +-SRes SeqInStream_ReadByte(const ISeqInStream *stream, Byte *buf); ++// SRes SeqInStream_Read(ISeqInStreamPtr stream, void *buf, size_t size); ++// SRes SeqInStream_Read2(ISeqInStreamPtr stream, void *buf, size_t size, SRes errorType); ++SRes SeqInStream_ReadByte(ISeqInStreamPtr stream, Byte *buf); + + +-typedef struct ISeqOutStream ISeqOutStream; +-struct ISeqOutStream ++Z7_C_IFACE_DECL (ISeqOutStream) + { +- size_t (*Write)(const ISeqOutStream *p, const void *buf, size_t size); ++ size_t (*Write)(ISeqOutStreamPtr p, const void *buf, size_t size); + /* Returns: result - the number of actually written bytes. + (result < size) means error */ + }; +@@ -348,29 +369,26 @@ typedef enum + } ESzSeek; + + +-typedef struct ISeekInStream ISeekInStream; +-struct ISeekInStream ++Z7_C_IFACE_DECL (ISeekInStream) + { +- SRes (*Read)(const ISeekInStream *p, void *buf, size_t *size); /* same as ISeqInStream::Read */ +- SRes (*Seek)(const ISeekInStream *p, Int64 *pos, ESzSeek origin); ++ SRes (*Read)(ISeekInStreamPtr p, void *buf, size_t *size); /* same as ISeqInStream::Read */ ++ SRes (*Seek)(ISeekInStreamPtr p, Int64 *pos, ESzSeek origin); + }; + #define ISeekInStream_Read(p, buf, size) (p)->Read(p, buf, size) + #define ISeekInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin) + + +-typedef struct ILookInStream ILookInStream; +-struct ILookInStream ++Z7_C_IFACE_DECL (ILookInStream) + { +- SRes (*Look)(const ILookInStream *p, const void **buf, size_t *size); ++ SRes (*Look)(ILookInStreamPtr p, const void **buf, size_t *size); + /* if (input(*size) != 0 && output(*size) == 0) means end_of_stream. + (output(*size) > input(*size)) is not allowed + (output(*size) < input(*size)) is allowed */ +- SRes (*Skip)(const ILookInStream *p, size_t offset); ++ SRes (*Skip)(ILookInStreamPtr p, size_t offset); + /* offset must be <= output(*size) of Look */ +- +- SRes (*Read)(const ILookInStream *p, void *buf, size_t *size); ++ SRes (*Read)(ILookInStreamPtr p, void *buf, size_t *size); + /* reads directly (without buffer). It's same as ISeqInStream::Read */ +- SRes (*Seek)(const ILookInStream *p, Int64 *pos, ESzSeek origin); ++ SRes (*Seek)(ILookInStreamPtr p, Int64 *pos, ESzSeek origin); + }; + + #define ILookInStream_Look(p, buf, size) (p)->Look(p, buf, size) +@@ -379,19 +397,18 @@ struct ILookInStream + #define ILookInStream_Seek(p, pos, origin) (p)->Seek(p, pos, origin) + + +-SRes LookInStream_LookRead(const ILookInStream *stream, void *buf, size_t *size); +-SRes LookInStream_SeekTo(const ILookInStream *stream, UInt64 offset); ++SRes LookInStream_LookRead(ILookInStreamPtr stream, void *buf, size_t *size); ++SRes LookInStream_SeekTo(ILookInStreamPtr stream, UInt64 offset); + + /* reads via ILookInStream::Read */ +-SRes LookInStream_Read2(const ILookInStream *stream, void *buf, size_t size, SRes errorType); +-SRes LookInStream_Read(const ILookInStream *stream, void *buf, size_t size); +- ++SRes LookInStream_Read2(ILookInStreamPtr stream, void *buf, size_t size, SRes errorType); ++SRes LookInStream_Read(ILookInStreamPtr stream, void *buf, size_t size); + + + typedef struct + { + ILookInStream vt; +- const ISeekInStream *realStream; ++ ISeekInStreamPtr realStream; + + size_t pos; + size_t size; /* it's data size */ +@@ -403,13 +420,13 @@ typedef struct + + void LookToRead2_CreateVTable(CLookToRead2 *p, int lookahead); + +-#define LookToRead2_Init(p) { (p)->pos = (p)->size = 0; } ++#define LookToRead2_INIT(p) { (p)->pos = (p)->size = 0; } + + + typedef struct + { + ISeqInStream vt; +- const ILookInStream *realStream; ++ ILookInStreamPtr realStream; + } CSecToLook; + + void SecToLook_CreateVTable(CSecToLook *p); +@@ -419,20 +436,19 @@ void SecToLook_CreateVTable(CSecToLook *p); + typedef struct + { + ISeqInStream vt; +- const ILookInStream *realStream; ++ ILookInStreamPtr realStream; + } CSecToRead; + + void SecToRead_CreateVTable(CSecToRead *p); + + +-typedef struct ICompressProgress ICompressProgress; +- +-struct ICompressProgress ++Z7_C_IFACE_DECL (ICompressProgress) + { +- SRes (*Progress)(const ICompressProgress *p, UInt64 inSize, UInt64 outSize); ++ SRes (*Progress)(ICompressProgressPtr p, UInt64 inSize, UInt64 outSize); + /* Returns: result. (result != SZ_OK) means break. + Value (UInt64)(Int64)-1 for size means unknown value. */ + }; ++ + #define ICompressProgress_Progress(p, inSize, outSize) (p)->Progress(p, inSize, outSize) + + +@@ -470,13 +486,13 @@ struct ISzAlloc + + + +-#ifndef MY_container_of ++#ifndef Z7_container_of + + /* +-#define MY_container_of(ptr, type, m) container_of(ptr, type, m) +-#define MY_container_of(ptr, type, m) CONTAINING_RECORD(ptr, type, m) +-#define MY_container_of(ptr, type, m) ((type *)((char *)(ptr) - offsetof(type, m))) +-#define MY_container_of(ptr, type, m) (&((type *)0)->m == (ptr), ((type *)(((char *)(ptr)) - MY_offsetof(type, m)))) ++#define Z7_container_of(ptr, type, m) container_of(ptr, type, m) ++#define Z7_container_of(ptr, type, m) CONTAINING_RECORD(ptr, type, m) ++#define Z7_container_of(ptr, type, m) ((type *)((char *)(ptr) - offsetof(type, m))) ++#define Z7_container_of(ptr, type, m) (&((type *)0)->m == (ptr), ((type *)(((char *)(ptr)) - MY_offsetof(type, m)))) + */ + + /* +@@ -485,24 +501,64 @@ struct ISzAlloc + GCC 4.8.1 : classes with non-public variable members" + */ + +-#define MY_container_of(ptr, type, m) ((type *)(void *)((char *)(void *)(1 ? (ptr) : &((type *)0)->m) - MY_offsetof(type, m))) ++#define Z7_container_of(ptr, type, m) \ ++ ((type *)(void *)((char *)(void *) \ ++ (1 ? (ptr) : &((type *)NULL)->m) - MY_offsetof(type, m))) + +-#endif +- +-#define CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(void *)(ptr)) ++#define Z7_container_of_CONST(ptr, type, m) \ ++ ((const type *)(const void *)((const char *)(const void *) \ ++ (1 ? (ptr) : &((type *)NULL)->m) - MY_offsetof(type, m))) + + /* +-#define CONTAINER_FROM_VTBL(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ++#define Z7_container_of_NON_CONST_FROM_CONST(ptr, type, m) \ ++ ((type *)(void *)(const void *)((const char *)(const void *) \ ++ (1 ? (ptr) : &((type *)NULL)->m) - MY_offsetof(type, m))) + */ +-#define CONTAINER_FROM_VTBL(ptr, type, m) MY_container_of(ptr, type, m) + +-#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ++#endif ++ ++#define Z7_CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ((type *)(void *)(ptr)) ++ ++// #define Z7_CONTAINER_FROM_VTBL(ptr, type, m) Z7_CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) ++#define Z7_CONTAINER_FROM_VTBL(ptr, type, m) Z7_container_of(ptr, type, m) ++// #define Z7_CONTAINER_FROM_VTBL(ptr, type, m) Z7_container_of_NON_CONST_FROM_CONST(ptr, type, m) ++ ++#define Z7_CONTAINER_FROM_VTBL_CONST(ptr, type, m) Z7_container_of_CONST(ptr, type, m) ++ ++#define Z7_CONTAINER_FROM_VTBL_CLS(ptr, type, m) Z7_CONTAINER_FROM_VTBL_SIMPLE(ptr, type, m) + /* +-#define CONTAINER_FROM_VTBL_CLS(ptr, type, m) CONTAINER_FROM_VTBL(ptr, type, m) ++#define Z7_CONTAINER_FROM_VTBL_CLS(ptr, type, m) Z7_CONTAINER_FROM_VTBL(ptr, type, m) + */ ++#if defined (__clang__) || defined(__GNUC__) ++#define Z7_DIAGNOSCTIC_IGNORE_BEGIN_CAST_QUAL \ ++ _Pragma("GCC diagnostic push") \ ++ _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") ++#define Z7_DIAGNOSCTIC_IGNORE_END_CAST_QUAL \ ++ _Pragma("GCC diagnostic pop") ++#else ++#define Z7_DIAGNOSCTIC_IGNORE_BEGIN_CAST_QUAL ++#define Z7_DIAGNOSCTIC_IGNORE_END_CAST_QUAL ++#endif ++ ++#define Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR(ptr, type, m, p) \ ++ Z7_DIAGNOSCTIC_IGNORE_BEGIN_CAST_QUAL \ ++ type *p = Z7_CONTAINER_FROM_VTBL(ptr, type, m); \ ++ Z7_DIAGNOSCTIC_IGNORE_END_CAST_QUAL ++ ++#define Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(type) \ ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR(pp, type, vt, p) + + +-#define MY_memset_0_ARRAY(a) memset((a), 0, sizeof(a)) ++// #define ZIP7_DECLARE_HANDLE(name) typedef void *name; ++#define Z7_DECLARE_HANDLE(name) struct name##_dummy{int unused;}; typedef struct name##_dummy *name; ++ ++ ++#define Z7_memset_0_ARRAY(a) memset((a), 0, sizeof(a)) ++ ++#ifndef Z7_ARRAY_SIZE ++#define Z7_ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) ++#endif ++ + + #ifdef _WIN32 + +@@ -520,6 +576,22 @@ struct ISzAlloc + + #endif + ++#define k_PropVar_TimePrec_0 0 ++#define k_PropVar_TimePrec_Unix 1 ++#define k_PropVar_TimePrec_DOS 2 ++#define k_PropVar_TimePrec_HighPrec 3 ++#define k_PropVar_TimePrec_Base 16 ++#define k_PropVar_TimePrec_100ns (k_PropVar_TimePrec_Base + 7) ++#define k_PropVar_TimePrec_1ns (k_PropVar_TimePrec_Base + 9) ++ + EXTERN_C_END + + #endif ++ ++/* ++#ifndef Z7_ST ++#ifdef _7ZIP_ST ++#define Z7_ST ++#endif ++#endif ++*/ +diff --git a/src/lzma/7zVersion.h b/src/lzma/7zVersion.h +index e9363d37b..754923961 100644 +--- a/src/lzma/7zVersion.h ++++ b/src/lzma/7zVersion.h +@@ -1,7 +1,7 @@ +-#define MY_VER_MAJOR 21 +-#define MY_VER_MINOR 07 ++#define MY_VER_MAJOR 23 ++#define MY_VER_MINOR 01 + #define MY_VER_BUILD 0 +-#define MY_VERSION_NUMBERS "21.07" ++#define MY_VERSION_NUMBERS "23.01" + #define MY_VERSION MY_VERSION_NUMBERS + + #ifdef MY_CPU_NAME +@@ -10,12 +10,12 @@ + #define MY_VERSION_CPU MY_VERSION + #endif + +-#define MY_DATE "2021-12-26" ++#define MY_DATE "2023-06-20" + #undef MY_COPYRIGHT + #undef MY_VERSION_COPYRIGHT_DATE + #define MY_AUTHOR_NAME "Igor Pavlov" + #define MY_COPYRIGHT_PD "Igor Pavlov : Public domain" +-#define MY_COPYRIGHT_CR "Copyright (c) 1999-2021 Igor Pavlov" ++#define MY_COPYRIGHT_CR "Copyright (c) 1999-2023 Igor Pavlov" + + #ifdef USE_COPYRIGHT_CR + #define MY_COPYRIGHT MY_COPYRIGHT_CR +diff --git a/src/lzma/7zWindows.h b/src/lzma/7zWindows.h +new file mode 100644 +index 000000000..42c6db8bf +--- /dev/null ++++ b/src/lzma/7zWindows.h +@@ -0,0 +1,101 @@ ++/* 7zWindows.h -- StdAfx ++2023-04-02 : Igor Pavlov : Public domain */ ++ ++#ifndef ZIP7_INC_7Z_WINDOWS_H ++#define ZIP7_INC_7Z_WINDOWS_H ++ ++#ifdef _WIN32 ++ ++#if defined(__clang__) ++# pragma clang diagnostic push ++#endif ++ ++#if defined(_MSC_VER) ++ ++#pragma warning(push) ++#pragma warning(disable : 4668) // '_WIN32_WINNT' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' ++ ++#if _MSC_VER == 1900 ++// for old kit10 versions ++// #pragma warning(disable : 4255) // winuser.h(13979): warning C4255: 'GetThreadDpiAwarenessContext': ++#endif ++// win10 Windows Kit: ++#endif // _MSC_VER ++ ++#if defined(_MSC_VER) && _MSC_VER <= 1200 && !defined(_WIN64) ++// for msvc6 without sdk2003 ++#define RPC_NO_WINDOWS_H ++#endif ++ ++#if defined(__MINGW32__) || defined(__MINGW64__) ++// #if defined(__GNUC__) && !defined(__clang__) ++#include ++#else ++#include ++#endif ++// #include ++// #include ++ ++// but if precompiled with clang-cl then we need ++// #include ++#if defined(_MSC_VER) ++#pragma warning(pop) ++#endif ++ ++#if defined(__clang__) ++# pragma clang diagnostic pop ++#endif ++ ++#if defined(_MSC_VER) && _MSC_VER <= 1200 && !defined(_WIN64) ++#ifndef _W64 ++ ++typedef long LONG_PTR, *PLONG_PTR; ++typedef unsigned long ULONG_PTR, *PULONG_PTR; ++typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; ++ ++#define Z7_OLD_WIN_SDK ++#endif // _W64 ++#endif // _MSC_VER == 1200 ++ ++#ifdef Z7_OLD_WIN_SDK ++ ++#ifndef INVALID_FILE_ATTRIBUTES ++#define INVALID_FILE_ATTRIBUTES ((DWORD)-1) ++#endif ++#ifndef INVALID_SET_FILE_POINTER ++#define INVALID_SET_FILE_POINTER ((DWORD)-1) ++#endif ++#ifndef FILE_SPECIAL_ACCESS ++#define FILE_SPECIAL_ACCESS (FILE_ANY_ACCESS) ++#endif ++ ++// ShlObj.h: ++// #define BIF_NEWDIALOGSTYLE 0x0040 ++ ++#pragma warning(disable : 4201) ++// #pragma warning(disable : 4115) ++ ++#undef VARIANT_TRUE ++#define VARIANT_TRUE ((VARIANT_BOOL)-1) ++#endif ++ ++#endif // Z7_OLD_WIN_SDK ++ ++#ifdef UNDER_CE ++#undef VARIANT_TRUE ++#define VARIANT_TRUE ((VARIANT_BOOL)-1) ++#endif ++ ++ ++#if defined(_MSC_VER) ++#if _MSC_VER >= 1400 && _MSC_VER <= 1600 ++ // BaseTsd.h(148) : 'HandleToULong' : unreferenced inline function has been removed ++ // string.h ++ // #pragma warning(disable : 4514) ++#endif ++#endif ++ ++ ++/* #include "7zTypes.h" */ ++ ++#endif +diff --git a/src/lzma/Aes.c b/src/lzma/Aes.c +index 27e32e622..bcaafab11 100644 +--- a/src/lzma/Aes.c ++++ b/src/lzma/Aes.c +@@ -1,5 +1,5 @@ + /* Aes.c -- AES encryption / decryption +-2021-05-13 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -7,7 +7,7 @@ + #include "Aes.h" + + AES_CODE_FUNC g_AesCbc_Decode; +-#ifndef _SFX ++#ifndef Z7_SFX + AES_CODE_FUNC g_AesCbc_Encode; + AES_CODE_FUNC g_AesCtr_Code; + UInt32 g_Aes_SupportedFunctions_Flags; +@@ -51,7 +51,7 @@ static Byte InvS[256]; + #define DD(x) (D + (x << 8)) + + +-// #define _SHOW_AES_STATUS ++// #define Z7_SHOW_AES_STATUS + + #ifdef MY_CPU_X86_OR_AMD64 + #define USE_HW_AES +@@ -72,11 +72,11 @@ static Byte InvS[256]; + #endif + + #ifdef USE_HW_AES +-#ifdef _SHOW_AES_STATUS ++#ifdef Z7_SHOW_AES_STATUS + #include +-#define _PRF(x) x ++#define PRF(x) x + #else +-#define _PRF(x) ++#define PRF(x) + #endif + #endif + +@@ -90,23 +90,23 @@ void AesGenTables(void) + for (i = 0; i < 256; i++) + { + { +- UInt32 a1 = Sbox[i]; +- UInt32 a2 = xtime(a1); +- UInt32 a3 = a2 ^ a1; ++ const UInt32 a1 = Sbox[i]; ++ const UInt32 a2 = xtime(a1); ++ const UInt32 a3 = a2 ^ a1; + TT(0)[i] = Ui32(a2, a1, a1, a3); + TT(1)[i] = Ui32(a3, a2, a1, a1); + TT(2)[i] = Ui32(a1, a3, a2, a1); + TT(3)[i] = Ui32(a1, a1, a3, a2); + } + { +- UInt32 a1 = InvS[i]; +- UInt32 a2 = xtime(a1); +- UInt32 a4 = xtime(a2); +- UInt32 a8 = xtime(a4); +- UInt32 a9 = a8 ^ a1; +- UInt32 aB = a8 ^ a2 ^ a1; +- UInt32 aD = a8 ^ a4 ^ a1; +- UInt32 aE = a8 ^ a4 ^ a2; ++ const UInt32 a1 = InvS[i]; ++ const UInt32 a2 = xtime(a1); ++ const UInt32 a4 = xtime(a2); ++ const UInt32 a8 = xtime(a4); ++ const UInt32 a9 = a8 ^ a1; ++ const UInt32 aB = a8 ^ a2 ^ a1; ++ const UInt32 aD = a8 ^ a4 ^ a1; ++ const UInt32 aE = a8 ^ a4 ^ a2; + DD(0)[i] = Ui32(aE, a9, aD, aB); + DD(1)[i] = Ui32(aB, aE, a9, aD); + DD(2)[i] = Ui32(aD, aB, aE, a9); +@@ -116,7 +116,7 @@ void AesGenTables(void) + + { + AES_CODE_FUNC d = AesCbc_Decode; +- #ifndef _SFX ++ #ifndef Z7_SFX + AES_CODE_FUNC e = AesCbc_Encode; + AES_CODE_FUNC c = AesCtr_Code; + UInt32 flags = 0; +@@ -126,10 +126,10 @@ void AesGenTables(void) + if (CPU_IsSupported_AES()) + { + // #pragma message ("AES HW") +- _PRF(printf("\n===AES HW\n")); ++ PRF(printf("\n===AES HW\n")); + d = AesCbc_Decode_HW; + +- #ifndef _SFX ++ #ifndef Z7_SFX + e = AesCbc_Encode_HW; + c = AesCtr_Code_HW; + flags = k_Aes_SupportedFunctions_HW; +@@ -138,9 +138,9 @@ void AesGenTables(void) + #ifdef MY_CPU_X86_OR_AMD64 + if (CPU_IsSupported_VAES_AVX2()) + { +- _PRF(printf("\n===vaes avx2\n")); ++ PRF(printf("\n===vaes avx2\n")); + d = AesCbc_Decode_HW_256; +- #ifndef _SFX ++ #ifndef Z7_SFX + c = AesCtr_Code_HW_256; + flags |= k_Aes_SupportedFunctions_HW_256; + #endif +@@ -150,7 +150,7 @@ void AesGenTables(void) + #endif + + g_AesCbc_Decode = d; +- #ifndef _SFX ++ #ifndef Z7_SFX + g_AesCbc_Encode = e; + g_AesCtr_Code = c; + g_Aes_SupportedFunctions_Flags = flags; +@@ -194,7 +194,7 @@ void AesGenTables(void) + #define FD(i, x) InvS[gb(x, m[(i - x) & 3])] + #define FD4(i) dest[i] = Ui32(FD(i, 0), FD(i, 1), FD(i, 2), FD(i, 3)) ^ w[i]; + +-void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *w, const Byte *key, unsigned keySize) ++void Z7_FASTCALL Aes_SetKey_Enc(UInt32 *w, const Byte *key, unsigned keySize) + { + unsigned i, m; + const UInt32 *wLim; +@@ -230,7 +230,7 @@ void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *w, const Byte *key, unsigned keySize) + while (++w != wLim); + } + +-void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *w, const Byte *key, unsigned keySize) ++void Z7_FASTCALL Aes_SetKey_Dec(UInt32 *w, const Byte *key, unsigned keySize) + { + unsigned i, num; + Aes_SetKey_Enc(w, key, keySize); +@@ -251,7 +251,7 @@ void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *w, const Byte *key, unsigned keySize) + src and dest are pointers to 4 UInt32 words. + src and dest can point to same block */ + +-// MY_FORCE_INLINE ++// Z7_FORCE_INLINE + static void Aes_Encode(const UInt32 *w, UInt32 *dest, const UInt32 *src) + { + UInt32 s[4]; +@@ -265,17 +265,20 @@ static void Aes_Encode(const UInt32 *w, UInt32 *dest, const UInt32 *src) + w += 4; + for (;;) + { +- HT16(m, s, 0); ++ HT16(m, s, 0) + if (--numRounds2 == 0) + break; +- HT16(s, m, 4); ++ HT16(s, m, 4) + w += 8; + } + w += 4; +- FT4(0); FT4(1); FT4(2); FT4(3); ++ FT4(0) ++ FT4(1) ++ FT4(2) ++ FT4(3) + } + +-MY_FORCE_INLINE ++Z7_FORCE_INLINE + static void Aes_Decode(const UInt32 *w, UInt32 *dest, const UInt32 *src) + { + UInt32 s[4]; +@@ -289,12 +292,15 @@ static void Aes_Decode(const UInt32 *w, UInt32 *dest, const UInt32 *src) + for (;;) + { + w -= 8; +- HD16(m, s, 4); ++ HD16(m, s, 4) + if (--numRounds2 == 0) + break; +- HD16(s, m, 0); ++ HD16(s, m, 0) + } +- FD4(0); FD4(1); FD4(2); FD4(3); ++ FD4(0) ++ FD4(1) ++ FD4(2) ++ FD4(3) + } + + void AesCbc_Init(UInt32 *p, const Byte *iv) +@@ -304,7 +310,7 @@ void AesCbc_Init(UInt32 *p, const Byte *iv) + p[i] = GetUi32(iv + i * 4); + } + +-void MY_FAST_CALL AesCbc_Encode(UInt32 *p, Byte *data, size_t numBlocks) ++void Z7_FASTCALL AesCbc_Encode(UInt32 *p, Byte *data, size_t numBlocks) + { + for (; numBlocks != 0; numBlocks--, data += AES_BLOCK_SIZE) + { +@@ -315,14 +321,14 @@ void MY_FAST_CALL AesCbc_Encode(UInt32 *p, Byte *data, size_t numBlocks) + + Aes_Encode(p + 4, p, p); + +- SetUi32(data, p[0]); +- SetUi32(data + 4, p[1]); +- SetUi32(data + 8, p[2]); +- SetUi32(data + 12, p[3]); ++ SetUi32(data, p[0]) ++ SetUi32(data + 4, p[1]) ++ SetUi32(data + 8, p[2]) ++ SetUi32(data + 12, p[3]) + } + } + +-void MY_FAST_CALL AesCbc_Decode(UInt32 *p, Byte *data, size_t numBlocks) ++void Z7_FASTCALL AesCbc_Decode(UInt32 *p, Byte *data, size_t numBlocks) + { + UInt32 in[4], out[4]; + for (; numBlocks != 0; numBlocks--, data += AES_BLOCK_SIZE) +@@ -334,10 +340,10 @@ void MY_FAST_CALL AesCbc_Decode(UInt32 *p, Byte *data, size_t numBlocks) + + Aes_Decode(p + 4, out, in); + +- SetUi32(data, p[0] ^ out[0]); +- SetUi32(data + 4, p[1] ^ out[1]); +- SetUi32(data + 8, p[2] ^ out[2]); +- SetUi32(data + 12, p[3] ^ out[3]); ++ SetUi32(data, p[0] ^ out[0]) ++ SetUi32(data + 4, p[1] ^ out[1]) ++ SetUi32(data + 8, p[2] ^ out[2]) ++ SetUi32(data + 12, p[3] ^ out[3]) + + p[0] = in[0]; + p[1] = in[1]; +@@ -346,7 +352,7 @@ void MY_FAST_CALL AesCbc_Decode(UInt32 *p, Byte *data, size_t numBlocks) + } + } + +-void MY_FAST_CALL AesCtr_Code(UInt32 *p, Byte *data, size_t numBlocks) ++void Z7_FASTCALL AesCtr_Code(UInt32 *p, Byte *data, size_t numBlocks) + { + for (; numBlocks != 0; numBlocks--) + { +@@ -360,7 +366,7 @@ void MY_FAST_CALL AesCtr_Code(UInt32 *p, Byte *data, size_t numBlocks) + + for (i = 0; i < 4; i++, data += 4) + { +- UInt32 t = temp[i]; ++ const UInt32 t = temp[i]; + + #ifdef MY_CPU_LE_UNALIGN + *((UInt32 *)(void *)data) ^= t; +@@ -373,3 +379,15 @@ void MY_FAST_CALL AesCtr_Code(UInt32 *p, Byte *data, size_t numBlocks) + } + } + } ++ ++#undef xtime ++#undef Ui32 ++#undef gb0 ++#undef gb1 ++#undef gb2 ++#undef gb3 ++#undef gb ++#undef TT ++#undef DD ++#undef USE_HW_AES ++#undef PRF +diff --git a/src/lzma/Aes.h b/src/lzma/Aes.h +index 2aa225642..7f0182ac0 100644 +--- a/src/lzma/Aes.h ++++ b/src/lzma/Aes.h +@@ -1,8 +1,8 @@ + /* Aes.h -- AES encryption / decryption +-2018-04-28 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __AES_H +-#define __AES_H ++#ifndef ZIP7_INC_AES_H ++#define ZIP7_INC_AES_H + + #include "7zTypes.h" + +@@ -20,19 +20,19 @@ void AesGenTables(void); + + /* aes - 16-byte aligned pointer to keyMode+roundKeys sequence */ + /* keySize = 16 or 24 or 32 (bytes) */ +-typedef void (MY_FAST_CALL *AES_SET_KEY_FUNC)(UInt32 *aes, const Byte *key, unsigned keySize); +-void MY_FAST_CALL Aes_SetKey_Enc(UInt32 *aes, const Byte *key, unsigned keySize); +-void MY_FAST_CALL Aes_SetKey_Dec(UInt32 *aes, const Byte *key, unsigned keySize); ++typedef void (Z7_FASTCALL *AES_SET_KEY_FUNC)(UInt32 *aes, const Byte *key, unsigned keySize); ++void Z7_FASTCALL Aes_SetKey_Enc(UInt32 *aes, const Byte *key, unsigned keySize); ++void Z7_FASTCALL Aes_SetKey_Dec(UInt32 *aes, const Byte *key, unsigned keySize); + + /* ivAes - 16-byte aligned pointer to iv+keyMode+roundKeys sequence: UInt32[AES_NUM_IVMRK_WORDS] */ + void AesCbc_Init(UInt32 *ivAes, const Byte *iv); /* iv size is AES_BLOCK_SIZE */ + + /* data - 16-byte aligned pointer to data */ + /* numBlocks - the number of 16-byte blocks in data array */ +-typedef void (MY_FAST_CALL *AES_CODE_FUNC)(UInt32 *ivAes, Byte *data, size_t numBlocks); ++typedef void (Z7_FASTCALL *AES_CODE_FUNC)(UInt32 *ivAes, Byte *data, size_t numBlocks); + + extern AES_CODE_FUNC g_AesCbc_Decode; +-#ifndef _SFX ++#ifndef Z7_SFX + extern AES_CODE_FUNC g_AesCbc_Encode; + extern AES_CODE_FUNC g_AesCtr_Code; + #define k_Aes_SupportedFunctions_HW (1 << 2) +@@ -41,19 +41,19 @@ extern UInt32 g_Aes_SupportedFunctions_Flags; + #endif + + +-#define DECLARE__AES_CODE_FUNC(funcName) \ +- void MY_FAST_CALL funcName(UInt32 *ivAes, Byte *data, size_t numBlocks); ++#define Z7_DECLARE_AES_CODE_FUNC(funcName) \ ++ void Z7_FASTCALL funcName(UInt32 *ivAes, Byte *data, size_t numBlocks); + +-DECLARE__AES_CODE_FUNC (AesCbc_Encode) +-DECLARE__AES_CODE_FUNC (AesCbc_Decode) +-DECLARE__AES_CODE_FUNC (AesCtr_Code) ++Z7_DECLARE_AES_CODE_FUNC (AesCbc_Encode) ++Z7_DECLARE_AES_CODE_FUNC (AesCbc_Decode) ++Z7_DECLARE_AES_CODE_FUNC (AesCtr_Code) + +-DECLARE__AES_CODE_FUNC (AesCbc_Encode_HW) +-DECLARE__AES_CODE_FUNC (AesCbc_Decode_HW) +-DECLARE__AES_CODE_FUNC (AesCtr_Code_HW) ++Z7_DECLARE_AES_CODE_FUNC (AesCbc_Encode_HW) ++Z7_DECLARE_AES_CODE_FUNC (AesCbc_Decode_HW) ++Z7_DECLARE_AES_CODE_FUNC (AesCtr_Code_HW) + +-DECLARE__AES_CODE_FUNC (AesCbc_Decode_HW_256) +-DECLARE__AES_CODE_FUNC (AesCtr_Code_HW_256) ++Z7_DECLARE_AES_CODE_FUNC (AesCbc_Decode_HW_256) ++Z7_DECLARE_AES_CODE_FUNC (AesCtr_Code_HW_256) + + EXTERN_C_END + +diff --git a/src/lzma/AesOpt.c b/src/lzma/AesOpt.c +index 8be8ff69d..cfa6413f4 100644 +--- a/src/lzma/AesOpt.c ++++ b/src/lzma/AesOpt.c +@@ -1,39 +1,33 @@ + /* AesOpt.c -- AES optimized code for x86 AES hardware instructions +-2021-04-01 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + ++#include "Aes.h" + #include "CpuArch.h" + + #ifdef MY_CPU_X86_OR_AMD64 + +- #if defined(__clang__) +- #if __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 8) +- #define USE_INTEL_AES +- #define ATTRIB_AES __attribute__((__target__("aes"))) +- #if (__clang_major__ >= 8) +- #define USE_INTEL_VAES +- #define ATTRIB_VAES __attribute__((__target__("aes,vaes,avx2"))) +- #endif +- #endif +- #elif defined(__GNUC__) +- #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) +- #define USE_INTEL_AES +- #ifndef __AES__ +- #define ATTRIB_AES __attribute__((__target__("aes"))) +- #endif +- #if (__GNUC__ >= 8) +- #define USE_INTEL_VAES +- #define ATTRIB_VAES __attribute__((__target__("aes,vaes,avx2"))) +- #endif +- #endif +- #elif defined(__INTEL_COMPILER) ++ #if defined(__INTEL_COMPILER) + #if (__INTEL_COMPILER >= 1110) + #define USE_INTEL_AES + #if (__INTEL_COMPILER >= 1900) + #define USE_INTEL_VAES + #endif + #endif ++ #elif defined(__clang__) && (__clang_major__ > 3 || __clang_major__ == 3 && __clang_minor__ >= 8) \ ++ || defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4) ++ #define USE_INTEL_AES ++ #if !defined(__AES__) ++ #define ATTRIB_AES __attribute__((__target__("aes"))) ++ #endif ++ #if defined(__clang__) && (__clang_major__ >= 8) \ ++ || defined(__GNUC__) && (__GNUC__ >= 8) ++ #define USE_INTEL_VAES ++ #if !defined(__AES__) || !defined(__VAES__) || !defined(__AVX__) || !defined(__AVX2__) ++ #define ATTRIB_VAES __attribute__((__target__("aes,vaes,avx,avx2"))) ++ #endif ++ #endif + #elif defined(_MSC_VER) + #if (_MSC_VER > 1500) || (_MSC_FULL_VER >= 150030729) + #define USE_INTEL_AES +@@ -56,12 +50,15 @@ + #include + + #ifndef USE_INTEL_VAES +-#define AES_TYPE_keys __m128i +-#define AES_TYPE_data __m128i ++#define AES_TYPE_keys UInt32 ++#define AES_TYPE_data Byte ++// #define AES_TYPE_keys __m128i ++// #define AES_TYPE_data __m128i + #endif + + #define AES_FUNC_START(name) \ +- void MY_FAST_CALL name(__m128i *p, __m128i *data, size_t numBlocks) ++ void Z7_FASTCALL name(UInt32 *ivAes, Byte *data8, size_t numBlocks) ++ // void Z7_FASTCALL name(__m128i *p, __m128i *data, size_t numBlocks) + + #define AES_FUNC_START2(name) \ + AES_FUNC_START (name); \ +@@ -69,14 +66,16 @@ ATTRIB_AES \ + AES_FUNC_START (name) + + #define MM_OP(op, dest, src) dest = op(dest, src); +-#define MM_OP_m(op, src) MM_OP(op, m, src); ++#define MM_OP_m(op, src) MM_OP(op, m, src) + +-#define MM_XOR( dest, src) MM_OP(_mm_xor_si128, dest, src); +-#define AVX_XOR(dest, src) MM_OP(_mm256_xor_si256, dest, src); ++#define MM_XOR( dest, src) MM_OP(_mm_xor_si128, dest, src) ++#define AVX_XOR(dest, src) MM_OP(_mm256_xor_si256, dest, src) + + + AES_FUNC_START2 (AesCbc_Encode_HW) + { ++ __m128i *p = (__m128i *)(void *)ivAes; ++ __m128i *data = (__m128i *)(void *)data8; + __m128i m = *p; + const __m128i k0 = p[2]; + const __m128i k1 = p[3]; +@@ -86,17 +85,17 @@ AES_FUNC_START2 (AesCbc_Encode_HW) + UInt32 r = numRounds2; + const __m128i *w = p + 4; + __m128i temp = *data; +- MM_XOR (temp, k0); +- MM_XOR (m, temp); +- MM_OP_m (_mm_aesenc_si128, k1); ++ MM_XOR (temp, k0) ++ MM_XOR (m, temp) ++ MM_OP_m (_mm_aesenc_si128, k1) + do + { +- MM_OP_m (_mm_aesenc_si128, w[0]); +- MM_OP_m (_mm_aesenc_si128, w[1]); ++ MM_OP_m (_mm_aesenc_si128, w[0]) ++ MM_OP_m (_mm_aesenc_si128, w[1]) + w += 2; + } + while (--r); +- MM_OP_m (_mm_aesenclast_si128, w[0]); ++ MM_OP_m (_mm_aesenclast_si128, w[0]) + *data = m; + } + *p = m; +@@ -104,14 +103,14 @@ AES_FUNC_START2 (AesCbc_Encode_HW) + + + #define WOP_1(op) +-#define WOP_2(op) WOP_1 (op) op (m1, 1); +-#define WOP_3(op) WOP_2 (op) op (m2, 2); +-#define WOP_4(op) WOP_3 (op) op (m3, 3); ++#define WOP_2(op) WOP_1 (op) op (m1, 1) ++#define WOP_3(op) WOP_2 (op) op (m2, 2) ++#define WOP_4(op) WOP_3 (op) op (m3, 3) + #ifdef MY_CPU_AMD64 +-#define WOP_5(op) WOP_4 (op) op (m4, 4); +-#define WOP_6(op) WOP_5 (op) op (m5, 5); +-#define WOP_7(op) WOP_6 (op) op (m6, 6); +-#define WOP_8(op) WOP_7 (op) op (m7, 7); ++#define WOP_5(op) WOP_4 (op) op (m4, 4) ++#define WOP_6(op) WOP_5 (op) op (m5, 5) ++#define WOP_7(op) WOP_6 (op) op (m6, 6) ++#define WOP_8(op) WOP_7 (op) op (m7, 7) + #endif + /* + #define WOP_9(op) WOP_8 (op) op (m8, 8); +@@ -130,20 +129,20 @@ AES_FUNC_START2 (AesCbc_Encode_HW) + #define WOP_M1 WOP_4 + #endif + +-#define WOP(op) op (m0, 0); WOP_M1(op) ++#define WOP(op) op (m0, 0) WOP_M1(op) + + +-#define DECLARE_VAR(reg, ii) __m128i reg ++#define DECLARE_VAR(reg, ii) __m128i reg; + #define LOAD_data( reg, ii) reg = data[ii]; + #define STORE_data( reg, ii) data[ii] = reg; + #if (NUM_WAYS > 1) +-#define XOR_data_M1(reg, ii) MM_XOR (reg, data[ii- 1]); ++#define XOR_data_M1(reg, ii) MM_XOR (reg, data[ii- 1]) + #endif + +-#define AVX__DECLARE_VAR(reg, ii) __m256i reg +-#define AVX__LOAD_data( reg, ii) reg = ((const __m256i *)(const void *)data)[ii]; +-#define AVX__STORE_data( reg, ii) ((__m256i *)(void *)data)[ii] = reg; +-#define AVX__XOR_data_M1(reg, ii) AVX_XOR (reg, (((const __m256i *)(const void *)(data - 1))[ii])); ++#define AVX_DECLARE_VAR(reg, ii) __m256i reg; ++#define AVX_LOAD_data( reg, ii) reg = ((const __m256i *)(const void *)data)[ii]; ++#define AVX_STORE_data( reg, ii) ((__m256i *)(void *)data)[ii] = reg; ++#define AVX_XOR_data_M1(reg, ii) AVX_XOR (reg, (((const __m256i *)(const void *)(data - 1))[ii])) + + #define MM_OP_key(op, reg) MM_OP(op, reg, key); + +@@ -154,23 +153,23 @@ AES_FUNC_START2 (AesCbc_Encode_HW) + #define AES_XOR( reg, ii) MM_OP_key (_mm_xor_si128, reg) + + +-#define AVX__AES_DEC( reg, ii) MM_OP_key (_mm256_aesdec_epi128, reg) +-#define AVX__AES_DEC_LAST( reg, ii) MM_OP_key (_mm256_aesdeclast_epi128, reg) +-#define AVX__AES_ENC( reg, ii) MM_OP_key (_mm256_aesenc_epi128, reg) +-#define AVX__AES_ENC_LAST( reg, ii) MM_OP_key (_mm256_aesenclast_epi128, reg) +-#define AVX__AES_XOR( reg, ii) MM_OP_key (_mm256_xor_si256, reg) ++#define AVX_AES_DEC( reg, ii) MM_OP_key (_mm256_aesdec_epi128, reg) ++#define AVX_AES_DEC_LAST( reg, ii) MM_OP_key (_mm256_aesdeclast_epi128, reg) ++#define AVX_AES_ENC( reg, ii) MM_OP_key (_mm256_aesenc_epi128, reg) ++#define AVX_AES_ENC_LAST( reg, ii) MM_OP_key (_mm256_aesenclast_epi128, reg) ++#define AVX_AES_XOR( reg, ii) MM_OP_key (_mm256_xor_si256, reg) + +-#define CTR_START(reg, ii) MM_OP (_mm_add_epi64, ctr, one); reg = ctr; +-#define CTR_END( reg, ii) MM_XOR (data[ii], reg); ++#define CTR_START(reg, ii) MM_OP (_mm_add_epi64, ctr, one) reg = ctr; ++#define CTR_END( reg, ii) MM_XOR (data[ii], reg) + +-#define AVX__CTR_START(reg, ii) MM_OP (_mm256_add_epi64, ctr2, two); reg = _mm256_xor_si256(ctr2, key); +-#define AVX__CTR_END( reg, ii) AVX_XOR (((__m256i *)(void *)data)[ii], reg); ++#define AVX_CTR_START(reg, ii) MM_OP (_mm256_add_epi64, ctr2, two) reg = _mm256_xor_si256(ctr2, key); ++#define AVX_CTR_END( reg, ii) AVX_XOR (((__m256i *)(void *)data)[ii], reg) + + #define WOP_KEY(op, n) { \ + const __m128i key = w[n]; \ + WOP(op); } + +-#define AVX__WOP_KEY(op, n) { \ ++#define AVX_WOP_KEY(op, n) { \ + const __m256i key = w[n]; \ + WOP(op); } + +@@ -218,6 +217,8 @@ AES_FUNC_START2 (AesCbc_Encode_HW) + + AES_FUNC_START2 (AesCbc_Decode_HW) + { ++ __m128i *p = (__m128i *)(void *)ivAes; ++ __m128i *data = (__m128i *)(void *)data8; + __m128i iv = *p; + const __m128i *wStart = p + *(const UInt32 *)(p + 1) * 2 + 2 - 1; + const __m128i *dataEnd; +@@ -228,7 +229,7 @@ AES_FUNC_START2 (AesCbc_Decode_HW) + const __m128i *w = wStart; + + WOP (DECLARE_VAR) +- WOP (LOAD_data); ++ WOP (LOAD_data) + WOP_KEY (AES_XOR, 1) + + do +@@ -239,10 +240,10 @@ AES_FUNC_START2 (AesCbc_Decode_HW) + while (w != p); + WOP_KEY (AES_DEC_LAST, 0) + +- MM_XOR (m0, iv); ++ MM_XOR (m0, iv) + WOP_M1 (XOR_data_M1) + iv = data[NUM_WAYS - 1]; +- WOP (STORE_data); ++ WOP (STORE_data) + } + WIDE_LOOP_END + +@@ -252,15 +253,15 @@ AES_FUNC_START2 (AesCbc_Decode_HW) + __m128i m = _mm_xor_si128 (w[2], *data); + do + { +- MM_OP_m (_mm_aesdec_si128, w[1]); +- MM_OP_m (_mm_aesdec_si128, w[0]); ++ MM_OP_m (_mm_aesdec_si128, w[1]) ++ MM_OP_m (_mm_aesdec_si128, w[0]) + w -= 2; + } + while (w != p); +- MM_OP_m (_mm_aesdec_si128, w[1]); +- MM_OP_m (_mm_aesdeclast_si128, w[0]); ++ MM_OP_m (_mm_aesdec_si128, w[1]) ++ MM_OP_m (_mm_aesdeclast_si128, w[0]) + +- MM_XOR (m, iv); ++ MM_XOR (m, iv) + iv = *data; + *data = m; + } +@@ -271,6 +272,8 @@ AES_FUNC_START2 (AesCbc_Decode_HW) + + AES_FUNC_START2 (AesCtr_Code_HW) + { ++ __m128i *p = (__m128i *)(void *)ivAes; ++ __m128i *data = (__m128i *)(void *)data8; + __m128i ctr = *p; + UInt32 numRoundsMinus2 = *(const UInt32 *)(p + 1) * 2 - 1; + const __m128i *dataEnd; +@@ -283,7 +286,7 @@ AES_FUNC_START2 (AesCtr_Code_HW) + const __m128i *w = p; + UInt32 r = numRoundsMinus2; + WOP (DECLARE_VAR) +- WOP (CTR_START); ++ WOP (CTR_START) + WOP_KEY (AES_XOR, 0) + w += 1; + do +@@ -294,7 +297,7 @@ AES_FUNC_START2 (AesCtr_Code_HW) + while (--r); + WOP_KEY (AES_ENC_LAST, 0) + +- WOP (CTR_END); ++ WOP (CTR_END) + } + WIDE_LOOP_END + +@@ -303,19 +306,19 @@ AES_FUNC_START2 (AesCtr_Code_HW) + UInt32 numRounds2 = *(const UInt32 *)(p - 2 + 1) - 1; + const __m128i *w = p; + __m128i m; +- MM_OP (_mm_add_epi64, ctr, one); ++ MM_OP (_mm_add_epi64, ctr, one) + m = _mm_xor_si128 (ctr, p[0]); + w += 1; + do + { +- MM_OP_m (_mm_aesenc_si128, w[0]); +- MM_OP_m (_mm_aesenc_si128, w[1]); ++ MM_OP_m (_mm_aesenc_si128, w[0]) ++ MM_OP_m (_mm_aesenc_si128, w[1]) + w += 2; + } + while (--numRounds2); +- MM_OP_m (_mm_aesenc_si128, w[0]); +- MM_OP_m (_mm_aesenclast_si128, w[1]); +- MM_XOR (*data, m); ++ MM_OP_m (_mm_aesenc_si128, w[0]) ++ MM_OP_m (_mm_aesenclast_si128, w[1]) ++ MM_XOR (*data, m) + } + + p[-2] = ctr; +@@ -325,17 +328,58 @@ AES_FUNC_START2 (AesCtr_Code_HW) + + #ifdef USE_INTEL_VAES + ++/* ++GCC before 2013-Jun: ++ : ++ #ifdef __AVX__ ++ #include ++ #endif ++GCC after 2013-Jun: ++ : ++ #include ++CLANG 3.8+: ++{ ++ : ++ #if !defined(_MSC_VER) || defined(__AVX__) ++ #include ++ #endif ++ ++ if (the compiler is clang for Windows and if global arch is not set for __AVX__) ++ [ if (defined(_MSC_VER) && !defined(__AVX__)) ] ++ { ++ doesn't include ++ and we have 2 ways to fix it: ++ 1) we can define required __AVX__ before ++ or ++ 2) we can include after ++ } ++} ++ ++If we include manually for GCC/CLANG, it's ++required that must be included before . ++*/ ++ ++/* + #if defined(__clang__) && defined(_MSC_VER) +-#define __SSE4_2__ +-#define __AES__ + #define __AVX__ + #define __AVX2__ + #define __VAES__ +-#define __AVX512F__ +-#define __AVX512VL__ + #endif ++*/ + + #include ++#if defined(__clang__) && defined(_MSC_VER) ++ #if !defined(__AVX__) ++ #include ++ #endif ++ #if !defined(__AVX2__) ++ #include ++ #endif ++ #if !defined(__VAES__) ++ #include ++ #endif ++#endif // __clang__ && _MSC_VER ++ + + #define VAES_FUNC_START2(name) \ + AES_FUNC_START (name); \ +@@ -344,6 +388,8 @@ AES_FUNC_START (name) + + VAES_FUNC_START2 (AesCbc_Decode_HW_256) + { ++ __m128i *p = (__m128i *)(void *)ivAes; ++ __m128i *data = (__m128i *)(void *)data8; + __m128i iv = *p; + const __m128i *dataEnd; + UInt32 numRounds = *(const UInt32 *)(p + 1) * 2 + 1; +@@ -353,22 +399,22 @@ VAES_FUNC_START2 (AesCbc_Decode_HW_256) + { + const __m256i *w = keys + numRounds - 2; + +- WOP (AVX__DECLARE_VAR) +- WOP (AVX__LOAD_data); +- AVX__WOP_KEY (AVX__AES_XOR, 1) ++ WOP (AVX_DECLARE_VAR) ++ WOP (AVX_LOAD_data) ++ AVX_WOP_KEY (AVX_AES_XOR, 1) + + do + { +- AVX__WOP_KEY (AVX__AES_DEC, 0) ++ AVX_WOP_KEY (AVX_AES_DEC, 0) + w--; + } + while (w != keys); +- AVX__WOP_KEY (AVX__AES_DEC_LAST, 0) ++ AVX_WOP_KEY (AVX_AES_DEC_LAST, 0) + +- AVX_XOR (m0, _mm256_setr_m128i(iv, data[0])); +- WOP_M1 (AVX__XOR_data_M1) ++ AVX_XOR (m0, _mm256_setr_m128i(iv, data[0])) ++ WOP_M1 (AVX_XOR_data_M1) + iv = data[NUM_WAYS * 2 - 1]; +- WOP (AVX__STORE_data); ++ WOP (AVX_STORE_data) + } + WIDE_LOOP_END_AVX(;) + +@@ -378,15 +424,15 @@ VAES_FUNC_START2 (AesCbc_Decode_HW_256) + __m128i m = _mm_xor_si128 (w[2], *data); + do + { +- MM_OP_m (_mm_aesdec_si128, w[1]); +- MM_OP_m (_mm_aesdec_si128, w[0]); ++ MM_OP_m (_mm_aesdec_si128, w[1]) ++ MM_OP_m (_mm_aesdec_si128, w[0]) + w -= 2; + } + while (w != p); +- MM_OP_m (_mm_aesdec_si128, w[1]); +- MM_OP_m (_mm_aesdeclast_si128, w[0]); ++ MM_OP_m (_mm_aesdec_si128, w[1]) ++ MM_OP_m (_mm_aesdeclast_si128, w[0]) + +- MM_XOR (m, iv); ++ MM_XOR (m, iv) + iv = *data; + *data = m; + } +@@ -403,18 +449,20 @@ AVX2: _mm256_add_epi64 : vpaddq ymm, ymm, ymm + _mm256_broadcastsi128_si256 : vbroadcasti128 + */ + +-#define AVX__CTR_LOOP_START \ ++#define AVX_CTR_LOOP_START \ + ctr2 = _mm256_setr_m128i(_mm_sub_epi64(ctr, one), ctr); \ + two = _mm256_setr_m128i(one, one); \ + two = _mm256_add_epi64(two, two); \ + + // two = _mm256_setr_epi64x(2, 0, 2, 0); + +-#define AVX__CTR_LOOP_ENC \ ++#define AVX_CTR_LOOP_ENC \ + ctr = _mm256_extracti128_si256 (ctr2, 1); \ + + VAES_FUNC_START2 (AesCtr_Code_HW_256) + { ++ __m128i *p = (__m128i *)(void *)ivAes; ++ __m128i *data = (__m128i *)(void *)data8; + __m128i ctr = *p; + UInt32 numRounds = *(const UInt32 *)(p + 1) * 2 + 1; + const __m128i *dataEnd; +@@ -422,44 +470,44 @@ VAES_FUNC_START2 (AesCtr_Code_HW_256) + __m256i ctr2, two; + p += 2; + +- WIDE_LOOP_START_AVX (AVX__CTR_LOOP_START) ++ WIDE_LOOP_START_AVX (AVX_CTR_LOOP_START) + { + const __m256i *w = keys; + UInt32 r = numRounds - 2; +- WOP (AVX__DECLARE_VAR) +- AVX__WOP_KEY (AVX__CTR_START, 0); ++ WOP (AVX_DECLARE_VAR) ++ AVX_WOP_KEY (AVX_CTR_START, 0) + + w += 1; + do + { +- AVX__WOP_KEY (AVX__AES_ENC, 0) ++ AVX_WOP_KEY (AVX_AES_ENC, 0) + w += 1; + } + while (--r); +- AVX__WOP_KEY (AVX__AES_ENC_LAST, 0) ++ AVX_WOP_KEY (AVX_AES_ENC_LAST, 0) + +- WOP (AVX__CTR_END); ++ WOP (AVX_CTR_END) + } +- WIDE_LOOP_END_AVX (AVX__CTR_LOOP_ENC) ++ WIDE_LOOP_END_AVX (AVX_CTR_LOOP_ENC) + + SINGLE_LOOP + { + UInt32 numRounds2 = *(const UInt32 *)(p - 2 + 1) - 1; + const __m128i *w = p; + __m128i m; +- MM_OP (_mm_add_epi64, ctr, one); ++ MM_OP (_mm_add_epi64, ctr, one) + m = _mm_xor_si128 (ctr, p[0]); + w += 1; + do + { +- MM_OP_m (_mm_aesenc_si128, w[0]); +- MM_OP_m (_mm_aesenc_si128, w[1]); ++ MM_OP_m (_mm_aesenc_si128, w[0]) ++ MM_OP_m (_mm_aesenc_si128, w[1]) + w += 2; + } + while (--numRounds2); +- MM_OP_m (_mm_aesenc_si128, w[0]); +- MM_OP_m (_mm_aesenclast_si128, w[1]); +- MM_XOR (*data, m); ++ MM_OP_m (_mm_aesenc_si128, w[0]) ++ MM_OP_m (_mm_aesenclast_si128, w[1]) ++ MM_XOR (*data, m) + } + + p[-2] = ctr; +@@ -477,7 +525,7 @@ VAES_FUNC_START2 (AesCtr_Code_HW_256) + #define AES_TYPE_data Byte + + #define AES_FUNC_START(name) \ +- void MY_FAST_CALL name(UInt32 *p, Byte *data, size_t numBlocks) \ ++ void Z7_FASTCALL name(UInt32 *p, Byte *data, size_t numBlocks) \ + + #define AES_COMPAT_STUB(name) \ + AES_FUNC_START(name); \ +@@ -496,8 +544,8 @@ AES_COMPAT_STUB (AesCtr_Code) + #pragma message("VAES HW_SW stub was used") + + #define VAES_COMPAT_STUB(name) \ +- void MY_FAST_CALL name ## _256(UInt32 *p, Byte *data, size_t numBlocks); \ +- void MY_FAST_CALL name ## _256(UInt32 *p, Byte *data, size_t numBlocks) \ ++ void Z7_FASTCALL name ## _256(UInt32 *p, Byte *data, size_t numBlocks); \ ++ void Z7_FASTCALL name ## _256(UInt32 *p, Byte *data, size_t numBlocks) \ + { name((AES_TYPE_keys *)(void *)p, (AES_TYPE_data *)(void *)data, numBlocks); } + + VAES_COMPAT_STUB (AesCbc_Decode_HW) +@@ -551,7 +599,8 @@ VAES_COMPAT_STUB (AesCtr_Code_HW) + typedef uint8x16_t v128; + + #define AES_FUNC_START(name) \ +- void MY_FAST_CALL name(v128 *p, v128 *data, size_t numBlocks) ++ void Z7_FASTCALL name(UInt32 *ivAes, Byte *data8, size_t numBlocks) ++ // void Z7_FASTCALL name(v128 *p, v128 *data, size_t numBlocks) + + #define AES_FUNC_START2(name) \ + AES_FUNC_START (name); \ +@@ -559,18 +608,20 @@ ATTRIB_AES \ + AES_FUNC_START (name) + + #define MM_OP(op, dest, src) dest = op(dest, src); +-#define MM_OP_m(op, src) MM_OP(op, m, src); ++#define MM_OP_m(op, src) MM_OP(op, m, src) + #define MM_OP1_m(op) m = op(m); + +-#define MM_XOR( dest, src) MM_OP(veorq_u8, dest, src); +-#define MM_XOR_m( src) MM_XOR(m, src); ++#define MM_XOR( dest, src) MM_OP(veorq_u8, dest, src) ++#define MM_XOR_m( src) MM_XOR(m, src) + +-#define AES_E_m(k) MM_OP_m (vaeseq_u8, k); +-#define AES_E_MC_m(k) AES_E_m (k); MM_OP1_m(vaesmcq_u8); ++#define AES_E_m(k) MM_OP_m (vaeseq_u8, k) ++#define AES_E_MC_m(k) AES_E_m (k) MM_OP1_m(vaesmcq_u8) + + + AES_FUNC_START2 (AesCbc_Encode_HW) + { ++ v128 *p = (v128*)(void*)ivAes; ++ v128 *data = (v128*)(void*)data8; + v128 m = *p; + const v128 k0 = p[2]; + const v128 k1 = p[3]; +@@ -608,7 +659,7 @@ AES_FUNC_START2 (AesCbc_Encode_HW) + AES_E_MC_m (p[14]) + } + } +- AES_E_m (k_z1); ++ AES_E_m (k_z1) + MM_XOR_m (k_z0); + *data = m; + } +@@ -617,44 +668,44 @@ AES_FUNC_START2 (AesCbc_Encode_HW) + + + #define WOP_1(op) +-#define WOP_2(op) WOP_1 (op) op (m1, 1); +-#define WOP_3(op) WOP_2 (op) op (m2, 2); +-#define WOP_4(op) WOP_3 (op) op (m3, 3); +-#define WOP_5(op) WOP_4 (op) op (m4, 4); +-#define WOP_6(op) WOP_5 (op) op (m5, 5); +-#define WOP_7(op) WOP_6 (op) op (m6, 6); +-#define WOP_8(op) WOP_7 (op) op (m7, 7); ++#define WOP_2(op) WOP_1 (op) op (m1, 1) ++#define WOP_3(op) WOP_2 (op) op (m2, 2) ++#define WOP_4(op) WOP_3 (op) op (m3, 3) ++#define WOP_5(op) WOP_4 (op) op (m4, 4) ++#define WOP_6(op) WOP_5 (op) op (m5, 5) ++#define WOP_7(op) WOP_6 (op) op (m6, 6) ++#define WOP_8(op) WOP_7 (op) op (m7, 7) + + #define NUM_WAYS 8 + #define WOP_M1 WOP_8 + +-#define WOP(op) op (m0, 0); WOP_M1(op) ++#define WOP(op) op (m0, 0) WOP_M1(op) + +-#define DECLARE_VAR(reg, ii) v128 reg ++#define DECLARE_VAR(reg, ii) v128 reg; + #define LOAD_data( reg, ii) reg = data[ii]; + #define STORE_data( reg, ii) data[ii] = reg; + #if (NUM_WAYS > 1) +-#define XOR_data_M1(reg, ii) MM_XOR (reg, data[ii- 1]); ++#define XOR_data_M1(reg, ii) MM_XOR (reg, data[ii- 1]) + #endif + +-#define MM_OP_key(op, reg) MM_OP (op, reg, key); ++#define MM_OP_key(op, reg) MM_OP (op, reg, key) + +-#define AES_D_m(k) MM_OP_m (vaesdq_u8, k); +-#define AES_D_IMC_m(k) AES_D_m (k); MM_OP1_m (vaesimcq_u8); ++#define AES_D_m(k) MM_OP_m (vaesdq_u8, k) ++#define AES_D_IMC_m(k) AES_D_m (k) MM_OP1_m (vaesimcq_u8) + + #define AES_XOR( reg, ii) MM_OP_key (veorq_u8, reg) + #define AES_D( reg, ii) MM_OP_key (vaesdq_u8, reg) + #define AES_E( reg, ii) MM_OP_key (vaeseq_u8, reg) + +-#define AES_D_IMC( reg, ii) AES_D (reg, ii); reg = vaesimcq_u8(reg) +-#define AES_E_MC( reg, ii) AES_E (reg, ii); reg = vaesmcq_u8(reg) ++#define AES_D_IMC( reg, ii) AES_D (reg, ii) reg = vaesimcq_u8(reg); ++#define AES_E_MC( reg, ii) AES_E (reg, ii) reg = vaesmcq_u8(reg); + +-#define CTR_START(reg, ii) MM_OP (vaddq_u64, ctr, one); reg = vreinterpretq_u8_u64(ctr); +-#define CTR_END( reg, ii) MM_XOR (data[ii], reg); ++#define CTR_START(reg, ii) MM_OP (vaddq_u64, ctr, one) reg = vreinterpretq_u8_u64(ctr); ++#define CTR_END( reg, ii) MM_XOR (data[ii], reg) + + #define WOP_KEY(op, n) { \ + const v128 key = w[n]; \ +- WOP(op); } ++ WOP(op) } + + #define WIDE_LOOP_START \ + dataEnd = data + numBlocks; \ +@@ -672,6 +723,8 @@ AES_FUNC_START2 (AesCbc_Encode_HW) + + AES_FUNC_START2 (AesCbc_Decode_HW) + { ++ v128 *p = (v128*)(void*)ivAes; ++ v128 *data = (v128*)(void*)data8; + v128 iv = *p; + const v128 *wStart = p + ((size_t)*(const UInt32 *)(p + 1)) * 2; + const v128 *dataEnd; +@@ -681,7 +734,7 @@ AES_FUNC_START2 (AesCbc_Decode_HW) + { + const v128 *w = wStart; + WOP (DECLARE_VAR) +- WOP (LOAD_data); ++ WOP (LOAD_data) + WOP_KEY (AES_D_IMC, 2) + do + { +@@ -695,7 +748,7 @@ AES_FUNC_START2 (AesCbc_Decode_HW) + MM_XOR (m0, iv); + WOP_M1 (XOR_data_M1) + iv = data[NUM_WAYS - 1]; +- WOP (STORE_data); ++ WOP (STORE_data) + } + WIDE_LOOP_END + +@@ -724,6 +777,8 @@ AES_FUNC_START2 (AesCbc_Decode_HW) + + AES_FUNC_START2 (AesCtr_Code_HW) + { ++ v128 *p = (v128*)(void*)ivAes; ++ v128 *data = (v128*)(void*)data8; + uint64x2_t ctr = vreinterpretq_u64_u8(*p); + const v128 *wEnd = p + ((size_t)*(const UInt32 *)(p + 1)) * 2; + const v128 *dataEnd; +@@ -735,7 +790,7 @@ AES_FUNC_START2 (AesCtr_Code_HW) + { + const v128 *w = p; + WOP (DECLARE_VAR) +- WOP (CTR_START); ++ WOP (CTR_START) + do + { + WOP_KEY (AES_E_MC, 0) +@@ -746,7 +801,7 @@ AES_FUNC_START2 (AesCtr_Code_HW) + WOP_KEY (AES_E_MC, 0) + WOP_KEY (AES_E, 1) + WOP_KEY (AES_XOR, 2) +- WOP (CTR_END); ++ WOP (CTR_END) + } + WIDE_LOOP_END + +@@ -762,10 +817,10 @@ AES_FUNC_START2 (AesCtr_Code_HW) + w += 2; + } + while (w != wEnd); +- AES_E_MC_m (w[0]); +- AES_E_m (w[1]); +- MM_XOR_m (w[2]); +- CTR_END (m, 0); ++ AES_E_MC_m (w[0]) ++ AES_E_m (w[1]) ++ MM_XOR_m (w[2]) ++ CTR_END (m, 0) + } + + p[-2] = vreinterpretq_u8_u64(ctr); +@@ -774,3 +829,12 @@ AES_FUNC_START2 (AesCtr_Code_HW) + #endif // USE_HW_AES + + #endif // MY_CPU_ARM_OR_ARM64 ++ ++#undef NUM_WAYS ++#undef WOP_M1 ++#undef WOP ++#undef DECLARE_VAR ++#undef LOAD_data ++#undef STORE_data ++#undef USE_INTEL_AES ++#undef USE_HW_AES +diff --git a/src/lzma/Alloc.c b/src/lzma/Alloc.c +index d1af76c5c..d841bf20a 100644 +--- a/src/lzma/Alloc.c ++++ b/src/lzma/Alloc.c +@@ -1,38 +1,54 @@ + /* Alloc.c -- Memory allocation functions +-2021-07-13 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +-#include +- + #ifdef _WIN32 +-#include ++#include "7zWindows.h" + #endif + #include + + #include "Alloc.h" + +-/* #define _SZ_ALLOC_DEBUG */ ++#ifdef _WIN32 ++#ifdef Z7_LARGE_PAGES ++#if defined(__clang__) || defined(__GNUC__) ++typedef void (*Z7_voidFunction)(void); ++#define MY_CAST_FUNC (Z7_voidFunction) ++#elif defined(_MSC_VER) && _MSC_VER > 1920 ++#define MY_CAST_FUNC (void *) ++// #pragma warning(disable : 4191) // 'type cast': unsafe conversion from 'FARPROC' to 'void (__cdecl *)()' ++#else ++#define MY_CAST_FUNC ++#endif ++#endif // Z7_LARGE_PAGES ++#endif // _WIN32 ++ ++// #define SZ_ALLOC_DEBUG ++/* #define SZ_ALLOC_DEBUG */ + +-/* use _SZ_ALLOC_DEBUG to debug alloc/free operations */ +-#ifdef _SZ_ALLOC_DEBUG ++/* use SZ_ALLOC_DEBUG to debug alloc/free operations */ ++#ifdef SZ_ALLOC_DEBUG + ++#include + #include +-int g_allocCount = 0; +-int g_allocCountMid = 0; +-int g_allocCountBig = 0; ++static int g_allocCount = 0; ++#ifdef _WIN32 ++static int g_allocCountMid = 0; ++static int g_allocCountBig = 0; ++#endif + + + #define CONVERT_INT_TO_STR(charType, tempSize) \ +- unsigned char temp[tempSize]; unsigned i = 0; \ +- while (val >= 10) { temp[i++] = (unsigned char)('0' + (unsigned)(val % 10)); val /= 10; } \ ++ char temp[tempSize]; unsigned i = 0; \ ++ while (val >= 10) { temp[i++] = (char)('0' + (unsigned)(val % 10)); val /= 10; } \ + *s++ = (charType)('0' + (unsigned)val); \ + while (i != 0) { i--; *s++ = temp[i]; } \ + *s = 0; + + static void ConvertUInt64ToString(UInt64 val, char *s) + { +- CONVERT_INT_TO_STR(char, 24); ++ CONVERT_INT_TO_STR(char, 24) + } + + #define GET_HEX_CHAR(t) ((char)(((t < 10) ? ('0' + t) : ('A' + (t - 10))))) +@@ -77,7 +93,7 @@ static void PrintAligned(const char *s, size_t align) + Print(s); + } + +-static void PrintLn() ++static void PrintLn(void) + { + Print("\n"); + } +@@ -89,10 +105,10 @@ static void PrintHex(UInt64 v, size_t align) + PrintAligned(s, align); + } + +-static void PrintDec(UInt64 v, size_t align) ++static void PrintDec(int v, size_t align) + { + char s[32]; +- ConvertUInt64ToString(v, s); ++ ConvertUInt64ToString((unsigned)v, s); + PrintAligned(s, align); + } + +@@ -102,12 +118,19 @@ static void PrintAddr(void *p) + } + + +-#define PRINT_ALLOC(name, cnt, size, ptr) \ ++#define PRINT_REALLOC(name, cnt, size, ptr) { \ ++ Print(name " "); \ ++ if (!ptr) PrintDec(cnt++, 10); \ ++ PrintHex(size, 10); \ ++ PrintAddr(ptr); \ ++ PrintLn(); } ++ ++#define PRINT_ALLOC(name, cnt, size, ptr) { \ + Print(name " "); \ + PrintDec(cnt++, 10); \ + PrintHex(size, 10); \ + PrintAddr(ptr); \ +- PrintLn(); ++ PrintLn(); } + + #define PRINT_FREE(name, cnt, ptr) if (ptr) { \ + Print(name " "); \ +@@ -117,7 +140,9 @@ static void PrintAddr(void *p) + + #else + ++#ifdef _WIN32 + #define PRINT_ALLOC(name, cnt, size, ptr) ++#endif + #define PRINT_FREE(name, cnt, ptr) + #define Print(s) + #define PrintLn() +@@ -127,16 +152,31 @@ static void PrintAddr(void *p) + #endif + + ++/* ++by specification: ++ malloc(non_NULL, 0) : returns NULL or a unique pointer value that can later be successfully passed to free() ++ realloc(NULL, size) : the call is equivalent to malloc(size) ++ realloc(non_NULL, 0) : the call is equivalent to free(ptr) ++ ++in main compilers: ++ malloc(0) : returns non_NULL ++ realloc(NULL, 0) : returns non_NULL ++ realloc(non_NULL, 0) : returns NULL ++*/ ++ + + void *MyAlloc(size_t size) + { + if (size == 0) + return NULL; +- PRINT_ALLOC("Alloc ", g_allocCount, size, NULL); +- #ifdef _SZ_ALLOC_DEBUG ++ // PRINT_ALLOC("Alloc ", g_allocCount, size, NULL) ++ #ifdef SZ_ALLOC_DEBUG + { + void *p = malloc(size); +- // PRINT_ALLOC("Alloc ", g_allocCount, size, p); ++ if (p) ++ { ++ PRINT_ALLOC("Alloc ", g_allocCount, size, p) ++ } + return p; + } + #else +@@ -146,33 +186,64 @@ void *MyAlloc(size_t size) + + void MyFree(void *address) + { +- PRINT_FREE("Free ", g_allocCount, address); ++ PRINT_FREE("Free ", g_allocCount, address) + + free(address); + } + ++void *MyRealloc(void *address, size_t size) ++{ ++ if (size == 0) ++ { ++ MyFree(address); ++ return NULL; ++ } ++ // PRINT_REALLOC("Realloc ", g_allocCount, size, address) ++ #ifdef SZ_ALLOC_DEBUG ++ { ++ void *p = realloc(address, size); ++ if (p) ++ { ++ PRINT_REALLOC("Realloc ", g_allocCount, size, address) ++ } ++ return p; ++ } ++ #else ++ return realloc(address, size); ++ #endif ++} ++ ++ + #ifdef _WIN32 + + void *MidAlloc(size_t size) + { + if (size == 0) + return NULL; +- +- PRINT_ALLOC("Alloc-Mid", g_allocCountMid, size, NULL); +- ++ #ifdef SZ_ALLOC_DEBUG ++ { ++ void *p = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); ++ if (p) ++ { ++ PRINT_ALLOC("Alloc-Mid", g_allocCountMid, size, p) ++ } ++ return p; ++ } ++ #else + return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); ++ #endif + } + + void MidFree(void *address) + { +- PRINT_FREE("Free-Mid", g_allocCountMid, address); ++ PRINT_FREE("Free-Mid", g_allocCountMid, address) + + if (!address) + return; + VirtualFree(address, 0, MEM_RELEASE); + } + +-#ifdef _7ZIP_LARGE_PAGES ++#ifdef Z7_LARGE_PAGES + + #ifdef MEM_LARGE_PAGES + #define MY__MEM_LARGE_PAGES MEM_LARGE_PAGES +@@ -183,34 +254,35 @@ void MidFree(void *address) + extern + SIZE_T g_LargePageSize; + SIZE_T g_LargePageSize = 0; +-typedef SIZE_T (WINAPI *GetLargePageMinimumP)(VOID); ++typedef SIZE_T (WINAPI *Func_GetLargePageMinimum)(VOID); + +-#endif // _7ZIP_LARGE_PAGES +- +-void SetLargePageSize() ++void SetLargePageSize(void) + { +- #ifdef _7ZIP_LARGE_PAGES ++ #ifdef Z7_LARGE_PAGES + SIZE_T size; +- GetLargePageMinimumP largePageMinimum = (GetLargePageMinimumP) +- GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetLargePageMinimum"); +- if (!largePageMinimum) ++ const ++ Func_GetLargePageMinimum fn = ++ (Func_GetLargePageMinimum) MY_CAST_FUNC GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), ++ "GetLargePageMinimum"); ++ if (!fn) + return; +- size = largePageMinimum(); ++ size = fn(); + if (size == 0 || (size & (size - 1)) != 0) + return; + g_LargePageSize = size; + #endif + } + ++#endif // Z7_LARGE_PAGES + + void *BigAlloc(size_t size) + { + if (size == 0) + return NULL; + +- PRINT_ALLOC("Alloc-Big", g_allocCountBig, size, NULL); +- +- #ifdef _7ZIP_LARGE_PAGES ++ PRINT_ALLOC("Alloc-Big", g_allocCountBig, size, NULL) ++ ++ #ifdef Z7_LARGE_PAGES + { + SIZE_T ps = g_LargePageSize; + if (ps != 0 && ps <= (1 << 30) && size > (ps / 2)) +@@ -220,38 +292,38 @@ void *BigAlloc(size_t size) + size2 = (size + ps) & ~ps; + if (size2 >= size) + { +- void *res = VirtualAlloc(NULL, size2, MEM_COMMIT | MY__MEM_LARGE_PAGES, PAGE_READWRITE); +- if (res) +- return res; ++ void *p = VirtualAlloc(NULL, size2, MEM_COMMIT | MY__MEM_LARGE_PAGES, PAGE_READWRITE); ++ if (p) ++ { ++ PRINT_ALLOC("Alloc-BM ", g_allocCountMid, size2, p) ++ return p; ++ } + } + } + } + #endif + +- return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); ++ return MidAlloc(size); + } + + void BigFree(void *address) + { +- PRINT_FREE("Free-Big", g_allocCountBig, address); +- +- if (!address) +- return; +- VirtualFree(address, 0, MEM_RELEASE); ++ PRINT_FREE("Free-Big", g_allocCountBig, address) ++ MidFree(address); + } + +-#endif ++#endif // _WIN32 + + +-static void *SzAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return MyAlloc(size); } +-static void SzFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); MyFree(address); } ++static void *SzAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p) return MyAlloc(size); } ++static void SzFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p) MyFree(address); } + const ISzAlloc g_Alloc = { SzAlloc, SzFree }; + + #ifdef _WIN32 +-static void *SzMidAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return MidAlloc(size); } +-static void SzMidFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); MidFree(address); } +-static void *SzBigAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p); return BigAlloc(size); } +-static void SzBigFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p); BigFree(address); } ++static void *SzMidAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p) return MidAlloc(size); } ++static void SzMidFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p) MidFree(address); } ++static void *SzBigAlloc(ISzAllocPtr p, size_t size) { UNUSED_VAR(p) return BigAlloc(size); } ++static void SzBigFree(ISzAllocPtr p, void *address) { UNUSED_VAR(p) BigFree(address); } + const ISzAlloc g_MidAlloc = { SzMidAlloc, SzMidFree }; + const ISzAlloc g_BigAlloc = { SzBigAlloc, SzBigFree }; + #endif +@@ -334,7 +406,7 @@ static void *SzAlignedAlloc(ISzAllocPtr pp, size_t size) + void *p; + void *pAligned; + size_t newSize; +- UNUSED_VAR(pp); ++ UNUSED_VAR(pp) + + /* also we can allocate additional dummy ALLOC_ALIGN_SIZE bytes after aligned + block to prevent cache line sharing with another allocated blocks */ +@@ -362,7 +434,7 @@ static void *SzAlignedAlloc(ISzAllocPtr pp, size_t size) + #else + + void *p; +- UNUSED_VAR(pp); ++ UNUSED_VAR(pp) + if (posix_memalign(&p, ALLOC_ALIGN_SIZE, size)) + return NULL; + +@@ -377,7 +449,7 @@ static void *SzAlignedAlloc(ISzAllocPtr pp, size_t size) + + static void SzAlignedFree(ISzAllocPtr pp, void *address) + { +- UNUSED_VAR(pp); ++ UNUSED_VAR(pp) + #ifndef USE_posix_memalign + if (address) + MyFree(((void **)address)[-1]); +@@ -401,7 +473,7 @@ const ISzAlloc g_AlignedAlloc = { SzAlignedAlloc, SzAlignedFree }; + + static void *AlignOffsetAlloc_Alloc(ISzAllocPtr pp, size_t size) + { +- CAlignOffsetAlloc *p = CONTAINER_FROM_VTBL(pp, CAlignOffsetAlloc, vt); ++ const CAlignOffsetAlloc *p = Z7_CONTAINER_FROM_VTBL_CONST(pp, CAlignOffsetAlloc, vt); + void *adr; + void *pAligned; + size_t newSize; +@@ -447,7 +519,7 @@ static void AlignOffsetAlloc_Free(ISzAllocPtr pp, void *address) + { + if (address) + { +- CAlignOffsetAlloc *p = CONTAINER_FROM_VTBL(pp, CAlignOffsetAlloc, vt); ++ const CAlignOffsetAlloc *p = Z7_CONTAINER_FROM_VTBL_CONST(pp, CAlignOffsetAlloc, vt); + PrintLn(); + Print("- Aligned Free: "); + PrintLn(); +diff --git a/src/lzma/Alloc.h b/src/lzma/Alloc.h +index 3be2041eb..fac5b62fb 100644 +--- a/src/lzma/Alloc.h ++++ b/src/lzma/Alloc.h +@@ -1,19 +1,32 @@ + /* Alloc.h -- Memory allocation functions +-2021-07-13 : Igor Pavlov : Public domain */ ++2023-03-04 : Igor Pavlov : Public domain */ + +-#ifndef __COMMON_ALLOC_H +-#define __COMMON_ALLOC_H ++#ifndef ZIP7_INC_ALLOC_H ++#define ZIP7_INC_ALLOC_H + + #include "7zTypes.h" + + EXTERN_C_BEGIN + ++/* ++ MyFree(NULL) : is allowed, as free(NULL) ++ MyAlloc(0) : returns NULL : but malloc(0) is allowed to return NULL or non_NULL ++ MyRealloc(NULL, 0) : returns NULL : but realloc(NULL, 0) is allowed to return NULL or non_NULL ++MyRealloc() is similar to realloc() for the following cases: ++ MyRealloc(non_NULL, 0) : returns NULL and always calls MyFree(ptr) ++ MyRealloc(NULL, non_ZERO) : returns NULL, if allocation failed ++ MyRealloc(non_NULL, non_ZERO) : returns NULL, if reallocation failed ++*/ ++ + void *MyAlloc(size_t size); + void MyFree(void *address); ++void *MyRealloc(void *address, size_t size); + + #ifdef _WIN32 + ++#ifdef Z7_LARGE_PAGES + void SetLargePageSize(void); ++#endif + + void *MidAlloc(size_t size); + void MidFree(void *address); +diff --git a/src/lzma/Bcj2.c b/src/lzma/Bcj2.c +index c7b956708..7cb57ad62 100644 +--- a/src/lzma/Bcj2.c ++++ b/src/lzma/Bcj2.c +@@ -1,29 +1,24 @@ + /* Bcj2.c -- BCJ2 Decoder (Converter for x86 code) +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-03-01 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + + #include "Bcj2.h" + #include "CpuArch.h" + +-#define CProb UInt16 +- + #define kTopValue ((UInt32)1 << 24) +-#define kNumModelBits 11 +-#define kBitModelTotal (1 << kNumModelBits) ++#define kNumBitModelTotalBits 11 ++#define kBitModelTotal (1 << kNumBitModelTotalBits) + #define kNumMoveBits 5 + +-#define _IF_BIT_0 ttt = *prob; bound = (p->range >> kNumModelBits) * ttt; if (p->code < bound) +-#define _UPDATE_0 p->range = bound; *prob = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +-#define _UPDATE_1 p->range -= bound; p->code -= bound; *prob = (CProb)(ttt - (ttt >> kNumMoveBits)); ++// UInt32 bcj2_stats[256 + 2][2]; + + void Bcj2Dec_Init(CBcj2Dec *p) + { + unsigned i; +- +- p->state = BCJ2_DEC_STATE_OK; ++ p->state = BCJ2_STREAM_RC; // BCJ2_DEC_STATE_OK; + p->ip = 0; +- p->temp[3] = 0; ++ p->temp = 0; + p->range = 0; + p->code = 0; + for (i = 0; i < sizeof(p->probs) / sizeof(p->probs[0]); i++) +@@ -32,217 +27,248 @@ void Bcj2Dec_Init(CBcj2Dec *p) + + SRes Bcj2Dec_Decode(CBcj2Dec *p) + { ++ UInt32 v = p->temp; ++ // const Byte *src; + if (p->range <= 5) + { +- p->state = BCJ2_DEC_STATE_OK; ++ UInt32 code = p->code; ++ p->state = BCJ2_DEC_STATE_ERROR; /* for case if we return SZ_ERROR_DATA; */ + for (; p->range != 5; p->range++) + { +- if (p->range == 1 && p->code != 0) ++ if (p->range == 1 && code != 0) + return SZ_ERROR_DATA; +- + if (p->bufs[BCJ2_STREAM_RC] == p->lims[BCJ2_STREAM_RC]) + { + p->state = BCJ2_STREAM_RC; + return SZ_OK; + } +- +- p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++; ++ code = (code << 8) | *(p->bufs[BCJ2_STREAM_RC])++; ++ p->code = code; + } +- +- if (p->code == 0xFFFFFFFF) ++ if (code == 0xffffffff) + return SZ_ERROR_DATA; +- +- p->range = 0xFFFFFFFF; ++ p->range = 0xffffffff; + } +- else if (p->state >= BCJ2_DEC_STATE_ORIG_0) ++ // else + { +- while (p->state <= BCJ2_DEC_STATE_ORIG_3) ++ unsigned state = p->state; ++ // we check BCJ2_IS_32BIT_STREAM() here instead of check in the main loop ++ if (BCJ2_IS_32BIT_STREAM(state)) + { +- Byte *dest = p->dest; +- if (dest == p->destLim) ++ const Byte *cur = p->bufs[state]; ++ if (cur == p->lims[state]) + return SZ_OK; +- *dest = p->temp[(size_t)p->state - BCJ2_DEC_STATE_ORIG_0]; +- p->state++; +- p->dest = dest + 1; ++ p->bufs[state] = cur + 4; ++ { ++ const UInt32 ip = p->ip + 4; ++ v = GetBe32a(cur) - ip; ++ p->ip = ip; ++ } ++ state = BCJ2_DEC_STATE_ORIG_0; + } +- } +- +- /* +- if (BCJ2_IS_32BIT_STREAM(p->state)) +- { +- const Byte *cur = p->bufs[p->state]; +- if (cur == p->lims[p->state]) +- return SZ_OK; +- p->bufs[p->state] = cur + 4; +- ++ if ((unsigned)(state - BCJ2_DEC_STATE_ORIG_0) < 4) + { +- UInt32 val; +- Byte *dest; +- SizeT rem; +- +- p->ip += 4; +- val = GetBe32(cur) - p->ip; +- dest = p->dest; +- rem = p->destLim - dest; +- if (rem < 4) ++ Byte *dest = p->dest; ++ for (;;) + { +- SizeT i; +- SetUi32(p->temp, val); +- for (i = 0; i < rem; i++) +- dest[i] = p->temp[i]; +- p->dest = dest + rem; +- p->state = BCJ2_DEC_STATE_ORIG_0 + (unsigned)rem; +- return SZ_OK; ++ if (dest == p->destLim) ++ { ++ p->state = state; ++ p->temp = v; ++ return SZ_OK; ++ } ++ *dest++ = (Byte)v; ++ p->dest = dest; ++ if (++state == BCJ2_DEC_STATE_ORIG_3 + 1) ++ break; ++ v >>= 8; + } +- SetUi32(dest, val); +- p->temp[3] = (Byte)(val >> 24); +- p->dest = dest + 4; +- p->state = BCJ2_DEC_STATE_OK; + } + } +- */ + ++ // src = p->bufs[BCJ2_STREAM_MAIN]; + for (;;) + { ++ /* + if (BCJ2_IS_32BIT_STREAM(p->state)) + p->state = BCJ2_DEC_STATE_OK; + else ++ */ + { + if (p->range < kTopValue) + { + if (p->bufs[BCJ2_STREAM_RC] == p->lims[BCJ2_STREAM_RC]) + { + p->state = BCJ2_STREAM_RC; ++ p->temp = v; + return SZ_OK; + } + p->range <<= 8; + p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++; + } +- + { + const Byte *src = p->bufs[BCJ2_STREAM_MAIN]; + const Byte *srcLim; +- Byte *dest; +- SizeT num = (SizeT)(p->lims[BCJ2_STREAM_MAIN] - src); +- +- if (num == 0) ++ Byte *dest = p->dest; + { +- p->state = BCJ2_STREAM_MAIN; +- return SZ_OK; ++ const SizeT rem = (SizeT)(p->lims[BCJ2_STREAM_MAIN] - src); ++ SizeT num = (SizeT)(p->destLim - dest); ++ if (num >= rem) ++ num = rem; ++ #define NUM_ITERS 4 ++ #if (NUM_ITERS & (NUM_ITERS - 1)) == 0 ++ num &= ~((SizeT)NUM_ITERS - 1); // if (NUM_ITERS == (1 << x)) ++ #else ++ num -= num % NUM_ITERS; // if (NUM_ITERS != (1 << x)) ++ #endif ++ srcLim = src + num; + } +- +- dest = p->dest; +- if (num > (SizeT)(p->destLim - dest)) ++ ++ #define NUM_SHIFT_BITS 24 ++ #define ONE_ITER(indx) { \ ++ const unsigned b = src[indx]; \ ++ *dest++ = (Byte)b; \ ++ v = (v << NUM_SHIFT_BITS) | b; \ ++ if (((b + (0x100 - 0xe8)) & 0xfe) == 0) break; \ ++ if (((v - (((UInt32)0x0f << (NUM_SHIFT_BITS)) + 0x80)) & \ ++ ((((UInt32)1 << (4 + NUM_SHIFT_BITS)) - 0x1) << 4)) == 0) break; \ ++ /* ++dest */; /* v = b; */ } ++ ++ if (src != srcLim) ++ for (;;) + { +- num = (SizeT)(p->destLim - dest); +- if (num == 0) +- { +- p->state = BCJ2_DEC_STATE_ORIG; +- return SZ_OK; +- } ++ /* The dependency chain of 2-cycle for (v) calculation is not big problem here. ++ But we can remove dependency chain with v = b in the end of loop. */ ++ ONE_ITER(0) ++ #if (NUM_ITERS > 1) ++ ONE_ITER(1) ++ #if (NUM_ITERS > 2) ++ ONE_ITER(2) ++ #if (NUM_ITERS > 3) ++ ONE_ITER(3) ++ #if (NUM_ITERS > 4) ++ ONE_ITER(4) ++ #if (NUM_ITERS > 5) ++ ONE_ITER(5) ++ #if (NUM_ITERS > 6) ++ ONE_ITER(6) ++ #if (NUM_ITERS > 7) ++ ONE_ITER(7) ++ #endif ++ #endif ++ #endif ++ #endif ++ #endif ++ #endif ++ #endif ++ ++ src += NUM_ITERS; ++ if (src == srcLim) ++ break; + } +- +- srcLim = src + num; + +- if (p->temp[3] == 0x0F && (src[0] & 0xF0) == 0x80) +- *dest = src[0]; +- else for (;;) ++ if (src == srcLim) ++ #if (NUM_ITERS > 1) ++ for (;;) ++ #endif + { +- Byte b = *src; +- *dest = b; +- if (b != 0x0F) ++ #if (NUM_ITERS > 1) ++ if (src == p->lims[BCJ2_STREAM_MAIN] || dest == p->destLim) ++ #endif + { +- if ((b & 0xFE) == 0xE8) +- break; +- dest++; +- if (++src != srcLim) +- continue; +- break; ++ const SizeT num = (SizeT)(src - p->bufs[BCJ2_STREAM_MAIN]); ++ p->bufs[BCJ2_STREAM_MAIN] = src; ++ p->dest = dest; ++ p->ip += (UInt32)num; ++ /* state BCJ2_STREAM_MAIN has more priority than BCJ2_STATE_ORIG */ ++ p->state = ++ src == p->lims[BCJ2_STREAM_MAIN] ? ++ (unsigned)BCJ2_STREAM_MAIN : ++ (unsigned)BCJ2_DEC_STATE_ORIG; ++ p->temp = v; ++ return SZ_OK; + } +- dest++; +- if (++src == srcLim) +- break; +- if ((*src & 0xF0) != 0x80) +- continue; +- *dest = *src; +- break; ++ #if (NUM_ITERS > 1) ++ ONE_ITER(0) ++ src++; ++ #endif + } +- +- num = (SizeT)(src - p->bufs[BCJ2_STREAM_MAIN]); +- +- if (src == srcLim) ++ + { +- p->temp[3] = src[-1]; +- p->bufs[BCJ2_STREAM_MAIN] = src; ++ const SizeT num = (SizeT)(dest - p->dest); ++ p->dest = dest; // p->dest += num; ++ p->bufs[BCJ2_STREAM_MAIN] += num; // = src; + p->ip += (UInt32)num; +- p->dest += num; +- p->state = +- p->bufs[BCJ2_STREAM_MAIN] == +- p->lims[BCJ2_STREAM_MAIN] ? +- (unsigned)BCJ2_STREAM_MAIN : +- (unsigned)BCJ2_DEC_STATE_ORIG; +- return SZ_OK; + } +- + { + UInt32 bound, ttt; +- CProb *prob; +- Byte b = src[0]; +- Byte prev = (Byte)(num == 0 ? p->temp[3] : src[-1]); +- +- p->temp[3] = b; +- p->bufs[BCJ2_STREAM_MAIN] = src + 1; +- num++; +- p->ip += (UInt32)num; +- p->dest += num; +- +- prob = p->probs + (unsigned)(b == 0xE8 ? 2 + (unsigned)prev : (b == 0xE9 ? 1 : 0)); +- +- _IF_BIT_0 ++ CBcj2Prob *prob; // unsigned index; ++ /* ++ prob = p->probs + (unsigned)((Byte)v == 0xe8 ? ++ 2 + (Byte)(v >> 8) : ++ ((v >> 5) & 1)); // ((Byte)v < 0xe8 ? 0 : 1)); ++ */ + { +- _UPDATE_0 ++ const unsigned c = ((v + 0x17) >> 6) & 1; ++ prob = p->probs + (unsigned) ++ (((0 - c) & (Byte)(v >> NUM_SHIFT_BITS)) + c + ((v >> 5) & 1)); ++ // (Byte) ++ // 8x->0 : e9->1 : xxe8->xx+2 ++ // 8x->0x100 : e9->0x101 : xxe8->xx ++ // (((0x100 - (e & ~v)) & (0x100 | (v >> 8))) + (e & v)); ++ // (((0x101 + (~e | v)) & (0x100 | (v >> 8))) + (e & v)); ++ } ++ ttt = *prob; ++ bound = (p->range >> kNumBitModelTotalBits) * ttt; ++ if (p->code < bound) ++ { ++ // bcj2_stats[prob - p->probs][0]++; ++ p->range = bound; ++ *prob = (CBcj2Prob)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); + continue; + } +- _UPDATE_1 +- ++ { ++ // bcj2_stats[prob - p->probs][1]++; ++ p->range -= bound; ++ p->code -= bound; ++ *prob = (CBcj2Prob)(ttt - (ttt >> kNumMoveBits)); ++ } + } + } + } +- + { +- UInt32 val; +- unsigned cj = (p->temp[3] == 0xE8) ? BCJ2_STREAM_CALL : BCJ2_STREAM_JUMP; ++ /* (v == 0xe8 ? 0 : 1) uses setcc instruction with additional zero register usage in x64 MSVC. */ ++ // const unsigned cj = ((Byte)v == 0xe8) ? BCJ2_STREAM_CALL : BCJ2_STREAM_JUMP; ++ const unsigned cj = (((v + 0x57) >> 6) & 1) + BCJ2_STREAM_CALL; + const Byte *cur = p->bufs[cj]; + Byte *dest; + SizeT rem; +- + if (cur == p->lims[cj]) + { + p->state = cj; + break; + } +- +- val = GetBe32(cur); ++ v = GetBe32a(cur); + p->bufs[cj] = cur + 4; +- +- p->ip += 4; +- val -= p->ip; ++ { ++ const UInt32 ip = p->ip + 4; ++ v -= ip; ++ p->ip = ip; ++ } + dest = p->dest; + rem = (SizeT)(p->destLim - dest); +- + if (rem < 4) + { +- p->temp[0] = (Byte)val; if (rem > 0) dest[0] = (Byte)val; val >>= 8; +- p->temp[1] = (Byte)val; if (rem > 1) dest[1] = (Byte)val; val >>= 8; +- p->temp[2] = (Byte)val; if (rem > 2) dest[2] = (Byte)val; val >>= 8; +- p->temp[3] = (Byte)val; ++ if ((unsigned)rem > 0) { dest[0] = (Byte)v; v >>= 8; ++ if ((unsigned)rem > 1) { dest[1] = (Byte)v; v >>= 8; ++ if ((unsigned)rem > 2) { dest[2] = (Byte)v; v >>= 8; }}} ++ p->temp = v; + p->dest = dest + rem; + p->state = BCJ2_DEC_STATE_ORIG_0 + (unsigned)rem; + break; + } +- +- SetUi32(dest, val); +- p->temp[3] = (Byte)(val >> 24); ++ SetUi32(dest, v) ++ v >>= 24; + p->dest = dest + 4; + } + } +@@ -252,6 +278,13 @@ SRes Bcj2Dec_Decode(CBcj2Dec *p) + p->range <<= 8; + p->code = (p->code << 8) | *(p->bufs[BCJ2_STREAM_RC])++; + } +- + return SZ_OK; + } ++ ++#undef NUM_ITERS ++#undef ONE_ITER ++#undef NUM_SHIFT_BITS ++#undef kTopValue ++#undef kNumBitModelTotalBits ++#undef kBitModelTotal ++#undef kNumMoveBits +diff --git a/src/lzma/Bcj2.h b/src/lzma/Bcj2.h +index 8824080ac..4575545b6 100644 +--- a/src/lzma/Bcj2.h ++++ b/src/lzma/Bcj2.h +@@ -1,8 +1,8 @@ +-/* Bcj2.h -- BCJ2 Converter for x86 code +-2014-11-10 : Igor Pavlov : Public domain */ ++/* Bcj2.h -- BCJ2 converter for x86 code (Branch CALL/JUMP variant2) ++2023-03-02 : Igor Pavlov : Public domain */ + +-#ifndef __BCJ2_H +-#define __BCJ2_H ++#ifndef ZIP7_INC_BCJ2_H ++#define ZIP7_INC_BCJ2_H + + #include "7zTypes.h" + +@@ -26,37 +26,68 @@ enum + BCJ2_DEC_STATE_ORIG_3, + + BCJ2_DEC_STATE_ORIG, +- BCJ2_DEC_STATE_OK ++ BCJ2_DEC_STATE_ERROR /* after detected data error */ + }; + + enum + { + BCJ2_ENC_STATE_ORIG = BCJ2_NUM_STREAMS, +- BCJ2_ENC_STATE_OK ++ BCJ2_ENC_STATE_FINISHED /* it's state after fully encoded stream */ + }; + + +-#define BCJ2_IS_32BIT_STREAM(s) ((s) == BCJ2_STREAM_CALL || (s) == BCJ2_STREAM_JUMP) ++/* #define BCJ2_IS_32BIT_STREAM(s) ((s) == BCJ2_STREAM_CALL || (s) == BCJ2_STREAM_JUMP) */ ++#define BCJ2_IS_32BIT_STREAM(s) ((unsigned)((unsigned)(s) - (unsigned)BCJ2_STREAM_CALL) < 2) + + /* + CBcj2Dec / CBcj2Enc + bufs sizes: + BUF_SIZE(n) = lims[n] - bufs[n] +-bufs sizes for BCJ2_STREAM_CALL and BCJ2_STREAM_JUMP must be mutliply of 4: ++bufs sizes for BCJ2_STREAM_CALL and BCJ2_STREAM_JUMP must be multiply of 4: + (BUF_SIZE(BCJ2_STREAM_CALL) & 3) == 0 + (BUF_SIZE(BCJ2_STREAM_JUMP) & 3) == 0 + */ + ++// typedef UInt32 CBcj2Prob; ++typedef UInt16 CBcj2Prob; ++ ++/* ++BCJ2 encoder / decoder internal requirements: ++ - If last bytes of stream contain marker (e8/e8/0f8x), then ++ there is also encoded symbol (0 : no conversion) in RC stream. ++ - One case of overlapped instructions is supported, ++ if last byte of converted instruction is (0f) and next byte is (8x): ++ marker [xx xx xx 0f] 8x ++ then the pair (0f 8x) is treated as marker. ++*/ ++ ++/* ---------- BCJ2 Decoder ---------- */ ++ + /* + CBcj2Dec: +-dest is allowed to overlap with bufs[BCJ2_STREAM_MAIN], with the following conditions: ++(dest) is allowed to overlap with bufs[BCJ2_STREAM_MAIN], with the following conditions: + bufs[BCJ2_STREAM_MAIN] >= dest && +- bufs[BCJ2_STREAM_MAIN] - dest >= tempReserv + ++ bufs[BCJ2_STREAM_MAIN] - dest >= + BUF_SIZE(BCJ2_STREAM_CALL) + + BUF_SIZE(BCJ2_STREAM_JUMP) +- tempReserv = 0 : for first call of Bcj2Dec_Decode +- tempReserv = 4 : for any other calls of Bcj2Dec_Decode +- overlap with offset = 1 is not allowed ++ reserve = bufs[BCJ2_STREAM_MAIN] - dest - ++ ( BUF_SIZE(BCJ2_STREAM_CALL) + ++ BUF_SIZE(BCJ2_STREAM_JUMP) ) ++ and additional conditions: ++ if (it's first call of Bcj2Dec_Decode() after Bcj2Dec_Init()) ++ { ++ (reserve != 1) : if (ver < v23.00) ++ } ++ else // if there are more than one calls of Bcj2Dec_Decode() after Bcj2Dec_Init()) ++ { ++ (reserve >= 6) : if (ver < v23.00) ++ (reserve >= 4) : if (ver >= v23.00) ++ We need that (reserve) because after first call of Bcj2Dec_Decode(), ++ CBcj2Dec::temp can contain up to 4 bytes for writing to (dest). ++ } ++ (reserve == 0) is allowed, if we decode full stream via single call of Bcj2Dec_Decode(). ++ (reserve == 0) also is allowed in case of multi-call, if we use fixed buffers, ++ and (reserve) is calculated from full (final) sizes of all streams before first call. + */ + + typedef struct +@@ -68,21 +99,65 @@ typedef struct + + unsigned state; /* BCJ2_STREAM_MAIN has more priority than BCJ2_STATE_ORIG */ + +- UInt32 ip; +- Byte temp[4]; ++ UInt32 ip; /* property of starting base for decoding */ ++ UInt32 temp; /* Byte temp[4]; */ + UInt32 range; + UInt32 code; +- UInt16 probs[2 + 256]; ++ CBcj2Prob probs[2 + 256]; + } CBcj2Dec; + ++ ++/* Note: ++ Bcj2Dec_Init() sets (CBcj2Dec::ip = 0) ++ if (ip != 0) property is required, the caller must set CBcj2Dec::ip after Bcj2Dec_Init() ++*/ + void Bcj2Dec_Init(CBcj2Dec *p); + +-/* Returns: SZ_OK or SZ_ERROR_DATA */ ++ ++/* Bcj2Dec_Decode(): ++ returns: ++ SZ_OK ++ SZ_ERROR_DATA : if data in 5 starting bytes of BCJ2_STREAM_RC stream are not correct ++*/ + SRes Bcj2Dec_Decode(CBcj2Dec *p); + +-#define Bcj2Dec_IsFinished(_p_) ((_p_)->code == 0) ++/* To check that decoding was finished you can compare ++ sizes of processed streams with sizes known from another sources. ++ You must do at least one mandatory check from the two following options: ++ - the check for size of processed output (ORIG) stream. ++ - the check for size of processed input (MAIN) stream. ++ additional optional checks: ++ - the checks for processed sizes of all input streams (MAIN, CALL, JUMP, RC) ++ - the checks Bcj2Dec_IsMaybeFinished*() ++ also before actual decoding you can check that the ++ following condition is met for stream sizes: ++ ( size(ORIG) == size(MAIN) + size(CALL) + size(JUMP) ) ++*/ + ++/* (state == BCJ2_STREAM_MAIN) means that decoder is ready for ++ additional input data in BCJ2_STREAM_MAIN stream. ++ Note that (state == BCJ2_STREAM_MAIN) is allowed for non-finished decoding. ++*/ ++#define Bcj2Dec_IsMaybeFinished_state_MAIN(_p_) ((_p_)->state == BCJ2_STREAM_MAIN) + ++/* if the stream decoding was finished correctly, then range decoder ++ part of CBcj2Dec also was finished, and then (CBcj2Dec::code == 0). ++ Note that (CBcj2Dec::code == 0) is allowed for non-finished decoding. ++*/ ++#define Bcj2Dec_IsMaybeFinished_code(_p_) ((_p_)->code == 0) ++ ++/* use Bcj2Dec_IsMaybeFinished() only as additional check ++ after at least one mandatory check from the two following options: ++ - the check for size of processed output (ORIG) stream. ++ - the check for size of processed input (MAIN) stream. ++*/ ++#define Bcj2Dec_IsMaybeFinished(_p_) ( \ ++ Bcj2Dec_IsMaybeFinished_state_MAIN(_p_) && \ ++ Bcj2Dec_IsMaybeFinished_code(_p_)) ++ ++ ++ ++/* ---------- BCJ2 Encoder ---------- */ + + typedef enum + { +@@ -91,6 +166,91 @@ typedef enum + BCJ2_ENC_FINISH_MODE_END_STREAM + } EBcj2Enc_FinishMode; + ++/* ++ BCJ2_ENC_FINISH_MODE_CONTINUE: ++ process non finished encoding. ++ It notifies the encoder that additional further calls ++ can provide more input data (src) than provided by current call. ++ In that case the CBcj2Enc encoder still can move (src) pointer ++ up to (srcLim), but CBcj2Enc encoder can store some of the last ++ processed bytes (up to 4 bytes) from src to internal CBcj2Enc::temp[] buffer. ++ at return: ++ (CBcj2Enc::src will point to position that includes ++ processed data and data copied to (temp[]) buffer) ++ That data from (temp[]) buffer will be used in further calls. ++ ++ BCJ2_ENC_FINISH_MODE_END_BLOCK: ++ finish encoding of current block (ended at srcLim) without RC flushing. ++ at return: if (CBcj2Enc::state == BCJ2_ENC_STATE_ORIG) && ++ CBcj2Enc::src == CBcj2Enc::srcLim) ++ : it shows that block encoding was finished. And the encoder is ++ ready for new (src) data or for stream finish operation. ++ finished block means ++ { ++ CBcj2Enc has completed block encoding up to (srcLim). ++ (1 + 4 bytes) or (2 + 4 bytes) CALL/JUMP cortages will ++ not cross block boundary at (srcLim). ++ temporary CBcj2Enc buffer for (ORIG) src data is empty. ++ 3 output uncompressed streams (MAIN, CALL, JUMP) were flushed. ++ RC stream was not flushed. And RC stream will cross block boundary. ++ } ++ Note: some possible implementation of BCJ2 encoder could ++ write branch marker (e8/e8/0f8x) in one call of Bcj2Enc_Encode(), ++ and it could calculate symbol for RC in another call of Bcj2Enc_Encode(). ++ BCJ2 encoder uses ip/fileIp/fileSize/relatLimit values to calculate RC symbol. ++ And these CBcj2Enc variables can have different values in different Bcj2Enc_Encode() calls. ++ So caller must finish each block with BCJ2_ENC_FINISH_MODE_END_BLOCK ++ to ensure that RC symbol is calculated and written in proper block. ++ ++ BCJ2_ENC_FINISH_MODE_END_STREAM ++ finish encoding of stream (ended at srcLim) fully including RC flushing. ++ at return: if (CBcj2Enc::state == BCJ2_ENC_STATE_FINISHED) ++ : it shows that stream encoding was finished fully, ++ and all output streams were flushed fully. ++ also Bcj2Enc_IsFinished() can be called. ++*/ ++ ++ ++/* ++ 32-bit relative offset in JUMP/CALL commands is ++ - (mod 4 GiB) for 32-bit x86 code ++ - signed Int32 for 64-bit x86-64 code ++ BCJ2 encoder also does internal relative to absolute address conversions. ++ And there are 2 possible ways to do it: ++ before v23: we used 32-bit variables and (mod 4 GiB) conversion ++ since v23: we use 64-bit variables and (signed Int32 offset) conversion. ++ The absolute address condition for conversion in v23: ++ ((UInt64)((Int64)ip64 - (Int64)fileIp64 + 5 + (Int32)offset) < (UInt64)fileSize64) ++ note that if (fileSize64 > 2 GiB). there is difference between ++ old (mod 4 GiB) way (v22) and new (signed Int32 offset) way (v23). ++ And new (v23) way is more suitable to encode 64-bit x86-64 code for (fileSize64 > 2 GiB) cases. ++*/ ++ ++/* ++// for old (v22) way for conversion: ++typedef UInt32 CBcj2Enc_ip_unsigned; ++typedef Int32 CBcj2Enc_ip_signed; ++#define BCJ2_ENC_FileSize_MAX ((UInt32)1 << 31) ++*/ ++typedef UInt64 CBcj2Enc_ip_unsigned; ++typedef Int64 CBcj2Enc_ip_signed; ++ ++/* maximum size of file that can be used for conversion condition */ ++#define BCJ2_ENC_FileSize_MAX ((CBcj2Enc_ip_unsigned)0 - 2) ++ ++/* default value of fileSize64_minus1 variable that means ++ that absolute address limitation will not be used */ ++#define BCJ2_ENC_FileSizeField_UNLIMITED ((CBcj2Enc_ip_unsigned)0 - 1) ++ ++/* calculate value that later can be set to CBcj2Enc::fileSize64_minus1 */ ++#define BCJ2_ENC_GET_FileSizeField_VAL_FROM_FileSize(fileSize) \ ++ ((CBcj2Enc_ip_unsigned)(fileSize) - 1) ++ ++/* set CBcj2Enc::fileSize64_minus1 variable from size of file */ ++#define Bcj2Enc_SET_FileSize(p, fileSize) \ ++ (p)->fileSize64_minus1 = BCJ2_ENC_GET_FileSizeField_VAL_FROM_FileSize(fileSize); ++ ++ + typedef struct + { + Byte *bufs[BCJ2_NUM_STREAMS]; +@@ -101,45 +261,71 @@ typedef struct + unsigned state; + EBcj2Enc_FinishMode finishMode; + +- Byte prevByte; ++ Byte context; ++ Byte flushRem; ++ Byte isFlushState; + + Byte cache; + UInt32 range; + UInt64 low; + UInt64 cacheSize; ++ ++ // UInt32 context; // for marker version, it can include marker flag. + +- UInt32 ip; +- +- /* 32-bit ralative offset in JUMP/CALL commands is +- - (mod 4 GB) in 32-bit mode +- - signed Int32 in 64-bit mode +- We use (mod 4 GB) check for fileSize. +- Use fileSize up to 2 GB, if you want to support 32-bit and 64-bit code conversion. */ +- UInt32 fileIp; +- UInt32 fileSize; /* (fileSize <= ((UInt32)1 << 31)), 0 means no_limit */ +- UInt32 relatLimit; /* (relatLimit <= ((UInt32)1 << 31)), 0 means desable_conversion */ ++ /* (ip64) and (fileIp64) correspond to virtual source stream position ++ that doesn't include data in temp[] */ ++ CBcj2Enc_ip_unsigned ip64; /* current (ip) position */ ++ CBcj2Enc_ip_unsigned fileIp64; /* start (ip) position of current file */ ++ CBcj2Enc_ip_unsigned fileSize64_minus1; /* size of current file (for conversion limitation) */ ++ UInt32 relatLimit; /* (relatLimit <= ((UInt32)1 << 31)) : 0 means disable_conversion */ ++ // UInt32 relatExcludeBits; + + UInt32 tempTarget; +- unsigned tempPos; +- Byte temp[4 * 2]; +- +- unsigned flushPos; +- +- UInt16 probs[2 + 256]; ++ unsigned tempPos; /* the number of bytes that were copied to temp[] buffer ++ (tempPos <= 4) outside of Bcj2Enc_Encode() */ ++ // Byte temp[4]; // for marker version ++ Byte temp[8]; ++ CBcj2Prob probs[2 + 256]; + } CBcj2Enc; + + void Bcj2Enc_Init(CBcj2Enc *p); +-void Bcj2Enc_Encode(CBcj2Enc *p); + +-#define Bcj2Enc_Get_InputData_Size(p) ((SizeT)((p)->srcLim - (p)->src) + (p)->tempPos) +-#define Bcj2Enc_IsFinished(p) ((p)->flushPos == 5) + ++/* ++Bcj2Enc_Encode(): at exit: ++ p->State < BCJ2_NUM_STREAMS : we need more buffer space for output stream ++ (bufs[p->State] == lims[p->State]) ++ p->State == BCJ2_ENC_STATE_ORIG : we need more data in input src stream ++ (src == srcLim) ++ p->State == BCJ2_ENC_STATE_FINISHED : after fully encoded stream ++*/ ++void Bcj2Enc_Encode(CBcj2Enc *p); + +-#define BCJ2_RELAT_LIMIT_NUM_BITS 26 +-#define BCJ2_RELAT_LIMIT ((UInt32)1 << BCJ2_RELAT_LIMIT_NUM_BITS) ++/* Bcj2Enc encoder can look ahead for up 4 bytes of source stream. ++ CBcj2Enc::tempPos : is the number of bytes that were copied from input stream to temp[] buffer. ++ (CBcj2Enc::src) after Bcj2Enc_Encode() is starting position after ++ fully processed data and after data copied to temp buffer. ++ So if the caller needs to get real number of fully processed input ++ bytes (without look ahead data in temp buffer), ++ the caller must subtruct (CBcj2Enc::tempPos) value from processed size ++ value that is calculated based on current (CBcj2Enc::src): ++ cur_processed_pos = Calc_Big_Processed_Pos(enc.src)) - ++ Bcj2Enc_Get_AvailInputSize_in_Temp(&enc); ++*/ ++/* get the size of input data that was stored in temp[] buffer: */ ++#define Bcj2Enc_Get_AvailInputSize_in_Temp(p) ((p)->tempPos) + +-/* limit for CBcj2Enc::fileSize variable */ +-#define BCJ2_FileSize_MAX ((UInt32)1 << 31) ++#define Bcj2Enc_IsFinished(p) ((p)->flushRem == 0) ++ ++/* Note : the decoder supports overlapping of marker (0f 80). ++ But we can eliminate such overlapping cases by setting ++ the limit for relative offset conversion as ++ CBcj2Enc::relatLimit <= (0x0f << 24) == (240 MiB) ++*/ ++/* default value for CBcj2Enc::relatLimit */ ++#define BCJ2_ENC_RELAT_LIMIT_DEFAULT ((UInt32)0x0f << 24) ++#define BCJ2_ENC_RELAT_LIMIT_MAX ((UInt32)1 << 31) ++// #define BCJ2_RELAT_EXCLUDE_NUM_BITS 5 + + EXTERN_C_END + +diff --git a/src/lzma/Bcj2Enc.c b/src/lzma/Bcj2Enc.c +index 666303b90..9654d1d81 100644 +--- a/src/lzma/Bcj2Enc.c ++++ b/src/lzma/Bcj2Enc.c +@@ -1,60 +1,62 @@ +-/* Bcj2Enc.c -- BCJ2 Encoder (Converter for x86 code) +-2021-02-09 : Igor Pavlov : Public domain */ ++/* Bcj2Enc.c -- BCJ2 Encoder converter for x86 code (Branch CALL/JUMP variant2) ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + + /* #define SHOW_STAT */ +- + #ifdef SHOW_STAT + #include +-#define PRF(x) x ++#define PRF2(s) printf("%s ip=%8x tempPos=%d src= %8x\n", s, (unsigned)p->ip64, p->tempPos, (unsigned)(p->srcLim - p->src)); + #else +-#define PRF(x) ++#define PRF2(s) + #endif + +-#include +- + #include "Bcj2.h" + #include "CpuArch.h" + +-#define CProb UInt16 +- + #define kTopValue ((UInt32)1 << 24) +-#define kNumModelBits 11 +-#define kBitModelTotal (1 << kNumModelBits) ++#define kNumBitModelTotalBits 11 ++#define kBitModelTotal (1 << kNumBitModelTotalBits) + #define kNumMoveBits 5 + + void Bcj2Enc_Init(CBcj2Enc *p) + { + unsigned i; +- +- p->state = BCJ2_ENC_STATE_OK; ++ p->state = BCJ2_ENC_STATE_ORIG; + p->finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE; +- +- p->prevByte = 0; +- ++ p->context = 0; ++ p->flushRem = 5; ++ p->isFlushState = 0; + p->cache = 0; +- p->range = 0xFFFFFFFF; ++ p->range = 0xffffffff; + p->low = 0; + p->cacheSize = 1; +- +- p->ip = 0; +- +- p->fileIp = 0; +- p->fileSize = 0; +- p->relatLimit = BCJ2_RELAT_LIMIT; +- ++ p->ip64 = 0; ++ p->fileIp64 = 0; ++ p->fileSize64_minus1 = BCJ2_ENC_FileSizeField_UNLIMITED; ++ p->relatLimit = BCJ2_ENC_RELAT_LIMIT_DEFAULT; ++ // p->relatExcludeBits = 0; + p->tempPos = 0; +- +- p->flushPos = 0; +- + for (i = 0; i < sizeof(p->probs) / sizeof(p->probs[0]); i++) + p->probs[i] = kBitModelTotal >> 1; + } + +-static BoolInt MY_FAST_CALL RangeEnc_ShiftLow(CBcj2Enc *p) ++// Z7_NO_INLINE ++Z7_FORCE_INLINE ++static BoolInt Bcj2_RangeEnc_ShiftLow(CBcj2Enc *p) + { +- if ((UInt32)p->low < (UInt32)0xFF000000 || (UInt32)(p->low >> 32) != 0) ++ const UInt32 low = (UInt32)p->low; ++ const unsigned high = (unsigned) ++ #if defined(Z7_MSC_VER_ORIGINAL) \ ++ && defined(MY_CPU_X86) \ ++ && defined(MY_CPU_LE) \ ++ && !defined(MY_CPU_64BIT) ++ // we try to rid of __aullshr() call in MSVS-x86 ++ (((const UInt32 *)&p->low)[1]); // [1] : for little-endian only ++ #else ++ (p->low >> 32); ++ #endif ++ if (low < (UInt32)0xff000000 || high != 0) + { + Byte *buf = p->bufs[BCJ2_STREAM_RC]; + do +@@ -65,247 +67,440 @@ static BoolInt MY_FAST_CALL RangeEnc_ShiftLow(CBcj2Enc *p) + p->bufs[BCJ2_STREAM_RC] = buf; + return True7z; + } +- *buf++ = (Byte)(p->cache + (Byte)(p->low >> 32)); +- p->cache = 0xFF; ++ *buf++ = (Byte)(p->cache + high); ++ p->cache = 0xff; + } + while (--p->cacheSize); + p->bufs[BCJ2_STREAM_RC] = buf; +- p->cache = (Byte)((UInt32)p->low >> 24); ++ p->cache = (Byte)(low >> 24); + } + p->cacheSize++; +- p->low = (UInt32)p->low << 8; ++ p->low = low << 8; + return False7z; + } + +-static void Bcj2Enc_Encode_2(CBcj2Enc *p) +-{ +- if (BCJ2_IS_32BIT_STREAM(p->state)) ++ ++/* ++We can use 2 alternative versions of code: ++1) non-marker version: ++ Byte CBcj2Enc::context ++ Byte temp[8]; ++ Last byte of marker (e8/e9/[0f]8x) can be written to temp[] buffer. ++ Encoder writes last byte of marker (e8/e9/[0f]8x) to dest, only in conjunction ++ with writing branch symbol to range coder in same Bcj2Enc_Encode_2() call. ++ ++2) marker version: ++ UInt32 CBcj2Enc::context ++ Byte CBcj2Enc::temp[4]; ++ MARKER_FLAG in CBcj2Enc::context shows that CBcj2Enc::context contains finded marker. ++ it's allowed that ++ one call of Bcj2Enc_Encode_2() writes last byte of marker (e8/e9/[0f]8x) to dest, ++ and another call of Bcj2Enc_Encode_2() does offset conversion. ++ So different values of (fileIp) and (fileSize) are possible ++ in these different Bcj2Enc_Encode_2() calls. ++ ++Also marker version requires additional if((v & MARKER_FLAG) == 0) check in main loop. ++So we use non-marker version. ++*/ ++ ++/* ++ Corner cases with overlap in multi-block. ++ before v23: there was one corner case, where converted instruction ++ could start in one sub-stream and finish in next sub-stream. ++ If multi-block (solid) encoding is used, ++ and BCJ2_ENC_FINISH_MODE_END_BLOCK is used for each sub-stream. ++ and (0f) is last byte of previous sub-stream ++ and (8x) is first byte of current sub-stream ++ then (0f 8x) pair is treated as marker by BCJ2 encoder and decoder. ++ BCJ2 encoder can converts 32-bit offset for that (0f 8x) cortage, ++ if that offset meets limit requirements. ++ If encoder allows 32-bit offset conversion for such overlap case, ++ then the data in 3 uncompressed BCJ2 streams for some sub-stream ++ can depend from data of previous sub-stream. ++ That corner case is not big problem, and it's rare case. ++ Since v23.00 we do additional check to prevent conversions in such overlap cases. ++*/ ++ ++/* ++ Bcj2Enc_Encode_2() output variables at exit: + { +- Byte *cur = p->bufs[p->state]; +- if (cur == p->lims[p->state]) +- return; +- SetBe32(cur, p->tempTarget); +- p->bufs[p->state] = cur + 4; ++ if (Bcj2Enc_Encode_2() exits with (p->state == BCJ2_ENC_STATE_ORIG)) ++ { ++ it means that encoder needs more input data. ++ if (p->srcLim == p->src) at exit, then ++ { ++ (p->finishMode != BCJ2_ENC_FINISH_MODE_END_STREAM) ++ all input data were read and processed, and we are ready for ++ new input data. ++ } ++ else ++ { ++ (p->srcLim != p->src) ++ (p->finishMode == BCJ2_ENC_FINISH_MODE_CONTINUE) ++ The encoder have found e8/e9/0f_8x marker, ++ and p->src points to last byte of that marker, ++ Bcj2Enc_Encode_2() needs more input data to get totally ++ 5 bytes (last byte of marker and 32-bit branch offset) ++ as continuous array starting from p->src. ++ (p->srcLim - p->src < 5) requirement is met after exit. ++ So non-processed resedue from p->src to p->srcLim is always less than 5 bytes. ++ } ++ } + } ++*/ + +- p->state = BCJ2_ENC_STATE_ORIG; +- +- for (;;) ++Z7_NO_INLINE ++static void Bcj2Enc_Encode_2(CBcj2Enc *p) ++{ ++ if (!p->isFlushState) + { +- if (p->range < kTopValue) ++ const Byte *src; ++ UInt32 v; + { +- if (RangeEnc_ShiftLow(p)) +- return; +- p->range <<= 8; ++ const unsigned state = p->state; ++ if (BCJ2_IS_32BIT_STREAM(state)) ++ { ++ Byte *cur = p->bufs[state]; ++ if (cur == p->lims[state]) ++ return; ++ SetBe32a(cur, p->tempTarget) ++ p->bufs[state] = cur + 4; ++ } + } ++ p->state = BCJ2_ENC_STATE_ORIG; // for main reason of exit ++ src = p->src; ++ v = p->context; ++ ++ // #define WRITE_CONTEXT p->context = v; // for marker version ++ #define WRITE_CONTEXT p->context = (Byte)v; ++ #define WRITE_CONTEXT_AND_SRC p->src = src; WRITE_CONTEXT + ++ for (;;) + { ++ // const Byte *src; ++ // UInt32 v; ++ CBcj2Enc_ip_unsigned ip; ++ if (p->range < kTopValue) ++ { ++ // to reduce register pressure and code size: we save and restore local variables. ++ WRITE_CONTEXT_AND_SRC ++ if (Bcj2_RangeEnc_ShiftLow(p)) ++ return; ++ p->range <<= 8; ++ src = p->src; ++ v = p->context; ++ } ++ // src = p->src; ++ // #define MARKER_FLAG ((UInt32)1 << 17) ++ // if ((v & MARKER_FLAG) == 0) // for marker version + { +- const Byte *src = p->src; + const Byte *srcLim; +- Byte *dest; +- SizeT num = (SizeT)(p->srcLim - src); +- +- if (p->finishMode == BCJ2_ENC_FINISH_MODE_CONTINUE) ++ Byte *dest = p->bufs[BCJ2_STREAM_MAIN]; + { +- if (num <= 4) +- return; +- num -= 4; ++ const SizeT remSrc = (SizeT)(p->srcLim - src); ++ SizeT rem = (SizeT)(p->lims[BCJ2_STREAM_MAIN] - dest); ++ if (rem >= remSrc) ++ rem = remSrc; ++ srcLim = src + rem; + } +- else if (num == 0) +- break; +- +- dest = p->bufs[BCJ2_STREAM_MAIN]; +- if (num > (SizeT)(p->lims[BCJ2_STREAM_MAIN] - dest)) ++ /* p->context contains context of previous byte: ++ bits [0 : 7] : src[-1], if (src) was changed in this call ++ bits [8 : 31] : are undefined for non-marker version ++ */ ++ // v = p->context; ++ #define NUM_SHIFT_BITS 24 ++ #define CONV_FLAG ((UInt32)1 << 16) ++ #define ONE_ITER { \ ++ b = src[0]; \ ++ *dest++ = (Byte)b; \ ++ v = (v << NUM_SHIFT_BITS) | b; \ ++ if (((b + (0x100 - 0xe8)) & 0xfe) == 0) break; \ ++ if (((v - (((UInt32)0x0f << (NUM_SHIFT_BITS)) + 0x80)) & \ ++ ((((UInt32)1 << (4 + NUM_SHIFT_BITS)) - 0x1) << 4)) == 0) break; \ ++ src++; if (src == srcLim) { break; } } ++ ++ if (src != srcLim) ++ for (;;) + { +- num = (SizeT)(p->lims[BCJ2_STREAM_MAIN] - dest); +- if (num == 0) +- { +- p->state = BCJ2_STREAM_MAIN; +- return; +- } ++ /* clang can generate ineffective code with setne instead of two jcc instructions. ++ we can use 2 iterations and external (unsigned b) to avoid that ineffective code genaration. */ ++ unsigned b; ++ ONE_ITER ++ ONE_ITER + } +- +- srcLim = src + num; ++ ++ ip = p->ip64 + (CBcj2Enc_ip_unsigned)(SizeT)(dest - p->bufs[BCJ2_STREAM_MAIN]); ++ p->bufs[BCJ2_STREAM_MAIN] = dest; ++ p->ip64 = ip; + +- if (p->prevByte == 0x0F && (src[0] & 0xF0) == 0x80) +- *dest = src[0]; +- else for (;;) ++ if (src == srcLim) + { +- Byte b = *src; +- *dest = b; +- if (b != 0x0F) ++ WRITE_CONTEXT_AND_SRC ++ if (src != p->srcLim) + { +- if ((b & 0xFE) == 0xE8) +- break; +- dest++; +- if (++src != srcLim) +- continue; +- break; ++ p->state = BCJ2_STREAM_MAIN; ++ return; + } +- dest++; +- if (++src == srcLim) +- break; +- if ((*src & 0xF0) != 0x80) +- continue; +- *dest = *src; ++ /* (p->src == p->srcLim) ++ (p->state == BCJ2_ENC_STATE_ORIG) */ ++ if (p->finishMode != BCJ2_ENC_FINISH_MODE_END_STREAM) ++ return; ++ /* (p->finishMode == BCJ2_ENC_FINISH_MODE_END_STREAM */ ++ // (p->flushRem == 5); ++ p->isFlushState = 1; + break; + } +- +- num = (SizeT)(src - p->src); +- +- if (src == srcLim) +- { +- p->prevByte = src[-1]; +- p->bufs[BCJ2_STREAM_MAIN] = dest; +- p->src = src; +- p->ip += (UInt32)num; +- continue; +- } +- ++ src++; ++ // p->src = src; ++ } ++ // ip = p->ip; // for marker version ++ /* marker was found */ ++ /* (v) contains marker that was found: ++ bits [NUM_SHIFT_BITS : NUM_SHIFT_BITS + 7] ++ : value of src[-2] : xx/xx/0f ++ bits [0 : 7] : value of src[-1] : e8/e9/8x ++ */ ++ { + { +- Byte context = (Byte)(num == 0 ? p->prevByte : src[-1]); +- BoolInt needConvert; +- +- p->bufs[BCJ2_STREAM_MAIN] = dest + 1; +- p->ip += (UInt32)num + 1; +- src++; +- +- needConvert = False7z; +- ++ #if NUM_SHIFT_BITS != 24 ++ v &= ~(UInt32)CONV_FLAG; ++ #endif ++ // UInt32 relat = 0; + if ((SizeT)(p->srcLim - src) >= 4) + { +- UInt32 relatVal = GetUi32(src); +- if ((p->fileSize == 0 || (UInt32)(p->ip + 4 + relatVal - p->fileIp) < p->fileSize) +- && ((relatVal + p->relatLimit) >> 1) < p->relatLimit) +- needConvert = True7z; ++ /* ++ if (relat != 0 || (Byte)v != 0xe8) ++ BoolInt isBigOffset = True7z; ++ */ ++ const UInt32 relat = GetUi32(src); ++ /* ++ #define EXCLUDE_FLAG ((UInt32)1 << 4) ++ #define NEED_CONVERT(rel) ((((rel) + EXCLUDE_FLAG) & (0 - EXCLUDE_FLAG * 2)) != 0) ++ if (p->relatExcludeBits != 0) ++ { ++ const UInt32 flag = (UInt32)1 << (p->relatExcludeBits - 1); ++ isBigOffset = (((relat + flag) & (0 - flag * 2)) != 0); ++ } ++ // isBigOffset = False7z; // for debug ++ */ ++ ip -= p->fileIp64; ++ // Use the following if check, if (ip) is 64-bit: ++ if (ip > (((v + 0x20) >> 5) & 1)) // 23.00 : we eliminate milti-block overlap for (Of 80) and (e8/e9) ++ if ((CBcj2Enc_ip_unsigned)((CBcj2Enc_ip_signed)ip + 4 + (Int32)relat) <= p->fileSize64_minus1) ++ if (((UInt32)(relat + p->relatLimit) >> 1) < p->relatLimit) ++ v |= CONV_FLAG; + } +- ++ else if (p->finishMode == BCJ2_ENC_FINISH_MODE_CONTINUE) + { +- UInt32 bound; +- unsigned ttt; +- Byte b = src[-1]; +- CProb *prob = p->probs + (unsigned)(b == 0xE8 ? 2 + (unsigned)context : (b == 0xE9 ? 1 : 0)); +- +- ttt = *prob; +- bound = (p->range >> kNumModelBits) * ttt; +- +- if (!needConvert) ++ // (p->srcLim - src < 4) ++ // /* ++ // for non-marker version ++ p->ip64--; // p->ip = ip - 1; ++ p->bufs[BCJ2_STREAM_MAIN]--; ++ src--; ++ v >>= NUM_SHIFT_BITS; ++ // (0 < p->srcLim - p->src <= 4) ++ // */ ++ // v |= MARKER_FLAG; // for marker version ++ /* (p->state == BCJ2_ENC_STATE_ORIG) */ ++ WRITE_CONTEXT_AND_SRC ++ return; ++ } ++ { ++ const unsigned c = ((v + 0x17) >> 6) & 1; ++ CBcj2Prob *prob = p->probs + (unsigned) ++ (((0 - c) & (Byte)(v >> NUM_SHIFT_BITS)) + c + ((v >> 5) & 1)); ++ /* ++ ((Byte)v == 0xe8 ? 2 + ((Byte)(v >> 8)) : ++ ((Byte)v < 0xe8 ? 0 : 1)); // ((v >> 5) & 1)); ++ */ ++ const unsigned ttt = *prob; ++ const UInt32 bound = (p->range >> kNumBitModelTotalBits) * ttt; ++ if ((v & CONV_FLAG) == 0) + { ++ // static int yyy = 0; yyy++; printf("\n!needConvert = %d\n", yyy); ++ // v = (Byte)v; // for marker version + p->range = bound; +- *prob = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); +- p->src = src; +- p->prevByte = b; ++ *prob = (CBcj2Prob)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); ++ // WRITE_CONTEXT_AND_SRC + continue; + } +- + p->low += bound; + p->range -= bound; +- *prob = (CProb)(ttt - (ttt >> kNumMoveBits)); +- ++ *prob = (CBcj2Prob)(ttt - (ttt >> kNumMoveBits)); ++ } ++ // p->context = src[3]; ++ { ++ // const unsigned cj = ((Byte)v == 0xe8 ? BCJ2_STREAM_CALL : BCJ2_STREAM_JUMP); ++ const unsigned cj = (((v + 0x57) >> 6) & 1) + BCJ2_STREAM_CALL; ++ ip = p->ip64; ++ v = GetUi32(src); // relat ++ ip += 4; ++ p->ip64 = ip; ++ src += 4; ++ // p->src = src; + { +- UInt32 relatVal = GetUi32(src); +- UInt32 absVal; +- p->ip += 4; +- absVal = p->ip + relatVal; +- p->prevByte = src[3]; +- src += 4; +- p->src = src; ++ const UInt32 absol = (UInt32)ip + v; ++ Byte *cur = p->bufs[cj]; ++ v >>= 24; ++ // WRITE_CONTEXT ++ if (cur == p->lims[cj]) + { +- unsigned cj = (b == 0xE8) ? BCJ2_STREAM_CALL : BCJ2_STREAM_JUMP; +- Byte *cur = p->bufs[cj]; +- if (cur == p->lims[cj]) +- { +- p->state = cj; +- p->tempTarget = absVal; +- return; +- } +- SetBe32(cur, absVal); +- p->bufs[cj] = cur + 4; ++ p->state = cj; ++ p->tempTarget = absol; ++ WRITE_CONTEXT_AND_SRC ++ return; + } ++ SetBe32a(cur, absol) ++ p->bufs[cj] = cur + 4; + } + } + } + } +- } ++ } // end of loop + } + +- if (p->finishMode != BCJ2_ENC_FINISH_MODE_END_STREAM) +- return; +- +- for (; p->flushPos < 5; p->flushPos++) +- if (RangeEnc_ShiftLow(p)) ++ for (; p->flushRem != 0; p->flushRem--) ++ if (Bcj2_RangeEnc_ShiftLow(p)) + return; +- p->state = BCJ2_ENC_STATE_OK; ++ p->state = BCJ2_ENC_STATE_FINISHED; + } + + ++/* ++BCJ2 encoder needs look ahead for up to 4 bytes in (src) buffer. ++So base function Bcj2Enc_Encode_2() ++ in BCJ2_ENC_FINISH_MODE_CONTINUE mode can return with ++ (p->state == BCJ2_ENC_STATE_ORIG && p->src < p->srcLim) ++Bcj2Enc_Encode() solves that look ahead problem by using p->temp[] buffer. ++ so if (p->state == BCJ2_ENC_STATE_ORIG) after Bcj2Enc_Encode(), ++ then (p->src == p->srcLim). ++ And the caller's code is simpler with Bcj2Enc_Encode(). ++*/ ++ ++Z7_NO_INLINE + void Bcj2Enc_Encode(CBcj2Enc *p) + { +- PRF(printf("\n")); +- PRF(printf("---- ip = %8d tempPos = %8d src = %8d\n", p->ip, p->tempPos, p->srcLim - p->src)); +- ++ PRF2("\n----") + if (p->tempPos != 0) + { ++ /* extra: number of bytes that were copied from (src) to (temp) buffer in this call */ + unsigned extra = 0; +- ++ /* We will touch only minimal required number of bytes in input (src) stream. ++ So we will add input bytes from (src) stream to temp[] with step of 1 byte. ++ We don't add new bytes to temp[] before Bcj2Enc_Encode_2() call ++ in first loop iteration because ++ - previous call of Bcj2Enc_Encode() could use another (finishMode), ++ - previous call could finish with (p->state != BCJ2_ENC_STATE_ORIG). ++ the case with full temp[] buffer (p->tempPos == 4) is possible here. ++ */ + for (;;) + { ++ // (0 < p->tempPos <= 5) // in non-marker version ++ /* p->src : the current src data position including extra bytes ++ that were copied to temp[] buffer in this call */ + const Byte *src = p->src; + const Byte *srcLim = p->srcLim; +- EBcj2Enc_FinishMode finishMode = p->finishMode; +- +- p->src = p->temp; +- p->srcLim = p->temp + p->tempPos; ++ const EBcj2Enc_FinishMode finishMode = p->finishMode; + if (src != srcLim) ++ { ++ /* if there are some src data after the data copied to temp[], ++ then we use MODE_CONTINUE for temp data */ + p->finishMode = BCJ2_ENC_FINISH_MODE_CONTINUE; +- +- PRF(printf(" ip = %8d tempPos = %8d src = %8d\n", p->ip, p->tempPos, p->srcLim - p->src)); +- ++ } ++ p->src = p->temp; ++ p->srcLim = p->temp + p->tempPos; ++ PRF2(" ") + Bcj2Enc_Encode_2(p); +- + { +- unsigned num = (unsigned)(p->src - p->temp); +- unsigned tempPos = p->tempPos - num; ++ const unsigned num = (unsigned)(p->src - p->temp); ++ const unsigned tempPos = p->tempPos - num; + unsigned i; + p->tempPos = tempPos; + for (i = 0; i < tempPos; i++) +- p->temp[i] = p->temp[(size_t)i + num]; +- ++ p->temp[i] = p->temp[(SizeT)i + num]; ++ // tempPos : number of bytes in temp buffer + p->src = src; + p->srcLim = srcLim; + p->finishMode = finishMode; +- +- if (p->state != BCJ2_ENC_STATE_ORIG || src == srcLim) ++ if (p->state != BCJ2_ENC_STATE_ORIG) ++ { ++ // (p->tempPos <= 4) // in non-marker version ++ /* if (the reason of exit from Bcj2Enc_Encode_2() ++ is not BCJ2_ENC_STATE_ORIG), ++ then we exit from Bcj2Enc_Encode() with same reason */ ++ // optional code begin : we rollback (src) and tempPos, if it's possible: ++ if (extra >= tempPos) ++ extra = tempPos; ++ p->src = src - extra; ++ p->tempPos = tempPos - extra; ++ // optional code end : rollback of (src) and tempPos + return; +- ++ } ++ /* (p->tempPos <= 4) ++ (p->state == BCJ2_ENC_STATE_ORIG) ++ so encoder needs more data than in temp[] */ ++ if (src == srcLim) ++ return; // src buffer has no more input data. ++ /* (src != srcLim) ++ so we can provide more input data from src for Bcj2Enc_Encode_2() */ + if (extra >= tempPos) + { +- p->src = src - tempPos; ++ /* (extra >= tempPos) means that temp buffer contains ++ only data from src buffer of this call. ++ So now we can encode without temp buffer */ ++ p->src = src - tempPos; // rollback (src) + p->tempPos = 0; + break; + } +- +- p->temp[tempPos] = src[0]; ++ // we append one additional extra byte from (src) to temp[] buffer: ++ p->temp[tempPos] = *src; + p->tempPos = tempPos + 1; ++ // (0 < p->tempPos <= 5) // in non-marker version + p->src = src + 1; + extra++; + } + } + } + +- PRF(printf("++++ ip = %8d tempPos = %8d src = %8d\n", p->ip, p->tempPos, p->srcLim - p->src)); +- ++ PRF2("++++") ++ // (p->tempPos == 0) + Bcj2Enc_Encode_2(p); ++ PRF2("====") + + if (p->state == BCJ2_ENC_STATE_ORIG) + { + const Byte *src = p->src; +- unsigned rem = (unsigned)(p->srcLim - src); +- unsigned i; +- for (i = 0; i < rem; i++) +- p->temp[i] = src[i]; +- p->tempPos = rem; +- p->src = src + rem; ++ const Byte *srcLim = p->srcLim; ++ const unsigned rem = (unsigned)(srcLim - src); ++ /* (rem <= 4) here. ++ if (p->src != p->srcLim), then ++ - we copy non-processed bytes from (p->src) to temp[] buffer, ++ - we set p->src equal to p->srcLim. ++ */ ++ if (rem) ++ { ++ unsigned i = 0; ++ p->src = srcLim; ++ p->tempPos = rem; ++ // (0 < p->tempPos <= 4) ++ do ++ p->temp[i] = src[i]; ++ while (++i != rem); ++ } ++ // (p->tempPos <= 4) ++ // (p->src == p->srcLim) + } + } ++ ++#undef PRF2 ++#undef CONV_FLAG ++#undef MARKER_FLAG ++#undef WRITE_CONTEXT ++#undef WRITE_CONTEXT_AND_SRC ++#undef ONE_ITER ++#undef NUM_SHIFT_BITS ++#undef kTopValue ++#undef kNumBitModelTotalBits ++#undef kBitModelTotal ++#undef kNumMoveBits +diff --git a/src/lzma/Bra.c b/src/lzma/Bra.c +index 3b854d9ca..22e0e478e 100644 +--- a/src/lzma/Bra.c ++++ b/src/lzma/Bra.c +@@ -1,230 +1,420 @@ +-/* Bra.c -- Converters for RISC code +-2021-02-09 : Igor Pavlov : Public domain */ ++/* Bra.c -- Branch converters for RISC code ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +-#include "CpuArch.h" + #include "Bra.h" ++#include "CpuArch.h" ++#include "RotateDefs.h" ++ ++#if defined(MY_CPU_SIZEOF_POINTER) \ ++ && ( MY_CPU_SIZEOF_POINTER == 4 \ ++ || MY_CPU_SIZEOF_POINTER == 8) ++ #define BR_CONV_USE_OPT_PC_PTR ++#endif ++ ++#ifdef BR_CONV_USE_OPT_PC_PTR ++#define BR_PC_INIT pc -= (UInt32)(SizeT)p; ++#define BR_PC_GET (pc + (UInt32)(SizeT)p) ++#else ++#define BR_PC_INIT pc += (UInt32)size; ++#define BR_PC_GET (pc - (UInt32)(SizeT)(lim - p)) ++// #define BR_PC_INIT ++// #define BR_PC_GET (pc + (UInt32)(SizeT)(p - data)) ++#endif ++ ++#define BR_CONVERT_VAL(v, c) if (encoding) v += c; else v -= c; ++// #define BR_CONVERT_VAL(v, c) if (!encoding) c = (UInt32)0 - c; v += c; ++ ++#define Z7_BRANCH_CONV(name) z7_BranchConv_ ## name ++ ++#define Z7_BRANCH_FUNC_MAIN(name) \ ++static \ ++Z7_FORCE_INLINE \ ++Z7_ATTRIB_NO_VECTOR \ ++Byte *Z7_BRANCH_CONV(name)(Byte *p, SizeT size, UInt32 pc, int encoding) + +-SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) ++#define Z7_BRANCH_FUNC_IMP(name, m, encoding) \ ++Z7_NO_INLINE \ ++Z7_ATTRIB_NO_VECTOR \ ++Byte *m(name)(Byte *data, SizeT size, UInt32 pc) \ ++ { return Z7_BRANCH_CONV(name)(data, size, pc, encoding); } \ ++ ++#ifdef Z7_EXTRACT_ONLY ++#define Z7_BRANCH_FUNCS_IMP(name) \ ++ Z7_BRANCH_FUNC_IMP(name, Z7_BRANCH_CONV_DEC, 0) ++#else ++#define Z7_BRANCH_FUNCS_IMP(name) \ ++ Z7_BRANCH_FUNC_IMP(name, Z7_BRANCH_CONV_DEC, 0) \ ++ Z7_BRANCH_FUNC_IMP(name, Z7_BRANCH_CONV_ENC, 1) ++#endif ++ ++#if defined(__clang__) ++#define BR_EXTERNAL_FOR ++#define BR_NEXT_ITERATION continue; ++#else ++#define BR_EXTERNAL_FOR for (;;) ++#define BR_NEXT_ITERATION break; ++#endif ++ ++#if defined(__clang__) && (__clang_major__ >= 8) \ ++ || defined(__GNUC__) && (__GNUC__ >= 1000) \ ++ // GCC is not good for __builtin_expect() here ++ /* || defined(_MSC_VER) && (_MSC_VER >= 1920) */ ++ // #define Z7_unlikely [[unlikely]] ++ // #define Z7_LIKELY(x) (__builtin_expect((x), 1)) ++ #define Z7_UNLIKELY(x) (__builtin_expect((x), 0)) ++ // #define Z7_likely [[likely]] ++#else ++ // #define Z7_LIKELY(x) (x) ++ #define Z7_UNLIKELY(x) (x) ++ // #define Z7_likely ++#endif ++ ++ ++Z7_BRANCH_FUNC_MAIN(ARM64) + { +- Byte *p; ++ // Byte *p = data; + const Byte *lim; +- size &= ~(size_t)3; +- ip += 4; +- p = data; +- lim = data + size; ++ const UInt32 flag = (UInt32)1 << (24 - 4); ++ const UInt32 mask = ((UInt32)1 << 24) - (flag << 1); ++ size &= ~(SizeT)3; ++ // if (size == 0) return p; ++ lim = p + size; ++ BR_PC_INIT ++ pc -= 4; // because (p) will point to next instruction ++ ++ BR_EXTERNAL_FOR ++ { ++ // Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE ++ for (;;) ++ { ++ UInt32 v; ++ if Z7_UNLIKELY(p == lim) ++ return p; ++ v = GetUi32a(p); ++ p += 4; ++ if Z7_UNLIKELY(((v - 0x94000000) & 0xfc000000) == 0) ++ { ++ UInt32 c = BR_PC_GET >> 2; ++ BR_CONVERT_VAL(v, c) ++ v &= 0x03ffffff; ++ v |= 0x94000000; ++ SetUi32a(p - 4, v) ++ BR_NEXT_ITERATION ++ } ++ // v = rotlFixed(v, 8); v += (flag << 8) - 0x90; if Z7_UNLIKELY((v & ((mask << 8) + 0x9f)) == 0) ++ v -= 0x90000000; if Z7_UNLIKELY((v & 0x9f000000) == 0) ++ { ++ UInt32 z, c; ++ // v = rotrFixed(v, 8); ++ v += flag; if Z7_UNLIKELY(v & mask) continue; ++ z = (v & 0xffffffe0) | (v >> 26); ++ c = (BR_PC_GET >> (12 - 3)) & ~(UInt32)7; ++ BR_CONVERT_VAL(z, c) ++ v &= 0x1f; ++ v |= 0x90000000; ++ v |= z << 26; ++ v |= 0x00ffffe0 & ((z & (((flag << 1) - 1))) - flag); ++ SetUi32a(p - 4, v) ++ } ++ } ++ } ++} ++Z7_BRANCH_FUNCS_IMP(ARM64) + +- if (encoding) + ++Z7_BRANCH_FUNC_MAIN(ARM) ++{ ++ // Byte *p = data; ++ const Byte *lim; ++ size &= ~(SizeT)3; ++ lim = p + size; ++ BR_PC_INIT ++ /* in ARM: branch offset is relative to the +2 instructions from current instruction. ++ (p) will point to next instruction */ ++ pc += 8 - 4; ++ + for (;;) + { + for (;;) + { +- if (p >= lim) +- return (SizeT)(p - data); +- p += 4; +- if (p[-1] == 0xEB) +- break; ++ if Z7_UNLIKELY(p >= lim) { return p; } p += 4; if Z7_UNLIKELY(p[-1] == 0xeb) break; ++ if Z7_UNLIKELY(p >= lim) { return p; } p += 4; if Z7_UNLIKELY(p[-1] == 0xeb) break; + } + { +- UInt32 v = GetUi32(p - 4); +- v <<= 2; +- v += ip + (UInt32)(p - data); +- v >>= 2; +- v &= 0x00FFFFFF; +- v |= 0xEB000000; +- SetUi32(p - 4, v); ++ UInt32 v = GetUi32a(p - 4); ++ UInt32 c = BR_PC_GET >> 2; ++ BR_CONVERT_VAL(v, c) ++ v &= 0x00ffffff; ++ v |= 0xeb000000; ++ SetUi32a(p - 4, v) + } + } ++} ++Z7_BRANCH_FUNCS_IMP(ARM) ++ + ++Z7_BRANCH_FUNC_MAIN(PPC) ++{ ++ // Byte *p = data; ++ const Byte *lim; ++ size &= ~(SizeT)3; ++ lim = p + size; ++ BR_PC_INIT ++ pc -= 4; // because (p) will point to next instruction ++ + for (;;) + { ++ UInt32 v; + for (;;) + { +- if (p >= lim) +- return (SizeT)(p - data); ++ if Z7_UNLIKELY(p == lim) ++ return p; ++ // v = GetBe32a(p); ++ v = *(UInt32 *)(void *)p; + p += 4; +- if (p[-1] == 0xEB) +- break; ++ // if ((v & 0xfc000003) == 0x48000001) break; ++ // if ((p[-4] & 0xFC) == 0x48 && (p[-1] & 3) == 1) break; ++ if Z7_UNLIKELY( ++ ((v - Z7_CONV_BE_TO_NATIVE_CONST32(0x48000001)) ++ & Z7_CONV_BE_TO_NATIVE_CONST32(0xfc000003)) == 0) break; + } + { +- UInt32 v = GetUi32(p - 4); +- v <<= 2; +- v -= ip + (UInt32)(p - data); +- v >>= 2; +- v &= 0x00FFFFFF; +- v |= 0xEB000000; +- SetUi32(p - 4, v); ++ v = Z7_CONV_NATIVE_TO_BE_32(v); ++ { ++ UInt32 c = BR_PC_GET; ++ BR_CONVERT_VAL(v, c) ++ } ++ v &= 0x03ffffff; ++ v |= 0x48000000; ++ SetBe32a(p - 4, v) + } + } + } ++Z7_BRANCH_FUNCS_IMP(PPC) + + +-SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) ++#ifdef Z7_CPU_FAST_ROTATE_SUPPORTED ++#define BR_SPARC_USE_ROTATE ++#endif ++ ++Z7_BRANCH_FUNC_MAIN(SPARC) + { +- Byte *p; ++ // Byte *p = data; + const Byte *lim; +- size &= ~(size_t)1; +- p = data; +- lim = data + size - 4; +- +- if (encoding) +- ++ const UInt32 flag = (UInt32)1 << 22; ++ size &= ~(SizeT)3; ++ lim = p + size; ++ BR_PC_INIT ++ pc -= 4; // because (p) will point to next instruction + for (;;) + { +- UInt32 b1; ++ UInt32 v; + for (;;) + { +- UInt32 b3; +- if (p > lim) +- return (SizeT)(p - data); +- b1 = p[1]; +- b3 = p[3]; +- p += 2; +- b1 ^= 8; +- if ((b3 & b1) >= 0xF8) ++ if Z7_UNLIKELY(p == lim) ++ return p; ++ /* // the code without GetBe32a(): ++ { const UInt32 v = GetUi16a(p) & 0xc0ff; p += 4; if (v == 0x40 || v == 0xc07f) break; } ++ */ ++ v = GetBe32a(p); ++ p += 4; ++ #ifdef BR_SPARC_USE_ROTATE ++ v = rotlFixed(v, 2); ++ v += (flag << 2) - 1; ++ if Z7_UNLIKELY((v & (3 - (flag << 3))) == 0) ++ #else ++ v += (UInt32)5 << 29; ++ v ^= (UInt32)7 << 29; ++ v += flag; ++ if Z7_UNLIKELY((v & (0 - (flag << 1))) == 0) ++ #endif + break; + } + { +- UInt32 v = +- ((UInt32)b1 << 19) +- + (((UInt32)p[1] & 0x7) << 8) +- + (((UInt32)p[-2] << 11)) +- + (p[0]); +- +- p += 2; ++ // UInt32 v = GetBe32a(p - 4); ++ #ifndef BR_SPARC_USE_ROTATE ++ v <<= 2; ++ #endif + { +- UInt32 cur = (ip + (UInt32)(p - data)) >> 1; +- v += cur; ++ UInt32 c = BR_PC_GET; ++ BR_CONVERT_VAL(v, c) + } +- +- p[-4] = (Byte)(v >> 11); +- p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7)); +- p[-2] = (Byte)v; +- p[-1] = (Byte)(0xF8 | (v >> 8)); ++ v &= (flag << 3) - 1; ++ #ifdef BR_SPARC_USE_ROTATE ++ v -= (flag << 2) - 1; ++ v = rotrFixed(v, 2); ++ #else ++ v -= (flag << 2); ++ v >>= 2; ++ v |= (UInt32)1 << 30; ++ #endif ++ SetBe32a(p - 4, v) + } + } ++} ++Z7_BRANCH_FUNCS_IMP(SPARC) ++ ++ ++Z7_BRANCH_FUNC_MAIN(ARMT) ++{ ++ // Byte *p = data; ++ Byte *lim; ++ size &= ~(SizeT)1; ++ // if (size == 0) return p; ++ if (size <= 2) return p; ++ size -= 2; ++ lim = p + size; ++ BR_PC_INIT ++ /* in ARM: branch offset is relative to the +2 instructions from current instruction. ++ (p) will point to the +2 instructions from current instruction */ ++ // pc += 4 - 4; ++ // if (encoding) pc -= 0xf800 << 1; else pc += 0xf800 << 1; ++ // #define ARMT_TAIL_PROC { goto armt_tail; } ++ #define ARMT_TAIL_PROC { return p; } + +- for (;;) ++ do + { +- UInt32 b1; ++ /* in MSVC 32-bit x86 compilers: ++ UInt32 version : it loads value from memory with movzx ++ Byte version : it loads value to 8-bit register (AL/CL) ++ movzx version is slightly faster in some cpus ++ */ ++ unsigned b1; ++ // Byte / unsigned ++ b1 = p[1]; ++ // optimized version to reduce one (p >= lim) check: ++ // unsigned a1 = p[1]; b1 = p[3]; p += 2; if Z7_LIKELY((b1 & (a1 ^ 8)) < 0xf8) + for (;;) + { +- UInt32 b3; +- if (p > lim) +- return (SizeT)(p - data); +- b1 = p[1]; +- b3 = p[3]; +- p += 2; +- b1 ^= 8; +- if ((b3 & b1) >= 0xF8) +- break; ++ unsigned b3; // Byte / UInt32 ++ /* (Byte)(b3) normalization can use low byte computations in MSVC. ++ It gives smaller code, and no loss of speed in some compilers/cpus. ++ But new MSVC 32-bit x86 compilers use more slow load ++ from memory to low byte register in that case. ++ So we try to use full 32-bit computations for faster code. ++ */ ++ // if (p >= lim) { ARMT_TAIL_PROC } b3 = b1 + 8; b1 = p[3]; p += 2; if ((b3 & b1) >= 0xf8) break; ++ if Z7_UNLIKELY(p >= lim) { ARMT_TAIL_PROC } b3 = p[3]; p += 2; if Z7_UNLIKELY((b3 & (b1 ^ 8)) >= 0xf8) break; ++ if Z7_UNLIKELY(p >= lim) { ARMT_TAIL_PROC } b1 = p[3]; p += 2; if Z7_UNLIKELY((b1 & (b3 ^ 8)) >= 0xf8) break; + } + { ++ /* we can adjust pc for (0xf800) to rid of (& 0x7FF) operation. ++ But gcc/clang for arm64 can use bfi instruction for full code here */ + UInt32 v = +- ((UInt32)b1 << 19) ++ ((UInt32)GetUi16a(p - 2) << 11) | ++ ((UInt32)GetUi16a(p) & 0x7FF); ++ /* ++ UInt32 v = ++ ((UInt32)p[1 - 2] << 19) + + (((UInt32)p[1] & 0x7) << 8) + + (((UInt32)p[-2] << 11)) + + (p[0]); +- ++ */ + p += 2; + { +- UInt32 cur = (ip + (UInt32)(p - data)) >> 1; +- v -= cur; ++ UInt32 c = BR_PC_GET >> 1; ++ BR_CONVERT_VAL(v, c) + } +- ++ SetUi16a(p - 4, (UInt16)(((v >> 11) & 0x7ff) | 0xf000)) ++ SetUi16a(p - 2, (UInt16)(v | 0xf800)) + /* +- SetUi16(p - 4, (UInt16)(((v >> 11) & 0x7FF) | 0xF000)); +- SetUi16(p - 2, (UInt16)(v | 0xF800)); +- */ +- + p[-4] = (Byte)(v >> 11); +- p[-3] = (Byte)(0xF0 | ((v >> 19) & 0x7)); ++ p[-3] = (Byte)(0xf0 | ((v >> 19) & 0x7)); + p[-2] = (Byte)v; +- p[-1] = (Byte)(0xF8 | (v >> 8)); ++ p[-1] = (Byte)(0xf8 | (v >> 8)); ++ */ + } + } ++ while (p < lim); ++ return p; ++ // armt_tail: ++ // if ((Byte)((lim[1] & 0xf8)) != 0xf0) { lim += 2; } return lim; ++ // return (Byte *)(lim + ((Byte)((lim[1] ^ 0xf0) & 0xf8) == 0 ? 0 : 2)); ++ // return (Byte *)(lim + (((lim[1] ^ ~0xfu) & ~7u) == 0 ? 0 : 2)); ++ // return (Byte *)(lim + 2 - (((((unsigned)lim[1] ^ 8) + 8) >> 7) & 2)); + } ++Z7_BRANCH_FUNCS_IMP(ARMT) + + +-SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) +-{ +- Byte *p; +- const Byte *lim; +- size &= ~(size_t)3; +- ip -= 4; +- p = data; +- lim = data + size; +- +- for (;;) +- { +- for (;;) +- { +- if (p >= lim) +- return (SizeT)(p - data); +- p += 4; +- /* if ((v & 0xFC000003) == 0x48000001) */ +- if ((p[-4] & 0xFC) == 0x48 && (p[-1] & 3) == 1) +- break; +- } +- { +- UInt32 v = GetBe32(p - 4); +- if (encoding) +- v += ip + (UInt32)(p - data); +- else +- v -= ip + (UInt32)(p - data); +- v &= 0x03FFFFFF; +- v |= 0x48000000; +- SetBe32(p - 4, v); +- } +- } +-} +- ++// #define BR_IA64_NO_INLINE + +-SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) ++Z7_BRANCH_FUNC_MAIN(IA64) + { +- Byte *p; ++ // Byte *p = data; + const Byte *lim; +- size &= ~(size_t)3; +- ip -= 4; +- p = data; +- lim = data + size; +- ++ size &= ~(SizeT)15; ++ lim = p + size; ++ pc -= 1 << 4; ++ pc >>= 4 - 1; ++ // pc -= 1 << 1; ++ + for (;;) + { ++ unsigned m; + for (;;) + { +- if (p >= lim) +- return (SizeT)(p - data); +- /* +- v = GetBe32(p); +- p += 4; +- m = v + ((UInt32)5 << 29); +- m ^= (UInt32)7 << 29; +- m += (UInt32)1 << 22; +- if ((m & ((UInt32)0x1FF << 23)) == 0) +- break; +- */ +- p += 4; +- if ((p[-4] == 0x40 && (p[-3] & 0xC0) == 0) || +- (p[-4] == 0x7F && (p[-3] >= 0xC0))) ++ if Z7_UNLIKELY(p == lim) ++ return p; ++ m = (unsigned)((UInt32)0x334b0000 >> (*p & 0x1e)); ++ p += 16; ++ pc += 1 << 1; ++ if (m &= 3) + break; + } + { +- UInt32 v = GetBe32(p - 4); +- v <<= 2; +- if (encoding) +- v += ip + (UInt32)(p - data); +- else +- v -= ip + (UInt32)(p - data); +- +- v &= 0x01FFFFFF; +- v -= (UInt32)1 << 24; +- v ^= 0xFF000000; +- v >>= 2; +- v |= 0x40000000; +- SetBe32(p - 4, v); ++ p += (ptrdiff_t)m * 5 - 20; // negative value is expected here. ++ do ++ { ++ const UInt32 t = ++ #if defined(MY_CPU_X86_OR_AMD64) ++ // we use 32-bit load here to reduce code size on x86: ++ GetUi32(p); ++ #else ++ GetUi16(p); ++ #endif ++ UInt32 z = GetUi32(p + 1) >> m; ++ p += 5; ++ if (((t >> m) & (0x70 << 1)) == 0 ++ && ((z - (0x5000000 << 1)) & (0xf000000 << 1)) == 0) ++ { ++ UInt32 v = (UInt32)((0x8fffff << 1) | 1) & z; ++ z ^= v; ++ #ifdef BR_IA64_NO_INLINE ++ v |= (v & ((UInt32)1 << (23 + 1))) >> 3; ++ { ++ UInt32 c = pc; ++ BR_CONVERT_VAL(v, c) ++ } ++ v &= (0x1fffff << 1) | 1; ++ #else ++ { ++ if (encoding) ++ { ++ // pc &= ~(0xc00000 << 1); // we just need to clear at least 2 bits ++ pc &= (0x1fffff << 1) | 1; ++ v += pc; ++ } ++ else ++ { ++ // pc |= 0xc00000 << 1; // we need to set at least 2 bits ++ pc |= ~(UInt32)((0x1fffff << 1) | 1); ++ v -= pc; ++ } ++ } ++ v &= ~(UInt32)(0x600000 << 1); ++ #endif ++ v += (0x700000 << 1); ++ v &= (0x8fffff << 1) | 1; ++ z |= v; ++ z <<= m; ++ SetUi32(p + 1 - 5, z) ++ } ++ m++; ++ } ++ while (m &= 3); // while (m < 4); + } + } + } ++Z7_BRANCH_FUNCS_IMP(IA64) +diff --git a/src/lzma/Bra.h b/src/lzma/Bra.h +index 855e37a6b..a4ee568e2 100644 +--- a/src/lzma/Bra.h ++++ b/src/lzma/Bra.h +@@ -1,64 +1,99 @@ + /* Bra.h -- Branch converters for executables +-2013-01-18 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __BRA_H +-#define __BRA_H ++#ifndef ZIP7_INC_BRA_H ++#define ZIP7_INC_BRA_H + + #include "7zTypes.h" + + EXTERN_C_BEGIN + ++#define Z7_BRANCH_CONV_DEC(name) z7_BranchConv_ ## name ## _Dec ++#define Z7_BRANCH_CONV_ENC(name) z7_BranchConv_ ## name ## _Enc ++#define Z7_BRANCH_CONV_ST_DEC(name) z7_BranchConvSt_ ## name ## _Dec ++#define Z7_BRANCH_CONV_ST_ENC(name) z7_BranchConvSt_ ## name ## _Enc ++ ++#define Z7_BRANCH_CONV_DECL(name) Byte * name(Byte *data, SizeT size, UInt32 pc) ++#define Z7_BRANCH_CONV_ST_DECL(name) Byte * name(Byte *data, SizeT size, UInt32 pc, UInt32 *state) ++ ++typedef Z7_BRANCH_CONV_DECL( (*z7_Func_BranchConv)); ++typedef Z7_BRANCH_CONV_ST_DECL((*z7_Func_BranchConvSt)); ++ ++#define Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL 0 ++Z7_BRANCH_CONV_ST_DECL(Z7_BRANCH_CONV_ST_DEC(X86)); ++Z7_BRANCH_CONV_ST_DECL(Z7_BRANCH_CONV_ST_ENC(X86)); ++ ++#define Z7_BRANCH_FUNCS_DECL(name) \ ++Z7_BRANCH_CONV_DECL(Z7_BRANCH_CONV_DEC(name)); \ ++Z7_BRANCH_CONV_DECL(Z7_BRANCH_CONV_ENC(name)); ++ ++Z7_BRANCH_FUNCS_DECL(ARM64) ++Z7_BRANCH_FUNCS_DECL(ARM) ++Z7_BRANCH_FUNCS_DECL(ARMT) ++Z7_BRANCH_FUNCS_DECL(PPC) ++Z7_BRANCH_FUNCS_DECL(SPARC) ++Z7_BRANCH_FUNCS_DECL(IA64) ++ + /* +-These functions convert relative addresses to absolute addresses +-in CALL instructions to increase the compression ratio. +- +- In: +- data - data buffer +- size - size of data +- ip - current virtual Instruction Pinter (IP) value +- state - state variable for x86 converter +- encoding - 0 (for decoding), 1 (for encoding) +- +- Out: +- state - state variable for x86 converter ++These functions convert data that contain CPU instructions. ++Each such function converts relative addresses to absolute addresses in some ++branch instructions: CALL (in all converters) and JUMP (X86 converter only). ++Such conversion allows to increase compression ratio, if we compress that data. ++ ++There are 2 types of converters: ++ Byte * Conv_RISC (Byte *data, SizeT size, UInt32 pc); ++ Byte * ConvSt_X86(Byte *data, SizeT size, UInt32 pc, UInt32 *state); ++Each Converter supports 2 versions: one for encoding ++and one for decoding (_Enc/_Dec postfixes in function name). + +- Returns: +- The number of processed bytes. If you call these functions with multiple calls, +- you must start next call with first byte after block of processed bytes. ++In params: ++ data : data buffer ++ size : size of data ++ pc : current virtual Program Counter (Instruction Pinter) value ++In/Out param: ++ state : pointer to state variable (for X86 converter only) ++ ++Return: ++ The pointer to position in (data) buffer after last byte that was processed. ++ If the caller calls converter again, it must call it starting with that position. ++ But the caller is allowed to move data in buffer. so pointer to ++ current processed position also will be changed for next call. ++ Also the caller must increase internal (pc) value for next call. + ++Each converter has some characteristics: Endian, Alignment, LookAhead. + Type Endian Alignment LookAhead + +- x86 little 1 4 ++ X86 little 1 4 + ARMT little 2 2 + ARM little 4 0 ++ ARM64 little 4 0 + PPC big 4 0 + SPARC big 4 0 + IA64 little 16 0 + +- size must be >= Alignment + LookAhead, if it's not last block. +- If (size < Alignment + LookAhead), converter returns 0. +- +- Example: ++ (data) must be aligned for (Alignment). ++ processed size can be calculated as: ++ SizeT processed = Conv(data, size, pc) - data; ++ if (processed == 0) ++ it means that converter needs more data for processing. ++ If (size < Alignment + LookAhead) ++ then (processed == 0) is allowed. + +- UInt32 ip = 0; +- for () +- { +- ; size must be >= Alignment + LookAhead, if it's not last block +- SizeT processed = Convert(data, size, ip, 1); +- data += processed; +- size -= processed; +- ip += processed; +- } ++Example code for conversion in loop: ++ UInt32 pc = 0; ++ size = 0; ++ for (;;) ++ { ++ size += Load_more_input_data(data + size); ++ SizeT processed = Conv(data, size, pc) - data; ++ if (processed == 0 && no_more_input_data_after_size) ++ break; // we stop convert loop ++ data += processed; ++ size -= processed; ++ pc += processed; ++ } + */ + +-#define x86_Convert_Init(state) { state = 0; } +-SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding); +-SizeT ARM_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +-SizeT ARMT_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +-SizeT PPC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +-SizeT SPARC_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +-SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding); +- + EXTERN_C_END + + #endif +diff --git a/src/lzma/Bra86.c b/src/lzma/Bra86.c +index 10a0fbd16..d81f392ae 100644 +--- a/src/lzma/Bra86.c ++++ b/src/lzma/Bra86.c +@@ -1,82 +1,187 @@ +-/* Bra86.c -- Converter for x86 code (BCJ) +-2021-02-09 : Igor Pavlov : Public domain */ ++/* Bra86.c -- Branch converter for X86 code (BCJ) ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + + #include "Bra.h" ++#include "CpuArch.h" + +-#define Test86MSByte(b) ((((b) + 1) & 0xFE) == 0) + +-SizeT x86_Convert(Byte *data, SizeT size, UInt32 ip, UInt32 *state, int encoding) ++#if defined(MY_CPU_SIZEOF_POINTER) \ ++ && ( MY_CPU_SIZEOF_POINTER == 4 \ ++ || MY_CPU_SIZEOF_POINTER == 8) ++ #define BR_CONV_USE_OPT_PC_PTR ++#endif ++ ++#ifdef BR_CONV_USE_OPT_PC_PTR ++#define BR_PC_INIT pc -= (UInt32)(SizeT)p; // (MY_uintptr_t) ++#define BR_PC_GET (pc + (UInt32)(SizeT)p) ++#else ++#define BR_PC_INIT pc += (UInt32)size; ++#define BR_PC_GET (pc - (UInt32)(SizeT)(lim - p)) ++// #define BR_PC_INIT ++// #define BR_PC_GET (pc + (UInt32)(SizeT)(p - data)) ++#endif ++ ++#define BR_CONVERT_VAL(v, c) if (encoding) v += c; else v -= c; ++// #define BR_CONVERT_VAL(v, c) if (!encoding) c = (UInt32)0 - c; v += c; ++ ++#define Z7_BRANCH_CONV_ST(name) z7_BranchConvSt_ ## name ++ ++#define BR86_NEED_CONV_FOR_MS_BYTE(b) ((((b) + 1) & 0xfe) == 0) ++ ++#ifdef MY_CPU_LE_UNALIGN ++ #define BR86_PREPARE_BCJ_SCAN const UInt32 v = GetUi32(p) ^ 0xe8e8e8e8; ++ #define BR86_IS_BCJ_BYTE(n) ((v & ((UInt32)0xfe << (n) * 8)) == 0) ++#else ++ #define BR86_PREPARE_BCJ_SCAN ++ // bad for MSVC X86 (partial write to byte reg): ++ #define BR86_IS_BCJ_BYTE(n) ((p[n - 4] & 0xfe) == 0xe8) ++ // bad for old MSVC (partial write to byte reg): ++ // #define BR86_IS_BCJ_BYTE(n) (((*p ^ 0xe8) & 0xfe) == 0) ++#endif ++ ++static ++Z7_FORCE_INLINE ++Z7_ATTRIB_NO_VECTOR ++Byte *Z7_BRANCH_CONV_ST(X86)(Byte *p, SizeT size, UInt32 pc, UInt32 *state, int encoding) + { +- SizeT pos = 0; +- UInt32 mask = *state & 7; + if (size < 5) +- return 0; +- size -= 4; +- ip += 5; ++ return p; ++ { ++ // Byte *p = data; ++ const Byte *lim = p + size - 4; ++ unsigned mask = (unsigned)*state; // & 7; ++#ifdef BR_CONV_USE_OPT_PC_PTR ++ /* if BR_CONV_USE_OPT_PC_PTR is defined: we need to adjust (pc) for (+4), ++ because call/jump offset is relative to the next instruction. ++ if BR_CONV_USE_OPT_PC_PTR is not defined : we don't need to adjust (pc) for (+4), ++ because BR_PC_GET uses (pc - (lim - p)), and lim was adjusted for (-4) before. ++ */ ++ pc += 4; ++#endif ++ BR_PC_INIT ++ goto start; + +- for (;;) ++ for (;; mask |= 4) + { +- Byte *p = data + pos; +- const Byte *limit = data + size; +- for (; p < limit; p++) +- if ((*p & 0xFE) == 0xE8) +- break; +- ++ // cont: mask |= 4; ++ start: ++ if (p >= lim) ++ goto fin; + { +- SizeT d = (SizeT)(p - data) - pos; +- pos = (SizeT)(p - data); +- if (p >= limit) +- { +- *state = (d > 2 ? 0 : mask >> (unsigned)d); +- return pos; +- } +- if (d > 2) +- mask = 0; +- else +- { +- mask >>= (unsigned)d; +- if (mask != 0 && (mask > 4 || mask == 3 || Test86MSByte(p[(size_t)(mask >> 1) + 1]))) +- { +- mask = (mask >> 1) | 4; +- pos++; +- continue; +- } +- } ++ BR86_PREPARE_BCJ_SCAN ++ p += 4; ++ if (BR86_IS_BCJ_BYTE(0)) { goto m0; } mask >>= 1; ++ if (BR86_IS_BCJ_BYTE(1)) { goto m1; } mask >>= 1; ++ if (BR86_IS_BCJ_BYTE(2)) { goto m2; } mask = 0; ++ if (BR86_IS_BCJ_BYTE(3)) { goto a3; } + } ++ goto main_loop; + +- if (Test86MSByte(p[4])) ++ m0: p--; ++ m1: p--; ++ m2: p--; ++ if (mask == 0) ++ goto a3; ++ if (p > lim) ++ goto fin_p; ++ ++ // if (((0x17u >> mask) & 1) == 0) ++ if (mask > 4 || mask == 3) ++ { ++ mask >>= 1; ++ continue; // goto cont; ++ } ++ mask >>= 1; ++ if (BR86_NEED_CONV_FOR_MS_BYTE(p[mask])) ++ continue; // goto cont; ++ // if (!BR86_NEED_CONV_FOR_MS_BYTE(p[3])) continue; // goto cont; + { +- UInt32 v = ((UInt32)p[4] << 24) | ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | ((UInt32)p[1]); +- UInt32 cur = ip + (UInt32)pos; +- pos += 5; +- if (encoding) +- v += cur; +- else +- v -= cur; +- if (mask != 0) ++ UInt32 v = GetUi32(p); ++ UInt32 c; ++ v += (1 << 24); if (v & 0xfe000000) continue; // goto cont; ++ c = BR_PC_GET; ++ BR_CONVERT_VAL(v, c) + { +- unsigned sh = (mask & 6) << 2; +- if (Test86MSByte((Byte)(v >> sh))) ++ mask <<= 3; ++ if (BR86_NEED_CONV_FOR_MS_BYTE(v >> mask)) + { +- v ^= (((UInt32)0x100 << sh) - 1); +- if (encoding) +- v += cur; +- else +- v -= cur; ++ v ^= (((UInt32)0x100 << mask) - 1); ++ #ifdef MY_CPU_X86 ++ // for X86 : we can recalculate (c) to reduce register pressure ++ c = BR_PC_GET; ++ #endif ++ BR_CONVERT_VAL(v, c) + } + mask = 0; + } +- p[1] = (Byte)v; +- p[2] = (Byte)(v >> 8); +- p[3] = (Byte)(v >> 16); +- p[4] = (Byte)(0 - ((v >> 24) & 1)); ++ // v = (v & ((1 << 24) - 1)) - (v & (1 << 24)); ++ v &= (1 << 25) - 1; v -= (1 << 24); ++ SetUi32(p, v) ++ p += 4; ++ goto main_loop; + } +- else ++ ++ main_loop: ++ if (p >= lim) ++ goto fin; ++ for (;;) + { +- mask = (mask >> 1) | 4; +- pos++; ++ BR86_PREPARE_BCJ_SCAN ++ p += 4; ++ if (BR86_IS_BCJ_BYTE(0)) { goto a0; } ++ if (BR86_IS_BCJ_BYTE(1)) { goto a1; } ++ if (BR86_IS_BCJ_BYTE(2)) { goto a2; } ++ if (BR86_IS_BCJ_BYTE(3)) { goto a3; } ++ if (p >= lim) ++ goto fin; ++ } ++ ++ a0: p--; ++ a1: p--; ++ a2: p--; ++ a3: ++ if (p > lim) ++ goto fin_p; ++ // if (!BR86_NEED_CONV_FOR_MS_BYTE(p[3])) continue; // goto cont; ++ { ++ UInt32 v = GetUi32(p); ++ UInt32 c; ++ v += (1 << 24); if (v & 0xfe000000) continue; // goto cont; ++ c = BR_PC_GET; ++ BR_CONVERT_VAL(v, c) ++ // v = (v & ((1 << 24) - 1)) - (v & (1 << 24)); ++ v &= (1 << 25) - 1; v -= (1 << 24); ++ SetUi32(p, v) ++ p += 4; ++ goto main_loop; + } + } ++ ++fin_p: ++ p--; ++fin: ++ // the following processing for tail is optional and can be commented ++ /* ++ lim += 4; ++ for (; p < lim; p++, mask >>= 1) ++ if ((*p & 0xfe) == 0xe8) ++ break; ++ */ ++ *state = (UInt32)mask; ++ return p; ++ } + } ++ ++ ++#define Z7_BRANCH_CONV_ST_FUNC_IMP(name, m, encoding) \ ++Z7_NO_INLINE \ ++Z7_ATTRIB_NO_VECTOR \ ++Byte *m(name)(Byte *data, SizeT size, UInt32 pc, UInt32 *state) \ ++ { return Z7_BRANCH_CONV_ST(name)(data, size, pc, state, encoding); } ++ ++Z7_BRANCH_CONV_ST_FUNC_IMP(X86, Z7_BRANCH_CONV_ST_DEC, 0) ++#ifndef Z7_EXTRACT_ONLY ++Z7_BRANCH_CONV_ST_FUNC_IMP(X86, Z7_BRANCH_CONV_ST_ENC, 1) ++#endif +diff --git a/src/lzma/BraIA64.c b/src/lzma/BraIA64.c +index d1dbc62c5..9dfe3e289 100644 +--- a/src/lzma/BraIA64.c ++++ b/src/lzma/BraIA64.c +@@ -1,53 +1,14 @@ + /* BraIA64.c -- Converter for IA-64 code +-2017-01-26 : Igor Pavlov : Public domain */ ++2023-02-20 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +-#include "CpuArch.h" +-#include "Bra.h" ++// the code was moved to Bra.c + +-SizeT IA64_Convert(Byte *data, SizeT size, UInt32 ip, int encoding) +-{ +- SizeT i; +- if (size < 16) +- return 0; +- size -= 16; +- i = 0; +- do +- { +- unsigned m = ((UInt32)0x334B0000 >> (data[i] & 0x1E)) & 3; +- if (m) +- { +- m++; +- do +- { +- Byte *p = data + (i + (size_t)m * 5 - 8); +- if (((p[3] >> m) & 15) == 5 +- && (((p[-1] | ((UInt32)p[0] << 8)) >> m) & 0x70) == 0) +- { +- unsigned raw = GetUi32(p); +- unsigned v = raw >> m; +- v = (v & 0xFFFFF) | ((v & (1 << 23)) >> 3); +- +- v <<= 4; +- if (encoding) +- v += ip + (UInt32)i; +- else +- v -= ip + (UInt32)i; +- v >>= 4; +- +- v &= 0x1FFFFF; +- v += 0x700000; +- v &= 0x8FFFFF; +- raw &= ~((UInt32)0x8FFFFF << m); +- raw |= (v << m); +- SetUi32(p, raw); +- } +- } +- while (++m <= 4); +- } +- i += 16; +- } +- while (i <= size); +- return i; +-} ++#ifdef _MSC_VER ++#pragma warning(disable : 4206) // nonstandard extension used : translation unit is empty ++#endif ++ ++#if defined(__clang__) ++#pragma GCC diagnostic ignored "-Wempty-translation-unit" ++#endif +diff --git a/src/lzma/Compiler.h b/src/lzma/Compiler.h +index a9816fa5a..185a52deb 100644 +--- a/src/lzma/Compiler.h ++++ b/src/lzma/Compiler.h +@@ -1,12 +1,37 @@ +-/* Compiler.h +-2021-01-05 : Igor Pavlov : Public domain */ ++/* Compiler.h : Compiler specific defines and pragmas ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_COMPILER_H +-#define __7Z_COMPILER_H ++#ifndef ZIP7_INC_COMPILER_H ++#define ZIP7_INC_COMPILER_H ++ ++#if defined(__clang__) ++# define Z7_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) ++#endif ++#if defined(__clang__) && defined(__apple_build_version__) ++# define Z7_APPLE_CLANG_VERSION Z7_CLANG_VERSION ++#elif defined(__clang__) ++# define Z7_LLVM_CLANG_VERSION Z7_CLANG_VERSION ++#elif defined(__GNUC__) ++# define Z7_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) ++#endif ++ ++#ifdef _MSC_VER ++#if !defined(__clang__) && !defined(__GNUC__) ++#define Z7_MSC_VER_ORIGINAL _MSC_VER ++#endif ++#endif ++ ++#if defined(__MINGW32__) || defined(__MINGW64__) ++#define Z7_MINGW ++#endif ++ ++// #pragma GCC diagnostic ignored "-Wunknown-pragmas" ++ ++#ifdef __clang__ ++// padding size of '' with 4 bytes to alignment boundary ++#pragma GCC diagnostic ignored "-Wpadded" ++#endif + +- #ifdef __clang__ +- #pragma clang diagnostic ignored "-Wunused-private-field" +- #endif + + #ifdef _MSC_VER + +@@ -17,24 +42,115 @@ + #pragma warning(disable : 4214) // nonstandard extension used : bit field types other than int + #endif + +- #if _MSC_VER >= 1300 +- #pragma warning(disable : 4996) // This function or variable may be unsafe +- #else +- #pragma warning(disable : 4511) // copy constructor could not be generated +- #pragma warning(disable : 4512) // assignment operator could not be generated +- #pragma warning(disable : 4514) // unreferenced inline function has been removed +- #pragma warning(disable : 4702) // unreachable code +- #pragma warning(disable : 4710) // not inlined +- #pragma warning(disable : 4714) // function marked as __forceinline not inlined +- #pragma warning(disable : 4786) // identifier was truncated to '255' characters in the debug information +- #endif ++#if defined(_MSC_VER) && _MSC_VER >= 1800 ++#pragma warning(disable : 4464) // relative include path contains '..' ++#endif ++ ++// == 1200 : -O1 : for __forceinline ++// >= 1900 : -O1 : for printf ++#pragma warning(disable : 4710) // function not inlined ++ ++#if _MSC_VER < 1900 ++// winnt.h: 'Int64ShllMod32' ++#pragma warning(disable : 4514) // unreferenced inline function has been removed ++#endif ++ ++#if _MSC_VER < 1300 ++// #pragma warning(disable : 4702) // unreachable code ++// Bra.c : -O1: ++#pragma warning(disable : 4714) // function marked as __forceinline not inlined ++#endif ++ ++/* ++#if _MSC_VER > 1400 && _MSC_VER <= 1900 ++// strcat: This function or variable may be unsafe ++// sysinfoapi.h: kit10: GetVersion was declared deprecated ++#pragma warning(disable : 4996) ++#endif ++*/ ++ ++#if _MSC_VER > 1200 ++// -Wall warnings ++ ++#pragma warning(disable : 4711) // function selected for automatic inline expansion ++#pragma warning(disable : 4820) // '2' bytes padding added after data member ++ ++#if _MSC_VER >= 1400 && _MSC_VER < 1920 ++// 1400: string.h: _DBG_MEMCPY_INLINE_ ++// 1600 - 191x : smmintrin.h __cplusplus' ++// is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' ++#pragma warning(disable : 4668) ++ ++// 1400 - 1600 : WinDef.h : 'FARPROC' : ++// 1900 - 191x : immintrin.h: _readfsbase_u32 ++// no function prototype given : converting '()' to '(void)' ++#pragma warning(disable : 4255) ++#endif ++ ++#if _MSC_VER >= 1914 ++// Compiler will insert Spectre mitigation for memory load if /Qspectre switch specified ++#pragma warning(disable : 5045) ++#endif ++ ++#endif // _MSC_VER > 1200 ++#endif // _MSC_VER ++ ++ ++#if defined(__clang__) && (__clang_major__ >= 4) ++ #define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE \ ++ _Pragma("clang loop unroll(disable)") \ ++ _Pragma("clang loop vectorize(disable)") ++ #define Z7_ATTRIB_NO_VECTORIZE ++#elif defined(__GNUC__) && (__GNUC__ >= 5) ++ #define Z7_ATTRIB_NO_VECTORIZE __attribute__((optimize("no-tree-vectorize"))) ++ // __attribute__((optimize("no-unroll-loops"))); ++ #define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE ++#elif defined(_MSC_VER) && (_MSC_VER >= 1920) ++ #define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE \ ++ _Pragma("loop( no_vector )") ++ #define Z7_ATTRIB_NO_VECTORIZE ++#else ++ #define Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE ++ #define Z7_ATTRIB_NO_VECTORIZE ++#endif ++ ++#if defined(MY_CPU_X86_OR_AMD64) && ( \ ++ defined(__clang__) && (__clang_major__ >= 4) \ ++ || defined(__GNUC__) && (__GNUC__ >= 5)) ++ #define Z7_ATTRIB_NO_SSE __attribute__((__target__("no-sse"))) ++#else ++ #define Z7_ATTRIB_NO_SSE ++#endif ++ ++#define Z7_ATTRIB_NO_VECTOR \ ++ Z7_ATTRIB_NO_VECTORIZE \ ++ Z7_ATTRIB_NO_SSE ++ ++ ++#if defined(__clang__) && (__clang_major__ >= 8) \ ++ || defined(__GNUC__) && (__GNUC__ >= 1000) \ ++ /* || defined(_MSC_VER) && (_MSC_VER >= 1920) */ ++ // GCC is not good for __builtin_expect() ++ #define Z7_LIKELY(x) (__builtin_expect((x), 1)) ++ #define Z7_UNLIKELY(x) (__builtin_expect((x), 0)) ++ // #define Z7_unlikely [[unlikely]] ++ // #define Z7_likely [[likely]] ++#else ++ #define Z7_LIKELY(x) (x) ++ #define Z7_UNLIKELY(x) (x) ++ // #define Z7_likely ++#endif + +- #ifdef __clang__ +- #pragma clang diagnostic ignored "-Wdeprecated-declarations" +- #pragma clang diagnostic ignored "-Wmicrosoft-exception-spec" +- // #pragma clang diagnostic ignored "-Wreserved-id-macro" +- #endif + ++#if (defined(Z7_CLANG_VERSION) && (Z7_CLANG_VERSION >= 36000)) ++#define Z7_DIAGNOSCTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER \ ++ _Pragma("GCC diagnostic push") \ ++ _Pragma("GCC diagnostic ignored \"-Wreserved-macro-identifier\"") ++#define Z7_DIAGNOSCTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER \ ++ _Pragma("GCC diagnostic pop") ++#else ++#define Z7_DIAGNOSCTIC_IGNORE_BEGIN_RESERVED_MACRO_IDENTIFIER ++#define Z7_DIAGNOSCTIC_IGNORE_END_RESERVED_MACRO_IDENTIFIER + #endif + + #define UNUSED_VAR(x) (void)x; +diff --git a/src/lzma/CpuArch.c b/src/lzma/CpuArch.c +index 1a1facf54..4e2af7707 100644 +--- a/src/lzma/CpuArch.c ++++ b/src/lzma/CpuArch.c +@@ -1,187 +1,318 @@ + /* CpuArch.c -- CPU specific code +-2021-07-13 : Igor Pavlov : Public domain */ ++2023-05-18 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + ++// #include ++ + #include "CpuArch.h" + + #ifdef MY_CPU_X86_OR_AMD64 + +-#if (defined(_MSC_VER) && !defined(MY_CPU_AMD64)) || defined(__GNUC__) +-#define USE_ASM ++#undef NEED_CHECK_FOR_CPUID ++#if !defined(MY_CPU_AMD64) ++#define NEED_CHECK_FOR_CPUID + #endif + +-#if !defined(USE_ASM) && _MSC_VER >= 1500 +-#include ++/* ++ cpuid instruction supports (subFunction) parameter in ECX, ++ that is used only with some specific (function) parameter values. ++ But we always use only (subFunction==0). ++*/ ++/* ++ __cpuid(): MSVC and GCC/CLANG use same function/macro name ++ but parameters are different. ++ We use MSVC __cpuid() parameters style for our z7_x86_cpuid() function. ++*/ ++ ++#if defined(__GNUC__) /* && (__GNUC__ >= 10) */ \ ++ || defined(__clang__) /* && (__clang_major__ >= 10) */ ++ ++/* there was some CLANG/GCC compilers that have issues with ++ rbx(ebx) handling in asm blocks in -fPIC mode (__PIC__ is defined). ++ compiler's contains the macro __cpuid() that is similar to our code. ++ The history of __cpuid() changes in CLANG/GCC: ++ GCC: ++ 2007: it preserved ebx for (__PIC__ && __i386__) ++ 2013: it preserved rbx and ebx for __PIC__ ++ 2014: it doesn't preserves rbx and ebx anymore ++ we suppose that (__GNUC__ >= 5) fixed that __PIC__ ebx/rbx problem. ++ CLANG: ++ 2014+: it preserves rbx, but only for 64-bit code. No __PIC__ check. ++ Why CLANG cares about 64-bit mode only, and doesn't care about ebx (in 32-bit)? ++ Do we need __PIC__ test for CLANG or we must care about rbx even if ++ __PIC__ is not defined? ++*/ ++ ++#define ASM_LN "\n" ++ ++#if defined(MY_CPU_AMD64) && defined(__PIC__) \ ++ && ((defined (__GNUC__) && (__GNUC__ < 5)) || defined(__clang__)) ++ ++#define x86_cpuid_MACRO(p, func) { \ ++ __asm__ __volatile__ ( \ ++ ASM_LN "mov %%rbx, %q1" \ ++ ASM_LN "cpuid" \ ++ ASM_LN "xchg %%rbx, %q1" \ ++ : "=a" ((p)[0]), "=&r" ((p)[1]), "=c" ((p)[2]), "=d" ((p)[3]) : "0" (func), "2"(0)); } ++ ++ /* "=&r" selects free register. It can select even rbx, if that register is free. ++ "=&D" for (RDI) also works, but the code can be larger with "=&D" ++ "2"(0) means (subFunction = 0), ++ 2 is (zero-based) index in the output constraint list "=c" (ECX). */ ++ ++#elif defined(MY_CPU_X86) && defined(__PIC__) \ ++ && ((defined (__GNUC__) && (__GNUC__ < 5)) || defined(__clang__)) ++ ++#define x86_cpuid_MACRO(p, func) { \ ++ __asm__ __volatile__ ( \ ++ ASM_LN "mov %%ebx, %k1" \ ++ ASM_LN "cpuid" \ ++ ASM_LN "xchg %%ebx, %k1" \ ++ : "=a" ((p)[0]), "=&r" ((p)[1]), "=c" ((p)[2]), "=d" ((p)[3]) : "0" (func), "2"(0)); } ++ ++#else ++ ++#define x86_cpuid_MACRO(p, func) { \ ++ __asm__ __volatile__ ( \ ++ ASM_LN "cpuid" \ ++ : "=a" ((p)[0]), "=b" ((p)[1]), "=c" ((p)[2]), "=d" ((p)[3]) : "0" (func), "2"(0)); } ++ + #endif + +-#if defined(USE_ASM) && !defined(MY_CPU_AMD64) +-static UInt32 CheckFlag(UInt32 flag) +-{ +- #ifdef _MSC_VER +- __asm pushfd; +- __asm pop EAX; +- __asm mov EDX, EAX; +- __asm xor EAX, flag; +- __asm push EAX; +- __asm popfd; +- __asm pushfd; +- __asm pop EAX; +- __asm xor EAX, EDX; +- __asm push EDX; +- __asm popfd; +- __asm and flag, EAX; +- #else ++ ++void Z7_FASTCALL z7_x86_cpuid(UInt32 p[4], UInt32 func) ++{ ++ x86_cpuid_MACRO(p, func) ++} ++ ++ ++Z7_NO_INLINE ++UInt32 Z7_FASTCALL z7_x86_cpuid_GetMaxFunc(void) ++{ ++ #if defined(NEED_CHECK_FOR_CPUID) ++ #define EFALGS_CPUID_BIT 21 ++ UInt32 a; + __asm__ __volatile__ ( +- "pushf\n\t" +- "pop %%EAX\n\t" +- "movl %%EAX,%%EDX\n\t" +- "xorl %0,%%EAX\n\t" +- "push %%EAX\n\t" +- "popf\n\t" +- "pushf\n\t" +- "pop %%EAX\n\t" +- "xorl %%EDX,%%EAX\n\t" +- "push %%EDX\n\t" +- "popf\n\t" +- "andl %%EAX, %0\n\t": +- "=c" (flag) : "c" (flag) : +- "%eax", "%edx"); ++ ASM_LN "pushf" ++ ASM_LN "pushf" ++ ASM_LN "pop %0" ++ // ASM_LN "movl %0, %1" ++ // ASM_LN "xorl $0x200000, %0" ++ ASM_LN "btc %1, %0" ++ ASM_LN "push %0" ++ ASM_LN "popf" ++ ASM_LN "pushf" ++ ASM_LN "pop %0" ++ ASM_LN "xorl (%%esp), %0" ++ ++ ASM_LN "popf" ++ ASM_LN ++ : "=&r" (a) // "=a" ++ : "i" (EFALGS_CPUID_BIT) ++ ); ++ if ((a & (1 << EFALGS_CPUID_BIT)) == 0) ++ return 0; ++ #endif ++ { ++ UInt32 p[4]; ++ x86_cpuid_MACRO(p, 0) ++ return p[0]; ++ } ++} ++ ++#undef ASM_LN ++ ++#elif !defined(_MSC_VER) ++ ++/* ++// for gcc/clang and other: we can try to use __cpuid macro: ++#include ++void Z7_FASTCALL z7_x86_cpuid(UInt32 p[4], UInt32 func) ++{ ++ __cpuid(func, p[0], p[1], p[2], p[3]); ++} ++UInt32 Z7_FASTCALL z7_x86_cpuid_GetMaxFunc(void) ++{ ++ return (UInt32)__get_cpuid_max(0, NULL); ++} ++*/ ++// for unsupported cpuid: ++void Z7_FASTCALL z7_x86_cpuid(UInt32 p[4], UInt32 func) ++{ ++ UNUSED_VAR(func) ++ p[0] = p[1] = p[2] = p[3] = 0; ++} ++UInt32 Z7_FASTCALL z7_x86_cpuid_GetMaxFunc(void) ++{ ++ return 0; ++} ++ ++#else // _MSC_VER ++ ++#if !defined(MY_CPU_AMD64) ++ ++UInt32 __declspec(naked) Z7_FASTCALL z7_x86_cpuid_GetMaxFunc(void) ++{ ++ #if defined(NEED_CHECK_FOR_CPUID) ++ #define EFALGS_CPUID_BIT 21 ++ __asm pushfd ++ __asm pushfd ++ /* ++ __asm pop eax ++ // __asm mov edx, eax ++ __asm btc eax, EFALGS_CPUID_BIT ++ __asm push eax ++ */ ++ __asm btc dword ptr [esp], EFALGS_CPUID_BIT ++ __asm popfd ++ __asm pushfd ++ __asm pop eax ++ // __asm xor eax, edx ++ __asm xor eax, [esp] ++ // __asm push edx ++ __asm popfd ++ __asm and eax, (1 shl EFALGS_CPUID_BIT) ++ __asm jz end_func ++ #endif ++ __asm push ebx ++ __asm xor eax, eax // func ++ __asm xor ecx, ecx // subFunction (optional) for (func == 0) ++ __asm cpuid ++ __asm pop ebx ++ #if defined(NEED_CHECK_FOR_CPUID) ++ end_func: + #endif +- return flag; ++ __asm ret 0 + } +-#define CHECK_CPUID_IS_SUPPORTED if (CheckFlag(1 << 18) == 0 || CheckFlag(1 << 21) == 0) return False7z; +-#else +-#define CHECK_CPUID_IS_SUPPORTED +-#endif + +-#ifndef USE_ASM +- #ifdef _MSC_VER ++void __declspec(naked) Z7_FASTCALL z7_x86_cpuid(UInt32 p[4], UInt32 func) ++{ ++ UNUSED_VAR(p) ++ UNUSED_VAR(func) ++ __asm push ebx ++ __asm push edi ++ __asm mov edi, ecx // p ++ __asm mov eax, edx // func ++ __asm xor ecx, ecx // subfunction (optional) for (func == 0) ++ __asm cpuid ++ __asm mov [edi ], eax ++ __asm mov [edi + 4], ebx ++ __asm mov [edi + 8], ecx ++ __asm mov [edi + 12], edx ++ __asm pop edi ++ __asm pop ebx ++ __asm ret 0 ++} ++ ++#else // MY_CPU_AMD64 ++ + #if _MSC_VER >= 1600 +- #define MY__cpuidex __cpuidex ++ #include ++ #define MY_cpuidex __cpuidex + #else +- + /* +- __cpuid (function == 4) requires subfunction number in ECX. ++ __cpuid (func == (0 or 7)) requires subfunction number in ECX. + MSDN: The __cpuid intrinsic clears the ECX register before calling the cpuid instruction. + __cpuid() in new MSVC clears ECX. +- __cpuid() in old MSVC (14.00) doesn't clear ECX +- We still can use __cpuid for low (function) values that don't require ECX, +- but __cpuid() in old MSVC will be incorrect for some function values: (function == 4). ++ __cpuid() in old MSVC (14.00) x64 doesn't clear ECX ++ We still can use __cpuid for low (func) values that don't require ECX, ++ but __cpuid() in old MSVC will be incorrect for some func values: (func == 7). + So here we use the hack for old MSVC to send (subFunction) in ECX register to cpuid instruction, +- where ECX value is first parameter for FAST_CALL / NO_INLINE function, +- So the caller of MY__cpuidex_HACK() sets ECX as subFunction, and ++ where ECX value is first parameter for FASTCALL / NO_INLINE func, ++ So the caller of MY_cpuidex_HACK() sets ECX as subFunction, and + old MSVC for __cpuid() doesn't change ECX and cpuid instruction gets (subFunction) value. + +- DON'T remove MY_NO_INLINE and MY_FAST_CALL for MY__cpuidex_HACK() !!! ++DON'T remove Z7_NO_INLINE and Z7_FASTCALL for MY_cpuidex_HACK(): !!! + */ +- + static +-MY_NO_INLINE +-void MY_FAST_CALL MY__cpuidex_HACK(UInt32 subFunction, int *CPUInfo, UInt32 function) ++Z7_NO_INLINE void Z7_FASTCALL MY_cpuidex_HACK(UInt32 subFunction, UInt32 func, int *CPUInfo) + { +- UNUSED_VAR(subFunction); +- __cpuid(CPUInfo, function); ++ UNUSED_VAR(subFunction) ++ __cpuid(CPUInfo, func); + } +- +- #define MY__cpuidex(info, func, func2) MY__cpuidex_HACK(func2, info, func) +- #pragma message("======== MY__cpuidex_HACK WAS USED ========") +- #endif +- #else +- #define MY__cpuidex(info, func, func2) __cpuid(info, func) +- #pragma message("======== (INCORRECT ?) cpuid WAS USED ========") +- #endif ++ #define MY_cpuidex(info, func, func2) MY_cpuidex_HACK(func2, func, info) ++ #pragma message("======== MY_cpuidex_HACK WAS USED ========") ++ #endif // _MSC_VER >= 1600 ++ ++#if !defined(MY_CPU_AMD64) ++/* inlining for __cpuid() in MSVC x86 (32-bit) produces big ineffective code, ++ so we disable inlining here */ ++Z7_NO_INLINE + #endif +- +- +- +- +-void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d) ++void Z7_FASTCALL z7_x86_cpuid(UInt32 p[4], UInt32 func) + { +- #ifdef USE_ASM +- +- #ifdef _MSC_VER +- +- UInt32 a2, b2, c2, d2; +- __asm xor EBX, EBX; +- __asm xor ECX, ECX; +- __asm xor EDX, EDX; +- __asm mov EAX, function; +- __asm cpuid; +- __asm mov a2, EAX; +- __asm mov b2, EBX; +- __asm mov c2, ECX; +- __asm mov d2, EDX; +- +- *a = a2; +- *b = b2; +- *c = c2; +- *d = d2; +- +- #else +- +- __asm__ __volatile__ ( +- #if defined(MY_CPU_AMD64) && defined(__PIC__) +- "mov %%rbx, %%rdi;" +- "cpuid;" +- "xchg %%rbx, %%rdi;" +- : "=a" (*a) , +- "=D" (*b) , +- #elif defined(MY_CPU_X86) && defined(__PIC__) +- "mov %%ebx, %%edi;" +- "cpuid;" +- "xchgl %%ebx, %%edi;" +- : "=a" (*a) , +- "=D" (*b) , +- #else +- "cpuid" +- : "=a" (*a) , +- "=b" (*b) , +- #endif +- "=c" (*c) , +- "=d" (*d) +- : "0" (function), "c"(0) ) ; +- +- #endif +- +- #else ++ MY_cpuidex((int *)p, (int)func, 0); ++} + +- int CPUInfo[4]; ++Z7_NO_INLINE ++UInt32 Z7_FASTCALL z7_x86_cpuid_GetMaxFunc(void) ++{ ++ int a[4]; ++ MY_cpuidex(a, 0, 0); ++ return a[0]; ++} + +- MY__cpuidex(CPUInfo, (int)function, 0); ++#endif // MY_CPU_AMD64 ++#endif // _MSC_VER + +- *a = (UInt32)CPUInfo[0]; +- *b = (UInt32)CPUInfo[1]; +- *c = (UInt32)CPUInfo[2]; +- *d = (UInt32)CPUInfo[3]; ++#if defined(NEED_CHECK_FOR_CPUID) ++#define CHECK_CPUID_IS_SUPPORTED { if (z7_x86_cpuid_GetMaxFunc() == 0) return 0; } ++#else ++#define CHECK_CPUID_IS_SUPPORTED ++#endif ++#undef NEED_CHECK_FOR_CPUID + +- #endif +-} + +-BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p) ++static ++BoolInt x86cpuid_Func_1(UInt32 *p) + { + CHECK_CPUID_IS_SUPPORTED +- MyCPUID(0, &p->maxFunc, &p->vendor[0], &p->vendor[2], &p->vendor[1]); +- MyCPUID(1, &p->ver, &p->b, &p->c, &p->d); ++ z7_x86_cpuid(p, 1); + return True7z; + } + +-static const UInt32 kVendors[][3] = ++/* ++static const UInt32 kVendors[][1] = + { +- { 0x756E6547, 0x49656E69, 0x6C65746E}, +- { 0x68747541, 0x69746E65, 0x444D4163}, +- { 0x746E6543, 0x48727561, 0x736C7561} ++ { 0x756E6547 }, // , 0x49656E69, 0x6C65746E }, ++ { 0x68747541 }, // , 0x69746E65, 0x444D4163 }, ++ { 0x746E6543 } // , 0x48727561, 0x736C7561 } + }; ++*/ ++ ++/* ++typedef struct ++{ ++ UInt32 maxFunc; ++ UInt32 vendor[3]; ++ UInt32 ver; ++ UInt32 b; ++ UInt32 c; ++ UInt32 d; ++} Cx86cpuid; ++ ++enum ++{ ++ CPU_FIRM_INTEL, ++ CPU_FIRM_AMD, ++ CPU_FIRM_VIA ++}; ++int x86cpuid_GetFirm(const Cx86cpuid *p); ++#define x86cpuid_ver_GetFamily(ver) (((ver >> 16) & 0xff0) | ((ver >> 8) & 0xf)) ++#define x86cpuid_ver_GetModel(ver) (((ver >> 12) & 0xf0) | ((ver >> 4) & 0xf)) ++#define x86cpuid_ver_GetStepping(ver) (ver & 0xf) + + int x86cpuid_GetFirm(const Cx86cpuid *p) + { + unsigned i; +- for (i = 0; i < sizeof(kVendors) / sizeof(kVendors[i]); i++) ++ for (i = 0; i < sizeof(kVendors) / sizeof(kVendors[0]); i++) + { + const UInt32 *v = kVendors[i]; +- if (v[0] == p->vendor[0] && +- v[1] == p->vendor[1] && +- v[2] == p->vendor[2]) ++ if (v[0] == p->vendor[0] ++ // && v[1] == p->vendor[1] ++ // && v[2] == p->vendor[2] ++ ) + return (int)i; + } + return -1; +@@ -190,41 +321,55 @@ int x86cpuid_GetFirm(const Cx86cpuid *p) + BoolInt CPU_Is_InOrder() + { + Cx86cpuid p; +- int firm; + UInt32 family, model; + if (!x86cpuid_CheckAndRead(&p)) + return True7z; + +- family = x86cpuid_GetFamily(p.ver); +- model = x86cpuid_GetModel(p.ver); +- +- firm = x86cpuid_GetFirm(&p); ++ family = x86cpuid_ver_GetFamily(p.ver); ++ model = x86cpuid_ver_GetModel(p.ver); + +- switch (firm) ++ switch (x86cpuid_GetFirm(&p)) + { + case CPU_FIRM_INTEL: return (family < 6 || (family == 6 && ( +- /* In-Order Atom CPU */ +- model == 0x1C /* 45 nm, N4xx, D4xx, N5xx, D5xx, 230, 330 */ +- || model == 0x26 /* 45 nm, Z6xx */ +- || model == 0x27 /* 32 nm, Z2460 */ +- || model == 0x35 /* 32 nm, Z2760 */ +- || model == 0x36 /* 32 nm, N2xxx, D2xxx */ ++ // In-Order Atom CPU ++ model == 0x1C // 45 nm, N4xx, D4xx, N5xx, D5xx, 230, 330 ++ || model == 0x26 // 45 nm, Z6xx ++ || model == 0x27 // 32 nm, Z2460 ++ || model == 0x35 // 32 nm, Z2760 ++ || model == 0x36 // 32 nm, N2xxx, D2xxx + ))); + case CPU_FIRM_AMD: return (family < 5 || (family == 5 && (model < 6 || model == 0xA))); + case CPU_FIRM_VIA: return (family < 6 || (family == 6 && model < 0xF)); + } +- return True7z; ++ return False7z; // v23 : unknown processors are not In-Order + } ++*/ ++ ++#ifdef _WIN32 ++#include "7zWindows.h" ++#endif + + #if !defined(MY_CPU_AMD64) && defined(_WIN32) +-#include +-static BoolInt CPU_Sys_Is_SSE_Supported() ++ ++/* for legacy SSE ia32: there is no user-space cpu instruction to check ++ that OS supports SSE register storing/restoring on context switches. ++ So we need some OS-specific function to check that it's safe to use SSE registers. ++*/ ++ ++Z7_FORCE_INLINE ++static BoolInt CPU_Sys_Is_SSE_Supported(void) + { +- OSVERSIONINFO vi; +- vi.dwOSVersionInfoSize = sizeof(vi); +- if (!GetVersionEx(&vi)) +- return False7z; +- return (vi.dwMajorVersion >= 5); ++#ifdef _MSC_VER ++ #pragma warning(push) ++ #pragma warning(disable : 4996) // `GetVersion': was declared deprecated ++#endif ++ /* low byte is major version of Windows ++ We suppose that any Windows version since ++ Windows2000 (major == 5) supports SSE registers */ ++ return (Byte)GetVersion() >= 5; ++#if defined(_MSC_VER) ++ #pragma warning(pop) ++#endif + } + #define CHECK_SYS_SSE_SUPPORT if (!CPU_Sys_Is_SSE_Supported()) return False7z; + #else +@@ -232,94 +377,300 @@ static BoolInt CPU_Sys_Is_SSE_Supported() + #endif + + +-static UInt32 X86_CPUID_ECX_Get_Flags() ++#if !defined(MY_CPU_AMD64) ++ ++BoolInt CPU_IsSupported_CMOV(void) + { +- Cx86cpuid p; ++ UInt32 a[4]; ++ if (!x86cpuid_Func_1(&a[0])) ++ return 0; ++ return (a[3] >> 15) & 1; ++} ++ ++BoolInt CPU_IsSupported_SSE(void) ++{ ++ UInt32 a[4]; + CHECK_SYS_SSE_SUPPORT +- if (!x86cpuid_CheckAndRead(&p)) ++ if (!x86cpuid_Func_1(&a[0])) ++ return 0; ++ return (a[3] >> 25) & 1; ++} ++ ++BoolInt CPU_IsSupported_SSE2(void) ++{ ++ UInt32 a[4]; ++ CHECK_SYS_SSE_SUPPORT ++ if (!x86cpuid_Func_1(&a[0])) ++ return 0; ++ return (a[3] >> 26) & 1; ++} ++ ++#endif ++ ++ ++static UInt32 x86cpuid_Func_1_ECX(void) ++{ ++ UInt32 a[4]; ++ CHECK_SYS_SSE_SUPPORT ++ if (!x86cpuid_Func_1(&a[0])) + return 0; +- return p.c; ++ return a[2]; + } + +-BoolInt CPU_IsSupported_AES() ++BoolInt CPU_IsSupported_AES(void) + { +- return (X86_CPUID_ECX_Get_Flags() >> 25) & 1; ++ return (x86cpuid_Func_1_ECX() >> 25) & 1; + } + +-BoolInt CPU_IsSupported_SSSE3() ++BoolInt CPU_IsSupported_SSSE3(void) + { +- return (X86_CPUID_ECX_Get_Flags() >> 9) & 1; ++ return (x86cpuid_Func_1_ECX() >> 9) & 1; + } + +-BoolInt CPU_IsSupported_SSE41() ++BoolInt CPU_IsSupported_SSE41(void) + { +- return (X86_CPUID_ECX_Get_Flags() >> 19) & 1; ++ return (x86cpuid_Func_1_ECX() >> 19) & 1; + } + +-BoolInt CPU_IsSupported_SHA() ++BoolInt CPU_IsSupported_SHA(void) + { +- Cx86cpuid p; + CHECK_SYS_SSE_SUPPORT +- if (!x86cpuid_CheckAndRead(&p)) +- return False7z; + +- if (p.maxFunc < 7) ++ if (z7_x86_cpuid_GetMaxFunc() < 7) + return False7z; + { +- UInt32 d[4] = { 0 }; +- MyCPUID(7, &d[0], &d[1], &d[2], &d[3]); ++ UInt32 d[4]; ++ z7_x86_cpuid(d, 7); + return (d[1] >> 29) & 1; + } + } + +-// #include ++/* ++MSVC: _xgetbv() intrinsic is available since VS2010SP1. ++ MSVC also defines (_XCR_XFEATURE_ENABLED_MASK) macro in ++ that we can use or check. ++ For any 32-bit x86 we can use asm code in MSVC, ++ but MSVC asm code is huge after compilation. ++ So _xgetbv() is better ++ ++ICC: _xgetbv() intrinsic is available (in what version of ICC?) ++ ICC defines (__GNUC___) and it supports gnu assembler ++ also ICC supports MASM style code with -use-msasm switch. ++ but ICC doesn't support __attribute__((__target__)) ++ ++GCC/CLANG 9: ++ _xgetbv() is macro that works via __builtin_ia32_xgetbv() ++ and we need __attribute__((__target__("xsave")). ++ But with __target__("xsave") the function will be not ++ inlined to function that has no __target__("xsave") attribute. ++ If we want _xgetbv() call inlining, then we should use asm version ++ instead of calling _xgetbv(). ++ Note:intrinsic is broke before GCC 8.2: ++ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85684 ++*/ + +-#ifdef _WIN32 +-#include ++#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1100) \ ++ || defined(_MSC_VER) && (_MSC_VER >= 1600) && (_MSC_FULL_VER >= 160040219) \ ++ || defined(__GNUC__) && (__GNUC__ >= 9) \ ++ || defined(__clang__) && (__clang_major__ >= 9) ++// we define ATTRIB_XGETBV, if we want to use predefined _xgetbv() from compiler ++#if defined(__INTEL_COMPILER) ++#define ATTRIB_XGETBV ++#elif defined(__GNUC__) || defined(__clang__) ++// we don't define ATTRIB_XGETBV here, because asm version is better for inlining. ++// #define ATTRIB_XGETBV __attribute__((__target__("xsave"))) ++#else ++#define ATTRIB_XGETBV ++#endif ++#endif ++ ++#if defined(ATTRIB_XGETBV) ++#include + #endif + +-BoolInt CPU_IsSupported_AVX2() ++ ++// XFEATURE_ENABLED_MASK/XCR0 ++#define MY_XCR_XFEATURE_ENABLED_MASK 0 ++ ++#if defined(ATTRIB_XGETBV) ++ATTRIB_XGETBV ++#endif ++static UInt64 x86_xgetbv_0(UInt32 num) + { +- Cx86cpuid p; +- CHECK_SYS_SSE_SUPPORT ++#if defined(ATTRIB_XGETBV) ++ { ++ return ++ #if (defined(_MSC_VER)) ++ _xgetbv(num); ++ #else ++ __builtin_ia32_xgetbv( ++ #if !defined(__clang__) ++ (int) ++ #endif ++ num); ++ #endif ++ } ++ ++#elif defined(__GNUC__) || defined(__clang__) || defined(__SUNPRO_CC) ++ ++ UInt32 a, d; ++ #if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) ++ __asm__ ++ ( ++ "xgetbv" ++ : "=a"(a), "=d"(d) : "c"(num) : "cc" ++ ); ++ #else // is old gcc ++ __asm__ ++ ( ++ ".byte 0x0f, 0x01, 0xd0" "\n\t" ++ : "=a"(a), "=d"(d) : "c"(num) : "cc" ++ ); ++ #endif ++ return ((UInt64)d << 32) | a; ++ // return a; ++ ++#elif defined(_MSC_VER) && !defined(MY_CPU_AMD64) ++ ++ UInt32 a, d; ++ __asm { ++ push eax ++ push edx ++ push ecx ++ mov ecx, num; ++ // xor ecx, ecx // = MY_XCR_XFEATURE_ENABLED_MASK ++ _emit 0x0f ++ _emit 0x01 ++ _emit 0xd0 ++ mov a, eax ++ mov d, edx ++ pop ecx ++ pop edx ++ pop eax ++ } ++ return ((UInt64)d << 32) | a; ++ // return a; ++ ++#else // it's unknown compiler ++ // #error "Need xgetbv function" ++ UNUSED_VAR(num) ++ // for MSVC-X64 we could call external function from external file. ++ /* Actually we had checked OSXSAVE/AVX in cpuid before. ++ So it's expected that OS supports at least AVX and below. */ ++ // if (num != MY_XCR_XFEATURE_ENABLED_MASK) return 0; // if not XCR0 ++ return ++ // (1 << 0) | // x87 ++ (1 << 1) // SSE ++ | (1 << 2); // AVX ++ ++#endif ++} + ++#ifdef _WIN32 ++/* ++ Windows versions do not know about new ISA extensions that ++ can be introduced. But we still can use new extensions, ++ even if Windows doesn't report about supporting them, ++ But we can use new extensions, only if Windows knows about new ISA extension ++ that changes the number or size of registers: SSE, AVX/XSAVE, AVX512 ++ So it's enough to check ++ MY_PF_AVX_INSTRUCTIONS_AVAILABLE ++ instead of ++ MY_PF_AVX2_INSTRUCTIONS_AVAILABLE ++*/ ++#define MY_PF_XSAVE_ENABLED 17 ++// #define MY_PF_SSSE3_INSTRUCTIONS_AVAILABLE 36 ++// #define MY_PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37 ++// #define MY_PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38 ++// #define MY_PF_AVX_INSTRUCTIONS_AVAILABLE 39 ++// #define MY_PF_AVX2_INSTRUCTIONS_AVAILABLE 40 ++// #define MY_PF_AVX512F_INSTRUCTIONS_AVAILABLE 41 ++#endif ++ ++BoolInt CPU_IsSupported_AVX(void) ++{ + #ifdef _WIN32 +- #define MY__PF_XSAVE_ENABLED 17 +- if (!IsProcessorFeaturePresent(MY__PF_XSAVE_ENABLED)) ++ if (!IsProcessorFeaturePresent(MY_PF_XSAVE_ENABLED)) + return False7z; ++ /* PF_AVX_INSTRUCTIONS_AVAILABLE probably is supported starting from ++ some latest Win10 revisions. But we need AVX in older Windows also. ++ So we don't use the following check: */ ++ /* ++ if (!IsProcessorFeaturePresent(MY_PF_AVX_INSTRUCTIONS_AVAILABLE)) ++ return False7z; ++ */ + #endif + +- if (!x86cpuid_CheckAndRead(&p)) ++ /* ++ OS must use new special XSAVE/XRSTOR instructions to save ++ AVX registers when it required for context switching. ++ At OS statring: ++ OS sets CR4.OSXSAVE flag to signal the processor that OS supports the XSAVE extensions. ++ Also OS sets bitmask in XCR0 register that defines what ++ registers will be processed by XSAVE instruction: ++ XCR0.SSE[bit 0] - x87 registers and state ++ XCR0.SSE[bit 1] - SSE registers and state ++ XCR0.AVX[bit 2] - AVX registers and state ++ CR4.OSXSAVE is reflected to CPUID.1:ECX.OSXSAVE[bit 27]. ++ So we can read that bit in user-space. ++ XCR0 is available for reading in user-space by new XGETBV instruction. ++ */ ++ { ++ const UInt32 c = x86cpuid_Func_1_ECX(); ++ if (0 == (1 ++ & (c >> 28) // AVX instructions are supported by hardware ++ & (c >> 27))) // OSXSAVE bit: XSAVE and related instructions are enabled by OS. ++ return False7z; ++ } ++ ++ /* also we can check ++ CPUID.1:ECX.XSAVE [bit 26] : that shows that ++ XSAVE, XRESTOR, XSETBV, XGETBV instructions are supported by hardware. ++ But that check is redundant, because if OSXSAVE bit is set, then XSAVE is also set */ ++ ++ /* If OS have enabled XSAVE extension instructions (OSXSAVE == 1), ++ in most cases we expect that OS also will support storing/restoring ++ for AVX and SSE states at least. ++ But to be ensure for that we call user-space instruction ++ XGETBV(0) to get XCR0 value that contains bitmask that defines ++ what exact states(registers) OS have enabled for storing/restoring. ++ */ ++ ++ { ++ const UInt32 bm = (UInt32)x86_xgetbv_0(MY_XCR_XFEATURE_ENABLED_MASK); ++ // printf("\n=== XGetBV=%d\n", bm); ++ return 1 ++ & (bm >> 1) // SSE state is supported (set by OS) for storing/restoring ++ & (bm >> 2); // AVX state is supported (set by OS) for storing/restoring ++ } ++ // since Win7SP1: we can use GetEnabledXStateFeatures(); ++} ++ ++ ++BoolInt CPU_IsSupported_AVX2(void) ++{ ++ if (!CPU_IsSupported_AVX()) + return False7z; +- if (p.maxFunc < 7) ++ if (z7_x86_cpuid_GetMaxFunc() < 7) + return False7z; + { +- UInt32 d[4] = { 0 }; +- MyCPUID(7, &d[0], &d[1], &d[2], &d[3]); ++ UInt32 d[4]; ++ z7_x86_cpuid(d, 7); + // printf("\ncpuid(7): ebx=%8x ecx=%8x\n", d[1], d[2]); + return 1 + & (d[1] >> 5); // avx2 + } + } + +-BoolInt CPU_IsSupported_VAES_AVX2() ++BoolInt CPU_IsSupported_VAES_AVX2(void) + { +- Cx86cpuid p; +- CHECK_SYS_SSE_SUPPORT +- +- #ifdef _WIN32 +- #define MY__PF_XSAVE_ENABLED 17 +- if (!IsProcessorFeaturePresent(MY__PF_XSAVE_ENABLED)) ++ if (!CPU_IsSupported_AVX()) + return False7z; +- #endif +- +- if (!x86cpuid_CheckAndRead(&p)) +- return False7z; +- if (p.maxFunc < 7) ++ if (z7_x86_cpuid_GetMaxFunc() < 7) + return False7z; + { +- UInt32 d[4] = { 0 }; +- MyCPUID(7, &d[0], &d[1], &d[2], &d[3]); ++ UInt32 d[4]; ++ z7_x86_cpuid(d, 7); + // printf("\ncpuid(7): ebx=%8x ecx=%8x\n", d[1], d[2]); + return 1 + & (d[1] >> 5) // avx2 +@@ -328,20 +679,15 @@ BoolInt CPU_IsSupported_VAES_AVX2() + } + } + +-BoolInt CPU_IsSupported_PageGB() ++BoolInt CPU_IsSupported_PageGB(void) + { +- Cx86cpuid cpuid; +- if (!x86cpuid_CheckAndRead(&cpuid)) +- return False7z; ++ CHECK_CPUID_IS_SUPPORTED + { +- UInt32 d[4] = { 0 }; +- MyCPUID(0x80000000, &d[0], &d[1], &d[2], &d[3]); ++ UInt32 d[4]; ++ z7_x86_cpuid(d, 0x80000000); + if (d[0] < 0x80000001) + return False7z; +- } +- { +- UInt32 d[4] = { 0 }; +- MyCPUID(0x80000001, &d[0], &d[1], &d[2], &d[3]); ++ z7_x86_cpuid(d, 0x80000001); + return (d[3] >> 26) & 1; + } + } +@@ -351,11 +697,11 @@ BoolInt CPU_IsSupported_PageGB() + + #ifdef _WIN32 + +-#include ++#include "7zWindows.h" + +-BoolInt CPU_IsSupported_CRC32() { return IsProcessorFeaturePresent(PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE) ? 1 : 0; } +-BoolInt CPU_IsSupported_CRYPTO() { return IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) ? 1 : 0; } +-BoolInt CPU_IsSupported_NEON() { return IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE) ? 1 : 0; } ++BoolInt CPU_IsSupported_CRC32(void) { return IsProcessorFeaturePresent(PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE) ? 1 : 0; } ++BoolInt CPU_IsSupported_CRYPTO(void) { return IsProcessorFeaturePresent(PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) ? 1 : 0; } ++BoolInt CPU_IsSupported_NEON(void) { return IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE) ? 1 : 0; } + + #else + +@@ -378,28 +724,27 @@ static void Print_sysctlbyname(const char *name) + } + } + */ ++/* ++ Print_sysctlbyname("hw.pagesize"); ++ Print_sysctlbyname("machdep.cpu.brand_string"); ++*/ + +-static BoolInt My_sysctlbyname_Get_BoolInt(const char *name) ++static BoolInt z7_sysctlbyname_Get_BoolInt(const char *name) + { + UInt32 val = 0; +- if (My_sysctlbyname_Get_UInt32(name, &val) == 0 && val == 1) ++ if (z7_sysctlbyname_Get_UInt32(name, &val) == 0 && val == 1) + return 1; + return 0; + } + +- /* +- Print_sysctlbyname("hw.pagesize"); +- Print_sysctlbyname("machdep.cpu.brand_string"); +- */ +- + BoolInt CPU_IsSupported_CRC32(void) + { +- return My_sysctlbyname_Get_BoolInt("hw.optional.armv8_crc32"); ++ return z7_sysctlbyname_Get_BoolInt("hw.optional.armv8_crc32"); + } + + BoolInt CPU_IsSupported_NEON(void) + { +- return My_sysctlbyname_Get_BoolInt("hw.optional.neon"); ++ return z7_sysctlbyname_Get_BoolInt("hw.optional.neon"); + } + + #ifdef MY_CPU_ARM64 +@@ -461,15 +806,15 @@ MY_HWCAP_CHECK_FUNC (AES) + + #include + +-int My_sysctlbyname_Get(const char *name, void *buf, size_t *bufSize) ++int z7_sysctlbyname_Get(const char *name, void *buf, size_t *bufSize) + { + return sysctlbyname(name, buf, bufSize, NULL, 0); + } + +-int My_sysctlbyname_Get_UInt32(const char *name, UInt32 *val) ++int z7_sysctlbyname_Get_UInt32(const char *name, UInt32 *val) + { + size_t bufSize = sizeof(*val); +- int res = My_sysctlbyname_Get(name, val, &bufSize); ++ const int res = z7_sysctlbyname_Get(name, val, &bufSize); + if (res == 0 && bufSize != sizeof(*val)) + return EFAULT; + return res; +diff --git a/src/lzma/CpuArch.h b/src/lzma/CpuArch.h +index 529d3a502..8e5d8a543 100644 +--- a/src/lzma/CpuArch.h ++++ b/src/lzma/CpuArch.h +@@ -1,8 +1,8 @@ + /* CpuArch.h -- CPU specific code +-2021-07-13 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __CPU_ARCH_H +-#define __CPU_ARCH_H ++#ifndef ZIP7_INC_CPU_ARCH_H ++#define ZIP7_INC_CPU_ARCH_H + + #include "7zTypes.h" + +@@ -51,7 +51,13 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + || defined(__AARCH64EB__) \ + || defined(__aarch64__) + #define MY_CPU_ARM64 +- #define MY_CPU_NAME "arm64" ++ #ifdef __ILP32__ ++ #define MY_CPU_NAME "arm64-32" ++ #define MY_CPU_SIZEOF_POINTER 4 ++ #else ++ #define MY_CPU_NAME "arm64" ++ #define MY_CPU_SIZEOF_POINTER 8 ++ #endif + #define MY_CPU_64BIT + #endif + +@@ -68,8 +74,10 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + #define MY_CPU_ARM + + #if defined(__thumb__) || defined(__THUMBEL__) || defined(_M_ARMT) ++ #define MY_CPU_ARMT + #define MY_CPU_NAME "armt" + #else ++ #define MY_CPU_ARM32 + #define MY_CPU_NAME "arm" + #endif + /* #define MY_CPU_32BIT */ +@@ -103,6 +111,8 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + || defined(__PPC__) \ + || defined(_POWER) + ++#define MY_CPU_PPC_OR_PPC64 ++ + #if defined(__ppc64__) \ + || defined(__powerpc64__) \ + || defined(_LP64) \ +@@ -123,12 +133,15 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + #endif + + +-#if defined(__sparc64__) +- #define MY_CPU_NAME "sparc64" +- #define MY_CPU_64BIT +-#elif defined(__sparc__) +- #define MY_CPU_NAME "sparc" +- /* #define MY_CPU_32BIT */ ++#if defined(__riscv) \ ++ || defined(__riscv__) ++ #if __riscv_xlen == 32 ++ #define MY_CPU_NAME "riscv32" ++ #elif __riscv_xlen == 64 ++ #define MY_CPU_NAME "riscv64" ++ #else ++ #define MY_CPU_NAME "riscv" ++ #endif + #endif + + +@@ -194,6 +207,9 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + #error Stop_Compiling_Bad_Endian + #endif + ++#if !defined(MY_CPU_LE) && !defined(MY_CPU_BE) ++ #error Stop_Compiling_CPU_ENDIAN_must_be_detected_at_compile_time ++#endif + + #if defined(MY_CPU_32BIT) && defined(MY_CPU_64BIT) + #error Stop_Compiling_Bad_32_64_BIT +@@ -250,6 +266,67 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + + + ++#ifdef __has_builtin ++ #define Z7_has_builtin(x) __has_builtin(x) ++#else ++ #define Z7_has_builtin(x) 0 ++#endif ++ ++ ++#define Z7_BSWAP32_CONST(v) \ ++ ( (((UInt32)(v) << 24) ) \ ++ | (((UInt32)(v) << 8) & (UInt32)0xff0000) \ ++ | (((UInt32)(v) >> 8) & (UInt32)0xff00 ) \ ++ | (((UInt32)(v) >> 24) )) ++ ++ ++#if defined(_MSC_VER) && (_MSC_VER >= 1300) ++ ++#include ++ ++/* Note: these macros will use bswap instruction (486), that is unsupported in 386 cpu */ ++ ++#pragma intrinsic(_byteswap_ushort) ++#pragma intrinsic(_byteswap_ulong) ++#pragma intrinsic(_byteswap_uint64) ++ ++#define Z7_BSWAP16(v) _byteswap_ushort(v) ++#define Z7_BSWAP32(v) _byteswap_ulong (v) ++#define Z7_BSWAP64(v) _byteswap_uint64(v) ++#define Z7_CPU_FAST_BSWAP_SUPPORTED ++ ++#elif (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) \ ++ || (defined(__clang__) && Z7_has_builtin(__builtin_bswap16)) ++ ++#define Z7_BSWAP16(v) __builtin_bswap16(v) ++#define Z7_BSWAP32(v) __builtin_bswap32(v) ++#define Z7_BSWAP64(v) __builtin_bswap64(v) ++#define Z7_CPU_FAST_BSWAP_SUPPORTED ++ ++#else ++ ++#define Z7_BSWAP16(v) ((UInt16) \ ++ ( ((UInt32)(v) << 8) \ ++ | ((UInt32)(v) >> 8) \ ++ )) ++ ++#define Z7_BSWAP32(v) Z7_BSWAP32_CONST(v) ++ ++#define Z7_BSWAP64(v) \ ++ ( ( ( (UInt64)(v) ) << 8 * 7 ) \ ++ | ( ( (UInt64)(v) & ((UInt32)0xff << 8 * 1) ) << 8 * 5 ) \ ++ | ( ( (UInt64)(v) & ((UInt32)0xff << 8 * 2) ) << 8 * 3 ) \ ++ | ( ( (UInt64)(v) & ((UInt32)0xff << 8 * 3) ) << 8 * 1 ) \ ++ | ( ( (UInt64)(v) >> 8 * 1 ) & ((UInt32)0xff << 8 * 3) ) \ ++ | ( ( (UInt64)(v) >> 8 * 3 ) & ((UInt32)0xff << 8 * 2) ) \ ++ | ( ( (UInt64)(v) >> 8 * 5 ) & ((UInt32)0xff << 8 * 1) ) \ ++ | ( ( (UInt64)(v) >> 8 * 7 ) ) \ ++ ) ++ ++#endif ++ ++ ++ + #ifdef MY_CPU_LE + #if defined(MY_CPU_X86_OR_AMD64) \ + || defined(MY_CPU_ARM64) +@@ -269,13 +346,11 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + #define GetUi32(p) (*(const UInt32 *)(const void *)(p)) + #ifdef MY_CPU_LE_UNALIGN_64 + #define GetUi64(p) (*(const UInt64 *)(const void *)(p)) ++#define SetUi64(p, v) { *(UInt64 *)(void *)(p) = (v); } + #endif + + #define SetUi16(p, v) { *(UInt16 *)(void *)(p) = (v); } + #define SetUi32(p, v) { *(UInt32 *)(void *)(p) = (v); } +-#ifdef MY_CPU_LE_UNALIGN_64 +-#define SetUi64(p, v) { *(UInt64 *)(void *)(p) = (v); } +-#endif + + #else + +@@ -302,51 +377,26 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + #endif + + +-#ifndef MY_CPU_LE_UNALIGN_64 +- ++#ifndef GetUi64 + #define GetUi64(p) (GetUi32(p) | ((UInt64)GetUi32(((const Byte *)(p)) + 4) << 32)) ++#endif + ++#ifndef SetUi64 + #define SetUi64(p, v) { Byte *_ppp2_ = (Byte *)(p); UInt64 _vvv2_ = (v); \ +- SetUi32(_ppp2_ , (UInt32)_vvv2_); \ +- SetUi32(_ppp2_ + 4, (UInt32)(_vvv2_ >> 32)); } +- ++ SetUi32(_ppp2_ , (UInt32)_vvv2_) \ ++ SetUi32(_ppp2_ + 4, (UInt32)(_vvv2_ >> 32)) } + #endif + + ++#if defined(MY_CPU_LE_UNALIGN) && defined(Z7_CPU_FAST_BSWAP_SUPPORTED) + ++#define GetBe32(p) Z7_BSWAP32 (*(const UInt32 *)(const void *)(p)) ++#define SetBe32(p, v) { (*(UInt32 *)(void *)(p)) = Z7_BSWAP32(v); } + +-#ifdef __has_builtin +- #define MY__has_builtin(x) __has_builtin(x) +-#else +- #define MY__has_builtin(x) 0 ++#if defined(MY_CPU_LE_UNALIGN_64) ++#define GetBe64(p) Z7_BSWAP64 (*(const UInt64 *)(const void *)(p)) + #endif + +-#if defined(MY_CPU_LE_UNALIGN) && /* defined(_WIN64) && */ defined(_MSC_VER) && (_MSC_VER >= 1300) +- +-/* Note: we use bswap instruction, that is unsupported in 386 cpu */ +- +-#include +- +-#pragma intrinsic(_byteswap_ushort) +-#pragma intrinsic(_byteswap_ulong) +-#pragma intrinsic(_byteswap_uint64) +- +-/* #define GetBe16(p) _byteswap_ushort(*(const UInt16 *)(const Byte *)(p)) */ +-#define GetBe32(p) _byteswap_ulong (*(const UInt32 *)(const void *)(p)) +-#define GetBe64(p) _byteswap_uint64(*(const UInt64 *)(const void *)(p)) +- +-#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = _byteswap_ulong(v) +- +-#elif defined(MY_CPU_LE_UNALIGN) && ( \ +- (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))) \ +- || (defined(__clang__) && MY__has_builtin(__builtin_bswap16)) ) +- +-/* #define GetBe16(p) __builtin_bswap16(*(const UInt16 *)(const void *)(p)) */ +-#define GetBe32(p) __builtin_bswap32(*(const UInt32 *)(const void *)(p)) +-#define GetBe64(p) __builtin_bswap64(*(const UInt64 *)(const void *)(p)) +- +-#define SetBe32(p, v) (*(UInt32 *)(void *)(p)) = __builtin_bswap32(v) +- + #else + + #define GetBe32(p) ( \ +@@ -355,8 +405,6 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + ((UInt32)((const Byte *)(p))[2] << 8) | \ + ((const Byte *)(p))[3] ) + +-#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4)) +- + #define SetBe32(p, v) { Byte *_ppp_ = (Byte *)(p); UInt32 _vvv_ = (v); \ + _ppp_[0] = (Byte)(_vvv_ >> 24); \ + _ppp_[1] = (Byte)(_vvv_ >> 16); \ +@@ -365,50 +413,83 @@ MY_CPU_64BIT means that processor can work with 64-bit registers. + + #endif + ++#ifndef GetBe64 ++#define GetBe64(p) (((UInt64)GetBe32(p) << 32) | GetBe32(((const Byte *)(p)) + 4)) ++#endif + + #ifndef GetBe16 +- + #define GetBe16(p) ( (UInt16) ( \ + ((UInt16)((const Byte *)(p))[0] << 8) | \ + ((const Byte *)(p))[1] )) ++#endif + ++ ++#if defined(MY_CPU_BE) ++#define Z7_CONV_BE_TO_NATIVE_CONST32(v) (v) ++#define Z7_CONV_LE_TO_NATIVE_CONST32(v) Z7_BSWAP32_CONST(v) ++#define Z7_CONV_NATIVE_TO_BE_32(v) (v) ++#elif defined(MY_CPU_LE) ++#define Z7_CONV_BE_TO_NATIVE_CONST32(v) Z7_BSWAP32_CONST(v) ++#define Z7_CONV_LE_TO_NATIVE_CONST32(v) (v) ++#define Z7_CONV_NATIVE_TO_BE_32(v) Z7_BSWAP32(v) ++#else ++#error Stop_Compiling_Unknown_Endian_CONV + #endif + + ++#if defined(MY_CPU_BE) + +-#ifdef MY_CPU_X86_OR_AMD64 ++#define GetBe32a(p) (*(const UInt32 *)(const void *)(p)) ++#define GetBe16a(p) (*(const UInt16 *)(const void *)(p)) ++#define SetBe32a(p, v) { *(UInt32 *)(void *)(p) = (v); } ++#define SetBe16a(p, v) { *(UInt16 *)(void *)(p) = (v); } + +-typedef struct +-{ +- UInt32 maxFunc; +- UInt32 vendor[3]; +- UInt32 ver; +- UInt32 b; +- UInt32 c; +- UInt32 d; +-} Cx86cpuid; ++#define GetUi32a(p) GetUi32(p) ++#define GetUi16a(p) GetUi16(p) ++#define SetUi32a(p, v) SetUi32(p, v) ++#define SetUi16a(p, v) SetUi16(p, v) + +-enum +-{ +- CPU_FIRM_INTEL, +- CPU_FIRM_AMD, +- CPU_FIRM_VIA +-}; ++#elif defined(MY_CPU_LE) + +-void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d); ++#define GetUi32a(p) (*(const UInt32 *)(const void *)(p)) ++#define GetUi16a(p) (*(const UInt16 *)(const void *)(p)) ++#define SetUi32a(p, v) { *(UInt32 *)(void *)(p) = (v); } ++#define SetUi16a(p, v) { *(UInt16 *)(void *)(p) = (v); } + +-BoolInt x86cpuid_CheckAndRead(Cx86cpuid *p); +-int x86cpuid_GetFirm(const Cx86cpuid *p); ++#define GetBe32a(p) GetBe32(p) ++#define GetBe16a(p) GetBe16(p) ++#define SetBe32a(p, v) SetBe32(p, v) ++#define SetBe16a(p, v) SetBe16(p, v) + +-#define x86cpuid_GetFamily(ver) (((ver >> 16) & 0xFF0) | ((ver >> 8) & 0xF)) +-#define x86cpuid_GetModel(ver) (((ver >> 12) & 0xF0) | ((ver >> 4) & 0xF)) +-#define x86cpuid_GetStepping(ver) (ver & 0xF) ++#else ++#error Stop_Compiling_Unknown_Endian_CPU_a ++#endif + +-BoolInt CPU_Is_InOrder(void); ++ ++#if defined(MY_CPU_X86_OR_AMD64) \ ++ || defined(MY_CPU_ARM_OR_ARM64) \ ++ || defined(MY_CPU_PPC_OR_PPC64) ++ #define Z7_CPU_FAST_ROTATE_SUPPORTED ++#endif ++ ++ ++#ifdef MY_CPU_X86_OR_AMD64 ++ ++void Z7_FASTCALL z7_x86_cpuid(UInt32 a[4], UInt32 function); ++UInt32 Z7_FASTCALL z7_x86_cpuid_GetMaxFunc(void); ++#if defined(MY_CPU_AMD64) ++#define Z7_IF_X86_CPUID_SUPPORTED ++#else ++#define Z7_IF_X86_CPUID_SUPPORTED if (z7_x86_cpuid_GetMaxFunc()) ++#endif + + BoolInt CPU_IsSupported_AES(void); ++BoolInt CPU_IsSupported_AVX(void); + BoolInt CPU_IsSupported_AVX2(void); + BoolInt CPU_IsSupported_VAES_AVX2(void); ++BoolInt CPU_IsSupported_CMOV(void); ++BoolInt CPU_IsSupported_SSE(void); ++BoolInt CPU_IsSupported_SSE2(void); + BoolInt CPU_IsSupported_SSSE3(void); + BoolInt CPU_IsSupported_SSE41(void); + BoolInt CPU_IsSupported_SHA(void); +@@ -433,8 +514,8 @@ BoolInt CPU_IsSupported_AES(void); + #endif + + #if defined(__APPLE__) +-int My_sysctlbyname_Get(const char *name, void *buf, size_t *bufSize); +-int My_sysctlbyname_Get_UInt32(const char *name, UInt32 *val); ++int z7_sysctlbyname_Get(const char *name, void *buf, size_t *bufSize); ++int z7_sysctlbyname_Get_UInt32(const char *name, UInt32 *val); + #endif + + EXTERN_C_END +diff --git a/src/lzma/Delta.h b/src/lzma/Delta.h +index 2fa54ad67..706095417 100644 +--- a/src/lzma/Delta.h ++++ b/src/lzma/Delta.h +@@ -1,8 +1,8 @@ + /* Delta.h -- Delta converter +-2013-01-18 : Igor Pavlov : Public domain */ ++2023-03-03 : Igor Pavlov : Public domain */ + +-#ifndef __DELTA_H +-#define __DELTA_H ++#ifndef ZIP7_INC_DELTA_H ++#define ZIP7_INC_DELTA_H + + #include "7zTypes.h" + +diff --git a/src/lzma/DllSecur.c b/src/lzma/DllSecur.c +index d81508c0b..02a0f977e 100644 +--- a/src/lzma/DllSecur.c ++++ b/src/lzma/DllSecur.c +@@ -1,110 +1,111 @@ + /* DllSecur.c -- DLL loading security +-2021-12-25 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + + #ifdef _WIN32 + +-#include ++#include "7zWindows.h" + + #include "DllSecur.h" + + #ifndef UNDER_CE + ++#if (defined(__GNUC__) && (__GNUC__ >= 8)) || defined(__clang__) ++ // #pragma GCC diagnostic ignored "-Wcast-function-type" ++#endif ++ ++#if defined(__clang__) || defined(__GNUC__) ++typedef void (*Z7_voidFunction)(void); ++#define MY_CAST_FUNC (Z7_voidFunction) ++#elif defined(_MSC_VER) && _MSC_VER > 1920 ++#define MY_CAST_FUNC (void *) ++// #pragma warning(disable : 4191) // 'type cast': unsafe conversion from 'FARPROC' to 'void (__cdecl *)()' ++#else ++#define MY_CAST_FUNC ++#endif ++ + typedef BOOL (WINAPI *Func_SetDefaultDllDirectories)(DWORD DirectoryFlags); + + #define MY_LOAD_LIBRARY_SEARCH_USER_DIRS 0x400 + #define MY_LOAD_LIBRARY_SEARCH_SYSTEM32 0x800 + ++#define DELIM "\0" ++ + static const char * const g_Dlls = ++ "userenv" ++ DELIM "setupapi" ++ DELIM "apphelp" ++ DELIM "propsys" ++ DELIM "dwmapi" ++ DELIM "cryptbase" ++ DELIM "oleacc" ++ DELIM "clbcatq" ++ DELIM "version" + #ifndef _CONSOLE +- "UXTHEME\0" ++ DELIM "uxtheme" + #endif +- "USERENV\0" +- "SETUPAPI\0" +- "APPHELP\0" +- "PROPSYS\0" +- "DWMAPI\0" +- "CRYPTBASE\0" +- "OLEACC\0" +- "CLBCATQ\0" +- "VERSION\0" +- ; ++ DELIM; ++ ++#endif + ++#ifdef __clang__ ++ #pragma GCC diagnostic ignored "-Wdeprecated-declarations" ++#endif ++#if defined (_MSC_VER) && _MSC_VER >= 1900 ++// sysinfoapi.h: kit10: GetVersion was declared deprecated ++#pragma warning(disable : 4996) + #endif + +-// #define MY_CAST_FUNC (void(*)()) +-#define MY_CAST_FUNC ++#define IF_NON_VISTA_SET_DLL_DIRS_AND_RETURN \ ++ if ((UInt16)GetVersion() != 6) { \ ++ const \ ++ Func_SetDefaultDllDirectories setDllDirs = \ ++ (Func_SetDefaultDllDirectories) MY_CAST_FUNC GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), \ ++ "SetDefaultDllDirectories"); \ ++ if (setDllDirs) if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS)) return; } + +-void My_SetDefaultDllDirectories() ++void My_SetDefaultDllDirectories(void) + { + #ifndef UNDER_CE +- +- OSVERSIONINFO vi; +- vi.dwOSVersionInfoSize = sizeof(vi); +- if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0) +- { +- Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories) +- MY_CAST_FUNC GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories"); +- if (setDllDirs) +- if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS)) +- return; +- } +- ++ IF_NON_VISTA_SET_DLL_DIRS_AND_RETURN + #endif + } + + +-void LoadSecurityDlls() ++void LoadSecurityDlls(void) + { + #ifndef UNDER_CE +- +- wchar_t buf[MAX_PATH + 100]; +- +- { +- // at Vista (ver 6.0) : CoCreateInstance(CLSID_ShellLink, ...) doesn't work after SetDefaultDllDirectories() : Check it ??? +- OSVERSIONINFO vi; +- vi.dwOSVersionInfoSize = sizeof(vi); +- if (!GetVersionEx(&vi) || vi.dwMajorVersion != 6 || vi.dwMinorVersion != 0) +- { +- Func_SetDefaultDllDirectories setDllDirs = (Func_SetDefaultDllDirectories) +- MY_CAST_FUNC GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "SetDefaultDllDirectories"); +- if (setDllDirs) +- if (setDllDirs(MY_LOAD_LIBRARY_SEARCH_SYSTEM32 | MY_LOAD_LIBRARY_SEARCH_USER_DIRS)) +- return; +- } +- } +- +- { +- unsigned len = GetSystemDirectoryW(buf, MAX_PATH + 2); +- if (len == 0 || len > MAX_PATH) +- return; +- } ++ // at Vista (ver 6.0) : CoCreateInstance(CLSID_ShellLink, ...) doesn't work after SetDefaultDllDirectories() : Check it ??? ++ IF_NON_VISTA_SET_DLL_DIRS_AND_RETURN + { ++ wchar_t buf[MAX_PATH + 100]; + const char *dll; +- unsigned pos = (unsigned)lstrlenW(buf); +- ++ unsigned pos = GetSystemDirectoryW(buf, MAX_PATH + 2); ++ if (pos == 0 || pos > MAX_PATH) ++ return; + if (buf[pos - 1] != '\\') + buf[pos++] = '\\'; +- +- for (dll = g_Dlls; dll[0] != 0;) ++ for (dll = g_Dlls; *dll != 0;) + { +- unsigned k = 0; ++ wchar_t *dest = &buf[pos]; + for (;;) + { +- char c = *dll++; +- buf[pos + k] = (Byte)c; +- k++; ++ const char c = *dll++; + if (c == 0) + break; ++ *dest++ = (Byte)c; + } +- +- lstrcatW(buf, L".dll"); ++ dest[0] = '.'; ++ dest[1] = 'd'; ++ dest[2] = 'l'; ++ dest[3] = 'l'; ++ dest[4] = 0; ++ // lstrcatW(buf, L".dll"); + LoadLibraryExW(buf, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + } + } +- + #endif + } + +-#endif ++#endif // _WIN32 +diff --git a/src/lzma/DllSecur.h b/src/lzma/DllSecur.h +index 64ff26cd9..9fa415382 100644 +--- a/src/lzma/DllSecur.h ++++ b/src/lzma/DllSecur.h +@@ -1,8 +1,8 @@ + /* DllSecur.h -- DLL loading for security +-2018-02-19 : Igor Pavlov : Public domain */ ++2023-03-03 : Igor Pavlov : Public domain */ + +-#ifndef __DLL_SECUR_H +-#define __DLL_SECUR_H ++#ifndef ZIP7_INC_DLL_SECUR_H ++#define ZIP7_INC_DLL_SECUR_H + + #include "7zTypes.h" + +diff --git a/src/lzma/LzFind.c b/src/lzma/LzFind.c +index 1b73c2848..0fbd5aae5 100644 +--- a/src/lzma/LzFind.c ++++ b/src/lzma/LzFind.c +@@ -1,5 +1,5 @@ + /* LzFind.c -- Match finder for LZ algorithms +-2021-11-29 : Igor Pavlov : Public domain */ ++2023-03-14 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -17,7 +17,7 @@ + #define kEmptyHashValue 0 + + #define kMaxValForNormalize ((UInt32)0) +-// #define kMaxValForNormalize ((UInt32)(1 << 20) + 0xFFF) // for debug ++// #define kMaxValForNormalize ((UInt32)(1 << 20) + 0xfff) // for debug + + // #define kNormalizeAlign (1 << 7) // alignment for speculated accesses + +@@ -67,10 +67,10 @@ + + static void LzInWindow_Free(CMatchFinder *p, ISzAllocPtr alloc) + { +- if (!p->directInput) ++ // if (!p->directInput) + { +- ISzAlloc_Free(alloc, p->bufferBase); +- p->bufferBase = NULL; ++ ISzAlloc_Free(alloc, p->bufBase); ++ p->bufBase = NULL; + } + } + +@@ -79,7 +79,7 @@ static int LzInWindow_Create2(CMatchFinder *p, UInt32 blockSize, ISzAllocPtr all + { + if (blockSize == 0) + return 0; +- if (!p->bufferBase || p->blockSize != blockSize) ++ if (!p->bufBase || p->blockSize != blockSize) + { + // size_t blockSizeT; + LzInWindow_Free(p, alloc); +@@ -101,11 +101,11 @@ static int LzInWindow_Create2(CMatchFinder *p, UInt32 blockSize, ISzAllocPtr all + #endif + */ + +- p->bufferBase = (Byte *)ISzAlloc_Alloc(alloc, blockSize); +- // printf("\nbufferBase = %p\n", p->bufferBase); ++ p->bufBase = (Byte *)ISzAlloc_Alloc(alloc, blockSize); ++ // printf("\nbufferBase = %p\n", p->bufBase); + // return 0; // for debug + } +- return (p->bufferBase != NULL); ++ return (p->bufBase != NULL); + } + + static const Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return p->buffer; } +@@ -113,7 +113,7 @@ static const Byte *MatchFinder_GetPointerToCurrentPos(CMatchFinder *p) { return + static UInt32 MatchFinder_GetNumAvailableBytes(CMatchFinder *p) { return GET_AVAIL_BYTES(p); } + + +-MY_NO_INLINE ++Z7_NO_INLINE + static void MatchFinder_ReadBlock(CMatchFinder *p) + { + if (p->streamEndWasReached || p->result != SZ_OK) +@@ -127,8 +127,8 @@ static void MatchFinder_ReadBlock(CMatchFinder *p) + UInt32 curSize = 0xFFFFFFFF - GET_AVAIL_BYTES(p); + if (curSize > p->directInputRem) + curSize = (UInt32)p->directInputRem; +- p->directInputRem -= curSize; + p->streamPos += curSize; ++ p->directInputRem -= curSize; + if (p->directInputRem == 0) + p->streamEndWasReached = 1; + return; +@@ -136,8 +136,8 @@ static void MatchFinder_ReadBlock(CMatchFinder *p) + + for (;;) + { +- Byte *dest = p->buffer + GET_AVAIL_BYTES(p); +- size_t size = (size_t)(p->bufferBase + p->blockSize - dest); ++ const Byte *dest = p->buffer + GET_AVAIL_BYTES(p); ++ size_t size = (size_t)(p->bufBase + p->blockSize - dest); + if (size == 0) + { + /* we call ReadBlock() after NeedMove() and MoveBlock(). +@@ -153,7 +153,14 @@ static void MatchFinder_ReadBlock(CMatchFinder *p) + // #define kRead 3 + // if (size > kRead) size = kRead; // for debug + +- p->result = ISeqInStream_Read(p->stream, dest, &size); ++ /* ++ // we need cast (Byte *)dest. ++ #ifdef __clang__ ++ #pragma GCC diagnostic ignored "-Wcast-qual" ++ #endif ++ */ ++ p->result = ISeqInStream_Read(p->stream, ++ p->bufBase + (dest - p->bufBase), &size); + if (p->result != SZ_OK) + return; + if (size == 0) +@@ -173,14 +180,14 @@ static void MatchFinder_ReadBlock(CMatchFinder *p) + + + +-MY_NO_INLINE ++Z7_NO_INLINE + void MatchFinder_MoveBlock(CMatchFinder *p) + { +- const size_t offset = (size_t)(p->buffer - p->bufferBase) - p->keepSizeBefore; ++ const size_t offset = (size_t)(p->buffer - p->bufBase) - p->keepSizeBefore; + const size_t keepBefore = (offset & (kBlockMoveAlign - 1)) + p->keepSizeBefore; +- p->buffer = p->bufferBase + keepBefore; +- memmove(p->bufferBase, +- p->bufferBase + (offset & ~((size_t)kBlockMoveAlign - 1)), ++ p->buffer = p->bufBase + keepBefore; ++ memmove(p->bufBase, ++ p->bufBase + (offset & ~((size_t)kBlockMoveAlign - 1)), + keepBefore + (size_t)GET_AVAIL_BYTES(p)); + } + +@@ -198,7 +205,7 @@ int MatchFinder_NeedMove(CMatchFinder *p) + return 0; + if (p->streamEndWasReached || p->result != SZ_OK) + return 0; +- return ((size_t)(p->bufferBase + p->blockSize - p->buffer) <= p->keepSizeAfter); ++ return ((size_t)(p->bufBase + p->blockSize - p->buffer) <= p->keepSizeAfter); + } + + void MatchFinder_ReadIfRequired(CMatchFinder *p) +@@ -214,6 +221,8 @@ static void MatchFinder_SetDefaultSettings(CMatchFinder *p) + p->cutValue = 32; + p->btMode = 1; + p->numHashBytes = 4; ++ p->numHashBytes_Min = 2; ++ p->numHashOutBits = 0; + p->bigHash = 0; + } + +@@ -222,8 +231,10 @@ static void MatchFinder_SetDefaultSettings(CMatchFinder *p) + void MatchFinder_Construct(CMatchFinder *p) + { + unsigned i; +- p->bufferBase = NULL; ++ p->buffer = NULL; ++ p->bufBase = NULL; + p->directInput = 0; ++ p->stream = NULL; + p->hash = NULL; + p->expectedDataSize = (UInt64)(Int64)-1; + MatchFinder_SetDefaultSettings(p); +@@ -238,6 +249,8 @@ void MatchFinder_Construct(CMatchFinder *p) + } + } + ++#undef kCrcPoly ++ + static void MatchFinder_FreeThisClassMemory(CMatchFinder *p, ISzAllocPtr alloc) + { + ISzAlloc_Free(alloc, p->hash); +@@ -252,7 +265,7 @@ void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc) + + static CLzRef* AllocRefs(size_t num, ISzAllocPtr alloc) + { +- size_t sizeInBytes = (size_t)num * sizeof(CLzRef); ++ const size_t sizeInBytes = (size_t)num * sizeof(CLzRef); + if (sizeInBytes / sizeof(CLzRef) != num) + return NULL; + return (CLzRef *)ISzAlloc_Alloc(alloc, sizeInBytes); +@@ -298,6 +311,62 @@ static UInt32 GetBlockSize(CMatchFinder *p, UInt32 historySize) + } + + ++// input is historySize ++static UInt32 MatchFinder_GetHashMask2(CMatchFinder *p, UInt32 hs) ++{ ++ if (p->numHashBytes == 2) ++ return (1 << 16) - 1; ++ if (hs != 0) ++ hs--; ++ hs |= (hs >> 1); ++ hs |= (hs >> 2); ++ hs |= (hs >> 4); ++ hs |= (hs >> 8); ++ // we propagated 16 bits in (hs). Low 16 bits must be set later ++ if (hs >= (1 << 24)) ++ { ++ if (p->numHashBytes == 3) ++ hs = (1 << 24) - 1; ++ /* if (bigHash) mode, GetHeads4b() in LzFindMt.c needs (hs >= ((1 << 24) - 1))) */ ++ } ++ // (hash_size >= (1 << 16)) : Required for (numHashBytes > 2) ++ hs |= (1 << 16) - 1; /* don't change it! */ ++ // bt5: we adjust the size with recommended minimum size ++ if (p->numHashBytes >= 5) ++ hs |= (256 << kLzHash_CrcShift_2) - 1; ++ return hs; ++} ++ ++// input is historySize ++static UInt32 MatchFinder_GetHashMask(CMatchFinder *p, UInt32 hs) ++{ ++ if (p->numHashBytes == 2) ++ return (1 << 16) - 1; ++ if (hs != 0) ++ hs--; ++ hs |= (hs >> 1); ++ hs |= (hs >> 2); ++ hs |= (hs >> 4); ++ hs |= (hs >> 8); ++ // we propagated 16 bits in (hs). Low 16 bits must be set later ++ hs >>= 1; ++ if (hs >= (1 << 24)) ++ { ++ if (p->numHashBytes == 3) ++ hs = (1 << 24) - 1; ++ else ++ hs >>= 1; ++ /* if (bigHash) mode, GetHeads4b() in LzFindMt.c needs (hs >= ((1 << 24) - 1))) */ ++ } ++ // (hash_size >= (1 << 16)) : Required for (numHashBytes > 2) ++ hs |= (1 << 16) - 1; /* don't change it! */ ++ // bt5: we adjust the size with recommended minimum size ++ if (p->numHashBytes >= 5) ++ hs |= (256 << kLzHash_CrcShift_2) - 1; ++ return hs; ++} ++ ++ + int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, + ISzAllocPtr alloc) +@@ -318,78 +387,91 @@ int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + p->blockSize = 0; + if (p->directInput || LzInWindow_Create2(p, GetBlockSize(p, historySize), alloc)) + { +- const UInt32 newCyclicBufferSize = historySize + 1; // do not change it +- UInt32 hs; +- p->matchMaxLen = matchMaxLen; ++ size_t hashSizeSum; + { +- // UInt32 hs4; +- p->fixedHashSize = 0; +- hs = (1 << 16) - 1; +- if (p->numHashBytes != 2) ++ UInt32 hs; ++ UInt32 hsCur; ++ ++ if (p->numHashOutBits != 0) + { +- hs = historySize; +- if (hs > p->expectedDataSize) +- hs = (UInt32)p->expectedDataSize; +- if (hs != 0) +- hs--; +- hs |= (hs >> 1); +- hs |= (hs >> 2); +- hs |= (hs >> 4); +- hs |= (hs >> 8); +- // we propagated 16 bits in (hs). Low 16 bits must be set later +- hs >>= 1; +- if (hs >= (1 << 24)) +- { +- if (p->numHashBytes == 3) +- hs = (1 << 24) - 1; +- else +- hs >>= 1; +- /* if (bigHash) mode, GetHeads4b() in LzFindMt.c needs (hs >= ((1 << 24) - 1))) */ +- } +- +- // hs = ((UInt32)1 << 25) - 1; // for test +- ++ unsigned numBits = p->numHashOutBits; ++ const unsigned nbMax = ++ (p->numHashBytes == 2 ? 16 : ++ (p->numHashBytes == 3 ? 24 : 32)); ++ if (numBits > nbMax) ++ numBits = nbMax; ++ if (numBits >= 32) ++ hs = (UInt32)0 - 1; ++ else ++ hs = ((UInt32)1 << numBits) - 1; + // (hash_size >= (1 << 16)) : Required for (numHashBytes > 2) + hs |= (1 << 16) - 1; /* don't change it! */ +- +- // bt5: we adjust the size with recommended minimum size + if (p->numHashBytes >= 5) + hs |= (256 << kLzHash_CrcShift_2) - 1; ++ { ++ const UInt32 hs2 = MatchFinder_GetHashMask2(p, historySize); ++ if (hs > hs2) ++ hs = hs2; ++ } ++ hsCur = hs; ++ if (p->expectedDataSize < historySize) ++ { ++ const UInt32 hs2 = MatchFinder_GetHashMask2(p, (UInt32)p->expectedDataSize); ++ if (hsCur > hs2) ++ hsCur = hs2; ++ } + } +- p->hashMask = hs; +- hs++; +- +- /* +- hs4 = (1 << 20); +- if (hs4 > hs) +- hs4 = hs; +- // hs4 = (1 << 16); // for test +- p->hash4Mask = hs4 - 1; +- */ ++ else ++ { ++ hs = MatchFinder_GetHashMask(p, historySize); ++ hsCur = hs; ++ if (p->expectedDataSize < historySize) ++ { ++ hsCur = MatchFinder_GetHashMask(p, (UInt32)p->expectedDataSize); ++ if (hsCur > hs) // is it possible? ++ hsCur = hs; ++ } ++ } ++ ++ p->hashMask = hsCur; + +- if (p->numHashBytes > 2) p->fixedHashSize += kHash2Size; +- if (p->numHashBytes > 3) p->fixedHashSize += kHash3Size; +- // if (p->numHashBytes > 4) p->fixedHashSize += hs4; // kHash4Size; +- hs += p->fixedHashSize; ++ hashSizeSum = hs; ++ hashSizeSum++; ++ if (hashSizeSum < hs) ++ return 0; ++ { ++ UInt32 fixedHashSize = 0; ++ if (p->numHashBytes > 2 && p->numHashBytes_Min <= 2) fixedHashSize += kHash2Size; ++ if (p->numHashBytes > 3 && p->numHashBytes_Min <= 3) fixedHashSize += kHash3Size; ++ // if (p->numHashBytes > 4) p->fixedHashSize += hs4; // kHash4Size; ++ hashSizeSum += fixedHashSize; ++ p->fixedHashSize = fixedHashSize; ++ } + } + ++ p->matchMaxLen = matchMaxLen; ++ + { + size_t newSize; + size_t numSons; ++ const UInt32 newCyclicBufferSize = historySize + 1; // do not change it + p->historySize = historySize; +- p->hashSizeSum = hs; + p->cyclicBufferSize = newCyclicBufferSize; // it must be = (historySize + 1) + + numSons = newCyclicBufferSize; + if (p->btMode) + numSons <<= 1; +- newSize = hs + numSons; ++ newSize = hashSizeSum + numSons; ++ ++ if (numSons < newCyclicBufferSize || newSize < numSons) ++ return 0; + + // aligned size is not required here, but it can be better for some loops + #define NUM_REFS_ALIGN_MASK 0xF + newSize = (newSize + NUM_REFS_ALIGN_MASK) & ~(size_t)NUM_REFS_ALIGN_MASK; + +- if (p->hash && p->numRefs == newSize) ++ // 22.02: we don't reallocate buffer, if old size is enough ++ if (p->hash && p->numRefs >= newSize) + return 1; + + MatchFinder_FreeThisClassMemory(p, alloc); +@@ -398,7 +480,7 @@ int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + + if (p->hash) + { +- p->son = p->hash + p->hashSizeSum; ++ p->son = p->hash + hashSizeSum; + return 1; + } + } +@@ -470,7 +552,8 @@ void MatchFinder_Init_HighHash(CMatchFinder *p) + + void MatchFinder_Init_4(CMatchFinder *p) + { +- p->buffer = p->bufferBase; ++ if (!p->directInput) ++ p->buffer = p->bufBase; + { + /* kEmptyHashValue = 0 (Zero) is used in hash tables as NO-VALUE marker. + the code in CMatchFinderMt expects (pos = 1) */ +@@ -507,20 +590,20 @@ void MatchFinder_Init(CMatchFinder *p) + + + #ifdef MY_CPU_X86_OR_AMD64 +- #if defined(__clang__) && (__clang_major__ >= 8) \ +- || defined(__GNUC__) && (__GNUC__ >= 8) \ +- || defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1900) +- #define USE_SATUR_SUB_128 +- #define USE_AVX2 +- #define ATTRIB_SSE41 __attribute__((__target__("sse4.1"))) +- #define ATTRIB_AVX2 __attribute__((__target__("avx2"))) ++ #if defined(__clang__) && (__clang_major__ >= 4) \ ++ || defined(Z7_GCC_VERSION) && (Z7_GCC_VERSION >= 40701) ++ // || defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1900) ++ ++ #define USE_LZFIND_SATUR_SUB_128 ++ #define USE_LZFIND_SATUR_SUB_256 ++ #define LZFIND_ATTRIB_SSE41 __attribute__((__target__("sse4.1"))) ++ #define LZFIND_ATTRIB_AVX2 __attribute__((__target__("avx2"))) + #elif defined(_MSC_VER) + #if (_MSC_VER >= 1600) +- #define USE_SATUR_SUB_128 +- #if (_MSC_VER >= 1900) +- #define USE_AVX2 +- #include // avx +- #endif ++ #define USE_LZFIND_SATUR_SUB_128 ++ #endif ++ #if (_MSC_VER >= 1900) ++ #define USE_LZFIND_SATUR_SUB_256 + #endif + #endif + +@@ -529,16 +612,16 @@ void MatchFinder_Init(CMatchFinder *p) + + #if defined(__clang__) && (__clang_major__ >= 8) \ + || defined(__GNUC__) && (__GNUC__ >= 8) +- #define USE_SATUR_SUB_128 ++ #define USE_LZFIND_SATUR_SUB_128 + #ifdef MY_CPU_ARM64 +- // #define ATTRIB_SSE41 __attribute__((__target__(""))) ++ // #define LZFIND_ATTRIB_SSE41 __attribute__((__target__(""))) + #else +- // #define ATTRIB_SSE41 __attribute__((__target__("fpu=crypto-neon-fp-armv8"))) ++ // #define LZFIND_ATTRIB_SSE41 __attribute__((__target__("fpu=crypto-neon-fp-armv8"))) + #endif + + #elif defined(_MSC_VER) + #if (_MSC_VER >= 1910) +- #define USE_SATUR_SUB_128 ++ #define USE_LZFIND_SATUR_SUB_128 + #endif + #endif + +@@ -550,121 +633,130 @@ void MatchFinder_Init(CMatchFinder *p) + + #endif + +-/* +-#ifndef ATTRIB_SSE41 +- #define ATTRIB_SSE41 +-#endif +-#ifndef ATTRIB_AVX2 +- #define ATTRIB_AVX2 +-#endif +-*/ + +-#ifdef USE_SATUR_SUB_128 ++#ifdef USE_LZFIND_SATUR_SUB_128 + +-// #define _SHOW_HW_STATUS ++// #define Z7_SHOW_HW_STATUS + +-#ifdef _SHOW_HW_STATUS ++#ifdef Z7_SHOW_HW_STATUS + #include +-#define _PRF(x) x +-_PRF(;) ++#define PRF(x) x ++PRF(;) + #else +-#define _PRF(x) ++#define PRF(x) + #endif + ++ + #ifdef MY_CPU_ARM_OR_ARM64 + + #ifdef MY_CPU_ARM64 +-// #define FORCE_SATUR_SUB_128 ++// #define FORCE_LZFIND_SATUR_SUB_128 + #endif ++typedef uint32x4_t LzFind_v128; ++#define SASUB_128_V(v, s) \ ++ vsubq_u32(vmaxq_u32(v, s), s) + +-typedef uint32x4_t v128; +-#define SASUB_128(i) \ +- *(v128 *)(void *)(items + (i) * 4) = \ +- vsubq_u32(vmaxq_u32(*(const v128 *)(const void *)(items + (i) * 4), sub2), sub2); +- +-#else ++#else // MY_CPU_ARM_OR_ARM64 + + #include // sse4.1 + +-typedef __m128i v128; +-#define SASUB_128(i) \ +- *(v128 *)(void *)(items + (i) * 4) = \ +- _mm_sub_epi32(_mm_max_epu32(*(const v128 *)(const void *)(items + (i) * 4), sub2), sub2); // SSE 4.1 ++typedef __m128i LzFind_v128; ++// SSE 4.1 ++#define SASUB_128_V(v, s) \ ++ _mm_sub_epi32(_mm_max_epu32(v, s), s) + +-#endif ++#endif // MY_CPU_ARM_OR_ARM64 + + ++#define SASUB_128(i) \ ++ *( LzFind_v128 *)( void *)(items + (i) * 4) = SASUB_128_V( \ ++ *(const LzFind_v128 *)(const void *)(items + (i) * 4), sub2); ++ + +-MY_NO_INLINE ++Z7_NO_INLINE + static +-#ifdef ATTRIB_SSE41 +-ATTRIB_SSE41 ++#ifdef LZFIND_ATTRIB_SSE41 ++LZFIND_ATTRIB_SSE41 + #endif + void +-MY_FAST_CALL ++Z7_FASTCALL + LzFind_SaturSub_128(UInt32 subValue, CLzRef *items, const CLzRef *lim) + { +- v128 sub2 = ++ const LzFind_v128 sub2 = + #ifdef MY_CPU_ARM_OR_ARM64 + vdupq_n_u32(subValue); + #else + _mm_set_epi32((Int32)subValue, (Int32)subValue, (Int32)subValue, (Int32)subValue); + #endif ++ Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE + do + { +- SASUB_128(0) +- SASUB_128(1) +- SASUB_128(2) +- SASUB_128(3) +- items += 4 * 4; ++ SASUB_128(0) SASUB_128(1) items += 2 * 4; ++ SASUB_128(0) SASUB_128(1) items += 2 * 4; + } + while (items != lim); + } + + + +-#ifdef USE_AVX2 ++#ifdef USE_LZFIND_SATUR_SUB_256 + + #include // avx ++/* ++clang :immintrin.h uses ++#if !(defined(_MSC_VER) || defined(__SCE__)) || __has_feature(modules) || \ ++ defined(__AVX2__) ++#include ++#endif ++so we need for clang-cl */ + +-#define SASUB_256(i) *(__m256i *)(void *)(items + (i) * 8) = _mm256_sub_epi32(_mm256_max_epu32(*(const __m256i *)(const void *)(items + (i) * 8), sub2), sub2); // AVX2 ++#if defined(__clang__) ++#include ++#include ++#endif + +-MY_NO_INLINE ++// AVX2: ++#define SASUB_256(i) \ ++ *( __m256i *)( void *)(items + (i) * 8) = \ ++ _mm256_sub_epi32(_mm256_max_epu32( \ ++ *(const __m256i *)(const void *)(items + (i) * 8), sub2), sub2); ++ ++Z7_NO_INLINE + static +-#ifdef ATTRIB_AVX2 +-ATTRIB_AVX2 ++#ifdef LZFIND_ATTRIB_AVX2 ++LZFIND_ATTRIB_AVX2 + #endif + void +-MY_FAST_CALL ++Z7_FASTCALL + LzFind_SaturSub_256(UInt32 subValue, CLzRef *items, const CLzRef *lim) + { +- __m256i sub2 = _mm256_set_epi32( ++ const __m256i sub2 = _mm256_set_epi32( + (Int32)subValue, (Int32)subValue, (Int32)subValue, (Int32)subValue, + (Int32)subValue, (Int32)subValue, (Int32)subValue, (Int32)subValue); ++ Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE + do + { +- SASUB_256(0) +- SASUB_256(1) +- items += 2 * 8; ++ SASUB_256(0) SASUB_256(1) items += 2 * 8; ++ SASUB_256(0) SASUB_256(1) items += 2 * 8; + } + while (items != lim); + } +-#endif // USE_AVX2 ++#endif // USE_LZFIND_SATUR_SUB_256 + +-#ifndef FORCE_SATUR_SUB_128 +-typedef void (MY_FAST_CALL *LZFIND_SATUR_SUB_CODE_FUNC)( ++#ifndef FORCE_LZFIND_SATUR_SUB_128 ++typedef void (Z7_FASTCALL *LZFIND_SATUR_SUB_CODE_FUNC)( + UInt32 subValue, CLzRef *items, const CLzRef *lim); + static LZFIND_SATUR_SUB_CODE_FUNC g_LzFind_SaturSub; +-#endif // FORCE_SATUR_SUB_128 ++#endif // FORCE_LZFIND_SATUR_SUB_128 + +-#endif // USE_SATUR_SUB_128 ++#endif // USE_LZFIND_SATUR_SUB_128 + + + // kEmptyHashValue must be zero +-// #define SASUB_32(i) v = items[i]; m = v - subValue; if (v < subValue) m = kEmptyHashValue; items[i] = m; +-#define SASUB_32(i) v = items[i]; if (v < subValue) v = subValue; items[i] = v - subValue; ++// #define SASUB_32(i) { UInt32 v = items[i]; UInt32 m = v - subValue; if (v < subValue) m = kEmptyHashValue; items[i] = m; } ++#define SASUB_32(i) { UInt32 v = items[i]; if (v < subValue) v = subValue; items[i] = v - subValue; } + +-#ifdef FORCE_SATUR_SUB_128 ++#ifdef FORCE_LZFIND_SATUR_SUB_128 + + #define DEFAULT_SaturSub LzFind_SaturSub_128 + +@@ -672,24 +764,19 @@ static LZFIND_SATUR_SUB_CODE_FUNC g_LzFind_SaturSub; + + #define DEFAULT_SaturSub LzFind_SaturSub_32 + +-MY_NO_INLINE ++Z7_NO_INLINE + static + void +-MY_FAST_CALL ++Z7_FASTCALL + LzFind_SaturSub_32(UInt32 subValue, CLzRef *items, const CLzRef *lim) + { ++ Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE + do + { +- UInt32 v; +- SASUB_32(0) +- SASUB_32(1) +- SASUB_32(2) +- SASUB_32(3) +- SASUB_32(4) +- SASUB_32(5) +- SASUB_32(6) +- SASUB_32(7) +- items += 8; ++ SASUB_32(0) SASUB_32(1) items += 2; ++ SASUB_32(0) SASUB_32(1) items += 2; ++ SASUB_32(0) SASUB_32(1) items += 2; ++ SASUB_32(0) SASUB_32(1) items += 2; + } + while (items != lim); + } +@@ -697,27 +784,23 @@ LzFind_SaturSub_32(UInt32 subValue, CLzRef *items, const CLzRef *lim) + #endif + + +-MY_NO_INLINE ++Z7_NO_INLINE + void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems) + { +- #define K_NORM_ALIGN_BLOCK_SIZE (1 << 6) +- +- CLzRef *lim; +- +- for (; numItems != 0 && ((unsigned)(ptrdiff_t)items & (K_NORM_ALIGN_BLOCK_SIZE - 1)) != 0; numItems--) ++ #define LZFIND_NORM_ALIGN_BLOCK_SIZE (1 << 7) ++ Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE ++ for (; numItems != 0 && ((unsigned)(ptrdiff_t)items & (LZFIND_NORM_ALIGN_BLOCK_SIZE - 1)) != 0; numItems--) + { +- UInt32 v; +- SASUB_32(0); ++ SASUB_32(0) + items++; + } +- + { +- #define K_NORM_ALIGN_MASK (K_NORM_ALIGN_BLOCK_SIZE / 4 - 1) +- lim = items + (numItems & ~(size_t)K_NORM_ALIGN_MASK); +- numItems &= K_NORM_ALIGN_MASK; ++ const size_t k_Align_Mask = (LZFIND_NORM_ALIGN_BLOCK_SIZE / 4 - 1); ++ CLzRef *lim = items + (numItems & ~(size_t)k_Align_Mask); ++ numItems &= k_Align_Mask; + if (items != lim) + { +- #if defined(USE_SATUR_SUB_128) && !defined(FORCE_SATUR_SUB_128) ++ #if defined(USE_LZFIND_SATUR_SUB_128) && !defined(FORCE_LZFIND_SATUR_SUB_128) + if (g_LzFind_SaturSub) + g_LzFind_SaturSub(subValue, items, lim); + else +@@ -726,12 +809,10 @@ void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems) + } + items = lim; + } +- +- ++ Z7_PRAGMA_OPT_DISABLE_LOOP_UNROLL_VECTORIZE + for (; numItems != 0; numItems--) + { +- UInt32 v; +- SASUB_32(0); ++ SASUB_32(0) + items++; + } + } +@@ -740,7 +821,7 @@ void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems) + + // call MatchFinder_CheckLimits() only after (p->pos++) update + +-MY_NO_INLINE ++Z7_NO_INLINE + static void MatchFinder_CheckLimits(CMatchFinder *p) + { + if (// !p->streamEndWasReached && p->result == SZ_OK && +@@ -768,11 +849,14 @@ static void MatchFinder_CheckLimits(CMatchFinder *p) + const UInt32 subValue = (p->pos - p->historySize - 1) /* & ~(UInt32)(kNormalizeAlign - 1) */; + // const UInt32 subValue = (1 << 15); // for debug + // printf("\nMatchFinder_Normalize() subValue == 0x%x\n", subValue); +- size_t numSonRefs = p->cyclicBufferSize; +- if (p->btMode) +- numSonRefs <<= 1; +- Inline_MatchFinder_ReduceOffsets(p, subValue); +- MatchFinder_Normalize3(subValue, p->hash, (size_t)p->hashSizeSum + numSonRefs); ++ MatchFinder_REDUCE_OFFSETS(p, subValue) ++ MatchFinder_Normalize3(subValue, p->hash, (size_t)p->hashMask + 1 + p->fixedHashSize); ++ { ++ size_t numSonRefs = p->cyclicBufferSize; ++ if (p->btMode) ++ numSonRefs <<= 1; ++ MatchFinder_Normalize3(subValue, p->son, numSonRefs); ++ } + } + + if (p->cyclicBufferPos == p->cyclicBufferSize) +@@ -785,7 +869,7 @@ static void MatchFinder_CheckLimits(CMatchFinder *p) + /* + (lenLimit > maxLen) + */ +-MY_FORCE_INLINE ++Z7_FORCE_INLINE + static UInt32 * Hc_GetMatchesSpec(size_t lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + size_t _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, + UInt32 *d, unsigned maxLen) +@@ -867,7 +951,7 @@ static UInt32 * Hc_GetMatchesSpec(size_t lenLimit, UInt32 curMatch, UInt32 pos, + } + + +-MY_FORCE_INLINE ++Z7_FORCE_INLINE + UInt32 * GetMatchesSpec1(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const Byte *cur, CLzRef *son, + size_t _cyclicBufferPos, UInt32 _cyclicBufferSize, UInt32 cutValue, + UInt32 *d, UInt32 maxLen) +@@ -1004,7 +1088,7 @@ static void SkipMatchesSpec(UInt32 lenLimit, UInt32 curMatch, UInt32 pos, const + + #define MOVE_POS_RET MOVE_POS return distances; + +-MY_NO_INLINE ++Z7_NO_INLINE + static void MatchFinder_MovePos(CMatchFinder *p) + { + /* we go here at the end of stream data, when (avail < num_hash_bytes) +@@ -1015,11 +1099,11 @@ static void MatchFinder_MovePos(CMatchFinder *p) + if (p->btMode) + p->sons[(p->cyclicBufferPos << p->btMode) + 1] = 0; // kEmptyHashValue + */ +- MOVE_POS; ++ MOVE_POS + } + + #define GET_MATCHES_HEADER2(minLen, ret_op) \ +- unsigned lenLimit; UInt32 hv; Byte *cur; UInt32 curMatch; \ ++ unsigned lenLimit; UInt32 hv; const Byte *cur; UInt32 curMatch; \ + lenLimit = (unsigned)p->lenLimit; { if (lenLimit < minLen) { MatchFinder_MovePos(p); ret_op; }} \ + cur = p->buffer; + +@@ -1028,11 +1112,11 @@ static void MatchFinder_MovePos(CMatchFinder *p) + + #define MF_PARAMS(p) lenLimit, curMatch, p->pos, p->buffer, p->son, p->cyclicBufferPos, p->cyclicBufferSize, p->cutValue + +-#define SKIP_FOOTER SkipMatchesSpec(MF_PARAMS(p)); MOVE_POS; } while (--num); ++#define SKIP_FOOTER SkipMatchesSpec(MF_PARAMS(p)); MOVE_POS } while (--num); + + #define GET_MATCHES_FOOTER_BASE(_maxLen_, func) \ + distances = func(MF_PARAMS(p), \ +- distances, (UInt32)_maxLen_); MOVE_POS_RET; ++ distances, (UInt32)_maxLen_); MOVE_POS_RET + + #define GET_MATCHES_FOOTER_BT(_maxLen_) \ + GET_MATCHES_FOOTER_BASE(_maxLen_, GetMatchesSpec1) +@@ -1052,7 +1136,7 @@ static void MatchFinder_MovePos(CMatchFinder *p) + static UInt32* Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + { + GET_MATCHES_HEADER(2) +- HASH2_CALC; ++ HASH2_CALC + curMatch = p->hash[hv]; + p->hash[hv] = p->pos; + GET_MATCHES_FOOTER_BT(1) +@@ -1061,7 +1145,7 @@ static UInt32* Bt2_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + UInt32* Bt3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + { + GET_MATCHES_HEADER(3) +- HASH_ZIP_CALC; ++ HASH_ZIP_CALC + curMatch = p->hash[hv]; + p->hash[hv] = p->pos; + GET_MATCHES_FOOTER_BT(2) +@@ -1082,7 +1166,7 @@ static UInt32* Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + UInt32 *hash; + GET_MATCHES_HEADER(3) + +- HASH3_CALC; ++ HASH3_CALC + + hash = p->hash; + pos = p->pos; +@@ -1107,7 +1191,7 @@ static UInt32* Bt3_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + if (maxLen == lenLimit) + { + SkipMatchesSpec(MF_PARAMS(p)); +- MOVE_POS_RET; ++ MOVE_POS_RET + } + } + +@@ -1123,7 +1207,7 @@ static UInt32* Bt4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + UInt32 *hash; + GET_MATCHES_HEADER(4) + +- HASH4_CALC; ++ HASH4_CALC + + hash = p->hash; + pos = p->pos; +@@ -1190,7 +1274,7 @@ static UInt32* Bt5_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + UInt32 *hash; + GET_MATCHES_HEADER(5) + +- HASH5_CALC; ++ HASH5_CALC + + hash = p->hash; + pos = p->pos; +@@ -1246,7 +1330,7 @@ static UInt32* Bt5_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + if (maxLen == lenLimit) + { + SkipMatchesSpec(MF_PARAMS(p)); +- MOVE_POS_RET; ++ MOVE_POS_RET + } + break; + } +@@ -1263,7 +1347,7 @@ static UInt32* Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + UInt32 *hash; + GET_MATCHES_HEADER(4) + +- HASH4_CALC; ++ HASH4_CALC + + hash = p->hash; + pos = p->pos; +@@ -1314,12 +1398,12 @@ static UInt32* Hc4_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + if (maxLen == lenLimit) + { + p->son[p->cyclicBufferPos] = curMatch; +- MOVE_POS_RET; ++ MOVE_POS_RET + } + break; + } + +- GET_MATCHES_FOOTER_HC(maxLen); ++ GET_MATCHES_FOOTER_HC(maxLen) + } + + +@@ -1330,7 +1414,7 @@ static UInt32 * Hc5_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + UInt32 *hash; + GET_MATCHES_HEADER(5) + +- HASH5_CALC; ++ HASH5_CALC + + hash = p->hash; + pos = p->pos; +@@ -1386,19 +1470,19 @@ static UInt32 * Hc5_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + if (maxLen == lenLimit) + { + p->son[p->cyclicBufferPos] = curMatch; +- MOVE_POS_RET; ++ MOVE_POS_RET + } + break; + } + +- GET_MATCHES_FOOTER_HC(maxLen); ++ GET_MATCHES_FOOTER_HC(maxLen) + } + + + UInt32* Hc3Zip_MatchFinder_GetMatches(CMatchFinder *p, UInt32 *distances) + { + GET_MATCHES_HEADER(3) +- HASH_ZIP_CALC; ++ HASH_ZIP_CALC + curMatch = p->hash[hv]; + p->hash[hv] = p->pos; + GET_MATCHES_FOOTER_HC(2) +@@ -1409,7 +1493,7 @@ static void Bt2_MatchFinder_Skip(CMatchFinder *p, UInt32 num) + { + SKIP_HEADER(2) + { +- HASH2_CALC; ++ HASH2_CALC + curMatch = p->hash[hv]; + p->hash[hv] = p->pos; + } +@@ -1420,7 +1504,7 @@ void Bt3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) + { + SKIP_HEADER(3) + { +- HASH_ZIP_CALC; ++ HASH_ZIP_CALC + curMatch = p->hash[hv]; + p->hash[hv] = p->pos; + } +@@ -1433,7 +1517,7 @@ static void Bt3_MatchFinder_Skip(CMatchFinder *p, UInt32 num) + { + UInt32 h2; + UInt32 *hash; +- HASH3_CALC; ++ HASH3_CALC + hash = p->hash; + curMatch = (hash + kFix3HashSize)[hv]; + hash[h2] = +@@ -1448,7 +1532,7 @@ static void Bt4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) + { + UInt32 h2, h3; + UInt32 *hash; +- HASH4_CALC; ++ HASH4_CALC + hash = p->hash; + curMatch = (hash + kFix4HashSize)[hv]; + hash [h2] = +@@ -1464,7 +1548,7 @@ static void Bt5_MatchFinder_Skip(CMatchFinder *p, UInt32 num) + { + UInt32 h2, h3; + UInt32 *hash; +- HASH5_CALC; ++ HASH5_CALC + hash = p->hash; + curMatch = (hash + kFix5HashSize)[hv]; + hash [h2] = +@@ -1478,7 +1562,7 @@ static void Bt5_MatchFinder_Skip(CMatchFinder *p, UInt32 num) + + #define HC_SKIP_HEADER(minLen) \ + do { if (p->lenLimit < minLen) { MatchFinder_MovePos(p); num--; continue; } { \ +- Byte *cur; \ ++ const Byte *cur; \ + UInt32 *hash; \ + UInt32 *son; \ + UInt32 pos = p->pos; \ +@@ -1510,7 +1594,7 @@ static void Hc4_MatchFinder_Skip(CMatchFinder *p, UInt32 num) + HC_SKIP_HEADER(4) + + UInt32 h2, h3; +- HASH4_CALC; ++ HASH4_CALC + curMatch = (hash + kFix4HashSize)[hv]; + hash [h2] = + (hash + kFix3HashSize)[h3] = +@@ -1540,7 +1624,7 @@ void Hc3Zip_MatchFinder_Skip(CMatchFinder *p, UInt32 num) + { + HC_SKIP_HEADER(3) + +- HASH_ZIP_CALC; ++ HASH_ZIP_CALC + curMatch = hash[hv]; + hash[hv] = pos; + +@@ -1590,17 +1674,17 @@ void MatchFinder_CreateVTable(CMatchFinder *p, IMatchFinder2 *vTable) + + + +-void LzFindPrepare() ++void LzFindPrepare(void) + { +- #ifndef FORCE_SATUR_SUB_128 +- #ifdef USE_SATUR_SUB_128 ++ #ifndef FORCE_LZFIND_SATUR_SUB_128 ++ #ifdef USE_LZFIND_SATUR_SUB_128 + LZFIND_SATUR_SUB_CODE_FUNC f = NULL; + #ifdef MY_CPU_ARM_OR_ARM64 + { + if (CPU_IsSupported_NEON()) + { + // #pragma message ("=== LzFind NEON") +- _PRF(printf("\n=== LzFind NEON\n")); ++ PRF(printf("\n=== LzFind NEON\n")); + f = LzFind_SaturSub_128; + } + // f = 0; // for debug +@@ -1609,20 +1693,25 @@ void LzFindPrepare() + if (CPU_IsSupported_SSE41()) + { + // #pragma message ("=== LzFind SSE41") +- _PRF(printf("\n=== LzFind SSE41\n")); ++ PRF(printf("\n=== LzFind SSE41\n")); + f = LzFind_SaturSub_128; + +- #ifdef USE_AVX2 ++ #ifdef USE_LZFIND_SATUR_SUB_256 + if (CPU_IsSupported_AVX2()) + { + // #pragma message ("=== LzFind AVX2") +- _PRF(printf("\n=== LzFind AVX2\n")); ++ PRF(printf("\n=== LzFind AVX2\n")); + f = LzFind_SaturSub_256; + } + #endif + } + #endif // MY_CPU_ARM_OR_ARM64 + g_LzFind_SaturSub = f; +- #endif // USE_SATUR_SUB_128 +- #endif // FORCE_SATUR_SUB_128 ++ #endif // USE_LZFIND_SATUR_SUB_128 ++ #endif // FORCE_LZFIND_SATUR_SUB_128 + } ++ ++ ++#undef MOVE_POS ++#undef MOVE_POS_RET ++#undef PRF +diff --git a/src/lzma/LzFind.h b/src/lzma/LzFind.h +index eea873ff6..a3f72c987 100644 +--- a/src/lzma/LzFind.h ++++ b/src/lzma/LzFind.h +@@ -1,8 +1,8 @@ + /* LzFind.h -- Match finder for LZ algorithms +-2021-07-13 : Igor Pavlov : Public domain */ ++2023-03-04 : Igor Pavlov : Public domain */ + +-#ifndef __LZ_FIND_H +-#define __LZ_FIND_H ++#ifndef ZIP7_INC_LZ_FIND_H ++#define ZIP7_INC_LZ_FIND_H + + #include "7zTypes.h" + +@@ -10,9 +10,9 @@ EXTERN_C_BEGIN + + typedef UInt32 CLzRef; + +-typedef struct _CMatchFinder ++typedef struct + { +- Byte *buffer; ++ const Byte *buffer; + UInt32 pos; + UInt32 posLimit; + UInt32 streamPos; /* wrap over Zero is allowed (streamPos < pos). Use (UInt32)(streamPos - pos) */ +@@ -32,8 +32,8 @@ typedef struct _CMatchFinder + UInt32 hashMask; + UInt32 cutValue; + +- Byte *bufferBase; +- ISeqInStream *stream; ++ Byte *bufBase; ++ ISeqInStreamPtr stream; + + UInt32 blockSize; + UInt32 keepSizeBefore; +@@ -43,7 +43,9 @@ typedef struct _CMatchFinder + size_t directInputRem; + UInt32 historySize; + UInt32 fixedHashSize; +- UInt32 hashSizeSum; ++ Byte numHashBytes_Min; ++ Byte numHashOutBits; ++ Byte _pad2_[2]; + SRes result; + UInt32 crc[256]; + size_t numRefs; +@@ -69,24 +71,45 @@ void MatchFinder_ReadIfRequired(CMatchFinder *p); + + void MatchFinder_Construct(CMatchFinder *p); + +-/* Conditions: +- historySize <= 3 GB +- keepAddBufferBefore + matchMaxLen + keepAddBufferAfter < 511MB ++/* (directInput = 0) is default value. ++ It's required to provide correct (directInput) value ++ before calling MatchFinder_Create(). ++ You can set (directInput) by any of the following calls: ++ - MatchFinder_SET_DIRECT_INPUT_BUF() ++ - MatchFinder_SET_STREAM() ++ - MatchFinder_SET_STREAM_MODE() + */ ++ ++#define MatchFinder_SET_DIRECT_INPUT_BUF(p, _src_, _srcLen_) { \ ++ (p)->stream = NULL; \ ++ (p)->directInput = 1; \ ++ (p)->buffer = (_src_); \ ++ (p)->directInputRem = (_srcLen_); } ++ ++/* ++#define MatchFinder_SET_STREAM_MODE(p) { \ ++ (p)->directInput = 0; } ++*/ ++ ++#define MatchFinder_SET_STREAM(p, _stream_) { \ ++ (p)->stream = _stream_; \ ++ (p)->directInput = 0; } ++ ++ + int MatchFinder_Create(CMatchFinder *p, UInt32 historySize, + UInt32 keepAddBufferBefore, UInt32 matchMaxLen, UInt32 keepAddBufferAfter, + ISzAllocPtr alloc); + void MatchFinder_Free(CMatchFinder *p, ISzAllocPtr alloc); + void MatchFinder_Normalize3(UInt32 subValue, CLzRef *items, size_t numItems); +-// void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue); + + /* +-#define Inline_MatchFinder_InitPos(p, val) \ ++#define MatchFinder_INIT_POS(p, val) \ + (p)->pos = (val); \ + (p)->streamPos = (val); + */ + +-#define Inline_MatchFinder_ReduceOffsets(p, subValue) \ ++// void MatchFinder_ReduceOffsets(CMatchFinder *p, UInt32 subValue); ++#define MatchFinder_REDUCE_OFFSETS(p, subValue) \ + (p)->pos -= (subValue); \ + (p)->streamPos -= (subValue); + +@@ -107,7 +130,7 @@ typedef const Byte * (*Mf_GetPointerToCurrentPos_Func)(void *object); + typedef UInt32 * (*Mf_GetMatches_Func)(void *object, UInt32 *distances); + typedef void (*Mf_Skip_Func)(void *object, UInt32); + +-typedef struct _IMatchFinder ++typedef struct + { + Mf_Init_Func Init; + Mf_GetNumAvailableBytes_Func GetNumAvailableBytes; +diff --git a/src/lzma/LzFindMt.c b/src/lzma/LzFindMt.c +index 1e0bfc87b..776be3ac6 100644 +--- a/src/lzma/LzFindMt.c ++++ b/src/lzma/LzFindMt.c +@@ -1,5 +1,5 @@ + /* LzFindMt.c -- multithreaded Match finder for LZ algorithms +-2021-12-21 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -69,7 +69,7 @@ extern UInt64 g_NumIters_Bytes; + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + h3 = (temp ^ ((UInt32)cur[2] << 8)) & (kHash3Size - 1); } + +-#define __MT_HASH4_CALC { \ ++#define MT_HASH4_CALC { \ + UInt32 temp = p->crc[cur[0]] ^ cur[1]; \ + h2 = temp & (kHash2Size - 1); \ + temp ^= ((UInt32)cur[2] << 8); \ +@@ -79,14 +79,14 @@ extern UInt64 g_NumIters_Bytes; + */ + + +-MY_NO_INLINE ++Z7_NO_INLINE + static void MtSync_Construct(CMtSync *p) + { + p->affinity = 0; + p->wasCreated = False7z; + p->csWasInitialized = False7z; + p->csWasEntered = False7z; +- Thread_Construct(&p->thread); ++ Thread_CONSTRUCT(&p->thread) + Event_Construct(&p->canStart); + Event_Construct(&p->wasStopped); + Semaphore_Construct(&p->freeSemaphore); +@@ -116,7 +116,7 @@ static void MtSync_Construct(CMtSync *p) + (p)->csWasEntered = False7z; } + + +-MY_NO_INLINE ++Z7_NO_INLINE + static UInt32 MtSync_GetNextBlock(CMtSync *p) + { + UInt32 numBlocks = 0; +@@ -140,14 +140,14 @@ static UInt32 MtSync_GetNextBlock(CMtSync *p) + + // buffer is UNLOCKED here + Semaphore_Wait(&p->filledSemaphore); +- LOCK_BUFFER(p); ++ LOCK_BUFFER(p) + return numBlocks; + } + + + /* if Writing (Processing) thread was started, we must call MtSync_StopWriting() */ + +-MY_NO_INLINE ++Z7_NO_INLINE + static void MtSync_StopWriting(CMtSync *p) + { + if (!Thread_WasCreated(&p->thread) || p->needStart) +@@ -185,7 +185,7 @@ static void MtSync_StopWriting(CMtSync *p) + } + + +-MY_NO_INLINE ++Z7_NO_INLINE + static void MtSync_Destruct(CMtSync *p) + { + PRF(printf("\nMtSync_Destruct %p\n", p)); +@@ -220,11 +220,11 @@ static void MtSync_Destruct(CMtSync *p) + + // #define RINOK_THREAD(x) { if ((x) != 0) return SZ_ERROR_THREAD; } + // we want to get real system error codes here instead of SZ_ERROR_THREAD +-#define RINOK_THREAD(x) RINOK(x) ++#define RINOK_THREAD(x) RINOK_WRes(x) + + + // call it before each new file (when new starting is required): +-MY_NO_INLINE ++Z7_NO_INLINE + static SRes MtSync_Init(CMtSync *p, UInt32 numBlocks) + { + WRes wres; +@@ -245,12 +245,12 @@ static WRes MtSync_Create_WRes(CMtSync *p, THREAD_FUNC_TYPE startAddress, void * + if (p->wasCreated) + return SZ_OK; + +- RINOK_THREAD(CriticalSection_Init(&p->cs)); ++ RINOK_THREAD(CriticalSection_Init(&p->cs)) + p->csWasInitialized = True7z; + p->csWasEntered = False7z; + +- RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->canStart)); +- RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->wasStopped)); ++ RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->canStart)) ++ RINOK_THREAD(AutoResetEvent_CreateNotSignaled(&p->wasStopped)) + + p->needStart = True7z; + p->exit = True7z; /* p->exit is unused before (canStart) Event. +@@ -264,13 +264,13 @@ static WRes MtSync_Create_WRes(CMtSync *p, THREAD_FUNC_TYPE startAddress, void * + else + wres = Thread_Create(&p->thread, startAddress, obj); + +- RINOK_THREAD(wres); ++ RINOK_THREAD(wres) + p->wasCreated = True7z; + return SZ_OK; + } + + +-MY_NO_INLINE ++Z7_NO_INLINE + static SRes MtSync_Create(CMtSync *p, THREAD_FUNC_TYPE startAddress, void *obj) + { + const WRes wres = MtSync_Create_WRes(p, startAddress, obj); +@@ -519,7 +519,7 @@ static void HashThreadFunc(CMatchFinderMt *mt) + if (mf->pos > (UInt32)kMtMaxValForNormalize - num) + { + const UInt32 subValue = (mf->pos - mf->historySize - 1); // & ~(UInt32)(kNormalizeAlign - 1); +- Inline_MatchFinder_ReduceOffsets(mf, subValue); ++ MatchFinder_REDUCE_OFFSETS(mf, subValue) + MatchFinder_Normalize3(subValue, mf->hash + mf->fixedHashSize, (size_t)mf->hashMask + 1); + } + +@@ -560,7 +560,7 @@ static void HashThreadFunc(CMatchFinderMt *mt) + */ + + +-UInt32 * MY_FAST_CALL GetMatchesSpecN_2(const Byte *lenLimit, size_t pos, const Byte *cur, CLzRef *son, ++UInt32 * Z7_FASTCALL GetMatchesSpecN_2(const Byte *lenLimit, size_t pos, const Byte *cur, CLzRef *son, + UInt32 _cutValue, UInt32 *d, size_t _maxLen, const UInt32 *hash, const UInt32 *limit, const UInt32 *size, + size_t _cyclicBufferPos, UInt32 _cyclicBufferSize, + UInt32 *posRes); +@@ -749,7 +749,7 @@ static void BtFillBlock(CMatchFinderMt *p, UInt32 globalBlockIndex) + } + + +-MY_NO_INLINE ++Z7_NO_INLINE + static void BtThreadFunc(CMatchFinderMt *mt) + { + CMtSync *p = &mt->btSync; +@@ -864,15 +864,15 @@ SRes MatchFinderMt_Create(CMatchFinderMt *p, UInt32 historySize, UInt32 keepAddB + if (!MatchFinder_Create(mf, historySize, keepAddBufferBefore, matchMaxLen, keepAddBufferAfter, alloc)) + return SZ_ERROR_MEM; + +- RINOK(MtSync_Create(&p->hashSync, HashThreadFunc2, p)); +- RINOK(MtSync_Create(&p->btSync, BtThreadFunc2, p)); ++ RINOK(MtSync_Create(&p->hashSync, HashThreadFunc2, p)) ++ RINOK(MtSync_Create(&p->btSync, BtThreadFunc2, p)) + return SZ_OK; + } + + + SRes MatchFinderMt_InitMt(CMatchFinderMt *p) + { +- RINOK(MtSync_Init(&p->hashSync, kMtHashNumBlocks)); ++ RINOK(MtSync_Init(&p->hashSync, kMtHashNumBlocks)) + return MtSync_Init(&p->btSync, kMtBtNumBlocks); + } + +@@ -941,7 +941,7 @@ void MatchFinderMt_ReleaseStream(CMatchFinderMt *p) + } + + +-MY_NO_INLINE ++Z7_NO_INLINE + static UInt32 MatchFinderMt_GetNextBlock_Bt(CMatchFinderMt *p) + { + if (p->failure_LZ_BT) +@@ -1163,7 +1163,7 @@ UInt32* MatchFinderMt_GetMatches_Bt4(CMatchFinderMt *p, UInt32 *d) + */ + + +-static UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *d) ++static UInt32 * MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *d) + { + UInt32 h2, h3, /* h4, */ c2, c3 /* , c4 */; + UInt32 *hash = p->hash; +@@ -1179,9 +1179,8 @@ static UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *d) + (hash + kFix3HashSize)[h3] = m; + // (hash + kFix4HashSize)[h4] = m; + +- #define _USE_H2 +- +- #ifdef _USE_H2 ++ // #define BT5_USE_H2 ++ // #ifdef BT5_USE_H2 + if (c2 >= matchMinPos && cur[(ptrdiff_t)c2 - (ptrdiff_t)m] == cur[0]) + { + d[1] = m - c2 - 1; +@@ -1197,8 +1196,8 @@ static UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *d) + } + d[0] = 3; + d += 2; +- +- #ifdef _USE_H4 ++ ++ #ifdef BT5_USE_H4 + if (c4 >= matchMinPos) + if ( + cur[(ptrdiff_t)c4 - (ptrdiff_t)m] == cur[0] && +@@ -1214,7 +1213,7 @@ static UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *d) + d[0] = 2; + d += 2; + } +- #endif ++ // #endif + + if (c3 >= matchMinPos && cur[(ptrdiff_t)c3 - (ptrdiff_t)m] == cur[0]) + { +@@ -1228,7 +1227,7 @@ static UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *d) + d += 2; + } + +- #ifdef _USE_H4 ++ #ifdef BT5_USE_H4 + if (c4 >= matchMinPos) + if ( + cur[(ptrdiff_t)c4 - (ptrdiff_t)m] == cur[0] && +@@ -1244,7 +1243,7 @@ static UInt32 *MixMatches4(CMatchFinderMt *p, UInt32 matchMinPos, UInt32 *d) + } + + +-static UInt32* MatchFinderMt2_GetMatches(CMatchFinderMt *p, UInt32 *d) ++static UInt32 * MatchFinderMt2_GetMatches(CMatchFinderMt *p, UInt32 *d) + { + const UInt32 *bt = p->btBufPos; + const UInt32 len = *bt++; +@@ -1268,7 +1267,7 @@ static UInt32* MatchFinderMt2_GetMatches(CMatchFinderMt *p, UInt32 *d) + + + +-static UInt32* MatchFinderMt_GetMatches(CMatchFinderMt *p, UInt32 *d) ++static UInt32 * MatchFinderMt_GetMatches(CMatchFinderMt *p, UInt32 *d) + { + const UInt32 *bt = p->btBufPos; + UInt32 len = *bt++; +@@ -1398,3 +1397,10 @@ void MatchFinderMt_CreateVTable(CMatchFinderMt *p, IMatchFinder2 *vTable) + break; + } + } ++ ++#undef RINOK_THREAD ++#undef PRF ++#undef MF ++#undef GetUi24hi_from32 ++#undef LOCK_BUFFER ++#undef UNLOCK_BUFFER +diff --git a/src/lzma/LzFindMt.h b/src/lzma/LzFindMt.h +index 660b7244d..db5923ea0 100644 +--- a/src/lzma/LzFindMt.h ++++ b/src/lzma/LzFindMt.h +@@ -1,15 +1,15 @@ + /* LzFindMt.h -- multithreaded Match finder for LZ algorithms +-2021-07-12 : Igor Pavlov : Public domain */ ++2023-03-05 : Igor Pavlov : Public domain */ + +-#ifndef __LZ_FIND_MT_H +-#define __LZ_FIND_MT_H ++#ifndef ZIP7_INC_LZ_FIND_MT_H ++#define ZIP7_INC_LZ_FIND_MT_H + + #include "LzFind.h" + #include "Threads.h" + + EXTERN_C_BEGIN + +-typedef struct _CMtSync ++typedef struct + { + UInt32 numProcessedBlocks; + CThread thread; +@@ -39,7 +39,7 @@ typedef UInt32 * (*Mf_Mix_Matches)(void *p, UInt32 matchMinPos, UInt32 *distance + typedef void (*Mf_GetHeads)(const Byte *buffer, UInt32 pos, + UInt32 *hash, UInt32 hashMask, UInt32 *heads, UInt32 numHeads, const UInt32 *crc); + +-typedef struct _CMatchFinderMt ++typedef struct + { + /* LZ */ + const Byte *pointerToCurPos; +diff --git a/src/lzma/LzFindOpt.c b/src/lzma/LzFindOpt.c +index 8ff006e07..85bdc136d 100644 +--- a/src/lzma/LzFindOpt.c ++++ b/src/lzma/LzFindOpt.c +@@ -1,5 +1,5 @@ + /* LzFindOpt.c -- multithreaded Match finder for LZ algorithms +-2021-07-13 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -41,8 +41,8 @@ UInt64 g_NumIters_Bytes; + // #define CYC_TO_POS_OFFSET 1 // for debug + + /* +-MY_NO_INLINE +-UInt32 * MY_FAST_CALL GetMatchesSpecN_1(const Byte *lenLimit, size_t pos, const Byte *cur, CLzRef *son, ++Z7_NO_INLINE ++UInt32 * Z7_FASTCALL GetMatchesSpecN_1(const Byte *lenLimit, size_t pos, const Byte *cur, CLzRef *son, + UInt32 _cutValue, UInt32 *d, size_t _maxLen, const UInt32 *hash, const UInt32 *limit, const UInt32 *size, UInt32 *posRes) + { + do +@@ -214,13 +214,13 @@ else + to eliminate "movsx" BUG in old MSVC x64 compiler. + */ + +-UInt32 * MY_FAST_CALL GetMatchesSpecN_2(const Byte *lenLimit, size_t pos, const Byte *cur, CLzRef *son, ++UInt32 * Z7_FASTCALL GetMatchesSpecN_2(const Byte *lenLimit, size_t pos, const Byte *cur, CLzRef *son, + UInt32 _cutValue, UInt32 *d, size_t _maxLen, const UInt32 *hash, const UInt32 *limit, const UInt32 *size, + size_t _cyclicBufferPos, UInt32 _cyclicBufferSize, + UInt32 *posRes); + +-MY_NO_INLINE +-UInt32 * MY_FAST_CALL GetMatchesSpecN_2(const Byte *lenLimit, size_t pos, const Byte *cur, CLzRef *son, ++Z7_NO_INLINE ++UInt32 * Z7_FASTCALL GetMatchesSpecN_2(const Byte *lenLimit, size_t pos, const Byte *cur, CLzRef *son, + UInt32 _cutValue, UInt32 *d, size_t _maxLen, const UInt32 *hash, const UInt32 *limit, const UInt32 *size, + size_t _cyclicBufferPos, UInt32 _cyclicBufferSize, + UInt32 *posRes) +@@ -404,7 +404,7 @@ else + /* + typedef UInt32 uint32plus; // size_t + +-UInt32 * MY_FAST_CALL GetMatchesSpecN_3(uint32plus lenLimit, size_t pos, const Byte *cur, CLzRef *son, ++UInt32 * Z7_FASTCALL GetMatchesSpecN_3(uint32plus lenLimit, size_t pos, const Byte *cur, CLzRef *son, + UInt32 _cutValue, UInt32 *d, uint32plus _maxLen, const UInt32 *hash, const UInt32 *limit, const UInt32 *size, + size_t _cyclicBufferPos, UInt32 _cyclicBufferSize, + UInt32 *posRes) +diff --git a/src/lzma/LzHash.h b/src/lzma/LzHash.h +index 77b898cfa..2b6290b64 100644 +--- a/src/lzma/LzHash.h ++++ b/src/lzma/LzHash.h +@@ -1,8 +1,8 @@ +-/* LzHash.h -- HASH functions for LZ algorithms +-2019-10-30 : Igor Pavlov : Public domain */ ++/* LzHash.h -- HASH constants for LZ algorithms ++2023-03-05 : Igor Pavlov : Public domain */ + +-#ifndef __LZ_HASH_H +-#define __LZ_HASH_H ++#ifndef ZIP7_INC_LZ_HASH_H ++#define ZIP7_INC_LZ_HASH_H + + /* + (kHash2Size >= (1 << 8)) : Required +diff --git a/src/lzma/Lzma2Dec.c b/src/lzma/Lzma2Dec.c +index 3f4ca29ea..8c4d464c0 100644 +--- a/src/lzma/Lzma2Dec.c ++++ b/src/lzma/Lzma2Dec.c +@@ -1,5 +1,5 @@ + /* Lzma2Dec.c -- LZMA2 Decoder +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-03-03 : Igor Pavlov : Public domain */ + + /* #define SHOW_DEBUG_INFO */ + +@@ -71,14 +71,14 @@ static SRes Lzma2Dec_GetOldProps(Byte prop, Byte *props) + SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc) + { + Byte props[LZMA_PROPS_SIZE]; +- RINOK(Lzma2Dec_GetOldProps(prop, props)); ++ RINOK(Lzma2Dec_GetOldProps(prop, props)) + return LzmaDec_AllocateProbs(&p->decoder, props, LZMA_PROPS_SIZE, alloc); + } + + SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc) + { + Byte props[LZMA_PROPS_SIZE]; +- RINOK(Lzma2Dec_GetOldProps(prop, props)); ++ RINOK(Lzma2Dec_GetOldProps(prop, props)) + return LzmaDec_Allocate(&p->decoder, props, LZMA_PROPS_SIZE, alloc); + } + +@@ -474,8 +474,8 @@ SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + SizeT outSize = *destLen, inSize = *srcLen; + *destLen = *srcLen = 0; + *status = LZMA_STATUS_NOT_SPECIFIED; +- Lzma2Dec_Construct(&p); +- RINOK(Lzma2Dec_AllocateProbs(&p, prop, alloc)); ++ Lzma2Dec_CONSTRUCT(&p) ++ RINOK(Lzma2Dec_AllocateProbs(&p, prop, alloc)) + p.decoder.dic = dest; + p.decoder.dicBufSize = outSize; + Lzma2Dec_Init(&p); +@@ -487,3 +487,5 @@ SRes Lzma2Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + Lzma2Dec_FreeProbs(&p, alloc); + return res; + } ++ ++#undef PRF +diff --git a/src/lzma/Lzma2Dec.h b/src/lzma/Lzma2Dec.h +index b8ddeac89..1f5233a72 100644 +--- a/src/lzma/Lzma2Dec.h ++++ b/src/lzma/Lzma2Dec.h +@@ -1,8 +1,8 @@ + /* Lzma2Dec.h -- LZMA2 Decoder +-2018-02-19 : Igor Pavlov : Public domain */ ++2023-03-03 : Igor Pavlov : Public domain */ + +-#ifndef __LZMA2_DEC_H +-#define __LZMA2_DEC_H ++#ifndef ZIP7_INC_LZMA2_DEC_H ++#define ZIP7_INC_LZMA2_DEC_H + + #include "LzmaDec.h" + +@@ -22,9 +22,10 @@ typedef struct + CLzmaDec decoder; + } CLzma2Dec; + +-#define Lzma2Dec_Construct(p) LzmaDec_Construct(&(p)->decoder) +-#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc) +-#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc) ++#define Lzma2Dec_CONSTRUCT(p) LzmaDec_CONSTRUCT(&(p)->decoder) ++#define Lzma2Dec_Construct(p) Lzma2Dec_CONSTRUCT(p) ++#define Lzma2Dec_FreeProbs(p, alloc) LzmaDec_FreeProbs(&(p)->decoder, alloc) ++#define Lzma2Dec_Free(p, alloc) LzmaDec_Free(&(p)->decoder, alloc) + + SRes Lzma2Dec_AllocateProbs(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc); + SRes Lzma2Dec_Allocate(CLzma2Dec *p, Byte prop, ISzAllocPtr alloc); +@@ -90,7 +91,7 @@ Lzma2Dec_GetUnpackExtra() returns the value that shows + at current input positon. + */ + +-#define Lzma2Dec_GetUnpackExtra(p) ((p)->isExtraMode ? (p)->unpackSize : 0); ++#define Lzma2Dec_GetUnpackExtra(p) ((p)->isExtraMode ? (p)->unpackSize : 0) + + + /* ---------- One Call Interface ---------- */ +diff --git a/src/lzma/Lzma2DecMt.c b/src/lzma/Lzma2DecMt.c +index 51a237a85..9ada455bf 100644 +--- a/src/lzma/Lzma2DecMt.c ++++ b/src/lzma/Lzma2DecMt.c +@@ -1,44 +1,44 @@ + /* Lzma2DecMt.c -- LZMA2 Decoder Multi-thread +-2021-04-01 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + + // #define SHOW_DEBUG_INFO +- +-// #define _7ZIP_ST ++// #define Z7_ST + + #ifdef SHOW_DEBUG_INFO + #include + #endif + +-#ifndef _7ZIP_ST +-#ifdef SHOW_DEBUG_INFO +-#define PRF(x) x +-#else +-#define PRF(x) +-#endif +-#define PRF_STR(s) PRF(printf("\n" s "\n")) +-#define PRF_STR_INT_2(s, d1, d2) PRF(printf("\n" s " %d %d\n", (unsigned)d1, (unsigned)d2)) +-#endif +- + #include "Alloc.h" + + #include "Lzma2Dec.h" + #include "Lzma2DecMt.h" + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + #include "MtDec.h" + + #define LZMA2DECMT_OUT_BLOCK_MAX_DEFAULT (1 << 28) + #endif + + ++#ifndef Z7_ST ++#ifdef SHOW_DEBUG_INFO ++#define PRF(x) x ++#else ++#define PRF(x) ++#endif ++#define PRF_STR(s) PRF(printf("\n" s "\n");) ++#define PRF_STR_INT_2(s, d1, d2) PRF(printf("\n" s " %d %d\n", (unsigned)d1, (unsigned)d2);) ++#endif ++ ++ + void Lzma2DecMtProps_Init(CLzma2DecMtProps *p) + { + p->inBufSize_ST = 1 << 20; + p->outStep_ST = 1 << 20; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + p->numThreads = 1; + p->inBufSize_MT = 1 << 18; + p->outBlockMax = LZMA2DECMT_OUT_BLOCK_MAX_DEFAULT; +@@ -48,7 +48,7 @@ void Lzma2DecMtProps_Init(CLzma2DecMtProps *p) + + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + /* ---------- CLzma2DecMtThread ---------- */ + +@@ -81,7 +81,7 @@ typedef struct + + /* ---------- CLzma2DecMt ---------- */ + +-typedef struct ++struct CLzma2DecMt + { + // ISzAllocPtr alloc; + ISzAllocPtr allocMid; +@@ -90,9 +90,9 @@ typedef struct + CLzma2DecMtProps props; + Byte prop; + +- ISeqInStream *inStream; +- ISeqOutStream *outStream; +- ICompressProgress *progress; ++ ISeqInStreamPtr inStream; ++ ISeqOutStreamPtr outStream; ++ ICompressProgressPtr progress; + + BoolInt finishMode; + BoolInt outSize_Defined; +@@ -111,14 +111,13 @@ typedef struct + size_t inPos; + size_t inLim; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + UInt64 outProcessed_Parse; + BoolInt mtc_WasConstructed; + CMtDec mtc; +- CLzma2DecMtThread coders[MTDEC__THREADS_MAX]; ++ CLzma2DecMtThread coders[MTDEC_THREADS_MAX]; + #endif +- +-} CLzma2DecMt; ++}; + + + +@@ -142,11 +141,11 @@ CLzma2DecMtHandle Lzma2DecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid) + + // Lzma2DecMtProps_Init(&p->props); + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + p->mtc_WasConstructed = False7z; + { + unsigned i; +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + { + CLzma2DecMtThread *t = &p->coders[i]; + t->dec_created = False7z; +@@ -156,16 +155,16 @@ CLzma2DecMtHandle Lzma2DecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid) + } + #endif + +- return p; ++ return (CLzma2DecMtHandle)(void *)p; + } + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + static void Lzma2DecMt_FreeOutBufs(CLzma2DecMt *p) + { + unsigned i; +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + { + CLzma2DecMtThread *t = &p->coders[i]; + if (t->outBuf) +@@ -196,13 +195,15 @@ static void Lzma2DecMt_FreeSt(CLzma2DecMt *p) + } + + +-void Lzma2DecMt_Destroy(CLzma2DecMtHandle pp) ++// #define GET_CLzma2DecMt_p CLzma2DecMt *p = (CLzma2DecMt *)(void *)pp; ++ ++void Lzma2DecMt_Destroy(CLzma2DecMtHandle p) + { +- CLzma2DecMt *p = (CLzma2DecMt *)pp; ++ // GET_CLzma2DecMt_p + + Lzma2DecMt_FreeSt(p); + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + + if (p->mtc_WasConstructed) + { +@@ -211,7 +212,7 @@ void Lzma2DecMt_Destroy(CLzma2DecMtHandle pp) + } + { + unsigned i; +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + { + CLzma2DecMtThread *t = &p->coders[i]; + if (t->dec_created) +@@ -226,19 +227,19 @@ void Lzma2DecMt_Destroy(CLzma2DecMtHandle pp) + + #endif + +- ISzAlloc_Free(p->alignOffsetAlloc.baseAlloc, pp); ++ ISzAlloc_Free(p->alignOffsetAlloc.baseAlloc, p); + } + + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + static void Lzma2DecMt_MtCallback_Parse(void *obj, unsigned coderIndex, CMtDecCallbackInfo *cc) + { + CLzma2DecMt *me = (CLzma2DecMt *)obj; + CLzma2DecMtThread *t = &me->coders[coderIndex]; + +- PRF_STR_INT_2("Parse", coderIndex, cc->srcSize); ++ PRF_STR_INT_2("Parse", coderIndex, cc->srcSize) + + cc->state = MTDEC_PARSE_CONTINUE; + +@@ -246,7 +247,7 @@ static void Lzma2DecMt_MtCallback_Parse(void *obj, unsigned coderIndex, CMtDecCa + { + if (!t->dec_created) + { +- Lzma2Dec_Construct(&t->dec); ++ Lzma2Dec_CONSTRUCT(&t->dec) + t->dec_created = True7z; + AlignOffsetAlloc_CreateVTable(&t->alloc); + { +@@ -297,7 +298,7 @@ static void Lzma2DecMt_MtCallback_Parse(void *obj, unsigned coderIndex, CMtDecCa + // that must be finished at position <= outBlockMax. + + { +- const SizeT srcOrig = cc->srcSize; ++ const size_t srcOrig = cc->srcSize; + SizeT srcSize_Point = 0; + SizeT dicPos_Point = 0; + +@@ -306,10 +307,10 @@ static void Lzma2DecMt_MtCallback_Parse(void *obj, unsigned coderIndex, CMtDecCa + + for (;;) + { +- SizeT srcCur = srcOrig - cc->srcSize; ++ SizeT srcCur = (SizeT)(srcOrig - cc->srcSize); + + status = Lzma2Dec_Parse(&t->dec, +- limit - t->dec.decoder.dicPos, ++ (SizeT)limit - t->dec.decoder.dicPos, + cc->src + cc->srcSize, &srcCur, + checkFinishBlock); + +@@ -333,7 +334,7 @@ static void Lzma2DecMt_MtCallback_Parse(void *obj, unsigned coderIndex, CMtDecCa + if (t->dec.decoder.dicPos >= (1 << 14)) + break; + dicPos_Point = t->dec.decoder.dicPos; +- srcSize_Point = cc->srcSize; ++ srcSize_Point = (SizeT)cc->srcSize; + continue; + } + +@@ -391,7 +392,7 @@ static void Lzma2DecMt_MtCallback_Parse(void *obj, unsigned coderIndex, CMtDecCa + if (unpackRem != 0) + { + /* we also reserve space for max possible number of output bytes of current LZMA chunk */ +- SizeT rem = limit - dicPos; ++ size_t rem = limit - dicPos; + if (rem > unpackRem) + rem = unpackRem; + dicPos += rem; +@@ -444,7 +445,7 @@ static SRes Lzma2DecMt_MtCallback_PreCode(void *pp, unsigned coderIndex) + } + + t->dec.decoder.dic = dest; +- t->dec.decoder.dicBufSize = t->outPreSize; ++ t->dec.decoder.dicBufSize = (SizeT)t->outPreSize; + + t->needInit = True7z; + +@@ -462,7 +463,7 @@ static SRes Lzma2DecMt_MtCallback_Code(void *pp, unsigned coderIndex, + + UNUSED_VAR(srcFinished) + +- PRF_STR_INT_2("Code", coderIndex, srcSize); ++ PRF_STR_INT_2("Code", coderIndex, srcSize) + + *inCodePos = t->inCodeSize; + *outCodePos = 0; +@@ -476,13 +477,13 @@ static SRes Lzma2DecMt_MtCallback_Code(void *pp, unsigned coderIndex, + + { + ELzmaStatus status; +- size_t srcProcessed = srcSize; ++ SizeT srcProcessed = (SizeT)srcSize; + BoolInt blockWasFinished = + ((int)t->parseStatus == LZMA_STATUS_FINISHED_WITH_MARK + || t->parseStatus == LZMA2_PARSE_STATUS_NEW_BLOCK); + + SRes res = Lzma2Dec_DecodeToDic(&t->dec, +- t->outPreSize, ++ (SizeT)t->outPreSize, + src, &srcProcessed, + blockWasFinished ? LZMA_FINISH_END : LZMA_FINISH_ANY, + &status); +@@ -540,7 +541,7 @@ static SRes Lzma2DecMt_MtCallback_Write(void *pp, unsigned coderIndex, + UNUSED_VAR(srcSize) + UNUSED_VAR(isCross) + +- PRF_STR_INT_2("Write", coderIndex, srcSize); ++ PRF_STR_INT_2("Write", coderIndex, srcSize) + + *needContinue = False7z; + *canRecode = True7z; +@@ -588,7 +589,7 @@ static SRes Lzma2DecMt_MtCallback_Write(void *pp, unsigned coderIndex, + *needContinue = needContinue2; + return SZ_OK; + } +- RINOK(MtProgress_ProgressAdd(&me->mtc.mtProgress, 0, 0)); ++ RINOK(MtProgress_ProgressAdd(&me->mtc.mtProgress, 0, 0)) + } + } + +@@ -611,11 +612,11 @@ static SRes Lzma2Dec_Prepare_ST(CLzma2DecMt *p) + { + if (!p->dec_created) + { +- Lzma2Dec_Construct(&p->dec); ++ Lzma2Dec_CONSTRUCT(&p->dec) + p->dec_created = True7z; + } + +- RINOK(Lzma2Dec_Allocate(&p->dec, p->prop, &p->alignOffsetAlloc.vt)); ++ RINOK(Lzma2Dec_Allocate(&p->dec, p->prop, &p->alignOffsetAlloc.vt)) + + if (!p->inBuf || p->inBufSize != p->props.inBufSize_ST) + { +@@ -634,7 +635,7 @@ static SRes Lzma2Dec_Prepare_ST(CLzma2DecMt *p) + + + static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + , BoolInt tMode + #endif + ) +@@ -646,7 +647,7 @@ static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p + + CLzma2Dec *dec; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (tMode) + { + Lzma2DecMt_FreeOutBufs(p); +@@ -654,7 +655,7 @@ static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p + } + #endif + +- RINOK(Lzma2Dec_Prepare_ST(p)); ++ RINOK(Lzma2Dec_Prepare_ST(p)) + + dec = &p->dec; + +@@ -681,7 +682,7 @@ static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p + + if (inPos == inLim) + { +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (tMode) + { + inData = MtDec_Read(&p->mtc, &inLim); +@@ -710,7 +711,7 @@ static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p + { + SizeT next = dec->decoder.dicBufSize; + if (next - wrPos > p->props.outStep_ST) +- next = wrPos + p->props.outStep_ST; ++ next = wrPos + (SizeT)p->props.outStep_ST; + size = next - dicPos; + } + +@@ -726,7 +727,7 @@ static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p + } + } + +- inProcessed = inLim - inPos; ++ inProcessed = (SizeT)(inLim - inPos); + + res = Lzma2Dec_DecodeToDic(dec, dicPos + size, inData + inPos, &inProcessed, finishMode, &status); + +@@ -755,7 +756,7 @@ static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p + dec->decoder.dicPos = 0; + wrPos = dec->decoder.dicPos; + +- RINOK(res2); ++ RINOK(res2) + + if (needStop) + { +@@ -788,7 +789,7 @@ static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p + UInt64 outDelta = p->outProcessed - outPrev; + if (inDelta >= (1 << 22) || outDelta >= (1 << 22)) + { +- RINOK(ICompressProgress_Progress(p->progress, p->inProcessed, p->outProcessed)); ++ RINOK(ICompressProgress_Progress(p->progress, p->inProcessed, p->outProcessed)) + inPrev = p->inProcessed; + outPrev = p->outProcessed; + } +@@ -798,20 +799,20 @@ static SRes Lzma2Dec_Decode_ST(CLzma2DecMt *p + + + +-SRes Lzma2DecMt_Decode(CLzma2DecMtHandle pp, ++SRes Lzma2DecMt_Decode(CLzma2DecMtHandle p, + Byte prop, + const CLzma2DecMtProps *props, +- ISeqOutStream *outStream, const UInt64 *outDataSize, int finishMode, ++ ISeqOutStreamPtr outStream, const UInt64 *outDataSize, int finishMode, + // Byte *outBuf, size_t *outBufSize, +- ISeqInStream *inStream, ++ ISeqInStreamPtr inStream, + // const Byte *inData, size_t inDataSize, + UInt64 *inProcessed, + // UInt64 *outProcessed, + int *isMT, +- ICompressProgress *progress) ++ ICompressProgressPtr progress) + { +- CLzma2DecMt *p = (CLzma2DecMt *)pp; +- #ifndef _7ZIP_ST ++ // GET_CLzma2DecMt_p ++ #ifndef Z7_ST + BoolInt tMode; + #endif + +@@ -845,7 +846,7 @@ SRes Lzma2DecMt_Decode(CLzma2DecMtHandle pp, + *isMT = False7z; + + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + + tMode = False7z; + +@@ -939,7 +940,7 @@ SRes Lzma2DecMt_Decode(CLzma2DecMtHandle pp, + p->readWasFinished = p->mtc.readWasFinished; + p->inProcessed = p->mtc.inProcessed; + +- PRF_STR("----- decoding ST -----"); ++ PRF_STR("----- decoding ST -----") + } + } + +@@ -950,7 +951,7 @@ SRes Lzma2DecMt_Decode(CLzma2DecMtHandle pp, + + { + SRes res = Lzma2Dec_Decode_ST(p +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + , tMode + #endif + ); +@@ -967,7 +968,7 @@ SRes Lzma2DecMt_Decode(CLzma2DecMtHandle pp, + res = p->readRes; + + /* +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (res == SZ_OK && tMode && p->mtc.parseRes != SZ_OK) + res = p->mtc.parseRes; + #endif +@@ -980,13 +981,13 @@ SRes Lzma2DecMt_Decode(CLzma2DecMtHandle pp, + + /* ---------- Read from CLzma2DecMtHandle Interface ---------- */ + +-SRes Lzma2DecMt_Init(CLzma2DecMtHandle pp, ++SRes Lzma2DecMt_Init(CLzma2DecMtHandle p, + Byte prop, + const CLzma2DecMtProps *props, + const UInt64 *outDataSize, int finishMode, +- ISeqInStream *inStream) ++ ISeqInStreamPtr inStream) + { +- CLzma2DecMt *p = (CLzma2DecMt *)pp; ++ // GET_CLzma2DecMt_p + + if (prop > 40) + return SZ_ERROR_UNSUPPORTED; +@@ -1015,11 +1016,11 @@ SRes Lzma2DecMt_Init(CLzma2DecMtHandle pp, + } + + +-SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp, ++SRes Lzma2DecMt_Read(CLzma2DecMtHandle p, + Byte *data, size_t *outSize, + UInt64 *inStreamProcessed) + { +- CLzma2DecMt *p = (CLzma2DecMt *)pp; ++ // GET_CLzma2DecMt_p + ELzmaFinishMode finishMode; + SRes readRes; + size_t size = *outSize; +@@ -1055,8 +1056,8 @@ SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp, + readRes = ISeqInStream_Read(p->inStream, p->inBuf, &p->inLim); + } + +- inCur = p->inLim - p->inPos; +- outCur = size; ++ inCur = (SizeT)(p->inLim - p->inPos); ++ outCur = (SizeT)size; + + res = Lzma2Dec_DecodeToBuf(&p->dec, data, &outCur, + p->inBuf + p->inPos, &inCur, finishMode, &status); +@@ -1088,3 +1089,7 @@ SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp, + return readRes; + } + } ++ ++#undef PRF ++#undef PRF_STR ++#undef PRF_STR_INT_2 +diff --git a/src/lzma/Lzma2DecMt.h b/src/lzma/Lzma2DecMt.h +index 7791c310b..93a5cd59e 100644 +--- a/src/lzma/Lzma2DecMt.h ++++ b/src/lzma/Lzma2DecMt.h +@@ -1,8 +1,8 @@ + /* Lzma2DecMt.h -- LZMA2 Decoder Multi-thread +-2018-02-17 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + +-#ifndef __LZMA2_DEC_MT_H +-#define __LZMA2_DEC_MT_H ++#ifndef ZIP7_INC_LZMA2_DEC_MT_H ++#define ZIP7_INC_LZMA2_DEC_MT_H + + #include "7zTypes.h" + +@@ -13,7 +13,7 @@ typedef struct + size_t inBufSize_ST; + size_t outStep_ST; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + unsigned numThreads; + size_t inBufSize_MT; + size_t outBlockMax; +@@ -38,7 +38,9 @@ void Lzma2DecMtProps_Init(CLzma2DecMtProps *p); + SZ_ERROR_THREAD - error in multithreading functions (only for Mt version) + */ + +-typedef void * CLzma2DecMtHandle; ++typedef struct CLzma2DecMt CLzma2DecMt; ++typedef CLzma2DecMt * CLzma2DecMtHandle; ++// Z7_DECLARE_HANDLE(CLzma2DecMtHandle) + + CLzma2DecMtHandle Lzma2DecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid); + void Lzma2DecMt_Destroy(CLzma2DecMtHandle p); +@@ -46,11 +48,11 @@ void Lzma2DecMt_Destroy(CLzma2DecMtHandle p); + SRes Lzma2DecMt_Decode(CLzma2DecMtHandle p, + Byte prop, + const CLzma2DecMtProps *props, +- ISeqOutStream *outStream, ++ ISeqOutStreamPtr outStream, + const UInt64 *outDataSize, // NULL means undefined + int finishMode, // 0 - partial unpacking is allowed, 1 - if lzma2 stream must be finished + // Byte *outBuf, size_t *outBufSize, +- ISeqInStream *inStream, ++ ISeqInStreamPtr inStream, + // const Byte *inData, size_t inDataSize, + + // out variables: +@@ -58,7 +60,7 @@ SRes Lzma2DecMt_Decode(CLzma2DecMtHandle p, + int *isMT, /* out: (*isMT == 0), if single thread decoding was used */ + + // UInt64 *outProcessed, +- ICompressProgress *progress); ++ ICompressProgressPtr progress); + + + /* ---------- Read from CLzma2DecMtHandle Interface ---------- */ +@@ -67,7 +69,7 @@ SRes Lzma2DecMt_Init(CLzma2DecMtHandle pp, + Byte prop, + const CLzma2DecMtProps *props, + const UInt64 *outDataSize, int finishMode, +- ISeqInStream *inStream); ++ ISeqInStreamPtr inStream); + + SRes Lzma2DecMt_Read(CLzma2DecMtHandle pp, + Byte *data, size_t *outSize, +diff --git a/src/lzma/Lzma2Enc.c b/src/lzma/Lzma2Enc.c +index 4799b65ad..f31c3ddad 100644 +--- a/src/lzma/Lzma2Enc.c ++++ b/src/lzma/Lzma2Enc.c +@@ -1,18 +1,18 @@ + /* Lzma2Enc.c -- LZMA2 Encoder +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + + #include + +-/* #define _7ZIP_ST */ ++/* #define Z7_ST */ + + #include "Lzma2Enc.h" + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + #include "MtCoder.h" + #else +-#define MTCODER__THREADS_MAX 1 ++#define MTCODER_THREADS_MAX 1 + #endif + + #define LZMA2_CONTROL_LZMA (1 << 7) +@@ -40,7 +40,7 @@ + typedef struct + { + ISeqInStream vt; +- ISeqInStream *realStream; ++ ISeqInStreamPtr realStream; + UInt64 limit; + UInt64 processed; + int finished; +@@ -53,15 +53,15 @@ static void LimitedSeqInStream_Init(CLimitedSeqInStream *p) + p->finished = 0; + } + +-static SRes LimitedSeqInStream_Read(const ISeqInStream *pp, void *data, size_t *size) ++static SRes LimitedSeqInStream_Read(ISeqInStreamPtr pp, void *data, size_t *size) + { +- CLimitedSeqInStream *p = CONTAINER_FROM_VTBL(pp, CLimitedSeqInStream, vt); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CLimitedSeqInStream) + size_t size2 = *size; + SRes res = SZ_OK; + + if (p->limit != (UInt64)(Int64)-1) + { +- UInt64 rem = p->limit - p->processed; ++ const UInt64 rem = p->limit - p->processed; + if (size2 > rem) + size2 = (size_t)rem; + } +@@ -95,8 +95,8 @@ static SRes Lzma2EncInt_InitStream(CLzma2EncInt *p, const CLzma2EncProps *props) + { + SizeT propsSize = LZMA_PROPS_SIZE; + Byte propsEncoded[LZMA_PROPS_SIZE]; +- RINOK(LzmaEnc_SetProps(p->enc, &props->lzmaProps)); +- RINOK(LzmaEnc_WriteProperties(p->enc, propsEncoded, &propsSize)); ++ RINOK(LzmaEnc_SetProps(p->enc, &props->lzmaProps)) ++ RINOK(LzmaEnc_WriteProperties(p->enc, propsEncoded, &propsSize)) + p->propsByte = propsEncoded[0]; + p->propsAreSet = True7z; + } +@@ -111,23 +111,23 @@ static void Lzma2EncInt_InitBlock(CLzma2EncInt *p) + } + + +-SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, ISeqInStream *inStream, UInt32 keepWindowSize, ++SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle p, ISeqInStreamPtr inStream, UInt32 keepWindowSize, + ISzAllocPtr alloc, ISzAllocPtr allocBig); +-SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen, ++SRes LzmaEnc_MemPrepare(CLzmaEncHandle p, const Byte *src, SizeT srcLen, + UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig); +-SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit, ++SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle p, BoolInt reInit, + Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize); +-const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp); +-void LzmaEnc_Finish(CLzmaEncHandle pp); +-void LzmaEnc_SaveState(CLzmaEncHandle pp); +-void LzmaEnc_RestoreState(CLzmaEncHandle pp); ++const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle p); ++void LzmaEnc_Finish(CLzmaEncHandle p); ++void LzmaEnc_SaveState(CLzmaEncHandle p); ++void LzmaEnc_RestoreState(CLzmaEncHandle p); + + /* +-UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp); ++UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle p); + */ + + static SRes Lzma2EncInt_EncodeSubblock(CLzma2EncInt *p, Byte *outBuf, +- size_t *packSizeRes, ISeqOutStream *outStream) ++ size_t *packSizeRes, ISeqOutStreamPtr outStream) + { + size_t packSizeLimit = *packSizeRes; + size_t packSize = packSizeLimit; +@@ -167,7 +167,7 @@ static SRes Lzma2EncInt_EncodeSubblock(CLzma2EncInt *p, Byte *outBuf, + + while (unpackSize > 0) + { +- UInt32 u = (unpackSize < LZMA2_COPY_CHUNK_SIZE) ? unpackSize : LZMA2_COPY_CHUNK_SIZE; ++ const UInt32 u = (unpackSize < LZMA2_COPY_CHUNK_SIZE) ? unpackSize : LZMA2_COPY_CHUNK_SIZE; + if (packSizeLimit - destPos < u + 3) + return SZ_ERROR_OUTPUT_EOF; + outBuf[destPos++] = (Byte)(p->srcPos == 0 ? LZMA2_CONTROL_COPY_RESET_DIC : LZMA2_CONTROL_COPY_NO_RESET); +@@ -196,9 +196,9 @@ static SRes Lzma2EncInt_EncodeSubblock(CLzma2EncInt *p, Byte *outBuf, + + { + size_t destPos = 0; +- UInt32 u = unpackSize - 1; +- UInt32 pm = (UInt32)(packSize - 1); +- unsigned mode = (p->srcPos == 0) ? 3 : (p->needInitState ? (p->needInitProp ? 2 : 1) : 0); ++ const UInt32 u = unpackSize - 1; ++ const UInt32 pm = (UInt32)(packSize - 1); ++ const unsigned mode = (p->srcPos == 0) ? 3 : (p->needInitState ? (p->needInitProp ? 2 : 1) : 0); + + PRF(printf(" ")); + +@@ -231,7 +231,7 @@ static SRes Lzma2EncInt_EncodeSubblock(CLzma2EncInt *p, Byte *outBuf, + void Lzma2EncProps_Init(CLzma2EncProps *p) + { + LzmaEncProps_Init(&p->lzmaProps); +- p->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO; ++ p->blockSize = LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO; + p->numBlockThreads_Reduced = -1; + p->numBlockThreads_Max = -1; + p->numTotalThreads = -1; +@@ -251,8 +251,8 @@ void Lzma2EncProps_Normalize(CLzma2EncProps *p) + t2 = p->numBlockThreads_Max; + t3 = p->numTotalThreads; + +- if (t2 > MTCODER__THREADS_MAX) +- t2 = MTCODER__THREADS_MAX; ++ if (t2 > MTCODER_THREADS_MAX) ++ t2 = MTCODER_THREADS_MAX; + + if (t3 <= 0) + { +@@ -268,8 +268,8 @@ void Lzma2EncProps_Normalize(CLzma2EncProps *p) + t1 = 1; + t2 = t3; + } +- if (t2 > MTCODER__THREADS_MAX) +- t2 = MTCODER__THREADS_MAX; ++ if (t2 > MTCODER_THREADS_MAX) ++ t2 = MTCODER_THREADS_MAX; + } + else if (t1 <= 0) + { +@@ -286,8 +286,8 @@ void Lzma2EncProps_Normalize(CLzma2EncProps *p) + + fileSize = p->lzmaProps.reduceSize; + +- if ( p->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID +- && p->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO ++ if ( p->blockSize != LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID ++ && p->blockSize != LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO + && (p->blockSize < fileSize || fileSize == (UInt64)(Int64)-1)) + p->lzmaProps.reduceSize = p->blockSize; + +@@ -297,19 +297,19 @@ void Lzma2EncProps_Normalize(CLzma2EncProps *p) + + t1 = p->lzmaProps.numThreads; + +- if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) ++ if (p->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID) + { + t2r = t2 = 1; + t3 = t1; + } +- else if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO && t2 <= 1) ++ else if (p->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO && t2 <= 1) + { + /* if there is no block multi-threading, we use SOLID block */ +- p->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID; ++ p->blockSize = LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID; + } + else + { +- if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) ++ if (p->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO) + { + const UInt32 kMinSize = (UInt32)1 << 20; + const UInt32 kMaxSize = (UInt32)1 << 28; +@@ -344,7 +344,7 @@ void Lzma2EncProps_Normalize(CLzma2EncProps *p) + } + + +-static SRes Progress(ICompressProgress *p, UInt64 inSize, UInt64 outSize) ++static SRes Progress(ICompressProgressPtr p, UInt64 inSize, UInt64 outSize) + { + return (p && ICompressProgress_Progress(p, inSize, outSize) != SZ_OK) ? SZ_ERROR_PROGRESS : SZ_OK; + } +@@ -352,7 +352,7 @@ static SRes Progress(ICompressProgress *p, UInt64 inSize, UInt64 outSize) + + /* ---------- Lzma2 ---------- */ + +-typedef struct ++struct CLzma2Enc + { + Byte propEncoded; + CLzma2EncProps props; +@@ -363,23 +363,22 @@ typedef struct + ISzAllocPtr alloc; + ISzAllocPtr allocBig; + +- CLzma2EncInt coders[MTCODER__THREADS_MAX]; ++ CLzma2EncInt coders[MTCODER_THREADS_MAX]; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + +- ISeqOutStream *outStream; ++ ISeqOutStreamPtr outStream; + Byte *outBuf; + size_t outBuf_Rem; /* remainder in outBuf */ + + size_t outBufSize; /* size of allocated outBufs[i] */ +- size_t outBufsDataSizes[MTCODER__BLOCKS_MAX]; ++ size_t outBufsDataSizes[MTCODER_BLOCKS_MAX]; + BoolInt mtCoder_WasConstructed; + CMtCoder mtCoder; +- Byte *outBufs[MTCODER__BLOCKS_MAX]; ++ Byte *outBufs[MTCODER_BLOCKS_MAX]; + + #endif +- +-} CLzma2Enc; ++}; + + + +@@ -396,30 +395,30 @@ CLzma2EncHandle Lzma2Enc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig) + p->allocBig = allocBig; + { + unsigned i; +- for (i = 0; i < MTCODER__THREADS_MAX; i++) ++ for (i = 0; i < MTCODER_THREADS_MAX; i++) + p->coders[i].enc = NULL; + } + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + p->mtCoder_WasConstructed = False7z; + { + unsigned i; +- for (i = 0; i < MTCODER__BLOCKS_MAX; i++) ++ for (i = 0; i < MTCODER_BLOCKS_MAX; i++) + p->outBufs[i] = NULL; + p->outBufSize = 0; + } + #endif + +- return p; ++ return (CLzma2EncHandle)p; + } + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + static void Lzma2Enc_FreeOutBufs(CLzma2Enc *p) + { + unsigned i; +- for (i = 0; i < MTCODER__BLOCKS_MAX; i++) ++ for (i = 0; i < MTCODER_BLOCKS_MAX; i++) + if (p->outBufs[i]) + { + ISzAlloc_Free(p->alloc, p->outBufs[i]); +@@ -430,12 +429,13 @@ static void Lzma2Enc_FreeOutBufs(CLzma2Enc *p) + + #endif + ++// #define GET_CLzma2Enc_p CLzma2Enc *p = (CLzma2Enc *)(void *)p; + +-void Lzma2Enc_Destroy(CLzma2EncHandle pp) ++void Lzma2Enc_Destroy(CLzma2EncHandle p) + { +- CLzma2Enc *p = (CLzma2Enc *)pp; ++ // GET_CLzma2Enc_p + unsigned i; +- for (i = 0; i < MTCODER__THREADS_MAX; i++) ++ for (i = 0; i < MTCODER_THREADS_MAX; i++) + { + CLzma2EncInt *t = &p->coders[i]; + if (t->enc) +@@ -446,7 +446,7 @@ void Lzma2Enc_Destroy(CLzma2EncHandle pp) + } + + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (p->mtCoder_WasConstructed) + { + MtCoder_Destruct(&p->mtCoder); +@@ -458,13 +458,13 @@ void Lzma2Enc_Destroy(CLzma2EncHandle pp) + ISzAlloc_Free(p->alloc, p->tempBufLzma); + p->tempBufLzma = NULL; + +- ISzAlloc_Free(p->alloc, pp); ++ ISzAlloc_Free(p->alloc, p); + } + + +-SRes Lzma2Enc_SetProps(CLzma2EncHandle pp, const CLzma2EncProps *props) ++SRes Lzma2Enc_SetProps(CLzma2EncHandle p, const CLzma2EncProps *props) + { +- CLzma2Enc *p = (CLzma2Enc *)pp; ++ // GET_CLzma2Enc_p + CLzmaEncProps lzmaProps = props->lzmaProps; + LzmaEncProps_Normalize(&lzmaProps); + if (lzmaProps.lc + lzmaProps.lp > LZMA2_LCLP_MAX) +@@ -475,16 +475,16 @@ SRes Lzma2Enc_SetProps(CLzma2EncHandle pp, const CLzma2EncProps *props) + } + + +-void Lzma2Enc_SetDataSize(CLzmaEncHandle pp, UInt64 expectedDataSiize) ++void Lzma2Enc_SetDataSize(CLzma2EncHandle p, UInt64 expectedDataSiize) + { +- CLzma2Enc *p = (CLzma2Enc *)pp; ++ // GET_CLzma2Enc_p + p->expectedDataSize = expectedDataSiize; + } + + +-Byte Lzma2Enc_WriteProperties(CLzma2EncHandle pp) ++Byte Lzma2Enc_WriteProperties(CLzma2EncHandle p) + { +- CLzma2Enc *p = (CLzma2Enc *)pp; ++ // GET_CLzma2Enc_p + unsigned i; + UInt32 dicSize = LzmaEncProps_GetDictSize(&p->props.lzmaProps); + for (i = 0; i < 40; i++) +@@ -497,12 +497,12 @@ Byte Lzma2Enc_WriteProperties(CLzma2EncHandle pp) + static SRes Lzma2Enc_EncodeMt1( + CLzma2Enc *me, + CLzma2EncInt *p, +- ISeqOutStream *outStream, ++ ISeqOutStreamPtr outStream, + Byte *outBuf, size_t *outBufSize, +- ISeqInStream *inStream, ++ ISeqInStreamPtr inStream, + const Byte *inData, size_t inDataSize, + int finished, +- ICompressProgress *progress) ++ ICompressProgressPtr progress) + { + UInt64 unpackTotal = 0; + UInt64 packTotal = 0; +@@ -540,12 +540,12 @@ static SRes Lzma2Enc_EncodeMt1( + } + } + +- RINOK(Lzma2EncInt_InitStream(p, &me->props)); ++ RINOK(Lzma2EncInt_InitStream(p, &me->props)) + + for (;;) + { + SRes res = SZ_OK; +- size_t inSizeCur = 0; ++ SizeT inSizeCur = 0; + + Lzma2EncInt_InitBlock(p); + +@@ -559,7 +559,7 @@ static SRes Lzma2Enc_EncodeMt1( + if (me->expectedDataSize != (UInt64)(Int64)-1 + && me->expectedDataSize >= unpackTotal) + expected = me->expectedDataSize - unpackTotal; +- if (me->props.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID ++ if (me->props.blockSize != LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID + && expected > me->props.blockSize) + expected = (size_t)me->props.blockSize; + +@@ -569,14 +569,14 @@ static SRes Lzma2Enc_EncodeMt1( + &limitedInStream.vt, + LZMA2_KEEP_WINDOW_SIZE, + me->alloc, +- me->allocBig)); ++ me->allocBig)) + } + else + { +- inSizeCur = inDataSize - (size_t)unpackTotal; +- if (me->props.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID ++ inSizeCur = (SizeT)(inDataSize - (size_t)unpackTotal); ++ if (me->props.blockSize != LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID + && inSizeCur > me->props.blockSize) +- inSizeCur = (size_t)me->props.blockSize; ++ inSizeCur = (SizeT)(size_t)me->props.blockSize; + + // LzmaEnc_SetDataSize(p->enc, inSizeCur); + +@@ -584,7 +584,7 @@ static SRes Lzma2Enc_EncodeMt1( + inData + (size_t)unpackTotal, inSizeCur, + LZMA2_KEEP_WINDOW_SIZE, + me->alloc, +- me->allocBig)); ++ me->allocBig)) + } + + for (;;) +@@ -621,7 +621,7 @@ static SRes Lzma2Enc_EncodeMt1( + + unpackTotal += p->srcPos; + +- RINOK(res); ++ RINOK(res) + + if (p->srcPos != (inStream ? limitedInStream.processed : inSizeCur)) + return SZ_ERROR_FAIL; +@@ -652,12 +652,12 @@ static SRes Lzma2Enc_EncodeMt1( + + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + +-static SRes Lzma2Enc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBufIndex, ++static SRes Lzma2Enc_MtCallback_Code(void *p, unsigned coderIndex, unsigned outBufIndex, + const Byte *src, size_t srcSize, int finished) + { +- CLzma2Enc *me = (CLzma2Enc *)pp; ++ CLzma2Enc *me = (CLzma2Enc *)p; + size_t destSize = me->outBufSize; + SRes res; + CMtProgressThunk progressThunk; +@@ -692,9 +692,9 @@ static SRes Lzma2Enc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned out + } + + +-static SRes Lzma2Enc_MtCallback_Write(void *pp, unsigned outBufIndex) ++static SRes Lzma2Enc_MtCallback_Write(void *p, unsigned outBufIndex) + { +- CLzma2Enc *me = (CLzma2Enc *)pp; ++ CLzma2Enc *me = (CLzma2Enc *)p; + size_t size = me->outBufsDataSizes[outBufIndex]; + const Byte *data = me->outBufs[outBufIndex]; + +@@ -713,14 +713,14 @@ static SRes Lzma2Enc_MtCallback_Write(void *pp, unsigned outBufIndex) + + + +-SRes Lzma2Enc_Encode2(CLzma2EncHandle pp, +- ISeqOutStream *outStream, ++SRes Lzma2Enc_Encode2(CLzma2EncHandle p, ++ ISeqOutStreamPtr outStream, + Byte *outBuf, size_t *outBufSize, +- ISeqInStream *inStream, ++ ISeqInStreamPtr inStream, + const Byte *inData, size_t inDataSize, +- ICompressProgress *progress) ++ ICompressProgressPtr progress) + { +- CLzma2Enc *p = (CLzma2Enc *)pp; ++ // GET_CLzma2Enc_p + + if (inStream && inData) + return SZ_ERROR_PARAM; +@@ -730,11 +730,11 @@ SRes Lzma2Enc_Encode2(CLzma2EncHandle pp, + + { + unsigned i; +- for (i = 0; i < MTCODER__THREADS_MAX; i++) ++ for (i = 0; i < MTCODER_THREADS_MAX; i++) + p->coders[i].propsAreSet = False7z; + } + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + + if (p->props.numBlockThreads_Reduced > 1) + { +@@ -772,7 +772,7 @@ SRes Lzma2Enc_Encode2(CLzma2EncHandle pp, + return SZ_ERROR_PARAM; /* SZ_ERROR_MEM */ + + { +- size_t destBlockSize = p->mtCoder.blockSize + (p->mtCoder.blockSize >> 10) + 16; ++ const size_t destBlockSize = p->mtCoder.blockSize + (p->mtCoder.blockSize >> 10) + 16; + if (destBlockSize < p->mtCoder.blockSize) + return SZ_ERROR_PARAM; + if (p->outBufSize != destBlockSize) +@@ -784,7 +784,7 @@ SRes Lzma2Enc_Encode2(CLzma2EncHandle pp, + p->mtCoder.expectedDataSize = p->expectedDataSize; + + { +- SRes res = MtCoder_Code(&p->mtCoder); ++ const SRes res = MtCoder_Code(&p->mtCoder); + if (!outStream) + *outBufSize = (size_t)(p->outBuf - outBuf); + return res; +@@ -801,3 +801,5 @@ SRes Lzma2Enc_Encode2(CLzma2EncHandle pp, + True7z, /* finished */ + progress); + } ++ ++#undef PRF +diff --git a/src/lzma/Lzma2Enc.h b/src/lzma/Lzma2Enc.h +index 6a6110ff7..cb25275c6 100644 +--- a/src/lzma/Lzma2Enc.h ++++ b/src/lzma/Lzma2Enc.h +@@ -1,15 +1,15 @@ + /* Lzma2Enc.h -- LZMA2 Encoder +-2017-07-27 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + +-#ifndef __LZMA2_ENC_H +-#define __LZMA2_ENC_H ++#ifndef ZIP7_INC_LZMA2_ENC_H ++#define ZIP7_INC_LZMA2_ENC_H + + #include "LzmaEnc.h" + + EXTERN_C_BEGIN + +-#define LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO 0 +-#define LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID ((UInt64)(Int64)-1) ++#define LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO 0 ++#define LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID ((UInt64)(Int64)-1) + + typedef struct + { +@@ -36,7 +36,9 @@ void Lzma2EncProps_Normalize(CLzma2EncProps *p); + SZ_ERROR_THREAD - error in multithreading functions (only for Mt version) + */ + +-typedef void * CLzma2EncHandle; ++typedef struct CLzma2Enc CLzma2Enc; ++typedef CLzma2Enc * CLzma2EncHandle; ++// Z7_DECLARE_HANDLE(CLzma2EncHandle) + + CLzma2EncHandle Lzma2Enc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig); + void Lzma2Enc_Destroy(CLzma2EncHandle p); +@@ -44,11 +46,11 @@ SRes Lzma2Enc_SetProps(CLzma2EncHandle p, const CLzma2EncProps *props); + void Lzma2Enc_SetDataSize(CLzma2EncHandle p, UInt64 expectedDataSiize); + Byte Lzma2Enc_WriteProperties(CLzma2EncHandle p); + SRes Lzma2Enc_Encode2(CLzma2EncHandle p, +- ISeqOutStream *outStream, ++ ISeqOutStreamPtr outStream, + Byte *outBuf, size_t *outBufSize, +- ISeqInStream *inStream, ++ ISeqInStreamPtr inStream, + const Byte *inData, size_t inDataSize, +- ICompressProgress *progress); ++ ICompressProgressPtr progress); + + EXTERN_C_END + +diff --git a/src/lzma/Lzma86.h b/src/lzma/Lzma86.h +index bebed5cb7..e7707e2c4 100644 +--- a/src/lzma/Lzma86.h ++++ b/src/lzma/Lzma86.h +@@ -1,8 +1,8 @@ + /* Lzma86.h -- LZMA + x86 (BCJ) Filter +-2013-01-18 : Igor Pavlov : Public domain */ ++2023-03-03 : Igor Pavlov : Public domain */ + +-#ifndef __LZMA86_H +-#define __LZMA86_H ++#ifndef ZIP7_INC_LZMA86_H ++#define ZIP7_INC_LZMA86_H + + #include "7zTypes.h" + +diff --git a/src/lzma/Lzma86Dec.c b/src/lzma/Lzma86Dec.c +index 21031745c..f094d4c35 100644 +--- a/src/lzma/Lzma86Dec.c ++++ b/src/lzma/Lzma86Dec.c +@@ -1,5 +1,5 @@ + /* Lzma86Dec.c -- LZMA + x86 (BCJ) Filter Decoder +-2016-05-16 : Igor Pavlov : Public domain */ ++2023-03-03 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -46,9 +46,8 @@ SRes Lzma86_Decode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen) + return res; + if (useFilter == 1) + { +- UInt32 x86State; +- x86_Convert_Init(x86State); +- x86_Convert(dest, *destLen, 0, &x86State, 0); ++ UInt32 x86State = Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL; ++ z7_BranchConvSt_X86_Dec(dest, *destLen, 0, &x86State); + } + return SZ_OK; + } +diff --git a/src/lzma/Lzma86Enc.c b/src/lzma/Lzma86Enc.c +index 2aed6758f..e87e2c7ce 100644 +--- a/src/lzma/Lzma86Enc.c ++++ b/src/lzma/Lzma86Enc.c +@@ -1,5 +1,5 @@ + /* Lzma86Enc.c -- LZMA + x86 (BCJ) Filter Encoder +-2018-07-04 : Igor Pavlov : Public domain */ ++2023-03-03 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -46,9 +46,8 @@ int Lzma86_Encode(Byte *dest, size_t *destLen, const Byte *src, size_t srcLen, + memcpy(filteredStream, src, srcLen); + } + { +- UInt32 x86State; +- x86_Convert_Init(x86State); +- x86_Convert(filteredStream, srcLen, 0, &x86State, 1); ++ UInt32 x86State = Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL; ++ z7_BranchConvSt_X86_Enc(filteredStream, srcLen, 0, &x86State); + } + } + +diff --git a/src/lzma/LzmaDec.c b/src/lzma/LzmaDec.c +index 536fc6ed3..535c60c08 100644 +--- a/src/lzma/LzmaDec.c ++++ b/src/lzma/LzmaDec.c +@@ -1,5 +1,5 @@ + /* LzmaDec.c -- LZMA Decoder +-2021-04-01 : Igor Pavlov : Public domain */ ++2023-04-07 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -8,15 +8,15 @@ + /* #include "CpuArch.h" */ + #include "LzmaDec.h" + +-#define kNumTopBits 24 +-#define kTopValue ((UInt32)1 << kNumTopBits) ++// #define kNumTopBits 24 ++#define kTopValue ((UInt32)1 << 24) + + #define kNumBitModelTotalBits 11 + #define kBitModelTotal (1 << kNumBitModelTotalBits) + + #define RC_INIT_SIZE 5 + +-#ifndef _LZMA_DEC_OPT ++#ifndef Z7_LZMA_DEC_OPT + + #define kNumMoveBits 5 + #define NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | (*buf++); } +@@ -25,14 +25,14 @@ + #define UPDATE_0(p) range = bound; *(p) = (CLzmaProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); + #define UPDATE_1(p) range -= bound; code -= bound; *(p) = (CLzmaProb)(ttt - (ttt >> kNumMoveBits)); + #define GET_BIT2(p, i, A0, A1) IF_BIT_0(p) \ +- { UPDATE_0(p); i = (i + i); A0; } else \ +- { UPDATE_1(p); i = (i + i) + 1; A1; } ++ { UPDATE_0(p) i = (i + i); A0; } else \ ++ { UPDATE_1(p) i = (i + i) + 1; A1; } + + #define TREE_GET_BIT(probs, i) { GET_BIT2(probs + i, i, ;, ;); } + + #define REV_BIT(p, i, A0, A1) IF_BIT_0(p + i) \ +- { UPDATE_0(p + i); A0; } else \ +- { UPDATE_1(p + i); A1; } ++ { UPDATE_0(p + i) A0; } else \ ++ { UPDATE_1(p + i) A1; } + #define REV_BIT_VAR( p, i, m) REV_BIT(p, i, i += m; m += m, m += m; i += m; ) + #define REV_BIT_CONST(p, i, m) REV_BIT(p, i, i += m; , i += m * 2; ) + #define REV_BIT_LAST( p, i, m) REV_BIT(p, i, i -= m , ; ) +@@ -40,19 +40,19 @@ + #define TREE_DECODE(probs, limit, i) \ + { i = 1; do { TREE_GET_BIT(probs, i); } while (i < limit); i -= limit; } + +-/* #define _LZMA_SIZE_OPT */ ++/* #define Z7_LZMA_SIZE_OPT */ + +-#ifdef _LZMA_SIZE_OPT ++#ifdef Z7_LZMA_SIZE_OPT + #define TREE_6_DECODE(probs, i) TREE_DECODE(probs, (1 << 6), i) + #else + #define TREE_6_DECODE(probs, i) \ + { i = 1; \ +- TREE_GET_BIT(probs, i); \ +- TREE_GET_BIT(probs, i); \ +- TREE_GET_BIT(probs, i); \ +- TREE_GET_BIT(probs, i); \ +- TREE_GET_BIT(probs, i); \ +- TREE_GET_BIT(probs, i); \ ++ TREE_GET_BIT(probs, i) \ ++ TREE_GET_BIT(probs, i) \ ++ TREE_GET_BIT(probs, i) \ ++ TREE_GET_BIT(probs, i) \ ++ TREE_GET_BIT(probs, i) \ ++ TREE_GET_BIT(probs, i) \ + i -= 0x40; } + #endif + +@@ -64,25 +64,25 @@ + probLit = prob + (offs + bit + symbol); \ + GET_BIT2(probLit, symbol, offs ^= bit; , ;) + +-#endif // _LZMA_DEC_OPT ++#endif // Z7_LZMA_DEC_OPT + + + #define NORMALIZE_CHECK if (range < kTopValue) { if (buf >= bufLimit) return DUMMY_INPUT_EOF; range <<= 8; code = (code << 8) | (*buf++); } + +-#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK; bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound) ++#define IF_BIT_0_CHECK(p) ttt = *(p); NORMALIZE_CHECK bound = (range >> kNumBitModelTotalBits) * (UInt32)ttt; if (code < bound) + #define UPDATE_0_CHECK range = bound; + #define UPDATE_1_CHECK range -= bound; code -= bound; + #define GET_BIT2_CHECK(p, i, A0, A1) IF_BIT_0_CHECK(p) \ +- { UPDATE_0_CHECK; i = (i + i); A0; } else \ +- { UPDATE_1_CHECK; i = (i + i) + 1; A1; } ++ { UPDATE_0_CHECK i = (i + i); A0; } else \ ++ { UPDATE_1_CHECK i = (i + i) + 1; A1; } + #define GET_BIT_CHECK(p, i) GET_BIT2_CHECK(p, i, ; , ;) + #define TREE_DECODE_CHECK(probs, limit, i) \ + { i = 1; do { GET_BIT_CHECK(probs + i, i) } while (i < limit); i -= limit; } + + + #define REV_BIT_CHECK(p, i, m) IF_BIT_0_CHECK(p + i) \ +- { UPDATE_0_CHECK; i += m; m += m; } else \ +- { UPDATE_1_CHECK; m += m; i += m; } ++ { UPDATE_0_CHECK i += m; m += m; } else \ ++ { UPDATE_1_CHECK m += m; i += m; } + + + #define kNumPosBitsMax 4 +@@ -224,14 +224,14 @@ LZMA_DECODE_REAL() + */ + + +-#ifdef _LZMA_DEC_OPT ++#ifdef Z7_LZMA_DEC_OPT + +-int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit); ++int Z7_FASTCALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit); + + #else + + static +-int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit) ++int Z7_FASTCALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit) + { + CLzmaProb *probs = GET_PROBS; + unsigned state = (unsigned)p->state; +@@ -263,7 +263,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + IF_BIT_0(prob) + { + unsigned symbol; +- UPDATE_0(prob); ++ UPDATE_0(prob) + prob = probs + Literal; + if (processedPos != 0 || checkDicSize != 0) + prob += (UInt32)3 * ((((processedPos << 8) + dic[(dicPos == 0 ? dicBufSize : dicPos) - 1]) & lpMask) << lc); +@@ -273,7 +273,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + { + state -= (state < 4) ? state : 3; + symbol = 1; +- #ifdef _LZMA_SIZE_OPT ++ #ifdef Z7_LZMA_SIZE_OPT + do { NORMAL_LITER_DEC } while (symbol < 0x100); + #else + NORMAL_LITER_DEC +@@ -292,7 +292,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + unsigned offs = 0x100; + state -= (state < 10) ? 3 : 6; + symbol = 1; +- #ifdef _LZMA_SIZE_OPT ++ #ifdef Z7_LZMA_SIZE_OPT + do + { + unsigned bit; +@@ -321,25 +321,25 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + } + + { +- UPDATE_1(prob); ++ UPDATE_1(prob) + prob = probs + IsRep + state; + IF_BIT_0(prob) + { +- UPDATE_0(prob); ++ UPDATE_0(prob) + state += kNumStates; + prob = probs + LenCoder; + } + else + { +- UPDATE_1(prob); ++ UPDATE_1(prob) + prob = probs + IsRepG0 + state; + IF_BIT_0(prob) + { +- UPDATE_0(prob); ++ UPDATE_0(prob) + prob = probs + IsRep0Long + COMBINED_PS_STATE; + IF_BIT_0(prob) + { +- UPDATE_0(prob); ++ UPDATE_0(prob) + + // that case was checked before with kBadRepCode + // if (checkDicSize == 0 && processedPos == 0) { len = kMatchSpecLen_Error_Data + 1; break; } +@@ -353,30 +353,30 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + state = state < kNumLitStates ? 9 : 11; + continue; + } +- UPDATE_1(prob); ++ UPDATE_1(prob) + } + else + { + UInt32 distance; +- UPDATE_1(prob); ++ UPDATE_1(prob) + prob = probs + IsRepG1 + state; + IF_BIT_0(prob) + { +- UPDATE_0(prob); ++ UPDATE_0(prob) + distance = rep1; + } + else + { +- UPDATE_1(prob); ++ UPDATE_1(prob) + prob = probs + IsRepG2 + state; + IF_BIT_0(prob) + { +- UPDATE_0(prob); ++ UPDATE_0(prob) + distance = rep2; + } + else + { +- UPDATE_1(prob); ++ UPDATE_1(prob) + distance = rep3; + rep3 = rep2; + } +@@ -389,37 +389,37 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + prob = probs + RepLenCoder; + } + +- #ifdef _LZMA_SIZE_OPT ++ #ifdef Z7_LZMA_SIZE_OPT + { + unsigned lim, offset; + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { +- UPDATE_0(probLen); ++ UPDATE_0(probLen) + probLen = prob + LenLow + GET_LEN_STATE; + offset = 0; + lim = (1 << kLenNumLowBits); + } + else + { +- UPDATE_1(probLen); ++ UPDATE_1(probLen) + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { +- UPDATE_0(probLen); ++ UPDATE_0(probLen) + probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); + offset = kLenNumLowSymbols; + lim = (1 << kLenNumLowBits); + } + else + { +- UPDATE_1(probLen); ++ UPDATE_1(probLen) + probLen = prob + LenHigh; + offset = kLenNumLowSymbols * 2; + lim = (1 << kLenNumHighBits); + } + } +- TREE_DECODE(probLen, lim, len); ++ TREE_DECODE(probLen, lim, len) + len += offset; + } + #else +@@ -427,32 +427,32 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0(probLen) + { +- UPDATE_0(probLen); ++ UPDATE_0(probLen) + probLen = prob + LenLow + GET_LEN_STATE; + len = 1; +- TREE_GET_BIT(probLen, len); +- TREE_GET_BIT(probLen, len); +- TREE_GET_BIT(probLen, len); ++ TREE_GET_BIT(probLen, len) ++ TREE_GET_BIT(probLen, len) ++ TREE_GET_BIT(probLen, len) + len -= 8; + } + else + { +- UPDATE_1(probLen); ++ UPDATE_1(probLen) + probLen = prob + LenChoice2; + IF_BIT_0(probLen) + { +- UPDATE_0(probLen); ++ UPDATE_0(probLen) + probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); + len = 1; +- TREE_GET_BIT(probLen, len); +- TREE_GET_BIT(probLen, len); +- TREE_GET_BIT(probLen, len); ++ TREE_GET_BIT(probLen, len) ++ TREE_GET_BIT(probLen, len) ++ TREE_GET_BIT(probLen, len) + } + else + { +- UPDATE_1(probLen); ++ UPDATE_1(probLen) + probLen = prob + LenHigh; +- TREE_DECODE(probLen, (1 << kLenNumHighBits), len); ++ TREE_DECODE(probLen, (1 << kLenNumHighBits), len) + len += kLenNumLowSymbols * 2; + } + } +@@ -464,7 +464,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + UInt32 distance; + prob = probs + PosSlot + + ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) << kNumPosSlotBits); +- TREE_6_DECODE(prob, distance); ++ TREE_6_DECODE(prob, distance) + if (distance >= kStartPosModelIndex) + { + unsigned posSlot = (unsigned)distance; +@@ -479,7 +479,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + distance++; + do + { +- REV_BIT_VAR(prob, distance, m); ++ REV_BIT_VAR(prob, distance, m) + } + while (--numDirectBits); + distance -= m; +@@ -514,10 +514,10 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + distance <<= kNumAlignBits; + { + unsigned i = 1; +- REV_BIT_CONST(prob, i, 1); +- REV_BIT_CONST(prob, i, 2); +- REV_BIT_CONST(prob, i, 4); +- REV_BIT_LAST (prob, i, 8); ++ REV_BIT_CONST(prob, i, 1) ++ REV_BIT_CONST(prob, i, 2) ++ REV_BIT_CONST(prob, i, 4) ++ REV_BIT_LAST (prob, i, 8) + distance |= i; + } + if (distance == (UInt32)0xFFFFFFFF) +@@ -592,7 +592,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + } + while (dicPos < limit && buf < bufLimit); + +- NORMALIZE; ++ NORMALIZE + + p->buf = buf; + p->range = range; +@@ -613,7 +613,7 @@ int MY_FAST_CALL LZMA_DECODE_REAL(CLzmaDec *p, SizeT limit, const Byte *bufLimit + + + +-static void MY_FAST_CALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) ++static void Z7_FASTCALL LzmaDec_WriteRem(CLzmaDec *p, SizeT limit) + { + unsigned len = (unsigned)p->remainLen; + if (len == 0 /* || len >= kMatchSpecLenStart */) +@@ -683,7 +683,7 @@ and we support the following state of (p->checkDicSize): + (p->checkDicSize == p->prop.dicSize) + */ + +-static int MY_FAST_CALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) ++static int Z7_FASTCALL LzmaDec_DecodeReal2(CLzmaDec *p, SizeT limit, const Byte *bufLimit) + { + if (p->checkDicSize == 0) + { +@@ -767,54 +767,54 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt + else + { + unsigned len; +- UPDATE_1_CHECK; ++ UPDATE_1_CHECK + + prob = probs + IsRep + state; + IF_BIT_0_CHECK(prob) + { +- UPDATE_0_CHECK; ++ UPDATE_0_CHECK + state = 0; + prob = probs + LenCoder; + res = DUMMY_MATCH; + } + else + { +- UPDATE_1_CHECK; ++ UPDATE_1_CHECK + res = DUMMY_REP; + prob = probs + IsRepG0 + state; + IF_BIT_0_CHECK(prob) + { +- UPDATE_0_CHECK; ++ UPDATE_0_CHECK + prob = probs + IsRep0Long + COMBINED_PS_STATE; + IF_BIT_0_CHECK(prob) + { +- UPDATE_0_CHECK; ++ UPDATE_0_CHECK + break; + } + else + { +- UPDATE_1_CHECK; ++ UPDATE_1_CHECK + } + } + else + { +- UPDATE_1_CHECK; ++ UPDATE_1_CHECK + prob = probs + IsRepG1 + state; + IF_BIT_0_CHECK(prob) + { +- UPDATE_0_CHECK; ++ UPDATE_0_CHECK + } + else + { +- UPDATE_1_CHECK; ++ UPDATE_1_CHECK + prob = probs + IsRepG2 + state; + IF_BIT_0_CHECK(prob) + { +- UPDATE_0_CHECK; ++ UPDATE_0_CHECK + } + else + { +- UPDATE_1_CHECK; ++ UPDATE_1_CHECK + } + } + } +@@ -826,31 +826,31 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt + const CLzmaProb *probLen = prob + LenChoice; + IF_BIT_0_CHECK(probLen) + { +- UPDATE_0_CHECK; ++ UPDATE_0_CHECK + probLen = prob + LenLow + GET_LEN_STATE; + offset = 0; + limit = 1 << kLenNumLowBits; + } + else + { +- UPDATE_1_CHECK; ++ UPDATE_1_CHECK + probLen = prob + LenChoice2; + IF_BIT_0_CHECK(probLen) + { +- UPDATE_0_CHECK; ++ UPDATE_0_CHECK + probLen = prob + LenLow + GET_LEN_STATE + (1 << kLenNumLowBits); + offset = kLenNumLowSymbols; + limit = 1 << kLenNumLowBits; + } + else + { +- UPDATE_1_CHECK; ++ UPDATE_1_CHECK + probLen = prob + LenHigh; + offset = kLenNumLowSymbols * 2; + limit = 1 << kLenNumHighBits; + } + } +- TREE_DECODE_CHECK(probLen, limit, len); ++ TREE_DECODE_CHECK(probLen, limit, len) + len += offset; + } + +@@ -860,7 +860,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt + prob = probs + PosSlot + + ((len < kNumLenToPosStates - 1 ? len : kNumLenToPosStates - 1) << + kNumPosSlotBits); +- TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot); ++ TREE_DECODE_CHECK(prob, 1 << kNumPosSlotBits, posSlot) + if (posSlot >= kStartPosModelIndex) + { + unsigned numDirectBits = ((posSlot >> 1) - 1); +@@ -888,7 +888,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt + unsigned m = 1; + do + { +- REV_BIT_CHECK(prob, i, m); ++ REV_BIT_CHECK(prob, i, m) + } + while (--numDirectBits); + } +@@ -897,7 +897,7 @@ static ELzmaDummy LzmaDec_TryDummy(const CLzmaDec *p, const Byte *buf, const Byt + } + break; + } +- NORMALIZE_CHECK; ++ NORMALIZE_CHECK + + *bufOut = buf; + return res; +@@ -943,7 +943,7 @@ When the decoder lookahead, and the lookahead symbol is not end_marker, we have + */ + + +-#define RETURN__NOT_FINISHED__FOR_FINISH \ ++#define RETURN_NOT_FINISHED_FOR_FINISH \ + *status = LZMA_STATUS_NOT_FINISHED; \ + return SZ_ERROR_DATA; // for strict mode + // return SZ_OK; // for relaxed mode +@@ -1029,7 +1029,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr + } + if (p->remainLen != 0) + { +- RETURN__NOT_FINISHED__FOR_FINISH; ++ RETURN_NOT_FINISHED_FOR_FINISH + } + checkEndMarkNow = 1; + } +@@ -1072,7 +1072,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr + for (i = 0; i < (unsigned)dummyProcessed; i++) + p->tempBuf[i] = src[i]; + // p->remainLen = kMatchSpecLen_Error_Data; +- RETURN__NOT_FINISHED__FOR_FINISH; ++ RETURN_NOT_FINISHED_FOR_FINISH + } + + bufLimit = src; +@@ -1150,7 +1150,7 @@ SRes LzmaDec_DecodeToDic(CLzmaDec *p, SizeT dicLimit, const Byte *src, SizeT *sr + (*srcLen) += (unsigned)dummyProcessed - p->tempBufSize; + p->tempBufSize = (unsigned)dummyProcessed; + // p->remainLen = kMatchSpecLen_Error_Data; +- RETURN__NOT_FINISHED__FOR_FINISH; ++ RETURN_NOT_FINISHED_FOR_FINISH + } + } + +@@ -1299,8 +1299,8 @@ static SRes LzmaDec_AllocateProbs2(CLzmaDec *p, const CLzmaProps *propNew, ISzAl + SRes LzmaDec_AllocateProbs(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAllocPtr alloc) + { + CLzmaProps propNew; +- RINOK(LzmaProps_Decode(&propNew, props, propsSize)); +- RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); ++ RINOK(LzmaProps_Decode(&propNew, props, propsSize)) ++ RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)) + p->prop = propNew; + return SZ_OK; + } +@@ -1309,14 +1309,14 @@ SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAll + { + CLzmaProps propNew; + SizeT dicBufSize; +- RINOK(LzmaProps_Decode(&propNew, props, propsSize)); +- RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)); ++ RINOK(LzmaProps_Decode(&propNew, props, propsSize)) ++ RINOK(LzmaDec_AllocateProbs2(p, &propNew, alloc)) + + { + UInt32 dictSize = propNew.dicSize; + SizeT mask = ((UInt32)1 << 12) - 1; + if (dictSize >= ((UInt32)1 << 30)) mask = ((UInt32)1 << 22) - 1; +- else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1;; ++ else if (dictSize >= ((UInt32)1 << 22)) mask = ((UInt32)1 << 20) - 1; + dicBufSize = ((SizeT)dictSize + mask) & ~mask; + if (dicBufSize < dictSize) + dicBufSize = dictSize; +@@ -1348,8 +1348,8 @@ SRes LzmaDecode(Byte *dest, SizeT *destLen, const Byte *src, SizeT *srcLen, + *status = LZMA_STATUS_NOT_SPECIFIED; + if (inSize < RC_INIT_SIZE) + return SZ_ERROR_INPUT_EOF; +- LzmaDec_Construct(&p); +- RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc)); ++ LzmaDec_CONSTRUCT(&p) ++ RINOK(LzmaDec_AllocateProbs(&p, propData, propSize, alloc)) + p.dic = dest; + p.dicBufSize = outSize; + LzmaDec_Init(&p); +diff --git a/src/lzma/LzmaDec.h b/src/lzma/LzmaDec.h +index 6f1296250..b0ce28fa0 100644 +--- a/src/lzma/LzmaDec.h ++++ b/src/lzma/LzmaDec.h +@@ -1,19 +1,19 @@ + /* LzmaDec.h -- LZMA Decoder +-2020-03-19 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __LZMA_DEC_H +-#define __LZMA_DEC_H ++#ifndef ZIP7_INC_LZMA_DEC_H ++#define ZIP7_INC_LZMA_DEC_H + + #include "7zTypes.h" + + EXTERN_C_BEGIN + +-/* #define _LZMA_PROB32 */ +-/* _LZMA_PROB32 can increase the speed on some CPUs, ++/* #define Z7_LZMA_PROB32 */ ++/* Z7_LZMA_PROB32 can increase the speed on some CPUs, + but memory usage for CLzmaDec::probs will be doubled in that case */ + + typedef +-#ifdef _LZMA_PROB32 ++#ifdef Z7_LZMA_PROB32 + UInt32 + #else + UInt16 +@@ -25,7 +25,7 @@ typedef + + #define LZMA_PROPS_SIZE 5 + +-typedef struct _CLzmaProps ++typedef struct + { + Byte lc; + Byte lp; +@@ -73,7 +73,8 @@ typedef struct + Byte tempBuf[LZMA_REQUIRED_INPUT_MAX]; + } CLzmaDec; + +-#define LzmaDec_Construct(p) { (p)->dic = NULL; (p)->probs = NULL; } ++#define LzmaDec_CONSTRUCT(p) { (p)->dic = NULL; (p)->probs = NULL; } ++#define LzmaDec_Construct(p) LzmaDec_CONSTRUCT(p) + + void LzmaDec_Init(CLzmaDec *p); + +diff --git a/src/lzma/LzmaEnc.c b/src/lzma/LzmaEnc.c +index 2fa3456b7..664397349 100644 +--- a/src/lzma/LzmaEnc.c ++++ b/src/lzma/LzmaEnc.c +@@ -1,5 +1,5 @@ + /* LzmaEnc.c -- LZMA Encoder +-2021-11-18: Igor Pavlov : Public domain */ ++2023-04-13: Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -16,22 +16,22 @@ + #include "LzmaEnc.h" + + #include "LzFind.h" +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + #include "LzFindMt.h" + #endif + + /* the following LzmaEnc_* declarations is internal LZMA interface for LZMA2 encoder */ + +-SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, ISeqInStream *inStream, UInt32 keepWindowSize, ++SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle p, ISeqInStreamPtr inStream, UInt32 keepWindowSize, + ISzAllocPtr alloc, ISzAllocPtr allocBig); +-SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen, ++SRes LzmaEnc_MemPrepare(CLzmaEncHandle p, const Byte *src, SizeT srcLen, + UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig); +-SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit, ++SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle p, BoolInt reInit, + Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize); +-const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp); +-void LzmaEnc_Finish(CLzmaEncHandle pp); +-void LzmaEnc_SaveState(CLzmaEncHandle pp); +-void LzmaEnc_RestoreState(CLzmaEncHandle pp); ++const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle p); ++void LzmaEnc_Finish(CLzmaEncHandle p); ++void LzmaEnc_SaveState(CLzmaEncHandle p); ++void LzmaEnc_RestoreState(CLzmaEncHandle p); + + #ifdef SHOW_STAT + static unsigned g_STAT_OFFSET = 0; +@@ -40,8 +40,8 @@ static unsigned g_STAT_OFFSET = 0; + /* for good normalization speed we still reserve 256 MB before 4 GB range */ + #define kLzmaMaxHistorySize ((UInt32)15 << 28) + +-#define kNumTopBits 24 +-#define kTopValue ((UInt32)1 << kNumTopBits) ++// #define kNumTopBits 24 ++#define kTopValue ((UInt32)1 << 24) + + #define kNumBitModelTotalBits 11 + #define kBitModelTotal (1 << kNumBitModelTotalBits) +@@ -60,6 +60,7 @@ void LzmaEncProps_Init(CLzmaEncProps *p) + p->dictSize = p->mc = 0; + p->reduceSize = (UInt64)(Int64)-1; + p->lc = p->lp = p->pb = p->algo = p->fb = p->btMode = p->numHashBytes = p->numThreads = -1; ++ p->numHashOutBits = 0; + p->writeEndMark = 0; + p->affinity = 0; + } +@@ -99,7 +100,7 @@ void LzmaEncProps_Normalize(CLzmaEncProps *p) + + if (p->numThreads < 0) + p->numThreads = +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + ((p->btMode && p->algo) ? 2 : 1); + #else + 1; +@@ -293,7 +294,7 @@ typedef struct + #define kNumFullDistances (1 << (kEndPosModelIndex >> 1)) + + typedef +-#ifdef _LZMA_PROB32 ++#ifdef Z7_LZMA_PROB32 + UInt32 + #else + UInt16 +@@ -350,7 +351,7 @@ typedef struct + Byte *buf; + Byte *bufLim; + Byte *bufBase; +- ISeqOutStream *outStream; ++ ISeqOutStreamPtr outStream; + UInt64 processed; + SRes res; + } CRangeEnc; +@@ -383,7 +384,7 @@ typedef struct + typedef UInt32 CProbPrice; + + +-typedef struct ++struct CLzmaEnc + { + void *matchFinderObj; + IMatchFinder2 matchFinder; +@@ -426,7 +427,7 @@ typedef struct + UInt32 dictSize; + SRes result; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + BoolInt mtMode; + // begin of CMatchFinderMt is used in LZ thread + CMatchFinderMt matchFinderMt; +@@ -439,7 +440,7 @@ typedef struct + + // we suppose that we have 8-bytes alignment after CMatchFinder + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + Byte pad[128]; + #endif + +@@ -479,77 +480,59 @@ typedef struct + CSaveState saveState; + + // BoolInt mf_Failure; +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + Byte pad2[128]; + #endif +-} CLzmaEnc; ++}; + + + #define MFB (p->matchFinderBase) + /* +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + #define MFB (p->matchFinderMt.MatchFinder) + #endif + */ + +-#define COPY_ARR(dest, src, arr) memcpy(dest->arr, src->arr, sizeof(src->arr)); +- +-void LzmaEnc_SaveState(CLzmaEncHandle pp) +-{ +- CLzmaEnc *p = (CLzmaEnc *)pp; +- CSaveState *dest = &p->saveState; +- +- dest->state = p->state; +- +- dest->lenProbs = p->lenProbs; +- dest->repLenProbs = p->repLenProbs; +- +- COPY_ARR(dest, p, reps); +- +- COPY_ARR(dest, p, posAlignEncoder); +- COPY_ARR(dest, p, isRep); +- COPY_ARR(dest, p, isRepG0); +- COPY_ARR(dest, p, isRepG1); +- COPY_ARR(dest, p, isRepG2); +- COPY_ARR(dest, p, isMatch); +- COPY_ARR(dest, p, isRep0Long); +- COPY_ARR(dest, p, posSlotEncoder); +- COPY_ARR(dest, p, posEncoders); +- +- memcpy(dest->litProbs, p->litProbs, ((UInt32)0x300 << p->lclp) * sizeof(CLzmaProb)); ++// #define GET_CLzmaEnc_p CLzmaEnc *p = (CLzmaEnc*)(void *)p; ++// #define GET_const_CLzmaEnc_p const CLzmaEnc *p = (const CLzmaEnc*)(const void *)p; ++ ++#define COPY_ARR(dest, src, arr) memcpy((dest)->arr, (src)->arr, sizeof((src)->arr)); ++ ++#define COPY_LZMA_ENC_STATE(d, s, p) \ ++ (d)->state = (s)->state; \ ++ COPY_ARR(d, s, reps) \ ++ COPY_ARR(d, s, posAlignEncoder) \ ++ COPY_ARR(d, s, isRep) \ ++ COPY_ARR(d, s, isRepG0) \ ++ COPY_ARR(d, s, isRepG1) \ ++ COPY_ARR(d, s, isRepG2) \ ++ COPY_ARR(d, s, isMatch) \ ++ COPY_ARR(d, s, isRep0Long) \ ++ COPY_ARR(d, s, posSlotEncoder) \ ++ COPY_ARR(d, s, posEncoders) \ ++ (d)->lenProbs = (s)->lenProbs; \ ++ (d)->repLenProbs = (s)->repLenProbs; \ ++ memcpy((d)->litProbs, (s)->litProbs, ((UInt32)0x300 << (p)->lclp) * sizeof(CLzmaProb)); ++ ++void LzmaEnc_SaveState(CLzmaEncHandle p) ++{ ++ // GET_CLzmaEnc_p ++ CSaveState *v = &p->saveState; ++ COPY_LZMA_ENC_STATE(v, p, p) + } + +- +-void LzmaEnc_RestoreState(CLzmaEncHandle pp) ++void LzmaEnc_RestoreState(CLzmaEncHandle p) + { +- CLzmaEnc *dest = (CLzmaEnc *)pp; +- const CSaveState *p = &dest->saveState; +- +- dest->state = p->state; +- +- dest->lenProbs = p->lenProbs; +- dest->repLenProbs = p->repLenProbs; +- +- COPY_ARR(dest, p, reps); +- +- COPY_ARR(dest, p, posAlignEncoder); +- COPY_ARR(dest, p, isRep); +- COPY_ARR(dest, p, isRepG0); +- COPY_ARR(dest, p, isRepG1); +- COPY_ARR(dest, p, isRepG2); +- COPY_ARR(dest, p, isMatch); +- COPY_ARR(dest, p, isRep0Long); +- COPY_ARR(dest, p, posSlotEncoder); +- COPY_ARR(dest, p, posEncoders); +- +- memcpy(dest->litProbs, p->litProbs, ((UInt32)0x300 << dest->lclp) * sizeof(CLzmaProb)); ++ // GET_CLzmaEnc_p ++ const CSaveState *v = &p->saveState; ++ COPY_LZMA_ENC_STATE(p, v, p) + } + + +- +-SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2) ++Z7_NO_INLINE ++SRes LzmaEnc_SetProps(CLzmaEncHandle p, const CLzmaEncProps *props2) + { +- CLzmaEnc *p = (CLzmaEnc *)pp; ++ // GET_CLzmaEnc_p + CLzmaEncProps props = *props2; + LzmaEncProps_Normalize(&props); + +@@ -585,6 +568,7 @@ SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2) + p->fastMode = (props.algo == 0); + // p->_maxMode = True7z; + MFB.btMode = (Byte)(props.btMode ? 1 : 0); ++ // MFB.btMode = (Byte)(props.btMode); + { + unsigned numHashBytes = 4; + if (props.btMode) +@@ -595,13 +579,15 @@ SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2) + if (props.numHashBytes >= 5) numHashBytes = 5; + + MFB.numHashBytes = numHashBytes; ++ // MFB.numHashBytes_Min = 2; ++ MFB.numHashOutBits = (Byte)props.numHashOutBits; + } + + MFB.cutValue = props.mc; + + p->writeEndMark = (BoolInt)props.writeEndMark; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + /* + if (newMultiThread != _multiThread) + { +@@ -618,9 +604,9 @@ SRes LzmaEnc_SetProps(CLzmaEncHandle pp, const CLzmaEncProps *props2) + } + + +-void LzmaEnc_SetDataSize(CLzmaEncHandle pp, UInt64 expectedDataSiize) ++void LzmaEnc_SetDataSize(CLzmaEncHandle p, UInt64 expectedDataSiize) + { +- CLzmaEnc *p = (CLzmaEnc *)pp; ++ // GET_CLzmaEnc_p + MFB.expectedDataSize = expectedDataSiize; + } + +@@ -684,7 +670,7 @@ static void RangeEnc_Init(CRangeEnc *p) + p->res = SZ_OK; + } + +-MY_NO_INLINE static void RangeEnc_FlushStream(CRangeEnc *p) ++Z7_NO_INLINE static void RangeEnc_FlushStream(CRangeEnc *p) + { + const size_t num = (size_t)(p->buf - p->bufBase); + if (p->res == SZ_OK) +@@ -696,7 +682,7 @@ MY_NO_INLINE static void RangeEnc_FlushStream(CRangeEnc *p) + p->buf = p->bufBase; + } + +-MY_NO_INLINE static void MY_FAST_CALL RangeEnc_ShiftLow(CRangeEnc *p) ++Z7_NO_INLINE static void Z7_FASTCALL RangeEnc_ShiftLow(CRangeEnc *p) + { + UInt32 low = (UInt32)p->low; + unsigned high = (unsigned)(p->low >> 32); +@@ -741,9 +727,9 @@ static void RangeEnc_FlushData(CRangeEnc *p) + ttt = *(prob); \ + newBound = (range >> kNumBitModelTotalBits) * ttt; + +-// #define _LZMA_ENC_USE_BRANCH ++// #define Z7_LZMA_ENC_USE_BRANCH + +-#ifdef _LZMA_ENC_USE_BRANCH ++#ifdef Z7_LZMA_ENC_USE_BRANCH + + #define RC_BIT(p, prob, bit) { \ + RC_BIT_PRE(p, prob) \ +@@ -811,7 +797,7 @@ static void LitEnc_Encode(CRangeEnc *p, CLzmaProb *probs, UInt32 sym) + CLzmaProb *prob = probs + (sym >> 8); + UInt32 bit = (sym >> 7) & 1; + sym <<= 1; +- RC_BIT(p, prob, bit); ++ RC_BIT(p, prob, bit) + } + while (sym < 0x10000); + p->range = range; +@@ -833,7 +819,7 @@ static void LitEnc_EncodeMatched(CRangeEnc *p, CLzmaProb *probs, UInt32 sym, UIn + bit = (sym >> 7) & 1; + sym <<= 1; + offs &= ~(matchByte ^ sym); +- RC_BIT(p, prob, bit); ++ RC_BIT(p, prob, bit) + } + while (sym < 0x10000); + p->range = range; +@@ -867,10 +853,10 @@ static void LzmaEnc_InitPriceTables(CProbPrice *ProbPrices) + + + #define GET_PRICE(prob, bit) \ +- p->ProbPrices[((prob) ^ (unsigned)(((-(int)(bit))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; ++ p->ProbPrices[((prob) ^ (unsigned)(((-(int)(bit))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits] + + #define GET_PRICEa(prob, bit) \ +- ProbPrices[((prob) ^ (unsigned)((-((int)(bit))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits]; ++ ProbPrices[((prob) ^ (unsigned)((-((int)(bit))) & (kBitModelTotal - 1))) >> kNumMoveReducingBits] + + #define GET_PRICE_0(prob) p->ProbPrices[(prob) >> kNumMoveReducingBits] + #define GET_PRICE_1(prob) p->ProbPrices[((prob) ^ (kBitModelTotal - 1)) >> kNumMoveReducingBits] +@@ -921,7 +907,7 @@ static void RcTree_ReverseEncode(CRangeEnc *rc, CLzmaProb *probs, unsigned numBi + unsigned bit = sym & 1; + // RangeEnc_EncodeBit(rc, probs + m, bit); + sym >>= 1; +- RC_BIT(rc, probs + m, bit); ++ RC_BIT(rc, probs + m, bit) + m = (m << 1) | bit; + } + while (--numBits); +@@ -944,15 +930,15 @@ static void LenEnc_Encode(CLenEnc *p, CRangeEnc *rc, unsigned sym, unsigned posS + UInt32 range, ttt, newBound; + CLzmaProb *probs = p->low; + range = rc->range; +- RC_BIT_PRE(rc, probs); ++ RC_BIT_PRE(rc, probs) + if (sym >= kLenNumLowSymbols) + { +- RC_BIT_1(rc, probs); ++ RC_BIT_1(rc, probs) + probs += kLenNumLowSymbols; +- RC_BIT_PRE(rc, probs); ++ RC_BIT_PRE(rc, probs) + if (sym >= kLenNumLowSymbols * 2) + { +- RC_BIT_1(rc, probs); ++ RC_BIT_1(rc, probs) + rc->range = range; + // RcTree_Encode(rc, p->high, kLenNumHighBits, sym - kLenNumLowSymbols * 2); + LitEnc_Encode(rc, p->high, sym - kLenNumLowSymbols * 2); +@@ -965,11 +951,11 @@ static void LenEnc_Encode(CLenEnc *p, CRangeEnc *rc, unsigned sym, unsigned posS + { + unsigned m; + unsigned bit; +- RC_BIT_0(rc, probs); ++ RC_BIT_0(rc, probs) + probs += (posState << (1 + kLenNumLowBits)); +- bit = (sym >> 2) ; RC_BIT(rc, probs + 1, bit); m = (1 << 1) + bit; +- bit = (sym >> 1) & 1; RC_BIT(rc, probs + m, bit); m = (m << 1) + bit; +- bit = sym & 1; RC_BIT(rc, probs + m, bit); ++ bit = (sym >> 2) ; RC_BIT(rc, probs + 1, bit) m = (1 << 1) + bit; ++ bit = (sym >> 1) & 1; RC_BIT(rc, probs + m, bit) m = (m << 1) + bit; ++ bit = sym & 1; RC_BIT(rc, probs + m, bit) + rc->range = range; + } + } +@@ -990,7 +976,7 @@ static void SetPrices_3(const CLzmaProb *probs, UInt32 startPrice, UInt32 *price + } + + +-MY_NO_INLINE static void MY_FAST_CALL LenPriceEnc_UpdateTables( ++Z7_NO_INLINE static void Z7_FASTCALL LenPriceEnc_UpdateTables( + CLenPriceEnc *p, + unsigned numPosStates, + const CLenEnc *enc, +@@ -1152,7 +1138,7 @@ static unsigned ReadMatchDistances(CLzmaEnc *p, unsigned *numPairsRes) + + GET_PRICE_1(p->isRep[state]) \ + + GET_PRICE_0(p->isRepG0[state]) + +-MY_FORCE_INLINE ++Z7_FORCE_INLINE + static UInt32 GetPrice_PureRep(const CLzmaEnc *p, unsigned repIndex, size_t state, size_t posState) + { + UInt32 price; +@@ -1331,7 +1317,7 @@ static unsigned GetOptimum(CLzmaEnc *p, UInt32 position) + LitEnc_GetPrice(probs, curByte, p->ProbPrices)); + } + +- MakeAs_Lit(&p->opt[1]); ++ MakeAs_Lit(&p->opt[1]) + + matchPrice = GET_PRICE_1(p->isMatch[p->state][posState]); + repMatchPrice = matchPrice + GET_PRICE_1(p->isRep[p->state]); +@@ -1343,7 +1329,7 @@ static unsigned GetOptimum(CLzmaEnc *p, UInt32 position) + if (shortRepPrice < p->opt[1].price) + { + p->opt[1].price = shortRepPrice; +- MakeAs_ShortRep(&p->opt[1]); ++ MakeAs_ShortRep(&p->opt[1]) + } + if (last < 2) + { +@@ -1410,7 +1396,7 @@ static unsigned GetOptimum(CLzmaEnc *p, UInt32 position) + else + { + unsigned slot; +- GetPosSlot2(dist, slot); ++ GetPosSlot2(dist, slot) + price += p->alignPrices[dist & kAlignMask]; + price += p->posSlotPrices[lenToPosState][slot]; + } +@@ -1486,7 +1472,7 @@ static unsigned GetOptimum(CLzmaEnc *p, UInt32 position) + unsigned delta = best - cur; + if (delta != 0) + { +- MOVE_POS(p, delta); ++ MOVE_POS(p, delta) + } + } + cur = best; +@@ -1633,7 +1619,7 @@ static unsigned GetOptimum(CLzmaEnc *p, UInt32 position) + { + nextOpt->price = litPrice; + nextOpt->len = 1; +- MakeAs_Lit(nextOpt); ++ MakeAs_Lit(nextOpt) + nextIsLit = True7z; + } + } +@@ -1667,7 +1653,7 @@ static unsigned GetOptimum(CLzmaEnc *p, UInt32 position) + { + nextOpt->price = shortRepPrice; + nextOpt->len = 1; +- MakeAs_ShortRep(nextOpt); ++ MakeAs_ShortRep(nextOpt) + nextIsLit = False7z; + } + } +@@ -1871,7 +1857,7 @@ static unsigned GetOptimum(CLzmaEnc *p, UInt32 position) + dist = MATCHES[(size_t)offs + 1]; + + // if (dist >= kNumFullDistances) +- GetPosSlot2(dist, posSlot); ++ GetPosSlot2(dist, posSlot) + + for (len = /*2*/ startLen; ; len++) + { +@@ -1962,7 +1948,7 @@ static unsigned GetOptimum(CLzmaEnc *p, UInt32 position) + break; + dist = MATCHES[(size_t)offs + 1]; + // if (dist >= kNumFullDistances) +- GetPosSlot2(dist, posSlot); ++ GetPosSlot2(dist, posSlot) + } + } + } +@@ -2138,7 +2124,7 @@ static void WriteEndMarker(CLzmaEnc *p, unsigned posState) + { + UInt32 ttt, newBound; + RC_BIT_PRE(p, probs + m) +- RC_BIT_1(&p->rc, probs + m); ++ RC_BIT_1(&p->rc, probs + m) + m = (m << 1) + 1; + } + while (m < (1 << kNumPosSlotBits)); +@@ -2163,7 +2149,7 @@ static void WriteEndMarker(CLzmaEnc *p, unsigned posState) + { + UInt32 ttt, newBound; + RC_BIT_PRE(p, probs + m) +- RC_BIT_1(&p->rc, probs + m); ++ RC_BIT_1(&p->rc, probs + m) + m = (m << 1) + 1; + } + while (m < kAlignTableSize); +@@ -2179,7 +2165,7 @@ static SRes CheckErrors(CLzmaEnc *p) + if (p->rc.res != SZ_OK) + p->result = SZ_ERROR_WRITE; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if ( + // p->mf_Failure || + (p->mtMode && +@@ -2187,7 +2173,7 @@ static SRes CheckErrors(CLzmaEnc *p) + p->matchFinderMt.failure_LZ_BT)) + ) + { +- p->result = MY_HRES_ERROR__INTERNAL_ERROR; ++ p->result = MY_HRES_ERROR_INTERNAL_ERROR; + // printf("\nCheckErrors p->matchFinderMt.failureLZ\n"); + } + #endif +@@ -2201,7 +2187,7 @@ static SRes CheckErrors(CLzmaEnc *p) + } + + +-MY_NO_INLINE static SRes Flush(CLzmaEnc *p, UInt32 nowPos) ++Z7_NO_INLINE static SRes Flush(CLzmaEnc *p, UInt32 nowPos) + { + /* ReleaseMFStream(); */ + p->finished = True7z; +@@ -2213,7 +2199,7 @@ MY_NO_INLINE static SRes Flush(CLzmaEnc *p, UInt32 nowPos) + } + + +-MY_NO_INLINE static void FillAlignPrices(CLzmaEnc *p) ++Z7_NO_INLINE static void FillAlignPrices(CLzmaEnc *p) + { + unsigned i; + const CProbPrice *ProbPrices = p->ProbPrices; +@@ -2237,7 +2223,7 @@ MY_NO_INLINE static void FillAlignPrices(CLzmaEnc *p) + } + + +-MY_NO_INLINE static void FillDistancesPrices(CLzmaEnc *p) ++Z7_NO_INLINE static void FillDistancesPrices(CLzmaEnc *p) + { + // int y; for (y = 0; y < 100; y++) { + +@@ -2337,7 +2323,7 @@ static void LzmaEnc_Construct(CLzmaEnc *p) + RangeEnc_Construct(&p->rc); + MatchFinder_Construct(&MFB); + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + p->matchFinderMt.MatchFinder = &MFB; + MatchFinderMt_Construct(&p->matchFinderMt); + #endif +@@ -2345,7 +2331,7 @@ static void LzmaEnc_Construct(CLzmaEnc *p) + { + CLzmaEncProps props; + LzmaEncProps_Init(&props); +- LzmaEnc_SetProps(p, &props); ++ LzmaEnc_SetProps((CLzmaEncHandle)(void *)p, &props); + } + + #ifndef LZMA_LOG_BSR +@@ -2376,7 +2362,7 @@ static void LzmaEnc_FreeLits(CLzmaEnc *p, ISzAllocPtr alloc) + + static void LzmaEnc_Destruct(CLzmaEnc *p, ISzAllocPtr alloc, ISzAllocPtr allocBig) + { +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + MatchFinderMt_Destruct(&p->matchFinderMt, allocBig); + #endif + +@@ -2387,21 +2373,22 @@ static void LzmaEnc_Destruct(CLzmaEnc *p, ISzAllocPtr alloc, ISzAllocPtr allocBi + + void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAllocPtr alloc, ISzAllocPtr allocBig) + { +- LzmaEnc_Destruct((CLzmaEnc *)p, alloc, allocBig); ++ // GET_CLzmaEnc_p ++ LzmaEnc_Destruct(p, alloc, allocBig); + ISzAlloc_Free(alloc, p); + } + + +-MY_NO_INLINE ++Z7_NO_INLINE + static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, UInt32 maxPackSize, UInt32 maxUnpackSize) + { + UInt32 nowPos32, startPos32; + if (p->needInit) + { +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (p->mtMode) + { +- RINOK(MatchFinderMt_InitMt(&p->matchFinderMt)); ++ RINOK(MatchFinderMt_InitMt(&p->matchFinderMt)) + } + #endif + p->matchFinder.Init(p->matchFinderObj); +@@ -2410,7 +2397,7 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, UInt32 maxPackSize, UInt32 maxUnpa + + if (p->finished) + return p->result; +- RINOK(CheckErrors(p)); ++ RINOK(CheckErrors(p)) + + nowPos32 = (UInt32)p->nowPos64; + startPos32 = nowPos32; +@@ -2473,7 +2460,7 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, UInt32 maxPackSize, UInt32 maxUnpa + const Byte *data; + unsigned state; + +- RC_BIT_0(&p->rc, probs); ++ RC_BIT_0(&p->rc, probs) + p->rc.range = range; + data = p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; + probs = LIT_PROBS(nowPos32, *(data - 1)); +@@ -2487,53 +2474,53 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, UInt32 maxPackSize, UInt32 maxUnpa + } + else + { +- RC_BIT_1(&p->rc, probs); ++ RC_BIT_1(&p->rc, probs) + probs = &p->isRep[p->state]; + RC_BIT_PRE(&p->rc, probs) + + if (dist < LZMA_NUM_REPS) + { +- RC_BIT_1(&p->rc, probs); ++ RC_BIT_1(&p->rc, probs) + probs = &p->isRepG0[p->state]; + RC_BIT_PRE(&p->rc, probs) + if (dist == 0) + { +- RC_BIT_0(&p->rc, probs); ++ RC_BIT_0(&p->rc, probs) + probs = &p->isRep0Long[p->state][posState]; + RC_BIT_PRE(&p->rc, probs) + if (len != 1) + { +- RC_BIT_1_BASE(&p->rc, probs); ++ RC_BIT_1_BASE(&p->rc, probs) + } + else + { +- RC_BIT_0_BASE(&p->rc, probs); ++ RC_BIT_0_BASE(&p->rc, probs) + p->state = kShortRepNextStates[p->state]; + } + } + else + { +- RC_BIT_1(&p->rc, probs); ++ RC_BIT_1(&p->rc, probs) + probs = &p->isRepG1[p->state]; + RC_BIT_PRE(&p->rc, probs) + if (dist == 1) + { +- RC_BIT_0_BASE(&p->rc, probs); ++ RC_BIT_0_BASE(&p->rc, probs) + dist = p->reps[1]; + } + else + { +- RC_BIT_1(&p->rc, probs); ++ RC_BIT_1(&p->rc, probs) + probs = &p->isRepG2[p->state]; + RC_BIT_PRE(&p->rc, probs) + if (dist == 2) + { +- RC_BIT_0_BASE(&p->rc, probs); ++ RC_BIT_0_BASE(&p->rc, probs) + dist = p->reps[2]; + } + else + { +- RC_BIT_1_BASE(&p->rc, probs); ++ RC_BIT_1_BASE(&p->rc, probs) + dist = p->reps[3]; + p->reps[3] = p->reps[2]; + } +@@ -2557,7 +2544,7 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, UInt32 maxPackSize, UInt32 maxUnpa + else + { + unsigned posSlot; +- RC_BIT_0(&p->rc, probs); ++ RC_BIT_0(&p->rc, probs) + p->rc.range = range; + p->state = kMatchNextStates[p->state]; + +@@ -2571,7 +2558,7 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, UInt32 maxPackSize, UInt32 maxUnpa + p->reps[0] = dist + 1; + + p->matchPriceCount++; +- GetPosSlot(dist, posSlot); ++ GetPosSlot(dist, posSlot) + // RcTree_Encode_PosSlot(&p->rc, p->posSlotEncoder[GetLenToPosState(len)], posSlot); + { + UInt32 sym = (UInt32)posSlot + (1 << kNumPosSlotBits); +@@ -2582,7 +2569,7 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, UInt32 maxPackSize, UInt32 maxUnpa + CLzmaProb *prob = probs + (sym >> kNumPosSlotBits); + UInt32 bit = (sym >> (kNumPosSlotBits - 1)) & 1; + sym <<= 1; +- RC_BIT(&p->rc, prob, bit); ++ RC_BIT(&p->rc, prob, bit) + } + while (sym < (1 << kNumPosSlotBits * 2)); + p->rc.range = range; +@@ -2626,10 +2613,10 @@ static SRes LzmaEnc_CodeOneBlock(CLzmaEnc *p, UInt32 maxPackSize, UInt32 maxUnpa + { + unsigned m = 1; + unsigned bit; +- bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit; +- bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit; +- bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); m = (m << 1) + bit; +- bit = dist & 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit); ++ bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit) m = (m << 1) + bit; ++ bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit) m = (m << 1) + bit; ++ bit = dist & 1; dist >>= 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit) m = (m << 1) + bit; ++ bit = dist & 1; RC_BIT(&p->rc, p->posAlignEncoder + m, bit) + p->rc.range = range; + // p->alignPriceCount++; + } +@@ -2704,7 +2691,7 @@ static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAllocPtr alloc, + if (!RangeEnc_Alloc(&p->rc, alloc)) + return SZ_ERROR_MEM; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + p->mtMode = (p->multiThread && !p->fastMode && (MFB.btMode != 0)); + #endif + +@@ -2748,15 +2735,14 @@ static SRes LzmaEnc_Alloc(CLzmaEnc *p, UInt32 keepWindowSize, ISzAllocPtr alloc, + (numFastBytes + LZMA_MATCH_LEN_MAX + 1) + */ + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (p->mtMode) + { + RINOK(MatchFinderMt_Create(&p->matchFinderMt, dictSize, beforeSize, + p->numFastBytes, LZMA_MATCH_LEN_MAX + 1 /* 18.04 */ +- , allocBig)); ++ , allocBig)) + p->matchFinderObj = &p->matchFinderMt; +- MFB.bigHash = (Byte)( +- (p->dictSize > kBigHashDicLimit && MFB.hashMask >= 0xFFFFFF) ? 1 : 0); ++ MFB.bigHash = (Byte)(MFB.hashMask >= 0xFFFFFF ? 1 : 0); + MatchFinderMt_CreateVTable(&p->matchFinderMt, &p->matchFinder); + } + else +@@ -2872,59 +2858,53 @@ static SRes LzmaEnc_AllocAndInit(CLzmaEnc *p, UInt32 keepWindowSize, ISzAllocPtr + + p->finished = False7z; + p->result = SZ_OK; +- RINOK(LzmaEnc_Alloc(p, keepWindowSize, alloc, allocBig)); ++ p->nowPos64 = 0; ++ p->needInit = 1; ++ RINOK(LzmaEnc_Alloc(p, keepWindowSize, alloc, allocBig)) + LzmaEnc_Init(p); + LzmaEnc_InitPrices(p); +- p->nowPos64 = 0; + return SZ_OK; + } + +-static SRes LzmaEnc_Prepare(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ++static SRes LzmaEnc_Prepare(CLzmaEncHandle p, ++ ISeqOutStreamPtr outStream, ++ ISeqInStreamPtr inStream, + ISzAllocPtr alloc, ISzAllocPtr allocBig) + { +- CLzmaEnc *p = (CLzmaEnc *)pp; +- MFB.stream = inStream; +- p->needInit = 1; ++ // GET_CLzmaEnc_p ++ MatchFinder_SET_STREAM(&MFB, inStream) + p->rc.outStream = outStream; + return LzmaEnc_AllocAndInit(p, 0, alloc, allocBig); + } + +-SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle pp, +- ISeqInStream *inStream, UInt32 keepWindowSize, ++SRes LzmaEnc_PrepareForLzma2(CLzmaEncHandle p, ++ ISeqInStreamPtr inStream, UInt32 keepWindowSize, + ISzAllocPtr alloc, ISzAllocPtr allocBig) + { +- CLzmaEnc *p = (CLzmaEnc *)pp; +- MFB.stream = inStream; +- p->needInit = 1; ++ // GET_CLzmaEnc_p ++ MatchFinder_SET_STREAM(&MFB, inStream) + return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig); + } + +-static void LzmaEnc_SetInputBuf(CLzmaEnc *p, const Byte *src, SizeT srcLen) +-{ +- MFB.directInput = 1; +- MFB.bufferBase = (Byte *)src; +- MFB.directInputRem = srcLen; +-} +- +-SRes LzmaEnc_MemPrepare(CLzmaEncHandle pp, const Byte *src, SizeT srcLen, +- UInt32 keepWindowSize, ISzAllocPtr alloc, ISzAllocPtr allocBig) ++SRes LzmaEnc_MemPrepare(CLzmaEncHandle p, ++ const Byte *src, SizeT srcLen, ++ UInt32 keepWindowSize, ++ ISzAllocPtr alloc, ISzAllocPtr allocBig) + { +- CLzmaEnc *p = (CLzmaEnc *)pp; +- LzmaEnc_SetInputBuf(p, src, srcLen); +- p->needInit = 1; +- +- LzmaEnc_SetDataSize(pp, srcLen); ++ // GET_CLzmaEnc_p ++ MatchFinder_SET_DIRECT_INPUT_BUF(&MFB, src, srcLen) ++ LzmaEnc_SetDataSize(p, srcLen); + return LzmaEnc_AllocAndInit(p, keepWindowSize, alloc, allocBig); + } + +-void LzmaEnc_Finish(CLzmaEncHandle pp) ++void LzmaEnc_Finish(CLzmaEncHandle p) + { +- #ifndef _7ZIP_ST +- CLzmaEnc *p = (CLzmaEnc *)pp; ++ #ifndef Z7_ST ++ // GET_CLzmaEnc_p + if (p->mtMode) + MatchFinderMt_ReleaseStream(&p->matchFinderMt); + #else +- UNUSED_VAR(pp); ++ UNUSED_VAR(p) + #endif + } + +@@ -2933,13 +2913,13 @@ typedef struct + { + ISeqOutStream vt; + Byte *data; +- SizeT rem; ++ size_t rem; + BoolInt overflow; + } CLzmaEnc_SeqOutStreamBuf; + +-static size_t SeqOutStreamBuf_Write(const ISeqOutStream *pp, const void *data, size_t size) ++static size_t SeqOutStreamBuf_Write(ISeqOutStreamPtr pp, const void *data, size_t size) + { +- CLzmaEnc_SeqOutStreamBuf *p = CONTAINER_FROM_VTBL(pp, CLzmaEnc_SeqOutStreamBuf, vt); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CLzmaEnc_SeqOutStreamBuf) + if (p->rem < size) + { + size = p->rem; +@@ -2956,24 +2936,25 @@ static size_t SeqOutStreamBuf_Write(const ISeqOutStream *pp, const void *data, s + + + /* +-UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle pp) ++UInt32 LzmaEnc_GetNumAvailableBytes(CLzmaEncHandle p) + { +- const CLzmaEnc *p = (CLzmaEnc *)pp; ++ GET_const_CLzmaEnc_p + return p->matchFinder.GetNumAvailableBytes(p->matchFinderObj); + } + */ + +-const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle pp) ++const Byte *LzmaEnc_GetCurBuf(CLzmaEncHandle p) + { +- const CLzmaEnc *p = (CLzmaEnc *)pp; ++ // GET_const_CLzmaEnc_p + return p->matchFinder.GetPointerToCurrentPos(p->matchFinderObj) - p->additionalOffset; + } + + +-SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit, ++// (desiredPackSize == 0) is not allowed ++SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle p, BoolInt reInit, + Byte *dest, size_t *destLen, UInt32 desiredPackSize, UInt32 *unpackSize) + { +- CLzmaEnc *p = (CLzmaEnc *)pp; ++ // GET_CLzmaEnc_p + UInt64 nowPos64; + SRes res; + CLzmaEnc_SeqOutStreamBuf outStream; +@@ -2990,14 +2971,10 @@ SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit, + if (reInit) + LzmaEnc_Init(p); + LzmaEnc_InitPrices(p); +- +- nowPos64 = p->nowPos64; + RangeEnc_Init(&p->rc); + p->rc.outStream = &outStream.vt; +- +- if (desiredPackSize == 0) +- return SZ_ERROR_OUTPUT_EOF; +- ++ nowPos64 = p->nowPos64; ++ + res = LzmaEnc_CodeOneBlock(p, desiredPackSize, *unpackSize); + + *unpackSize = (UInt32)(p->nowPos64 - nowPos64); +@@ -3009,12 +2986,12 @@ SRes LzmaEnc_CodeOneMemBlock(CLzmaEncHandle pp, BoolInt reInit, + } + + +-MY_NO_INLINE +-static SRes LzmaEnc_Encode2(CLzmaEnc *p, ICompressProgress *progress) ++Z7_NO_INLINE ++static SRes LzmaEnc_Encode2(CLzmaEnc *p, ICompressProgressPtr progress) + { + SRes res = SZ_OK; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + Byte allocaDummy[0x300]; + allocaDummy[0] = 0; + allocaDummy[1] = allocaDummy[0]; +@@ -3036,7 +3013,7 @@ static SRes LzmaEnc_Encode2(CLzmaEnc *p, ICompressProgress *progress) + } + } + +- LzmaEnc_Finish(p); ++ LzmaEnc_Finish((CLzmaEncHandle)(void *)p); + + /* + if (res == SZ_OK && !Inline_MatchFinder_IsFinishedOK(&MFB)) +@@ -3048,21 +3025,22 @@ static SRes LzmaEnc_Encode2(CLzmaEnc *p, ICompressProgress *progress) + } + + +-SRes LzmaEnc_Encode(CLzmaEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress, ++SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStreamPtr outStream, ISeqInStreamPtr inStream, ICompressProgressPtr progress, + ISzAllocPtr alloc, ISzAllocPtr allocBig) + { +- RINOK(LzmaEnc_Prepare(pp, outStream, inStream, alloc, allocBig)); +- return LzmaEnc_Encode2((CLzmaEnc *)pp, progress); ++ // GET_CLzmaEnc_p ++ RINOK(LzmaEnc_Prepare(p, outStream, inStream, alloc, allocBig)) ++ return LzmaEnc_Encode2(p, progress); + } + + +-SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size) ++SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *props, SizeT *size) + { + if (*size < LZMA_PROPS_SIZE) + return SZ_ERROR_PARAM; + *size = LZMA_PROPS_SIZE; + { +- const CLzmaEnc *p = (const CLzmaEnc *)pp; ++ // GET_CLzmaEnc_p + const UInt32 dictSize = p->dictSize; + UInt32 v; + props[0] = (Byte)((p->pb * 5 + p->lp) * 9 + p->lc); +@@ -3086,23 +3064,24 @@ SRes LzmaEnc_WriteProperties(CLzmaEncHandle pp, Byte *props, SizeT *size) + while (v < dictSize); + } + +- SetUi32(props + 1, v); ++ SetUi32(props + 1, v) + return SZ_OK; + } + } + + +-unsigned LzmaEnc_IsWriteEndMark(CLzmaEncHandle pp) ++unsigned LzmaEnc_IsWriteEndMark(CLzmaEncHandle p) + { +- return (unsigned)((CLzmaEnc *)pp)->writeEndMark; ++ // GET_CLzmaEnc_p ++ return (unsigned)p->writeEndMark; + } + + +-SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, +- int writeEndMark, ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig) ++SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, ++ int writeEndMark, ICompressProgressPtr progress, ISzAllocPtr alloc, ISzAllocPtr allocBig) + { + SRes res; +- CLzmaEnc *p = (CLzmaEnc *)pp; ++ // GET_CLzmaEnc_p + + CLzmaEnc_SeqOutStreamBuf outStream; + +@@ -3114,7 +3093,7 @@ SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte + p->writeEndMark = writeEndMark; + p->rc.outStream = &outStream.vt; + +- res = LzmaEnc_MemPrepare(pp, src, srcLen, 0, alloc, allocBig); ++ res = LzmaEnc_MemPrepare(p, src, srcLen, 0, alloc, allocBig); + + if (res == SZ_OK) + { +@@ -3123,7 +3102,7 @@ SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte + res = SZ_ERROR_FAIL; + } + +- *destLen -= outStream.rem; ++ *destLen -= (SizeT)outStream.rem; + if (outStream.overflow) + return SZ_ERROR_OUTPUT_EOF; + return res; +@@ -3132,9 +3111,9 @@ SRes LzmaEnc_MemEncode(CLzmaEncHandle pp, Byte *dest, SizeT *destLen, const Byte + + SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, +- ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig) ++ ICompressProgressPtr progress, ISzAllocPtr alloc, ISzAllocPtr allocBig) + { +- CLzmaEnc *p = (CLzmaEnc *)LzmaEnc_Create(alloc); ++ CLzmaEncHandle p = LzmaEnc_Create(alloc); + SRes res; + if (!p) + return SZ_ERROR_MEM; +@@ -3154,10 +3133,10 @@ SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + + + /* +-#ifndef _7ZIP_ST +-void LzmaEnc_GetLzThreads(CLzmaEncHandle pp, HANDLE lz_threads[2]) ++#ifndef Z7_ST ++void LzmaEnc_GetLzThreads(CLzmaEncHandle p, HANDLE lz_threads[2]) + { +- const CLzmaEnc *p = (CLzmaEnc *)pp; ++ GET_const_CLzmaEnc_p + lz_threads[0] = p->matchFinderMt.hashSync.thread; + lz_threads[1] = p->matchFinderMt.btSync.thread; + } +diff --git a/src/lzma/LzmaEnc.h b/src/lzma/LzmaEnc.h +index bc2ed5042..9f8039a10 100644 +--- a/src/lzma/LzmaEnc.h ++++ b/src/lzma/LzmaEnc.h +@@ -1,8 +1,8 @@ + /* LzmaEnc.h -- LZMA Encoder +-2019-10-30 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + +-#ifndef __LZMA_ENC_H +-#define __LZMA_ENC_H ++#ifndef ZIP7_INC_LZMA_ENC_H ++#define ZIP7_INC_LZMA_ENC_H + + #include "7zTypes.h" + +@@ -10,7 +10,7 @@ EXTERN_C_BEGIN + + #define LZMA_PROPS_SIZE 5 + +-typedef struct _CLzmaEncProps ++typedef struct + { + int level; /* 0 <= level <= 9 */ + UInt32 dictSize; /* (1 << 12) <= dictSize <= (1 << 27) for 32-bit version +@@ -23,10 +23,13 @@ typedef struct _CLzmaEncProps + int fb; /* 5 <= fb <= 273, default = 32 */ + int btMode; /* 0 - hashChain Mode, 1 - binTree mode - normal, default = 1 */ + int numHashBytes; /* 2, 3 or 4, default = 4 */ ++ unsigned numHashOutBits; /* default = ? */ + UInt32 mc; /* 1 <= mc <= (1 << 30), default = 32 */ + unsigned writeEndMark; /* 0 - do not write EOPM, 1 - write EOPM, default = 0 */ + int numThreads; /* 1 or 2, default = 2 */ + ++ // int _pad; ++ + UInt64 reduceSize; /* estimated size of data that will be compressed. default = (UInt64)(Int64)-1. + Encoder uses this value to reduce dictionary size */ + +@@ -51,7 +54,9 @@ UInt32 LzmaEncProps_GetDictSize(const CLzmaEncProps *props2); + SZ_ERROR_THREAD - error in multithreading functions (only for Mt version) + */ + +-typedef void * CLzmaEncHandle; ++typedef struct CLzmaEnc CLzmaEnc; ++typedef CLzmaEnc * CLzmaEncHandle; ++// Z7_DECLARE_HANDLE(CLzmaEncHandle) + + CLzmaEncHandle LzmaEnc_Create(ISzAllocPtr alloc); + void LzmaEnc_Destroy(CLzmaEncHandle p, ISzAllocPtr alloc, ISzAllocPtr allocBig); +@@ -61,17 +66,17 @@ void LzmaEnc_SetDataSize(CLzmaEncHandle p, UInt64 expectedDataSiize); + SRes LzmaEnc_WriteProperties(CLzmaEncHandle p, Byte *properties, SizeT *size); + unsigned LzmaEnc_IsWriteEndMark(CLzmaEncHandle p); + +-SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream, +- ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig); ++SRes LzmaEnc_Encode(CLzmaEncHandle p, ISeqOutStreamPtr outStream, ISeqInStreamPtr inStream, ++ ICompressProgressPtr progress, ISzAllocPtr alloc, ISzAllocPtr allocBig); + SRes LzmaEnc_MemEncode(CLzmaEncHandle p, Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, +- int writeEndMark, ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig); ++ int writeEndMark, ICompressProgressPtr progress, ISzAllocPtr alloc, ISzAllocPtr allocBig); + + + /* ---------- One Call Interface ---------- */ + + SRes LzmaEncode(Byte *dest, SizeT *destLen, const Byte *src, SizeT srcLen, + const CLzmaEncProps *props, Byte *propsEncoded, SizeT *propsSize, int writeEndMark, +- ICompressProgress *progress, ISzAllocPtr alloc, ISzAllocPtr allocBig); ++ ICompressProgressPtr progress, ISzAllocPtr alloc, ISzAllocPtr allocBig); + + EXTERN_C_END + +diff --git a/src/lzma/LzmaLib.c b/src/lzma/LzmaLib.c +index 706e9e58c..785e88487 100644 +--- a/src/lzma/LzmaLib.c ++++ b/src/lzma/LzmaLib.c +@@ -1,12 +1,14 @@ + /* LzmaLib.c -- LZMA library wrapper +-2015-06-13 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ ++ ++#include "Precomp.h" + + #include "Alloc.h" + #include "LzmaDec.h" + #include "LzmaEnc.h" + #include "LzmaLib.h" + +-MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, ++Z7_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, + unsigned char *outProps, size_t *outPropsSize, + int level, /* 0 <= level <= 9, default = 5 */ + unsigned dictSize, /* use (1 << N) or (3 << N). 4 KB < dictSize <= 128 MB */ +@@ -32,7 +34,7 @@ MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char + } + + +-MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t *srcLen, ++Z7_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t *srcLen, + const unsigned char *props, size_t propsSize) + { + ELzmaStatus status; +diff --git a/src/lzma/LzmaLib.h b/src/lzma/LzmaLib.h +index c343a8596..d7c0724de 100644 +--- a/src/lzma/LzmaLib.h ++++ b/src/lzma/LzmaLib.h +@@ -1,14 +1,14 @@ + /* LzmaLib.h -- LZMA library interface +-2021-04-03 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __LZMA_LIB_H +-#define __LZMA_LIB_H ++#ifndef ZIP7_INC_LZMA_LIB_H ++#define ZIP7_INC_LZMA_LIB_H + + #include "7zTypes.h" + + EXTERN_C_BEGIN + +-#define MY_STDAPI int MY_STD_CALL ++#define Z7_STDAPI int Z7_STDCALL + + #define LZMA_PROPS_SIZE 5 + +@@ -100,7 +100,7 @@ numThreads - The number of thereads. 1 or 2. The default value is 2. + SZ_ERROR_THREAD - errors in multithreading functions (only for Mt version) + */ + +-MY_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, ++Z7_STDAPI LzmaCompress(unsigned char *dest, size_t *destLen, const unsigned char *src, size_t srcLen, + unsigned char *outProps, size_t *outPropsSize, /* *outPropsSize must be = 5 */ + int level, /* 0 <= level <= 9, default = 5 */ + unsigned dictSize, /* default = (1 << 24) */ +@@ -130,7 +130,7 @@ LzmaUncompress + SZ_ERROR_INPUT_EOF - it needs more bytes in input buffer (src) + */ + +-MY_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen, ++Z7_STDAPI LzmaUncompress(unsigned char *dest, size_t *destLen, const unsigned char *src, SizeT *srcLen, + const unsigned char *props, size_t propsSize); + + EXTERN_C_END +diff --git a/src/lzma/MtCoder.c b/src/lzma/MtCoder.c +index b05fdcace..3fd718e44 100644 +--- a/src/lzma/MtCoder.c ++++ b/src/lzma/MtCoder.c +@@ -1,28 +1,28 @@ + /* MtCoder.c -- Multi-thread Coder +-2021-12-21 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + + #include "MtCoder.h" + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + +-static SRes MtProgressThunk_Progress(const ICompressProgress *pp, UInt64 inSize, UInt64 outSize) ++static SRes MtProgressThunk_Progress(ICompressProgressPtr pp, UInt64 inSize, UInt64 outSize) + { +- CMtProgressThunk *thunk = CONTAINER_FROM_VTBL(pp, CMtProgressThunk, vt); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CMtProgressThunk) + UInt64 inSize2 = 0; + UInt64 outSize2 = 0; + if (inSize != (UInt64)(Int64)-1) + { +- inSize2 = inSize - thunk->inSize; +- thunk->inSize = inSize; ++ inSize2 = inSize - p->inSize; ++ p->inSize = inSize; + } + if (outSize != (UInt64)(Int64)-1) + { +- outSize2 = outSize - thunk->outSize; +- thunk->outSize = outSize; ++ outSize2 = outSize - p->outSize; ++ p->outSize = outSize; + } +- return MtProgress_ProgressAdd(thunk->mtProgress, inSize2, outSize2); ++ return MtProgress_ProgressAdd(p->mtProgress, inSize2, outSize2); + } + + +@@ -36,20 +36,12 @@ void MtProgressThunk_CreateVTable(CMtProgressThunk *p) + #define RINOK_THREAD(x) { if ((x) != 0) return SZ_ERROR_THREAD; } + + +-static WRes ArEvent_OptCreate_And_Reset(CEvent *p) +-{ +- if (Event_IsCreated(p)) +- return Event_Reset(p); +- return AutoResetEvent_CreateNotSignaled(p); +-} +- +- + static THREAD_FUNC_DECL ThreadFunc(void *pp); + + + static SRes MtCoderThread_CreateAndStart(CMtCoderThread *t) + { +- WRes wres = ArEvent_OptCreate_And_Reset(&t->startEvent); ++ WRes wres = AutoResetEvent_OptCreate_And_Reset(&t->startEvent); + if (wres == 0) + { + t->stop = False7z; +@@ -84,24 +76,6 @@ static void MtCoderThread_Destruct(CMtCoderThread *t) + + + +-static SRes FullRead(ISeqInStream *stream, Byte *data, size_t *processedSize) +-{ +- size_t size = *processedSize; +- *processedSize = 0; +- while (size != 0) +- { +- size_t cur = size; +- SRes res = ISeqInStream_Read(stream, data, &cur); +- *processedSize += cur; +- data += cur; +- size -= cur; +- RINOK(res); +- if (cur == 0) +- return SZ_OK; +- } +- return SZ_OK; +-} +- + + /* + ThreadFunc2() returns: +@@ -152,7 +126,7 @@ static SRes ThreadFunc2(CMtCoderThread *t) + } + if (res == SZ_OK) + { +- res = FullRead(mtc->inStream, t->inBuf, &size); ++ res = SeqInStream_ReadMax(mtc->inStream, t->inBuf, &size); + readProcessed = mtc->readProcessed + size; + mtc->readProcessed = readProcessed; + } +@@ -253,7 +227,7 @@ static SRes ThreadFunc2(CMtCoderThread *t) + block->finished = finished; + } + +- #ifdef MTCODER__USE_WRITE_THREAD ++ #ifdef MTCODER_USE_WRITE_THREAD + RINOK_THREAD(Event_Set(&mtc->writeEvents[bi])) + #else + { +@@ -352,7 +326,7 @@ static THREAD_FUNC_DECL ThreadFunc(void *pp) + MtProgress_SetError(&mtc->mtProgress, res); + } + +- #ifndef MTCODER__USE_WRITE_THREAD ++ #ifndef MTCODER_USE_WRITE_THREAD + { + unsigned numFinished = (unsigned)InterlockedIncrement(&mtc->numFinishedThreads); + if (numFinished == mtc->numStartedThreads) +@@ -389,7 +363,7 @@ void MtCoder_Construct(CMtCoder *p) + Event_Construct(&p->readEvent); + Semaphore_Construct(&p->blocksSemaphore); + +- for (i = 0; i < MTCODER__THREADS_MAX; i++) ++ for (i = 0; i < MTCODER_THREADS_MAX; i++) + { + CMtCoderThread *t = &p->threads[i]; + t->mtCoder = p; +@@ -397,11 +371,11 @@ void MtCoder_Construct(CMtCoder *p) + t->inBuf = NULL; + t->stop = False7z; + Event_Construct(&t->startEvent); +- Thread_Construct(&t->thread); ++ Thread_CONSTRUCT(&t->thread) + } + +- #ifdef MTCODER__USE_WRITE_THREAD +- for (i = 0; i < MTCODER__BLOCKS_MAX; i++) ++ #ifdef MTCODER_USE_WRITE_THREAD ++ for (i = 0; i < MTCODER_BLOCKS_MAX; i++) + Event_Construct(&p->writeEvents[i]); + #else + Event_Construct(&p->finishedEvent); +@@ -424,14 +398,14 @@ static void MtCoder_Free(CMtCoder *p) + Event_Set(&p->readEvent); + */ + +- for (i = 0; i < MTCODER__THREADS_MAX; i++) ++ for (i = 0; i < MTCODER_THREADS_MAX; i++) + MtCoderThread_Destruct(&p->threads[i]); + + Event_Close(&p->readEvent); + Semaphore_Close(&p->blocksSemaphore); + +- #ifdef MTCODER__USE_WRITE_THREAD +- for (i = 0; i < MTCODER__BLOCKS_MAX; i++) ++ #ifdef MTCODER_USE_WRITE_THREAD ++ for (i = 0; i < MTCODER_BLOCKS_MAX; i++) + Event_Close(&p->writeEvents[i]); + #else + Event_Close(&p->finishedEvent); +@@ -455,20 +429,20 @@ SRes MtCoder_Code(CMtCoder *p) + unsigned i; + SRes res = SZ_OK; + +- if (numThreads > MTCODER__THREADS_MAX) +- numThreads = MTCODER__THREADS_MAX; +- numBlocksMax = MTCODER__GET_NUM_BLOCKS_FROM_THREADS(numThreads); ++ if (numThreads > MTCODER_THREADS_MAX) ++ numThreads = MTCODER_THREADS_MAX; ++ numBlocksMax = MTCODER_GET_NUM_BLOCKS_FROM_THREADS(numThreads); + + if (p->blockSize < ((UInt32)1 << 26)) numBlocksMax++; + if (p->blockSize < ((UInt32)1 << 24)) numBlocksMax++; + if (p->blockSize < ((UInt32)1 << 22)) numBlocksMax++; + +- if (numBlocksMax > MTCODER__BLOCKS_MAX) +- numBlocksMax = MTCODER__BLOCKS_MAX; ++ if (numBlocksMax > MTCODER_BLOCKS_MAX) ++ numBlocksMax = MTCODER_BLOCKS_MAX; + + if (p->blockSize != p->allocatedBufsSize) + { +- for (i = 0; i < MTCODER__THREADS_MAX; i++) ++ for (i = 0; i < MTCODER_THREADS_MAX; i++) + { + CMtCoderThread *t = &p->threads[i]; + if (t->inBuf) +@@ -484,23 +458,23 @@ SRes MtCoder_Code(CMtCoder *p) + + MtProgress_Init(&p->mtProgress, p->progress); + +- #ifdef MTCODER__USE_WRITE_THREAD ++ #ifdef MTCODER_USE_WRITE_THREAD + for (i = 0; i < numBlocksMax; i++) + { +- RINOK_THREAD(ArEvent_OptCreate_And_Reset(&p->writeEvents[i])); ++ RINOK_THREAD(AutoResetEvent_OptCreate_And_Reset(&p->writeEvents[i])) + } + #else +- RINOK_THREAD(ArEvent_OptCreate_And_Reset(&p->finishedEvent)); ++ RINOK_THREAD(AutoResetEvent_OptCreate_And_Reset(&p->finishedEvent)) + #endif + + { +- RINOK_THREAD(ArEvent_OptCreate_And_Reset(&p->readEvent)); +- RINOK_THREAD(Semaphore_OptCreateInit(&p->blocksSemaphore, numBlocksMax, numBlocksMax)); ++ RINOK_THREAD(AutoResetEvent_OptCreate_And_Reset(&p->readEvent)) ++ RINOK_THREAD(Semaphore_OptCreateInit(&p->blocksSemaphore, numBlocksMax, numBlocksMax)) + } + +- for (i = 0; i < MTCODER__BLOCKS_MAX - 1; i++) ++ for (i = 0; i < MTCODER_BLOCKS_MAX - 1; i++) + p->freeBlockList[i] = i + 1; +- p->freeBlockList[MTCODER__BLOCKS_MAX - 1] = (unsigned)(int)-1; ++ p->freeBlockList[MTCODER_BLOCKS_MAX - 1] = (unsigned)(int)-1; + p->freeBlockHead = 0; + + p->readProcessed = 0; +@@ -508,10 +482,10 @@ SRes MtCoder_Code(CMtCoder *p) + p->numBlocksMax = numBlocksMax; + p->stopReading = False7z; + +- #ifndef MTCODER__USE_WRITE_THREAD ++ #ifndef MTCODER_USE_WRITE_THREAD + p->writeIndex = 0; + p->writeRes = SZ_OK; +- for (i = 0; i < MTCODER__BLOCKS_MAX; i++) ++ for (i = 0; i < MTCODER_BLOCKS_MAX; i++) + p->ReadyBlocks[i] = False7z; + p->numFinishedThreads = 0; + #endif +@@ -522,12 +496,12 @@ SRes MtCoder_Code(CMtCoder *p) + // for (i = 0; i < numThreads; i++) + { + CMtCoderThread *nextThread = &p->threads[p->numStartedThreads++]; +- RINOK(MtCoderThread_CreateAndStart(nextThread)); ++ RINOK(MtCoderThread_CreateAndStart(nextThread)) + } + + RINOK_THREAD(Event_Set(&p->readEvent)) + +- #ifdef MTCODER__USE_WRITE_THREAD ++ #ifdef MTCODER_USE_WRITE_THREAD + { + unsigned bi = 0; + +@@ -582,7 +556,7 @@ SRes MtCoder_Code(CMtCoder *p) + if (res == SZ_OK) + res = p->mtProgress.res; + +- #ifndef MTCODER__USE_WRITE_THREAD ++ #ifndef MTCODER_USE_WRITE_THREAD + if (res == SZ_OK) + res = p->writeRes; + #endif +@@ -593,3 +567,5 @@ SRes MtCoder_Code(CMtCoder *p) + } + + #endif ++ ++#undef RINOK_THREAD +diff --git a/src/lzma/MtCoder.h b/src/lzma/MtCoder.h +index 5a5f4d11b..1231d3c2a 100644 +--- a/src/lzma/MtCoder.h ++++ b/src/lzma/MtCoder.h +@@ -1,30 +1,30 @@ + /* MtCoder.h -- Multi-thread Coder +-2018-07-04 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + +-#ifndef __MT_CODER_H +-#define __MT_CODER_H ++#ifndef ZIP7_INC_MT_CODER_H ++#define ZIP7_INC_MT_CODER_H + + #include "MtDec.h" + + EXTERN_C_BEGIN + + /* +- if ( defined MTCODER__USE_WRITE_THREAD) : main thread writes all data blocks to output stream +- if (not defined MTCODER__USE_WRITE_THREAD) : any coder thread can write data blocks to output stream ++ if ( defined MTCODER_USE_WRITE_THREAD) : main thread writes all data blocks to output stream ++ if (not defined MTCODER_USE_WRITE_THREAD) : any coder thread can write data blocks to output stream + */ +-/* #define MTCODER__USE_WRITE_THREAD */ ++/* #define MTCODER_USE_WRITE_THREAD */ + +-#ifndef _7ZIP_ST +- #define MTCODER__GET_NUM_BLOCKS_FROM_THREADS(numThreads) ((numThreads) + (numThreads) / 8 + 1) +- #define MTCODER__THREADS_MAX 64 +- #define MTCODER__BLOCKS_MAX (MTCODER__GET_NUM_BLOCKS_FROM_THREADS(MTCODER__THREADS_MAX) + 3) ++#ifndef Z7_ST ++ #define MTCODER_GET_NUM_BLOCKS_FROM_THREADS(numThreads) ((numThreads) + (numThreads) / 8 + 1) ++ #define MTCODER_THREADS_MAX 64 ++ #define MTCODER_BLOCKS_MAX (MTCODER_GET_NUM_BLOCKS_FROM_THREADS(MTCODER_THREADS_MAX) + 3) + #else +- #define MTCODER__THREADS_MAX 1 +- #define MTCODER__BLOCKS_MAX 1 ++ #define MTCODER_THREADS_MAX 1 ++ #define MTCODER_BLOCKS_MAX 1 + #endif + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + + typedef struct +@@ -37,15 +37,15 @@ typedef struct + + void MtProgressThunk_CreateVTable(CMtProgressThunk *p); + +-#define MtProgressThunk_Init(p) { (p)->inSize = 0; (p)->outSize = 0; } ++#define MtProgressThunk_INIT(p) { (p)->inSize = 0; (p)->outSize = 0; } + + +-struct _CMtCoder; ++struct CMtCoder_; + + + typedef struct + { +- struct _CMtCoder *mtCoder; ++ struct CMtCoder_ *mtCoder; + unsigned index; + int stop; + Byte *inBuf; +@@ -71,7 +71,7 @@ typedef struct + } CMtCoderBlock; + + +-typedef struct _CMtCoder ++typedef struct CMtCoder_ + { + /* input variables */ + +@@ -79,11 +79,11 @@ typedef struct _CMtCoder + unsigned numThreadsMax; + UInt64 expectedDataSize; + +- ISeqInStream *inStream; ++ ISeqInStreamPtr inStream; + const Byte *inData; + size_t inDataSize; + +- ICompressProgress *progress; ++ ICompressProgressPtr progress; + ISzAllocPtr allocBig; + + IMtCoderCallback2 *mtCallback; +@@ -100,13 +100,13 @@ typedef struct _CMtCoder + BoolInt stopReading; + SRes readRes; + +- #ifdef MTCODER__USE_WRITE_THREAD +- CAutoResetEvent writeEvents[MTCODER__BLOCKS_MAX]; ++ #ifdef MTCODER_USE_WRITE_THREAD ++ CAutoResetEvent writeEvents[MTCODER_BLOCKS_MAX]; + #else + CAutoResetEvent finishedEvent; + SRes writeRes; + unsigned writeIndex; +- Byte ReadyBlocks[MTCODER__BLOCKS_MAX]; ++ Byte ReadyBlocks[MTCODER_BLOCKS_MAX]; + LONG numFinishedThreads; + #endif + +@@ -120,11 +120,11 @@ typedef struct _CMtCoder + CCriticalSection cs; + + unsigned freeBlockHead; +- unsigned freeBlockList[MTCODER__BLOCKS_MAX]; ++ unsigned freeBlockList[MTCODER_BLOCKS_MAX]; + + CMtProgress mtProgress; +- CMtCoderBlock blocks[MTCODER__BLOCKS_MAX]; +- CMtCoderThread threads[MTCODER__THREADS_MAX]; ++ CMtCoderBlock blocks[MTCODER_BLOCKS_MAX]; ++ CMtCoderThread threads[MTCODER_THREADS_MAX]; + } CMtCoder; + + +diff --git a/src/lzma/MtDec.c b/src/lzma/MtDec.c +index b75e892fe..80c186950 100644 +--- a/src/lzma/MtDec.c ++++ b/src/lzma/MtDec.c +@@ -1,5 +1,5 @@ + /* MtDec.c -- Multi-thread Decoder +-2021-12-21 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -14,7 +14,7 @@ + + #include "MtDec.h" + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + #ifdef SHOW_DEBUG_INFO + #define PRF(x) x +@@ -24,7 +24,7 @@ + + #define PRF_STR_INT(s, d) PRF(printf("\n" s " %d\n", (unsigned)d)) + +-void MtProgress_Init(CMtProgress *p, ICompressProgress *progress) ++void MtProgress_Init(CMtProgress *p, ICompressProgressPtr progress) + { + p->progress = progress; + p->res = SZ_OK; +@@ -81,36 +81,28 @@ void MtProgress_SetError(CMtProgress *p, SRes res) + #define RINOK_THREAD(x) RINOK_WRes(x) + + +-static WRes ArEvent_OptCreate_And_Reset(CEvent *p) ++struct CMtDecBufLink_ + { +- if (Event_IsCreated(p)) +- return Event_Reset(p); +- return AutoResetEvent_CreateNotSignaled(p); +-} +- +- +-struct __CMtDecBufLink +-{ +- struct __CMtDecBufLink *next; ++ struct CMtDecBufLink_ *next; + void *pad[3]; + }; + +-typedef struct __CMtDecBufLink CMtDecBufLink; ++typedef struct CMtDecBufLink_ CMtDecBufLink; + + #define MTDEC__LINK_DATA_OFFSET sizeof(CMtDecBufLink) + #define MTDEC__DATA_PTR_FROM_LINK(link) ((Byte *)(link) + MTDEC__LINK_DATA_OFFSET) + + + +-static THREAD_FUNC_DECL ThreadFunc(void *pp); ++static THREAD_FUNC_DECL MtDec_ThreadFunc(void *pp); + + + static WRes MtDecThread_CreateEvents(CMtDecThread *t) + { +- WRes wres = ArEvent_OptCreate_And_Reset(&t->canWrite); ++ WRes wres = AutoResetEvent_OptCreate_And_Reset(&t->canWrite); + if (wres == 0) + { +- wres = ArEvent_OptCreate_And_Reset(&t->canRead); ++ wres = AutoResetEvent_OptCreate_And_Reset(&t->canRead); + if (wres == 0) + return SZ_OK; + } +@@ -126,7 +118,7 @@ static SRes MtDecThread_CreateAndStart(CMtDecThread *t) + { + if (Thread_WasCreated(&t->thread)) + return SZ_OK; +- wres = Thread_Create(&t->thread, ThreadFunc, t); ++ wres = Thread_Create(&t->thread, MtDec_ThreadFunc, t); + if (wres == 0) + return SZ_OK; + } +@@ -167,7 +159,7 @@ static void MtDecThread_CloseThread(CMtDecThread *t) + static void MtDec_CloseThreads(CMtDec *p) + { + unsigned i; +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + MtDecThread_CloseThread(&p->threads[i]); + } + +@@ -179,25 +171,6 @@ static void MtDecThread_Destruct(CMtDecThread *t) + + + +-static SRes FullRead(ISeqInStream *stream, Byte *data, size_t *processedSize) +-{ +- size_t size = *processedSize; +- *processedSize = 0; +- while (size != 0) +- { +- size_t cur = size; +- SRes res = ISeqInStream_Read(stream, data, &cur); +- *processedSize += cur; +- data += cur; +- size -= cur; +- RINOK(res); +- if (cur == 0) +- return SZ_OK; +- } +- return SZ_OK; +-} +- +- + static SRes MtDec_GetError_Spec(CMtDec *p, UInt64 interruptIndex, BoolInt *wasInterrupted) + { + SRes res; +@@ -253,7 +226,7 @@ Byte *MtDec_GetCrossBuff(CMtDec *p) + + + /* +- ThreadFunc2() returns: ++ MtDec_ThreadFunc2() returns: + 0 - in all normal cases (even for stream error or memory allocation error) + (!= 0) - WRes error return by system threading function + */ +@@ -261,11 +234,11 @@ Byte *MtDec_GetCrossBuff(CMtDec *p) + // #define MTDEC_ProgessStep (1 << 22) + #define MTDEC_ProgessStep (1 << 0) + +-static WRes ThreadFunc2(CMtDecThread *t) ++static WRes MtDec_ThreadFunc2(CMtDecThread *t) + { + CMtDec *p = t->mtDec; + +- PRF_STR_INT("ThreadFunc2", t->index); ++ PRF_STR_INT("MtDec_ThreadFunc2", t->index) + + // SetThreadAffinityMask(GetCurrentThread(), 1 << t->index); + +@@ -295,13 +268,13 @@ static WRes ThreadFunc2(CMtDecThread *t) + // CMtDecCallbackInfo parse; + CMtDecThread *nextThread; + +- PRF_STR_INT("=============== Event_Wait(&t->canRead)", t->index); ++ PRF_STR_INT("=============== Event_Wait(&t->canRead)", t->index) + +- RINOK_THREAD(Event_Wait(&t->canRead)); ++ RINOK_THREAD(Event_Wait(&t->canRead)) + if (p->exitThread) + return 0; + +- PRF_STR_INT("after Event_Wait(&t->canRead)", t->index); ++ PRF_STR_INT("after Event_Wait(&t->canRead)", t->index) + + // if (t->index == 3) return 19; // for test + +@@ -373,7 +346,7 @@ static WRes ThreadFunc2(CMtDecThread *t) + { + size = p->inBufSize; + +- res = FullRead(p->inStream, data, &size); ++ res = SeqInStream_ReadMax(p->inStream, data, &size); + + // size = 10; // test + +@@ -615,7 +588,7 @@ static WRes ThreadFunc2(CMtDecThread *t) + // if ( !finish ) we must call Event_Set(&nextThread->canWrite) in any case + // if ( finish ) we switch to single-thread mode and there are 2 ways at the end of current iteration (current block): + // - if (needContinue) after Write(&needContinue), we restore decoding with new iteration +- // - otherwise we stop decoding and exit from ThreadFunc2() ++ // - otherwise we stop decoding and exit from MtDec_ThreadFunc2() + + // Don't change (finish) variable in the further code + +@@ -688,7 +661,7 @@ static WRes ThreadFunc2(CMtDecThread *t) + + // ---------- WRITE ---------- + +- RINOK_THREAD(Event_Wait(&t->canWrite)); ++ RINOK_THREAD(Event_Wait(&t->canWrite)) + + { + BoolInt isErrorMode = False7z; +@@ -801,14 +774,14 @@ static WRes ThreadFunc2(CMtDecThread *t) + + if (!finish) + { +- RINOK_THREAD(Event_Set(&nextThread->canWrite)); ++ RINOK_THREAD(Event_Set(&nextThread->canWrite)) + } + else + { + if (needContinue) + { + // we restore decoding with new iteration +- RINOK_THREAD(Event_Set(&p->threads[0].canWrite)); ++ RINOK_THREAD(Event_Set(&p->threads[0].canWrite)) + } + else + { +@@ -817,7 +790,7 @@ static WRes ThreadFunc2(CMtDecThread *t) + return SZ_OK; + p->exitThread = True7z; + } +- RINOK_THREAD(Event_Set(&p->threads[0].canRead)); ++ RINOK_THREAD(Event_Set(&p->threads[0].canRead)) + } + } + } +@@ -836,7 +809,7 @@ static WRes ThreadFunc2(CMtDecThread *t) + #endif + + +-static THREAD_FUNC_DECL ThreadFunc1(void *pp) ++static THREAD_FUNC_DECL MtDec_ThreadFunc1(void *pp) + { + WRes res; + +@@ -845,7 +818,7 @@ static THREAD_FUNC_DECL ThreadFunc1(void *pp) + + // fprintf(stdout, "\n%d = %p\n", t->index, &t); + +- res = ThreadFunc2(t); ++ res = MtDec_ThreadFunc2(t); + p = t->mtDec; + if (res == 0) + return (THREAD_FUNC_RET_TYPE)(UINT_PTR)p->exitThreadWRes; +@@ -862,14 +835,14 @@ static THREAD_FUNC_DECL ThreadFunc1(void *pp) + return (THREAD_FUNC_RET_TYPE)(UINT_PTR)res; + } + +-static MY_NO_INLINE THREAD_FUNC_DECL ThreadFunc(void *pp) ++static Z7_NO_INLINE THREAD_FUNC_DECL MtDec_ThreadFunc(void *pp) + { + #ifdef USE_ALLOCA + CMtDecThread *t = (CMtDecThread *)pp; + // fprintf(stderr, "\n%d = %p - before", t->index, &t); + t->allocaPtr = alloca(t->index * 128); + #endif +- return ThreadFunc1(pp); ++ return MtDec_ThreadFunc1(pp); + } + + +@@ -883,7 +856,7 @@ int MtDec_PrepareRead(CMtDec *p) + + { + unsigned i; +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + if (i > p->numStartedThreads + || p->numFilledThreads <= + (i >= p->filledThreadStart ? +@@ -987,7 +960,7 @@ void MtDec_Construct(CMtDec *p) + + p->allocatedBufsSize = 0; + +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + { + CMtDecThread *t = &p->threads[i]; + t->mtDec = p; +@@ -995,7 +968,7 @@ void MtDec_Construct(CMtDec *p) + t->inBuf = NULL; + Event_Construct(&t->canRead); + Event_Construct(&t->canWrite); +- Thread_Construct(&t->thread); ++ Thread_CONSTRUCT(&t->thread) + } + + // Event_Construct(&p->finishedEvent); +@@ -1010,7 +983,7 @@ static void MtDec_Free(CMtDec *p) + + p->exitThread = True7z; + +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + MtDecThread_Destruct(&p->threads[i]); + + // Event_Close(&p->finishedEvent); +@@ -1061,15 +1034,15 @@ SRes MtDec_Code(CMtDec *p) + + { + unsigned numThreads = p->numThreadsMax; +- if (numThreads > MTDEC__THREADS_MAX) +- numThreads = MTDEC__THREADS_MAX; ++ if (numThreads > MTDEC_THREADS_MAX) ++ numThreads = MTDEC_THREADS_MAX; + p->numStartedThreads_Limit = numThreads; + p->numStartedThreads = 0; + } + + if (p->inBufSize != p->allocatedBufsSize) + { +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + { + CMtDecThread *t = &p->threads[i]; + if (t->inBuf) +@@ -1086,7 +1059,7 @@ SRes MtDec_Code(CMtDec *p) + + MtProgress_Init(&p->mtProgress, p->progress); + +- // RINOK_THREAD(ArEvent_OptCreate_And_Reset(&p->finishedEvent)); ++ // RINOK_THREAD(AutoResetEvent_OptCreate_And_Reset(&p->finishedEvent)) + p->exitThread = False7z; + p->exitThreadWRes = 0; + +@@ -1098,7 +1071,7 @@ SRes MtDec_Code(CMtDec *p) + wres = MtDecThread_CreateEvents(nextThread); + if (wres == 0) { wres = Event_Set(&nextThread->canWrite); + if (wres == 0) { wres = Event_Set(&nextThread->canRead); +- if (wres == 0) { THREAD_FUNC_RET_TYPE res = ThreadFunc(nextThread); ++ if (wres == 0) { THREAD_FUNC_RET_TYPE res = MtDec_ThreadFunc(nextThread); + wres = (WRes)(UINT_PTR)res; + if (wres != 0) + { +@@ -1137,3 +1110,5 @@ SRes MtDec_Code(CMtDec *p) + } + + #endif ++ ++#undef PRF +diff --git a/src/lzma/MtDec.h b/src/lzma/MtDec.h +index c2da46ae2..c28e8d9ac 100644 +--- a/src/lzma/MtDec.h ++++ b/src/lzma/MtDec.h +@@ -1,46 +1,46 @@ + /* MtDec.h -- Multi-thread Decoder +-2020-03-05 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __MT_DEC_H +-#define __MT_DEC_H ++#ifndef ZIP7_INC_MT_DEC_H ++#define ZIP7_INC_MT_DEC_H + + #include "7zTypes.h" + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + #include "Threads.h" + #endif + + EXTERN_C_BEGIN + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + +-#ifndef _7ZIP_ST +- #define MTDEC__THREADS_MAX 32 ++#ifndef Z7_ST ++ #define MTDEC_THREADS_MAX 32 + #else +- #define MTDEC__THREADS_MAX 1 ++ #define MTDEC_THREADS_MAX 1 + #endif + + + typedef struct + { +- ICompressProgress *progress; ++ ICompressProgressPtr progress; + SRes res; + UInt64 totalInSize; + UInt64 totalOutSize; + CCriticalSection cs; + } CMtProgress; + +-void MtProgress_Init(CMtProgress *p, ICompressProgress *progress); ++void MtProgress_Init(CMtProgress *p, ICompressProgressPtr progress); + SRes MtProgress_Progress_ST(CMtProgress *p); + SRes MtProgress_ProgressAdd(CMtProgress *p, UInt64 inSize, UInt64 outSize); + SRes MtProgress_GetError(CMtProgress *p); + void MtProgress_SetError(CMtProgress *p, SRes res); + +-struct _CMtDec; ++struct CMtDec; + + typedef struct + { +- struct _CMtDec *mtDec; ++ struct CMtDec_ *mtDec; + unsigned index; + void *inBuf; + +@@ -117,7 +117,7 @@ typedef struct + + + +-typedef struct _CMtDec ++typedef struct CMtDec_ + { + /* input variables */ + +@@ -126,11 +126,11 @@ typedef struct _CMtDec + // size_t inBlockMax; + unsigned numThreadsMax_2; + +- ISeqInStream *inStream; ++ ISeqInStreamPtr inStream; + // const Byte *inData; + // size_t inDataSize; + +- ICompressProgress *progress; ++ ICompressProgressPtr progress; + ISzAllocPtr alloc; + + IMtDecCallback2 *mtCallback; +@@ -171,11 +171,11 @@ typedef struct _CMtDec + unsigned filledThreadStart; + unsigned numFilledThreads; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + BoolInt needInterrupt; + UInt64 interruptIndex; + CMtProgress mtProgress; +- CMtDecThread threads[MTDEC__THREADS_MAX]; ++ CMtDecThread threads[MTDEC_THREADS_MAX]; + #endif + } CMtDec; + +diff --git a/src/lzma/Ppmd.h b/src/lzma/Ppmd.h +index b19879208..66b26266f 100644 +--- a/src/lzma/Ppmd.h ++++ b/src/lzma/Ppmd.h +@@ -1,9 +1,9 @@ + /* Ppmd.h -- PPMD codec common code +-2021-04-13 : Igor Pavlov : Public domain ++2023-03-05 : Igor Pavlov : Public domain + This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */ + +-#ifndef __PPMD_H +-#define __PPMD_H ++#ifndef ZIP7_INC_PPMD_H ++#define ZIP7_INC_PPMD_H + + #include "CpuArch.h" + +@@ -48,8 +48,10 @@ typedef struct + Byte Count; /* Count to next change of Shift */ + } CPpmd_See; + +-#define Ppmd_See_Update(p) if ((p)->Shift < PPMD_PERIOD_BITS && --(p)->Count == 0) \ +- { (p)->Summ = (UInt16)((p)->Summ << 1); (p)->Count = (Byte)(3 << (p)->Shift++); } ++#define Ppmd_See_UPDATE(p) \ ++ { if ((p)->Shift < PPMD_PERIOD_BITS && --(p)->Count == 0) \ ++ { (p)->Summ = (UInt16)((p)->Summ << 1); \ ++ (p)->Count = (Byte)(3 << (p)->Shift++); }} + + + typedef struct +diff --git a/src/lzma/Ppmd7.c b/src/lzma/Ppmd7.c +index e5c6114af..5d32607fc 100644 +--- a/src/lzma/Ppmd7.c ++++ b/src/lzma/Ppmd7.c +@@ -1,5 +1,5 @@ + /* Ppmd7.c -- PPMdH codec +-2021-04-13 : Igor Pavlov : Public domain ++2023-04-02 : Igor Pavlov : Public domain + This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */ + + #include "Precomp.h" +@@ -14,7 +14,7 @@ This code is based on PPMd var.H (2001): Dmitry Shkarin : Public domain */ + MY_ALIGN(16) + static const Byte PPMD7_kExpEscape[16] = { 25, 14, 9, 7, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2 }; + MY_ALIGN(16) +-static const UInt16 kInitBinEsc[] = { 0x3CDD, 0x1F3F, 0x59BF, 0x48F3, 0x64A1, 0x5ABC, 0x6632, 0x6051}; ++static const UInt16 PPMD7_kInitBinEsc[] = { 0x3CDD, 0x1F3F, 0x59BF, 0x48F3, 0x64A1, 0x5ABC, 0x6632, 0x6051}; + + #define MAX_FREQ 124 + #define UNIT_SIZE 12 +@@ -33,7 +33,7 @@ static const UInt16 kInitBinEsc[] = { 0x3CDD, 0x1F3F, 0x59BF, 0x48F3, 0x64A1, 0x + #define ONE_STATE(ctx) Ppmd7Context_OneState(ctx) + #define SUFFIX(ctx) CTX((ctx)->Suffix) + +-typedef CPpmd7_Context * CTX_PTR; ++typedef CPpmd7_Context * PPMD7_CTX_PTR; + + struct CPpmd7_Node_; + +@@ -107,14 +107,14 @@ BoolInt Ppmd7_Alloc(CPpmd7 *p, UInt32 size, ISzAllocPtr alloc) + // ---------- Internal Memory Allocator ---------- + + /* We can use CPpmd7_Node in list of free units (as in Ppmd8) +- But we still need one additional list walk pass in GlueFreeBlocks(). +- So we use simple CPpmd_Void_Ref instead of CPpmd7_Node in InsertNode() / RemoveNode() ++ But we still need one additional list walk pass in Ppmd7_GlueFreeBlocks(). ++ So we use simple CPpmd_Void_Ref instead of CPpmd7_Node in Ppmd7_InsertNode() / Ppmd7_RemoveNode() + */ + + #define EMPTY_NODE 0 + + +-static void InsertNode(CPpmd7 *p, void *node, unsigned indx) ++static void Ppmd7_InsertNode(CPpmd7 *p, void *node, unsigned indx) + { + *((CPpmd_Void_Ref *)node) = p->FreeList[indx]; + // ((CPpmd7_Node *)node)->Next = (CPpmd7_Node_Ref)p->FreeList[indx]; +@@ -124,7 +124,7 @@ static void InsertNode(CPpmd7 *p, void *node, unsigned indx) + } + + +-static void *RemoveNode(CPpmd7 *p, unsigned indx) ++static void *Ppmd7_RemoveNode(CPpmd7 *p, unsigned indx) + { + CPpmd_Void_Ref *node = (CPpmd_Void_Ref *)Ppmd7_GetPtr(p, p->FreeList[indx]); + p->FreeList[indx] = *node; +@@ -134,32 +134,32 @@ static void *RemoveNode(CPpmd7 *p, unsigned indx) + } + + +-static void SplitBlock(CPpmd7 *p, void *ptr, unsigned oldIndx, unsigned newIndx) ++static void Ppmd7_SplitBlock(CPpmd7 *p, void *ptr, unsigned oldIndx, unsigned newIndx) + { + unsigned i, nu = I2U(oldIndx) - I2U(newIndx); + ptr = (Byte *)ptr + U2B(I2U(newIndx)); + if (I2U(i = U2I(nu)) != nu) + { + unsigned k = I2U(--i); +- InsertNode(p, ((Byte *)ptr) + U2B(k), nu - k - 1); ++ Ppmd7_InsertNode(p, ((Byte *)ptr) + U2B(k), nu - k - 1); + } +- InsertNode(p, ptr, i); ++ Ppmd7_InsertNode(p, ptr, i); + } + + + /* we use CPpmd7_Node_Union union to solve XLC -O2 strict pointer aliasing problem */ + +-typedef union _CPpmd7_Node_Union ++typedef union + { + CPpmd7_Node Node; + CPpmd7_Node_Ref NextRef; + } CPpmd7_Node_Union; + +-/* Original PPmdH (Ppmd7) code uses doubly linked list in GlueFreeBlocks() ++/* Original PPmdH (Ppmd7) code uses doubly linked list in Ppmd7_GlueFreeBlocks() + we use single linked list similar to Ppmd8 code */ + + +-static void GlueFreeBlocks(CPpmd7 *p) ++static void Ppmd7_GlueFreeBlocks(CPpmd7 *p) + { + /* + we use first UInt16 field of 12-bytes UNITs as record type stamp +@@ -239,27 +239,27 @@ static void GlueFreeBlocks(CPpmd7 *p) + if (nu == 0) + continue; + for (; nu > 128; nu -= 128, node += 128) +- InsertNode(p, node, PPMD_NUM_INDEXES - 1); ++ Ppmd7_InsertNode(p, node, PPMD_NUM_INDEXES - 1); + if (I2U(i = U2I(nu)) != nu) + { + unsigned k = I2U(--i); +- InsertNode(p, node + k, (unsigned)nu - k - 1); ++ Ppmd7_InsertNode(p, node + k, (unsigned)nu - k - 1); + } +- InsertNode(p, node, i); ++ Ppmd7_InsertNode(p, node, i); + } + } + + +-MY_NO_INLINE +-static void *AllocUnitsRare(CPpmd7 *p, unsigned indx) ++Z7_NO_INLINE ++static void *Ppmd7_AllocUnitsRare(CPpmd7 *p, unsigned indx) + { + unsigned i; + + if (p->GlueCount == 0) + { +- GlueFreeBlocks(p); ++ Ppmd7_GlueFreeBlocks(p); + if (p->FreeList[indx] != 0) +- return RemoveNode(p, indx); ++ return Ppmd7_RemoveNode(p, indx); + } + + i = indx; +@@ -277,17 +277,17 @@ static void *AllocUnitsRare(CPpmd7 *p, unsigned indx) + while (p->FreeList[i] == 0); + + { +- void *block = RemoveNode(p, i); +- SplitBlock(p, block, i, indx); ++ void *block = Ppmd7_RemoveNode(p, i); ++ Ppmd7_SplitBlock(p, block, i, indx); + return block; + } + } + + +-static void *AllocUnits(CPpmd7 *p, unsigned indx) ++static void *Ppmd7_AllocUnits(CPpmd7 *p, unsigned indx) + { + if (p->FreeList[indx] != 0) +- return RemoveNode(p, indx); ++ return Ppmd7_RemoveNode(p, indx); + { + UInt32 numBytes = U2B(I2U(indx)); + Byte *lo = p->LoUnit; +@@ -297,11 +297,11 @@ static void *AllocUnits(CPpmd7 *p, unsigned indx) + return lo; + } + } +- return AllocUnitsRare(p, indx); ++ return Ppmd7_AllocUnitsRare(p, indx); + } + + +-#define MyMem12Cpy(dest, src, num) \ ++#define MEM_12_CPY(dest, src, num) \ + { UInt32 *d = (UInt32 *)dest; const UInt32 *z = (const UInt32 *)src; UInt32 n = num; \ + do { d[0] = z[0]; d[1] = z[1]; d[2] = z[2]; z += 3; d += 3; } while (--n); } + +@@ -315,12 +315,12 @@ static void *ShrinkUnits(CPpmd7 *p, void *oldPtr, unsigned oldNU, unsigned newNU + return oldPtr; + if (p->FreeList[i1] != 0) + { +- void *ptr = RemoveNode(p, i1); +- MyMem12Cpy(ptr, oldPtr, newNU); +- InsertNode(p, oldPtr, i0); ++ void *ptr = Ppmd7_RemoveNode(p, i1); ++ MEM_12_CPY(ptr, oldPtr, newNU) ++ Ppmd7_InsertNode(p, oldPtr, i0); + return ptr; + } +- SplitBlock(p, oldPtr, i0, i1); ++ Ppmd7_SplitBlock(p, oldPtr, i0, i1); + return oldPtr; + } + */ +@@ -329,14 +329,14 @@ static void *ShrinkUnits(CPpmd7 *p, void *oldPtr, unsigned oldNU, unsigned newNU + #define SUCCESSOR(p) Ppmd_GET_SUCCESSOR(p) + static void SetSuccessor(CPpmd_State *p, CPpmd_Void_Ref v) + { +- Ppmd_SET_SUCCESSOR(p, v); ++ Ppmd_SET_SUCCESSOR(p, v) + } + + + +-MY_NO_INLINE ++Z7_NO_INLINE + static +-void RestartModel(CPpmd7 *p) ++void Ppmd7_RestartModel(CPpmd7 *p) + { + unsigned i, k; + +@@ -352,8 +352,8 @@ void RestartModel(CPpmd7 *p) + p->PrevSuccess = 0; + + { +- CPpmd7_Context *mc = (CTX_PTR)(void *)(p->HiUnit -= UNIT_SIZE); /* AllocContext(p); */ +- CPpmd_State *s = (CPpmd_State *)p->LoUnit; /* AllocUnits(p, PPMD_NUM_INDEXES - 1); */ ++ CPpmd7_Context *mc = (PPMD7_CTX_PTR)(void *)(p->HiUnit -= UNIT_SIZE); /* AllocContext(p); */ ++ CPpmd_State *s = (CPpmd_State *)p->LoUnit; /* Ppmd7_AllocUnits(p, PPMD_NUM_INDEXES - 1); */ + + p->LoUnit += U2B(256 / 2); + p->MaxContext = p->MinContext = mc; +@@ -391,7 +391,7 @@ void RestartModel(CPpmd7 *p) + { + unsigned m; + UInt16 *dest = p->BinSumm[i] + k; +- UInt16 val = (UInt16)(PPMD_BIN_SCALE - kInitBinEsc[k] / (i + 2)); ++ const UInt16 val = (UInt16)(PPMD_BIN_SCALE - PPMD7_kInitBinEsc[k] / (i + 2)); + for (m = 0; m < 64; m += 8) + dest[m] = val; + } +@@ -423,13 +423,13 @@ void Ppmd7_Init(CPpmd7 *p, unsigned maxOrder) + { + p->MaxOrder = maxOrder; + +- RestartModel(p); ++ Ppmd7_RestartModel(p); + } + + + + /* +- CreateSuccessors() ++ Ppmd7_CreateSuccessors() + It's called when (FoundState->Successor) is RAW-Successor, + that is the link to position in Raw text. + So we create Context records and write the links to +@@ -445,10 +445,10 @@ void Ppmd7_Init(CPpmd7 *p, unsigned maxOrder) + also it can return pointer to real context of same order, + */ + +-MY_NO_INLINE +-static CTX_PTR CreateSuccessors(CPpmd7 *p) ++Z7_NO_INLINE ++static PPMD7_CTX_PTR Ppmd7_CreateSuccessors(CPpmd7 *p) + { +- CTX_PTR c = p->MinContext; ++ PPMD7_CTX_PTR c = p->MinContext; + CPpmd_Byte_Ref upBranch = (CPpmd_Byte_Ref)SUCCESSOR(p->FoundState); + Byte newSym, newFreq; + unsigned numPs = 0; +@@ -522,15 +522,15 @@ static CTX_PTR CreateSuccessors(CPpmd7 *p) + + do + { +- CTX_PTR c1; ++ PPMD7_CTX_PTR c1; + /* = AllocContext(p); */ + if (p->HiUnit != p->LoUnit) +- c1 = (CTX_PTR)(void *)(p->HiUnit -= UNIT_SIZE); ++ c1 = (PPMD7_CTX_PTR)(void *)(p->HiUnit -= UNIT_SIZE); + else if (p->FreeList[0] != 0) +- c1 = (CTX_PTR)RemoveNode(p, 0); ++ c1 = (PPMD7_CTX_PTR)Ppmd7_RemoveNode(p, 0); + else + { +- c1 = (CTX_PTR)AllocUnitsRare(p, 0); ++ c1 = (PPMD7_CTX_PTR)Ppmd7_AllocUnitsRare(p, 0); + if (!c1) + return NULL; + } +@@ -550,16 +550,16 @@ static CTX_PTR CreateSuccessors(CPpmd7 *p) + + + +-#define SwapStates(s) \ ++#define SWAP_STATES(s) \ + { CPpmd_State tmp = s[0]; s[0] = s[-1]; s[-1] = tmp; } + + + void Ppmd7_UpdateModel(CPpmd7 *p); +-MY_NO_INLINE ++Z7_NO_INLINE + void Ppmd7_UpdateModel(CPpmd7 *p) + { + CPpmd_Void_Ref maxSuccessor, minSuccessor; +- CTX_PTR c, mc; ++ PPMD7_CTX_PTR c, mc; + unsigned s0, ns; + + +@@ -592,7 +592,7 @@ void Ppmd7_UpdateModel(CPpmd7 *p) + + if (s[0].Freq >= s[-1].Freq) + { +- SwapStates(s); ++ SWAP_STATES(s) + s--; + } + } +@@ -610,10 +610,10 @@ void Ppmd7_UpdateModel(CPpmd7 *p) + { + /* MAX ORDER context */ + /* (FoundState->Successor) is RAW-Successor. */ +- p->MaxContext = p->MinContext = CreateSuccessors(p); ++ p->MaxContext = p->MinContext = Ppmd7_CreateSuccessors(p); + if (!p->MinContext) + { +- RestartModel(p); ++ Ppmd7_RestartModel(p); + return; + } + SetSuccessor(p->FoundState, REF(p->MinContext)); +@@ -629,7 +629,7 @@ void Ppmd7_UpdateModel(CPpmd7 *p) + p->Text = text; + if (text >= p->UnitsStart) + { +- RestartModel(p); ++ Ppmd7_RestartModel(p); + return; + } + maxSuccessor = REF(text); +@@ -645,10 +645,10 @@ void Ppmd7_UpdateModel(CPpmd7 *p) + if (minSuccessor <= maxSuccessor) + { + // minSuccessor is RAW-Successor. So we will create real contexts records: +- CTX_PTR cs = CreateSuccessors(p); ++ PPMD7_CTX_PTR cs = Ppmd7_CreateSuccessors(p); + if (!cs) + { +- RestartModel(p); ++ Ppmd7_RestartModel(p); + return; + } + minSuccessor = REF(cs); +@@ -715,16 +715,16 @@ void Ppmd7_UpdateModel(CPpmd7 *p) + unsigned i = U2I(oldNU); + if (i != U2I((size_t)oldNU + 1)) + { +- void *ptr = AllocUnits(p, i + 1); ++ void *ptr = Ppmd7_AllocUnits(p, i + 1); + void *oldPtr; + if (!ptr) + { +- RestartModel(p); ++ Ppmd7_RestartModel(p); + return; + } + oldPtr = STATS(c); +- MyMem12Cpy(ptr, oldPtr, oldNU); +- InsertNode(p, oldPtr, i); ++ MEM_12_CPY(ptr, oldPtr, oldNU) ++ Ppmd7_InsertNode(p, oldPtr, i); + c->Union4.Stats = STATS_REF(ptr); + } + } +@@ -739,10 +739,10 @@ void Ppmd7_UpdateModel(CPpmd7 *p) + else + { + // instead of One-symbol context we create 2-symbol context +- CPpmd_State *s = (CPpmd_State*)AllocUnits(p, 0); ++ CPpmd_State *s = (CPpmd_State*)Ppmd7_AllocUnits(p, 0); + if (!s) + { +- RestartModel(p); ++ Ppmd7_RestartModel(p); + return; + } + { +@@ -795,8 +795,8 @@ void Ppmd7_UpdateModel(CPpmd7 *p) + + + +-MY_NO_INLINE +-static void Rescale(CPpmd7 *p) ++Z7_NO_INLINE ++static void Ppmd7_Rescale(CPpmd7 *p) + { + unsigned i, adder, sumFreq, escFreq; + CPpmd_State *stats = STATS(p->MinContext); +@@ -885,7 +885,7 @@ static void Rescale(CPpmd7 *p) + *s = *stats; + s->Freq = (Byte)freq; // (freq <= 260 / 4) + p->FoundState = s; +- InsertNode(p, stats, U2I(n0)); ++ Ppmd7_InsertNode(p, stats, U2I(n0)); + return; + } + +@@ -899,13 +899,13 @@ static void Rescale(CPpmd7 *p) + { + if (p->FreeList[i1] != 0) + { +- void *ptr = RemoveNode(p, i1); ++ void *ptr = Ppmd7_RemoveNode(p, i1); + p->MinContext->Union4.Stats = STATS_REF(ptr); +- MyMem12Cpy(ptr, (const void *)stats, n1); +- InsertNode(p, stats, i0); ++ MEM_12_CPY(ptr, (const void *)stats, n1) ++ Ppmd7_InsertNode(p, stats, i0); + } + else +- SplitBlock(p, stats, i0, i1); ++ Ppmd7_SplitBlock(p, stats, i0, i1); + } + } + } +@@ -948,9 +948,9 @@ CPpmd_See *Ppmd7_MakeEscFreq(CPpmd7 *p, unsigned numMasked, UInt32 *escFreq) + } + + +-static void NextContext(CPpmd7 *p) ++static void Ppmd7_NextContext(CPpmd7 *p) + { +- CTX_PTR c = CTX(SUCCESSOR(p->FoundState)); ++ PPMD7_CTX_PTR c = CTX(SUCCESSOR(p->FoundState)); + if (p->OrderFall == 0 && (const Byte *)c > p->Text) + p->MaxContext = p->MinContext = c; + else +@@ -967,12 +967,12 @@ void Ppmd7_Update1(CPpmd7 *p) + s->Freq = (Byte)freq; + if (freq > s[-1].Freq) + { +- SwapStates(s); ++ SWAP_STATES(s) + p->FoundState = --s; + if (freq > MAX_FREQ) +- Rescale(p); ++ Ppmd7_Rescale(p); + } +- NextContext(p); ++ Ppmd7_NextContext(p); + } + + +@@ -988,8 +988,8 @@ void Ppmd7_Update1_0(CPpmd7 *p) + freq += 4; + s->Freq = (Byte)freq; + if (freq > MAX_FREQ) +- Rescale(p); +- NextContext(p); ++ Ppmd7_Rescale(p); ++ Ppmd7_NextContext(p); + } + + +@@ -1000,7 +1000,7 @@ void Ppmd7_UpdateBin(CPpmd7 *p) + p->FoundState->Freq = (Byte)(freq + (freq < 128)); + p->PrevSuccess = 1; + p->RunLength++; +- NextContext(p); ++ Ppmd7_NextContext(p); + } + */ + +@@ -1013,7 +1013,7 @@ void Ppmd7_Update2(CPpmd7 *p) + p->MinContext->Union2.SummFreq = (UInt16)(p->MinContext->Union2.SummFreq + 4); + s->Freq = (Byte)freq; + if (freq > MAX_FREQ) +- Rescale(p); ++ Ppmd7_Rescale(p); + Ppmd7_UpdateModel(p); + } + +@@ -1042,8 +1042,8 @@ Last UNIT of array at offset (Size - 12) is root order-0 CPpmd7_Context record. + The code can free UNITs memory blocks that were allocated to store CPpmd_State vectors. + The code doesn't free UNITs allocated for CPpmd7_Context records. + +-The code calls RestartModel(), when there is no free memory for allocation. +-And RestartModel() changes the state to orignal start state, with full free block. ++The code calls Ppmd7_RestartModel(), when there is no free memory for allocation. ++And Ppmd7_RestartModel() changes the state to orignal start state, with full free block. + + + The code allocates UNITs with the following order: +@@ -1051,14 +1051,14 @@ The code allocates UNITs with the following order: + Allocation of 1 UNIT for Context record + - from free space (HiUnit) down to (LoUnit) + - from FreeList[0] +- - AllocUnitsRare() ++ - Ppmd7_AllocUnitsRare() + +-AllocUnits() for CPpmd_State vectors: ++Ppmd7_AllocUnits() for CPpmd_State vectors: + - from FreeList[i] + - from free space (LoUnit) up to (HiUnit) +- - AllocUnitsRare() ++ - Ppmd7_AllocUnitsRare() + +-AllocUnitsRare() ++Ppmd7_AllocUnitsRare() + - if (GlueCount == 0) + { Glue lists, GlueCount = 255, allocate from FreeList[i]] } + - loop for all higher sized FreeList[...] lists +@@ -1093,8 +1093,8 @@ The PPMd code tries to fulfill the condition: + We have (Sum(Stats[].Freq) <= 256 * 124), because of (MAX_FREQ = 124) + So (4 = 128 - 124) is average reserve for Escape_Freq for each symbol. + If (CPpmd_State::Freq) is not aligned for 4, the reserve can be 5, 6 or 7. +-SummFreq and Escape_Freq can be changed in Rescale() and *Update*() functions. +-Rescale() can remove symbols only from max-order contexts. So Escape_Freq can increase after multiple calls of Rescale() for ++SummFreq and Escape_Freq can be changed in Ppmd7_Rescale() and *Update*() functions. ++Ppmd7_Rescale() can remove symbols only from max-order contexts. So Escape_Freq can increase after multiple calls of Ppmd7_Rescale() for + max-order context. + + When the PPMd code still break (Total <= RC::Range) condition in range coder, +@@ -1102,3 +1102,21 @@ we have two ways to resolve that problem: + 1) we can report error, if we want to keep compatibility with original PPMd code that has no fix for such cases. + 2) we can reduce (Total) value to (RC::Range) by reducing (Escape_Freq) part of (Total) value. + */ ++ ++#undef MAX_FREQ ++#undef UNIT_SIZE ++#undef U2B ++#undef U2I ++#undef I2U ++#undef I2U_UInt16 ++#undef REF ++#undef STATS_REF ++#undef CTX ++#undef STATS ++#undef ONE_STATE ++#undef SUFFIX ++#undef NODE ++#undef EMPTY_NODE ++#undef MEM_12_CPY ++#undef SUCCESSOR ++#undef SWAP_STATES +diff --git a/src/lzma/Ppmd7.h b/src/lzma/Ppmd7.h +index d31809aeb..d9eb326d6 100644 +--- a/src/lzma/Ppmd7.h ++++ b/src/lzma/Ppmd7.h +@@ -1,11 +1,11 @@ + /* Ppmd7.h -- Ppmd7 (PPMdH) compression codec +-2021-04-13 : Igor Pavlov : Public domain ++2023-04-02 : Igor Pavlov : Public domain + This code is based on: + PPMd var.H (2001): Dmitry Shkarin : Public domain */ + + +-#ifndef __PPMD7_H +-#define __PPMD7_H ++#ifndef ZIP7_INC_PPMD7_H ++#define ZIP7_INC_PPMD7_H + + #include "Ppmd.h" + +@@ -55,7 +55,7 @@ typedef struct + UInt32 Range; + UInt32 Code; + UInt32 Low; +- IByteIn *Stream; ++ IByteInPtr Stream; + } CPpmd7_RangeDec; + + +@@ -66,7 +66,7 @@ typedef struct + // Byte _dummy_[3]; + UInt64 Low; + UInt64 CacheSize; +- IByteOut *Stream; ++ IByteOutPtr Stream; + } CPpmd7z_RangeEnc; + + +diff --git a/src/lzma/Ppmd7Dec.c b/src/lzma/Ppmd7Dec.c +index f446a315c..7d2e55643 100644 +--- a/src/lzma/Ppmd7Dec.c ++++ b/src/lzma/Ppmd7Dec.c +@@ -1,5 +1,5 @@ + /* Ppmd7Dec.c -- Ppmd7z (PPMdH with 7z Range Coder) Decoder +-2021-04-13 : Igor Pavlov : Public domain ++2023-04-02 : Igor Pavlov : Public domain + This code is based on: + PPMd var.H (2001): Dmitry Shkarin : Public domain */ + +@@ -8,7 +8,7 @@ This code is based on: + + #include "Ppmd7.h" + +-#define kTopValue (1 << 24) ++#define kTopValue ((UInt32)1 << 24) + + + #define READ_BYTE(p) IByteIn_Read((p)->Stream) +@@ -37,9 +37,9 @@ BoolInt Ppmd7z_RangeDec_Init(CPpmd7_RangeDec *p) + + #define R (&p->rc.dec) + +-MY_FORCE_INLINE +-// MY_NO_INLINE +-static void RangeDec_Decode(CPpmd7 *p, UInt32 start, UInt32 size) ++Z7_FORCE_INLINE ++// Z7_NO_INLINE ++static void Ppmd7z_RD_Decode(CPpmd7 *p, UInt32 start, UInt32 size) + { + + +@@ -48,18 +48,18 @@ static void RangeDec_Decode(CPpmd7 *p, UInt32 start, UInt32 size) + RC_NORM_LOCAL(R) + } + +-#define RC_Decode(start, size) RangeDec_Decode(p, start, size); +-#define RC_DecodeFinal(start, size) RC_Decode(start, size) RC_NORM_REMOTE(R) +-#define RC_GetThreshold(total) (R->Code / (R->Range /= (total))) ++#define RC_Decode(start, size) Ppmd7z_RD_Decode(p, start, size); ++#define RC_DecodeFinal(start, size) RC_Decode(start, size) RC_NORM_REMOTE(R) ++#define RC_GetThreshold(total) (R->Code / (R->Range /= (total))) + + + #define CTX(ref) ((CPpmd7_Context *)Ppmd7_GetContext(p, ref)) +-typedef CPpmd7_Context * CTX_PTR; ++// typedef CPpmd7_Context * CTX_PTR; + #define SUCCESSOR(p) Ppmd_GET_SUCCESSOR(p) + void Ppmd7_UpdateModel(CPpmd7 *p); + + #define MASK(sym) ((unsigned char *)charMask)[sym] +-// MY_FORCE_INLINE ++// Z7_FORCE_INLINE + // static + int Ppmd7z_DecodeSymbol(CPpmd7 *p) + { +@@ -70,7 +70,7 @@ int Ppmd7z_DecodeSymbol(CPpmd7 *p) + CPpmd_State *s = Ppmd7_GetStats(p, p->MinContext); + unsigned i; + UInt32 count, hiCnt; +- UInt32 summFreq = p->MinContext->Union2.SummFreq; ++ const UInt32 summFreq = p->MinContext->Union2.SummFreq; + + + +@@ -81,7 +81,7 @@ int Ppmd7z_DecodeSymbol(CPpmd7 *p) + if ((Int32)(count -= s->Freq) < 0) + { + Byte sym; +- RC_DecodeFinal(0, s->Freq); ++ RC_DecodeFinal(0, s->Freq) + p->FoundState = s; + sym = s->Symbol; + Ppmd7_Update1_0(p); +@@ -96,7 +96,7 @@ int Ppmd7z_DecodeSymbol(CPpmd7 *p) + if ((Int32)(count -= (++s)->Freq) < 0) + { + Byte sym; +- RC_DecodeFinal((hiCnt - count) - s->Freq, s->Freq); ++ RC_DecodeFinal((hiCnt - count) - s->Freq, s->Freq) + p->FoundState = s; + sym = s->Symbol; + Ppmd7_Update1(p); +@@ -109,10 +109,10 @@ int Ppmd7z_DecodeSymbol(CPpmd7 *p) + return PPMD7_SYM_ERROR; + + hiCnt -= count; +- RC_Decode(hiCnt, summFreq - hiCnt); ++ RC_Decode(hiCnt, summFreq - hiCnt) + + p->HiBitsFlag = PPMD7_HiBitsFlag_3(p->FoundState->Symbol); +- PPMD_SetAllBitsIn256Bytes(charMask); ++ PPMD_SetAllBitsIn256Bytes(charMask) + // i = p->MinContext->NumStats - 1; + // do { MASK((--s)->Symbol) = 0; } while (--i); + { +@@ -152,7 +152,7 @@ int Ppmd7z_DecodeSymbol(CPpmd7 *p) + // Ppmd7_UpdateBin(p); + { + unsigned freq = s->Freq; +- CTX_PTR c = CTX(SUCCESSOR(s)); ++ CPpmd7_Context *c = CTX(SUCCESSOR(s)); + sym = s->Symbol; + p->FoundState = s; + p->PrevSuccess = 1; +@@ -176,7 +176,7 @@ int Ppmd7z_DecodeSymbol(CPpmd7 *p) + R->Range -= size0; + RC_NORM_LOCAL(R) + +- PPMD_SetAllBitsIn256Bytes(charMask); ++ PPMD_SetAllBitsIn256Bytes(charMask) + MASK(Ppmd7Context_OneState(p->MinContext)->Symbol) = 0; + p->PrevSuccess = 0; + } +@@ -245,13 +245,13 @@ int Ppmd7z_DecodeSymbol(CPpmd7 *p) + { + count -= s->Freq & (unsigned)(MASK((s)->Symbol)); s++; if ((Int32)count < 0) break; + // count -= s->Freq & (unsigned)(MASK((s)->Symbol)); s++; if ((Int32)count < 0) break; +- }; ++ } + } + s--; +- RC_DecodeFinal((hiCnt - count) - s->Freq, s->Freq); ++ RC_DecodeFinal((hiCnt - count) - s->Freq, s->Freq) + + // new (see->Summ) value can overflow over 16-bits in some rare cases +- Ppmd_See_Update(see); ++ Ppmd_See_UPDATE(see) + p->FoundState = s; + sym = s->Symbol; + Ppmd7_Update2(p); +@@ -261,7 +261,7 @@ int Ppmd7z_DecodeSymbol(CPpmd7 *p) + if (count >= freqSum) + return PPMD7_SYM_ERROR; + +- RC_Decode(hiCnt, freqSum - hiCnt); ++ RC_Decode(hiCnt, freqSum - hiCnt) + + // We increase (see->Summ) for sum of Freqs of all non_Masked symbols. + // new (see->Summ) value can overflow over 16-bits in some rare cases +@@ -295,3 +295,18 @@ Byte *Ppmd7z_DecodeSymbols(CPpmd7 *p, Byte *buf, const Byte *lim) + return buf; + } + */ ++ ++#undef kTopValue ++#undef READ_BYTE ++#undef RC_NORM_BASE ++#undef RC_NORM_1 ++#undef RC_NORM ++#undef RC_NORM_LOCAL ++#undef RC_NORM_REMOTE ++#undef R ++#undef RC_Decode ++#undef RC_DecodeFinal ++#undef RC_GetThreshold ++#undef CTX ++#undef SUCCESSOR ++#undef MASK +diff --git a/src/lzma/Ppmd7Enc.c b/src/lzma/Ppmd7Enc.c +index 62139c5b6..41106bab4 100644 +--- a/src/lzma/Ppmd7Enc.c ++++ b/src/lzma/Ppmd7Enc.c +@@ -1,5 +1,5 @@ + /* Ppmd7Enc.c -- Ppmd7z (PPMdH with 7z Range Coder) Encoder +-2021-04-13 : Igor Pavlov : Public domain ++2023-04-02 : Igor Pavlov : Public domain + This code is based on: + PPMd var.H (2001): Dmitry Shkarin : Public domain */ + +@@ -8,7 +8,7 @@ This code is based on: + + #include "Ppmd7.h" + +-#define kTopValue (1 << 24) ++#define kTopValue ((UInt32)1 << 24) + + #define R (&p->rc.enc) + +@@ -20,8 +20,8 @@ void Ppmd7z_Init_RangeEnc(CPpmd7 *p) + R->CacheSize = 1; + } + +-MY_NO_INLINE +-static void RangeEnc_ShiftLow(CPpmd7 *p) ++Z7_NO_INLINE ++static void Ppmd7z_RangeEnc_ShiftLow(CPpmd7 *p) + { + if ((UInt32)R->Low < (UInt32)0xFF000000 || (unsigned)(R->Low >> 32) != 0) + { +@@ -38,53 +38,53 @@ static void RangeEnc_ShiftLow(CPpmd7 *p) + R->Low = (UInt32)((UInt32)R->Low << 8); + } + +-#define RC_NORM_BASE(p) if (R->Range < kTopValue) { R->Range <<= 8; RangeEnc_ShiftLow(p); +-#define RC_NORM_1(p) RC_NORM_BASE(p) } +-#define RC_NORM(p) RC_NORM_BASE(p) RC_NORM_BASE(p) }} ++#define RC_NORM_BASE(p) if (R->Range < kTopValue) { R->Range <<= 8; Ppmd7z_RangeEnc_ShiftLow(p); ++#define RC_NORM_1(p) RC_NORM_BASE(p) } ++#define RC_NORM(p) RC_NORM_BASE(p) RC_NORM_BASE(p) }} + + // we must use only one type of Normalization from two: LOCAL or REMOTE + #define RC_NORM_LOCAL(p) // RC_NORM(p) + #define RC_NORM_REMOTE(p) RC_NORM(p) + + /* +-#define RangeEnc_Encode(p, start, _size_) \ ++#define Ppmd7z_RangeEnc_Encode(p, start, _size_) \ + { UInt32 size = _size_; \ + R->Low += start * R->Range; \ + R->Range *= size; \ + RC_NORM_LOCAL(p); } + */ + +-MY_FORCE_INLINE +-// MY_NO_INLINE +-static void RangeEnc_Encode(CPpmd7 *p, UInt32 start, UInt32 size) ++Z7_FORCE_INLINE ++// Z7_NO_INLINE ++static void Ppmd7z_RangeEnc_Encode(CPpmd7 *p, UInt32 start, UInt32 size) + { + R->Low += start * R->Range; + R->Range *= size; +- RC_NORM_LOCAL(p); ++ RC_NORM_LOCAL(p) + } + + void Ppmd7z_Flush_RangeEnc(CPpmd7 *p) + { + unsigned i; + for (i = 0; i < 5; i++) +- RangeEnc_ShiftLow(p); ++ Ppmd7z_RangeEnc_ShiftLow(p); + } + + + +-#define RC_Encode(start, size) RangeEnc_Encode(p, start, size); +-#define RC_EncodeFinal(start, size) RC_Encode(start, size); RC_NORM_REMOTE(p); ++#define RC_Encode(start, size) Ppmd7z_RangeEnc_Encode(p, start, size); ++#define RC_EncodeFinal(start, size) RC_Encode(start, size) RC_NORM_REMOTE(p) + + #define CTX(ref) ((CPpmd7_Context *)Ppmd7_GetContext(p, ref)) + #define SUFFIX(ctx) CTX((ctx)->Suffix) +-typedef CPpmd7_Context * CTX_PTR; ++// typedef CPpmd7_Context * CTX_PTR; + #define SUCCESSOR(p) Ppmd_GET_SUCCESSOR(p) + + void Ppmd7_UpdateModel(CPpmd7 *p); + + #define MASK(sym) ((unsigned char *)charMask)[sym] + +-MY_FORCE_INLINE ++Z7_FORCE_INLINE + static + void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + { +@@ -104,7 +104,7 @@ void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + if (s->Symbol == symbol) + { + // R->Range /= p->MinContext->Union2.SummFreq; +- RC_EncodeFinal(0, s->Freq); ++ RC_EncodeFinal(0, s->Freq) + p->FoundState = s; + Ppmd7_Update1_0(p); + return; +@@ -117,7 +117,7 @@ void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + if ((++s)->Symbol == symbol) + { + // R->Range /= p->MinContext->Union2.SummFreq; +- RC_EncodeFinal(sum, s->Freq); ++ RC_EncodeFinal(sum, s->Freq) + p->FoundState = s; + Ppmd7_Update1(p); + return; +@@ -127,10 +127,10 @@ void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + while (--i); + + // R->Range /= p->MinContext->Union2.SummFreq; +- RC_Encode(sum, p->MinContext->Union2.SummFreq - sum); ++ RC_Encode(sum, p->MinContext->Union2.SummFreq - sum) + + p->HiBitsFlag = PPMD7_HiBitsFlag_3(p->FoundState->Symbol); +- PPMD_SetAllBitsIn256Bytes(charMask); ++ PPMD_SetAllBitsIn256Bytes(charMask) + // MASK(s->Symbol) = 0; + // i = p->MinContext->NumStats - 1; + // do { MASK((--s)->Symbol) = 0; } while (--i); +@@ -153,20 +153,20 @@ void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + UInt16 *prob = Ppmd7_GetBinSumm(p); + CPpmd_State *s = Ppmd7Context_OneState(p->MinContext); + UInt32 pr = *prob; +- UInt32 bound = (R->Range >> 14) * pr; ++ const UInt32 bound = (R->Range >> 14) * pr; + pr = PPMD_UPDATE_PROB_1(pr); + if (s->Symbol == symbol) + { + *prob = (UInt16)(pr + (1 << PPMD_INT_BITS)); + // RangeEnc_EncodeBit_0(p, bound); + R->Range = bound; +- RC_NORM_1(p); ++ RC_NORM_1(p) + + // p->FoundState = s; + // Ppmd7_UpdateBin(p); + { +- unsigned freq = s->Freq; +- CTX_PTR c = CTX(SUCCESSOR(s)); ++ const unsigned freq = s->Freq; ++ CPpmd7_Context *c = CTX(SUCCESSOR(s)); + p->FoundState = s; + p->PrevSuccess = 1; + p->RunLength++; +@@ -187,7 +187,7 @@ void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + R->Range -= bound; + RC_NORM_LOCAL(p) + +- PPMD_SetAllBitsIn256Bytes(charMask); ++ PPMD_SetAllBitsIn256Bytes(charMask) + MASK(s->Symbol) = 0; + p->PrevSuccess = 0; + } +@@ -248,14 +248,14 @@ void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + + do + { +- unsigned cur = s->Symbol; ++ const unsigned cur = s->Symbol; + if ((int)cur == symbol) + { +- UInt32 low = sum; +- UInt32 freq = s->Freq; ++ const UInt32 low = sum; ++ const UInt32 freq = s->Freq; + unsigned num2; + +- Ppmd_See_Update(see); ++ Ppmd_See_UPDATE(see) + p->FoundState = s; + sum += escFreq; + +@@ -279,7 +279,7 @@ void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + + + R->Range /= sum; +- RC_EncodeFinal(low, freq); ++ RC_EncodeFinal(low, freq) + Ppmd7_Update2(p); + return; + } +@@ -289,21 +289,21 @@ void Ppmd7z_EncodeSymbol(CPpmd7 *p, int symbol) + while (--i); + + { +- UInt32 total = sum + escFreq; ++ const UInt32 total = sum + escFreq; + see->Summ = (UInt16)(see->Summ + total); + + R->Range /= total; +- RC_Encode(sum, escFreq); ++ RC_Encode(sum, escFreq) + } + + { +- CPpmd_State *s2 = Ppmd7_GetStats(p, p->MinContext); ++ const CPpmd_State *s2 = Ppmd7_GetStats(p, p->MinContext); + s--; + MASK(s->Symbol) = 0; + do + { +- unsigned sym0 = s2[0].Symbol; +- unsigned sym1 = s2[1].Symbol; ++ const unsigned sym0 = s2[0].Symbol; ++ const unsigned sym1 = s2[1].Symbol; + s2 += 2; + MASK(sym0) = 0; + MASK(sym1) = 0; +@@ -321,3 +321,18 @@ void Ppmd7z_EncodeSymbols(CPpmd7 *p, const Byte *buf, const Byte *lim) + Ppmd7z_EncodeSymbol(p, *buf); + } + } ++ ++#undef kTopValue ++#undef WRITE_BYTE ++#undef RC_NORM_BASE ++#undef RC_NORM_1 ++#undef RC_NORM ++#undef RC_NORM_LOCAL ++#undef RC_NORM_REMOTE ++#undef R ++#undef RC_Encode ++#undef RC_EncodeFinal ++#undef SUFFIX ++#undef CTX ++#undef SUCCESSOR ++#undef MASK +diff --git a/src/lzma/Precomp.h b/src/lzma/Precomp.h +index e8ff8b40e..69afb2ffd 100644 +--- a/src/lzma/Precomp.h ++++ b/src/lzma/Precomp.h +@@ -1,8 +1,8 @@ + /* Precomp.h -- StdAfx +-2013-11-12 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_PRECOMP_H +-#define __7Z_PRECOMP_H ++#ifndef ZIP7_INC_PRECOMP_H ++#define ZIP7_INC_PRECOMP_H + + #include "Compiler.h" + /* #include "7zTypes.h" */ +diff --git a/src/lzma/RotateDefs.h b/src/lzma/RotateDefs.h +index 8f01d1a6c..c16b4f8e6 100644 +--- a/src/lzma/RotateDefs.h ++++ b/src/lzma/RotateDefs.h +@@ -1,14 +1,14 @@ + /* RotateDefs.h -- Rotate functions +-2015-03-25 : Igor Pavlov : Public domain */ ++2023-06-18 : Igor Pavlov : Public domain */ + +-#ifndef __ROTATE_DEFS_H +-#define __ROTATE_DEFS_H ++#ifndef ZIP7_INC_ROTATE_DEFS_H ++#define ZIP7_INC_ROTATE_DEFS_H + + #ifdef _MSC_VER + + #include + +-/* don't use _rotl with MINGW. It can insert slow call to function. */ ++/* don't use _rotl with old MINGW. It can insert slow call to function. */ + + /* #if (_MSC_VER >= 1200) */ + #pragma intrinsic(_rotl) +@@ -18,12 +18,32 @@ + #define rotlFixed(x, n) _rotl((x), (n)) + #define rotrFixed(x, n) _rotr((x), (n)) + ++#if (_MSC_VER >= 1300) ++#define Z7_ROTL64(x, n) _rotl64((x), (n)) ++#define Z7_ROTR64(x, n) _rotr64((x), (n)) ++#else ++#define Z7_ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) ++#define Z7_ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n)))) ++#endif ++ + #else + + /* new compilers can translate these macros to fast commands. */ + ++#if defined(__clang__) && (__clang_major__ >= 4) \ ++ || defined(__GNUC__) && (__GNUC__ >= 5) ++/* GCC 4.9.0 and clang 3.5 can recognize more correct version: */ ++#define rotlFixed(x, n) (((x) << (n)) | ((x) >> (-(n) & 31))) ++#define rotrFixed(x, n) (((x) >> (n)) | ((x) << (-(n) & 31))) ++#define Z7_ROTL64(x, n) (((x) << (n)) | ((x) >> (-(n) & 63))) ++#define Z7_ROTR64(x, n) (((x) >> (n)) | ((x) << (-(n) & 63))) ++#else ++/* for old GCC / clang: */ + #define rotlFixed(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) + #define rotrFixed(x, n) (((x) >> (n)) | ((x) << (32 - (n)))) ++#define Z7_ROTL64(x, n) (((x) << (n)) | ((x) >> (64 - (n)))) ++#define Z7_ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n)))) ++#endif + + #endif + +diff --git a/src/lzma/Sha256.c b/src/lzma/Sha256.c +index 595eeae98..b119ce83f 100644 +--- a/src/lzma/Sha256.c ++++ b/src/lzma/Sha256.c +@@ -1,5 +1,5 @@ + /* Sha256.c -- SHA-256 Hash +-2021-04-01 : Igor Pavlov : Public domain ++2023-04-02 : Igor Pavlov : Public domain + This code is based on public domain code from Wei Dai's Crypto++ library. */ + + #include "Precomp.h" +@@ -17,48 +17,48 @@ This code is based on public domain code from Wei Dai's Crypto++ library. */ + #ifdef MY_CPU_X86_OR_AMD64 + #ifdef _MSC_VER + #if _MSC_VER >= 1200 +- #define _SHA_SUPPORTED ++ #define Z7_COMPILER_SHA256_SUPPORTED + #endif + #elif defined(__clang__) + #if (__clang_major__ >= 8) // fix that check +- #define _SHA_SUPPORTED ++ #define Z7_COMPILER_SHA256_SUPPORTED + #endif + #elif defined(__GNUC__) + #if (__GNUC__ >= 8) // fix that check +- #define _SHA_SUPPORTED ++ #define Z7_COMPILER_SHA256_SUPPORTED + #endif + #elif defined(__INTEL_COMPILER) + #if (__INTEL_COMPILER >= 1800) // fix that check +- #define _SHA_SUPPORTED ++ #define Z7_COMPILER_SHA256_SUPPORTED + #endif + #endif + #elif defined(MY_CPU_ARM_OR_ARM64) + #ifdef _MSC_VER + #if _MSC_VER >= 1910 +- #define _SHA_SUPPORTED ++ #define Z7_COMPILER_SHA256_SUPPORTED + #endif + #elif defined(__clang__) + #if (__clang_major__ >= 8) // fix that check +- #define _SHA_SUPPORTED ++ #define Z7_COMPILER_SHA256_SUPPORTED + #endif + #elif defined(__GNUC__) + #if (__GNUC__ >= 6) // fix that check +- #define _SHA_SUPPORTED ++ #define Z7_COMPILER_SHA256_SUPPORTED + #endif + #endif + #endif + +-void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks); ++void Z7_FASTCALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks); + +-#ifdef _SHA_SUPPORTED +- void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); ++#ifdef Z7_COMPILER_SHA256_SUPPORTED ++ void Z7_FASTCALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); + +- static SHA256_FUNC_UPDATE_BLOCKS g_FUNC_UPDATE_BLOCKS = Sha256_UpdateBlocks; +- static SHA256_FUNC_UPDATE_BLOCKS g_FUNC_UPDATE_BLOCKS_HW; ++ static SHA256_FUNC_UPDATE_BLOCKS g_SHA256_FUNC_UPDATE_BLOCKS = Sha256_UpdateBlocks; ++ static SHA256_FUNC_UPDATE_BLOCKS g_SHA256_FUNC_UPDATE_BLOCKS_HW; + +- #define UPDATE_BLOCKS(p) p->func_UpdateBlocks ++ #define SHA256_UPDATE_BLOCKS(p) p->func_UpdateBlocks + #else +- #define UPDATE_BLOCKS(p) Sha256_UpdateBlocks ++ #define SHA256_UPDATE_BLOCKS(p) Sha256_UpdateBlocks + #endif + + +@@ -66,16 +66,16 @@ BoolInt Sha256_SetFunction(CSha256 *p, unsigned algo) + { + SHA256_FUNC_UPDATE_BLOCKS func = Sha256_UpdateBlocks; + +- #ifdef _SHA_SUPPORTED ++ #ifdef Z7_COMPILER_SHA256_SUPPORTED + if (algo != SHA256_ALGO_SW) + { + if (algo == SHA256_ALGO_DEFAULT) +- func = g_FUNC_UPDATE_BLOCKS; ++ func = g_SHA256_FUNC_UPDATE_BLOCKS; + else + { + if (algo != SHA256_ALGO_HW) + return False7z; +- func = g_FUNC_UPDATE_BLOCKS_HW; ++ func = g_SHA256_FUNC_UPDATE_BLOCKS_HW; + if (!func) + return False7z; + } +@@ -92,17 +92,18 @@ BoolInt Sha256_SetFunction(CSha256 *p, unsigned algo) + + /* define it for speed optimization */ + +-#ifdef _SFX ++#ifdef Z7_SFX + #define STEP_PRE 1 + #define STEP_MAIN 1 + #else + #define STEP_PRE 2 + #define STEP_MAIN 4 +- // #define _SHA256_UNROLL ++ // #define Z7_SHA256_UNROLL + #endif + ++#undef Z7_SHA256_BIG_W + #if STEP_MAIN != 16 +- #define _SHA256_BIG_W ++ #define Z7_SHA256_BIG_W + #endif + + +@@ -124,8 +125,8 @@ void Sha256_InitState(CSha256 *p) + void Sha256_Init(CSha256 *p) + { + p->func_UpdateBlocks = +- #ifdef _SHA_SUPPORTED +- g_FUNC_UPDATE_BLOCKS; ++ #ifdef Z7_COMPILER_SHA256_SUPPORTED ++ g_SHA256_FUNC_UPDATE_BLOCKS; + #else + NULL; + #endif +@@ -145,7 +146,7 @@ void Sha256_Init(CSha256 *p) + + #define blk2_main(j, i) s1(w(j, (i)-2)) + w(j, (i)-7) + s0(w(j, (i)-15)) + +-#ifdef _SHA256_BIG_W ++#ifdef Z7_SHA256_BIG_W + // we use +i instead of +(i) to change the order to solve CLANG compiler warning for signed/unsigned. + #define w(j, i) W[(size_t)(j) + i] + #define blk2(j, i) (w(j, i) = w(j, (i)-16) + blk2_main(j, i)) +@@ -176,7 +177,7 @@ void Sha256_Init(CSha256 *p) + #define R1_PRE(i) T1( W_PRE, i) + #define R1_MAIN(i) T1( W_MAIN, i) + +-#if (!defined(_SHA256_UNROLL) || STEP_MAIN < 8) && (STEP_MAIN >= 4) ++#if (!defined(Z7_SHA256_UNROLL) || STEP_MAIN < 8) && (STEP_MAIN >= 4) + #define R2_MAIN(i) \ + R1_MAIN(i) \ + R1_MAIN(i + 1) \ +@@ -185,7 +186,7 @@ void Sha256_Init(CSha256 *p) + + + +-#if defined(_SHA256_UNROLL) && STEP_MAIN >= 8 ++#if defined(Z7_SHA256_UNROLL) && STEP_MAIN >= 8 + + #define T4( a,b,c,d,e,f,g,h, wx, i) \ + h += S1(e) + Ch(e,f,g) + K[(i)+(size_t)(j)] + wx(i); \ +@@ -223,7 +224,7 @@ void Sha256_Init(CSha256 *p) + + #endif + +-void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); ++void Z7_FASTCALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); + + // static + extern MY_ALIGN(64) +@@ -252,11 +253,11 @@ const UInt32 SHA256_K_ARRAY[64] = { + #define K SHA256_K_ARRAY + + +-MY_NO_INLINE +-void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks) ++Z7_NO_INLINE ++void Z7_FASTCALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks) + { + UInt32 W +- #ifdef _SHA256_BIG_W ++ #ifdef Z7_SHA256_BIG_W + [64]; + #else + [16]; +@@ -266,7 +267,7 @@ void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t + + UInt32 a,b,c,d,e,f,g,h; + +- #if !defined(_SHA256_UNROLL) || (STEP_MAIN <= 4) || (STEP_PRE <= 4) ++ #if !defined(Z7_SHA256_UNROLL) || (STEP_MAIN <= 4) || (STEP_PRE <= 4) + UInt32 tmp; + #endif + +@@ -297,12 +298,12 @@ void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t + + #else + +- R1_PRE(0); ++ R1_PRE(0) + #if STEP_PRE >= 2 +- R1_PRE(1); ++ R1_PRE(1) + #if STEP_PRE >= 4 +- R1_PRE(2); +- R1_PRE(3); ++ R1_PRE(2) ++ R1_PRE(3) + #endif + #endif + +@@ -311,32 +312,32 @@ void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t + + for (j = 16; j < 64; j += STEP_MAIN) + { +- #if defined(_SHA256_UNROLL) && STEP_MAIN >= 8 ++ #if defined(Z7_SHA256_UNROLL) && STEP_MAIN >= 8 + + #if STEP_MAIN < 8 +- R4_MAIN(0); ++ R4_MAIN(0) + #else +- R8_MAIN(0); ++ R8_MAIN(0) + #if STEP_MAIN == 16 +- R8_MAIN(8); ++ R8_MAIN(8) + #endif + #endif + + #else + +- R1_MAIN(0); ++ R1_MAIN(0) + #if STEP_MAIN >= 2 +- R1_MAIN(1); ++ R1_MAIN(1) + #if STEP_MAIN >= 4 +- R2_MAIN(2); ++ R2_MAIN(2) + #if STEP_MAIN >= 8 +- R2_MAIN(4); +- R2_MAIN(6); ++ R2_MAIN(4) ++ R2_MAIN(6) + #if STEP_MAIN >= 16 +- R2_MAIN(8); +- R2_MAIN(10); +- R2_MAIN(12); +- R2_MAIN(14); ++ R2_MAIN(8) ++ R2_MAIN(10) ++ R2_MAIN(12) ++ R2_MAIN(14) + #endif + #endif + #endif +@@ -367,7 +368,7 @@ void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t + #undef s1 + #undef K + +-#define Sha256_UpdateBlock(p) UPDATE_BLOCKS(p)(p->state, p->buffer, 1) ++#define Sha256_UpdateBlock(p) SHA256_UPDATE_BLOCKS(p)(p->state, p->buffer, 1) + + void Sha256_Update(CSha256 *p, const Byte *data, size_t size) + { +@@ -397,7 +398,7 @@ void Sha256_Update(CSha256 *p, const Byte *data, size_t size) + } + { + size_t numBlocks = size >> 6; +- UPDATE_BLOCKS(p)(p->state, data, numBlocks); ++ SHA256_UPDATE_BLOCKS(p)(p->state, data, numBlocks); + size &= 0x3F; + if (size == 0) + return; +@@ -441,8 +442,8 @@ void Sha256_Final(CSha256 *p, Byte *digest) + + { + UInt64 numBits = (p->count << 3); +- SetBe32(p->buffer + 64 - 8, (UInt32)(numBits >> 32)); +- SetBe32(p->buffer + 64 - 4, (UInt32)(numBits)); ++ SetBe32(p->buffer + 64 - 8, (UInt32)(numBits >> 32)) ++ SetBe32(p->buffer + 64 - 4, (UInt32)(numBits)) + } + + Sha256_UpdateBlock(p); +@@ -451,21 +452,21 @@ void Sha256_Final(CSha256 *p, Byte *digest) + { + UInt32 v0 = p->state[i]; + UInt32 v1 = p->state[(size_t)i + 1]; +- SetBe32(digest , v0); +- SetBe32(digest + 4, v1); ++ SetBe32(digest , v0) ++ SetBe32(digest + 4, v1) + digest += 8; + } + + Sha256_InitState(p); + } + +-#ifdef _SHA_SUPPORTED +-#undef _SHA_SUPPORTED ++#ifdef Z7_COMPILER_SHA256_SUPPORTED ++#undef Z7_COMPILER_SHA256_SUPPORTED + #endif + +-void Sha256Prepare() ++void Sha256Prepare(void) + { +- #ifdef _SHA_SUPPORTED ++ #ifdef Z7_COMPILER_SHA256_SUPPORTED + SHA256_FUNC_UPDATE_BLOCKS f, f_hw; + f = Sha256_UpdateBlocks; + f_hw = NULL; +@@ -483,7 +484,36 @@ void Sha256Prepare() + // printf("\n========== HW SHA256 ======== \n"); + f = f_hw = Sha256_UpdateBlocks_HW; + } +- g_FUNC_UPDATE_BLOCKS = f; +- g_FUNC_UPDATE_BLOCKS_HW = f_hw; ++ g_SHA256_FUNC_UPDATE_BLOCKS = f; ++ g_SHA256_FUNC_UPDATE_BLOCKS_HW = f_hw; + #endif + } ++ ++#undef S0 ++#undef S1 ++#undef s0 ++#undef s1 ++#undef Ch ++#undef Maj ++#undef W_MAIN ++#undef W_PRE ++#undef w ++#undef blk2_main ++#undef blk2 ++#undef T1 ++#undef T4 ++#undef T8 ++#undef R1_PRE ++#undef R1_MAIN ++#undef R2_MAIN ++#undef R4 ++#undef R4_PRE ++#undef R4_MAIN ++#undef R8 ++#undef R8_PRE ++#undef R8_MAIN ++#undef STEP_PRE ++#undef STEP_MAIN ++#undef Z7_SHA256_BIG_W ++#undef Z7_SHA256_UNROLL ++#undef Z7_COMPILER_SHA256_SUPPORTED +diff --git a/src/lzma/Sha256.h b/src/lzma/Sha256.h +index aa38501e5..9e0422320 100644 +--- a/src/lzma/Sha256.h ++++ b/src/lzma/Sha256.h +@@ -1,8 +1,8 @@ + /* Sha256.h -- SHA-256 Hash +-2021-01-01 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_SHA256_H +-#define __7Z_SHA256_H ++#ifndef ZIP7_INC_SHA256_H ++#define ZIP7_INC_SHA256_H + + #include "7zTypes.h" + +@@ -14,7 +14,7 @@ EXTERN_C_BEGIN + #define SHA256_BLOCK_SIZE (SHA256_NUM_BLOCK_WORDS * 4) + #define SHA256_DIGEST_SIZE (SHA256_NUM_DIGEST_WORDS * 4) + +-typedef void (MY_FAST_CALL *SHA256_FUNC_UPDATE_BLOCKS)(UInt32 state[8], const Byte *data, size_t numBlocks); ++typedef void (Z7_FASTCALL *SHA256_FUNC_UPDATE_BLOCKS)(UInt32 state[8], const Byte *data, size_t numBlocks); + + /* + if (the system supports different SHA256 code implementations) +@@ -34,7 +34,7 @@ typedef struct + { + SHA256_FUNC_UPDATE_BLOCKS func_UpdateBlocks; + UInt64 count; +- UInt64 __pad_2[2]; ++ UInt64 _pad_2[2]; + UInt32 state[SHA256_NUM_DIGEST_WORDS]; + + Byte buffer[SHA256_BLOCK_SIZE]; +@@ -62,7 +62,7 @@ void Sha256_Final(CSha256 *p, Byte *digest); + + + +-// void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks); ++// void Z7_FASTCALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks); + + /* + call Sha256Prepare() once at program start. +diff --git a/src/lzma/Sha256Opt.c b/src/lzma/Sha256Opt.c +index decc1382c..e4465e3e7 100644 +--- a/src/lzma/Sha256Opt.c ++++ b/src/lzma/Sha256Opt.c +@@ -1,7 +1,9 @@ + /* Sha256Opt.c -- SHA-256 optimized code for SHA-256 hardware instructions +-2021-04-01 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" ++#include "Compiler.h" ++#include "CpuArch.h" + + #if defined(_MSC_VER) + #if (_MSC_VER < 1900) && (_MSC_VER >= 1200) +@@ -9,41 +11,26 @@ + #endif + #endif + +-#include "CpuArch.h" +- + #ifdef MY_CPU_X86_OR_AMD64 +- #if defined(__clang__) +- #if (__clang_major__ >= 8) // fix that check ++ #if defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1600) // fix that check + #define USE_HW_SHA +- #ifndef __SHA__ +- #define ATTRIB_SHA __attribute__((__target__("sha,ssse3"))) +- #if defined(_MSC_VER) +- // SSSE3: for clang-cl: +- #include +- #define __SHA__ +- #endif +- #endif +- +- #endif +- #elif defined(__GNUC__) +- #if (__GNUC__ >= 8) // fix that check ++ #elif defined(Z7_LLVM_CLANG_VERSION) && (Z7_LLVM_CLANG_VERSION >= 30800) \ ++ || defined(Z7_APPLE_CLANG_VERSION) && (Z7_APPLE_CLANG_VERSION >= 50100) \ ++ || defined(Z7_GCC_VERSION) && (Z7_GCC_VERSION >= 40900) + #define USE_HW_SHA +- #ifndef __SHA__ ++ #if !defined(_INTEL_COMPILER) ++ // icc defines __GNUC__, but icc doesn't support __attribute__(__target__) ++ #if !defined(__SHA__) || !defined(__SSSE3__) + #define ATTRIB_SHA __attribute__((__target__("sha,ssse3"))) +- // #pragma GCC target("sha,ssse3") + #endif +- #endif +- #elif defined(__INTEL_COMPILER) +- #if (__INTEL_COMPILER >= 1800) // fix that check +- #define USE_HW_SHA +- #endif ++ #endif + #elif defined(_MSC_VER) + #ifdef USE_MY_MM + #define USE_VER_MIN 1300 + #else +- #define USE_VER_MIN 1910 ++ #define USE_VER_MIN 1900 + #endif +- #if _MSC_VER >= USE_VER_MIN ++ #if (_MSC_VER >= USE_VER_MIN) + #define USE_HW_SHA + #endif + #endif +@@ -52,16 +39,19 @@ + #ifdef USE_HW_SHA + + // #pragma message("Sha256 HW") +-// #include + +-#if !defined(_MSC_VER) || (_MSC_VER >= 1900) ++// sse/sse2/ssse3: ++#include ++// sha*: + #include +-#else +-#include + +-#if defined(_MSC_VER) && (_MSC_VER >= 1600) +-// #include +-#endif ++#if defined (__clang__) && defined(_MSC_VER) ++ // #if !defined(__SSSE3__) ++ // #endif ++ #if !defined(__SHA__) ++ #include ++ #endif ++#else + + #ifdef USE_MY_MM + #include "My_mm.h" +@@ -98,9 +88,9 @@ const UInt32 SHA256_K_ARRAY[64]; + #define K SHA256_K_ARRAY + + +-#define ADD_EPI32(dest, src) dest = _mm_add_epi32(dest, src); +-#define SHA256_MSG1(dest, src) dest = _mm_sha256msg1_epu32(dest, src); +-#define SHA25G_MSG2(dest, src) dest = _mm_sha256msg2_epu32(dest, src); ++#define ADD_EPI32(dest, src) dest = _mm_add_epi32(dest, src); ++#define SHA256_MSG1(dest, src) dest = _mm_sha256msg1_epu32(dest, src); ++#define SHA25G_MSG2(dest, src) dest = _mm_sha256msg2_epu32(dest, src); + + + #define LOAD_SHUFFLE(m, k) \ +@@ -112,7 +102,7 @@ const UInt32 SHA256_K_ARRAY[64]; + + #define SM2(g0, g1, g2, g3) \ + tmp = _mm_alignr_epi8(g1, g0, 4); \ +- ADD_EPI32(g2, tmp); \ ++ ADD_EPI32(g2, tmp) \ + SHA25G_MSG2(g2, g1); \ + + // #define LS0(k, g0, g1, g2, g3) LOAD_SHUFFLE(g0, k) +@@ -138,16 +128,16 @@ const UInt32 SHA256_K_ARRAY[64]; + // We use scheme with 3 rounds ahead for SHA256_MSG1 / 2 rounds ahead for SHA256_MSG2 + + #define R4(k, g0, g1, g2, g3, OP0, OP1) \ +- RND2_0(g0, k); \ +- OP0(g0, g1, g2, g3); \ +- RND2_1; \ +- OP1(g0, g1, g2, g3); \ ++ RND2_0(g0, k) \ ++ OP0(g0, g1, g2, g3) \ ++ RND2_1 \ ++ OP1(g0, g1, g2, g3) \ + + #define R16(k, OP0, OP1, OP2, OP3, OP4, OP5, OP6, OP7) \ +- R4 ( (k)*4+0, m0, m1, m2, m3, OP0, OP1 ) \ +- R4 ( (k)*4+1, m1, m2, m3, m0, OP2, OP3 ) \ +- R4 ( (k)*4+2, m2, m3, m0, m1, OP4, OP5 ) \ +- R4 ( (k)*4+3, m3, m0, m1, m2, OP6, OP7 ) \ ++ R4 ( (k)*4+0, m0,m1,m2,m3, OP0, OP1 ) \ ++ R4 ( (k)*4+1, m1,m2,m3,m0, OP2, OP3 ) \ ++ R4 ( (k)*4+2, m2,m3,m0,m1, OP4, OP5 ) \ ++ R4 ( (k)*4+3, m3,m0,m1,m2, OP6, OP7 ) \ + + #define PREPARE_STATE \ + tmp = _mm_shuffle_epi32(state0, 0x1B); /* abcd */ \ +@@ -157,11 +147,11 @@ const UInt32 SHA256_K_ARRAY[64]; + state1 = _mm_unpackhi_epi64(state1, tmp); /* abef */ \ + + +-void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); ++void Z7_FASTCALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); + #ifdef ATTRIB_SHA + ATTRIB_SHA + #endif +-void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks) ++void Z7_FASTCALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks) + { + const __m128i mask = _mm_set_epi32(0x0c0d0e0f, 0x08090a0b, 0x04050607, 0x00010203); + __m128i tmp; +@@ -192,13 +182,13 @@ void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size + + + +- R16 ( 0, NNN, NNN, SM1, NNN, SM1, SM2, SM1, SM2 ); +- R16 ( 1, SM1, SM2, SM1, SM2, SM1, SM2, SM1, SM2 ); +- R16 ( 2, SM1, SM2, SM1, SM2, SM1, SM2, SM1, SM2 ); +- R16 ( 3, SM1, SM2, NNN, SM2, NNN, NNN, NNN, NNN ); ++ R16 ( 0, NNN, NNN, SM1, NNN, SM1, SM2, SM1, SM2 ) ++ R16 ( 1, SM1, SM2, SM1, SM2, SM1, SM2, SM1, SM2 ) ++ R16 ( 2, SM1, SM2, SM1, SM2, SM1, SM2, SM1, SM2 ) ++ R16 ( 3, SM1, SM2, NNN, SM2, NNN, NNN, NNN, NNN ) + +- ADD_EPI32(state0, state0_save); +- ADD_EPI32(state1, state1_save); ++ ADD_EPI32(state0, state0_save) ++ ADD_EPI32(state1, state1_save) + + data += 64; + } +@@ -298,11 +288,11 @@ const UInt32 SHA256_K_ARRAY[64]; + R4 ( (k)*4+3, m3, m0, m1, m2, OP6, OP7 ) \ + + +-void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); ++void Z7_FASTCALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); + #ifdef ATTRIB_SHA + ATTRIB_SHA + #endif +-void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks) ++void Z7_FASTCALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks) + { + v128 state0, state1; + +@@ -353,12 +343,12 @@ void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size + // #include + + // #include "Sha256.h" +-void MY_FAST_CALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks); ++void Z7_FASTCALL Sha256_UpdateBlocks(UInt32 state[8], const Byte *data, size_t numBlocks); + + #pragma message("Sha256 HW-SW stub was used") + +-void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); +-void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks) ++void Z7_FASTCALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks); ++void Z7_FASTCALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size_t numBlocks) + { + Sha256_UpdateBlocks(state, data, numBlocks); + /* +@@ -371,3 +361,26 @@ void MY_FAST_CALL Sha256_UpdateBlocks_HW(UInt32 state[8], const Byte *data, size + } + + #endif ++ ++ ++ ++#undef K ++#undef RND2 ++#undef RND2_0 ++#undef RND2_1 ++ ++#undef MY_rev32_for_LE ++#undef NNN ++#undef LOAD_128 ++#undef STORE_128 ++#undef LOAD_SHUFFLE ++#undef SM1 ++#undef SM2 ++ ++#undef NNN ++#undef R4 ++#undef R16 ++#undef PREPARE_STATE ++#undef USE_HW_SHA ++#undef ATTRIB_SHA ++#undef USE_VER_MIN +diff --git a/src/lzma/Sort.h b/src/lzma/Sort.h +index 2e2963a23..1817b652f 100644 +--- a/src/lzma/Sort.h ++++ b/src/lzma/Sort.h +@@ -1,8 +1,8 @@ + /* Sort.h -- Sort functions +-2014-04-05 : Igor Pavlov : Public domain */ ++2023-03-05 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_SORT_H +-#define __7Z_SORT_H ++#ifndef ZIP7_INC_SORT_H ++#define ZIP7_INC_SORT_H + + #include "7zTypes.h" + +diff --git a/src/lzma/Threads.c b/src/lzma/Threads.c +index 05bcc55ad..1a9f2bbb1 100644 +--- a/src/lzma/Threads.c ++++ b/src/lzma/Threads.c +@@ -1,5 +1,5 @@ + /* Threads.c -- multithreading library +-2021-12-21 : Igor Pavlov : Public domain */ ++2023-03-04 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -11,9 +11,9 @@ + + #include "Threads.h" + +-static WRes GetError() ++static WRes GetError(void) + { +- DWORD res = GetLastError(); ++ const DWORD res = GetLastError(); + return res ? (WRes)res : 1; + } + +@@ -173,6 +173,9 @@ WRes CriticalSection_Init(CCriticalSection *p) + Windows XP, 2003 : can raise a STATUS_NO_MEMORY exception + Windows Vista+ : no exceptions */ + #ifdef _MSC_VER ++ #ifdef __clang__ ++ #pragma GCC diagnostic ignored "-Wlanguage-extension-token" ++ #endif + __try + #endif + { +@@ -193,18 +196,26 @@ WRes CriticalSection_Init(CCriticalSection *p) + // ---------- POSIX ---------- + + #ifndef __APPLE__ +-#ifndef _7ZIP_AFFINITY_DISABLE ++#ifndef Z7_AFFINITY_DISABLE + // _GNU_SOURCE can be required for pthread_setaffinity_np() / CPU_ZERO / CPU_SET ++// clang < 3.6 : unknown warning group '-Wreserved-id-macro' ++// clang 3.6 - 12.01 : gives warning "macro name is a reserved identifier" ++// clang >= 13 : do not give warning ++#if !defined(_GNU_SOURCE) ++ #if defined(__clang__) && (__clang_major__ >= 4) && (__clang_major__ <= 12) ++ #pragma GCC diagnostic ignored "-Wreserved-id-macro" ++ #endif + #define _GNU_SOURCE +-#endif +-#endif ++#endif // !defined(_GNU_SOURCE) ++#endif // Z7_AFFINITY_DISABLE ++#endif // __APPLE__ + + #include "Threads.h" + + #include + #include + #include +-#ifdef _7ZIP_AFFINITY_SUPPORTED ++#ifdef Z7_AFFINITY_SUPPORTED + // #include + #endif + +@@ -212,15 +223,12 @@ WRes CriticalSection_Init(CCriticalSection *p) + // #include + // #define PRF(p) p + #define PRF(p) +- +-#define Print(s) PRF(printf("\n%s\n", s)) +- +-// #include ++#define Print(s) PRF(printf("\n%s\n", s);) + + WRes Thread_Create_With_CpuSet(CThread *p, THREAD_FUNC_TYPE func, LPVOID param, const CCpuSet *cpuSet) + { + // new thread in Posix probably inherits affinity from parrent thread +- Print("Thread_Create_With_CpuSet"); ++ Print("Thread_Create_With_CpuSet") + + pthread_attr_t attr; + int ret; +@@ -228,7 +236,7 @@ WRes Thread_Create_With_CpuSet(CThread *p, THREAD_FUNC_TYPE func, LPVOID param, + + p->_created = 0; + +- RINOK(pthread_attr_init(&attr)); ++ RINOK(pthread_attr_init(&attr)) + + ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + +@@ -236,7 +244,7 @@ WRes Thread_Create_With_CpuSet(CThread *p, THREAD_FUNC_TYPE func, LPVOID param, + { + if (cpuSet) + { +- #ifdef _7ZIP_AFFINITY_SUPPORTED ++ #ifdef Z7_AFFINITY_SUPPORTED + + /* + printf("\n affinity :"); +@@ -292,7 +300,7 @@ WRes Thread_Create(CThread *p, THREAD_FUNC_TYPE func, LPVOID param) + + WRes Thread_Create_With_Affinity(CThread *p, THREAD_FUNC_TYPE func, LPVOID param, CAffinityMask affinity) + { +- Print("Thread_Create_WithAffinity"); ++ Print("Thread_Create_WithAffinity") + CCpuSet cs; + unsigned i; + CpuSet_Zero(&cs); +@@ -312,7 +320,7 @@ WRes Thread_Create_With_Affinity(CThread *p, THREAD_FUNC_TYPE func, LPVOID param + + WRes Thread_Close(CThread *p) + { +- // Print("Thread_Close"); ++ // Print("Thread_Close") + int ret; + if (!p->_created) + return 0; +@@ -326,7 +334,7 @@ WRes Thread_Close(CThread *p) + + WRes Thread_Wait_Close(CThread *p) + { +- // Print("Thread_Wait_Close"); ++ // Print("Thread_Wait_Close") + void *thread_return; + int ret; + if (!p->_created) +@@ -343,8 +351,8 @@ WRes Thread_Wait_Close(CThread *p) + + static WRes Event_Create(CEvent *p, int manualReset, int signaled) + { +- RINOK(pthread_mutex_init(&p->_mutex, NULL)); +- RINOK(pthread_cond_init(&p->_cond, NULL)); ++ RINOK(pthread_mutex_init(&p->_mutex, NULL)) ++ RINOK(pthread_cond_init(&p->_cond, NULL)) + p->_manual_reset = manualReset; + p->_state = (signaled ? True7z : False7z); + p->_created = 1; +@@ -363,7 +371,7 @@ WRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *p) + + WRes Event_Set(CEvent *p) + { +- RINOK(pthread_mutex_lock(&p->_mutex)); ++ RINOK(pthread_mutex_lock(&p->_mutex)) + p->_state = True7z; + int res1 = pthread_cond_broadcast(&p->_cond); + int res2 = pthread_mutex_unlock(&p->_mutex); +@@ -372,14 +380,14 @@ WRes Event_Set(CEvent *p) + + WRes Event_Reset(CEvent *p) + { +- RINOK(pthread_mutex_lock(&p->_mutex)); ++ RINOK(pthread_mutex_lock(&p->_mutex)) + p->_state = False7z; + return pthread_mutex_unlock(&p->_mutex); + } + + WRes Event_Wait(CEvent *p) + { +- RINOK(pthread_mutex_lock(&p->_mutex)); ++ RINOK(pthread_mutex_lock(&p->_mutex)) + while (p->_state == False7z) + { + // ETIMEDOUT +@@ -411,8 +419,8 @@ WRes Semaphore_Create(CSemaphore *p, UInt32 initCount, UInt32 maxCount) + { + if (initCount > maxCount || maxCount < 1) + return EINVAL; +- RINOK(pthread_mutex_init(&p->_mutex, NULL)); +- RINOK(pthread_cond_init(&p->_cond, NULL)); ++ RINOK(pthread_mutex_init(&p->_mutex, NULL)) ++ RINOK(pthread_cond_init(&p->_cond, NULL)) + p->_count = initCount; + p->_maxCount = maxCount; + p->_created = 1; +@@ -448,7 +456,7 @@ WRes Semaphore_ReleaseN(CSemaphore *p, UInt32 releaseCount) + if (releaseCount < 1) + return EINVAL; + +- RINOK(pthread_mutex_lock(&p->_mutex)); ++ RINOK(pthread_mutex_lock(&p->_mutex)) + + newCount = p->_count + releaseCount; + if (newCount > p->_maxCount) +@@ -458,13 +466,13 @@ WRes Semaphore_ReleaseN(CSemaphore *p, UInt32 releaseCount) + p->_count = newCount; + ret = pthread_cond_broadcast(&p->_cond); + } +- RINOK(pthread_mutex_unlock(&p->_mutex)); ++ RINOK(pthread_mutex_unlock(&p->_mutex)) + return ret; + } + + WRes Semaphore_Wait(CSemaphore *p) + { +- RINOK(pthread_mutex_lock(&p->_mutex)); ++ RINOK(pthread_mutex_lock(&p->_mutex)) + while (p->_count < 1) + { + pthread_cond_wait(&p->_cond, &p->_mutex); +@@ -489,7 +497,7 @@ WRes Semaphore_Close(CSemaphore *p) + + WRes CriticalSection_Init(CCriticalSection *p) + { +- // Print("CriticalSection_Init"); ++ // Print("CriticalSection_Init") + if (!p) + return EINTR; + return pthread_mutex_init(&p->_mutex, NULL); +@@ -497,7 +505,7 @@ WRes CriticalSection_Init(CCriticalSection *p) + + void CriticalSection_Enter(CCriticalSection *p) + { +- // Print("CriticalSection_Enter"); ++ // Print("CriticalSection_Enter") + if (p) + { + // int ret = +@@ -507,7 +515,7 @@ void CriticalSection_Enter(CCriticalSection *p) + + void CriticalSection_Leave(CCriticalSection *p) + { +- // Print("CriticalSection_Leave"); ++ // Print("CriticalSection_Leave") + if (p) + { + // int ret = +@@ -517,7 +525,7 @@ void CriticalSection_Leave(CCriticalSection *p) + + void CriticalSection_Delete(CCriticalSection *p) + { +- // Print("CriticalSection_Delete"); ++ // Print("CriticalSection_Delete") + if (p) + { + // int ret = +@@ -527,14 +535,28 @@ void CriticalSection_Delete(CCriticalSection *p) + + LONG InterlockedIncrement(LONG volatile *addend) + { +- // Print("InterlockedIncrement"); ++ // Print("InterlockedIncrement") + #ifdef USE_HACK_UNSAFE_ATOMIC + LONG val = *addend + 1; + *addend = val; + return val; + #else ++ ++ #if defined(__clang__) && (__clang_major__ >= 8) ++ #pragma GCC diagnostic ignored "-Watomic-implicit-seq-cst" ++ #endif + return __sync_add_and_fetch(addend, 1); + #endif + } + + #endif // _WIN32 ++ ++WRes AutoResetEvent_OptCreate_And_Reset(CAutoResetEvent *p) ++{ ++ if (Event_IsCreated(p)) ++ return Event_Reset(p); ++ return AutoResetEvent_CreateNotSignaled(p); ++} ++ ++#undef PRF ++#undef Print +diff --git a/src/lzma/Threads.h b/src/lzma/Threads.h +index 89ecb92be..4028464a3 100644 +--- a/src/lzma/Threads.h ++++ b/src/lzma/Threads.h +@@ -1,18 +1,19 @@ + /* Threads.h -- multithreading library +-2021-12-21 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __7Z_THREADS_H +-#define __7Z_THREADS_H ++#ifndef ZIP7_INC_THREADS_H ++#define ZIP7_INC_THREADS_H + + #ifdef _WIN32 +-#include ++#include "7zWindows.h" ++ + #else + + #if defined(__linux__) + #if !defined(__APPLE__) && !defined(_AIX) && !defined(__ANDROID__) +-#ifndef _7ZIP_AFFINITY_DISABLE +-#define _7ZIP_AFFINITY_SUPPORTED +-// #pragma message(" ==== _7ZIP_AFFINITY_SUPPORTED") ++#ifndef Z7_AFFINITY_DISABLE ++#define Z7_AFFINITY_SUPPORTED ++// #pragma message(" ==== Z7_AFFINITY_SUPPORTED") + // #define _GNU_SOURCE + #endif + #endif +@@ -33,7 +34,7 @@ WRes Handle_WaitObject(HANDLE h); + + typedef HANDLE CThread; + +-#define Thread_Construct(p) { *(p) = NULL; } ++#define Thread_CONSTRUCT(p) { *(p) = NULL; } + #define Thread_WasCreated(p) (*(p) != NULL) + #define Thread_Close(p) HandlePtr_Close(p) + // #define Thread_Wait(p) Handle_WaitObject(*(p)) +@@ -52,42 +53,46 @@ typedef + #endif + THREAD_FUNC_RET_TYPE; + ++#define THREAD_FUNC_RET_ZERO 0 ++ + typedef DWORD_PTR CAffinityMask; + typedef DWORD_PTR CCpuSet; + +-#define CpuSet_Zero(p) { *(p) = 0; } +-#define CpuSet_Set(p, cpu) { *(p) |= ((DWORD_PTR)1 << (cpu)); } ++#define CpuSet_Zero(p) *(p) = (0) ++#define CpuSet_Set(p, cpu) *(p) |= ((DWORD_PTR)1 << (cpu)) + + #else // _WIN32 + +-typedef struct _CThread ++typedef struct + { + pthread_t _tid; + int _created; + } CThread; + +-#define Thread_Construct(p) { (p)->_tid = 0; (p)->_created = 0; } +-#define Thread_WasCreated(p) ((p)->_created != 0) ++#define Thread_CONSTRUCT(p) { (p)->_tid = 0; (p)->_created = 0; } ++#define Thread_WasCreated(p) ((p)->_created != 0) + WRes Thread_Close(CThread *p); + // #define Thread_Wait Thread_Wait_Close + + typedef void * THREAD_FUNC_RET_TYPE; ++#define THREAD_FUNC_RET_ZERO NULL ++ + + typedef UInt64 CAffinityMask; + +-#ifdef _7ZIP_AFFINITY_SUPPORTED ++#ifdef Z7_AFFINITY_SUPPORTED + + typedef cpu_set_t CCpuSet; +-#define CpuSet_Zero(p) CPU_ZERO(p) +-#define CpuSet_Set(p, cpu) CPU_SET(cpu, p) +-#define CpuSet_IsSet(p, cpu) CPU_ISSET(cpu, p) ++#define CpuSet_Zero(p) CPU_ZERO(p) ++#define CpuSet_Set(p, cpu) CPU_SET(cpu, p) ++#define CpuSet_IsSet(p, cpu) CPU_ISSET(cpu, p) + + #else + + typedef UInt64 CCpuSet; +-#define CpuSet_Zero(p) { *(p) = 0; } +-#define CpuSet_Set(p, cpu) { *(p) |= ((UInt64)1 << (cpu)); } +-#define CpuSet_IsSet(p, cpu) ((*(p) & ((UInt64)1 << (cpu))) != 0) ++#define CpuSet_Zero(p) *(p) = (0) ++#define CpuSet_Set(p, cpu) *(p) |= ((UInt64)1 << (cpu)) ++#define CpuSet_IsSet(p, cpu) ((*(p) & ((UInt64)1 << (cpu))) != 0) + + #endif + +@@ -95,7 +100,7 @@ typedef UInt64 CCpuSet; + #endif // _WIN32 + + +-#define THREAD_FUNC_CALL_TYPE MY_STD_CALL ++#define THREAD_FUNC_CALL_TYPE Z7_STDCALL + + #if defined(_WIN32) && defined(__GNUC__) + /* GCC compiler for x86 32-bit uses the rule: +@@ -187,6 +192,7 @@ WRes ManualResetEvent_Create(CManualResetEvent *p, int signaled); + WRes ManualResetEvent_CreateNotSignaled(CManualResetEvent *p); + WRes AutoResetEvent_Create(CAutoResetEvent *p, int signaled); + WRes AutoResetEvent_CreateNotSignaled(CAutoResetEvent *p); ++ + WRes Event_Set(CEvent *p); + WRes Event_Reset(CEvent *p); + WRes Event_Wait(CEvent *p); +@@ -227,6 +233,8 @@ LONG InterlockedIncrement(LONG volatile *addend); + + #endif // _WIN32 + ++WRes AutoResetEvent_OptCreate_And_Reset(CAutoResetEvent *p); ++ + EXTERN_C_END + + #endif +diff --git a/src/lzma/Xz.c b/src/lzma/Xz.c +index 7c53b6007..4ad071060 100644 +--- a/src/lzma/Xz.c ++++ b/src/lzma/Xz.c +@@ -1,5 +1,5 @@ + /* Xz.c - Xz +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -70,7 +70,7 @@ int XzCheck_Final(CXzCheck *p, Byte *digest) + switch (p->mode) + { + case XZ_CHECK_CRC32: +- SetUi32(digest, CRC_GET_DIGEST(p->crc)); ++ SetUi32(digest, CRC_GET_DIGEST(p->crc)) + break; + case XZ_CHECK_CRC64: + { +diff --git a/src/lzma/Xz.h b/src/lzma/Xz.h +index 849b944bf..d5001f6ca 100644 +--- a/src/lzma/Xz.h ++++ b/src/lzma/Xz.h +@@ -1,21 +1,23 @@ + /* Xz.h - Xz interface +-2021-04-01 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + +-#ifndef __XZ_H +-#define __XZ_H ++#ifndef ZIP7_INC_XZ_H ++#define ZIP7_INC_XZ_H + + #include "Sha256.h" ++#include "Delta.h" + + EXTERN_C_BEGIN + + #define XZ_ID_Subblock 1 + #define XZ_ID_Delta 3 +-#define XZ_ID_X86 4 +-#define XZ_ID_PPC 5 +-#define XZ_ID_IA64 6 +-#define XZ_ID_ARM 7 +-#define XZ_ID_ARMT 8 ++#define XZ_ID_X86 4 ++#define XZ_ID_PPC 5 ++#define XZ_ID_IA64 6 ++#define XZ_ID_ARM 7 ++#define XZ_ID_ARMT 8 + #define XZ_ID_SPARC 9 ++#define XZ_ID_ARM64 0xa + #define XZ_ID_LZMA2 0x21 + + unsigned Xz_ReadVarInt(const Byte *p, size_t maxSize, UInt64 *value); +@@ -53,7 +55,7 @@ typedef struct + #define XzBlock_HasUnsupportedFlags(p) (((p)->flags & ~(XZ_BF_NUM_FILTERS_MASK | XZ_BF_PACK_SIZE | XZ_BF_UNPACK_SIZE)) != 0) + + SRes XzBlock_Parse(CXzBlock *p, const Byte *header); +-SRes XzBlock_ReadHeader(CXzBlock *p, ISeqInStream *inStream, BoolInt *isIndex, UInt32 *headerSizeRes); ++SRes XzBlock_ReadHeader(CXzBlock *p, ISeqInStreamPtr inStream, BoolInt *isIndex, UInt32 *headerSizeRes); + + /* ---------- xz stream ---------- */ + +@@ -101,7 +103,7 @@ typedef UInt16 CXzStreamFlags; + unsigned XzFlags_GetCheckSize(CXzStreamFlags f); + + SRes Xz_ParseHeader(CXzStreamFlags *p, const Byte *buf); +-SRes Xz_ReadHeader(CXzStreamFlags *p, ISeqInStream *inStream); ++SRes Xz_ReadHeader(CXzStreamFlags *p, ISeqInStreamPtr inStream); + + typedef struct + { +@@ -112,6 +114,7 @@ typedef struct + typedef struct + { + CXzStreamFlags flags; ++ // Byte _pad[6]; + size_t numBlocks; + CXzBlockSizes *blocks; + UInt64 startOffset; +@@ -134,7 +137,7 @@ typedef struct + + void Xzs_Construct(CXzs *p); + void Xzs_Free(CXzs *p, ISzAllocPtr alloc); +-SRes Xzs_ReadBackward(CXzs *p, ILookInStream *inStream, Int64 *startOffset, ICompressProgress *progress, ISzAllocPtr alloc); ++SRes Xzs_ReadBackward(CXzs *p, ILookInStreamPtr inStream, Int64 *startOffset, ICompressProgressPtr progress, ISzAllocPtr alloc); + + UInt64 Xzs_GetNumBlocks(const CXzs *p); + UInt64 Xzs_GetUnpackSize(const CXzs *p); +@@ -160,9 +163,9 @@ typedef enum + } ECoderFinishMode; + + +-typedef struct _IStateCoder ++typedef struct + { +- void *p; ++ void *p; // state object; + void (*Free)(void *p, ISzAllocPtr alloc); + SRes (*SetProps)(void *p, const Byte *props, size_t propSize, ISzAllocPtr alloc); + void (*Init)(void *p); +@@ -174,6 +177,20 @@ typedef struct _IStateCoder + } IStateCoder; + + ++typedef struct ++{ ++ UInt32 methodId; ++ UInt32 delta; ++ UInt32 ip; ++ UInt32 X86_State; ++ Byte delta_State[DELTA_STATE_SIZE]; ++} CXzBcFilterStateBase; ++ ++typedef SizeT (*Xz_Func_BcFilterStateBase_Filter)(CXzBcFilterStateBase *p, Byte *data, SizeT size); ++ ++SRes Xz_StateCoder_Bc_SetFromMethod_Func(IStateCoder *p, UInt64 id, ++ Xz_Func_BcFilterStateBase_Filter func, ISzAllocPtr alloc); ++ + + #define MIXCODER_NUM_FILTERS_MAX 4 + +@@ -422,7 +439,7 @@ typedef struct + size_t outStep_ST; // size of output buffer for Single-Thread decoding + BoolInt ignoreErrors; // if set to 1, the decoder can ignore some errors and it skips broken parts of data. + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + unsigned numThreads; // the number of threads for Multi-Thread decoding. if (umThreads == 1) it will use Single-thread decoding + size_t inBufSize_MT; // size of small input data buffers for Multi-Thread decoding. Big number of such small buffers can be created + size_t memUseMax; // the limit of total memory usage for Multi-Thread decoding. +@@ -432,8 +449,9 @@ typedef struct + + void XzDecMtProps_Init(CXzDecMtProps *p); + +- +-typedef void * CXzDecMtHandle; ++typedef struct CXzDecMt CXzDecMt; ++typedef CXzDecMt * CXzDecMtHandle; ++// Z7_DECLARE_HANDLE(CXzDecMtHandle) + + /* + alloc : XzDecMt uses CAlignOffsetAlloc internally for addresses allocated by (alloc). +@@ -503,14 +521,14 @@ SRes XzDecMt_Decode(CXzDecMtHandle p, + const CXzDecMtProps *props, + const UInt64 *outDataSize, // NULL means undefined + int finishMode, // 0 - partial unpacking is allowed, 1 - xz stream(s) must be finished +- ISeqOutStream *outStream, ++ ISeqOutStreamPtr outStream, + // Byte *outBuf, size_t *outBufSize, +- ISeqInStream *inStream, ++ ISeqInStreamPtr inStream, + // const Byte *inData, size_t inDataSize, + CXzStatInfo *stat, // out: decoding results and statistics + int *isMT, // out: 0 means that ST (Single-Thread) version was used + // 1 means that MT (Multi-Thread) version was used +- ICompressProgress *progress); ++ ICompressProgressPtr progress); + + EXTERN_C_END + +diff --git a/src/lzma/XzCrc64.c b/src/lzma/XzCrc64.c +index b6d02cbeb..c2fad6cda 100644 +--- a/src/lzma/XzCrc64.c ++++ b/src/lzma/XzCrc64.c +@@ -1,5 +1,5 @@ + /* XzCrc64.c -- CRC64 calculation +-2017-05-23 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -12,39 +12,30 @@ + #define CRC64_NUM_TABLES 4 + #else + #define CRC64_NUM_TABLES 5 +- #define CRC_UINT64_SWAP(v) \ +- ((v >> 56) \ +- | ((v >> 40) & ((UInt64)0xFF << 8)) \ +- | ((v >> 24) & ((UInt64)0xFF << 16)) \ +- | ((v >> 8) & ((UInt64)0xFF << 24)) \ +- | ((v << 8) & ((UInt64)0xFF << 32)) \ +- | ((v << 24) & ((UInt64)0xFF << 40)) \ +- | ((v << 40) & ((UInt64)0xFF << 48)) \ +- | ((v << 56))) + +- UInt64 MY_FAST_CALL XzCrc64UpdateT1_BeT4(UInt64 v, const void *data, size_t size, const UInt64 *table); ++ UInt64 Z7_FASTCALL XzCrc64UpdateT1_BeT4(UInt64 v, const void *data, size_t size, const UInt64 *table); + #endif + + #ifndef MY_CPU_BE +- UInt64 MY_FAST_CALL XzCrc64UpdateT4(UInt64 v, const void *data, size_t size, const UInt64 *table); ++ UInt64 Z7_FASTCALL XzCrc64UpdateT4(UInt64 v, const void *data, size_t size, const UInt64 *table); + #endif + +-typedef UInt64 (MY_FAST_CALL *CRC64_FUNC)(UInt64 v, const void *data, size_t size, const UInt64 *table); ++typedef UInt64 (Z7_FASTCALL *CRC64_FUNC)(UInt64 v, const void *data, size_t size, const UInt64 *table); + + static CRC64_FUNC g_Crc64Update; + UInt64 g_Crc64Table[256 * CRC64_NUM_TABLES]; + +-UInt64 MY_FAST_CALL Crc64Update(UInt64 v, const void *data, size_t size) ++UInt64 Z7_FASTCALL Crc64Update(UInt64 v, const void *data, size_t size) + { + return g_Crc64Update(v, data, size, g_Crc64Table); + } + +-UInt64 MY_FAST_CALL Crc64Calc(const void *data, size_t size) ++UInt64 Z7_FASTCALL Crc64Calc(const void *data, size_t size) + { + return g_Crc64Update(CRC64_INIT_VAL, data, size, g_Crc64Table) ^ CRC64_INIT_VAL; + } + +-void MY_FAST_CALL Crc64GenerateTable() ++void Z7_FASTCALL Crc64GenerateTable(void) + { + UInt32 i; + for (i = 0; i < 256; i++) +@@ -57,7 +48,7 @@ void MY_FAST_CALL Crc64GenerateTable() + } + for (i = 256; i < 256 * CRC64_NUM_TABLES; i++) + { +- UInt64 r = g_Crc64Table[(size_t)i - 256]; ++ const UInt64 r = g_Crc64Table[(size_t)i - 256]; + g_Crc64Table[i] = g_Crc64Table[r & 0xFF] ^ (r >> 8); + } + +@@ -76,11 +67,14 @@ void MY_FAST_CALL Crc64GenerateTable() + { + for (i = 256 * CRC64_NUM_TABLES - 1; i >= 256; i--) + { +- UInt64 x = g_Crc64Table[(size_t)i - 256]; +- g_Crc64Table[i] = CRC_UINT64_SWAP(x); ++ const UInt64 x = g_Crc64Table[(size_t)i - 256]; ++ g_Crc64Table[i] = Z7_BSWAP64(x); + } + g_Crc64Update = XzCrc64UpdateT1_BeT4; + } + } + #endif + } ++ ++#undef kCrc64Poly ++#undef CRC64_NUM_TABLES +diff --git a/src/lzma/XzCrc64.h b/src/lzma/XzCrc64.h +index 08dbc330c..ca46869a6 100644 +--- a/src/lzma/XzCrc64.h ++++ b/src/lzma/XzCrc64.h +@@ -1,8 +1,8 @@ + /* XzCrc64.h -- CRC64 calculation +-2013-01-18 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + +-#ifndef __XZ_CRC64_H +-#define __XZ_CRC64_H ++#ifndef ZIP7_INC_XZ_CRC64_H ++#define ZIP7_INC_XZ_CRC64_H + + #include + +@@ -12,14 +12,14 @@ EXTERN_C_BEGIN + + extern UInt64 g_Crc64Table[]; + +-void MY_FAST_CALL Crc64GenerateTable(void); ++void Z7_FASTCALL Crc64GenerateTable(void); + + #define CRC64_INIT_VAL UINT64_CONST(0xFFFFFFFFFFFFFFFF) + #define CRC64_GET_DIGEST(crc) ((crc) ^ CRC64_INIT_VAL) + #define CRC64_UPDATE_BYTE(crc, b) (g_Crc64Table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) + +-UInt64 MY_FAST_CALL Crc64Update(UInt64 crc, const void *data, size_t size); +-UInt64 MY_FAST_CALL Crc64Calc(const void *data, size_t size); ++UInt64 Z7_FASTCALL Crc64Update(UInt64 crc, const void *data, size_t size); ++UInt64 Z7_FASTCALL Crc64Calc(const void *data, size_t size); + + EXTERN_C_END + +diff --git a/src/lzma/XzCrc64Opt.c b/src/lzma/XzCrc64Opt.c +index 93a9ffff5..d03374c00 100644 +--- a/src/lzma/XzCrc64Opt.c ++++ b/src/lzma/XzCrc64Opt.c +@@ -1,5 +1,5 @@ + /* XzCrc64Opt.c -- CRC64 calculation +-2021-02-09 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -9,15 +9,15 @@ + + #define CRC64_UPDATE_BYTE_2(crc, b) (table[((crc) ^ (b)) & 0xFF] ^ ((crc) >> 8)) + +-UInt64 MY_FAST_CALL XzCrc64UpdateT4(UInt64 v, const void *data, size_t size, const UInt64 *table); +-UInt64 MY_FAST_CALL XzCrc64UpdateT4(UInt64 v, const void *data, size_t size, const UInt64 *table) ++UInt64 Z7_FASTCALL XzCrc64UpdateT4(UInt64 v, const void *data, size_t size, const UInt64 *table); ++UInt64 Z7_FASTCALL XzCrc64UpdateT4(UInt64 v, const void *data, size_t size, const UInt64 *table) + { + const Byte *p = (const Byte *)data; + for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++) + v = CRC64_UPDATE_BYTE_2(v, *p); + for (; size >= 4; size -= 4, p += 4) + { +- UInt32 d = (UInt32)v ^ *(const UInt32 *)(const void *)p; ++ const UInt32 d = (UInt32)v ^ *(const UInt32 *)(const void *)p; + v = (v >> 32) + ^ (table + 0x300)[((d ) & 0xFF)] + ^ (table + 0x200)[((d >> 8) & 0xFF)] +@@ -34,29 +34,19 @@ UInt64 MY_FAST_CALL XzCrc64UpdateT4(UInt64 v, const void *data, size_t size, con + + #ifndef MY_CPU_LE + +-#define CRC_UINT64_SWAP(v) \ +- ((v >> 56) \ +- | ((v >> 40) & ((UInt64)0xFF << 8)) \ +- | ((v >> 24) & ((UInt64)0xFF << 16)) \ +- | ((v >> 8) & ((UInt64)0xFF << 24)) \ +- | ((v << 8) & ((UInt64)0xFF << 32)) \ +- | ((v << 24) & ((UInt64)0xFF << 40)) \ +- | ((v << 40) & ((UInt64)0xFF << 48)) \ +- | ((v << 56))) +- + #define CRC64_UPDATE_BYTE_2_BE(crc, b) (table[(Byte)((crc) >> 56) ^ (b)] ^ ((crc) << 8)) + +-UInt64 MY_FAST_CALL XzCrc64UpdateT1_BeT4(UInt64 v, const void *data, size_t size, const UInt64 *table); +-UInt64 MY_FAST_CALL XzCrc64UpdateT1_BeT4(UInt64 v, const void *data, size_t size, const UInt64 *table) ++UInt64 Z7_FASTCALL XzCrc64UpdateT1_BeT4(UInt64 v, const void *data, size_t size, const UInt64 *table); ++UInt64 Z7_FASTCALL XzCrc64UpdateT1_BeT4(UInt64 v, const void *data, size_t size, const UInt64 *table) + { + const Byte *p = (const Byte *)data; + table += 0x100; +- v = CRC_UINT64_SWAP(v); ++ v = Z7_BSWAP64(v); + for (; size > 0 && ((unsigned)(ptrdiff_t)p & 3) != 0; size--, p++) + v = CRC64_UPDATE_BYTE_2_BE(v, *p); + for (; size >= 4; size -= 4, p += 4) + { +- UInt32 d = (UInt32)(v >> 32) ^ *(const UInt32 *)(const void *)p; ++ const UInt32 d = (UInt32)(v >> 32) ^ *(const UInt32 *)(const void *)p; + v = (v << 32) + ^ (table + 0x000)[((d ) & 0xFF)] + ^ (table + 0x100)[((d >> 8) & 0xFF)] +@@ -65,7 +55,7 @@ UInt64 MY_FAST_CALL XzCrc64UpdateT1_BeT4(UInt64 v, const void *data, size_t size + } + for (; size > 0; size--, p++) + v = CRC64_UPDATE_BYTE_2_BE(v, *p); +- return CRC_UINT64_SWAP(v); ++ return Z7_BSWAP64(v); + } + + #endif +diff --git a/src/lzma/XzDec.c b/src/lzma/XzDec.c +index f8c299411..15b1d82b4 100644 +--- a/src/lzma/XzDec.c ++++ b/src/lzma/XzDec.c +@@ -1,5 +1,5 @@ + /* XzDec.c -- Xz Decode +-2021-09-04 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -67,7 +67,8 @@ unsigned Xz_ReadVarInt(const Byte *p, size_t maxSize, UInt64 *value) + return 0; + } + +-/* ---------- BraState ---------- */ ++ ++/* ---------- XzBcFilterState ---------- */ + + #define BRA_BUF_SIZE (1 << 14) + +@@ -76,27 +77,29 @@ typedef struct + size_t bufPos; + size_t bufConv; + size_t bufTotal; ++ Byte *buf; // must be aligned for 4 bytes ++ Xz_Func_BcFilterStateBase_Filter filter_func; ++ // int encodeMode; ++ CXzBcFilterStateBase base; ++ // Byte buf[BRA_BUF_SIZE]; ++} CXzBcFilterState; + +- int encodeMode; +- +- UInt32 methodId; +- UInt32 delta; +- UInt32 ip; +- UInt32 x86State; +- Byte deltaState[DELTA_STATE_SIZE]; + +- Byte buf[BRA_BUF_SIZE]; +-} CBraState; +- +-static void BraState_Free(void *pp, ISzAllocPtr alloc) ++static void XzBcFilterState_Free(void *pp, ISzAllocPtr alloc) + { +- ISzAlloc_Free(alloc, pp); ++ if (pp) ++ { ++ CXzBcFilterState *p = ((CXzBcFilterState *)pp); ++ ISzAlloc_Free(alloc, p->buf); ++ ISzAlloc_Free(alloc, pp); ++ } + } + +-static SRes BraState_SetProps(void *pp, const Byte *props, size_t propSize, ISzAllocPtr alloc) ++ ++static SRes XzBcFilterState_SetProps(void *pp, const Byte *props, size_t propSize, ISzAllocPtr alloc) + { +- CBraState *p = ((CBraState *)pp); +- UNUSED_VAR(alloc); ++ CXzBcFilterStateBase *p = &((CXzBcFilterState *)pp)->base; ++ UNUSED_VAR(alloc) + p->ip = 0; + if (p->methodId == XZ_ID_Delta) + { +@@ -114,6 +117,7 @@ static SRes BraState_SetProps(void *pp, const Byte *props, size_t propSize, ISzA + case XZ_ID_PPC: + case XZ_ID_ARM: + case XZ_ID_SPARC: ++ case XZ_ID_ARM64: + if ((v & 3) != 0) + return SZ_ERROR_UNSUPPORTED; + break; +@@ -134,73 +138,90 @@ static SRes BraState_SetProps(void *pp, const Byte *props, size_t propSize, ISzA + return SZ_OK; + } + +-static void BraState_Init(void *pp) ++ ++static void XzBcFilterState_Init(void *pp) + { +- CBraState *p = ((CBraState *)pp); ++ CXzBcFilterState *p = ((CXzBcFilterState *)pp); + p->bufPos = p->bufConv = p->bufTotal = 0; +- x86_Convert_Init(p->x86State); +- if (p->methodId == XZ_ID_Delta) +- Delta_Init(p->deltaState); ++ p->base.X86_State = Z7_BRANCH_CONV_ST_X86_STATE_INIT_VAL; ++ if (p->base.methodId == XZ_ID_Delta) ++ Delta_Init(p->base.delta_State); + } + + +-#define CASE_BRA_CONV(isa) case XZ_ID_ ## isa: size = isa ## _Convert(data, size, p->ip, p->encodeMode); break; +- +-static SizeT BraState_Filter(void *pp, Byte *data, SizeT size) ++static const z7_Func_BranchConv g_Funcs_BranchConv_RISC_Dec[] = ++{ ++ Z7_BRANCH_CONV_DEC(PPC), ++ Z7_BRANCH_CONV_DEC(IA64), ++ Z7_BRANCH_CONV_DEC(ARM), ++ Z7_BRANCH_CONV_DEC(ARMT), ++ Z7_BRANCH_CONV_DEC(SPARC), ++ Z7_BRANCH_CONV_DEC(ARM64) ++}; ++ ++static SizeT XzBcFilterStateBase_Filter_Dec(CXzBcFilterStateBase *p, Byte *data, SizeT size) + { +- CBraState *p = ((CBraState *)pp); + switch (p->methodId) + { + case XZ_ID_Delta: +- if (p->encodeMode) +- Delta_Encode(p->deltaState, p->delta, data, size); +- else +- Delta_Decode(p->deltaState, p->delta, data, size); ++ Delta_Decode(p->delta_State, p->delta, data, size); + break; + case XZ_ID_X86: +- size = x86_Convert(data, size, p->ip, &p->x86State, p->encodeMode); ++ size = (SizeT)(z7_BranchConvSt_X86_Dec(data, size, p->ip, &p->X86_State) - data); ++ break; ++ default: ++ if (p->methodId >= XZ_ID_PPC) ++ { ++ const UInt32 i = p->methodId - XZ_ID_PPC; ++ if (i < Z7_ARRAY_SIZE(g_Funcs_BranchConv_RISC_Dec)) ++ size = (SizeT)(g_Funcs_BranchConv_RISC_Dec[i](data, size, p->ip) - data); ++ } + break; +- CASE_BRA_CONV(PPC) +- CASE_BRA_CONV(IA64) +- CASE_BRA_CONV(ARM) +- CASE_BRA_CONV(ARMT) +- CASE_BRA_CONV(SPARC) + } + p->ip += (UInt32)size; + return size; + } + + +-static SRes BraState_Code2(void *pp, ++static SizeT XzBcFilterState_Filter(void *pp, Byte *data, SizeT size) ++{ ++ CXzBcFilterState *p = ((CXzBcFilterState *)pp); ++ return p->filter_func(&p->base, data, size); ++} ++ ++ ++static SRes XzBcFilterState_Code2(void *pp, + Byte *dest, SizeT *destLen, + const Byte *src, SizeT *srcLen, int srcWasFinished, + ECoderFinishMode finishMode, + // int *wasFinished + ECoderStatus *status) + { +- CBraState *p = ((CBraState *)pp); ++ CXzBcFilterState *p = ((CXzBcFilterState *)pp); + SizeT destRem = *destLen; + SizeT srcRem = *srcLen; +- UNUSED_VAR(finishMode); ++ UNUSED_VAR(finishMode) + + *destLen = 0; + *srcLen = 0; + // *wasFinished = False7z; + *status = CODER_STATUS_NOT_FINISHED; + +- while (destRem > 0) ++ while (destRem != 0) + { +- if (p->bufPos != p->bufConv) + { + size_t size = p->bufConv - p->bufPos; +- if (size > destRem) +- size = destRem; +- memcpy(dest, p->buf + p->bufPos, size); +- p->bufPos += size; +- *destLen += size; +- dest += size; +- destRem -= size; +- continue; ++ if (size) ++ { ++ if (size > destRem) ++ size = destRem; ++ memcpy(dest, p->buf + p->bufPos, size); ++ p->bufPos += size; ++ *destLen += size; ++ dest += size; ++ destRem -= size; ++ continue; ++ } + } + + p->bufTotal -= p->bufPos; +@@ -220,7 +241,7 @@ static SRes BraState_Code2(void *pp, + if (p->bufTotal == 0) + break; + +- p->bufConv = BraState_Filter(pp, p->buf, p->bufTotal); ++ p->bufConv = p->filter_func(&p->base, p->buf, p->bufTotal); + + if (p->bufConv == 0) + { +@@ -240,27 +261,37 @@ static SRes BraState_Code2(void *pp, + } + + +-SRes BraState_SetFromMethod(IStateCoder *p, UInt64 id, int encodeMode, ISzAllocPtr alloc); +-SRes BraState_SetFromMethod(IStateCoder *p, UInt64 id, int encodeMode, ISzAllocPtr alloc) ++#define XZ_IS_SUPPORTED_FILTER_ID(id) \ ++ ((id) >= XZ_ID_Delta && (id) <= XZ_ID_ARM64) ++ ++SRes Xz_StateCoder_Bc_SetFromMethod_Func(IStateCoder *p, UInt64 id, ++ Xz_Func_BcFilterStateBase_Filter func, ISzAllocPtr alloc) + { +- CBraState *decoder; +- if (id < XZ_ID_Delta || id > XZ_ID_SPARC) ++ CXzBcFilterState *decoder; ++ if (!XZ_IS_SUPPORTED_FILTER_ID(id)) + return SZ_ERROR_UNSUPPORTED; +- decoder = (CBraState *)p->p; ++ decoder = (CXzBcFilterState *)p->p; + if (!decoder) + { +- decoder = (CBraState *)ISzAlloc_Alloc(alloc, sizeof(CBraState)); ++ decoder = (CXzBcFilterState *)ISzAlloc_Alloc(alloc, sizeof(CXzBcFilterState)); + if (!decoder) + return SZ_ERROR_MEM; ++ decoder->buf = ISzAlloc_Alloc(alloc, BRA_BUF_SIZE); ++ if (!decoder->buf) ++ { ++ ISzAlloc_Free(alloc, decoder); ++ return SZ_ERROR_MEM; ++ } + p->p = decoder; +- p->Free = BraState_Free; +- p->SetProps = BraState_SetProps; +- p->Init = BraState_Init; +- p->Code2 = BraState_Code2; +- p->Filter = BraState_Filter; ++ p->Free = XzBcFilterState_Free; ++ p->SetProps = XzBcFilterState_SetProps; ++ p->Init = XzBcFilterState_Init; ++ p->Code2 = XzBcFilterState_Code2; ++ p->Filter = XzBcFilterState_Filter; ++ decoder->filter_func = func; + } +- decoder->methodId = (UInt32)id; +- decoder->encodeMode = encodeMode; ++ decoder->base.methodId = (UInt32)id; ++ // decoder->encodeMode = encodeMode; + return SZ_OK; + } + +@@ -279,9 +310,9 @@ static void SbState_Free(void *pp, ISzAllocPtr alloc) + + static SRes SbState_SetProps(void *pp, const Byte *props, size_t propSize, ISzAllocPtr alloc) + { +- UNUSED_VAR(pp); +- UNUSED_VAR(props); +- UNUSED_VAR(alloc); ++ UNUSED_VAR(pp) ++ UNUSED_VAR(props) ++ UNUSED_VAR(alloc) + return (propSize == 0) ? SZ_OK : SZ_ERROR_UNSUPPORTED; + } + +@@ -297,7 +328,7 @@ static SRes SbState_Code2(void *pp, Byte *dest, SizeT *destLen, const Byte *src, + { + CSbDec *p = (CSbDec *)pp; + SRes res; +- UNUSED_VAR(srcWasFinished); ++ UNUSED_VAR(srcWasFinished) + p->dest = dest; + p->destLen = *destLen; + p->src = src; +@@ -389,7 +420,7 @@ static SRes Lzma2State_Code2(void *pp, Byte *dest, SizeT *destLen, const Byte *s + ELzmaStatus status2; + /* ELzmaFinishMode fm = (finishMode == LZMA_FINISH_ANY) ? LZMA_FINISH_ANY : LZMA_FINISH_END; */ + SRes res; +- UNUSED_VAR(srcWasFinished); ++ UNUSED_VAR(srcWasFinished) + if (spec->outBufMode) + { + SizeT dicPos = spec->decoder.decoder.dicPos; +@@ -420,7 +451,7 @@ static SRes Lzma2State_SetFromMethod(IStateCoder *p, Byte *outBuf, size_t outBuf + p->Init = Lzma2State_Init; + p->Code2 = Lzma2State_Code2; + p->Filter = NULL; +- Lzma2Dec_Construct(&spec->decoder); ++ Lzma2Dec_CONSTRUCT(&spec->decoder) + } + spec->outBufMode = False7z; + if (outBuf) +@@ -519,7 +550,8 @@ static SRes MixCoder_SetFromMethod(CMixCoder *p, unsigned coderIndex, UInt64 met + } + if (coderIndex == 0) + return SZ_ERROR_UNSUPPORTED; +- return BraState_SetFromMethod(sc, methodId, 0, p->alloc); ++ return Xz_StateCoder_Bc_SetFromMethod_Func(sc, methodId, ++ XzBcFilterStateBase_Filter_Dec, p->alloc); + } + + +@@ -568,7 +600,7 @@ static SRes MixCoder_Code(CMixCoder *p, + SizeT destLen2, srcLen2; + int wasFinished; + +- PRF_STR("------- MixCoder Single ----------"); ++ PRF_STR("------- MixCoder Single ----------") + + srcLen2 = srcLenOrig; + destLen2 = destLenOrig; +@@ -615,14 +647,14 @@ static SRes MixCoder_Code(CMixCoder *p, + processed = coder->Filter(coder->p, p->outBuf, processed); + if (wasFinished || (destFinish && p->outWritten == destLenOrig)) + processed = p->outWritten; +- PRF_STR_INT("filter", i); ++ PRF_STR_INT("filter", i) + } + *destLen = processed; + } + return res; + } + +- PRF_STR("standard mix"); ++ PRF_STR("standard mix") + + if (p->numCoders != 1) + { +@@ -779,7 +811,7 @@ static BoolInt Xz_CheckFooter(CXzStreamFlags flags, UInt64 indexSize, const Byte + + static BoolInt XzBlock_AreSupportedFilters(const CXzBlock *p) + { +- unsigned numFilters = XzBlock_GetNumFilters(p) - 1; ++ const unsigned numFilters = XzBlock_GetNumFilters(p) - 1; + unsigned i; + { + const CXzFilter *f = &p->filters[numFilters]; +@@ -795,8 +827,7 @@ static BoolInt XzBlock_AreSupportedFilters(const CXzBlock *p) + if (f->propsSize != 1) + return False7z; + } +- else if (f->id < XZ_ID_Delta +- || f->id > XZ_ID_SPARC ++ else if (!XZ_IS_SUPPORTED_FILTER_ID(f->id) + || (f->propsSize != 0 && f->propsSize != 4)) + return False7z; + } +@@ -821,22 +852,24 @@ SRes XzBlock_Parse(CXzBlock *p, const Byte *header) + p->packSize = (UInt64)(Int64)-1; + if (XzBlock_HasPackSize(p)) + { +- READ_VARINT_AND_CHECK(header, pos, headerSize, &p->packSize); ++ READ_VARINT_AND_CHECK(header, pos, headerSize, &p->packSize) + if (p->packSize == 0 || p->packSize + headerSize >= (UInt64)1 << 63) + return SZ_ERROR_ARCHIVE; + } + + p->unpackSize = (UInt64)(Int64)-1; + if (XzBlock_HasUnpackSize(p)) +- READ_VARINT_AND_CHECK(header, pos, headerSize, &p->unpackSize); ++ { ++ READ_VARINT_AND_CHECK(header, pos, headerSize, &p->unpackSize) ++ } + + numFilters = XzBlock_GetNumFilters(p); + for (i = 0; i < numFilters; i++) + { + CXzFilter *filter = p->filters + i; + UInt64 size; +- READ_VARINT_AND_CHECK(header, pos, headerSize, &filter->id); +- READ_VARINT_AND_CHECK(header, pos, headerSize, &size); ++ READ_VARINT_AND_CHECK(header, pos, headerSize, &filter->id) ++ READ_VARINT_AND_CHECK(header, pos, headerSize, &size) + if (size > headerSize - pos || size > XZ_FILTER_PROPS_SIZE_MAX) + return SZ_ERROR_ARCHIVE; + filter->propsSize = (UInt32)size; +@@ -894,20 +927,20 @@ static SRes XzDecMix_Init(CMixCoder *p, const CXzBlock *block, Byte *outBuf, siz + MixCoder_Free(p); + for (i = 0; i < numFilters; i++) + { +- RINOK(MixCoder_SetFromMethod(p, i, block->filters[numFilters - 1 - i].id, outBuf, outBufSize)); ++ RINOK(MixCoder_SetFromMethod(p, i, block->filters[numFilters - 1 - i].id, outBuf, outBufSize)) + } + p->numCoders = numFilters; + } + else + { +- RINOK(MixCoder_ResetFromMethod(p, 0, block->filters[numFilters - 1].id, outBuf, outBufSize)); ++ RINOK(MixCoder_ResetFromMethod(p, 0, block->filters[numFilters - 1].id, outBuf, outBufSize)) + } + + for (i = 0; i < numFilters; i++) + { + const CXzFilter *f = &block->filters[numFilters - 1 - i]; + IStateCoder *sc = &p->coders[i]; +- RINOK(sc->SetProps(sc->p, f->props, f->propsSize, p->alloc)); ++ RINOK(sc->SetProps(sc->p, f->props, f->propsSize, p->alloc)) + } + + MixCoder_Init(p); +@@ -1054,14 +1087,14 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen, + (*destLen) += destLen2; + p->unpackSize += destLen2; + +- RINOK(res); ++ RINOK(res) + + if (*status != CODER_STATUS_FINISHED_WITH_MARK) + { + if (p->block.packSize == p->packSize + && *status == CODER_STATUS_NEEDS_MORE_INPUT) + { +- PRF_STR("CODER_STATUS_NEEDS_MORE_INPUT"); ++ PRF_STR("CODER_STATUS_NEEDS_MORE_INPUT") + *status = CODER_STATUS_NOT_SPECIFIED; + return SZ_ERROR_DATA; + } +@@ -1078,7 +1111,7 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen, + if ((p->block.packSize != (UInt64)(Int64)-1 && p->block.packSize != p->packSize) + || (p->block.unpackSize != (UInt64)(Int64)-1 && p->block.unpackSize != p->unpackSize)) + { +- PRF_STR("ERROR: block.size mismatch"); ++ PRF_STR("ERROR: block.size mismatch") + return SZ_ERROR_DATA; + } + } +@@ -1109,7 +1142,7 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen, + } + else + { +- RINOK(Xz_ParseHeader(&p->streamFlags, p->buf)); ++ RINOK(Xz_ParseHeader(&p->streamFlags, p->buf)) + p->numStartedStreams++; + p->indexSize = 0; + p->numBlocks = 0; +@@ -1155,7 +1188,7 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen, + } + else + { +- RINOK(XzBlock_Parse(&p->block, p->buf)); ++ RINOK(XzBlock_Parse(&p->block, p->buf)) + if (!XzBlock_AreSupportedFilters(&p->block)) + return SZ_ERROR_UNSUPPORTED; + p->numTotalBlocks++; +@@ -1168,7 +1201,7 @@ SRes XzUnpacker_Code(CXzUnpacker *p, Byte *dest, SizeT *destLen, + p->headerParsedOk = True7z; + return SZ_OK; + } +- RINOK(XzDecMix_Init(&p->decoder, &p->block, p->outBuf, p->outBufSize)); ++ RINOK(XzDecMix_Init(&p->decoder, &p->block, p->outBuf, p->outBufSize)) + } + break; + } +@@ -1389,7 +1422,7 @@ UInt64 XzUnpacker_GetExtraSize(const CXzUnpacker *p) + + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + #include "MtDec.h" + #endif + +@@ -1400,7 +1433,7 @@ void XzDecMtProps_Init(CXzDecMtProps *p) + p->outStep_ST = 1 << 20; + p->ignoreErrors = False7z; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + p->numThreads = 1; + p->inBufSize_MT = 1 << 18; + p->memUseMax = sizeof(size_t) << 28; +@@ -1409,7 +1442,7 @@ void XzDecMtProps_Init(CXzDecMtProps *p) + + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + /* ---------- CXzDecMtThread ---------- */ + +@@ -1448,7 +1481,7 @@ typedef struct + + /* ---------- CXzDecMt ---------- */ + +-typedef struct ++struct CXzDecMt + { + CAlignOffsetAlloc alignOffsetAlloc; + ISzAllocPtr allocMid; +@@ -1456,9 +1489,9 @@ typedef struct + CXzDecMtProps props; + size_t unpackBlockMaxSize; + +- ISeqInStream *inStream; +- ISeqOutStream *outStream; +- ICompressProgress *progress; ++ ISeqInStreamPtr inStream; ++ ISeqOutStreamPtr outStream; ++ ICompressProgressPtr progress; + + BoolInt finishMode; + BoolInt outSize_Defined; +@@ -1481,7 +1514,7 @@ typedef struct + ECoderStatus status; + SRes codeRes; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + BoolInt mainDecoderWasCalled; + // int statErrorDefined; + int finishedDecoderIndex; +@@ -1504,10 +1537,9 @@ typedef struct + + BoolInt mtc_WasConstructed; + CMtDec mtc; +- CXzDecMtThread coders[MTDEC__THREADS_MAX]; ++ CXzDecMtThread coders[MTDEC_THREADS_MAX]; + #endif +- +-} CXzDecMt; ++}; + + + +@@ -1535,11 +1567,11 @@ CXzDecMtHandle XzDecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid) + + XzDecMtProps_Init(&p->props); + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + p->mtc_WasConstructed = False7z; + { + unsigned i; +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + { + CXzDecMtThread *coder = &p->coders[i]; + coder->dec_created = False7z; +@@ -1549,16 +1581,16 @@ CXzDecMtHandle XzDecMt_Create(ISzAllocPtr alloc, ISzAllocPtr allocMid) + } + #endif + +- return p; ++ return (CXzDecMtHandle)p; + } + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + static void XzDecMt_FreeOutBufs(CXzDecMt *p) + { + unsigned i; +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + { + CXzDecMtThread *coder = &p->coders[i]; + if (coder->outBuf) +@@ -1595,13 +1627,15 @@ static void XzDecMt_FreeSt(CXzDecMt *p) + } + + +-void XzDecMt_Destroy(CXzDecMtHandle pp) ++// #define GET_CXzDecMt_p CXzDecMt *p = pp; ++ ++void XzDecMt_Destroy(CXzDecMtHandle p) + { +- CXzDecMt *p = (CXzDecMt *)pp; ++ // GET_CXzDecMt_p + + XzDecMt_FreeSt(p); + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + + if (p->mtc_WasConstructed) + { +@@ -1610,7 +1644,7 @@ void XzDecMt_Destroy(CXzDecMtHandle pp) + } + { + unsigned i; +- for (i = 0; i < MTDEC__THREADS_MAX; i++) ++ for (i = 0; i < MTDEC_THREADS_MAX; i++) + { + CXzDecMtThread *t = &p->coders[i]; + if (t->dec_created) +@@ -1625,12 +1659,12 @@ void XzDecMt_Destroy(CXzDecMtHandle pp) + + #endif + +- ISzAlloc_Free(p->alignOffsetAlloc.baseAlloc, pp); ++ ISzAlloc_Free(p->alignOffsetAlloc.baseAlloc, p); + } + + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + static void XzDecMt_Callback_Parse(void *obj, unsigned coderIndex, CMtDecCallbackInfo *cc) + { +@@ -1696,7 +1730,7 @@ static void XzDecMt_Callback_Parse(void *obj, unsigned coderIndex, CMtDecCallbac + coder->dec.parseMode = True7z; + coder->dec.headerParsedOk = False7z; + +- PRF_STR_INT("Parse", srcSize2); ++ PRF_STR_INT("Parse", srcSize2) + + res = XzUnpacker_Code(&coder->dec, + NULL, &destSize, +@@ -2071,7 +2105,7 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex, + } + data += cur; + size -= cur; +- // PRF_STR_INT("Written size =", size); ++ // PRF_STR_INT("Written size =", size) + if (size == 0) + break; + res = MtProgress_ProgressAdd(&me->mtc.mtProgress, 0, 0); +@@ -2087,7 +2121,7 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex, + return res; + } + +- RINOK(res); ++ RINOK(res) + + if (coder->inPreSize != coder->inCodeSize + || coder->blockPackTotal != coder->inCodeSize) +@@ -2106,13 +2140,13 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex, + // (coder->state == MTDEC_PARSE_END) means that there are no other working threads + // so we can use mtc variables without lock + +- PRF_STR_INT("Write MTDEC_PARSE_END", me->mtc.inProcessed); ++ PRF_STR_INT("Write MTDEC_PARSE_END", me->mtc.inProcessed) + + me->mtc.mtProgress.totalInSize = me->mtc.inProcessed; + { + CXzUnpacker *dec = &me->dec; + +- PRF_STR_INT("PostSingle", srcSize); ++ PRF_STR_INT("PostSingle", srcSize) + + { + size_t srcProcessed = srcSize; +@@ -2186,7 +2220,7 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex, + me->mtc.crossEnd = srcSize; + } + +- PRF_STR_INT("XZ_STATE_STREAM_HEADER crossEnd = ", (unsigned)me->mtc.crossEnd); ++ PRF_STR_INT("XZ_STATE_STREAM_HEADER crossEnd = ", (unsigned)me->mtc.crossEnd) + + return SZ_OK; + } +@@ -2277,7 +2311,7 @@ static SRes XzDecMt_Callback_Write(void *pp, unsigned coderIndex, + UInt64 inDelta = me->mtc.inProcessed - inProgressPrev; + if (inDelta >= (1 << 22)) + { +- RINOK(MtProgress_Progress_ST(&me->mtc.mtProgress)); ++ RINOK(MtProgress_Progress_ST(&me->mtc.mtProgress)) + inProgressPrev = me->mtc.inProcessed; + } + } +@@ -2331,7 +2365,7 @@ void XzStatInfo_Clear(CXzStatInfo *p) + */ + + static SRes XzDecMt_Decode_ST(CXzDecMt *p +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + , BoolInt tMode + #endif + , CXzStatInfo *stat) +@@ -2343,7 +2377,7 @@ static SRes XzDecMt_Decode_ST(CXzDecMt *p + + CXzUnpacker *dec; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (tMode) + { + XzDecMt_FreeOutBufs(p); +@@ -2400,7 +2434,7 @@ static SRes XzDecMt_Decode_ST(CXzDecMt *p + + if (inPos == inLim) + { +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (tMode) + { + inData = MtDec_Read(&p->mtc, &inLim); +@@ -2577,19 +2611,19 @@ static void XzStatInfo_SetStat(const CXzUnpacker *dec, + + + +-SRes XzDecMt_Decode(CXzDecMtHandle pp, ++SRes XzDecMt_Decode(CXzDecMtHandle p, + const CXzDecMtProps *props, + const UInt64 *outDataSize, int finishMode, +- ISeqOutStream *outStream, ++ ISeqOutStreamPtr outStream, + // Byte *outBuf, size_t *outBufSize, +- ISeqInStream *inStream, ++ ISeqInStreamPtr inStream, + // const Byte *inData, size_t inDataSize, + CXzStatInfo *stat, + int *isMT, +- ICompressProgress *progress) ++ ICompressProgressPtr progress) + { +- CXzDecMt *p = (CXzDecMt *)pp; +- #ifndef _7ZIP_ST ++ // GET_CXzDecMt_p ++ #ifndef Z7_ST + BoolInt tMode; + #endif + +@@ -2640,7 +2674,7 @@ SRes XzDecMt_Decode(CXzDecMtHandle pp, + */ + + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + + p->isBlockHeaderState_Parse = False7z; + p->isBlockHeaderState_Write = False7z; +@@ -2782,7 +2816,7 @@ SRes XzDecMt_Decode(CXzDecMtHandle pp, + return res; + } + +- PRF_STR("----- decoding ST -----"); ++ PRF_STR("----- decoding ST -----") + } + + #endif +@@ -2792,13 +2826,13 @@ SRes XzDecMt_Decode(CXzDecMtHandle pp, + + { + SRes res = XzDecMt_Decode_ST(p +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + , tMode + #endif + , stat + ); + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + // we must set error code from MT decoding at first + if (p->mainErrorCode != SZ_OK) + stat->DecodeRes = p->mainErrorCode; +@@ -2835,3 +2869,7 @@ SRes XzDecMt_Decode(CXzDecMtHandle pp, + return res; + } + } ++ ++#undef PRF ++#undef PRF_STR ++#undef PRF_STR_INT_2 +diff --git a/src/lzma/XzEnc.c b/src/lzma/XzEnc.c +index 4c77ccaef..a715609d8 100644 +--- a/src/lzma/XzEnc.c ++++ b/src/lzma/XzEnc.c +@@ -1,5 +1,5 @@ + /* XzEnc.c -- Xz Encode +-2021-04-01 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -18,13 +18,13 @@ + + #include "XzEnc.h" + +-// #define _7ZIP_ST ++// #define Z7_ST + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + #include "MtCoder.h" + #else +-#define MTCODER__THREADS_MAX 1 +-#define MTCODER__BLOCKS_MAX 1 ++#define MTCODER_THREADS_MAX 1 ++#define MTCODER_BLOCKS_MAX 1 + #endif + + #define XZ_GET_PAD_SIZE(dataSize) ((4 - ((unsigned)(dataSize) & 3)) & 3) +@@ -35,25 +35,25 @@ + #define XZ_GET_ESTIMATED_BLOCK_TOTAL_PACK_SIZE(unpackSize) (XZ_BLOCK_HEADER_SIZE_MAX + XZ_GET_MAX_BLOCK_PACK_SIZE(unpackSize)) + + +-#define XzBlock_ClearFlags(p) (p)->flags = 0; +-#define XzBlock_SetNumFilters(p, n) (p)->flags = (Byte)((p)->flags | ((n) - 1)); ++// #define XzBlock_ClearFlags(p) (p)->flags = 0; ++#define XzBlock_ClearFlags_SetNumFilters(p, n) (p)->flags = (Byte)((n) - 1); + #define XzBlock_SetHasPackSize(p) (p)->flags |= XZ_BF_PACK_SIZE; + #define XzBlock_SetHasUnpackSize(p) (p)->flags |= XZ_BF_UNPACK_SIZE; + + +-static SRes WriteBytes(ISeqOutStream *s, const void *buf, size_t size) ++static SRes WriteBytes(ISeqOutStreamPtr s, const void *buf, size_t size) + { + return (ISeqOutStream_Write(s, buf, size) == size) ? SZ_OK : SZ_ERROR_WRITE; + } + +-static SRes WriteBytesUpdateCrc(ISeqOutStream *s, const void *buf, size_t size, UInt32 *crc) ++static SRes WriteBytes_UpdateCrc(ISeqOutStreamPtr s, const void *buf, size_t size, UInt32 *crc) + { + *crc = CrcUpdate(*crc, buf, size); + return WriteBytes(s, buf, size); + } + + +-static SRes Xz_WriteHeader(CXzStreamFlags f, ISeqOutStream *s) ++static SRes Xz_WriteHeader(CXzStreamFlags f, ISeqOutStreamPtr s) + { + UInt32 crc; + Byte header[XZ_STREAM_HEADER_SIZE]; +@@ -61,12 +61,12 @@ static SRes Xz_WriteHeader(CXzStreamFlags f, ISeqOutStream *s) + header[XZ_SIG_SIZE] = (Byte)(f >> 8); + header[XZ_SIG_SIZE + 1] = (Byte)(f & 0xFF); + crc = CrcCalc(header + XZ_SIG_SIZE, XZ_STREAM_FLAGS_SIZE); +- SetUi32(header + XZ_SIG_SIZE + XZ_STREAM_FLAGS_SIZE, crc); ++ SetUi32(header + XZ_SIG_SIZE + XZ_STREAM_FLAGS_SIZE, crc) + return WriteBytes(s, header, XZ_STREAM_HEADER_SIZE); + } + + +-static SRes XzBlock_WriteHeader(const CXzBlock *p, ISeqOutStream *s) ++static SRes XzBlock_WriteHeader(const CXzBlock *p, ISeqOutStreamPtr s) + { + Byte header[XZ_BLOCK_HEADER_SIZE_MAX]; + +@@ -91,7 +91,7 @@ static SRes XzBlock_WriteHeader(const CXzBlock *p, ISeqOutStream *s) + header[pos++] = 0; + + header[0] = (Byte)(pos >> 2); +- SetUi32(header + pos, CrcCalc(header, pos)); ++ SetUi32(header + pos, CrcCalc(header, pos)) + return WriteBytes(s, header, pos + 4); + } + +@@ -182,7 +182,7 @@ static SRes XzEncIndex_AddIndexRecord(CXzEncIndex *p, UInt64 unpackSize, UInt64 + size_t newSize = p->allocated * 2 + 16 * 2; + if (newSize < p->size + pos) + return SZ_ERROR_MEM; +- RINOK(XzEncIndex_ReAlloc(p, newSize, alloc)); ++ RINOK(XzEncIndex_ReAlloc(p, newSize, alloc)) + } + memcpy(p->blocks + p->size, buf, pos); + p->size += pos; +@@ -191,7 +191,7 @@ static SRes XzEncIndex_AddIndexRecord(CXzEncIndex *p, UInt64 unpackSize, UInt64 + } + + +-static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, ISeqOutStream *s) ++static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, ISeqOutStreamPtr s) + { + Byte buf[32]; + UInt64 globalPos; +@@ -200,8 +200,8 @@ static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, I + + globalPos = pos; + buf[0] = 0; +- RINOK(WriteBytesUpdateCrc(s, buf, pos, &crc)); +- RINOK(WriteBytesUpdateCrc(s, p->blocks, p->size, &crc)); ++ RINOK(WriteBytes_UpdateCrc(s, buf, pos, &crc)) ++ RINOK(WriteBytes_UpdateCrc(s, p->blocks, p->size, &crc)) + globalPos += p->size; + + pos = XZ_GET_PAD_SIZE(globalPos); +@@ -211,12 +211,12 @@ static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, I + globalPos += pos; + + crc = CrcUpdate(crc, buf + 4 - pos, pos); +- SetUi32(buf + 4, CRC_GET_DIGEST(crc)); ++ SetUi32(buf + 4, CRC_GET_DIGEST(crc)) + +- SetUi32(buf + 8 + 4, (UInt32)(globalPos >> 2)); ++ SetUi32(buf + 8 + 4, (UInt32)(globalPos >> 2)) + buf[8 + 8] = (Byte)(flags >> 8); + buf[8 + 9] = (Byte)(flags & 0xFF); +- SetUi32(buf + 8, CrcCalc(buf + 8 + 4, 6)); ++ SetUi32(buf + 8, CrcCalc(buf + 8 + 4, 6)) + buf[8 + 10] = XZ_FOOTER_SIG_0; + buf[8 + 11] = XZ_FOOTER_SIG_1; + +@@ -230,7 +230,7 @@ static SRes XzEncIndex_WriteFooter(const CXzEncIndex *p, CXzStreamFlags flags, I + typedef struct + { + ISeqInStream vt; +- ISeqInStream *realStream; ++ ISeqInStreamPtr realStream; + const Byte *data; + UInt64 limit; + UInt64 processed; +@@ -251,9 +251,9 @@ static void SeqCheckInStream_GetDigest(CSeqCheckInStream *p, Byte *digest) + XzCheck_Final(&p->check, digest); + } + +-static SRes SeqCheckInStream_Read(const ISeqInStream *pp, void *data, size_t *size) ++static SRes SeqCheckInStream_Read(ISeqInStreamPtr pp, void *data, size_t *size) + { +- CSeqCheckInStream *p = CONTAINER_FROM_VTBL(pp, CSeqCheckInStream, vt); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeqCheckInStream) + size_t size2 = *size; + SRes res = SZ_OK; + +@@ -285,15 +285,15 @@ static SRes SeqCheckInStream_Read(const ISeqInStream *pp, void *data, size_t *si + typedef struct + { + ISeqOutStream vt; +- ISeqOutStream *realStream; ++ ISeqOutStreamPtr realStream; + Byte *outBuf; + size_t outBufLimit; + UInt64 processed; + } CSeqSizeOutStream; + +-static size_t SeqSizeOutStream_Write(const ISeqOutStream *pp, const void *data, size_t size) ++static size_t SeqSizeOutStream_Write(ISeqOutStreamPtr pp, const void *data, size_t size) + { +- CSeqSizeOutStream *p = CONTAINER_FROM_VTBL(pp, CSeqSizeOutStream, vt); ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeqSizeOutStream) + if (p->realStream) + size = ISeqOutStream_Write(p->realStream, data, size); + else +@@ -313,8 +313,8 @@ static size_t SeqSizeOutStream_Write(const ISeqOutStream *pp, const void *data, + + typedef struct + { +- ISeqInStream p; +- ISeqInStream *realStream; ++ ISeqInStream vt; ++ ISeqInStreamPtr realStream; + IStateCoder StateCoder; + Byte *buf; + size_t curPos; +@@ -323,7 +323,39 @@ typedef struct + } CSeqInFilter; + + +-SRes BraState_SetFromMethod(IStateCoder *p, UInt64 id, int encodeMode, ISzAllocPtr alloc); ++static const z7_Func_BranchConv g_Funcs_BranchConv_RISC_Enc[] = ++{ ++ Z7_BRANCH_CONV_ENC(PPC), ++ Z7_BRANCH_CONV_ENC(IA64), ++ Z7_BRANCH_CONV_ENC(ARM), ++ Z7_BRANCH_CONV_ENC(ARMT), ++ Z7_BRANCH_CONV_ENC(SPARC), ++ Z7_BRANCH_CONV_ENC(ARM64) ++}; ++ ++static SizeT XzBcFilterStateBase_Filter_Enc(CXzBcFilterStateBase *p, Byte *data, SizeT size) ++{ ++ switch (p->methodId) ++ { ++ case XZ_ID_Delta: ++ Delta_Encode(p->delta_State, p->delta, data, size); ++ break; ++ case XZ_ID_X86: ++ size = (SizeT)(z7_BranchConvSt_X86_Enc(data, size, p->ip, &p->X86_State) - data); ++ break; ++ default: ++ if (p->methodId >= XZ_ID_PPC) ++ { ++ const UInt32 i = p->methodId - XZ_ID_PPC; ++ if (i < Z7_ARRAY_SIZE(g_Funcs_BranchConv_RISC_Enc)) ++ size = (SizeT)(g_Funcs_BranchConv_RISC_Enc[i](data, size, p->ip) - data); ++ } ++ break; ++ } ++ p->ip += (UInt32)size; ++ return size; ++} ++ + + static SRes SeqInFilter_Init(CSeqInFilter *p, const CXzFilter *props, ISzAllocPtr alloc) + { +@@ -335,17 +367,17 @@ static SRes SeqInFilter_Init(CSeqInFilter *p, const CXzFilter *props, ISzAllocPt + } + p->curPos = p->endPos = 0; + p->srcWasFinished = 0; +- RINOK(BraState_SetFromMethod(&p->StateCoder, props->id, 1, alloc)); +- RINOK(p->StateCoder.SetProps(p->StateCoder.p, props->props, props->propsSize, alloc)); ++ RINOK(Xz_StateCoder_Bc_SetFromMethod_Func(&p->StateCoder, props->id, XzBcFilterStateBase_Filter_Enc, alloc)) ++ RINOK(p->StateCoder.SetProps(p->StateCoder.p, props->props, props->propsSize, alloc)) + p->StateCoder.Init(p->StateCoder.p); + return SZ_OK; + } + + +-static SRes SeqInFilter_Read(const ISeqInStream *pp, void *data, size_t *size) ++static SRes SeqInFilter_Read(ISeqInStreamPtr pp, void *data, size_t *size) + { +- CSeqInFilter *p = CONTAINER_FROM_VTBL(pp, CSeqInFilter, p); +- size_t sizeOriginal = *size; ++ Z7_CONTAINER_FROM_VTBL_TO_DECL_VAR_pp_vt_p(CSeqInFilter) ++ const size_t sizeOriginal = *size; + if (sizeOriginal == 0) + return SZ_OK; + *size = 0; +@@ -356,7 +388,7 @@ static SRes SeqInFilter_Read(const ISeqInStream *pp, void *data, size_t *size) + { + p->curPos = 0; + p->endPos = FILTER_BUF_SIZE; +- RINOK(ISeqInStream_Read(p->realStream, p->buf, &p->endPos)); ++ RINOK(ISeqInStream_Read(p->realStream, p->buf, &p->endPos)) + if (p->endPos == 0) + p->srcWasFinished = 1; + } +@@ -381,7 +413,7 @@ static void SeqInFilter_Construct(CSeqInFilter *p) + { + p->buf = NULL; + p->StateCoder.p = NULL; +- p->p.Read = SeqInFilter_Read; ++ p->vt.Read = SeqInFilter_Read; + } + + static void SeqInFilter_Free(CSeqInFilter *p, ISzAllocPtr alloc) +@@ -406,13 +438,13 @@ static void SeqInFilter_Free(CSeqInFilter *p, ISzAllocPtr alloc) + typedef struct + { + ISeqInStream vt; +- ISeqInStream *inStream; ++ ISeqInStreamPtr inStream; + CSbEnc enc; + } CSbEncInStream; + +-static SRes SbEncInStream_Read(const ISeqInStream *pp, void *data, size_t *size) ++static SRes SbEncInStream_Read(ISeqInStreamPtr pp, void *data, size_t *size) + { +- CSbEncInStream *p = CONTAINER_FROM_VTBL(pp, CSbEncInStream, vt); ++ CSbEncInStream *p = Z7_CONTAINER_FROM_VTBL(pp, CSbEncInStream, vt); + size_t sizeOriginal = *size; + if (sizeOriginal == 0) + return SZ_OK; +@@ -422,7 +454,7 @@ static SRes SbEncInStream_Read(const ISeqInStream *pp, void *data, size_t *size) + if (p->enc.needRead && !p->enc.readWasFinished) + { + size_t processed = p->enc.needReadSizeMax; +- RINOK(p->inStream->Read(p->inStream, p->enc.buf + p->enc.readPos, &processed)); ++ RINOK(p->inStream->Read(p->inStream, p->enc.buf + p->enc.readPos, &processed)) + p->enc.readPos += processed; + if (processed == 0) + { +@@ -433,7 +465,7 @@ static SRes SbEncInStream_Read(const ISeqInStream *pp, void *data, size_t *size) + } + + *size = sizeOriginal; +- RINOK(SbEnc_Read(&p->enc, data, size)); ++ RINOK(SbEnc_Read(&p->enc, data, size)) + if (*size != 0 || !p->enc.needRead) + return SZ_OK; + } +@@ -473,7 +505,7 @@ void XzFilterProps_Init(CXzFilterProps *p) + void XzProps_Init(CXzProps *p) + { + p->checkId = XZ_CHECK_CRC32; +- p->blockSize = XZ_PROPS__BLOCK_SIZE__AUTO; ++ p->blockSize = XZ_PROPS_BLOCK_SIZE_AUTO; + p->numBlockThreads_Reduced = -1; + p->numBlockThreads_Max = -1; + p->numTotalThreads = -1; +@@ -502,8 +534,8 @@ static void XzEncProps_Normalize_Fixed(CXzProps *p) + t2 = p->numBlockThreads_Max; + t3 = p->numTotalThreads; + +- if (t2 > MTCODER__THREADS_MAX) +- t2 = MTCODER__THREADS_MAX; ++ if (t2 > MTCODER_THREADS_MAX) ++ t2 = MTCODER_THREADS_MAX; + + if (t3 <= 0) + { +@@ -519,8 +551,8 @@ static void XzEncProps_Normalize_Fixed(CXzProps *p) + t1 = 1; + t2 = t3; + } +- if (t2 > MTCODER__THREADS_MAX) +- t2 = MTCODER__THREADS_MAX; ++ if (t2 > MTCODER_THREADS_MAX) ++ t2 = MTCODER_THREADS_MAX; + } + else if (t1 <= 0) + { +@@ -571,7 +603,7 @@ static void XzProps_Normalize(CXzProps *p) + /* we normalize xzProps properties, but we normalize only some of CXzProps::lzma2Props properties. + Lzma2Enc_SetProps() will normalize lzma2Props later. */ + +- if (p->blockSize == XZ_PROPS__BLOCK_SIZE__SOLID) ++ if (p->blockSize == XZ_PROPS_BLOCK_SIZE_SOLID) + { + p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; + p->numBlockThreads_Reduced = 1; +@@ -583,15 +615,15 @@ static void XzProps_Normalize(CXzProps *p) + else + { + CLzma2EncProps *lzma2 = &p->lzma2Props; +- if (p->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) ++ if (p->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO) + { + // xz-auto + p->lzma2Props.lzmaProps.reduceSize = p->reduceSize; + +- if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) ++ if (lzma2->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID) + { + // if (xz-auto && lzma2-solid) - we use solid for both +- p->blockSize = XZ_PROPS__BLOCK_SIZE__SOLID; ++ p->blockSize = XZ_PROPS_BLOCK_SIZE_SOLID; + p->numBlockThreads_Reduced = 1; + p->numBlockThreads_Max = 1; + if (p->lzma2Props.numTotalThreads <= 0) +@@ -610,9 +642,9 @@ static void XzProps_Normalize(CXzProps *p) + p->blockSize = tp.blockSize; // fixed or solid + p->numBlockThreads_Reduced = tp.numBlockThreads_Reduced; + p->numBlockThreads_Max = tp.numBlockThreads_Max; +- if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) +- lzma2->blockSize = tp.blockSize; // fixed or solid, LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID +- if (lzma2->lzmaProps.reduceSize > tp.blockSize && tp.blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) ++ if (lzma2->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO) ++ lzma2->blockSize = tp.blockSize; // fixed or solid, LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID ++ if (lzma2->lzmaProps.reduceSize > tp.blockSize && tp.blockSize != LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID) + lzma2->lzmaProps.reduceSize = tp.blockSize; + lzma2->numBlockThreads_Reduced = 1; + lzma2->numBlockThreads_Max = 1; +@@ -631,9 +663,9 @@ static void XzProps_Normalize(CXzProps *p) + r = p->blockSize; + lzma2->lzmaProps.reduceSize = r; + } +- if (lzma2->blockSize == LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO) +- lzma2->blockSize = LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID; +- else if (lzma2->blockSize > p->blockSize && lzma2->blockSize != LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID) ++ if (lzma2->blockSize == LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO) ++ lzma2->blockSize = LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID; ++ else if (lzma2->blockSize > p->blockSize && lzma2->blockSize != LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID) + lzma2->blockSize = p->blockSize; + + XzEncProps_Normalize_Fixed(p); +@@ -704,17 +736,17 @@ typedef struct + static SRes Xz_CompressBlock( + CLzma2WithFilters *lzmaf, + +- ISeqOutStream *outStream, ++ ISeqOutStreamPtr outStream, + Byte *outBufHeader, + Byte *outBufData, size_t outBufDataLimit, + +- ISeqInStream *inStream, ++ ISeqInStreamPtr inStream, + // UInt64 expectedSize, + const Byte *inBuf, // used if (!inStream) + size_t inBufSize, // used if (!inStream), it's block size, props->blockSize is ignored + + const CXzProps *props, +- ICompressProgress *progress, ++ ICompressProgressPtr progress, + int *inStreamFinished, /* only for inStream version */ + CXzEncBlockInfo *blockSizes, + ISzAllocPtr alloc, +@@ -731,12 +763,12 @@ static SRes Xz_CompressBlock( + + *inStreamFinished = False7z; + +- RINOK(Lzma2WithFilters_Create(lzmaf, alloc, allocBig)); ++ RINOK(Lzma2WithFilters_Create(lzmaf, alloc, allocBig)) + +- RINOK(Lzma2Enc_SetProps(lzmaf->lzma2, &props->lzma2Props)); ++ RINOK(Lzma2Enc_SetProps(lzmaf->lzma2, &props->lzma2Props)) + +- XzBlock_ClearFlags(&block); +- XzBlock_SetNumFilters(&block, 1 + (fp ? 1 : 0)); ++ // XzBlock_ClearFlags(&block) ++ XzBlock_ClearFlags_SetNumFilters(&block, 1 + (fp ? 1 : 0)) + + if (fp) + { +@@ -752,7 +784,7 @@ static SRes Xz_CompressBlock( + else if (fp->ipDefined) + { + Byte *ptr = filter->props; +- SetUi32(ptr, fp->ip); ++ SetUi32(ptr, fp->ip) + filter->propsSize = 4; + } + } +@@ -777,13 +809,13 @@ static SRes Xz_CompressBlock( + if (props->blockSize != (UInt64)(Int64)-1) + if (expectedSize > props->blockSize) + block.unpackSize = props->blockSize; +- XzBlock_SetHasUnpackSize(&block); ++ XzBlock_SetHasUnpackSize(&block) + } + */ + + if (outStream) + { +- RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.vt)); ++ RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.vt)) + } + + checkInStream.vt.Read = SeqCheckInStream_Read; +@@ -801,13 +833,13 @@ static SRes Xz_CompressBlock( + if (fp->id == XZ_ID_Subblock) + { + lzmaf->sb.inStream = &checkInStream.vt; +- RINOK(SbEncInStream_Init(&lzmaf->sb)); ++ RINOK(SbEncInStream_Init(&lzmaf->sb)) + } + else + #endif + { + lzmaf->filter.realStream = &checkInStream.vt; +- RINOK(SeqInFilter_Init(&lzmaf->filter, filter, alloc)); ++ RINOK(SeqInFilter_Init(&lzmaf->filter, filter, alloc)) + } + } + +@@ -841,7 +873,7 @@ static SRes Xz_CompressBlock( + #ifdef USE_SUBBLOCK + (fp->id == XZ_ID_Subblock) ? &lzmaf->sb.vt: + #endif +- &lzmaf->filter.p) : ++ &lzmaf->filter.vt) : + &checkInStream.vt) : NULL, + + useStream ? NULL : inBuf, +@@ -852,7 +884,7 @@ static SRes Xz_CompressBlock( + if (outBuf) + seqSizeOutStream.processed += outSize; + +- RINOK(res); ++ RINOK(res) + blockSizes->unpackSize = checkInStream.processed; + } + { +@@ -866,7 +898,7 @@ static SRes Xz_CompressBlock( + buf[3] = 0; + + SeqCheckInStream_GetDigest(&checkInStream, buf + 4); +- RINOK(WriteBytes(&seqSizeOutStream.vt, buf + (4 - padSize), padSize + XzFlags_GetCheckSize((CXzStreamFlags)props->checkId))); ++ RINOK(WriteBytes(&seqSizeOutStream.vt, buf + (4 - padSize), padSize + XzFlags_GetCheckSize((CXzStreamFlags)props->checkId))) + + blockSizes->totalSize = seqSizeOutStream.processed - padSize; + +@@ -877,12 +909,12 @@ static SRes Xz_CompressBlock( + seqSizeOutStream.processed = 0; + + block.unpackSize = blockSizes->unpackSize; +- XzBlock_SetHasUnpackSize(&block); ++ XzBlock_SetHasUnpackSize(&block) + + block.packSize = packSize; +- XzBlock_SetHasPackSize(&block); ++ XzBlock_SetHasPackSize(&block) + +- RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.vt)); ++ RINOK(XzBlock_WriteHeader(&block, &seqSizeOutStream.vt)) + + blockSizes->headerSize = (size_t)seqSizeOutStream.processed; + blockSizes->totalSize += seqSizeOutStream.processed; +@@ -906,15 +938,15 @@ static SRes Xz_CompressBlock( + typedef struct + { + ICompressProgress vt; +- ICompressProgress *progress; ++ ICompressProgressPtr progress; + UInt64 inOffset; + UInt64 outOffset; + } CCompressProgress_XzEncOffset; + + +-static SRes CompressProgress_XzEncOffset_Progress(const ICompressProgress *pp, UInt64 inSize, UInt64 outSize) ++static SRes CompressProgress_XzEncOffset_Progress(ICompressProgressPtr pp, UInt64 inSize, UInt64 outSize) + { +- const CCompressProgress_XzEncOffset *p = CONTAINER_FROM_VTBL(pp, CCompressProgress_XzEncOffset, vt); ++ const CCompressProgress_XzEncOffset *p = Z7_CONTAINER_FROM_VTBL_CONST(pp, CCompressProgress_XzEncOffset, vt); + inSize += p->inOffset; + outSize += p->outOffset; + return ICompressProgress_Progress(p->progress, inSize, outSize); +@@ -923,7 +955,7 @@ static SRes CompressProgress_XzEncOffset_Progress(const ICompressProgress *pp, U + + + +-typedef struct ++struct CXzEnc + { + ISzAllocPtr alloc; + ISzAllocPtr allocBig; +@@ -933,20 +965,19 @@ typedef struct + + CXzEncIndex xzIndex; + +- CLzma2WithFilters lzmaf_Items[MTCODER__THREADS_MAX]; ++ CLzma2WithFilters lzmaf_Items[MTCODER_THREADS_MAX]; + + size_t outBufSize; /* size of allocated outBufs[i] */ +- Byte *outBufs[MTCODER__BLOCKS_MAX]; ++ Byte *outBufs[MTCODER_BLOCKS_MAX]; + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + unsigned checkType; +- ISeqOutStream *outStream; ++ ISeqOutStreamPtr outStream; + BoolInt mtCoder_WasConstructed; + CMtCoder mtCoder; +- CXzEncBlockInfo EncBlocks[MTCODER__BLOCKS_MAX]; ++ CXzEncBlockInfo EncBlocks[MTCODER_BLOCKS_MAX]; + #endif +- +-} CXzEnc; ++}; + + + static void XzEnc_Construct(CXzEnc *p) +@@ -955,13 +986,13 @@ static void XzEnc_Construct(CXzEnc *p) + + XzEncIndex_Construct(&p->xzIndex); + +- for (i = 0; i < MTCODER__THREADS_MAX; i++) ++ for (i = 0; i < MTCODER_THREADS_MAX; i++) + Lzma2WithFilters_Construct(&p->lzmaf_Items[i]); + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + p->mtCoder_WasConstructed = False7z; + { +- for (i = 0; i < MTCODER__BLOCKS_MAX; i++) ++ for (i = 0; i < MTCODER_BLOCKS_MAX; i++) + p->outBufs[i] = NULL; + p->outBufSize = 0; + } +@@ -972,7 +1003,7 @@ static void XzEnc_Construct(CXzEnc *p) + static void XzEnc_FreeOutBufs(CXzEnc *p) + { + unsigned i; +- for (i = 0; i < MTCODER__BLOCKS_MAX; i++) ++ for (i = 0; i < MTCODER_BLOCKS_MAX; i++) + if (p->outBufs[i]) + { + ISzAlloc_Free(p->alloc, p->outBufs[i]); +@@ -988,10 +1019,10 @@ static void XzEnc_Free(CXzEnc *p, ISzAllocPtr alloc) + + XzEncIndex_Free(&p->xzIndex, alloc); + +- for (i = 0; i < MTCODER__THREADS_MAX; i++) ++ for (i = 0; i < MTCODER_THREADS_MAX; i++) + Lzma2WithFilters_Free(&p->lzmaf_Items[i], alloc); + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (p->mtCoder_WasConstructed) + { + MtCoder_Destruct(&p->mtCoder); +@@ -1013,37 +1044,38 @@ CXzEncHandle XzEnc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig) + p->expectedDataSize = (UInt64)(Int64)-1; + p->alloc = alloc; + p->allocBig = allocBig; +- return p; ++ return (CXzEncHandle)p; + } + ++// #define GET_CXzEnc_p CXzEnc *p = (CXzEnc *)(void *)pp; + +-void XzEnc_Destroy(CXzEncHandle pp) ++void XzEnc_Destroy(CXzEncHandle p) + { +- CXzEnc *p = (CXzEnc *)pp; ++ // GET_CXzEnc_p + XzEnc_Free(p, p->alloc); + ISzAlloc_Free(p->alloc, p); + } + + +-SRes XzEnc_SetProps(CXzEncHandle pp, const CXzProps *props) ++SRes XzEnc_SetProps(CXzEncHandle p, const CXzProps *props) + { +- CXzEnc *p = (CXzEnc *)pp; ++ // GET_CXzEnc_p + p->xzProps = *props; + XzProps_Normalize(&p->xzProps); + return SZ_OK; + } + + +-void XzEnc_SetDataSize(CXzEncHandle pp, UInt64 expectedDataSiize) ++void XzEnc_SetDataSize(CXzEncHandle p, UInt64 expectedDataSiize) + { +- CXzEnc *p = (CXzEnc *)pp; ++ // GET_CXzEnc_p + p->expectedDataSize = expectedDataSiize; + } + + + + +-#ifndef _7ZIP_ST ++#ifndef Z7_ST + + static SRes XzEnc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBufIndex, + const Byte *src, size_t srcSize, int finished) +@@ -1073,7 +1105,7 @@ static SRes XzEnc_MtCallback_Code(void *pp, unsigned coderIndex, unsigned outBuf + + MtProgressThunk_CreateVTable(&progressThunk); + progressThunk.mtProgress = &me->mtCoder.mtProgress; +- MtProgressThunk_Init(&progressThunk); ++ MtProgressThunk_INIT(&progressThunk) + + { + CXzEncBlockInfo blockSizes; +@@ -1112,11 +1144,11 @@ static SRes XzEnc_MtCallback_Write(void *pp, unsigned outBufIndex) + const CXzEncBlockInfo *bInfo = &me->EncBlocks[outBufIndex]; + const Byte *data = me->outBufs[outBufIndex]; + +- RINOK(WriteBytes(me->outStream, data, bInfo->headerSize)); ++ RINOK(WriteBytes(me->outStream, data, bInfo->headerSize)) + + { + UInt64 totalPackFull = bInfo->totalSize + XZ_GET_PAD_SIZE(bInfo->totalSize); +- RINOK(WriteBytes(me->outStream, data + XZ_BLOCK_HEADER_SIZE_MAX, (size_t)totalPackFull - bInfo->headerSize)); ++ RINOK(WriteBytes(me->outStream, data + XZ_BLOCK_HEADER_SIZE_MAX, (size_t)totalPackFull - bInfo->headerSize)) + } + + return XzEncIndex_AddIndexRecord(&me->xzIndex, bInfo->unpackSize, bInfo->totalSize, me->alloc); +@@ -1126,9 +1158,9 @@ static SRes XzEnc_MtCallback_Write(void *pp, unsigned outBufIndex) + + + +-SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress) ++SRes XzEnc_Encode(CXzEncHandle p, ISeqOutStreamPtr outStream, ISeqInStreamPtr inStream, ICompressProgressPtr progress) + { +- CXzEnc *p = (CXzEnc *)pp; ++ // GET_CXzEnc_p + + const CXzProps *props = &p->xzProps; + +@@ -1137,7 +1169,7 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr + UInt64 numBlocks = 1; + UInt64 blockSize = props->blockSize; + +- if (blockSize != XZ_PROPS__BLOCK_SIZE__SOLID ++ if (blockSize != XZ_PROPS_BLOCK_SIZE_SOLID + && props->reduceSize != (UInt64)(Int64)-1) + { + numBlocks = props->reduceSize / blockSize; +@@ -1147,13 +1179,13 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr + else + blockSize = (UInt64)1 << 62; + +- RINOK(XzEncIndex_PreAlloc(&p->xzIndex, numBlocks, blockSize, XZ_GET_ESTIMATED_BLOCK_TOTAL_PACK_SIZE(blockSize), p->alloc)); ++ RINOK(XzEncIndex_PreAlloc(&p->xzIndex, numBlocks, blockSize, XZ_GET_ESTIMATED_BLOCK_TOTAL_PACK_SIZE(blockSize), p->alloc)) + } + +- RINOK(Xz_WriteHeader((CXzStreamFlags)props->checkId, outStream)); ++ RINOK(Xz_WriteHeader((CXzStreamFlags)props->checkId, outStream)) + + +- #ifndef _7ZIP_ST ++ #ifndef Z7_ST + if (props->numBlockThreads_Reduced > 1) + { + IMtCoderCallback2 vt; +@@ -1180,8 +1212,8 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr + p->mtCoder.mtCallback = &vt; + p->mtCoder.mtCallbackObject = p; + +- if ( props->blockSize == XZ_PROPS__BLOCK_SIZE__SOLID +- || props->blockSize == XZ_PROPS__BLOCK_SIZE__AUTO) ++ if ( props->blockSize == XZ_PROPS_BLOCK_SIZE_SOLID ++ || props->blockSize == XZ_PROPS_BLOCK_SIZE_AUTO) + return SZ_ERROR_FAIL; + + p->mtCoder.blockSize = (size_t)props->blockSize; +@@ -1200,7 +1232,7 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr + p->mtCoder.numThreadsMax = (unsigned)props->numBlockThreads_Max; + p->mtCoder.expectedDataSize = p->expectedDataSize; + +- RINOK(MtCoder_Code(&p->mtCoder)); ++ RINOK(MtCoder_Code(&p->mtCoder)) + } + else + #endif +@@ -1217,7 +1249,7 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr + + writeStartSizes = 0; + +- if (props->blockSize != XZ_PROPS__BLOCK_SIZE__SOLID) ++ if (props->blockSize != XZ_PROPS_BLOCK_SIZE_SOLID) + { + writeStartSizes = (props->forceWriteSizesInHeader > 0); + +@@ -1274,18 +1306,18 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr + &inStreamFinished, + &blockSizes, + p->alloc, +- p->allocBig)); ++ p->allocBig)) + + { + UInt64 totalPackFull = blockSizes.totalSize + XZ_GET_PAD_SIZE(blockSizes.totalSize); + + if (writeStartSizes) + { +- RINOK(WriteBytes(outStream, p->outBufs[0], blockSizes.headerSize)); +- RINOK(WriteBytes(outStream, bufData, (size_t)totalPackFull - blockSizes.headerSize)); ++ RINOK(WriteBytes(outStream, p->outBufs[0], blockSizes.headerSize)) ++ RINOK(WriteBytes(outStream, bufData, (size_t)totalPackFull - blockSizes.headerSize)) + } + +- RINOK(XzEncIndex_AddIndexRecord(&p->xzIndex, blockSizes.unpackSize, blockSizes.totalSize, p->alloc)); ++ RINOK(XzEncIndex_AddIndexRecord(&p->xzIndex, blockSizes.unpackSize, blockSizes.totalSize, p->alloc)) + + progress2.inOffset += blockSizes.unpackSize; + progress2.outOffset += totalPackFull; +@@ -1302,8 +1334,8 @@ SRes XzEnc_Encode(CXzEncHandle pp, ISeqOutStream *outStream, ISeqInStream *inStr + + #include "Alloc.h" + +-SRes Xz_Encode(ISeqOutStream *outStream, ISeqInStream *inStream, +- const CXzProps *props, ICompressProgress *progress) ++SRes Xz_Encode(ISeqOutStreamPtr outStream, ISeqInStreamPtr inStream, ++ const CXzProps *props, ICompressProgressPtr progress) + { + SRes res; + CXzEncHandle xz = XzEnc_Create(&g_Alloc, &g_BigAlloc); +@@ -1317,7 +1349,7 @@ SRes Xz_Encode(ISeqOutStream *outStream, ISeqInStream *inStream, + } + + +-SRes Xz_EncodeEmpty(ISeqOutStream *outStream) ++SRes Xz_EncodeEmpty(ISeqOutStreamPtr outStream) + { + SRes res; + CXzEncIndex xzIndex; +diff --git a/src/lzma/XzEnc.h b/src/lzma/XzEnc.h +index 0c29e7e1e..77b78c014 100644 +--- a/src/lzma/XzEnc.h ++++ b/src/lzma/XzEnc.h +@@ -1,8 +1,8 @@ + /* XzEnc.h -- Xz Encode +-2017-06-27 : Igor Pavlov : Public domain */ ++2023-04-13 : Igor Pavlov : Public domain */ + +-#ifndef __XZ_ENC_H +-#define __XZ_ENC_H ++#ifndef ZIP7_INC_XZ_ENC_H ++#define ZIP7_INC_XZ_ENC_H + + #include "Lzma2Enc.h" + +@@ -11,8 +11,8 @@ + EXTERN_C_BEGIN + + +-#define XZ_PROPS__BLOCK_SIZE__AUTO LZMA2_ENC_PROPS__BLOCK_SIZE__AUTO +-#define XZ_PROPS__BLOCK_SIZE__SOLID LZMA2_ENC_PROPS__BLOCK_SIZE__SOLID ++#define XZ_PROPS_BLOCK_SIZE_AUTO LZMA2_ENC_PROPS_BLOCK_SIZE_AUTO ++#define XZ_PROPS_BLOCK_SIZE_SOLID LZMA2_ENC_PROPS_BLOCK_SIZE_SOLID + + + typedef struct +@@ -41,19 +41,20 @@ typedef struct + + void XzProps_Init(CXzProps *p); + +- +-typedef void * CXzEncHandle; ++typedef struct CXzEnc CXzEnc; ++typedef CXzEnc * CXzEncHandle; ++// Z7_DECLARE_HANDLE(CXzEncHandle) + + CXzEncHandle XzEnc_Create(ISzAllocPtr alloc, ISzAllocPtr allocBig); + void XzEnc_Destroy(CXzEncHandle p); + SRes XzEnc_SetProps(CXzEncHandle p, const CXzProps *props); + void XzEnc_SetDataSize(CXzEncHandle p, UInt64 expectedDataSiize); +-SRes XzEnc_Encode(CXzEncHandle p, ISeqOutStream *outStream, ISeqInStream *inStream, ICompressProgress *progress); ++SRes XzEnc_Encode(CXzEncHandle p, ISeqOutStreamPtr outStream, ISeqInStreamPtr inStream, ICompressProgressPtr progress); + +-SRes Xz_Encode(ISeqOutStream *outStream, ISeqInStream *inStream, +- const CXzProps *props, ICompressProgress *progress); ++SRes Xz_Encode(ISeqOutStreamPtr outStream, ISeqInStreamPtr inStream, ++ const CXzProps *props, ICompressProgressPtr progress); + +-SRes Xz_EncodeEmpty(ISeqOutStream *outStream); ++SRes Xz_EncodeEmpty(ISeqOutStreamPtr outStream); + + EXTERN_C_END + +diff --git a/src/lzma/XzIn.c b/src/lzma/XzIn.c +index a293d6bdd..9261bcb09 100644 +--- a/src/lzma/XzIn.c ++++ b/src/lzma/XzIn.c +@@ -1,5 +1,5 @@ + /* XzIn.c - Xz input +-2021-09-04 : Igor Pavlov : Public domain */ ++2023-04-02 : Igor Pavlov : Public domain */ + + #include "Precomp.h" + +@@ -15,11 +15,13 @@ + #define XZ_FOOTER_SIG_CHECK(p) ((p)[0] == XZ_FOOTER_SIG_0 && (p)[1] == XZ_FOOTER_SIG_1) + + +-SRes Xz_ReadHeader(CXzStreamFlags *p, ISeqInStream *inStream) ++SRes Xz_ReadHeader(CXzStreamFlags *p, ISeqInStreamPtr inStream) + { + Byte sig[XZ_STREAM_HEADER_SIZE]; +- RINOK(SeqInStream_Read2(inStream, sig, XZ_STREAM_HEADER_SIZE, SZ_ERROR_NO_ARCHIVE)); +- if (memcmp(sig, XZ_SIG, XZ_SIG_SIZE) != 0) ++ size_t processedSize = XZ_STREAM_HEADER_SIZE; ++ RINOK(SeqInStream_ReadMax(inStream, sig, &processedSize)) ++ if (processedSize != XZ_STREAM_HEADER_SIZE ++ || memcmp(sig, XZ_SIG, XZ_SIG_SIZE) != 0) + return SZ_ERROR_NO_ARCHIVE; + return Xz_ParseHeader(p, sig); + } +@@ -29,12 +31,12 @@ SRes Xz_ReadHeader(CXzStreamFlags *p, ISeqInStream *inStream) + if (s == 0) return SZ_ERROR_ARCHIVE; \ + pos += s; } + +-SRes XzBlock_ReadHeader(CXzBlock *p, ISeqInStream *inStream, BoolInt *isIndex, UInt32 *headerSizeRes) ++SRes XzBlock_ReadHeader(CXzBlock *p, ISeqInStreamPtr inStream, BoolInt *isIndex, UInt32 *headerSizeRes) + { + Byte header[XZ_BLOCK_HEADER_SIZE_MAX]; + unsigned headerSize; + *headerSizeRes = 0; +- RINOK(SeqInStream_ReadByte(inStream, &header[0])); ++ RINOK(SeqInStream_ReadByte(inStream, &header[0])) + headerSize = (unsigned)header[0]; + if (headerSize == 0) + { +@@ -46,7 +48,12 @@ SRes XzBlock_ReadHeader(CXzBlock *p, ISeqInStream *inStream, BoolInt *isIndex, U + *isIndex = False7z; + headerSize = (headerSize << 2) + 4; + *headerSizeRes = headerSize; +- RINOK(SeqInStream_Read(inStream, header + 1, headerSize - 1)); ++ { ++ size_t processedSize = headerSize - 1; ++ RINOK(SeqInStream_ReadMax(inStream, header + 1, &processedSize)) ++ if (processedSize != headerSize - 1) ++ return SZ_ERROR_INPUT_EOF; ++ } + return XzBlock_Parse(p, header); + } + +@@ -58,7 +65,9 @@ UInt64 Xz_GetUnpackSize(const CXzStream *p) + UInt64 size = 0; + size_t i; + for (i = 0; i < p->numBlocks; i++) +- ADD_SIZE_CHECK(size, p->blocks[i].unpackSize); ++ { ++ ADD_SIZE_CHECK(size, p->blocks[i].unpackSize) ++ } + return size; + } + +@@ -67,12 +76,14 @@ UInt64 Xz_GetPackSize(const CXzStream *p) + UInt64 size = 0; + size_t i; + for (i = 0; i < p->numBlocks; i++) +- ADD_SIZE_CHECK(size, (p->blocks[i].totalSize + 3) & ~(UInt64)3); ++ { ++ ADD_SIZE_CHECK(size, (p->blocks[i].totalSize + 3) & ~(UInt64)3) ++ } + return size; + } + + /* +-SRes XzBlock_ReadFooter(CXzBlock *p, CXzStreamFlags f, ISeqInStream *inStream) ++SRes XzBlock_ReadFooter(CXzBlock *p, CXzStreamFlags f, ISeqInStreamPtr inStream) + { + return SeqInStream_Read(inStream, p->check, XzFlags_GetCheckSize(f)); + } +@@ -93,7 +104,7 @@ static SRes Xz_ReadIndex2(CXzStream *p, const Byte *buf, size_t size, ISzAllocPt + + { + UInt64 numBlocks64; +- READ_VARINT_AND_CHECK(buf, pos, size, &numBlocks64); ++ READ_VARINT_AND_CHECK(buf, pos, size, &numBlocks64) + numBlocks = (size_t)numBlocks64; + if (numBlocks != numBlocks64 || numBlocks * 2 > size) + return SZ_ERROR_ARCHIVE; +@@ -110,8 +121,8 @@ static SRes Xz_ReadIndex2(CXzStream *p, const Byte *buf, size_t size, ISzAllocPt + for (i = 0; i < numBlocks; i++) + { + CXzBlockSizes *block = &p->blocks[i]; +- READ_VARINT_AND_CHECK(buf, pos, size, &block->totalSize); +- READ_VARINT_AND_CHECK(buf, pos, size, &block->unpackSize); ++ READ_VARINT_AND_CHECK(buf, pos, size, &block->totalSize) ++ READ_VARINT_AND_CHECK(buf, pos, size, &block->unpackSize) + if (block->totalSize == 0) + return SZ_ERROR_ARCHIVE; + } +@@ -122,7 +133,7 @@ static SRes Xz_ReadIndex2(CXzStream *p, const Byte *buf, size_t size, ISzAllocPt + return (pos == size) ? SZ_OK : SZ_ERROR_ARCHIVE; + } + +-static SRes Xz_ReadIndex(CXzStream *p, ILookInStream *stream, UInt64 indexSize, ISzAllocPtr alloc) ++static SRes Xz_ReadIndex(CXzStream *p, ILookInStreamPtr stream, UInt64 indexSize, ISzAllocPtr alloc) + { + SRes res; + size_t size; +@@ -142,14 +153,14 @@ static SRes Xz_ReadIndex(CXzStream *p, ILookInStream *stream, UInt64 indexSize, + return res; + } + +-static SRes LookInStream_SeekRead_ForArc(ILookInStream *stream, UInt64 offset, void *buf, size_t size) ++static SRes LookInStream_SeekRead_ForArc(ILookInStreamPtr stream, UInt64 offset, void *buf, size_t size) + { +- RINOK(LookInStream_SeekTo(stream, offset)); ++ RINOK(LookInStream_SeekTo(stream, offset)) + return LookInStream_Read(stream, buf, size); + /* return LookInStream_Read2(stream, buf, size, SZ_ERROR_NO_ARCHIVE); */ + } + +-static SRes Xz_ReadBackward(CXzStream *p, ILookInStream *stream, Int64 *startOffset, ISzAllocPtr alloc) ++static SRes Xz_ReadBackward(CXzStream *p, ILookInStreamPtr stream, Int64 *startOffset, ISzAllocPtr alloc) + { + UInt64 indexSize; + Byte buf[XZ_STREAM_FOOTER_SIZE]; +@@ -159,7 +170,7 @@ static SRes Xz_ReadBackward(CXzStream *p, ILookInStream *stream, Int64 *startOff + return SZ_ERROR_NO_ARCHIVE; + + pos -= XZ_STREAM_FOOTER_SIZE; +- RINOK(LookInStream_SeekRead_ForArc(stream, pos, buf, XZ_STREAM_FOOTER_SIZE)); ++ RINOK(LookInStream_SeekRead_ForArc(stream, pos, buf, XZ_STREAM_FOOTER_SIZE)) + + if (!XZ_FOOTER_SIG_CHECK(buf + 10)) + { +@@ -174,7 +185,7 @@ static SRes Xz_ReadBackward(CXzStream *p, ILookInStream *stream, Int64 *startOff + + i = (pos > TEMP_BUF_SIZE) ? TEMP_BUF_SIZE : (size_t)pos; + pos -= i; +- RINOK(LookInStream_SeekRead_ForArc(stream, pos, temp, i)); ++ RINOK(LookInStream_SeekRead_ForArc(stream, pos, temp, i)) + total += (UInt32)i; + for (; i != 0; i--) + if (temp[i - 1] != 0) +@@ -193,7 +204,7 @@ static SRes Xz_ReadBackward(CXzStream *p, ILookInStream *stream, Int64 *startOff + if (pos < XZ_STREAM_FOOTER_SIZE) + return SZ_ERROR_NO_ARCHIVE; + pos -= XZ_STREAM_FOOTER_SIZE; +- RINOK(LookInStream_SeekRead_ForArc(stream, pos, buf, XZ_STREAM_FOOTER_SIZE)); ++ RINOK(LookInStream_SeekRead_ForArc(stream, pos, buf, XZ_STREAM_FOOTER_SIZE)) + if (!XZ_FOOTER_SIG_CHECK(buf + 10)) + return SZ_ERROR_NO_ARCHIVE; + } +@@ -217,8 +228,8 @@ static SRes Xz_ReadBackward(CXzStream *p, ILookInStream *stream, Int64 *startOff + return SZ_ERROR_ARCHIVE; + + pos -= indexSize; +- RINOK(LookInStream_SeekTo(stream, pos)); +- RINOK(Xz_ReadIndex(p, stream, indexSize, alloc)); ++ RINOK(LookInStream_SeekTo(stream, pos)) ++ RINOK(Xz_ReadIndex(p, stream, indexSize, alloc)) + + { + UInt64 totalSize = Xz_GetPackSize(p); +@@ -227,7 +238,7 @@ static SRes Xz_ReadBackward(CXzStream *p, ILookInStream *stream, Int64 *startOff + || pos < totalSize + XZ_STREAM_HEADER_SIZE) + return SZ_ERROR_ARCHIVE; + pos -= (totalSize + XZ_STREAM_HEADER_SIZE); +- RINOK(LookInStream_SeekTo(stream, pos)); ++ RINOK(LookInStream_SeekTo(stream, pos)) + *startOffset = (Int64)pos; + } + { +@@ -236,7 +247,7 @@ static SRes Xz_ReadBackward(CXzStream *p, ILookInStream *stream, Int64 *startOff + SecToRead_CreateVTable(&secToRead); + secToRead.realStream = stream; + +- RINOK(Xz_ReadHeader(&headerFlags, &secToRead.vt)); ++ RINOK(Xz_ReadHeader(&headerFlags, &secToRead.vt)) + return (p->flags == headerFlags) ? SZ_OK : SZ_ERROR_ARCHIVE; + } + } +@@ -274,7 +285,9 @@ UInt64 Xzs_GetUnpackSize(const CXzs *p) + UInt64 size = 0; + size_t i; + for (i = 0; i < p->num; i++) +- ADD_SIZE_CHECK(size, Xz_GetUnpackSize(&p->streams[i])); ++ { ++ ADD_SIZE_CHECK(size, Xz_GetUnpackSize(&p->streams[i])) ++ } + return size; + } + +@@ -284,15 +297,17 @@ UInt64 Xzs_GetPackSize(const CXzs *p) + UInt64 size = 0; + size_t i; + for (i = 0; i < p->num; i++) +- ADD_SIZE_CHECK(size, Xz_GetTotalSize(&p->streams[i])); ++ { ++ ADD_SIZE_CHECK(size, Xz_GetTotalSize(&p->streams[i])) ++ } + return size; + } + */ + +-SRes Xzs_ReadBackward(CXzs *p, ILookInStream *stream, Int64 *startOffset, ICompressProgress *progress, ISzAllocPtr alloc) ++SRes Xzs_ReadBackward(CXzs *p, ILookInStreamPtr stream, Int64 *startOffset, ICompressProgressPtr progress, ISzAllocPtr alloc) + { + Int64 endOffset = 0; +- RINOK(ILookInStream_Seek(stream, &endOffset, SZ_SEEK_END)); ++ RINOK(ILookInStream_Seek(stream, &endOffset, SZ_SEEK_END)) + *startOffset = endOffset; + for (;;) + { +@@ -301,7 +316,7 @@ SRes Xzs_ReadBackward(CXzs *p, ILookInStream *stream, Int64 *startOffset, ICompr + Xz_Construct(&st); + res = Xz_ReadBackward(&st, stream, startOffset, alloc); + st.startOffset = (UInt64)*startOffset; +- RINOK(res); ++ RINOK(res) + if (p->num == p->numAllocated) + { + const size_t newNum = p->num + p->num / 4 + 1; +@@ -317,7 +332,7 @@ SRes Xzs_ReadBackward(CXzs *p, ILookInStream *stream, Int64 *startOffset, ICompr + p->streams[p->num++] = st; + if (*startOffset == 0) + break; +- RINOK(LookInStream_SeekTo(stream, (UInt64)*startOffset)); ++ RINOK(LookInStream_SeekTo(stream, (UInt64)*startOffset)) + if (progress && ICompressProgress_Progress(progress, (UInt64)(endOffset - *startOffset), (UInt64)(Int64)-1) != SZ_OK) + return SZ_ERROR_PROGRESS; + } +diff --git a/src/lzma/lzma-sdk.txt b/src/lzma/lzma-sdk.txt +index 9621c8d5d..141b0fd4e 100644 +--- a/src/lzma/lzma-sdk.txt ++++ b/src/lzma/lzma-sdk.txt +@@ -1,4 +1,4 @@ +-LZMA SDK 21.07 ++LZMA SDK 23.01 + -------------- + + LZMA SDK provides the documentation, samples, header files, +diff --git a/src/sevenzipfile.cpp b/src/sevenzipfile.cpp +index 7a539a5b3..e65dd3378 100644 +--- a/src/sevenzipfile.cpp ++++ b/src/sevenzipfile.cpp +@@ -283,7 +283,7 @@ bool SevenZipFile::open(QString fileName) + } + m_lookStream.bufSize = kInputBufSize; + m_lookStream.realStream = &m_archiveStream.vt; +- LookToRead2_Init(&m_lookStream); ++ LookToRead2_INIT(&m_lookStream); + CrcGenerateTable(); + SzArEx_Init(db()); + + +From 8b20ee8349cb7e1c8b69c23d28a960caa746e96d Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Wed, 21 Feb 2024 23:46:52 +0100 +Subject: [PATCH 3/4] imp: updated bundled minizip to 3.0.10 + +--- + src/minizip/README.minizip | 2 +- + src/minizip/mz.h | 45 +++--- + src/minizip/mz_compat.c | 254 +++++++++++++++---------------- + src/minizip/mz_compat.h | 4 +- + src/minizip/mz_crypt.c | 13 +- + src/minizip/mz_crypt.h | 4 +- + src/minizip/mz_os.c | 27 ++-- + src/minizip/mz_os.h | 5 +- + src/minizip/mz_os_posix.c | 88 +++++------ + src/minizip/mz_os_win32.c | 142 ++++++++--------- + src/minizip/mz_strm.c | 58 ++++--- + src/minizip/mz_strm.h | 2 +- + src/minizip/mz_strm_mem.c | 33 ++-- + src/minizip/mz_strm_mem.h | 2 +- + src/minizip/mz_strm_os.h | 2 +- + src/minizip/mz_strm_os_posix.c | 39 +++-- + src/minizip/mz_strm_os_win32.c | 41 ++--- + src/minizip/mz_strm_zlib.c | 25 ++- + src/minizip/mz_strm_zlib.h | 2 +- + src/minizip/mz_zip.c | 269 +++++++++++++++++---------------- + src/minizip/mz_zip.h | 5 +- + 21 files changed, 506 insertions(+), 556 deletions(-) + +diff --git a/src/minizip/README.minizip b/src/minizip/README.minizip +index 4940a1e15..22a0f58b6 100644 +--- a/src/minizip/README.minizip ++++ b/src/minizip/README.minizip +@@ -1 +1 @@ +-This code has been taken from https://github.com/zlib-ng/minizip-ng/releases/tag/3.0.5 ++This code has been taken from https://github.com/zlib-ng/minizip-ng/releases/tag/3.0.10 +diff --git a/src/minizip/mz.h b/src/minizip/mz.h +index bcebe08a2..769a7b65a 100644 +--- a/src/minizip/mz.h ++++ b/src/minizip/mz.h +@@ -1,7 +1,7 @@ + /* mz.h -- Errors codes, zip flags and magic + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +@@ -14,8 +14,8 @@ + /***************************************************************************/ + + /* MZ_VERSION */ +-#define MZ_VERSION ("3.0.5") +-#define MZ_VERSION_BUILD (030005) ++#define MZ_VERSION ("3.0.10") ++#define MZ_VERSION_BUILD (03000a) + + /* MZ_ERROR */ + #define MZ_OK (0) /* zlib */ +@@ -146,13 +146,6 @@ + /* MZ_UTILITY */ + #define MZ_UNUSED(SYMBOL) ((void)SYMBOL) + +-#ifndef MZ_CUSTOM_ALLOC +-#define MZ_ALLOC(SIZE) (malloc((SIZE))) +-#endif +-#ifndef MZ_CUSTOM_FREE +-#define MZ_FREE(PTR) (free(PTR)) +-#endif +- + #if defined(_WIN32) && defined(MZ_EXPORTS) + #define MZ_EXPORT __declspec(dllexport) + #else +@@ -175,25 +168,25 @@ + #endif + + #ifndef INT8_MAX +-typedef signed char int8_t; ++typedef signed char int8_t; + #endif + #ifndef INT16_MAX +-typedef short int16_t; ++typedef short int16_t; + #endif + #ifndef INT32_MAX +-typedef int int32_t; ++typedef int int32_t; + #endif + #ifndef INT64_MAX +-typedef long long int64_t; ++typedef long long int64_t; + #endif + #ifndef UINT8_MAX +-typedef unsigned char uint8_t; ++typedef unsigned char uint8_t; + #endif + #ifndef UINT16_MAX +-typedef unsigned short uint16_t; ++typedef unsigned short uint16_t; + #endif + #ifndef UINT32_MAX +-typedef unsigned int uint32_t; ++typedef unsigned int uint32_t; + #endif + #ifndef UINT64_MAX + typedef unsigned long long uint64_t; +@@ -208,13 +201,13 @@ typedef unsigned long long uint64_t; + #endif + + #ifndef PRId8 +-# define PRId8 "hhd" ++# define PRId8 "hhd" + #endif + #ifndef PRIu8 +-# define PRIu8 "hhu" ++# define PRIu8 "hhu" + #endif + #ifndef PRIx8 +-# define PRIx8 "hhx" ++# define PRIx8 "hhx" + #endif + #ifndef PRId16 + # define PRId16 "hd" +@@ -257,22 +250,22 @@ typedef unsigned long long uint64_t; + #endif + + #ifndef INT16_MAX +-# define INT16_MAX 32767 ++# define INT16_MAX 32767 + #endif + #ifndef INT32_MAX +-# define INT32_MAX 2147483647L ++# define INT32_MAX 2147483647L + #endif + #ifndef INT64_MAX +-# define INT64_MAX 9223372036854775807LL ++# define INT64_MAX 9223372036854775807LL + #endif + #ifndef UINT16_MAX +-# define UINT16_MAX 65535U ++# define UINT16_MAX 65535U + #endif + #ifndef UINT32_MAX +-# define UINT32_MAX 4294967295UL ++# define UINT32_MAX 4294967295UL + #endif + #ifndef UINT64_MAX +-# define UINT64_MAX 18446744073709551615ULL ++# define UINT64_MAX 18446744073709551615ULL + #endif + + /***************************************************************************/ +diff --git a/src/minizip/mz_compat.c b/src/minizip/mz_compat.c +index 5a08046a7..fab6bf046 100644 +--- a/src/minizip/mz_compat.c ++++ b/src/minizip/mz_compat.c +@@ -1,7 +1,7 @@ + /* mz_compat.c -- Backwards compatible interface for older versions + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + Copyright (C) 1998-2010 Gilles Vollant + https://www.winimage.com/zLibDll/minizip.html +@@ -10,7 +10,6 @@ + See the accompanying LICENSE file for the full text of the license. + */ + +- + #include "mz.h" + #include "mz_os.h" + #include "mz_strm.h" +@@ -87,12 +86,12 @@ static int32_t mz_stream_ioapi_open(void *stream, const char *path, int32_t mode + else + return MZ_OPEN_ERROR; + +- if (ioapi->filefunc64.zopen64_file != NULL) ++ if (ioapi->filefunc64.zopen64_file) + ioapi->handle = ioapi->filefunc64.zopen64_file(ioapi->filefunc64.opaque, path, ioapi_mode); +- else if (ioapi->filefunc.zopen_file != NULL) ++ else if (ioapi->filefunc.zopen_file) + ioapi->handle = ioapi->filefunc.zopen_file(ioapi->filefunc.opaque, path, ioapi_mode); + +- if (ioapi->handle == NULL) ++ if (!ioapi->handle) + return MZ_PARAM_ERROR; + + return MZ_OK; +@@ -100,7 +99,7 @@ static int32_t mz_stream_ioapi_open(void *stream, const char *path, int32_t mode + + static int32_t mz_stream_ioapi_is_open(void *stream) { + mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; +- if (ioapi->handle == NULL) ++ if (!ioapi->handle) + return MZ_OPEN_ERROR; + return MZ_OK; + } +@@ -113,10 +112,10 @@ static int32_t mz_stream_ioapi_read(void *stream, void *buf, int32_t size) { + if (mz_stream_ioapi_is_open(stream) != MZ_OK) + return MZ_OPEN_ERROR; + +- if (ioapi->filefunc64.zread_file != NULL) { ++ if (ioapi->filefunc64.zread_file) { + zread = ioapi->filefunc64.zread_file; + opaque = ioapi->filefunc64.opaque; +- } else if (ioapi->filefunc.zread_file != NULL) { ++ } else if (ioapi->filefunc.zread_file) { + zread = ioapi->filefunc.zread_file; + opaque = ioapi->filefunc.opaque; + } else +@@ -134,10 +133,10 @@ static int32_t mz_stream_ioapi_write(void *stream, const void *buf, int32_t size + if (mz_stream_ioapi_is_open(stream) != MZ_OK) + return MZ_OPEN_ERROR; + +- if (ioapi->filefunc64.zwrite_file != NULL) { ++ if (ioapi->filefunc64.zwrite_file) { + zwrite = ioapi->filefunc64.zwrite_file; + opaque = ioapi->filefunc64.opaque; +- } else if (ioapi->filefunc.zwrite_file != NULL) { ++ } else if (ioapi->filefunc.zwrite_file) { + zwrite = ioapi->filefunc.zwrite_file; + opaque = ioapi->filefunc.opaque; + } else +@@ -153,9 +152,9 @@ static int64_t mz_stream_ioapi_tell(void *stream) { + if (mz_stream_ioapi_is_open(stream) != MZ_OK) + return MZ_OPEN_ERROR; + +- if (ioapi->filefunc64.ztell64_file != NULL) ++ if (ioapi->filefunc64.ztell64_file) + return ioapi->filefunc64.ztell64_file(ioapi->filefunc64.opaque, ioapi->handle); +- else if (ioapi->filefunc.ztell_file != NULL) ++ else if (ioapi->filefunc.ztell_file) + return ioapi->filefunc.ztell_file(ioapi->filefunc.opaque, ioapi->handle); + + return MZ_INTERNAL_ERROR; +@@ -163,16 +162,14 @@ static int64_t mz_stream_ioapi_tell(void *stream) { + + static int32_t mz_stream_ioapi_seek(void *stream, int64_t offset, int32_t origin) { + mz_stream_ioapi *ioapi = (mz_stream_ioapi *)stream; +- int32_t written = 0; +- void *opaque = NULL; + + if (mz_stream_ioapi_is_open(stream) != MZ_OK) + return MZ_OPEN_ERROR; + +- if (ioapi->filefunc64.zseek64_file != NULL) { ++ if (ioapi->filefunc64.zseek64_file) { + if (ioapi->filefunc64.zseek64_file(ioapi->filefunc64.opaque, ioapi->handle, offset, origin) != 0) + return MZ_INTERNAL_ERROR; +- } else if (ioapi->filefunc.zseek_file != NULL) { ++ } else if (ioapi->filefunc.zseek_file) { + if (ioapi->filefunc.zseek_file(ioapi->filefunc.opaque, ioapi->handle, (int32_t)offset, origin) != 0) + return MZ_INTERNAL_ERROR; + } else +@@ -189,10 +186,10 @@ static int32_t mz_stream_ioapi_close(void *stream) { + if (mz_stream_ioapi_is_open(stream) != MZ_OK) + return MZ_OPEN_ERROR; + +- if (ioapi->filefunc.zclose_file != NULL) { ++ if (ioapi->filefunc.zclose_file) { + zclose = ioapi->filefunc.zclose_file; + opaque = ioapi->filefunc.opaque; +- } else if (ioapi->filefunc64.zclose_file != NULL) { ++ } else if (ioapi->filefunc64.zclose_file) { + zclose = ioapi->filefunc64.zclose_file; + opaque = ioapi->filefunc64.opaque; + } else +@@ -212,10 +209,10 @@ static int32_t mz_stream_ioapi_error(void *stream) { + if (mz_stream_ioapi_is_open(stream) != MZ_OK) + return MZ_OPEN_ERROR; + +- if (ioapi->filefunc.zerror_file != NULL) { ++ if (ioapi->filefunc.zerror_file) { + zerror = ioapi->filefunc.zerror_file; + opaque = ioapi->filefunc.opaque; +- } else if (ioapi->filefunc64.zerror_file != NULL) { ++ } else if (ioapi->filefunc64.zerror_file) { + zerror = ioapi->filefunc64.zerror_file; + opaque = ioapi->filefunc64.opaque; + } else +@@ -239,12 +236,10 @@ static int32_t mz_stream_ioapi_set_filefunc64(void *stream, zlib_filefunc64_def + static void *mz_stream_ioapi_create(void **stream) { + mz_stream_ioapi *ioapi = NULL; + +- ioapi = (mz_stream_ioapi *)MZ_ALLOC(sizeof(mz_stream_ioapi)); +- if (ioapi != NULL) { +- memset(ioapi, 0, sizeof(mz_stream_ioapi)); ++ ioapi = (mz_stream_ioapi *)calloc(1, sizeof(mz_stream_ioapi)); ++ if (ioapi) + ioapi->stream.vtbl = &mz_stream_ioapi_vtbl; +- } +- if (stream != NULL) ++ if (stream) + *stream = ioapi; + + return ioapi; +@@ -252,11 +247,11 @@ static void *mz_stream_ioapi_create(void **stream) { + + static void mz_stream_ioapi_delete(void **stream) { + mz_stream_ioapi *ioapi = NULL; +- if (stream == NULL) ++ if (!stream) + return; + ioapi = (mz_stream_ioapi *)*stream; +- if (ioapi != NULL) +- MZ_FREE(ioapi); ++ if (ioapi) ++ free(ioapi); + *stream = NULL; + } + +@@ -264,41 +259,41 @@ static void mz_stream_ioapi_delete(void **stream) { + + void fill_fopen_filefunc(zlib_filefunc_def *pzlib_filefunc_def) { + /* For 32-bit file support only, compile with MZ_FILE32_API */ +- if (pzlib_filefunc_def != NULL) ++ if (pzlib_filefunc_def) + memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc_def)); + } + + void fill_fopen64_filefunc(zlib_filefunc64_def *pzlib_filefunc_def) { + /* All mz_stream_os_* support large files if compilation supports it */ +- if (pzlib_filefunc_def != NULL) ++ if (pzlib_filefunc_def) + memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc64_def)); + } + + void fill_win32_filefunc(zlib_filefunc_def *pzlib_filefunc_def) { + /* Handled by mz_stream_os_win32 */ +- if (pzlib_filefunc_def != NULL) ++ if (pzlib_filefunc_def) + memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc_def)); + } + + void fill_win32_filefunc64(zlib_filefunc64_def *pzlib_filefunc_def) { + /* Automatically supported in mz_stream_os_win32 */ +- if (pzlib_filefunc_def != NULL) ++ if (pzlib_filefunc_def) + memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc64_def)); + } + + void fill_win32_filefunc64A(zlib_filefunc64_def *pzlib_filefunc_def) { + /* Automatically supported in mz_stream_os_win32 */ +- if (pzlib_filefunc_def != NULL) ++ if (pzlib_filefunc_def) + memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc64_def)); + } + +-/* NOTE: fill_win32_filefunc64W is no longer necessary since wide-character +- support is automatically handled by the underlying os stream. Do not ++/* NOTE: fill_win32_filefunc64W is no longer necessary since wide-character ++ support is automatically handled by the underlying os stream. Do not + pass wide-characters to zipOpen or unzOpen. */ + + void fill_memory_filefunc(zlib_filefunc_def *pzlib_filefunc_def) { + /* Use opaque to indicate which stream interface to create */ +- if (pzlib_filefunc_def != NULL) { ++ if (pzlib_filefunc_def) { + memset(pzlib_filefunc_def, 0, sizeof(zlib_filefunc_def)); + pzlib_filefunc_def->opaque = mz_stream_mem_get_interface(); + } +@@ -330,25 +325,25 @@ zipFile zipOpen64(const void *path, int append) { + return zipOpen2(path, append, NULL, NULL); + } + +-zipFile zipOpen2(const char *path, int append, const char **globalcomment, ++zipFile zipOpen2(const char *path, int append, const char **globalcomment, + zlib_filefunc_def *pzlib_filefunc_def) { + zipFile zip = NULL; + int32_t mode = zipConvertAppendToStreamMode(append); + void *stream = NULL; + + if (pzlib_filefunc_def) { +- if (pzlib_filefunc_def->zopen_file != NULL) { +- if (mz_stream_ioapi_create(&stream) == NULL) ++ if (pzlib_filefunc_def->zopen_file) { ++ if (!mz_stream_ioapi_create(&stream)) + return NULL; + mz_stream_ioapi_set_filefunc(stream, pzlib_filefunc_def); +- } else if (pzlib_filefunc_def->opaque != NULL) { +- if (mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque) == NULL) ++ } else if (pzlib_filefunc_def->opaque) { ++ if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) + return NULL; + } + } + +- if (stream == NULL) { +- if (mz_stream_os_create(&stream) == NULL) ++ if (!stream) { ++ if (!mz_stream_os_create(&stream)) + return NULL; + } + +@@ -359,7 +354,7 @@ zipFile zipOpen2(const char *path, int append, const char **globalcomment, + + zip = zipOpen_MZ(stream, append, globalcomment); + +- if (zip == NULL) { ++ if (!zip) { + mz_stream_delete(&stream); + return NULL; + } +@@ -367,25 +362,25 @@ zipFile zipOpen2(const char *path, int append, const char **globalcomment, + return zip; + } + +-zipFile zipOpen2_64(const void *path, int append, const char **globalcomment, ++zipFile zipOpen2_64(const void *path, int append, const char **globalcomment, + zlib_filefunc64_def *pzlib_filefunc_def) { + zipFile zip = NULL; + int32_t mode = zipConvertAppendToStreamMode(append); + void *stream = NULL; + + if (pzlib_filefunc_def) { +- if (pzlib_filefunc_def->zopen64_file != NULL) { +- if (mz_stream_ioapi_create(&stream) == NULL) ++ if (pzlib_filefunc_def->zopen64_file) { ++ if (!mz_stream_ioapi_create(&stream)) + return NULL; + mz_stream_ioapi_set_filefunc64(stream, pzlib_filefunc_def); +- } else if (pzlib_filefunc_def->opaque != NULL) { +- if (mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque) == NULL) ++ } else if (pzlib_filefunc_def->opaque) { ++ if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) + return NULL; + } + } + +- if (stream == NULL) { +- if (mz_stream_os_create(&stream) == NULL) ++ if (!stream) { ++ if (!mz_stream_os_create(&stream)) + return NULL; + } + +@@ -396,7 +391,7 @@ zipFile zipOpen2_64(const void *path, int append, const char **globalcomment, + + zip = zipOpen_MZ(stream, append, globalcomment); + +- if (zip == NULL) { ++ if (!zip) { + mz_stream_delete(&stream); + return NULL; + } +@@ -418,11 +413,11 @@ zipFile zipOpen_MZ(void *stream, int append, const char **globalcomment) { + return NULL; + } + +- if (globalcomment != NULL) ++ if (globalcomment) + mz_zip_get_comment(handle, globalcomment); + +- compat = (mz_compat *)MZ_ALLOC(sizeof(mz_compat)); +- if (compat != NULL) { ++ compat = (mz_compat *)calloc(1, sizeof(mz_compat)); ++ if (compat) { + compat->handle = handle; + compat->stream = stream; + } else { +@@ -434,14 +429,14 @@ zipFile zipOpen_MZ(void *stream, int append, const char **globalcomment) { + + void* zipGetHandle_MZ(zipFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return NULL; + return compat->handle; + } + + void* zipGetStream_MZ(zipFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return NULL; + return (void *)compat->stream; + } +@@ -461,12 +456,12 @@ int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo + MZ_UNUSED(extrafield_local); + MZ_UNUSED(crc_for_crypting); + +- if (compat == NULL) ++ if (!compat) + return ZIP_PARAMERROR; + + memset(&file_info, 0, sizeof(file_info)); + +- if (zipfi != NULL) { ++ if (zipfi) { + uint64_t dos_date = 0; + + if (zipfi->mz_dos_date != 0) +@@ -479,7 +474,7 @@ int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo + file_info.internal_fa = zipfi->internal_fa; + } + +- if (filename == NULL) ++ if (!filename) + filename = "-"; + + file_info.compression_method = (uint16_t)compression_method; +@@ -490,7 +485,7 @@ int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo + file_info.extrafield_size = size_extrafield_global; + file_info.version_madeby = (uint16_t)version_madeby; + file_info.comment = comment; +- if (file_info.comment != NULL) ++ if (file_info.comment) + file_info.comment_size = (uint16_t)strlen(file_info.comment); + file_info.flag = (uint16_t)flag_base; + if (zip64) +@@ -498,7 +493,7 @@ int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo + else + file_info.zip64 = MZ_ZIP64_DISABLE; + #ifdef HAVE_WZAES +- if ((password != NULL) || (raw && (file_info.flag & MZ_ZIP_FLAG_ENCRYPTED))) ++ if (password || (raw && (file_info.flag & MZ_ZIP_FLAG_ENCRYPTED))) + file_info.aes_version = MZ_AES_VERSION; + #endif + +@@ -581,7 +576,7 @@ int zipOpenNewFileInZip_64(zipFile file, const char *filename, const zip_fileinf + int zipWriteInFileInZip(zipFile file, const void *buf, uint32_t len) { + mz_compat *compat = (mz_compat *)file; + int32_t written = 0; +- if (compat == NULL || len >= INT32_MAX) ++ if (!compat || len >= INT32_MAX) + return ZIP_PARAMERROR; + written = mz_zip_entry_write(compat->handle, buf, (int32_t)len); + if ((written < 0) || ((uint32_t)written != len)) +@@ -595,7 +590,7 @@ int zipCloseFileInZipRaw(zipFile file, unsigned long uncompressed_size, unsigned + + int zipCloseFileInZipRaw64(zipFile file, uint64_t uncompressed_size, unsigned long crc32) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return ZIP_PARAMERROR; + return mz_zip_entry_close_raw(compat->handle, (int64_t)uncompressed_size, crc32); + } +@@ -606,7 +601,7 @@ int zipCloseFileInZip(zipFile file) { + + int zipCloseFileInZip64(zipFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return ZIP_PARAMERROR; + return mz_zip_entry_close(compat->handle); + } +@@ -623,15 +618,15 @@ int zipClose2_64(zipFile file, const char *global_comment, uint16_t version_made + mz_compat *compat = (mz_compat *)file; + int32_t err = MZ_OK; + +- if (compat->handle != NULL) ++ if (compat->handle) + err = zipClose2_MZ(file, global_comment, version_madeby); + +- if (compat->stream != NULL) { ++ if (compat->stream) { + mz_stream_close(compat->stream); + mz_stream_delete(&compat->stream); + } + +- MZ_FREE(compat); ++ free(compat); + + return err; + } +@@ -646,12 +641,12 @@ int zipClose2_MZ(zipFile file, const char *global_comment, uint16_t version_made + mz_compat *compat = (mz_compat *)file; + int32_t err = MZ_OK; + +- if (compat == NULL) ++ if (!compat) + return ZIP_PARAMERROR; +- if (compat->handle == NULL) ++ if (!compat->handle) + return err; + +- if (global_comment != NULL) ++ if (global_comment) + mz_zip_set_comment(compat->handle, global_comment); + + mz_zip_set_version_madeby(compat->handle, version_madeby); +@@ -676,18 +671,18 @@ unzFile unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc_def) { + void *stream = NULL; + + if (pzlib_filefunc_def) { +- if (pzlib_filefunc_def->zopen_file != NULL) { +- if (mz_stream_ioapi_create(&stream) == NULL) ++ if (pzlib_filefunc_def->zopen_file) { ++ if (!mz_stream_ioapi_create(&stream)) + return NULL; + mz_stream_ioapi_set_filefunc(stream, pzlib_filefunc_def); +- } else if (pzlib_filefunc_def->opaque != NULL) { +- if (mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque) == NULL) ++ } else if (pzlib_filefunc_def->opaque) { ++ if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) + return NULL; + } + } + +- if (stream == NULL) { +- if (mz_stream_os_create(&stream) == NULL) ++ if (!stream) { ++ if (!mz_stream_os_create(&stream)) + return NULL; + } + +@@ -697,7 +692,7 @@ unzFile unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc_def) { + } + + unz = unzOpen_MZ(stream); +- if (unz == NULL) { ++ if (!unz) { + mz_stream_close(stream); + mz_stream_delete(&stream); + return NULL; +@@ -710,18 +705,18 @@ unzFile unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def) { + void *stream = NULL; + + if (pzlib_filefunc_def) { +- if (pzlib_filefunc_def->zopen64_file != NULL) { +- if (mz_stream_ioapi_create(&stream) == NULL) ++ if (pzlib_filefunc_def->zopen64_file) { ++ if (!mz_stream_ioapi_create(&stream)) + return NULL; + mz_stream_ioapi_set_filefunc64(stream, pzlib_filefunc_def); +- } else if (pzlib_filefunc_def->opaque != NULL) { +- if (mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque) == NULL) ++ } else if (pzlib_filefunc_def->opaque) { ++ if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) + return NULL; + } + } + +- if (stream == NULL) { +- if (mz_stream_os_create(&stream) == NULL) ++ if (!stream) { ++ if (!mz_stream_os_create(&stream)) + return NULL; + } + +@@ -731,7 +726,7 @@ unzFile unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def) { + } + + unz = unzOpen_MZ(stream); +- if (unz == NULL) { ++ if (!unz) { + mz_stream_close(stream); + mz_stream_delete(&stream); + return NULL; +@@ -741,14 +736,14 @@ unzFile unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def) { + + void* unzGetHandle_MZ(unzFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return NULL; + return compat->handle; + } + + void* unzGetStream_MZ(unzFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return NULL; + return compat->stream; + } +@@ -766,8 +761,8 @@ unzFile unzOpen_MZ(void *stream) { + return NULL; + } + +- compat = (mz_compat *)MZ_ALLOC(sizeof(mz_compat)); +- if (compat != NULL) { ++ compat = (mz_compat *)calloc(1, sizeof(mz_compat)); ++ if (compat) { + compat->handle = handle; + compat->stream = stream; + +@@ -783,18 +778,18 @@ int unzClose(unzFile file) { + mz_compat *compat = (mz_compat *)file; + int32_t err = MZ_OK; + +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + +- if (compat->handle != NULL) ++ if (compat->handle) + err = unzClose_MZ(file); + +- if (compat->stream != NULL) { ++ if (compat->stream) { + mz_stream_close(compat->stream); + mz_stream_delete(&compat->stream); + } + +- MZ_FREE(compat); ++ free(compat); + + return err; + } +@@ -804,7 +799,7 @@ int unzClose_MZ(unzFile file) { + mz_compat *compat = (mz_compat *)file; + int32_t err = MZ_OK; + +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + + err = mz_zip_close(compat->handle); +@@ -819,7 +814,7 @@ int unzGetGlobalInfo(unzFile file, unz_global_info* pglobal_info32) { + int32_t err = MZ_OK; + + memset(pglobal_info32, 0, sizeof(unz_global_info)); +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + + err = unzGetGlobalInfo64(file, &global_info64); +@@ -837,7 +832,7 @@ int unzGetGlobalInfo64(unzFile file, unz_global_info64 *pglobal_info) { + int32_t err = MZ_OK; + + memset(pglobal_info, 0, sizeof(unz_global_info64)); +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + err = mz_zip_get_comment(compat->handle, &comment_ptr); + if (err == MZ_OK) +@@ -854,7 +849,7 @@ int unzGetGlobalComment(unzFile file, char *comment, unsigned long comment_size) + const char *comment_ptr = NULL; + int32_t err = MZ_OK; + +- if (comment == NULL || comment_size == 0) ++ if (!comment || !comment_size) + return UNZ_PARAMERROR; + err = mz_zip_get_comment(compat->handle, &comment_ptr); + if (err == MZ_OK) { +@@ -870,23 +865,28 @@ int unzOpenCurrentFile3(unzFile file, int *method, int *level, int raw, const ch + int32_t err = MZ_OK; + void *stream = NULL; + +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; +- if (method != NULL) ++ if (method) + *method = 0; +- if (level != NULL) ++ if (level) + *level = 0; + ++ if (mz_zip_entry_is_open(compat->handle) == MZ_OK) { ++ /* zlib minizip does not error out here if close returns errors */ ++ unzCloseCurrentFile(file); ++ } ++ + compat->total_out = 0; + err = mz_zip_entry_read_open(compat->handle, (uint8_t)raw, password); + if (err == MZ_OK) + err = mz_zip_entry_get_info(compat->handle, &file_info); + if (err == MZ_OK) { +- if (method != NULL) { ++ if (method) { + *method = file_info->compression_method; + } + +- if (level != NULL) { ++ if (level) { + *level = 6; + switch (file_info->flag & 0x06) { + case MZ_ZIP_FLAG_DEFLATE_SUPER_FAST: +@@ -923,7 +923,7 @@ int unzOpenCurrentFile2(unzFile file, int *method, int *level, int raw) { + int unzReadCurrentFile(unzFile file, void *buf, uint32_t len) { + mz_compat *compat = (mz_compat *)file; + int32_t err = MZ_OK; +- if (compat == NULL || len >= INT32_MAX) ++ if (!compat || len >= INT32_MAX) + return UNZ_PARAMERROR; + err = mz_zip_entry_read(compat->handle, buf, (int32_t)len); + if (err > 0) +@@ -934,7 +934,7 @@ int unzReadCurrentFile(unzFile file, void *buf, uint32_t len) { + int unzCloseCurrentFile(unzFile file) { + mz_compat *compat = (mz_compat *)file; + int32_t err = MZ_OK; +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + err = mz_zip_entry_close(compat->handle); + return err; +@@ -948,14 +948,14 @@ int unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *filenam + uint16_t bytes_to_copy = 0; + int32_t err = MZ_OK; + +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + + err = mz_zip_entry_get_info(compat->handle, &file_info); + if (err != MZ_OK) + return err; + +- if (pfile_info != NULL) { ++ if (pfile_info) { + pfile_info->version = file_info->version_madeby; + pfile_info->version_needed = file_info->version_needed; + pfile_info->flag = file_info->flag; +@@ -976,7 +976,7 @@ int unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *filenam + pfile_info->compressed_size = (uint32_t)file_info->compressed_size; + pfile_info->uncompressed_size = (uint32_t)file_info->uncompressed_size; + } +- if (filename_size > 0 && filename != NULL && file_info->filename != NULL) { ++ if (filename_size > 0 && filename && file_info->filename) { + bytes_to_copy = (uint16_t)filename_size; + if (bytes_to_copy > file_info->filename_size) + bytes_to_copy = file_info->filename_size; +@@ -984,13 +984,13 @@ int unzGetCurrentFileInfo(unzFile file, unz_file_info *pfile_info, char *filenam + if (bytes_to_copy < filename_size) + filename[bytes_to_copy] = 0; + } +- if (extrafield_size > 0 && extrafield != NULL) { ++ if (extrafield_size > 0 && extrafield) { + bytes_to_copy = (uint16_t)extrafield_size; + if (bytes_to_copy > file_info->extrafield_size) + bytes_to_copy = file_info->extrafield_size; + memcpy(extrafield, file_info->extrafield, bytes_to_copy); + } +- if (comment_size > 0 && comment != NULL && file_info->comment != NULL) { ++ if (comment_size > 0 && comment && file_info->comment) { + bytes_to_copy = (uint16_t)comment_size; + if (bytes_to_copy > file_info->comment_size) + bytes_to_copy = file_info->comment_size; +@@ -1009,14 +1009,14 @@ int unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_info, char *fi + uint16_t bytes_to_copy = 0; + int32_t err = MZ_OK; + +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + + err = mz_zip_entry_get_info(compat->handle, &file_info); + if (err != MZ_OK) + return err; + +- if (pfile_info != NULL) { ++ if (pfile_info) { + pfile_info->version = file_info->version_madeby; + pfile_info->version_needed = file_info->version_needed; + pfile_info->flag = file_info->flag; +@@ -1037,7 +1037,7 @@ int unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_info, char *fi + pfile_info->compressed_size = (uint64_t)file_info->compressed_size; + pfile_info->uncompressed_size = (uint64_t)file_info->uncompressed_size; + } +- if (filename_size > 0 && filename != NULL && file_info->filename != NULL) { ++ if (filename_size > 0 && filename && file_info->filename) { + bytes_to_copy = (uint16_t)filename_size; + if (bytes_to_copy > file_info->filename_size) + bytes_to_copy = file_info->filename_size; +@@ -1045,13 +1045,13 @@ int unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_info, char *fi + if (bytes_to_copy < filename_size) + filename[bytes_to_copy] = 0; + } +- if (extrafield_size > 0 && extrafield != NULL) { ++ if (extrafield_size > 0 && extrafield) { + bytes_to_copy = (uint16_t)extrafield_size; + if (bytes_to_copy > file_info->extrafield_size) + bytes_to_copy = file_info->extrafield_size; + memcpy(extrafield, file_info->extrafield, bytes_to_copy); + } +- if (comment_size > 0 && comment != NULL && file_info->comment != NULL) { ++ if (comment_size > 0 && comment && file_info->comment) { + bytes_to_copy = (uint16_t)comment_size; + if (bytes_to_copy > file_info->comment_size) + bytes_to_copy = file_info->comment_size; +@@ -1064,7 +1064,7 @@ int unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_info, char *fi + + int unzGoToFirstFile(unzFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + compat->entry_index = 0; + return mz_zip_goto_first_entry(compat->handle); +@@ -1073,7 +1073,7 @@ int unzGoToFirstFile(unzFile file) { + int unzGoToNextFile(unzFile file) { + mz_compat *compat = (mz_compat *)file; + int32_t err = MZ_OK; +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + err = mz_zip_goto_next_entry(compat->handle); + if (err != MZ_END_OF_LIST) +@@ -1088,7 +1088,7 @@ int unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filena + int32_t err = MZ_OK; + int32_t result = 0; + +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + + preserve_index = compat->entry_index; +@@ -1135,7 +1135,7 @@ int unzGoToFilePos(unzFile file, unz_file_pos *file_pos) { + mz_compat *compat = (mz_compat *)file; + unz64_file_pos file_pos64; + +- if (compat == NULL || file_pos == NULL) ++ if (!compat || !file_pos) + return UNZ_PARAMERROR; + + file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory; +@@ -1148,7 +1148,7 @@ int unzGetFilePos64(unzFile file, unz64_file_pos *file_pos) { + mz_compat *compat = (mz_compat *)file; + int64_t offset = 0; + +- if (compat == NULL || file_pos == NULL) ++ if (!compat || !file_pos) + return UNZ_PARAMERROR; + + offset = unzGetOffset64(file); +@@ -1164,7 +1164,7 @@ int unzGoToFilePos64(unzFile file, const unz64_file_pos *file_pos) { + mz_compat *compat = (mz_compat *)file; + int32_t err = MZ_OK; + +- if (compat == NULL || file_pos == NULL) ++ if (!compat || !file_pos) + return UNZ_PARAMERROR; + + err = mz_zip_goto_entry(compat->handle, file_pos->pos_in_zip_directory); +@@ -1179,7 +1179,7 @@ unsigned long unzGetOffset(unzFile file) { + + int64_t unzGetOffset64(unzFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + return mz_zip_get_entry(compat->handle); + } +@@ -1190,7 +1190,7 @@ int unzSetOffset(unzFile file, unsigned long pos) { + + int unzSetOffset64(unzFile file, int64_t pos) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + return (int)mz_zip_goto_entry(compat->handle, pos); + } +@@ -1201,7 +1201,7 @@ int unzGetLocalExtrafield(unzFile file, void *buf, unsigned int len) { + int32_t err = MZ_OK; + int32_t bytes_to_copy = 0; + +- if (compat == NULL || buf == NULL || len >= INT32_MAX) ++ if (!compat || !buf || len >= INT32_MAX) + return UNZ_PARAMERROR; + + err = mz_zip_entry_get_local_info(compat->handle, &file_info); +@@ -1230,7 +1230,7 @@ uint64_t unzTell64(unzFile file) { + + uint64_t unztell64(unzFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + return compat->total_out; + } +@@ -1246,7 +1246,7 @@ int unzSeek64(unzFile file, int64_t offset, int origin) { + int32_t err = MZ_OK; + void *stream = NULL; + +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + err = mz_zip_entry_get_info(compat->handle, &file_info); + if (err != MZ_OK) +@@ -1283,7 +1283,7 @@ int unzeof(unzFile file) { + mz_zip_file *file_info = NULL; + int32_t err = MZ_OK; + +- if (compat == NULL) ++ if (!compat) + return UNZ_PARAMERROR; + err = mz_zip_entry_get_info(compat->handle, &file_info); + if (err != MZ_OK) +@@ -1295,7 +1295,7 @@ int unzeof(unzFile file) { + + void* unzGetStream(unzFile file) { + mz_compat *compat = (mz_compat *)file; +- if (compat == NULL) ++ if (!compat) + return NULL; + return (void *)compat->stream; + } +diff --git a/src/minizip/mz_compat.h b/src/minizip/mz_compat.h +index 808cc74e1..6e6a916ff 100644 +--- a/src/minizip/mz_compat.h ++++ b/src/minizip/mz_compat.h +@@ -1,7 +1,7 @@ + /* mz_compat.h -- Backwards compatible interface for older versions + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + Copyright (C) 1998-2010 Gilles Vollant + https://www.winimage.com/zLibDll/minizip.html +@@ -63,7 +63,7 @@ typedef uint64_t ZPOS64_T; + typedef void* (ZCALLBACK *open_file_func) (void *opaque, const char *filename, int mode); + typedef void* (ZCALLBACK *open64_file_func) (void *opaque, const void *filename, int mode); + typedef unsigned long (ZCALLBACK *read_file_func) (void *opaque, void *stream, void* buf, unsigned long size); +-typedef unsigned long (ZCALLBACK *write_file_func) (void *opaque, void *stream, const void* buf, ++typedef unsigned long (ZCALLBACK *write_file_func) (void *opaque, void *stream, const void* buf, + unsigned long size); + typedef int (ZCALLBACK *close_file_func) (void *opaque, void *stream); + typedef int (ZCALLBACK *testerror_file_func)(void *opaque, void *stream); +diff --git a/src/minizip/mz_crypt.c b/src/minizip/mz_crypt.c +index f21b3a1ab..0f3f28433 100644 +--- a/src/minizip/mz_crypt.c ++++ b/src/minizip/mz_crypt.c +@@ -1,14 +1,13 @@ + /* mz_crypt.c -- Crypto/hash functions + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. + See the accompanying LICENSE file for the full text of the license. + */ + +- + #include "mz.h" + #include "mz_os.h" + #include "mz_crypt.h" +@@ -16,7 +15,7 @@ + #if defined(HAVE_ZLIB) + # if !defined(ZLIB_COMPAT) + # include "zlib-ng.h" +-# define ZLIB_PREFIX(x) zng_ ## x ++# define ZLIB_PREFIX(x) zng_##x + # else + # include "zlib.h" + # define ZLIB_PREFIX(x) x +@@ -105,19 +104,19 @@ uint32_t mz_crypt_crc32_update(uint32_t value, const uint8_t *buf, int32_t size) + + #if defined(HAVE_WZAES) + int32_t mz_crypt_pbkdf2(uint8_t *password, int32_t password_length, uint8_t *salt, +- int32_t salt_length, int32_t iteration_count, uint8_t *key, int32_t key_length) { ++ int32_t salt_length, uint32_t iteration_count, uint8_t *key, uint16_t key_length) { + void *hmac1 = NULL; + void *hmac2 = NULL; + void *hmac3 = NULL; + int32_t err = MZ_OK; + uint16_t i = 0; +- uint16_t j = 0; ++ uint32_t j = 0; + uint16_t k = 0; + uint16_t block_count = 0; + uint8_t uu[MZ_HASH_SHA1_SIZE]; + uint8_t ux[MZ_HASH_SHA1_SIZE]; + +- if (password == NULL || salt == NULL || key == NULL) ++ if (!password || !salt || !key) + return MZ_PARAM_ERROR; + + memset(key, 0, key_length); +@@ -157,7 +156,7 @@ int32_t mz_crypt_pbkdf2(uint8_t *password, int32_t password_length, uint8_t *sa + if (err != MZ_OK) + break; + +- for(k = 0; k < MZ_HASH_SHA1_SIZE; k += 1) ++ for (k = 0; k < MZ_HASH_SHA1_SIZE; k += 1) + ux[k] ^= uu[k]; + + err = mz_crypt_hmac_copy(hmac1, hmac3); +diff --git a/src/minizip/mz_crypt.h b/src/minizip/mz_crypt.h +index 59a193c02..9a341fc61 100644 +--- a/src/minizip/mz_crypt.h ++++ b/src/minizip/mz_crypt.h +@@ -1,7 +1,7 @@ + /* mz_crypt.h -- Crypto/hash functions + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +@@ -20,7 +20,7 @@ extern "C" { + uint32_t mz_crypt_crc32_update(uint32_t value, const uint8_t *buf, int32_t size); + + int32_t mz_crypt_pbkdf2(uint8_t *password, int32_t password_length, uint8_t *salt, +- int32_t salt_length, int32_t iteration_count, uint8_t *key, int32_t key_length); ++ int32_t salt_length, uint32_t iteration_count, uint8_t *key, uint16_t key_length); + + /***************************************************************************/ + +diff --git a/src/minizip/mz_os.c b/src/minizip/mz_os.c +index c93ed0475..6a3706086 100644 +--- a/src/minizip/mz_os.c ++++ b/src/minizip/mz_os.c +@@ -1,7 +1,7 @@ + /* mz_os.c -- System functions + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + Copyright (C) 1998-2010 Gilles Vollant + https://www.winimage.com/zLibDll/minizip.html +@@ -17,13 +17,14 @@ + #include "mz_strm_os.h" + + #include /* tolower */ ++#include + + /***************************************************************************/ + + int32_t mz_path_combine(char *path, const char *join, int32_t max_path) { + int32_t path_len = 0; + +- if (path == NULL || join == NULL || max_path == 0) ++ if (!path || !join || !max_path) + return MZ_PARAM_ERROR; + + path_len = (int32_t)strlen(path); +@@ -130,7 +131,6 @@ int32_t mz_path_resolve(const char *path, char *output, int32_t max_output) { + const char *check = output; + char *target = output; + +- + if (max_output <= 0) + return MZ_PARAM_ERROR; + +@@ -213,7 +213,7 @@ int32_t mz_path_resolve(const char *path, char *output, int32_t max_output) { + int32_t mz_path_remove_filename(char *path) { + char *path_ptr = NULL; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + + path_ptr = path + strlen(path) - 1; +@@ -236,7 +236,7 @@ int32_t mz_path_remove_filename(char *path) { + int32_t mz_path_remove_extension(char *path) { + char *path_ptr = NULL; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + + path_ptr = path + strlen(path) - 1; +@@ -261,7 +261,7 @@ int32_t mz_path_remove_extension(char *path) { + int32_t mz_path_get_filename(const char *path, const char **filename) { + const char *match = NULL; + +- if (path == NULL || filename == NULL) ++ if (!path || !filename) + return MZ_PARAM_ERROR; + + *filename = NULL; +@@ -271,7 +271,7 @@ int32_t mz_path_get_filename(const char *path, const char **filename) { + *filename = match + 1; + } + +- if (*filename == NULL) ++ if (!*filename) + return MZ_EXIST_ERROR; + + return MZ_OK; +@@ -279,21 +279,14 @@ int32_t mz_path_get_filename(const char *path, const char **filename) { + + int32_t mz_dir_make(const char *path) { + int32_t err = MZ_OK; +- size_t len = 0; + char *current_dir = NULL; + char *match = NULL; + char hold = 0; + +- +- len = strlen(path); +- if (len <= 0 || len > INT16_MAX) +- return 0; +- +- current_dir = (char *)MZ_ALLOC(len + 1); +- if (current_dir == NULL) ++ current_dir = strdup(path); ++ if (!current_dir) + return MZ_MEM_ERROR; + +- strcpy(current_dir, path); + mz_path_remove_slash(current_dir); + + err = mz_os_make_dir(current_dir); +@@ -316,7 +309,7 @@ int32_t mz_dir_make(const char *path) { + } + } + +- MZ_FREE(current_dir); ++ free(current_dir); + return err; + } + +diff --git a/src/minizip/mz_os.h b/src/minizip/mz_os.h +index b3e2a58c1..4505bc393 100644 +--- a/src/minizip/mz_os.h ++++ b/src/minizip/mz_os.h +@@ -1,7 +1,7 @@ + /* mz_os.h -- System functions + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +@@ -41,8 +41,9 @@ extern "C" { + (MZ_VERSION_MADEBY_ZIP_VERSION)) + + #define MZ_PATH_SLASH_UNIX ('/') ++#define MZ_PATH_SLASH_WINDOWS ('\\') + #if defined(_WIN32) +-# define MZ_PATH_SLASH_PLATFORM ('\\') ++# define MZ_PATH_SLASH_PLATFORM (MZ_PATH_SLASH_WINDOWS) + #else + # define MZ_PATH_SLASH_PLATFORM (MZ_PATH_SLASH_UNIX) + #endif +diff --git a/src/minizip/mz_os_posix.c b/src/minizip/mz_os_posix.c +index 85615ac0c..b4eb1937e 100644 +--- a/src/minizip/mz_os_posix.c ++++ b/src/minizip/mz_os_posix.c +@@ -1,7 +1,7 @@ + /* mz_os_posix.c -- System functions for posix + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +@@ -17,7 +17,7 @@ + #if defined(HAVE_ICONV) + #include + #endif +- ++#include + #include + #include + +@@ -34,11 +34,7 @@ + # include + #endif + #if defined(HAVE_LIBBSD) +-# include +-# ifndef __u_char_defined +- typedef unsigned char u_char; +-# endif +-# include /* arc4random_buf */ ++# include /* arc4random_buf */ + #endif + + /***************************************************************************/ +@@ -53,7 +49,7 @@ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { + uint8_t *string_utf8 = NULL; + uint8_t *string_utf8_ptr = NULL; + +- if (string == NULL) ++ if (!string) + return NULL; + + if (encoding == MZ_ENCODING_CODEPAGE_437) +@@ -75,12 +71,10 @@ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { + + string_length = strlen(string); + string_utf8_size = string_length * 2; +- string_utf8 = (uint8_t *)MZ_ALLOC((int32_t)(string_utf8_size + 1)); ++ string_utf8 = (uint8_t *)calloc((int32_t)(string_utf8_size + 1), sizeof(char)); + string_utf8_ptr = string_utf8; + + if (string_utf8) { +- memset(string_utf8, 0, string_utf8_size + 1); +- + result = iconv(cd, (char **)&string, &string_length, + (char **)&string_utf8_ptr, &string_utf8_size); + } +@@ -88,7 +82,7 @@ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { + iconv_close(cd); + + if (result == (size_t)-1) { +- MZ_FREE(string_utf8); ++ free(string_utf8); + string_utf8 = NULL; + } + +@@ -96,28 +90,35 @@ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { + } + #else + uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { +- size_t string_length = 0; +- uint8_t *string_copy = NULL; +- +- string_length = strlen(string); +- string_copy = (uint8_t *)MZ_ALLOC((int32_t)(string_length + 1)); +- strncpy((char *)string_copy, string, string_length); +- string_copy[string_length] = 0; +- +- return string_copy; ++ return strdup(string); + } + #endif + + void mz_os_utf8_string_delete(uint8_t **string) { +- if (string != NULL) { +- MZ_FREE(*string); ++ if (string) { ++ free(*string); + *string = NULL; + } + } + + /***************************************************************************/ + +-#if defined(HAVE_ARC4RANDOM_BUF) ++#if defined(HAVE_GETRANDOM) ++int32_t mz_os_rand(uint8_t *buf, int32_t size) { ++ int32_t left = size; ++ int32_t written = 0; ++ ++ while (left > 0) { ++ written = getrandom(buf, left, 0); ++ if (written < 0) ++ return MZ_INTERNAL_ERROR; ++ ++ buf += written; ++ left -= written; ++ } ++ return size - left; ++} ++#elif defined(HAVE_ARC4RANDOM_BUF) + int32_t mz_os_rand(uint8_t *buf, int32_t size) { + if (size < 0) + return 0; +@@ -139,21 +140,6 @@ int32_t mz_os_rand(uint8_t *buf, int32_t size) { + } + return size - left; + } +-#elif defined(HAVE_GETRANDOM) +-int32_t mz_os_rand(uint8_t *buf, int32_t size) { +- int32_t left = size; +- int32_t written = 0; +- +- while (left > 0) { +- written = getrandom(buf, left, 0); +- if (written < 0) +- return MZ_INTERNAL_ERROR; +- +- buf += written; +- left -= written; +- } +- return size - left; +-} + #else + int32_t mz_os_rand(uint8_t *buf, int32_t size) { + static unsigned calls = 0; +@@ -220,19 +206,16 @@ int32_t mz_os_get_file_date(const char *path, time_t *modified_date, time_t *acc + + if (strcmp(path, "-") != 0) { + /* Not all systems allow stat'ing a file with / appended */ +- len = strlen(path); +- name = (char *)malloc(len + 1); +- strncpy(name, path, len); +- name[len - 1] = 0; ++ name = strdup(path); + mz_path_remove_slash(name); + + if (stat(name, &path_stat) == 0) { +- if (modified_date != NULL) ++ if (modified_date) + *modified_date = path_stat.st_mtime; +- if (accessed_date != NULL) ++ if (accessed_date) + *accessed_date = path_stat.st_atime; + /* Creation date not supported */ +- if (creation_date != NULL) ++ if (creation_date) + *creation_date = 0; + + err = MZ_OK; +@@ -295,13 +278,13 @@ DIR* mz_os_open_dir(const char *path) { + } + + struct dirent* mz_os_read_dir(DIR *dir) { +- if (dir == NULL) ++ if (!dir) + return NULL; + return readdir(dir); + } + + int32_t mz_os_close_dir(DIR *dir) { +- if (dir == NULL) ++ if (!dir) + return MZ_PARAM_ERROR; + if (closedir(dir) == -1) + return MZ_INTERNAL_ERROR; +@@ -360,8 +343,15 @@ uint64_t mz_os_ms_time(void) { + + ts.tv_sec = mts.tv_sec; + ts.tv_nsec = mts.tv_nsec; +-#else ++#elif !defined(_POSIX_MONOTONIC_CLOCK) || _POSIX_MONOTONIC_CLOCK < 0 ++ clock_gettime(CLOCK_REALTIME, &ts); ++#elif _POSIX_MONOTONIC_CLOCK > 0 + clock_gettime(CLOCK_MONOTONIC, &ts); ++#else ++ if (sysconf(_SC_MONOTONIC_CLOCK) > 0) ++ clock_gettime(CLOCK_MONOTONIC, &ts); ++ else ++ clock_gettime(CLOCK_REALTIME, &ts); + #endif + + return ((uint64_t)ts.tv_sec * 1000) + ((uint64_t)ts.tv_nsec / 1000000); +diff --git a/src/minizip/mz_os_win32.c b/src/minizip/mz_os_win32.c +index 7effef731..85c7b3a24 100644 +--- a/src/minizip/mz_os_win32.c ++++ b/src/minizip/mz_os_win32.c +@@ -1,28 +1,22 @@ + /* mz_os_win32.c -- System functions for Windows + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. + See the accompanying LICENSE file for the full text of the license. + */ + +- + #include "mz.h" + #include "mz_os.h" + #include "mz_strm_os.h" + + #include ++#include + + /***************************************************************************/ + +-#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(MZ_WINRT_API))) +-# if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +-# define MZ_WINRT_API 1 +-# endif +-#endif +- + #ifndef SYMBOLIC_LINK_FLAG_DIRECTORY + # define SYMBOLIC_LINK_FLAG_DIRECTORY 0x1 + #endif +@@ -45,19 +39,17 @@ wchar_t *mz_os_unicode_string_create(const char *string, int32_t encoding) { + string_wide_size = MultiByteToWideChar(encoding, 0, string, -1, NULL, 0); + if (string_wide_size == 0) + return NULL; +- string_wide = (wchar_t *)MZ_ALLOC((string_wide_size + 1) * sizeof(wchar_t)); +- if (string_wide == NULL) ++ string_wide = (wchar_t *)calloc(string_wide_size + 1, sizeof(wchar_t)); ++ if (!string_wide) + return NULL; + +- memset(string_wide, 0, sizeof(wchar_t) * (string_wide_size + 1)); + MultiByteToWideChar(encoding, 0, string, -1, string_wide, string_wide_size); +- + return string_wide; + } + + void mz_os_unicode_string_delete(wchar_t **string) { +- if (string != NULL) { +- MZ_FREE(*string); ++ if (string) { ++ free(*string); + *string = NULL; + } + } +@@ -70,12 +62,10 @@ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { + string_wide = mz_os_unicode_string_create(string, encoding); + if (string_wide) { + string_utf8_size = WideCharToMultiByte(CP_UTF8, 0, string_wide, -1, NULL, 0, NULL, NULL); +- string_utf8 = (uint8_t *)MZ_ALLOC((string_utf8_size + 1) * sizeof(wchar_t)); ++ string_utf8 = (uint8_t *)calloc(string_utf8_size + 1, sizeof(wchar_t)); + +- if (string_utf8) { +- memset(string_utf8, 0, string_utf8_size + 1); ++ if (string_utf8) + WideCharToMultiByte(CP_UTF8, 0, string_wide, -1, (char *)string_utf8, string_utf8_size, NULL, NULL); +- } + + mz_os_unicode_string_delete(&string_wide); + } +@@ -90,19 +80,17 @@ uint8_t *mz_os_utf8_string_create_from_unicode(const wchar_t *string, int32_t en + MZ_UNUSED(encoding); + + string_utf8_size = WideCharToMultiByte(CP_UTF8, 0, string, -1, NULL, 0, NULL, NULL); +- string_utf8 = (uint8_t *)MZ_ALLOC((string_utf8_size + 1) * sizeof(wchar_t)); ++ string_utf8 = (uint8_t *)calloc(string_utf8_size + 1, sizeof(wchar_t)); + +- if (string_utf8) { +- memset(string_utf8, 0, string_utf8_size + 1); ++ if (string_utf8) + WideCharToMultiByte(CP_UTF8, 0, string, -1, (char *)string_utf8, string_utf8_size, NULL, NULL); +- } + + return string_utf8; + } + + void mz_os_utf8_string_delete(uint8_t **string) { +- if (string != NULL) { +- MZ_FREE(*string); ++ if (string) { ++ free(*string); + *string = NULL; + } + } +@@ -116,7 +104,7 @@ int32_t mz_os_rand(uint8_t *buf, int32_t size) { + for (len = 0; len < (int)size; len += 1) { + if (len % 8 == 0) + QueryPerformanceCounter((LARGE_INTEGER *)pentium_tsc); +- buf[len] = ((unsigned char*)pentium_tsc)[len % 8]; ++ buf[len] = ((unsigned char *)pentium_tsc)[len % 8]; + } + + return len; +@@ -128,20 +116,20 @@ int32_t mz_os_rename(const char *source_path, const char *target_path) { + int32_t result = 0; + int32_t err = MZ_OK; + +- if (source_path == NULL || target_path == NULL) ++ if (!source_path || !target_path) + return MZ_PARAM_ERROR; + + source_path_wide = mz_os_unicode_string_create(source_path, MZ_ENCODING_UTF8); +- if (source_path_wide == NULL) { ++ if (!source_path_wide) { + err = MZ_PARAM_ERROR; + } else { + target_path_wide = mz_os_unicode_string_create(target_path, MZ_ENCODING_UTF8); +- if (target_path_wide == NULL) ++ if (!target_path_wide) + err = MZ_PARAM_ERROR; + } + + if (err == MZ_OK) { +-#ifdef MZ_WINRT_API ++#if _WIN32_WINNT >= _WIN32_WINNT_WINXP + result = MoveFileExW(source_path_wide, target_path_wide, MOVEFILE_WRITE_THROUGH); + #else + result = MoveFileW(source_path_wide, target_path_wide); +@@ -162,10 +150,10 @@ int32_t mz_os_unlink(const char *path) { + wchar_t *path_wide = NULL; + int32_t result = 0; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + + if (mz_os_is_dir(path) == MZ_OK) +@@ -185,10 +173,10 @@ int32_t mz_os_file_exists(const char *path) { + wchar_t *path_wide = NULL; + DWORD attribs = 0; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + + attribs = GetFileAttributesW(path_wide); +@@ -205,12 +193,12 @@ int64_t mz_os_get_file_size(const char *path) { + LARGE_INTEGER large_size; + wchar_t *path_wide = NULL; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; +-#ifdef MZ_WINRT_API ++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8 + handle = CreateFile2(path_wide, GENERIC_READ, 0, OPEN_EXISTING, NULL); + #else + handle = CreateFileW(path_wide, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); +@@ -247,21 +235,21 @@ int32_t mz_os_get_file_date(const char *path, time_t *modified_date, time_t *acc + wchar_t *path_wide = NULL; + int32_t err = MZ_INTERNAL_ERROR; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + + handle = FindFirstFileW(path_wide, &ff32); +- MZ_FREE(path_wide); ++ free(path_wide); + + if (handle != INVALID_HANDLE_VALUE) { +- if (modified_date != NULL) ++ if (modified_date) + mz_os_file_to_unix_time(ff32.ftLastWriteTime, modified_date); +- if (accessed_date != NULL) ++ if (accessed_date) + mz_os_file_to_unix_time(ff32.ftLastAccessTime, accessed_date); +- if (creation_date != NULL) ++ if (creation_date) + mz_os_file_to_unix_time(ff32.ftCreationTime, creation_date); + + FindClose(handle); +@@ -277,13 +265,13 @@ int32_t mz_os_set_file_date(const char *path, time_t modified_date, time_t acces + wchar_t *path_wide = NULL; + int32_t err = MZ_OK; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + +-#ifdef MZ_WINRT_API ++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8 + handle = CreateFile2(path_wide, GENERIC_READ | GENERIC_WRITE, 0, OPEN_EXISTING, NULL); + #else + handle = CreateFileW(path_wide, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); +@@ -313,10 +301,10 @@ int32_t mz_os_get_file_attribs(const char *path, uint32_t *attributes) { + wchar_t *path_wide = NULL; + int32_t err = MZ_OK; + +- if (path == NULL || attributes == NULL) ++ if (!path || !attributes) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + + *attributes = GetFileAttributesW(path_wide); +@@ -332,10 +320,10 @@ int32_t mz_os_set_file_attribs(const char *path, uint32_t attributes) { + wchar_t *path_wide = NULL; + int32_t err = MZ_OK; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + + if (SetFileAttributesW(path_wide, attributes) == 0) +@@ -349,7 +337,7 @@ int32_t mz_os_make_dir(const char *path) { + wchar_t *path_wide = NULL; + int32_t err = MZ_OK; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + + /* Don't try to create a drive letter */ +@@ -357,7 +345,7 @@ int32_t mz_os_make_dir(const char *path) { + return mz_os_is_dir(path); + + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + + if (CreateDirectoryW(path_wide, NULL) == 0) { +@@ -377,8 +365,7 @@ DIR *mz_os_open_dir(const char *path) { + char fixed_path[320]; + void *handle = NULL; + +- +- if (path == NULL) ++ if (!path) + return NULL; + + strncpy(fixed_path, path, sizeof(fixed_path) - 1); +@@ -388,7 +375,7 @@ DIR *mz_os_open_dir(const char *path) { + mz_path_combine(fixed_path, "*", sizeof(fixed_path)); + + path_wide = mz_os_unicode_string_create(fixed_path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return NULL; + + handle = FindFirstFileW(path_wide, &find_data); +@@ -397,9 +384,11 @@ DIR *mz_os_open_dir(const char *path) { + if (handle == INVALID_HANDLE_VALUE) + return NULL; + +- dir_int = (DIR_int *)MZ_ALLOC(sizeof(DIR_int)); +- if (dir_int == NULL) ++ dir_int = (DIR_int *)malloc(sizeof(DIR_int)); ++ if (!dir_int) { ++ FindClose(handle); + return NULL; ++ } + dir_int->find_handle = handle; + dir_int->end = 0; + +@@ -411,7 +400,7 @@ DIR *mz_os_open_dir(const char *path) { + struct dirent* mz_os_read_dir(DIR *dir) { + DIR_int *dir_int; + +- if (dir == NULL) ++ if (!dir) + return NULL; + + dir_int = (DIR_int *)dir; +@@ -434,13 +423,13 @@ struct dirent* mz_os_read_dir(DIR *dir) { + int32_t mz_os_close_dir(DIR *dir) { + DIR_int *dir_int; + +- if (dir == NULL) ++ if (!dir) + return MZ_PARAM_ERROR; + + dir_int = (DIR_int *)dir; + if (dir_int->find_handle != INVALID_HANDLE_VALUE) + FindClose(dir_int->find_handle); +- MZ_FREE(dir_int); ++ free(dir_int); + return MZ_OK; + } + +@@ -448,10 +437,10 @@ int32_t mz_os_is_dir(const char *path) { + wchar_t *path_wide = NULL; + uint32_t attribs = 0; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + + attribs = GetFileAttributesW(path_wide); +@@ -469,10 +458,10 @@ int32_t mz_os_is_symlink(const char *path) { + wchar_t *path_wide = NULL; + uint32_t attribs = 0; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + + attribs = GetFileAttributesW(path_wide); +@@ -488,6 +477,7 @@ int32_t mz_os_is_symlink(const char *path) { + + int32_t mz_os_make_symlink(const char *path, const char *target_path) { + typedef BOOLEAN (WINAPI *LPCREATESYMBOLICLINKW)(LPCWSTR, LPCWSTR, DWORD); ++ MEMORY_BASIC_INFORMATION mbi; + LPCREATESYMBOLICLINKW create_symbolic_link_w = NULL; + HMODULE kernel32_mod = NULL; + wchar_t *path_wide = NULL; +@@ -495,33 +485,29 @@ int32_t mz_os_make_symlink(const char *path, const char *target_path) { + int32_t err = MZ_OK; + int32_t flags = 0; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + +-#ifdef MZ_WINRT_API +- MEMORY_BASIC_INFORMATION mbi; ++ // Use VirtualQuery instead of GetModuleHandleW for UWP + memset(&mbi, 0, sizeof(mbi)); + VirtualQuery(VirtualQuery, &mbi, sizeof(mbi)); + kernel32_mod = (HMODULE)mbi.AllocationBase; +-#else +- kernel32_mod = GetModuleHandleW(L"kernel32.dll"); +-#endif + +- if (kernel32_mod == NULL) ++ if (!kernel32_mod) + return MZ_SUPPORT_ERROR; + + create_symbolic_link_w = (LPCREATESYMBOLICLINKW)GetProcAddress(kernel32_mod, "CreateSymbolicLinkW"); +- if (create_symbolic_link_w == NULL) { ++ if (!create_symbolic_link_w) { + return MZ_SUPPORT_ERROR; + } + + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) { ++ if (!path_wide) { + return MZ_PARAM_ERROR; + } + + target_path_wide = mz_os_unicode_string_create(target_path, MZ_ENCODING_UTF8); +- if (target_path_wide != NULL) { ++ if (target_path_wide) { + if (mz_path_has_slash(target_path) == MZ_OK) + flags |= SYMBOLIC_LINK_FLAG_DIRECTORY; + +@@ -575,13 +561,13 @@ int32_t mz_os_read_symlink(const char *path, char *target_path, int32_t max_targ + int32_t err = MZ_OK; + uint8_t *target_path_utf8 = NULL; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + +-#ifdef MZ_WINRT_API ++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8 + CREATEFILE2_EXTENDED_PARAMETERS extended_params; + memset(&extended_params, 0, sizeof(extended_params)); + extended_params.dwSize = sizeof(extended_params); +@@ -609,7 +595,7 @@ int32_t mz_os_read_symlink(const char *path, char *target_path, int32_t max_targ + if (target_path_len > reparse_data->SymbolicLinkReparseBuffer.PrintNameLength) + target_path_len = reparse_data->SymbolicLinkReparseBuffer.PrintNameLength; + +- target_path_wide = (wchar_t *)MZ_ALLOC(target_path_len + sizeof(wchar_t)); ++ target_path_wide = (wchar_t *)malloc(target_path_len + sizeof(wchar_t)); + if (target_path_wide) { + target_path_idx = reparse_data->SymbolicLinkReparseBuffer.PrintNameOffset / sizeof(wchar_t); + memcpy(target_path_wide, &reparse_data->SymbolicLinkReparseBuffer.PathBuffer[target_path_idx], +@@ -629,7 +615,7 @@ int32_t mz_os_read_symlink(const char *path, char *target_path, int32_t max_targ + err = MZ_MEM_ERROR; + } + +- MZ_FREE(target_path_wide); ++ free(target_path_wide); + } else { + err = MZ_MEM_ERROR; + } +diff --git a/src/minizip/mz_strm.c b/src/minizip/mz_strm.c +index da7d5872d..35d4c62fd 100644 +--- a/src/minizip/mz_strm.c ++++ b/src/minizip/mz_strm.c +@@ -1,7 +1,7 @@ + /* mz_strm.c -- Stream interface + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +@@ -19,21 +19,21 @@ + + int32_t mz_stream_open(void *stream, const char *path, int32_t mode) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->open == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->open) + return MZ_STREAM_ERROR; + return strm->vtbl->open(strm, path, mode); + } + + int32_t mz_stream_is_open(void *stream) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->is_open == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->is_open) + return MZ_STREAM_ERROR; + return strm->vtbl->is_open(strm); + } + + int32_t mz_stream_read(void *stream, void *buf, int32_t size) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->read == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->read) + return MZ_PARAM_ERROR; + if (mz_stream_is_open(stream) != MZ_OK) + return MZ_STREAM_ERROR; +@@ -102,7 +102,7 @@ int32_t mz_stream_write(void *stream, const void *buf, int32_t size) { + mz_stream *strm = (mz_stream *)stream; + if (size == 0) + return size; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->write == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->write) + return MZ_PARAM_ERROR; + if (mz_stream_is_open(stream) != MZ_OK) + return MZ_STREAM_ERROR; +@@ -165,9 +165,9 @@ int32_t mz_stream_copy_stream(void *target, mz_stream_write_cb write_cb, void *s + int32_t read = 0; + int32_t written = 0; + +- if (write_cb == NULL) ++ if (!write_cb) + write_cb = mz_stream_write; +- if (read_cb == NULL) ++ if (!read_cb) + read_cb = mz_stream_read; + + while (len > 0) { +@@ -192,9 +192,9 @@ int32_t mz_stream_copy_stream_to_end(void *target, mz_stream_write_cb write_cb, + int32_t read = 0; + int32_t written = 0; + +- if (write_cb == NULL) ++ if (!write_cb) + write_cb = mz_stream_write; +- if (read_cb == NULL) ++ if (!read_cb) + read_cb = mz_stream_read; + + read = read_cb(source, buf, sizeof(buf)); +@@ -213,7 +213,7 @@ int32_t mz_stream_copy_stream_to_end(void *target, mz_stream_write_cb write_cb, + + int64_t mz_stream_tell(void *stream) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->tell == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->tell) + return MZ_PARAM_ERROR; + if (mz_stream_is_open(stream) != MZ_OK) + return MZ_STREAM_ERROR; +@@ -222,7 +222,7 @@ int64_t mz_stream_tell(void *stream) { + + int32_t mz_stream_seek(void *stream, int64_t offset, int32_t origin) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->seek == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->seek) + return MZ_PARAM_ERROR; + if (mz_stream_is_open(stream) != MZ_OK) + return MZ_STREAM_ERROR; +@@ -243,7 +243,7 @@ int32_t mz_stream_find(void *stream, const void *find, int32_t find_size, int64_ + uint8_t first = 1; + int32_t err = MZ_OK; + +- if (stream == NULL || find == NULL || position == NULL) ++ if (!stream || !find || !position) + return MZ_PARAM_ERROR; + if (find_size < 0 || find_size >= (int32_t)sizeof(buf)) + return MZ_PARAM_ERROR; +@@ -301,7 +301,7 @@ int32_t mz_stream_find_reverse(void *stream, const void *find, int32_t find_size + int32_t i = 0; + int32_t err = MZ_OK; + +- if (stream == NULL || find == NULL || position == NULL) ++ if (!stream || !find || !position) + return MZ_PARAM_ERROR; + if (find_size < 0 || find_size >= (int32_t)sizeof(buf)) + return MZ_PARAM_ERROR; +@@ -356,7 +356,7 @@ int32_t mz_stream_find_reverse(void *stream, const void *find, int32_t find_size + + int32_t mz_stream_close(void *stream) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->close == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->close) + return MZ_PARAM_ERROR; + if (mz_stream_is_open(stream) != MZ_OK) + return MZ_STREAM_ERROR; +@@ -365,7 +365,7 @@ int32_t mz_stream_close(void *stream) { + + int32_t mz_stream_error(void *stream) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->error == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->error) + return MZ_PARAM_ERROR; + return strm->vtbl->error(strm); + } +@@ -378,39 +378,37 @@ int32_t mz_stream_set_base(void *stream, void *base) { + + void* mz_stream_get_interface(void *stream) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL) ++ if (!strm || !strm->vtbl) + return NULL; + return (void *)strm->vtbl; + } + + int32_t mz_stream_get_prop_int64(void *stream, int32_t prop, int64_t *value) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->get_prop_int64 == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->get_prop_int64) + return MZ_PARAM_ERROR; + return strm->vtbl->get_prop_int64(stream, prop, value); + } + + int32_t mz_stream_set_prop_int64(void *stream, int32_t prop, int64_t value) { + mz_stream *strm = (mz_stream *)stream; +- if (strm == NULL || strm->vtbl == NULL || strm->vtbl->set_prop_int64 == NULL) ++ if (!strm || !strm->vtbl || !strm->vtbl->set_prop_int64) + return MZ_PARAM_ERROR; + return strm->vtbl->set_prop_int64(stream, prop, value); + } + + void *mz_stream_create(void **stream, mz_stream_vtbl *vtbl) { +- if (stream == NULL) +- return NULL; +- if (vtbl == NULL || vtbl->create == NULL) ++ if (!stream || !vtbl || !vtbl->create) + return NULL; + return vtbl->create(stream); + } + + void mz_stream_delete(void **stream) { + mz_stream *strm = NULL; +- if (stream == NULL) ++ if (!stream) + return; + strm = (mz_stream *)*stream; +- if (strm != NULL && strm->vtbl != NULL && strm->vtbl->destroy != NULL) ++ if (strm && strm->vtbl && strm->vtbl->destroy) + strm->vtbl->destroy(stream); + *stream = NULL; + } +@@ -538,12 +536,10 @@ static mz_stream_vtbl mz_stream_raw_vtbl = { + void *mz_stream_raw_create(void **stream) { + mz_stream_raw *raw = NULL; + +- raw = (mz_stream_raw *)MZ_ALLOC(sizeof(mz_stream_raw)); +- if (raw != NULL) { +- memset(raw, 0, sizeof(mz_stream_raw)); ++ raw = (mz_stream_raw *)calloc(1, sizeof(mz_stream_raw)); ++ if (raw) + raw->stream.vtbl = &mz_stream_raw_vtbl; +- } +- if (stream != NULL) ++ if (stream) + *stream = raw; + + return raw; +@@ -551,10 +547,10 @@ void *mz_stream_raw_create(void **stream) { + + void mz_stream_raw_delete(void **stream) { + mz_stream_raw *raw = NULL; +- if (stream == NULL) ++ if (!stream) + return; + raw = (mz_stream_raw *)*stream; +- if (raw != NULL) +- MZ_FREE(raw); ++ if (raw) ++ free(raw); + *stream = NULL; + } +diff --git a/src/minizip/mz_strm.h b/src/minizip/mz_strm.h +index 8b0027cf5..5f88015d0 100644 +--- a/src/minizip/mz_strm.h ++++ b/src/minizip/mz_strm.h +@@ -1,7 +1,7 @@ + /* mz_strm.h -- Stream interface + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +diff --git a/src/minizip/mz_strm_mem.c b/src/minizip/mz_strm_mem.c +index f4a882d92..9a78dc1bd 100644 +--- a/src/minizip/mz_strm_mem.c ++++ b/src/minizip/mz_strm_mem.c +@@ -6,7 +6,7 @@ + + Based on Unzip ioapi.c version 0.22, May 19th, 2003 + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + Copyright (C) 2003 Justin Fletcher + Copyright (C) 1998-2003 Gilles Vollant +@@ -16,7 +16,6 @@ + See the accompanying LICENSE file for the full text of the license. + */ + +- + #include "mz.h" + #include "mz_strm.h" + #include "mz_strm_mem.h" +@@ -57,14 +56,13 @@ static int32_t mz_stream_mem_set_size(void *stream, int32_t size) { + int32_t new_size = size; + uint8_t *new_buf = NULL; + +- +- new_buf = (uint8_t *)MZ_ALLOC((uint32_t)new_size); +- if (new_buf == NULL) ++ new_buf = (uint8_t *)malloc((uint32_t)new_size); ++ if (!new_buf) + return MZ_BUF_ERROR; + + if (mem->buffer) { + memcpy(new_buf, mem->buffer, mem->size); +- MZ_FREE(mem->buffer); ++ free(mem->buffer); + } + + mem->buffer = new_buf; +@@ -92,7 +90,7 @@ int32_t mz_stream_mem_open(void *stream, const char *path, int32_t mode) { + + int32_t mz_stream_mem_is_open(void *stream) { + mz_stream_mem *mem = (mz_stream_mem *)stream; +- if (mem->buffer == NULL) ++ if (!mem->buffer) + return MZ_OPEN_ERROR; + return MZ_OK; + } +@@ -119,7 +117,7 @@ int32_t mz_stream_mem_write(void *stream, const void *buf, int32_t size) { + int32_t new_size = 0; + int32_t err = MZ_OK; + +- if (size == 0) ++ if (!size) + return size; + + if (size > mem->size - mem->position) { +@@ -213,7 +211,7 @@ int32_t mz_stream_mem_get_buffer(void *stream, const void **buf) { + + int32_t mz_stream_mem_get_buffer_at(void *stream, int64_t position, const void **buf) { + mz_stream_mem *mem = (mz_stream_mem *)stream; +- if (buf == NULL || position < 0 || mem->size < position || mem->buffer == NULL) ++ if (!buf || position < 0 || !mem->buffer|| mem->size < position) + return MZ_SEEK_ERROR; + *buf = mem->buffer + position; + return MZ_OK; +@@ -242,13 +240,12 @@ void mz_stream_mem_set_grow_size(void *stream, int32_t grow_size) { + void *mz_stream_mem_create(void **stream) { + mz_stream_mem *mem = NULL; + +- mem = (mz_stream_mem *)MZ_ALLOC(sizeof(mz_stream_mem)); +- if (mem != NULL) { +- memset(mem, 0, sizeof(mz_stream_mem)); ++ mem = (mz_stream_mem *)calloc(1, sizeof(mz_stream_mem)); ++ if (mem) { + mem->stream.vtbl = &mz_stream_mem_vtbl; + mem->grow_size = 4096; + } +- if (stream != NULL) ++ if (stream) + *stream = mem; + + return mem; +@@ -256,13 +253,13 @@ void *mz_stream_mem_create(void **stream) { + + void mz_stream_mem_delete(void **stream) { + mz_stream_mem *mem = NULL; +- if (stream == NULL) ++ if (!stream) + return; + mem = (mz_stream_mem *)*stream; +- if (mem != NULL) { +- if ((mem->mode & MZ_OPEN_MODE_CREATE) && (mem->buffer != NULL)) +- MZ_FREE(mem->buffer); +- MZ_FREE(mem); ++ if (mem) { ++ if ((mem->mode & MZ_OPEN_MODE_CREATE) && (mem->buffer)) ++ free(mem->buffer); ++ free(mem); + } + *stream = NULL; + } +diff --git a/src/minizip/mz_strm_mem.h b/src/minizip/mz_strm_mem.h +index 5bfa13d8a..22a12deae 100644 +--- a/src/minizip/mz_strm_mem.h ++++ b/src/minizip/mz_strm_mem.h +@@ -1,7 +1,7 @@ + /* mz_strm_mem.h -- Stream for memory access + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +diff --git a/src/minizip/mz_strm_os.h b/src/minizip/mz_strm_os.h +index 614e25520..83d292b95 100644 +--- a/src/minizip/mz_strm_os.h ++++ b/src/minizip/mz_strm_os.h +@@ -1,7 +1,7 @@ + /* mz_sstrm_os.h -- Stream for filesystem access + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +diff --git a/src/minizip/mz_strm_os_posix.c b/src/minizip/mz_strm_os_posix.c +index f0b5bd335..60ff502de 100644 +--- a/src/minizip/mz_strm_os_posix.c ++++ b/src/minizip/mz_strm_os_posix.c +@@ -1,7 +1,7 @@ + /* mz_strm_posix.c -- Stream for filesystem access for posix/linux + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson +@@ -13,7 +13,6 @@ + See the accompanying LICENSE file for the full text of the license. + */ + +- + #include "mz.h" + #include "mz_strm.h" + #include "mz_strm_os.h" +@@ -71,7 +70,7 @@ int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode) { + mz_stream_posix *posix = (mz_stream_posix *)stream; + const char *mode_fopen = NULL; + +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + + if ((mode & MZ_OPEN_MODE_READWRITE) == MZ_OPEN_MODE_READ) +@@ -84,7 +83,7 @@ int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode) { + return MZ_OPEN_ERROR; + + posix->handle = fopen64(path, mode_fopen); +- if (posix->handle == NULL) { ++ if (!posix->handle) { + posix->error = errno; + return MZ_OPEN_ERROR; + } +@@ -96,14 +95,14 @@ int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode) { + } + + int32_t mz_stream_os_is_open(void *stream) { +- mz_stream_posix *posix = (mz_stream_posix*)stream; +- if (posix->handle == NULL) ++ mz_stream_posix *posix = (mz_stream_posix *)stream; ++ if (!posix->handle) + return MZ_OPEN_ERROR; + return MZ_OK; + } + + int32_t mz_stream_os_read(void *stream, void *buf, int32_t size) { +- mz_stream_posix *posix = (mz_stream_posix*)stream; ++ mz_stream_posix *posix = (mz_stream_posix *)stream; + int32_t read = (int32_t)fread(buf, 1, (size_t)size, posix->handle); + if (read < size && ferror(posix->handle)) { + posix->error = errno; +@@ -113,7 +112,7 @@ int32_t mz_stream_os_read(void *stream, void *buf, int32_t size) { + } + + int32_t mz_stream_os_write(void *stream, const void *buf, int32_t size) { +- mz_stream_posix *posix = (mz_stream_posix*)stream; ++ mz_stream_posix *posix = (mz_stream_posix *)stream; + int32_t written = (int32_t)fwrite(buf, 1, (size_t)size, posix->handle); + if (written < size && ferror(posix->handle)) { + posix->error = errno; +@@ -123,7 +122,7 @@ int32_t mz_stream_os_write(void *stream, const void *buf, int32_t size) { + } + + int64_t mz_stream_os_tell(void *stream) { +- mz_stream_posix *posix = (mz_stream_posix*)stream; ++ mz_stream_posix *posix = (mz_stream_posix *)stream; + int64_t position = ftello64(posix->handle); + if (position == -1) { + posix->error = errno; +@@ -133,7 +132,7 @@ int64_t mz_stream_os_tell(void *stream) { + } + + int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin) { +- mz_stream_posix *posix = (mz_stream_posix*)stream; ++ mz_stream_posix *posix = (mz_stream_posix *)stream; + int32_t fseek_origin = 0; + + switch (origin) { +@@ -159,9 +158,9 @@ int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin) { + } + + int32_t mz_stream_os_close(void *stream) { +- mz_stream_posix *posix = (mz_stream_posix*)stream; ++ mz_stream_posix *posix = (mz_stream_posix *)stream; + int32_t closed = 0; +- if (posix->handle != NULL) { ++ if (posix->handle) { + closed = fclose(posix->handle); + posix->handle = NULL; + } +@@ -173,19 +172,17 @@ int32_t mz_stream_os_close(void *stream) { + } + + int32_t mz_stream_os_error(void *stream) { +- mz_stream_posix *posix = (mz_stream_posix*)stream; ++ mz_stream_posix *posix = (mz_stream_posix *)stream; + return posix->error; + } + + void *mz_stream_os_create(void **stream) { + mz_stream_posix *posix = NULL; + +- posix = (mz_stream_posix *)MZ_ALLOC(sizeof(mz_stream_posix)); +- if (posix != NULL) { +- memset(posix, 0, sizeof(mz_stream_posix)); ++ posix = (mz_stream_posix *)calloc(1, sizeof(mz_stream_posix)); ++ if (posix) + posix->stream.vtbl = &mz_stream_os_vtbl; +- } +- if (stream != NULL) ++ if (stream) + *stream = posix; + + return posix; +@@ -193,11 +190,11 @@ void *mz_stream_os_create(void **stream) { + + void mz_stream_os_delete(void **stream) { + mz_stream_posix *posix = NULL; +- if (stream == NULL) ++ if (!stream) + return; + posix = (mz_stream_posix *)*stream; +- if (posix != NULL) +- MZ_FREE(posix); ++ if (posix) ++ free(posix); + *stream = NULL; + } + +diff --git a/src/minizip/mz_strm_os_win32.c b/src/minizip/mz_strm_os_win32.c +index 893df5418..80d03ea11 100644 +--- a/src/minizip/mz_strm_os_win32.c ++++ b/src/minizip/mz_strm_os_win32.c +@@ -1,7 +1,7 @@ + /* mz_strm_win32.c -- Stream for filesystem access for windows + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + Copyright (C) 2009-2010 Mathias Svensson + Modifications for Zip64 support +@@ -13,7 +13,6 @@ + See the accompanying LICENSE file for the full text of the license. + */ + +- + #include "mz.h" + #include "mz_os.h" + #include "mz_strm.h" +@@ -31,12 +30,6 @@ + # define INVALID_SET_FILE_POINTER ((DWORD)-1) + #endif + +-#if defined(WINAPI_FAMILY_ONE_PARTITION) && !defined(MZ_WINRT_API) +-# if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP) +-# define MZ_WINRT_API 1 +-# endif +-#endif +- + /***************************************************************************/ + + static mz_stream_vtbl mz_stream_os_vtbl = { +@@ -67,7 +60,7 @@ typedef struct mz_stream_win32_s { + #if 0 + # define mz_stream_os_print printf + #else +-# define mz_stream_os_print(fmt,...) ++# define mz_stream_os_print(fmt, ...) + #endif + + /***************************************************************************/ +@@ -80,8 +73,7 @@ int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode) { + uint32_t flags_attribs = FILE_ATTRIBUTE_NORMAL; + wchar_t *path_wide = NULL; + +- +- if (path == NULL) ++ if (!path) + return MZ_PARAM_ERROR; + + /* Some use cases require write sharing as well */ +@@ -103,10 +95,10 @@ int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode) { + mz_stream_os_print("Win32 - Open - %s (mode %" PRId32 ")\n", path); + + path_wide = mz_os_unicode_string_create(path, MZ_ENCODING_UTF8); +- if (path_wide == NULL) ++ if (!path_wide) + return MZ_PARAM_ERROR; + +-#ifdef MZ_WINRT_API ++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8 + win32->handle = CreateFile2(path_wide, desired_access, share_mode, + creation_disposition, NULL); + #else +@@ -129,7 +121,7 @@ int32_t mz_stream_os_open(void *stream, const char *path, int32_t mode) { + + int32_t mz_stream_os_is_open(void *stream) { + mz_stream_win32 *win32 = (mz_stream_win32 *)stream; +- if (win32->handle == NULL || win32->handle == INVALID_HANDLE_VALUE) ++ if (!win32->handle || win32->handle == INVALID_HANDLE_VALUE) + return MZ_OPEN_ERROR; + return MZ_OK; + } +@@ -172,7 +164,7 @@ int32_t mz_stream_os_write(void *stream, const void *buf, int32_t size) { + + static int32_t mz_stream_os_seekinternal(HANDLE handle, LARGE_INTEGER large_pos, + LARGE_INTEGER *new_pos, uint32_t move_method) { +-#ifdef MZ_WINRT_API ++#if _WIN32_WINNT >= _WIN32_WINNT_WINXP + BOOL success = FALSE; + success = SetFilePointerEx(handle, large_pos, new_pos, move_method); + if ((success == FALSE) && (GetLastError() != NO_ERROR)) +@@ -189,7 +181,7 @@ static int32_t mz_stream_os_seekinternal(HANDLE handle, LARGE_INTEGER large_pos, + if ((pos == INVALID_SET_FILE_POINTER) && (GetLastError() != NO_ERROR)) + return MZ_SEEK_ERROR; + +- if (new_pos != NULL) { ++ if (new_pos) { + new_pos->LowPart = pos; + new_pos->HighPart = high_part; + } +@@ -221,7 +213,6 @@ int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin) { + int32_t err = MZ_OK; + LARGE_INTEGER large_pos; + +- + if (mz_stream_os_is_open(stream) != MZ_OK) + return MZ_OPEN_ERROR; + +@@ -255,7 +246,7 @@ int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin) { + int32_t mz_stream_os_close(void *stream) { + mz_stream_win32 *win32 = (mz_stream_win32 *)stream; + +- if (win32->handle != NULL) ++ if (win32->handle) + CloseHandle(win32->handle); + mz_stream_os_print("Win32 - Close\n"); + win32->handle = NULL; +@@ -270,12 +261,10 @@ int32_t mz_stream_os_error(void *stream) { + void *mz_stream_os_create(void **stream) { + mz_stream_win32 *win32 = NULL; + +- win32 = (mz_stream_win32 *)MZ_ALLOC(sizeof(mz_stream_win32)); +- if (win32 != NULL) { +- memset(win32, 0, sizeof(mz_stream_win32)); ++ win32 = (mz_stream_win32 *)calloc(1, sizeof(mz_stream_win32)); ++ if (win32) + win32->stream.vtbl = &mz_stream_os_vtbl; +- } +- if (stream != NULL) ++ if (stream) + *stream = win32; + + return win32; +@@ -283,11 +272,11 @@ void *mz_stream_os_create(void **stream) { + + void mz_stream_os_delete(void **stream) { + mz_stream_win32 *win32 = NULL; +- if (stream == NULL) ++ if (!stream) + return; + win32 = (mz_stream_win32 *)*stream; +- if (win32 != NULL) +- MZ_FREE(win32); ++ if (win32) ++ free(win32); + *stream = NULL; + } + +diff --git a/src/minizip/mz_strm_zlib.c b/src/minizip/mz_strm_zlib.c +index f76d7ffc4..b7ac4d1a6 100644 +--- a/src/minizip/mz_strm_zlib.c ++++ b/src/minizip/mz_strm_zlib.c +@@ -1,14 +1,13 @@ + /* mz_strm_zlib.c -- Stream for zlib inflate/deflate + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. + See the accompanying LICENSE file for the full text of the license. + */ + +- + #include "mz.h" + #include "mz_strm.h" + #include "mz_strm_zlib.h" +@@ -144,8 +143,7 @@ int32_t mz_stream_zlib_read(void *stream, void *buf, int32_t size) { + int32_t read = 0; + int32_t err = Z_OK; + +- +- zlib->zstream.next_out = (Bytef*)buf; ++ zlib->zstream.next_out = (Bytef *)buf; + zlib->zstream.avail_out = (uInt)size; + + do { +@@ -168,7 +166,7 @@ int32_t mz_stream_zlib_read(void *stream, void *buf, int32_t size) { + total_out_before = zlib->zstream.total_out; + + err = ZLIB_PREFIX(inflate)(&zlib->zstream, Z_SYNC_FLUSH); +- if ((err >= Z_OK) && (zlib->zstream.msg != NULL)) { ++ if ((err >= Z_OK) && (zlib->zstream.msg)) { + zlib->error = Z_DATA_ERROR; + break; + } +@@ -217,7 +215,6 @@ static int32_t mz_stream_zlib_deflate(void *stream, int flush) { + int32_t out_bytes = 0; + int32_t err = Z_OK; + +- + do { + if (zlib->zstream.avail_out == 0) { + err = mz_stream_zlib_flush(zlib); +@@ -261,7 +258,7 @@ int32_t mz_stream_zlib_write(void *stream, const void *buf, int32_t size) { + mz_stream_zlib *zlib = (mz_stream_zlib *)stream; + int32_t err = MZ_OK; + +- zlib->zstream.next_in = (Bytef*)(intptr_t)buf; ++ zlib->zstream.next_in = (Bytef *)(intptr_t)buf; + zlib->zstream.avail_in = (uInt)size; + + err = mz_stream_zlib_deflate(stream, Z_NO_FLUSH); +@@ -291,7 +288,6 @@ int32_t mz_stream_zlib_seek(void *stream, int64_t offset, int32_t origin) { + int32_t mz_stream_zlib_close(void *stream) { + mz_stream_zlib *zlib = (mz_stream_zlib *)stream; + +- + if (zlib->mode & MZ_OPEN_MODE_WRITE) { + #ifdef MZ_ZIP_NO_COMPRESSION + return MZ_SUPPORT_ERROR; +@@ -366,14 +362,13 @@ int32_t mz_stream_zlib_set_prop_int64(void *stream, int32_t prop, int64_t value) + void *mz_stream_zlib_create(void **stream) { + mz_stream_zlib *zlib = NULL; + +- zlib = (mz_stream_zlib *)MZ_ALLOC(sizeof(mz_stream_zlib)); +- if (zlib != NULL) { +- memset(zlib, 0, sizeof(mz_stream_zlib)); ++ zlib = (mz_stream_zlib *)calloc(1, sizeof(mz_stream_zlib)); ++ if (zlib) { + zlib->stream.vtbl = &mz_stream_zlib_vtbl; + zlib->level = Z_DEFAULT_COMPRESSION; + zlib->window_bits = -MAX_WBITS; + } +- if (stream != NULL) ++ if (stream) + *stream = zlib; + + return zlib; +@@ -381,11 +376,11 @@ void *mz_stream_zlib_create(void **stream) { + + void mz_stream_zlib_delete(void **stream) { + mz_stream_zlib *zlib = NULL; +- if (stream == NULL) ++ if (!stream) + return; + zlib = (mz_stream_zlib *)*stream; +- if (zlib != NULL) +- MZ_FREE(zlib); ++ if (zlib) ++ free(zlib); + *stream = NULL; + } + +diff --git a/src/minizip/mz_strm_zlib.h b/src/minizip/mz_strm_zlib.h +index 47f74804f..4bdcdf813 100644 +--- a/src/minizip/mz_strm_zlib.h ++++ b/src/minizip/mz_strm_zlib.h +@@ -1,7 +1,7 @@ + /* mz_strm_zlib.h -- Stream for zlib inflate/deflate + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + + This program is distributed under the terms of the same license as zlib. +diff --git a/src/minizip/mz_zip.c b/src/minizip/mz_zip.c +index cc4f57d0b..e80550f0e 100644 +--- a/src/minizip/mz_zip.c ++++ b/src/minizip/mz_zip.c +@@ -1,7 +1,7 @@ + /* zip.c -- Zip manipulation + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + Copyright (C) 2009-2010 Mathias Svensson + Modifications for Zip64 support +@@ -15,7 +15,6 @@ + See the accompanying LICENSE file for the full text of the license. + */ + +- + #include "mz.h" + #include "mz_crypt.h" + #include "mz_strm.h" +@@ -48,7 +47,7 @@ + #include /* snprintf */ + + #if defined(_MSC_VER) || defined(__MINGW32__) +-# define localtime_r(t1,t2) (localtime_s(t2,t1) == 0 ? t1 : NULL) ++# define localtime_r(t1, t2) (localtime_s(t2, t1) == 0 ? t1 : NULL) + #endif + #if defined(_MSC_VER) && (_MSC_VER < 1900) + # define snprintf _snprintf +@@ -122,7 +121,7 @@ typedef struct mz_zip_s { + #if 0 + # define mz_zip_print printf + #else +-# define mz_zip_print(fmt,...) ++# define mz_zip_print(fmt, ...) + #endif + + /***************************************************************************/ +@@ -152,7 +151,6 @@ static int32_t mz_zip_search_zip64_eocd(void *stream, const int64_t end_central_ + uint32_t value32 = 0; + int32_t err = MZ_OK; + +- + *central_pos = 0; + + /* Zip64 end of central directory locator */ +@@ -188,6 +186,7 @@ static int32_t mz_zip_search_zip64_eocd(void *stream, const int64_t end_central_ + return err; + } + ++#ifdef HAVE_PKCRYPT + /* Get PKWARE traditional encryption verifier */ + static uint16_t mz_zip_get_pk_verify(uint32_t dos_date, uint64_t crc, uint16_t flag) + { +@@ -197,6 +196,7 @@ static uint16_t mz_zip_get_pk_verify(uint32_t dos_date, uint64_t crc, uint16_t f + return ((dos_date >> 16) & 0xff) << 8 | ((dos_date >> 8) & 0xff); + return ((crc >> 16) & 0xff) << 8 | ((crc >> 24) & 0xff); + } ++#endif + + /* Get info about the current file in the zip file */ + static int32_t mz_zip_entry_read_header(void *stream, uint8_t local, mz_zip_file *file_info, void *file_extra_stream) { +@@ -220,7 +220,6 @@ static int32_t mz_zip_entry_read_header(void *stream, uint8_t local, mz_zip_file + int32_t err = MZ_OK; + char *linkname = NULL; + +- + memset(file_info, 0, sizeof(mz_zip_file)); + + /* Check the magic */ +@@ -394,8 +393,8 @@ static int32_t mz_zip_entry_read_header(void *stream, uint8_t local, mz_zip_file + terminated string */ + linkname_size = field_length - 12; + if ((err == MZ_OK) && (linkname_size > 0)) { +- linkname = (char *)MZ_ALLOC(linkname_size); +- if (linkname != NULL) { ++ linkname = (char *)malloc(linkname_size); ++ if (linkname) { + if (mz_stream_read(file_extra_stream, linkname, linkname_size) != linkname_size) + err = MZ_READ_ERROR; + if (err == MZ_OK) { +@@ -407,7 +406,7 @@ static int32_t mz_zip_entry_read_header(void *stream, uint8_t local, mz_zip_file + + mz_stream_seek(file_extra_stream, saved_pos, MZ_SEEK_SET); + } +- MZ_FREE(linkname); ++ free(linkname); + } + } + } +@@ -455,13 +454,13 @@ static int32_t mz_zip_entry_read_header(void *stream, uint8_t local, mz_zip_file + mz_stream_mem_get_buffer_at(file_extra_stream, linkname_pos, (const void **)&file_info->linkname); + + /* Set to empty string just in-case */ +- if (file_info->filename == NULL) ++ if (!file_info->filename) + file_info->filename = ""; +- if (file_info->extrafield == NULL) ++ if (!file_info->extrafield) + file_info->extrafield_size = 0; +- if (file_info->comment == NULL) ++ if (!file_info->comment) + file_info->comment = ""; +- if (file_info->linkname == NULL) ++ if (!file_info->linkname) + file_info->linkname = ""; + + if (err == MZ_OK) { +@@ -485,13 +484,12 @@ static int32_t mz_zip_entry_read_descriptor(void *stream, uint8_t zip64, uint32_ + int64_t value64 = 0; + int32_t err = MZ_OK; + +- + err = mz_stream_read_uint32(stream, &value32); + if (value32 != MZ_ZIP_MAGIC_DATADESCRIPTOR) + err = MZ_FORMAT_ERROR; + if (err == MZ_OK) + err = mz_stream_read_uint32(stream, &value32); +- if ((err == MZ_OK) && (crc32 != NULL)) ++ if (err == MZ_OK && crc32) + *crc32 = value32; + if (err == MZ_OK) { + /* If zip 64 extension is enabled then read as 8 byte */ +@@ -503,7 +501,7 @@ static int32_t mz_zip_entry_read_descriptor(void *stream, uint8_t zip64, uint32_ + if (value64 < 0) + err = MZ_FORMAT_ERROR; + } +- if ((err == MZ_OK) && (compressed_size != NULL)) ++ if (err == MZ_OK && compressed_size) + *compressed_size = value64; + } + if (err == MZ_OK) { +@@ -515,7 +513,7 @@ static int32_t mz_zip_entry_read_descriptor(void *stream, uint8_t zip64, uint32_ + if (value64 < 0) + err = MZ_FORMAT_ERROR; + } +- if ((err == MZ_OK) && (uncompressed_size != NULL)) ++ if (err == MZ_OK && uncompressed_size) + *uncompressed_size = value64; + } + +@@ -554,7 +552,7 @@ static int32_t mz_zip_entry_needs_zip64(mz_zip_file *file_info, uint8_t local, u + uint32_t max_uncompressed_size = UINT32_MAX; + uint8_t needs_zip64 = 0; + +- if (zip64 == NULL) ++ if (!zip64) + return MZ_PARAM_ERROR; + + *zip64 = 0; +@@ -621,7 +619,7 @@ static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_fil + char masked_name[64]; + void *file_extra_stream = NULL; + +- if (file_info == NULL) ++ if (!file_info) + return MZ_PARAM_ERROR; + + if ((local) && (file_info->flag & MZ_ZIP_FLAG_MASK_LOCAL_INFO)) +@@ -690,7 +688,7 @@ static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_fil + } + + /* Unix1 symbolic links */ +- if (file_info->linkname != NULL && *file_info->linkname != 0) { ++ if (file_info->linkname && *file_info->linkname != 0) { + linkname_size = (uint16_t)strlen(file_info->linkname); + field_length_unix1 = 12 + linkname_size; + extrafield_size += 4 + field_length_unix1; +@@ -765,7 +763,7 @@ static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_fil + err = mz_stream_write_uint16(stream, extrafield_size); + + if (!local) { +- if (file_info->comment != NULL) { ++ if (file_info->comment) { + comment_size = (int32_t)strlen(file_info->comment); + if (comment_size > UINT16_MAX) + comment_size = UINT16_MAX; +@@ -787,8 +785,26 @@ static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_fil + } + + if (err == MZ_OK) { +- if (mz_stream_write(stream, filename, filename_length) != filename_length) +- err = MZ_WRITE_ERROR; ++ const char *backslash = NULL; ++ const char *next = filename; ++ int32_t left = filename_length; ++ ++ /* Ensure all slashes are written as forward slashes according to 4.4.17.1 */ ++ while ((err == MZ_OK) && (backslash = strrchr(next, '\\'))) { ++ int32_t part_length = (int32_t)(backslash - next); ++ ++ if (mz_stream_write(stream, next, part_length) != part_length || ++ mz_stream_write(stream, "/", 1) != 1) ++ err = MZ_WRITE_ERROR; ++ ++ left -= part_length + 1; ++ next = backslash + 1; ++ } ++ ++ if (err == MZ_OK && left > 0) { ++ if (mz_stream_write(stream, next, left) != left) ++ err = MZ_WRITE_ERROR; ++ } + + /* Ensure that directories have a slash appended to them for compatibility */ + if (err == MZ_OK && write_end_slash) +@@ -892,7 +908,7 @@ static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_fil + mz_stream_mem_delete(&file_extra_stream); + } + +- if ((err == MZ_OK) && (!local) && (file_info->comment != NULL)) { ++ if (err == MZ_OK && !local && file_info->comment) { + if (mz_stream_write(stream, file_info->comment, file_info->comment_size) != file_info->comment_size) + err = MZ_WRITE_ERROR; + } +@@ -939,8 +955,7 @@ static int32_t mz_zip_read_cd(void *handle) { + int32_t comment_read = 0; + int32_t err = MZ_OK; + +- +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + /* Read and cache central directory records */ +@@ -979,8 +994,8 @@ static int32_t mz_zip_read_cd(void *handle) { + if (err == MZ_OK) + err = mz_stream_read_uint16(zip->stream, &comment_size); + if ((err == MZ_OK) && (comment_size > 0)) { +- zip->comment = (char *)MZ_ALLOC(comment_size + 1); +- if (zip->comment != NULL) { ++ zip->comment = (char *)malloc(comment_size + 1); ++ if (zip->comment) { + comment_read = mz_stream_read(zip->stream, zip->comment, comment_size); + /* Don't fail if incorrect comment length read, not critical */ + if (comment_read < 0) +@@ -1058,7 +1073,6 @@ static int32_t mz_zip_read_cd(void *handle) { + if (err == MZ_OK) + err = mz_stream_read_uint32(zip->stream, &zip->cd_signature); + if ((err == MZ_OK) && (zip->cd_signature == MZ_ZIP_MAGIC_CENTRALHEADER)) { +- + /* If found compensate for incorrect locations */ + value64i = zip->cd_offset; + zip->cd_offset = eocd_pos - zip->cd_size; +@@ -1089,8 +1103,7 @@ static int32_t mz_zip_write_cd(void *handle) { + int32_t comment_size = 0; + int32_t err = MZ_OK; + +- +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + if (mz_stream_get_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, &disk_number) == MZ_OK) +@@ -1202,7 +1215,7 @@ static int32_t mz_zip_write_cd(void *handle) { + } + + /* Write global comment */ +- if (zip->comment != NULL) { ++ if (zip->comment) { + comment_size = (int32_t)strlen(zip->comment); + if (comment_size > UINT16_MAX) + comment_size = UINT16_MAX; +@@ -1239,7 +1252,6 @@ static int32_t mz_zip_recover_cd(void *handle) { + uint8_t zip64 = 0; + uint8_t eof = 0; + +- + mz_zip_print("Zip - Recover - Start\n"); + + mz_zip_get_cd_mem_stream(handle, &cd_mem_stream); +@@ -1388,12 +1400,10 @@ static int32_t mz_zip_recover_cd(void *handle) { + void *mz_zip_create(void **handle) { + mz_zip *zip = NULL; + +- zip = (mz_zip *)MZ_ALLOC(sizeof(mz_zip)); +- if (zip != NULL) { +- memset(zip, 0, sizeof(mz_zip)); ++ zip = (mz_zip *)calloc(1, sizeof(mz_zip)); ++ if (zip) + zip->data_descriptor = 1; +- } +- if (handle != NULL) ++ if (handle) + *handle = zip; + + return zip; +@@ -1401,11 +1411,11 @@ void *mz_zip_create(void **handle) { + + void mz_zip_delete(void **handle) { + mz_zip *zip = NULL; +- if (handle == NULL) ++ if (!handle) + return; + zip = (mz_zip *)*handle; +- if (zip != NULL) { +- MZ_FREE(zip); ++ if (zip) { ++ free(zip); + } + *handle = NULL; + } +@@ -1414,8 +1424,7 @@ int32_t mz_zip_open(void *handle, void *stream, int32_t mode) { + mz_zip *zip = (mz_zip *)handle; + int32_t err = MZ_OK; + +- +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + mz_zip_print("Zip - Open\n"); +@@ -1489,7 +1498,7 @@ int32_t mz_zip_close(void *handle) { + mz_zip *zip = (mz_zip *)handle; + int32_t err = MZ_OK; + +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + mz_zip_print("Zip - Close\n"); +@@ -1500,22 +1509,22 @@ int32_t mz_zip_close(void *handle) { + if ((err == MZ_OK) && (zip->open_mode & MZ_OPEN_MODE_WRITE)) + err = mz_zip_write_cd(handle); + +- if (zip->cd_mem_stream != NULL) { ++ if (zip->cd_mem_stream) { + mz_stream_close(zip->cd_mem_stream); + mz_stream_delete(&zip->cd_mem_stream); + } + +- if (zip->file_info_stream != NULL) { ++ if (zip->file_info_stream) { + mz_stream_mem_close(zip->file_info_stream); + mz_stream_mem_delete(&zip->file_info_stream); + } +- if (zip->local_file_info_stream != NULL) { ++ if (zip->local_file_info_stream) { + mz_stream_mem_close(zip->local_file_info_stream); + mz_stream_mem_delete(&zip->local_file_info_stream); + } + + if (zip->comment) { +- MZ_FREE(zip->comment); ++ free(zip->comment); + zip->comment = NULL; + } + +@@ -1527,9 +1536,9 @@ int32_t mz_zip_close(void *handle) { + + int32_t mz_zip_get_comment(void *handle, const char **comment) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL || comment == NULL) ++ if (!zip || !comment) + return MZ_PARAM_ERROR; +- if (zip->comment == NULL) ++ if (!zip->comment) + return MZ_EXIST_ERROR; + *comment = zip->comment; + return MZ_OK; +@@ -1538,24 +1547,23 @@ int32_t mz_zip_get_comment(void *handle, const char **comment) { + int32_t mz_zip_set_comment(void *handle, const char *comment) { + mz_zip *zip = (mz_zip *)handle; + int32_t comment_size = 0; +- if (zip == NULL || comment == NULL) ++ if (!zip || !comment) + return MZ_PARAM_ERROR; +- if (zip->comment != NULL) +- MZ_FREE(zip->comment); ++ if (zip->comment) ++ free(zip->comment); + comment_size = (int32_t)strlen(comment); + if (comment_size > UINT16_MAX) + return MZ_PARAM_ERROR; +- zip->comment = (char *)MZ_ALLOC(comment_size+1); +- if (zip->comment == NULL) ++ zip->comment = (char *)calloc(comment_size + 1, sizeof(char)); ++ if (!zip->comment) + return MZ_MEM_ERROR; +- memset(zip->comment, 0, comment_size+1); + strncpy(zip->comment, comment, comment_size); + return MZ_OK; + } + + int32_t mz_zip_get_version_madeby(void *handle, uint16_t *version_madeby) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL || version_madeby == NULL) ++ if (!zip || !version_madeby) + return MZ_PARAM_ERROR; + *version_madeby = zip->version_madeby; + return MZ_OK; +@@ -1563,7 +1571,7 @@ int32_t mz_zip_get_version_madeby(void *handle, uint16_t *version_madeby) { + + int32_t mz_zip_set_version_madeby(void *handle, uint16_t version_madeby) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + zip->version_madeby = version_madeby; + return MZ_OK; +@@ -1571,7 +1579,7 @@ int32_t mz_zip_set_version_madeby(void *handle, uint16_t version_madeby) { + + int32_t mz_zip_set_recover(void *handle, uint8_t recover) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + zip->recover = recover; + return MZ_OK; +@@ -1579,7 +1587,7 @@ int32_t mz_zip_set_recover(void *handle, uint8_t recover) { + + int32_t mz_zip_set_data_descriptor(void *handle, uint8_t data_descriptor) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + zip->data_descriptor = data_descriptor; + return MZ_OK; +@@ -1587,17 +1595,17 @@ int32_t mz_zip_set_data_descriptor(void *handle, uint8_t data_descriptor) { + + int32_t mz_zip_get_stream(void *handle, void **stream) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL || stream == NULL) ++ if (!zip || !stream) + return MZ_PARAM_ERROR; + *stream = zip->stream; +- if (*stream == NULL) ++ if (!*stream) + return MZ_EXIST_ERROR; + return MZ_OK; + } + + int32_t mz_zip_set_cd_stream(void *handle, int64_t cd_start_pos, void *cd_stream) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL || cd_stream == NULL) ++ if (!zip || !cd_stream) + return MZ_PARAM_ERROR; + zip->cd_offset = 0; + zip->cd_stream = cd_stream; +@@ -1607,17 +1615,17 @@ int32_t mz_zip_set_cd_stream(void *handle, int64_t cd_start_pos, void *cd_stream + + int32_t mz_zip_get_cd_mem_stream(void *handle, void **cd_mem_stream) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL || cd_mem_stream == NULL) ++ if (!zip || !cd_mem_stream) + return MZ_PARAM_ERROR; + *cd_mem_stream = zip->cd_mem_stream; +- if (*cd_mem_stream == NULL) ++ if (!*cd_mem_stream) + return MZ_EXIST_ERROR; + return MZ_OK; + } + + int32_t mz_zip_set_number_entry(void *handle, uint64_t number_entry) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + zip->number_entry = number_entry; + return MZ_OK; +@@ -1625,7 +1633,7 @@ int32_t mz_zip_set_number_entry(void *handle, uint64_t number_entry) { + + int32_t mz_zip_get_number_entry(void *handle, uint64_t *number_entry) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL || number_entry == NULL) ++ if (!zip || !number_entry) + return MZ_PARAM_ERROR; + *number_entry = zip->number_entry; + return MZ_OK; +@@ -1633,7 +1641,7 @@ int32_t mz_zip_get_number_entry(void *handle, uint64_t *number_entry) { + + int32_t mz_zip_set_disk_number_with_cd(void *handle, uint32_t disk_number_with_cd) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + zip->disk_number_with_cd = disk_number_with_cd; + return MZ_OK; +@@ -1641,7 +1649,7 @@ int32_t mz_zip_set_disk_number_with_cd(void *handle, uint32_t disk_number_with_c + + int32_t mz_zip_get_disk_number_with_cd(void *handle, uint32_t *disk_number_with_cd) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL || disk_number_with_cd == NULL) ++ if (!zip || !disk_number_with_cd) + return MZ_PARAM_ERROR; + *disk_number_with_cd = zip->disk_number_with_cd; + return MZ_OK; +@@ -1650,10 +1658,10 @@ int32_t mz_zip_get_disk_number_with_cd(void *handle, uint32_t *disk_number_with_ + static int32_t mz_zip_entry_close_int(void *handle) { + mz_zip *zip = (mz_zip *)handle; + +- if (zip->crypt_stream != NULL) ++ if (zip->crypt_stream) + mz_stream_delete(&zip->crypt_stream); + zip->crypt_stream = NULL; +- if (zip->compress_stream != NULL) ++ if (zip->compress_stream) + mz_stream_delete(&zip->compress_stream); + zip->compress_stream = NULL; + +@@ -1670,7 +1678,7 @@ static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress + int32_t err = MZ_OK; + uint8_t use_crypt = 0; + +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + switch (zip->file_info.compression_method) { +@@ -1701,7 +1709,7 @@ static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress + + zip->entry_raw = raw; + +- if ((zip->file_info.flag & MZ_ZIP_FLAG_ENCRYPTED) && (password != NULL)) { ++ if ((zip->file_info.flag & MZ_ZIP_FLAG_ENCRYPTED) && (password)) { + if (zip->open_mode & MZ_OPEN_MODE_WRITE) { + /* Encrypt only when we are not trying to write raw and password is supplied. */ + if (!zip->entry_raw) +@@ -1734,7 +1742,7 @@ static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress + } + + if (err == MZ_OK) { +- if (zip->crypt_stream == NULL) ++ if (!zip->crypt_stream) + mz_stream_raw_create(&zip->crypt_stream); + + mz_stream_set_base(zip->crypt_stream, zip->stream); +@@ -1833,7 +1841,7 @@ static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress + + int32_t mz_zip_entry_is_open(void *handle) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + if (zip->entry_opened == 0) + return MZ_EXIST_ERROR; +@@ -1846,15 +1854,13 @@ int32_t mz_zip_entry_read_open(void *handle, uint8_t raw, const char *password) + int32_t err_shift = MZ_OK; + + #if defined(MZ_ZIP_NO_ENCRYPTION) +- if (password != NULL) ++ if (password) + return MZ_SUPPORT_ERROR; + #endif +- if (zip == NULL) ++ if (!zip || !zip->entry_scanned) + return MZ_PARAM_ERROR; + if ((zip->open_mode & MZ_OPEN_MODE_READ) == 0) + return MZ_PARAM_ERROR; +- if (zip->entry_scanned == 0) +- return MZ_PARAM_ERROR; + + mz_zip_print("Zip - Entry - Read open (raw %" PRId32 ")\n", raw); + +@@ -1894,10 +1900,10 @@ int32_t mz_zip_entry_write_open(void *handle, const mz_zip_file *file_info, int1 + int32_t err = MZ_OK; + + #if defined(MZ_ZIP_NO_ENCRYPTION) +- if (password != NULL) ++ if (password) + return MZ_SUPPORT_ERROR; + #endif +- if (zip == NULL || file_info == NULL || file_info->filename == NULL) ++ if (!zip || !file_info || !file_info->filename) + return MZ_PARAM_ERROR; + + if (mz_zip_entry_is_open(handle) == MZ_OK) { +@@ -1916,22 +1922,22 @@ int32_t mz_zip_entry_write_open(void *handle, const mz_zip_file *file_info, int1 + + /* Copy filename, extrafield, and comment internally */ + filename_pos = mz_stream_tell(zip->file_info_stream); +- if (file_info->filename != NULL) ++ if (file_info->filename) + mz_stream_write(zip->file_info_stream, file_info->filename, (int32_t)strlen(file_info->filename)); + mz_stream_write_uint8(zip->file_info_stream, 0); + + extrafield_pos = mz_stream_tell(zip->file_info_stream); +- if (file_info->extrafield != NULL) ++ if (file_info->extrafield) + mz_stream_write(zip->file_info_stream, file_info->extrafield, file_info->extrafield_size); + mz_stream_write_uint8(zip->file_info_stream, 0); + + comment_pos = mz_stream_tell(zip->file_info_stream); +- if (file_info->comment != NULL) ++ if (file_info->comment) + mz_stream_write(zip->file_info_stream, file_info->comment, file_info->comment_size); + mz_stream_write_uint8(zip->file_info_stream, 0); + + linkname_pos = mz_stream_tell(zip->file_info_stream); +- if (file_info->linkname != NULL) ++ if (file_info->linkname) + mz_stream_write(zip->file_info_stream, file_info->linkname, (int32_t)strlen(file_info->linkname)); + mz_stream_write_uint8(zip->file_info_stream, 0); + +@@ -1960,7 +1966,7 @@ int32_t mz_zip_entry_write_open(void *handle, const mz_zip_file *file_info, int1 + if (!is_dir) { + if (zip->data_descriptor) + zip->file_info.flag |= MZ_ZIP_FLAG_DATA_DESCRIPTOR; +- if (password != NULL) ++ if (password) + zip->file_info.flag |= MZ_ZIP_FLAG_ENCRYPTED; + } + +@@ -2002,7 +2008,7 @@ int32_t mz_zip_entry_read(void *handle, void *buf, int32_t len) { + mz_zip *zip = (mz_zip *)handle; + int32_t read = 0; + +- if (zip == NULL || mz_zip_entry_is_open(handle) != MZ_OK) ++ if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) + return MZ_PARAM_ERROR; + if (UINT_MAX == UINT16_MAX && len > UINT16_MAX) /* zlib limitation */ + return MZ_PARAM_ERROR; +@@ -2027,7 +2033,7 @@ int32_t mz_zip_entry_write(void *handle, const void *buf, int32_t len) { + mz_zip *zip = (mz_zip *)handle; + int32_t written = 0; + +- if (zip == NULL || mz_zip_entry_is_open(handle) != MZ_OK) ++ if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) + return MZ_PARAM_ERROR; + written = mz_stream_write(zip->compress_stream, buf, len); + if (written > 0) +@@ -2045,25 +2051,25 @@ int32_t mz_zip_entry_read_close(void *handle, uint32_t *crc32, int64_t *compress + int32_t err = MZ_OK; + uint8_t zip64 = 0; + +- if (zip == NULL || mz_zip_entry_is_open(handle) != MZ_OK) ++ if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) + return MZ_PARAM_ERROR; + + mz_stream_close(zip->compress_stream); + + mz_zip_print("Zip - Entry - Read Close\n"); + +- if (crc32 != NULL) ++ if (crc32) + *crc32 = zip->file_info.crc; +- if (compressed_size != NULL) ++ if (compressed_size) + *compressed_size = zip->file_info.compressed_size; +- if (uncompressed_size != NULL) ++ if (uncompressed_size) + *uncompressed_size = zip->file_info.uncompressed_size; + + mz_stream_get_prop_int64(zip->compress_stream, MZ_STREAM_PROP_TOTAL_IN, &total_in); + + if ((zip->file_info.flag & MZ_ZIP_FLAG_DATA_DESCRIPTOR) && + ((zip->file_info.flag & MZ_ZIP_FLAG_MASK_LOCAL_INFO) == 0) && +- (crc32 != NULL || compressed_size != NULL || uncompressed_size != NULL)) { ++ (crc32 || compressed_size || uncompressed_size)) { + /* Check to see if data descriptor is zip64 bit format or not */ + if (mz_zip_extrafield_contains(zip->local_file_info.extrafield, + zip->local_file_info.extrafield_size, MZ_ZIP_EXTENSION_ZIP64, NULL) == MZ_OK) +@@ -2085,7 +2091,7 @@ int32_t mz_zip_entry_read_close(void *handle, uint32_t *crc32, int64_t *compress + } + + /* If entire entry was not read verification will fail */ +- if ((err == MZ_OK) && (total_in > 0) && (!zip->entry_raw)) { ++ if ((err == MZ_OK) && (total_in == zip->file_info.compressed_size) && (!zip->entry_raw)) { + #ifdef HAVE_WZAES + /* AES zip version AE-1 will expect a valid crc as well */ + if (zip->file_info.aes_version <= 0x0001) +@@ -2112,7 +2118,7 @@ int32_t mz_zip_entry_write_close(void *handle, uint32_t crc32, int64_t compresse + int32_t err = MZ_OK; + uint8_t zip64 = 0; + +- if (zip == NULL || mz_zip_entry_is_open(handle) != MZ_OK) ++ if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) + return MZ_PARAM_ERROR; + + mz_stream_close(zip->compress_stream); +@@ -2173,7 +2179,9 @@ int32_t mz_zip_entry_write_close(void *handle, uint32_t crc32, int64_t compresse + + if (err == MZ_OK) { + /* Seek to crc32 and sizes offset in local header */ +- err = mz_stream_seek(zip->stream, MZ_ZIP_OFFSET_CRC_SIZES, MZ_SEEK_CUR); ++ err = mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, zip->file_info.disk_number); ++ if (err == MZ_OK) ++ err = mz_stream_seek(zip->stream, zip->file_info.disk_offset + MZ_ZIP_OFFSET_CRC_SIZES, MZ_SEEK_SET); + } + + if (err == MZ_OK) +@@ -2230,6 +2238,16 @@ int32_t mz_zip_entry_seek_local_header(void *handle) { + return mz_stream_seek(zip->stream, zip->file_info.disk_offset + zip->disk_offset_shift, MZ_SEEK_SET); + } + ++int32_t mz_zip_entry_get_compress_stream(void *handle, void **compress_stream) { ++ mz_zip *zip = (mz_zip *)handle; ++ if (!zip || !compress_stream) ++ return MZ_PARAM_ERROR; ++ *compress_stream = zip->compress_stream; ++ if (!*compress_stream) ++ return MZ_EXIST_ERROR; ++ return MZ_OK; ++} ++ + int32_t mz_zip_entry_close(void *handle) { + return mz_zip_entry_close_raw(handle, UINT64_MAX, 0); + } +@@ -2238,7 +2256,7 @@ int32_t mz_zip_entry_close_raw(void *handle, int64_t uncompressed_size, uint32_t + mz_zip *zip = (mz_zip *)handle; + int32_t err = MZ_OK; + +- if (zip == NULL || mz_zip_entry_is_open(handle) != MZ_OK) ++ if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) + return MZ_PARAM_ERROR; + + if (zip->open_mode & MZ_OPEN_MODE_WRITE) +@@ -2253,9 +2271,7 @@ int32_t mz_zip_entry_is_dir(void *handle) { + mz_zip *zip = (mz_zip *)handle; + int32_t filename_length = 0; + +- if (zip == NULL) +- return MZ_PARAM_ERROR; +- if (zip->entry_scanned == 0) ++ if (!zip || !zip->entry_scanned) + return MZ_PARAM_ERROR; + if (mz_zip_attrib_is_dir(zip->file_info.external_fa, zip->file_info.version_madeby) == MZ_OK) + return MZ_OK; +@@ -2272,14 +2288,10 @@ int32_t mz_zip_entry_is_dir(void *handle) { + int32_t mz_zip_entry_is_symlink(void *handle) { + mz_zip *zip = (mz_zip *)handle; + +- if (zip == NULL) +- return MZ_PARAM_ERROR; +- if (zip->entry_scanned == 0) ++ if (!zip || !zip->entry_scanned) + return MZ_PARAM_ERROR; + if (mz_zip_attrib_is_symlink(zip->file_info.external_fa, zip->file_info.version_madeby) != MZ_OK) + return MZ_EXIST_ERROR; +- if (zip->file_info.linkname == NULL || *zip->file_info.linkname == 0) +- return MZ_EXIST_ERROR; + + return MZ_OK; + } +@@ -2287,7 +2299,7 @@ int32_t mz_zip_entry_is_symlink(void *handle) { + int32_t mz_zip_entry_get_info(void *handle, mz_zip_file **file_info) { + mz_zip *zip = (mz_zip *)handle; + +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + if ((zip->open_mode & MZ_OPEN_MODE_WRITE) == 0) { +@@ -2301,7 +2313,7 @@ int32_t mz_zip_entry_get_info(void *handle, mz_zip_file **file_info) { + + int32_t mz_zip_entry_get_local_info(void *handle, mz_zip_file **local_file_info) { + mz_zip *zip = (mz_zip *)handle; +- if (zip == NULL || mz_zip_entry_is_open(handle) != MZ_OK) ++ if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) + return MZ_PARAM_ERROR; + *local_file_info = &zip->local_file_info; + return MZ_OK; +@@ -2310,7 +2322,7 @@ int32_t mz_zip_entry_get_local_info(void *handle, mz_zip_file **local_file_info) + int32_t mz_zip_entry_set_extrafield(void *handle, const uint8_t *extrafield, uint16_t extrafield_size) { + mz_zip *zip = (mz_zip *)handle; + +- if (zip == NULL || mz_zip_entry_is_open(handle) != MZ_OK) ++ if (!zip || mz_zip_entry_is_open(handle) != MZ_OK) + return MZ_PARAM_ERROR; + + zip->file_info.extrafield = extrafield; +@@ -2322,7 +2334,7 @@ static int32_t mz_zip_goto_next_entry_int(void *handle) { + mz_zip *zip = (mz_zip *)handle; + int32_t err = MZ_OK; + +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + zip->entry_scanned = 0; +@@ -2340,7 +2352,7 @@ static int32_t mz_zip_goto_next_entry_int(void *handle) { + int64_t mz_zip_get_entry(void *handle) { + mz_zip *zip = (mz_zip *)handle; + +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + return zip->cd_current_pos; +@@ -2349,7 +2361,7 @@ int64_t mz_zip_get_entry(void *handle) { + int32_t mz_zip_goto_entry(void *handle, int64_t cd_pos) { + mz_zip *zip = (mz_zip *)handle; + +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + if (cd_pos < zip->cd_start_pos || cd_pos > zip->cd_start_pos + zip->cd_size) +@@ -2363,7 +2375,7 @@ int32_t mz_zip_goto_entry(void *handle, int64_t cd_pos) { + int32_t mz_zip_goto_first_entry(void *handle) { + mz_zip *zip = (mz_zip *)handle; + +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + zip->cd_current_pos = zip->cd_start_pos; +@@ -2374,7 +2386,7 @@ int32_t mz_zip_goto_first_entry(void *handle) { + int32_t mz_zip_goto_next_entry(void *handle) { + mz_zip *zip = (mz_zip *)handle; + +- if (zip == NULL) ++ if (!zip) + return MZ_PARAM_ERROR; + + zip->cd_current_pos += (int64_t)MZ_ZIP_SIZE_CD_ITEM + zip->file_info.filename_size + +@@ -2388,11 +2400,11 @@ int32_t mz_zip_locate_entry(void *handle, const char *filename, uint8_t ignore_c + int32_t err = MZ_OK; + int32_t result = 0; + +- if (zip == NULL || filename == NULL) ++ if (!zip || !filename) + return MZ_PARAM_ERROR; + + /* If we are already on the current entry, no need to search */ +- if ((zip->entry_scanned) && (zip->file_info.filename != NULL)) { ++ if (zip->entry_scanned && zip->file_info.filename) { + result = mz_zip_path_compare(zip->file_info.filename, filename, ignore_case); + if (result == 0) + return MZ_OK; +@@ -2477,7 +2489,7 @@ int32_t mz_zip_attrib_is_symlink(uint32_t attrib, int32_t version_madeby) { + } + + int32_t mz_zip_attrib_convert(uint8_t src_sys, uint32_t src_attrib, uint8_t target_sys, uint32_t *target_attrib) { +- if (target_attrib == NULL) ++ if (!target_attrib) + return MZ_PARAM_ERROR; + + *target_attrib = 0; +@@ -2490,11 +2502,11 @@ int32_t mz_zip_attrib_convert(uint8_t src_sys, uint32_t src_attrib, uint8_t targ + if ((target_sys == MZ_HOST_SYSTEM_UNIX) || (target_sys == MZ_HOST_SYSTEM_OSX_DARWIN) || (target_sys == MZ_HOST_SYSTEM_RISCOS)) + return mz_zip_attrib_win32_to_posix(src_attrib, target_attrib); + } else if ((src_sys == MZ_HOST_SYSTEM_UNIX) || (src_sys == MZ_HOST_SYSTEM_OSX_DARWIN) || (src_sys == MZ_HOST_SYSTEM_RISCOS)) { +- if ((target_sys == MZ_HOST_SYSTEM_UNIX) || (target_sys == MZ_HOST_SYSTEM_OSX_DARWIN) || (target_sys == MZ_HOST_SYSTEM_RISCOS)) { +- /* If high bytes are set, it contains unix specific attributes */ +- if ((src_attrib >> 16) != 0) +- src_attrib >>= 16; ++ /* If high bytes are set, it contains unix specific attributes */ ++ if ((src_attrib >> 16) != 0) ++ src_attrib >>= 16; + ++ if ((target_sys == MZ_HOST_SYSTEM_UNIX) || (target_sys == MZ_HOST_SYSTEM_OSX_DARWIN) || (target_sys == MZ_HOST_SYSTEM_RISCOS)) { + *target_attrib = src_attrib; + return MZ_OK; + } +@@ -2506,7 +2518,7 @@ int32_t mz_zip_attrib_convert(uint8_t src_sys, uint32_t src_attrib, uint8_t targ + } + + int32_t mz_zip_attrib_posix_to_win32(uint32_t posix_attrib, uint32_t *win32_attrib) { +- if (win32_attrib == NULL) ++ if (!win32_attrib) + return MZ_PARAM_ERROR; + + *win32_attrib = 0; +@@ -2528,7 +2540,7 @@ int32_t mz_zip_attrib_posix_to_win32(uint32_t posix_attrib, uint32_t *win32_attr + } + + int32_t mz_zip_attrib_win32_to_posix(uint32_t win32_attrib, uint32_t *posix_attrib) { +- if (posix_attrib == NULL) ++ if (!posix_attrib) + return MZ_PARAM_ERROR; + + *posix_attrib = 0000444; /* S_IRUSR | S_IRGRP | S_IROTH */ +@@ -2554,7 +2566,6 @@ int32_t mz_zip_extrafield_find(void *stream, uint16_t type, int32_t max_seek, ui + uint16_t field_type = 0; + uint16_t field_length = 0; + +- + if (max_seek < 4) + return MZ_EXIST_ERROR; + +@@ -2566,7 +2577,7 @@ int32_t mz_zip_extrafield_find(void *stream, uint16_t type, int32_t max_seek, ui + break; + + if (type == field_type) { +- if (length != NULL) ++ if (length) + *length = field_length; + return MZ_OK; + } +@@ -2586,7 +2597,7 @@ int32_t mz_zip_extrafield_contains(const uint8_t *extrafield, int32_t extrafield + void *file_extra_stream = NULL; + int32_t err = MZ_OK; + +- if (extrafield == NULL || extrafield_size == 0) ++ if (!extrafield || !extrafield_size) + return MZ_PARAM_ERROR; + + mz_stream_mem_create(&file_extra_stream); +@@ -2601,7 +2612,7 @@ int32_t mz_zip_extrafield_contains(const uint8_t *extrafield, int32_t extrafield + + int32_t mz_zip_extrafield_read(void *stream, uint16_t *type, uint16_t *length) { + int32_t err = MZ_OK; +- if (type == NULL || length == NULL) ++ if (!type || !length) + return MZ_PARAM_ERROR; + err = mz_stream_read_uint16(stream, type); + if (err == MZ_OK) +@@ -2643,7 +2654,7 @@ static void mz_zip_dosdate_to_raw_tm(uint64_t dos_date, struct tm *ptm) { + } + + int32_t mz_zip_dosdate_to_tm(uint64_t dos_date, struct tm *ptm) { +- if (ptm == NULL) ++ if (!ptm) + return MZ_PARAM_ERROR; + + mz_zip_dosdate_to_raw_tm(dos_date, ptm); +@@ -2664,9 +2675,9 @@ time_t mz_zip_dosdate_to_time_t(uint64_t dos_date) { + + int32_t mz_zip_time_t_to_tm(time_t unix_time, struct tm *ptm) { + struct tm ltm; +- if (ptm == NULL) ++ if (!ptm) + return MZ_PARAM_ERROR; +- if (localtime_r(&unix_time, <m) == NULL) { /* Returns a 1900-based year */ ++ if (!localtime_r(&unix_time, <m)) { /* Returns a 1900-based year */ + /* Invalid date stored, so don't return it */ + memset(ptm, 0, sizeof(struct tm)); + return MZ_INTERNAL_ERROR; +diff --git a/src/minizip/mz_zip.h b/src/minizip/mz_zip.h +index e3d1fbd52..65be301af 100644 +--- a/src/minizip/mz_zip.h ++++ b/src/minizip/mz_zip.h +@@ -1,7 +1,7 @@ + /* mz_zip.h -- Zip manipulation + part of the minizip-ng project + +- Copyright (C) 2010-2021 Nathan Moinvaziri ++ Copyright (C) Nathan Moinvaziri + https://github.com/zlib-ng/minizip-ng + Copyright (C) 2009-2010 Mathias Svensson + Modifications for Zip64 support +@@ -139,6 +139,9 @@ int32_t mz_zip_entry_write_close(void *handle, uint32_t crc32, int64_t compresse + int32_t mz_zip_entry_seek_local_header(void *handle); + /* Seeks to the local header for the entry */ + ++int32_t mz_zip_entry_get_compress_stream(void *handle, void **compress_stream); ++/* Get a pointer to the compression stream used for the current entry */ ++ + int32_t mz_zip_entry_close_raw(void *handle, int64_t uncompressed_size, uint32_t crc32); + /* Close the current file in the zip file where raw is compressed data */ + + +From 5b5a0a5973eaa6204a5663a68d59a5307b0ff55a Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Wed, 21 Feb 2024 23:49:52 +0100 +Subject: [PATCH 4/4] imp: updated bundled minizip to 4.0.4 + +--- + src/minizip/README.minizip | 2 +- + src/minizip/mz.h | 15 ++-- + src/minizip/mz_compat.c | 126 +++++++++++++++++++++++++-------- + src/minizip/mz_compat.h | 97 ++++++++++++++----------- + src/minizip/mz_crypt.c | 12 +++- + src/minizip/mz_crypt.h | 24 +++---- + src/minizip/mz_os.c | 14 ++-- + src/minizip/mz_os.h | 4 +- + src/minizip/mz_os_posix.c | 13 ++-- + src/minizip/mz_os_win32.c | 30 ++++---- + src/minizip/mz_strm.c | 15 ++-- + src/minizip/mz_strm.h | 6 +- + src/minizip/mz_strm_mem.c | 9 +-- + src/minizip/mz_strm_mem.h | 2 +- + src/minizip/mz_strm_os.h | 2 +- + src/minizip/mz_strm_os_posix.c | 9 +-- + src/minizip/mz_strm_os_win32.c | 17 +++-- + src/minizip/mz_strm_zlib.c | 16 ++--- + src/minizip/mz_strm_zlib.h | 2 +- + src/minizip/mz_zip.c | 101 +++++++++++++++----------- + src/minizip/mz_zip.h | 4 +- + 21 files changed, 308 insertions(+), 212 deletions(-) + +diff --git a/src/minizip/README.minizip b/src/minizip/README.minizip +index 22a0f58b6..7634a8511 100644 +--- a/src/minizip/README.minizip ++++ b/src/minizip/README.minizip +@@ -1 +1 @@ +-This code has been taken from https://github.com/zlib-ng/minizip-ng/releases/tag/3.0.10 ++This code has been taken from https://github.com/zlib-ng/minizip-ng/releases/tag/4.0.4 +diff --git a/src/minizip/mz.h b/src/minizip/mz.h +index 769a7b65a..675cec297 100644 +--- a/src/minizip/mz.h ++++ b/src/minizip/mz.h +@@ -14,8 +14,8 @@ + /***************************************************************************/ + + /* MZ_VERSION */ +-#define MZ_VERSION ("3.0.10") +-#define MZ_VERSION_BUILD (03000a) ++#define MZ_VERSION ("4.0.4") ++#define MZ_VERSION_BUILD (040004) + + /* MZ_ERROR */ + #define MZ_OK (0) /* zlib */ +@@ -112,13 +112,14 @@ + + /* MZ_AES */ + #define MZ_AES_VERSION (1) +-#define MZ_AES_ENCRYPTION_MODE_128 (0x01) +-#define MZ_AES_ENCRYPTION_MODE_192 (0x02) +-#define MZ_AES_ENCRYPTION_MODE_256 (0x03) +-#define MZ_AES_KEY_LENGTH(MODE) (8 * (MODE & 3) + 8) ++#define MZ_AES_MODE_ECB (0) ++#define MZ_AES_MODE_CBC (1) ++#define MZ_AES_MODE_GCM (2) ++#define MZ_AES_STRENGTH_128 (1) ++#define MZ_AES_STRENGTH_192 (2) ++#define MZ_AES_STRENGTH_256 (3) + #define MZ_AES_KEY_LENGTH_MAX (32) + #define MZ_AES_BLOCK_SIZE (16) +-#define MZ_AES_HEADER_SIZE(MODE) ((4 * (MODE & 3) + 4) + 2) + #define MZ_AES_FOOTER_SIZE (10) + + /* MZ_HASH */ +diff --git a/src/minizip/mz_compat.c b/src/minizip/mz_compat.c +index fab6bf046..872dab8f3 100644 +--- a/src/minizip/mz_compat.c ++++ b/src/minizip/mz_compat.c +@@ -51,7 +51,7 @@ static int64_t mz_stream_ioapi_tell(void *stream); + static int32_t mz_stream_ioapi_seek(void *stream, int64_t offset, int32_t origin); + static int32_t mz_stream_ioapi_close(void *stream); + static int32_t mz_stream_ioapi_error(void *stream); +-static void *mz_stream_ioapi_create(void **stream); ++static void *mz_stream_ioapi_create(void); + static void mz_stream_ioapi_delete(void **stream); + + /***************************************************************************/ +@@ -121,7 +121,7 @@ static int32_t mz_stream_ioapi_read(void *stream, void *buf, int32_t size) { + } else + return MZ_PARAM_ERROR; + +- return zread(opaque, ioapi->handle, buf, size); ++ return (int32_t)zread(opaque, ioapi->handle, buf, size); + } + + static int32_t mz_stream_ioapi_write(void *stream, const void *buf, int32_t size) { +@@ -142,7 +142,7 @@ static int32_t mz_stream_ioapi_write(void *stream, const void *buf, int32_t size + } else + return MZ_PARAM_ERROR; + +- written = zwrite(opaque, ioapi->handle, buf, size); ++ written = (int32_t)zwrite(opaque, ioapi->handle, buf, size); + return written; + } + +@@ -233,15 +233,10 @@ static int32_t mz_stream_ioapi_set_filefunc64(void *stream, zlib_filefunc64_def + return MZ_OK; + } + +-static void *mz_stream_ioapi_create(void **stream) { +- mz_stream_ioapi *ioapi = NULL; +- +- ioapi = (mz_stream_ioapi *)calloc(1, sizeof(mz_stream_ioapi)); ++static void *mz_stream_ioapi_create(void) { ++ mz_stream_ioapi *ioapi = (mz_stream_ioapi *)calloc(1, sizeof(mz_stream_ioapi)); + if (ioapi) + ioapi->stream.vtbl = &mz_stream_ioapi_vtbl; +- if (stream) +- *stream = ioapi; +- + return ioapi; + } + +@@ -333,17 +328,20 @@ zipFile zipOpen2(const char *path, int append, const char **globalcomment, + + if (pzlib_filefunc_def) { + if (pzlib_filefunc_def->zopen_file) { +- if (!mz_stream_ioapi_create(&stream)) ++ stream = mz_stream_ioapi_create(); ++ if (!stream) + return NULL; + mz_stream_ioapi_set_filefunc(stream, pzlib_filefunc_def); + } else if (pzlib_filefunc_def->opaque) { +- if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) ++ stream = mz_stream_create((mz_stream_vtbl *)pzlib_filefunc_def->opaque); ++ if (!stream) + return NULL; + } + } + + if (!stream) { +- if (!mz_stream_os_create(&stream)) ++ stream = mz_stream_os_create(); ++ if (!stream) + return NULL; + } + +@@ -370,17 +368,20 @@ zipFile zipOpen2_64(const void *path, int append, const char **globalcomment, + + if (pzlib_filefunc_def) { + if (pzlib_filefunc_def->zopen64_file) { +- if (!mz_stream_ioapi_create(&stream)) ++ stream = mz_stream_ioapi_create(); ++ if (!stream) + return NULL; + mz_stream_ioapi_set_filefunc64(stream, pzlib_filefunc_def); + } else if (pzlib_filefunc_def->opaque) { +- if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) ++ stream = mz_stream_create((mz_stream_vtbl *)pzlib_filefunc_def->opaque); ++ if (!stream) + return NULL; + } + } + + if (!stream) { +- if (!mz_stream_os_create(&stream)) ++ stream = mz_stream_os_create(); ++ if (!stream) + return NULL; + } + +@@ -405,7 +406,10 @@ zipFile zipOpen_MZ(void *stream, int append, const char **globalcomment) { + int32_t mode = zipConvertAppendToStreamMode(append); + void *handle = NULL; + +- mz_zip_create(&handle); ++ handle = mz_zip_create(); ++ if (!handle) ++ return NULL; ++ + err = mz_zip_open(handle, stream, mode); + + if (err != MZ_OK) { +@@ -459,6 +463,12 @@ int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo + if (!compat) + return ZIP_PARAMERROR; + ++ /* The filename and comment length must fit in 16 bits. */ ++ if (filename && strlen(filename) > 0xffff) ++ return ZIP_PARAMERROR; ++ if (comment && strlen(comment) > 0xffff) ++ return ZIP_PARAMERROR; ++ + memset(&file_info, 0, sizeof(file_info)); + + if (zipfi) { +@@ -470,8 +480,8 @@ int zipOpenNewFileInZip5(zipFile file, const char *filename, const zip_fileinfo + dos_date = mz_zip_tm_to_dosdate(&zipfi->tmz_date); + + file_info.modified_date = mz_zip_dosdate_to_time_t(dos_date); +- file_info.external_fa = zipfi->external_fa; +- file_info.internal_fa = zipfi->internal_fa; ++ file_info.external_fa = (uint32_t)zipfi->external_fa; ++ file_info.internal_fa = (uint16_t)zipfi->internal_fa; + } + + if (!filename) +@@ -534,7 +544,7 @@ int zipOpenNewFileInZip3_64(zipFile file, const char *filename, const zip_filein + const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, + uint16_t size_extrafield_global, const char *comment, int compression_method, int level, + int raw, int windowBits, int memLevel, int strategy, const char *password, +- uint32_t crc_for_crypting, int zip64) { ++ unsigned long crc_for_crypting, int zip64) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, comment, compression_method, level, raw, windowBits, + memLevel, strategy, password, crc_for_crypting, MZ_VERSION_MADEBY, 0, zip64); +@@ -592,7 +602,7 @@ int zipCloseFileInZipRaw64(zipFile file, uint64_t uncompressed_size, unsigned lo + mz_compat *compat = (mz_compat *)file; + if (!compat) + return ZIP_PARAMERROR; +- return mz_zip_entry_close_raw(compat->handle, (int64_t)uncompressed_size, crc32); ++ return mz_zip_entry_close_raw(compat->handle, (int64_t)uncompressed_size, (uint32_t)crc32); + } + + int zipCloseFileInZip(zipFile file) { +@@ -672,17 +682,20 @@ unzFile unzOpen2(const char *path, zlib_filefunc_def *pzlib_filefunc_def) { + + if (pzlib_filefunc_def) { + if (pzlib_filefunc_def->zopen_file) { +- if (!mz_stream_ioapi_create(&stream)) ++ stream = mz_stream_ioapi_create(); ++ if (!stream) + return NULL; + mz_stream_ioapi_set_filefunc(stream, pzlib_filefunc_def); + } else if (pzlib_filefunc_def->opaque) { +- if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) ++ stream = mz_stream_create((mz_stream_vtbl *)pzlib_filefunc_def->opaque); ++ if (!stream) + return NULL; + } + } + + if (!stream) { +- if (!mz_stream_os_create(&stream)) ++ stream = mz_stream_os_create(); ++ if (!stream) + return NULL; + } + +@@ -706,17 +719,20 @@ unzFile unzOpen2_64(const void *path, zlib_filefunc64_def *pzlib_filefunc_def) { + + if (pzlib_filefunc_def) { + if (pzlib_filefunc_def->zopen64_file) { +- if (!mz_stream_ioapi_create(&stream)) ++ stream = mz_stream_ioapi_create(); ++ if (!stream) + return NULL; + mz_stream_ioapi_set_filefunc64(stream, pzlib_filefunc_def); + } else if (pzlib_filefunc_def->opaque) { +- if (!mz_stream_create(&stream, (mz_stream_vtbl *)pzlib_filefunc_def->opaque)) ++ stream = mz_stream_create((mz_stream_vtbl *)pzlib_filefunc_def->opaque); ++ if (!stream) + return NULL; + } + } + + if (!stream) { +- if (!mz_stream_os_create(&stream)) ++ stream = mz_stream_os_create(); ++ if (!stream) + return NULL; + } + +@@ -753,9 +769,11 @@ unzFile unzOpen_MZ(void *stream) { + int32_t err = MZ_OK; + void *handle = NULL; + +- mz_zip_create(&handle); +- err = mz_zip_open(handle, stream, MZ_OPEN_MODE_READ); ++ handle = mz_zip_create(); ++ if (!handle) ++ return NULL; + ++ err = mz_zip_open(handle, stream, MZ_OPEN_MODE_READ); + if (err != MZ_OK) { + mz_zip_delete(&handle); + return NULL; +@@ -1081,12 +1099,56 @@ int unzGoToNextFile(unzFile file) { + return err; + } + +-int unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filename_compare_func) { ++#if !defined(MZ_COMPAT_VERSION) || MZ_COMPAT_VERSION < 110 ++#ifdef WIN32 ++# define UNZ_DEFAULT_IGNORE_CASE 1 ++#else ++# define UNZ_DEFAULT_IGNORE_CASE 0 ++#endif ++ ++int unzLocateFile(unzFile file, const char *filename, unzFileNameCase filename_case) { + mz_compat *compat = (mz_compat *)file; + mz_zip_file *file_info = NULL; + uint64_t preserve_index = 0; + int32_t err = MZ_OK; + int32_t result = 0; ++ uint8_t ignore_case = UNZ_DEFAULT_IGNORE_CASE; ++ ++ if (!compat) ++ return UNZ_PARAMERROR; ++ ++ if (filename_case == 1) { ++ ignore_case = 0; ++ } else if (filename_case > 1) { ++ ignore_case = 1; ++ } ++ ++ preserve_index = compat->entry_index; ++ ++ err = mz_zip_goto_first_entry(compat->handle); ++ while (err == MZ_OK) { ++ err = mz_zip_entry_get_info(compat->handle, &file_info); ++ if (err != MZ_OK) ++ break; ++ ++ result = mz_path_compare_wc(filename, file_info->filename, !ignore_case); ++ ++ if (result == 0) ++ return MZ_OK; ++ ++ err = mz_zip_goto_next_entry(compat->handle); ++ } ++ ++ compat->entry_index = preserve_index; ++ return err; ++} ++#else ++int unzLocateFile(unzFile file, const char* filename, unzFileNameComparer filename_compare_func) { ++ mz_compat* compat = (mz_compat*)file; ++ mz_zip_file* file_info = NULL; ++ uint64_t preserve_index = 0; ++ int32_t err = MZ_OK; ++ int32_t result = 0; + + if (!compat) + return UNZ_PARAMERROR; +@@ -1101,7 +1163,8 @@ int unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filena + + if ((intptr_t)filename_compare_func > 2) { + result = filename_compare_func(file, filename, file_info->filename); +- } else { ++ } ++ else { + int32_t case_sensitive = (int32_t)(intptr_t)filename_compare_func; + result = mz_path_compare_wc(filename, file_info->filename, !case_sensitive); + } +@@ -1115,6 +1178,7 @@ int unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filena + compat->entry_index = preserve_index; + return err; + } ++#endif + + /***************************************************************************/ + +diff --git a/src/minizip/mz_compat.h b/src/minizip/mz_compat.h +index 6e6a916ff..47153ea24 100644 +--- a/src/minizip/mz_compat.h ++++ b/src/minizip/mz_compat.h +@@ -120,7 +120,7 @@ ZEXPORT void fill_memory_filefunc(zlib_filefunc_def *pzlib_filefunc_def); + + /***************************************************************************/ + +-#if MZ_COMPAT_VERSION <= 110 ++#if !defined(MZ_COMPAT_VERSION) || MZ_COMPAT_VERSION <= 110 + #define mz_dos_date dosDate + #else + #define mz_dos_date dos_date +@@ -130,10 +130,10 @@ typedef struct tm tm_unz; + typedef struct tm tm_zip; + + typedef struct { +- uint32_t mz_dos_date; +- struct tm tmz_date; +- uint16_t internal_fa; /* internal file attributes 2 bytes */ +- uint32_t external_fa; /* external file attributes 4 bytes */ ++ struct tm tmz_date; /* date in understandable format */ ++ unsigned long mz_dos_date; /* if dos_date == 0, tmz_date is used */ ++ unsigned long internal_fa; /* internal file attributes 2 bytes */ ++ unsigned long external_fa; /* external file attributes 4 bytes */ + } zip_fileinfo; + + typedef const char *zipcharpc; +@@ -195,7 +195,7 @@ ZEXPORT int zipOpenNewFileInZip3_64(zipFile file, const char *filename, cons + const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, + uint16_t size_extrafield_global, const char *comment, int compression_method, int level, + int raw, int windowBits, int memLevel, int strategy, const char *password, +- uint32_t crc_for_crypting, int zip64); ++ unsigned long crc_for_crypting, int zip64); + ZEXPORT int zipOpenNewFileInZip4(zipFile file, const char *filename, const zip_fileinfo *zipfi, + const void *extrafield_local, uint16_t size_extrafield_local, const void *extrafield_global, + uint16_t size_extrafield_global, const char *comment, int compression_method, int level, +@@ -252,33 +252,34 @@ typedef void *unzFile; + + typedef struct unz_global_info64_s { + uint64_t number_entry; /* total number of entries in the central dir on this disk */ ++ unsigned long size_comment; /* size of the global comment of the zipfile */ + uint32_t number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP */ +- uint16_t size_comment; /* size of the global comment of the zipfile */ + } unz_global_info64; + + typedef struct unz_global_info_s { +- uint32_t number_entry; /* total number of entries in the central dir on this disk */ ++ unsigned long number_entry; /* total number of entries in the central dir on this disk */ ++ unsigned long size_comment; /* size of the global comment of the zipfile */ + uint32_t number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP */ +- uint16_t size_comment; /* size of the global comment of the zipfile */ + } unz_global_info; + + typedef struct unz_file_info64_s { +- uint16_t version; /* version made by 2 bytes */ +- uint16_t version_needed; /* version needed to extract 2 bytes */ +- uint16_t flag; /* general purpose bit flag 2 bytes */ +- uint16_t compression_method; /* compression method 2 bytes */ +- uint32_t mz_dos_date; /* last mod file date in Dos fmt 4 bytes */ +- struct tm tmu_date; +- uint32_t crc; /* crc-32 4 bytes */ +- uint64_t compressed_size; /* compressed size 8 bytes */ +- uint64_t uncompressed_size; /* uncompressed size 8 bytes */ +- uint16_t size_filename; /* filename length 2 bytes */ +- uint16_t size_file_extra; /* extra field length 2 bytes */ +- uint16_t size_file_comment; /* file comment length 2 bytes */ ++ unsigned long version; /* version made by 2 bytes */ ++ unsigned long version_needed; /* version needed to extract 2 bytes */ ++ unsigned long flag; /* general purpose bit flag 2 bytes */ ++ unsigned long compression_method; /* compression method 2 bytes */ ++ unsigned long mz_dos_date; /* last mod file date in Dos fmt 4 bytes */ ++ unsigned long crc; /* crc-32 4 bytes */ ++ uint64_t compressed_size; /* compressed size 8 bytes */ ++ uint64_t uncompressed_size; /* uncompressed size 8 bytes */ ++ unsigned long size_filename; /* filename length 2 bytes */ ++ unsigned long size_file_extra; /* extra field length 2 bytes */ ++ unsigned long size_file_comment; /* file comment length 2 bytes */ ++ ++ unsigned long disk_num_start; /* disk number start 4 bytes */ ++ unsigned long internal_fa; /* internal file attributes 2 bytes */ ++ unsigned long external_fa; /* external file attributes 4 bytes */ + +- uint32_t disk_num_start; /* disk number start 4 bytes */ +- uint16_t internal_fa; /* internal file attributes 2 bytes */ +- uint32_t external_fa; /* external file attributes 4 bytes */ ++ struct tm tmu_date; + + uint64_t disk_offset; + +@@ -286,29 +287,39 @@ typedef struct unz_file_info64_s { + } unz_file_info64; + + typedef struct unz_file_info_s { +- uint16_t version; /* version made by 2 bytes */ +- uint16_t version_needed; /* version needed to extract 2 bytes */ +- uint16_t flag; /* general purpose bit flag 2 bytes */ +- uint16_t compression_method; /* compression method 2 bytes */ +- uint32_t mz_dos_date; /* last mod file date in Dos fmt 4 bytes */ +- struct tm tmu_date; +- uint32_t crc; /* crc-32 4 bytes */ +- uint32_t compressed_size; /* compressed size 4 bytes */ +- uint32_t uncompressed_size; /* uncompressed size 4 bytes */ +- uint16_t size_filename; /* filename length 2 bytes */ +- uint16_t size_file_extra; /* extra field length 2 bytes */ +- uint16_t size_file_comment; /* file comment length 2 bytes */ ++ unsigned long version; /* version made by 2 bytes */ ++ unsigned long version_needed; /* version needed to extract 2 bytes */ ++ unsigned long flag; /* general purpose bit flag 2 bytes */ ++ unsigned long compression_method; /* compression method 2 bytes */ ++ unsigned long mz_dos_date; /* last mod file date in Dos fmt 4 bytes */ ++ unsigned long crc; /* crc-32 4 bytes */ ++ unsigned long compressed_size; /* compressed size 4 bytes */ ++ unsigned long uncompressed_size; /* uncompressed size 4 bytes */ ++ unsigned long size_filename; /* filename length 2 bytes */ ++ unsigned long size_file_extra; /* extra field length 2 bytes */ ++ unsigned long size_file_comment; /* file comment length 2 bytes */ ++ ++ unsigned long disk_num_start; /* disk number start 2 bytes */ ++ unsigned long internal_fa; /* internal file attributes 2 bytes */ ++ unsigned long external_fa; /* external file attributes 4 bytes */ + +- uint16_t disk_num_start; /* disk number start 2 bytes */ +- uint16_t internal_fa; /* internal file attributes 2 bytes */ +- uint32_t external_fa; /* external file attributes 4 bytes */ ++ struct tm tmu_date; + + uint64_t disk_offset; + } unz_file_info; + + /***************************************************************************/ + +-typedef int (*unzFileNameComparer)(unzFile file, const char *filename1, const char *filename2); ++#if !defined(MZ_COMPAT_VERSION) || MZ_COMPAT_VERSION < 110 ++/* Possible values: ++ 0 - Uses OS default, e.g. Windows ignores case. ++ 1 - Is case sensitive. ++ >= 2 - Ignore case. ++*/ ++typedef int unzFileNameCase; ++#else ++typedef int (*unzFileNameComparer)(unzFile file, const char* filename1, const char* filename2); ++#endif + typedef int (*unzIteratorFunction)(unzFile file); + typedef int (*unzIteratorFunction2)(unzFile file, unz_file_info64 *pfile_info, char *filename, + uint16_t filename_size, void *extrafield, uint16_t extrafield_size, char *comment, +@@ -349,7 +360,11 @@ ZEXPORT int unzGetCurrentFileInfo64(unzFile file, unz_file_info64 * pfile_in + + ZEXPORT int unzGoToFirstFile(unzFile file); + ZEXPORT int unzGoToNextFile(unzFile file); +-ZEXPORT int unzLocateFile(unzFile file, const char *filename, unzFileNameComparer filename_compare_func); ++#if !defined(MZ_COMPAT_VERSION) || MZ_COMPAT_VERSION < 110 ++ZEXPORT int unzLocateFile(unzFile file, const char *filename, unzFileNameCase filename_case); ++#else ++ZEXPORT int unzLocateFile(unzFile file, const char* filename, unzFileNameComparer filename_compare_func); ++#endif + + ZEXPORT int unzGetLocalExtrafield(unzFile file, void *buf, unsigned int len); + +diff --git a/src/minizip/mz_crypt.c b/src/minizip/mz_crypt.c +index 0f3f28433..4c8d6596c 100644 +--- a/src/minizip/mz_crypt.c ++++ b/src/minizip/mz_crypt.c +@@ -121,9 +121,14 @@ int32_t mz_crypt_pbkdf2(uint8_t *password, int32_t password_length, uint8_t *sa + + memset(key, 0, key_length); + +- mz_crypt_hmac_create(&hmac1); +- mz_crypt_hmac_create(&hmac2); +- mz_crypt_hmac_create(&hmac3); ++ hmac1 = mz_crypt_hmac_create(); ++ hmac2 = mz_crypt_hmac_create(); ++ hmac3 = mz_crypt_hmac_create(); ++ ++ if (!hmac1 || !hmac2 || !hmac3) { ++ err = MZ_MEM_ERROR; ++ goto pbkdf2_cleanup; ++ } + + mz_crypt_hmac_set_algorithm(hmac1, MZ_HASH_SHA1); + mz_crypt_hmac_set_algorithm(hmac2, MZ_HASH_SHA1); +@@ -174,6 +179,7 @@ int32_t mz_crypt_pbkdf2(uint8_t *password, int32_t password_length, uint8_t *sa + key[k++] = ux[j++]; + } + ++pbkdf2_cleanup: + /* hmac3 uses the same provider as hmac2, so it must be deleted + before the context is destroyed. */ + mz_crypt_hmac_delete(&hmac3); +diff --git a/src/minizip/mz_crypt.h b/src/minizip/mz_crypt.h +index 9a341fc61..1837af800 100644 +--- a/src/minizip/mz_crypt.h ++++ b/src/minizip/mz_crypt.h +@@ -30,17 +30,21 @@ void mz_crypt_sha_reset(void *handle); + int32_t mz_crypt_sha_begin(void *handle); + int32_t mz_crypt_sha_update(void *handle, const void *buf, int32_t size); + int32_t mz_crypt_sha_end(void *handle, uint8_t *digest, int32_t digest_size); +-void mz_crypt_sha_set_algorithm(void *handle, uint16_t algorithm); +-void* mz_crypt_sha_create(void **handle); ++int32_t mz_crypt_sha_set_algorithm(void *handle, uint16_t algorithm); ++void* mz_crypt_sha_create(void); + void mz_crypt_sha_delete(void **handle); + + void mz_crypt_aes_reset(void *handle); +-int32_t mz_crypt_aes_encrypt(void *handle, uint8_t *buf, int32_t size); +-int32_t mz_crypt_aes_decrypt(void *handle, uint8_t *buf, int32_t size); +-int32_t mz_crypt_aes_set_encrypt_key(void *handle, const void *key, int32_t key_length); +-int32_t mz_crypt_aes_set_decrypt_key(void *handle, const void *key, int32_t key_length); ++int32_t mz_crypt_aes_encrypt(void *handle, const void *aad, int32_t aad_size, uint8_t *buf, int32_t size); ++int32_t mz_crypt_aes_encrypt_final(void *handle, uint8_t *buf, int32_t size, uint8_t *tag, int32_t tag_size); ++int32_t mz_crypt_aes_decrypt(void *handle, const void *aad, int32_t aad_size, uint8_t *buf, int32_t size); ++int32_t mz_crypt_aes_decrypt_final(void *handle, uint8_t *buf, int32_t size, const uint8_t *tag, int32_t tag_size); ++int32_t mz_crypt_aes_set_encrypt_key(void *handle, const void *key, int32_t key_length, ++ const void *iv, int32_t iv_length); ++int32_t mz_crypt_aes_set_decrypt_key(void *handle, const void *key, int32_t key_length, ++ const void *iv, int32_t iv_length); + void mz_crypt_aes_set_mode(void *handle, int32_t mode); +-void* mz_crypt_aes_create(void **handle); ++void* mz_crypt_aes_create(void); + void mz_crypt_aes_delete(void **handle); + + void mz_crypt_hmac_reset(void *handle); +@@ -49,13 +53,9 @@ int32_t mz_crypt_hmac_update(void *handle, const void *buf, int32_t size); + int32_t mz_crypt_hmac_end(void *handle, uint8_t *digest, int32_t digest_size); + int32_t mz_crypt_hmac_copy(void *src_handle, void *target_handle); + void mz_crypt_hmac_set_algorithm(void *handle, uint16_t algorithm); +-void* mz_crypt_hmac_create(void **handle); ++void* mz_crypt_hmac_create(void); + void mz_crypt_hmac_delete(void **handle); + +-int32_t mz_crypt_sign(uint8_t *message, int32_t message_size, uint8_t *cert_data, int32_t cert_data_size, +- const char *cert_pwd, uint8_t **signature, int32_t *signature_size); +-int32_t mz_crypt_sign_verify(uint8_t *message, int32_t message_size, uint8_t *signature, int32_t signature_size); +- + /***************************************************************************/ + + #ifdef __cplusplus +diff --git a/src/minizip/mz_os.c b/src/minizip/mz_os.c +index 6a3706086..57b1722fc 100644 +--- a/src/minizip/mz_os.c ++++ b/src/minizip/mz_os.c +@@ -68,7 +68,7 @@ int32_t mz_path_remove_slash(char *path) { + + int32_t mz_path_has_slash(const char *path) { + int32_t path_len = (int32_t)strlen(path); +- if (path[path_len - 1] != '\\' && path[path_len - 1] != '/') ++ if (path_len > 0 && path[path_len - 1] != '\\' && path[path_len - 1] != '/') + return MZ_EXIST_ERROR; + return MZ_OK; + } +@@ -171,11 +171,11 @@ int32_t mz_path_resolve(const char *path, char *output, int32_t max_output) { + if ((*check == 0) || (*check == '\\' || *check == '/')) { + source += (check - source); + +- /* Search backwards for previous slash */ ++ /* Search backwards for previous slash or the start of the output string */ + if (target != output) { + target -= 1; + do { +- if ((*target == '\\') || (*target == '/')) ++ if ((target == output) ||(*target == '\\') || (*target == '/')) + break; + + target -= 1; +@@ -283,6 +283,9 @@ int32_t mz_dir_make(const char *path) { + char *match = NULL; + char hold = 0; + ++ if (!*path) ++ return MZ_OK; ++ + current_dir = strdup(path); + if (!current_dir) + return MZ_MEM_ERROR; +@@ -320,10 +323,11 @@ int32_t mz_file_get_crc(const char *path, uint32_t *result_crc) { + int32_t err = MZ_OK; + uint8_t buf[16384]; + +- mz_stream_os_create(&stream); ++ stream = mz_stream_os_create(); ++ if (!stream) ++ return MZ_MEM_ERROR; + + err = mz_stream_os_open(stream, path, MZ_OPEN_MODE_READ); +- + if (err == MZ_OK) { + do { + read = mz_stream_os_read(stream, buf, sizeof(buf)); +diff --git a/src/minizip/mz_os.h b/src/minizip/mz_os.h +index 4505bc393..ad6ea4f11 100644 +--- a/src/minizip/mz_os.h ++++ b/src/minizip/mz_os.h +@@ -107,10 +107,10 @@ wchar_t *mz_os_unicode_string_create(const char *string, int32_t encoding); + void mz_os_unicode_string_delete(wchar_t **string); + /* Delete a unicode string that was created */ + +-uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding); ++char *mz_os_utf8_string_create(const char *string, int32_t encoding); + /* Create a utf8 string from a string with another encoding */ + +-void mz_os_utf8_string_delete(uint8_t **string); ++void mz_os_utf8_string_delete(char **string); + /* Delete a utf8 string that was created */ + + int32_t mz_os_rand(uint8_t *buf, int32_t size); +diff --git a/src/minizip/mz_os_posix.c b/src/minizip/mz_os_posix.c +index b4eb1937e..6736d0997 100644 +--- a/src/minizip/mz_os_posix.c ++++ b/src/minizip/mz_os_posix.c +@@ -40,14 +40,14 @@ + /***************************************************************************/ + + #if defined(HAVE_ICONV) +-uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { ++char *mz_os_utf8_string_create(const char *string, int32_t encoding) { + iconv_t cd; + const char *from_encoding = NULL; + size_t result = 0; + size_t string_length = 0; + size_t string_utf8_size = 0; +- uint8_t *string_utf8 = NULL; +- uint8_t *string_utf8_ptr = NULL; ++ char *string_utf8 = NULL; ++ char *string_utf8_ptr = NULL; + + if (!string) + return NULL; +@@ -71,7 +71,7 @@ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { + + string_length = strlen(string); + string_utf8_size = string_length * 2; +- string_utf8 = (uint8_t *)calloc((int32_t)(string_utf8_size + 1), sizeof(char)); ++ string_utf8 = (char *)calloc((int32_t)(string_utf8_size + 1), sizeof(char)); + string_utf8_ptr = string_utf8; + + if (string_utf8) { +@@ -89,12 +89,12 @@ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { + return string_utf8; + } + #else +-uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { ++char *mz_os_utf8_string_create(const char *string, int32_t encoding) { + return strdup(string); + } + #endif + +-void mz_os_utf8_string_delete(uint8_t **string) { ++void mz_os_utf8_string_delete(char **string) { + if (string) { + free(*string); + *string = NULL; +@@ -199,7 +199,6 @@ int64_t mz_os_get_file_size(const char *path) { + int32_t mz_os_get_file_date(const char *path, time_t *modified_date, time_t *accessed_date, time_t *creation_date) { + struct stat path_stat; + char *name = NULL; +- size_t len = 0; + int32_t err = MZ_INTERNAL_ERROR; + + memset(&path_stat, 0, sizeof(path_stat)); +diff --git a/src/minizip/mz_os_win32.c b/src/minizip/mz_os_win32.c +index 85c7b3a24..808749b5d 100644 +--- a/src/minizip/mz_os_win32.c ++++ b/src/minizip/mz_os_win32.c +@@ -21,6 +21,10 @@ + # define SYMBOLIC_LINK_FLAG_DIRECTORY 0x1 + #endif + ++#ifndef _WIN32_WINNT_WIN8 ++# define _WIN32_WINNT_WIN8 0x0602 ++#endif ++ + /***************************************************************************/ + + typedef struct DIR_int_s { +@@ -54,18 +58,18 @@ void mz_os_unicode_string_delete(wchar_t **string) { + } + } + +-uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { ++char *mz_os_utf8_string_create(const char *string, int32_t encoding) { + wchar_t *string_wide = NULL; +- uint8_t *string_utf8 = NULL; ++ char *string_utf8 = NULL; + uint32_t string_utf8_size = 0; + + string_wide = mz_os_unicode_string_create(string, encoding); + if (string_wide) { + string_utf8_size = WideCharToMultiByte(CP_UTF8, 0, string_wide, -1, NULL, 0, NULL, NULL); +- string_utf8 = (uint8_t *)calloc(string_utf8_size + 1, sizeof(wchar_t)); ++ string_utf8 = (char *)calloc(string_utf8_size + 1, sizeof(char)); + + if (string_utf8) +- WideCharToMultiByte(CP_UTF8, 0, string_wide, -1, (char *)string_utf8, string_utf8_size, NULL, NULL); ++ WideCharToMultiByte(CP_UTF8, 0, string_wide, -1, string_utf8, string_utf8_size, NULL, NULL); + + mz_os_unicode_string_delete(&string_wide); + } +@@ -73,22 +77,22 @@ uint8_t *mz_os_utf8_string_create(const char *string, int32_t encoding) { + return string_utf8; + } + +-uint8_t *mz_os_utf8_string_create_from_unicode(const wchar_t *string, int32_t encoding) { +- uint8_t *string_utf8 = NULL; ++char *mz_os_utf8_string_create_from_unicode(const wchar_t *string, int32_t encoding) { ++ char *string_utf8 = NULL; + uint32_t string_utf8_size = 0; + + MZ_UNUSED(encoding); + + string_utf8_size = WideCharToMultiByte(CP_UTF8, 0, string, -1, NULL, 0, NULL, NULL); +- string_utf8 = (uint8_t *)calloc(string_utf8_size + 1, sizeof(wchar_t)); ++ string_utf8 = (char *)calloc(string_utf8_size + 1, sizeof(char)); + + if (string_utf8) +- WideCharToMultiByte(CP_UTF8, 0, string, -1, (char *)string_utf8, string_utf8_size, NULL, NULL); ++ WideCharToMultiByte(CP_UTF8, 0, string, -1, string_utf8, string_utf8_size, NULL, NULL); + + return string_utf8; + } + +-void mz_os_utf8_string_delete(uint8_t **string) { ++void mz_os_utf8_string_delete(char **string) { + if (string) { + free(*string); + *string = NULL; +@@ -488,7 +492,7 @@ int32_t mz_os_make_symlink(const char *path, const char *target_path) { + if (!path) + return MZ_PARAM_ERROR; + +- // Use VirtualQuery instead of GetModuleHandleW for UWP ++ /* Use VirtualQuery instead of GetModuleHandleW for UWP */ + memset(&mbi, 0, sizeof(mbi)); + VirtualQuery(VirtualQuery, &mbi, sizeof(mbi)); + kernel32_mod = (HMODULE)mbi.AllocationBase; +@@ -559,7 +563,7 @@ int32_t mz_os_read_symlink(const char *path, char *target_path, int32_t max_targ + int32_t target_path_len = 0; + int32_t target_path_idx = 0; + int32_t err = MZ_OK; +- uint8_t *target_path_utf8 = NULL; ++ char *target_path_utf8 = NULL; + + if (!path) + return MZ_PARAM_ERROR; +@@ -605,10 +609,10 @@ int32_t mz_os_read_symlink(const char *path, char *target_path, int32_t max_targ + target_path_utf8 = mz_os_utf8_string_create_from_unicode(target_path_wide, MZ_ENCODING_UTF8); + + if (target_path_utf8) { +- strncpy(target_path, (const char *)target_path_utf8, max_target_path - 1); ++ strncpy(target_path, target_path_utf8, max_target_path - 1); + target_path[max_target_path - 1] = 0; + /* Ensure directories have slash at the end so we can recreate them later */ +- if (mz_os_is_dir((const char *)target_path_utf8) == MZ_OK) ++ if (mz_os_is_dir(target_path_utf8) == MZ_OK) + mz_path_append_slash(target_path, max_target_path, MZ_PATH_SLASH_PLATFORM); + mz_os_utf8_string_delete(&target_path_utf8); + } else { +diff --git a/src/minizip/mz_strm.c b/src/minizip/mz_strm.c +index 35d4c62fd..edcbafa0c 100644 +--- a/src/minizip/mz_strm.c ++++ b/src/minizip/mz_strm.c +@@ -397,10 +397,10 @@ int32_t mz_stream_set_prop_int64(void *stream, int32_t prop, int64_t value) { + return strm->vtbl->set_prop_int64(stream, prop, value); + } + +-void *mz_stream_create(void **stream, mz_stream_vtbl *vtbl) { +- if (!stream || !vtbl || !vtbl->create) ++void *mz_stream_create(mz_stream_vtbl *vtbl) { ++ if (!vtbl || !vtbl->create) + return NULL; +- return vtbl->create(stream); ++ return vtbl->create(); + } + + void mz_stream_delete(void **stream) { +@@ -533,15 +533,10 @@ static mz_stream_vtbl mz_stream_raw_vtbl = { + + /***************************************************************************/ + +-void *mz_stream_raw_create(void **stream) { +- mz_stream_raw *raw = NULL; +- +- raw = (mz_stream_raw *)calloc(1, sizeof(mz_stream_raw)); ++void *mz_stream_raw_create(void) { ++ mz_stream_raw *raw = (mz_stream_raw *)calloc(1, sizeof(mz_stream_raw)); + if (raw) + raw->stream.vtbl = &mz_stream_raw_vtbl; +- if (stream) +- *stream = raw; +- + return raw; + } + +diff --git a/src/minizip/mz_strm.h b/src/minizip/mz_strm.h +index 5f88015d0..f65baabfb 100644 +--- a/src/minizip/mz_strm.h ++++ b/src/minizip/mz_strm.h +@@ -39,7 +39,7 @@ typedef int64_t (*mz_stream_tell_cb) (void *stream); + typedef int32_t (*mz_stream_seek_cb) (void *stream, int64_t offset, int32_t origin); + typedef int32_t (*mz_stream_close_cb) (void *stream); + typedef int32_t (*mz_stream_error_cb) (void *stream); +-typedef void* (*mz_stream_create_cb) (void **stream); ++typedef void* (*mz_stream_create_cb) (void); + typedef void (*mz_stream_destroy_cb) (void **stream); + + typedef int32_t (*mz_stream_get_prop_int64_cb) (void *stream, int32_t prop, int64_t *value); +@@ -103,7 +103,7 @@ void* mz_stream_get_interface(void *stream); + int32_t mz_stream_get_prop_int64(void *stream, int32_t prop, int64_t *value); + int32_t mz_stream_set_prop_int64(void *stream, int32_t prop, int64_t value); + +-void* mz_stream_create(void **stream, mz_stream_vtbl *vtbl); ++void* mz_stream_create(mz_stream_vtbl *vtbl); + void mz_stream_delete(void **stream); + + /***************************************************************************/ +@@ -120,7 +120,7 @@ int32_t mz_stream_raw_error(void *stream); + int32_t mz_stream_raw_get_prop_int64(void *stream, int32_t prop, int64_t *value); + int32_t mz_stream_raw_set_prop_int64(void *stream, int32_t prop, int64_t value); + +-void* mz_stream_raw_create(void **stream); ++void* mz_stream_raw_create(void); + void mz_stream_raw_delete(void **stream); + + /***************************************************************************/ +diff --git a/src/minizip/mz_strm_mem.c b/src/minizip/mz_strm_mem.c +index 9a78dc1bd..45881b2ba 100644 +--- a/src/minizip/mz_strm_mem.c ++++ b/src/minizip/mz_strm_mem.c +@@ -237,17 +237,12 @@ void mz_stream_mem_set_grow_size(void *stream, int32_t grow_size) { + mem->grow_size = grow_size; + } + +-void *mz_stream_mem_create(void **stream) { +- mz_stream_mem *mem = NULL; +- +- mem = (mz_stream_mem *)calloc(1, sizeof(mz_stream_mem)); ++void *mz_stream_mem_create(void) { ++ mz_stream_mem *mem = (mz_stream_mem *)calloc(1, sizeof(mz_stream_mem)); + if (mem) { + mem->stream.vtbl = &mz_stream_mem_vtbl; + mem->grow_size = 4096; + } +- if (stream) +- *stream = mem; +- + return mem; + } + +diff --git a/src/minizip/mz_strm_mem.h b/src/minizip/mz_strm_mem.h +index 22a12deae..ed6f9574e 100644 +--- a/src/minizip/mz_strm_mem.h ++++ b/src/minizip/mz_strm_mem.h +@@ -34,7 +34,7 @@ void mz_stream_mem_get_buffer_length(void *stream, int32_t *length); + void mz_stream_mem_set_buffer_limit(void *stream, int32_t limit); + void mz_stream_mem_set_grow_size(void *stream, int32_t grow_size); + +-void* mz_stream_mem_create(void **stream); ++void* mz_stream_mem_create(void); + void mz_stream_mem_delete(void **stream); + + void* mz_stream_mem_get_interface(void); +diff --git a/src/minizip/mz_strm_os.h b/src/minizip/mz_strm_os.h +index 83d292b95..0ed279f5f 100644 +--- a/src/minizip/mz_strm_os.h ++++ b/src/minizip/mz_strm_os.h +@@ -26,7 +26,7 @@ int32_t mz_stream_os_seek(void *stream, int64_t offset, int32_t origin); + int32_t mz_stream_os_close(void *stream); + int32_t mz_stream_os_error(void *stream); + +-void* mz_stream_os_create(void **stream); ++void* mz_stream_os_create(void); + void mz_stream_os_delete(void **stream); + + void* mz_stream_os_get_interface(void); +diff --git a/src/minizip/mz_strm_os_posix.c b/src/minizip/mz_strm_os_posix.c +index 60ff502de..b351ebb70 100644 +--- a/src/minizip/mz_strm_os_posix.c ++++ b/src/minizip/mz_strm_os_posix.c +@@ -176,15 +176,10 @@ int32_t mz_stream_os_error(void *stream) { + return posix->error; + } + +-void *mz_stream_os_create(void **stream) { +- mz_stream_posix *posix = NULL; +- +- posix = (mz_stream_posix *)calloc(1, sizeof(mz_stream_posix)); ++void *mz_stream_os_create(void) { ++ mz_stream_posix *posix = (mz_stream_posix *)calloc(1, sizeof(mz_stream_posix)); + if (posix) + posix->stream.vtbl = &mz_stream_os_vtbl; +- if (stream) +- *stream = posix; +- + return posix; + } + +diff --git a/src/minizip/mz_strm_os_win32.c b/src/minizip/mz_strm_os_win32.c +index 80d03ea11..c4198ccf2 100644 +--- a/src/minizip/mz_strm_os_win32.c ++++ b/src/minizip/mz_strm_os_win32.c +@@ -23,11 +23,15 @@ + /***************************************************************************/ + + #ifndef INVALID_HANDLE_VALUE +-# define INVALID_HANDLE_VALUE (0xFFFFFFFF) ++# define INVALID_HANDLE_VALUE 0xFFFFFFFF + #endif + + #ifndef INVALID_SET_FILE_POINTER +-# define INVALID_SET_FILE_POINTER ((DWORD)-1) ++# define INVALID_SET_FILE_POINTER (DWORD)-1 ++#endif ++ ++#ifndef _WIN32_WINNT_WIN8 ++# define _WIN32_WINNT_WIN8 0x0602 + #endif + + /***************************************************************************/ +@@ -258,15 +262,10 @@ int32_t mz_stream_os_error(void *stream) { + return win32->error; + } + +-void *mz_stream_os_create(void **stream) { +- mz_stream_win32 *win32 = NULL; +- +- win32 = (mz_stream_win32 *)calloc(1, sizeof(mz_stream_win32)); ++void *mz_stream_os_create(void) { ++ mz_stream_win32 *win32 = (mz_stream_win32 *)calloc(1, sizeof(mz_stream_win32)); + if (win32) + win32->stream.vtbl = &mz_stream_os_vtbl; +- if (stream) +- *stream = win32; +- + return win32; + } + +diff --git a/src/minizip/mz_strm_zlib.c b/src/minizip/mz_strm_zlib.c +index b7ac4d1a6..cba63fb2f 100644 +--- a/src/minizip/mz_strm_zlib.c ++++ b/src/minizip/mz_strm_zlib.c +@@ -191,6 +191,8 @@ int32_t mz_stream_zlib_read(void *stream, void *buf, int32_t size) { + } + } while (zlib->zstream.avail_out > 0); + ++ MZ_UNUSED(total_in); ++ + if (zlib->error != 0) { + /* Zlib errors are compatible with MZ */ + return zlib->error; +@@ -345,7 +347,10 @@ int32_t mz_stream_zlib_set_prop_int64(void *stream, int32_t prop, int64_t value) + mz_stream_zlib *zlib = (mz_stream_zlib *)stream; + switch (prop) { + case MZ_STREAM_PROP_COMPRESS_LEVEL: +- zlib->level = (int16_t)value; ++ if (value == MZ_COMPRESS_LEVEL_DEFAULT) ++ zlib->level = Z_DEFAULT_COMPRESSION; ++ else ++ zlib->level = (int16_t)value; + break; + case MZ_STREAM_PROP_TOTAL_IN_MAX: + zlib->max_total_in = value; +@@ -359,18 +364,13 @@ int32_t mz_stream_zlib_set_prop_int64(void *stream, int32_t prop, int64_t value) + return MZ_OK; + } + +-void *mz_stream_zlib_create(void **stream) { +- mz_stream_zlib *zlib = NULL; +- +- zlib = (mz_stream_zlib *)calloc(1, sizeof(mz_stream_zlib)); ++void *mz_stream_zlib_create(void) { ++ mz_stream_zlib *zlib = zlib = (mz_stream_zlib *)calloc(1, sizeof(mz_stream_zlib)); + if (zlib) { + zlib->stream.vtbl = &mz_stream_zlib_vtbl; + zlib->level = Z_DEFAULT_COMPRESSION; + zlib->window_bits = -MAX_WBITS; + } +- if (stream) +- *stream = zlib; +- + return zlib; + } + +diff --git a/src/minizip/mz_strm_zlib.h b/src/minizip/mz_strm_zlib.h +index 4bdcdf813..bba0991ca 100644 +--- a/src/minizip/mz_strm_zlib.h ++++ b/src/minizip/mz_strm_zlib.h +@@ -29,7 +29,7 @@ int32_t mz_stream_zlib_error(void *stream); + int32_t mz_stream_zlib_get_prop_int64(void *stream, int32_t prop, int64_t *value); + int32_t mz_stream_zlib_set_prop_int64(void *stream, int32_t prop, int64_t value); + +-void* mz_stream_zlib_create(void **stream); ++void* mz_stream_zlib_create(void); + void mz_stream_zlib_delete(void **stream); + + void* mz_stream_zlib_get_interface(void); +diff --git a/src/minizip/mz_zip.c b/src/minizip/mz_zip.c +index e80550f0e..019fcbf28 100644 +--- a/src/minizip/mz_zip.c ++++ b/src/minizip/mz_zip.c +@@ -431,7 +431,7 @@ static int32_t mz_zip_entry_read_header(void *stream, uint8_t local, mz_zip_file + /* Get AES encryption strength and actual compression method */ + if (err == MZ_OK) { + err = mz_stream_read_uint8(file_extra_stream, &value8); +- file_info->aes_encryption_mode = value8; ++ file_info->aes_strength = value8; + } + if (err == MZ_OK) { + err = mz_stream_read_uint16(file_extra_stream, &value16); +@@ -643,7 +643,9 @@ static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_fil + + /* Calculate extra field size and check for duplicates */ + if (file_info->extrafield_size > 0) { +- mz_stream_mem_create(&file_extra_stream); ++ file_extra_stream = mz_stream_mem_create(); ++ if (!file_extra_stream) ++ return MZ_MEM_ERROR; + mz_stream_mem_set_buffer(file_extra_stream, (void *)file_info->extrafield, + file_info->extrafield_size); + +@@ -790,7 +792,7 @@ static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_fil + int32_t left = filename_length; + + /* Ensure all slashes are written as forward slashes according to 4.4.17.1 */ +- while ((err == MZ_OK) && (backslash = strrchr(next, '\\'))) { ++ while ((err == MZ_OK) && (backslash = strchr(next, '\\'))) { + int32_t part_length = (int32_t)(backslash - next); + + if (mz_stream_write(stream, next, part_length) != part_length || +@@ -876,7 +878,7 @@ static int32_t mz_zip_entry_write_header(void *stream, uint8_t local, mz_zip_fil + if (err == MZ_OK) + err = mz_stream_write_uint8(stream, 'E'); + if (err == MZ_OK) +- err = mz_stream_write_uint8(stream, file_info->aes_encryption_mode); ++ err = mz_stream_write_uint8(stream, file_info->aes_strength); + if (err == MZ_OK) + err = mz_stream_write_uint16(stream, file_info->compression_method); + } +@@ -1112,7 +1114,7 @@ static int32_t mz_zip_write_cd(void *handle) { + zip->disk_number_with_cd += 1; + mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, -1); + if ((zip->disk_number_with_cd > 0) && (zip->open_mode & MZ_OPEN_MODE_APPEND)) { +- // Overwrite existing central directory if using split disks ++ /* Overwrite existing central directory if using split disks */ + mz_stream_seek(zip->stream, 0, MZ_SEEK_SET); + } + +@@ -1127,7 +1129,7 @@ static int32_t mz_zip_write_cd(void *handle) { + zip->disk_number_with_cd, zip->number_entry, zip->cd_offset, zip->cd_size); + + if (zip->cd_size == 0 && zip->number_entry > 0) { +- // Zip does not contain central directory, open with recovery option ++ /* Zip does not contain central directory, open with recovery option */ + return MZ_FORMAT_ERROR; + } + +@@ -1264,10 +1266,13 @@ static int32_t mz_zip_recover_cd(void *handle) { + } else + disk_number_with_cd = 1; + ++ local_file_info_stream = mz_stream_mem_create(); ++ if (!local_file_info_stream) ++ return MZ_MEM_ERROR; ++ + if (mz_stream_is_open(cd_mem_stream) != MZ_OK) + err = mz_stream_mem_open(cd_mem_stream, NULL, MZ_OPEN_MODE_CREATE); + +- mz_stream_mem_create(&local_file_info_stream); + mz_stream_mem_open(local_file_info_stream, NULL, MZ_OPEN_MODE_CREATE); + + if (err == MZ_OK) { +@@ -1397,15 +1402,10 @@ static int32_t mz_zip_recover_cd(void *handle) { + return MZ_OK; + } + +-void *mz_zip_create(void **handle) { +- mz_zip *zip = NULL; +- +- zip = (mz_zip *)calloc(1, sizeof(mz_zip)); ++void *mz_zip_create(void) { ++ mz_zip *zip = (mz_zip *)calloc(1, sizeof(mz_zip)); + if (zip) + zip->data_descriptor = 1; +- if (handle) +- *handle = zip; +- + return zip; + } + +@@ -1430,8 +1430,9 @@ int32_t mz_zip_open(void *handle, void *stream, int32_t mode) { + mz_zip_print("Zip - Open\n"); + + zip->stream = stream; +- +- mz_stream_mem_create(&zip->cd_mem_stream); ++ zip->cd_mem_stream = mz_stream_mem_create(); ++ if (!zip->cd_mem_stream) ++ return MZ_MEM_ERROR; + + if (mode & MZ_OPEN_MODE_WRITE) { + mz_stream_mem_open(zip->cd_mem_stream, NULL, MZ_OPEN_MODE_CREATE); +@@ -1483,10 +1484,18 @@ int32_t mz_zip_open(void *handle, void *stream, int32_t mode) { + } + + /* Memory streams used to store variable length file info data */ +- mz_stream_mem_create(&zip->file_info_stream); ++ zip->file_info_stream = mz_stream_mem_create(); ++ if (!zip->file_info_stream) ++ return MZ_MEM_ERROR; ++ + mz_stream_mem_open(zip->file_info_stream, NULL, MZ_OPEN_MODE_CREATE); + +- mz_stream_mem_create(&zip->local_file_info_stream); ++ zip->local_file_info_stream = mz_stream_mem_create(); ++ if (!zip->local_file_info_stream) { ++ mz_stream_delete(&zip->file_info_stream); ++ return MZ_MEM_ERROR; ++ } ++ + mz_stream_mem_open(zip->local_file_info_stream, NULL, MZ_OPEN_MODE_CREATE); + + zip->open_mode = mode; +@@ -1724,9 +1733,11 @@ static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress + if ((err == MZ_OK) && (use_crypt)) { + #ifdef HAVE_WZAES + if (zip->file_info.aes_version) { +- mz_stream_wzaes_create(&zip->crypt_stream); ++ zip->crypt_stream = mz_stream_wzaes_create(); ++ if (!zip->crypt_stream) ++ return MZ_MEM_ERROR; + mz_stream_wzaes_set_password(zip->crypt_stream, password); +- mz_stream_wzaes_set_encryption_mode(zip->crypt_stream, zip->file_info.aes_encryption_mode); ++ mz_stream_wzaes_set_strength(zip->crypt_stream, zip->file_info.aes_strength); + } else + #endif + { +@@ -1734,7 +1745,9 @@ static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress + uint8_t verify1 = (uint8_t)((zip->file_info.pk_verify >> 8) & 0xff); + uint8_t verify2 = (uint8_t)((zip->file_info.pk_verify) & 0xff); + +- mz_stream_pkcrypt_create(&zip->crypt_stream); ++ zip->crypt_stream = mz_stream_pkcrypt_create(); ++ if (!zip->crypt_stream) ++ return MZ_MEM_ERROR; + mz_stream_pkcrypt_set_password(zip->crypt_stream, password); + mz_stream_pkcrypt_set_verify(zip->crypt_stream, verify1, verify2); + #endif +@@ -1743,7 +1756,9 @@ static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress + + if (err == MZ_OK) { + if (!zip->crypt_stream) +- mz_stream_raw_create(&zip->crypt_stream); ++ zip->crypt_stream = mz_stream_raw_create(); ++ if (!zip->crypt_stream) ++ return MZ_MEM_ERROR; + + mz_stream_set_base(zip->crypt_stream, zip->stream); + +@@ -1752,39 +1767,44 @@ static int32_t mz_zip_entry_open_int(void *handle, uint8_t raw, int16_t compress + + if (err == MZ_OK) { + if (zip->entry_raw || zip->file_info.compression_method == MZ_COMPRESS_METHOD_STORE) +- mz_stream_raw_create(&zip->compress_stream); ++ zip->compress_stream = mz_stream_raw_create(); + #ifdef HAVE_ZLIB + else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_DEFLATE) +- mz_stream_zlib_create(&zip->compress_stream); ++ zip->compress_stream = mz_stream_zlib_create(); + #endif + #ifdef HAVE_BZIP2 + else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_BZIP2) +- mz_stream_bzip_create(&zip->compress_stream); ++ zip->compress_stream = mz_stream_bzip_create(); + #endif + #ifdef HAVE_LIBCOMP + else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_DEFLATE || + zip->file_info.compression_method == MZ_COMPRESS_METHOD_XZ) { +- mz_stream_libcomp_create(&zip->compress_stream); +- mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_COMPRESS_METHOD, +- zip->file_info.compression_method); ++ zip->compress_stream = mz_stream_libcomp_create(); ++ if (zip->compress_stream) ++ mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_COMPRESS_METHOD, ++ zip->file_info.compression_method); + } + #endif + #ifdef HAVE_LZMA + else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_LZMA || + zip->file_info.compression_method == MZ_COMPRESS_METHOD_XZ) { +- mz_stream_lzma_create(&zip->compress_stream); +- mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_COMPRESS_METHOD, +- zip->file_info.compression_method); ++ zip->compress_stream = mz_stream_lzma_create(); ++ if (zip->compress_stream) ++ mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_COMPRESS_METHOD, ++ zip->file_info.compression_method); + } + #endif + #ifdef HAVE_ZSTD + else if (zip->file_info.compression_method == MZ_COMPRESS_METHOD_ZSTD) +- mz_stream_zstd_create(&zip->compress_stream); ++ zip->compress_stream = mz_stream_zstd_create(); + #endif + else + err = MZ_PARAM_ERROR; + } + ++ if (err == MZ_OK && !zip->compress_stream) ++ err = MZ_MEM_ERROR; ++ + if (err == MZ_OK) { + if (zip->open_mode & MZ_OPEN_MODE_WRITE) { + mz_stream_set_prop_int64(zip->compress_stream, MZ_STREAM_PROP_COMPRESS_LEVEL, compress_level); +@@ -1981,8 +2001,8 @@ int32_t mz_zip_entry_write_open(void *handle, const mz_zip_file *file_info, int1 + zip->file_info.pk_verify = mz_zip_get_pk_verify(dos_date, zip->file_info.crc, zip->file_info.flag); + #endif + #ifdef HAVE_WZAES +- if (zip->file_info.aes_version && zip->file_info.aes_encryption_mode == 0) +- zip->file_info.aes_encryption_mode = MZ_AES_ENCRYPTION_MODE_256; ++ if (zip->file_info.aes_version && zip->file_info.aes_strength == 0) ++ zip->file_info.aes_strength = MZ_AES_STRENGTH_256; + #endif + } + +@@ -2179,9 +2199,8 @@ int32_t mz_zip_entry_write_close(void *handle, uint32_t crc32, int64_t compresse + + if (err == MZ_OK) { + /* Seek to crc32 and sizes offset in local header */ +- err = mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, zip->file_info.disk_number); +- if (err == MZ_OK) +- err = mz_stream_seek(zip->stream, zip->file_info.disk_offset + MZ_ZIP_OFFSET_CRC_SIZES, MZ_SEEK_SET); ++ mz_stream_set_prop_int64(zip->stream, MZ_STREAM_PROP_DISK_NUMBER, zip->file_info.disk_number); ++ err = mz_stream_seek(zip->stream, zip->file_info.disk_offset + MZ_ZIP_OFFSET_CRC_SIZES, MZ_SEEK_SET); + } + + if (err == MZ_OK) +@@ -2600,13 +2619,13 @@ int32_t mz_zip_extrafield_contains(const uint8_t *extrafield, int32_t extrafield + if (!extrafield || !extrafield_size) + return MZ_PARAM_ERROR; + +- mz_stream_mem_create(&file_extra_stream); +- mz_stream_mem_set_buffer(file_extra_stream, (void *)extrafield, extrafield_size); ++ file_extra_stream = mz_stream_mem_create(); ++ if (!file_extra_stream) ++ return MZ_MEM_ERROR; + ++ mz_stream_mem_set_buffer(file_extra_stream, (void *)extrafield, extrafield_size); + err = mz_zip_extrafield_find(file_extra_stream, type, extrafield_size, length); +- + mz_stream_mem_delete(&file_extra_stream); +- + return err; + } + +diff --git a/src/minizip/mz_zip.h b/src/minizip/mz_zip.h +index 65be301af..cc01ee5a0 100644 +--- a/src/minizip/mz_zip.h ++++ b/src/minizip/mz_zip.h +@@ -48,7 +48,7 @@ typedef struct mz_zip_file_s { + + uint16_t zip64; /* zip64 extension mode */ + uint16_t aes_version; /* winzip aes extension if not 0 */ +- uint8_t aes_encryption_mode; /* winzip aes encryption mode */ ++ uint8_t aes_strength; /* winzip aes encryption strength */ + uint16_t pk_verify; /* pkware encryption verifier */ + + } mz_zip_file, mz_zip_entry; +@@ -59,7 +59,7 @@ typedef int32_t (*mz_zip_locate_entry_cb)(void *handle, void *userdata, mz_zip_f + + /***************************************************************************/ + +-void * mz_zip_create(void **handle); ++void * mz_zip_create(void); + /* Create zip instance for opening */ + + void mz_zip_delete(void **handle); diff --git a/42.patch b/42.patch new file mode 100644 index 0000000..4f2d46a --- /dev/null +++ b/42.patch @@ -0,0 +1,1174 @@ +From cbfd360cd6404b32b0913fd451c31c80f71ef8ea Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Wed, 7 Feb 2024 00:45:38 +0100 +Subject: [PATCH 1/5] imp: convert machinelist.{cpp,h} to QXmlStreamReader + +--- + src/machinelist.cpp | 642 ++++++++++++++++++++++---------------------- + src/machinelist.h | 6 +- + 2 files changed, 322 insertions(+), 326 deletions(-) + +diff --git a/src/machinelist.cpp b/src/machinelist.cpp +index 4ccdc3c4b..559e6ac65 100644 +--- a/src/machinelist.cpp ++++ b/src/machinelist.cpp +@@ -892,14 +892,11 @@ void MachineList::verify(bool currentOnly) + verifyProc->start(command, args, QIODevice::ReadOnly | QIODevice::Text); + } + +-QString MachineList::value(QString element, QString attribute, bool translate) ++QString MachineList::value(QXmlStreamReader *element, QString attribute, bool translate) + { +- QString attributePattern(" " + attribute + "=\""); +- if ( element.contains(attributePattern) ) { +- QString valueString(element.remove(0, element.indexOf(attributePattern) + attributePattern.length())); +- valueString = valueString.remove(valueString.indexOf("\""), valueString.lastIndexOf(">")).replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'"); +- if ( valueString == ">" ) +- return QString(); ++ if ( element->attributes().hasAttribute(attribute) ) { ++ QString valueString(element->attributes().value(attribute).toString()); ++ valueString = valueString.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'"); + if ( translate ) + return tr(valueString.toUtf8().constData()); + else +@@ -908,7 +905,7 @@ QString MachineList::value(QString element, QString attribute, bool translate) + return QString(); + } + +-void MachineList::insertAttributeItems(QTreeWidgetItem *parent, QString element, QStringList attributes, QStringList descriptions, bool translate) ++void MachineList::insertAttributeItems(QTreeWidgetItem *parent, QXmlStreamReader *element, QStringList attributes, QStringList descriptions, bool translate) + { + QList itemList; + for (int i = 0; i < attributes.count(); i++) { +@@ -923,7 +920,7 @@ void MachineList::insertAttributeItems(QTreeWidgetItem *parent, QString element, + parent->addChildren(itemList); + } + +-void MachineList::insertAttributeItems(QList *itemList, QString element, QStringList attributes, QStringList descriptions, bool translate) ++void MachineList::insertAttributeItems(QList *itemList, QXmlStreamReader *element, QStringList attributes, QStringList descriptions, bool translate) + { + for (int i = 0; i < attributes.count(); i++) { + QString valueString(value(element, attributes.at(i), translate)); +@@ -939,12 +936,7 @@ void MachineList::insertAttributeItems(QList *itemList, QStri + void MachineList::parseMachineDetail(QTreeWidgetItem *item) + { + QString machineName(item->text(QMC2_MACHINELIST_COLUMN_NAME)); +- QStringList xmlLines(xmlDb()->xml(machineName).split("\n", QString::SkipEmptyParts)); +- if ( xmlLines.count() < 2 ) { +- qmc2MainWindow->log(QMC2_LOG_FRONTEND, tr("WARNING: couldn't find machine information for '%1'").arg(machineName)); +- return; +- } +- int gamePos = 1; ++ QXmlStreamReader xmlMachineEntry(xmlDb()->xml(machineName)); + item->child(0)->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Updating")); + qmc2MainWindow->treeWidgetMachineList->viewport()->repaint(); + qApp->processEvents(); +@@ -955,259 +947,264 @@ void MachineList::parseMachineDetail(QTreeWidgetItem *item) + + attributes << "name" << "sourcefile" << "isbios" << "isdevice" << "runnable" << "cloneof" << "romof" << "sampleof"; + descriptions << tr("Name") << tr("Source file") << tr("Is BIOS?") << tr("Is device?") << tr("Runnable") << tr("Clone of") << tr("ROM of") << tr("Sample of"); +- element = xmlLines.at(gamePos - 1).simplified(); +- insertAttributeItems(&itemList, element, attributes, descriptions, true); +- QString endMark(""); +- +- while ( !xmlLines.at(gamePos).contains(endMark) ) { +- childItem = 0; +- element = xmlLines.at(gamePos).simplified(); +- if ( element.contains("") ) { +- content = element.remove("").remove(""); +- childItem = new QTreeWidgetItem(); +- childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Year")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, content); +- } +- if ( element.contains("") ) { +- content = element.remove("").remove(""); +- content.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'"); +- childItem = new QTreeWidgetItem(); +- childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Manufacturer")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, content); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("ROM")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name")); +- attributes.clear(); +- attributes << "bios" << "size" << "crc" << "sha1" << "merge" << "region" << "offset" << "status" << "optional"; +- descriptions.clear(); +- descriptions << tr("BIOS") << tr("Size") << tr("CRC") << tr("SHA-1") << tr("Merge") << tr("Region") << tr("Offset") << tr("Status") << tr("Optional"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Device reference")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name")); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Chip")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name")); +- attributes.clear(); +- attributes << "tag" << "type" << "clock"; +- descriptions.clear(); +- descriptions << tr("Tag") << tr("Type") << tr("Clock"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Display")); +- attributes.clear(); +- attributes << "type" << "rotate" << "flipx" << "width" << "height" << "refresh" << "pixclock" << "htotal" << "hbend" << "hbstart" << "vtotal" << "vbend" << "vbstart"; +- descriptions.clear(); +- descriptions << tr("Type") << tr("Rotate") << tr("Flip-X") << tr("Width") << tr("Height") << tr("Refresh") << tr("Pixel clock") << tr("H-Total") << tr("H-Bend") << tr("HB-Start") << tr("V-Total") << tr("V-Bend") << tr("VB-Start"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Sound")); +- attributes.clear(); +- attributes << "channels"; +- descriptions.clear(); +- descriptions << tr("Channels"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Input")); +- attributes.clear(); +- attributes << "service" << "tilt" << "players" << "buttons" << "coins"; +- descriptions.clear(); +- descriptions << tr("Service") << tr("Tilt") << tr("Players") << tr("Buttons") << tr("Coins"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- gamePos++; +- while ( xmlLines.at(gamePos).contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Control")); +- nextChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(subElement, "type", true)); +- attributes.clear(); +- attributes << "minimum" << "maximum" << "sensitivity" << "keydelta" << "reverse" << "player" << "buttons" << "ways"; +- descriptions.clear(); +- descriptions << tr("Minimum") << tr("Maximum") << tr("Sensitivity") << tr("Key Delta") << tr("Reverse") << tr("Player") << tr("Buttons") << tr("Ways"); +- insertAttributeItems(nextChildItem, subElement, attributes, descriptions, true); +- gamePos++; +- } +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("DIP switch")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name", true)); +- gamePos++; +- while ( xmlLines.at(gamePos).contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("DIP value")); +- secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(subElement, "name", true)); +- attributes.clear(); +- attributes << "default"; +- descriptions.clear(); +- descriptions << tr("Default"); +- insertAttributeItems(secondChildItem, subElement, attributes, descriptions, true); +- gamePos++; +- } +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Configuration")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name", true)); +- attributes.clear(); +- attributes << "tag" << "mask"; +- descriptions.clear(); +- descriptions << tr("Tag") << tr("Mask"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- gamePos++; +- while ( xmlLines.at(gamePos).contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Setting")); +- secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(subElement, "name", true)); +- attributes.clear(); +- attributes << "value" << "default"; +- descriptions.clear(); +- descriptions << tr("Value") << tr("Default"); +- insertAttributeItems(secondChildItem, subElement, attributes, descriptions, true); +- gamePos++; +- } +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Driver")); +- attributes.clear(); +- attributes << "status" << "emulation" << "color" << "sound" << "graphic" << "cocktail" << "protection" << "savestate" << "palettesize"; +- descriptions.clear(); +- descriptions << tr("Status") << tr("Emulation") << tr("Color") << tr("Sound") << tr("Graphic") << tr("Cocktail") << tr("Protection") << tr("Save state") << tr("Palette size"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("BIOS set")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name")); +- attributes.clear(); +- attributes << "description" << "default"; +- descriptions.clear(); +- descriptions << tr("Description") << tr("Default"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Sample")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name")); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Disk")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name")); +- attributes.clear(); +- attributes << "md5" << "sha1" << "merge" << "region" << "index" << "status" << "optional"; +- descriptions.clear(); +- descriptions << tr("MD5") << tr("SHA-1") << tr("Merge") << tr("Region") << tr("Index") << tr("Status") << tr("Optional"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Adjuster")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name")); +- attributes.clear(); +- attributes << "default"; +- descriptions.clear(); +- descriptions << tr("Default"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Software list")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name")); +- attributes.clear(); +- attributes << "status"; +- descriptions.clear(); +- descriptions << tr("Status"); +- insertAttributeItems(childItem, element, attributes, descriptions, true); +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Category")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "name", true)); +- gamePos++; +- while ( xmlLines.at(gamePos).contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Item")); +- secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(subElement, "name", true)); +- attributes.clear(); +- attributes << "default"; +- descriptions.clear(); +- descriptions << tr("Default"); +- insertAttributeItems(secondChildItem, subElement, attributes, descriptions, true); +- gamePos++; +- } +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Device")); +- childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(element, "type", true)); +- attributes.clear(); +- attributes << "tag" << "mandatory" << "interface"; +- descriptions.clear(); +- descriptions << tr("Tag") << tr("Mandatory") << tr("Interface"); +- insertAttributeItems(childItem, element, attributes, descriptions, false); +- gamePos++; +- while ( xmlLines.at(gamePos).contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Instance")); +- secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(subElement, "name", false)); +- attributes.clear(); +- attributes << "briefname"; +- descriptions.clear(); +- descriptions << tr("Brief name"); +- insertAttributeItems(secondChildItem, element, attributes, descriptions, false); +- gamePos++; +- } +- while ( xmlLines.at(gamePos).contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Extension")); +- secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(subElement, "name", false)); +- gamePos++; +- } +- } +- if ( element.contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("RAM options")); +- while ( xmlLines.at(gamePos).contains("setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Option")); +- int fromIndex = subElement.indexOf('>') + 1; +- int toIndex = subElement.indexOf('<', fromIndex); +- QString ramOptionValue(subElement.mid(fromIndex, toIndex - fromIndex)); +- secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, ramOptionValue); +- attributes.clear(); +- attributes << "default"; +- descriptions.clear(); +- descriptions << tr("Default"); +- insertAttributeItems(secondChildItem, subElement, attributes, descriptions, false); +- gamePos++; ++ ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ insertAttributeItems(&itemList, &xmlMachineEntry, attributes, descriptions, true); ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "year" ) { ++ content = xmlMachineEntry.readElementText(); ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Year")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, content); ++ } else if ( xmlMachineEntry.name() =="manufacturer" ) { ++ content = xmlMachineEntry.readElementText(); ++ content.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'"); ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Manufacturer")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, content); ++ } else if ( xmlMachineEntry.name() == "rom" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("ROM")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name")); ++ attributes.clear(); ++ attributes << "bios" << "size" << "crc" << "sha1" << "merge" << "region" << "offset" << "status" << "optional"; ++ descriptions.clear(); ++ descriptions << tr("BIOS") << tr("Size") << tr("CRC") << tr("SHA-1") << tr("Merge") << tr("Region") << tr("Offset") << tr("Status") << tr("Optional"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "device_ref" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Device reference")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name")); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "chip") { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Chip")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name")); ++ attributes.clear(); ++ attributes << "tag" << "type" << "clock"; ++ descriptions.clear(); ++ descriptions << tr("Tag") << tr("Type") << tr("Clock"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "display" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Display")); ++ attributes.clear(); ++ attributes << "type" << "rotate" << "flipx" << "width" << "height" << "refresh" << "pixclock" << "htotal" << "hbend" << "hbstart" << "vtotal" << "vbend" << "vbstart"; ++ descriptions.clear(); ++ descriptions << tr("Type") << tr("Rotate") << tr("Flip-X") << tr("Width") << tr("Height") << tr("Refresh") << tr("Pixel clock") << tr("H-Total") << tr("H-Bend") << tr("HB-Start") << tr("V-Total") << tr("V-Bend") << tr("VB-Start"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "sound" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Sound")); ++ attributes.clear(); ++ attributes << "channels"; ++ descriptions.clear(); ++ descriptions << tr("Channels"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "input" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Input")); ++ attributes.clear(); ++ attributes << "service" << "tilt" << "players" << "buttons" << "coins"; ++ descriptions.clear(); ++ descriptions << tr("Service") << tr("Tilt") << tr("Players") << tr("Buttons") << tr("Coins"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "control" ) { ++ QTreeWidgetItem *nextChildItem = new QTreeWidgetItem(childItem); ++ nextChildItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Control")); ++ nextChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "type", true)); ++ attributes.clear(); ++ attributes << "minimum" << "maximum" << "sensitivity" << "keydelta" << "reverse" << "player" << "buttons" << "ways"; ++ descriptions.clear(); ++ descriptions << tr("Minimum") << tr("Maximum") << tr("Sensitivity") << tr("Key Delta") << tr("Reverse") << tr("Player") << tr("Buttons") << tr("Ways"); ++ insertAttributeItems(nextChildItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ } else if ( xmlMachineEntry.name() == "dipswitch") { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("DIP switch")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name", true)); ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "dipvalue") { ++ QTreeWidgetItem *secondChildItem = new QTreeWidgetItem(childItem); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("DIP value")); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name", true)); ++ attributes.clear(); ++ attributes << "default"; ++ descriptions.clear(); ++ descriptions << tr("Default"); ++ insertAttributeItems(secondChildItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ } else if ( xmlMachineEntry.name() == "configuration" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Configuration")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name", true)); ++ attributes.clear(); ++ attributes << "tag" << "mask"; ++ descriptions.clear(); ++ descriptions << tr("Tag") << tr("Mask"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "confsetting" ) { ++ QTreeWidgetItem *secondChildItem = new QTreeWidgetItem(childItem); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Setting")); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name", true)); ++ attributes.clear(); ++ attributes << "value" << "default"; ++ descriptions.clear(); ++ descriptions << tr("Value") << tr("Default"); ++ insertAttributeItems(secondChildItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ } else if ( xmlMachineEntry.name() == "driver" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Driver")); ++ attributes.clear(); ++ attributes << "status" << "emulation" << "color" << "sound" << "graphic" << "cocktail" << "protection" << "savestate" << "palettesize"; ++ descriptions.clear(); ++ descriptions << tr("Status") << tr("Emulation") << tr("Color") << tr("Sound") << tr("Graphic") << tr("Cocktail") << tr("Protection") << tr("Save state") << tr("Palette size"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "biosset" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("BIOS set")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name")); ++ attributes.clear(); ++ attributes << "description" << "default"; ++ descriptions.clear(); ++ descriptions << tr("Description") << tr("Default"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "sample" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Sample")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name")); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "disk" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Disk")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name")); ++ attributes.clear(); ++ attributes << "md5" << "sha1" << "merge" << "region" << "index" << "status" << "optional"; ++ descriptions.clear(); ++ descriptions << tr("MD5") << tr("SHA-1") << tr("Merge") << tr("Region") << tr("Index") << tr("Status") << tr("Optional"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "adjuster" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Adjuster")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name")); ++ attributes.clear(); ++ attributes << "default"; ++ descriptions.clear(); ++ descriptions << tr("Default"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "softwarelist" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Software list")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name")); ++ attributes.clear(); ++ attributes << "status"; ++ descriptions.clear(); ++ descriptions << tr("Status"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "category" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Category")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name", true)); ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "item" ) { ++ QTreeWidgetItem *secondChildItem = new QTreeWidgetItem(childItem); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Item")); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name", true)); ++ attributes.clear(); ++ attributes << "default"; ++ descriptions.clear(); ++ descriptions << tr("Default"); ++ insertAttributeItems(secondChildItem, &xmlMachineEntry, attributes, descriptions, true); ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ } else if ( xmlMachineEntry.name() == "device" ) { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Device")); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "type", true)); ++ attributes.clear(); ++ attributes << "tag" << "mandatory" << "interface"; ++ descriptions.clear(); ++ descriptions << tr("Tag") << tr("Mandatory") << tr("Interface"); ++ insertAttributeItems(childItem, &xmlMachineEntry, attributes, descriptions, false); ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "instance" ) { ++ QTreeWidgetItem *secondChildItem = new QTreeWidgetItem(childItem); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Instance")); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name", false)); ++ attributes.clear(); ++ attributes << "briefname"; ++ descriptions.clear(); ++ descriptions << tr("Brief name"); ++ insertAttributeItems(secondChildItem, &xmlMachineEntry, attributes, descriptions, false); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "extension" ) { ++ QTreeWidgetItem *secondChildItem = new QTreeWidgetItem(childItem); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Extension")); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, value(&xmlMachineEntry, "name", false)); ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ } else if ( xmlMachineEntry.name() == "ramoption") { ++ childItem = new QTreeWidgetItem(); ++ childItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("RAM options")); ++ QTreeWidgetItem *secondChildItem = new QTreeWidgetItem(childItem); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Option")); ++ attributes.clear(); ++ attributes << "default"; ++ descriptions.clear(); ++ descriptions << tr("Default"); ++ insertAttributeItems(secondChildItem, &xmlMachineEntry, attributes, descriptions, false); ++ QString ramOptionValue = xmlMachineEntry.readElementText(); ++ secondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, ramOptionValue); ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "ramoption" ) { ++ QTreeWidgetItem *anotherSecondChildItem = new QTreeWidgetItem(childItem); ++ anotherSecondChildItem->setText(QMC2_MACHINELIST_COLUMN_MACHINE, tr("Option")); ++ attributes.clear(); ++ attributes << "default"; ++ descriptions.clear(); ++ descriptions << tr("Default"); ++ insertAttributeItems(anotherSecondChildItem, &xmlMachineEntry, attributes, descriptions, false); ++ QString ramOptionValue = xmlMachineEntry.readElementText(); ++ anotherSecondChildItem->setText(QMC2_MACHINELIST_COLUMN_ICON, ramOptionValue); ++ } ++ } ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ if ( childItem ) ++ itemList.append(childItem); + } +- if ( xmlLines.at(gamePos).contains(endMark) ) +- gamePos--; ++ } else { ++ qmc2MainWindow->log(QMC2_LOG_FRONTEND, tr("WARNING: couldn't find machine information for '%1'").arg(machineName)); ++ return; + } +- gamePos++; +- if ( childItem ) +- itemList.append(childItem); + } ++ + qmc2MainWindow->treeWidgetMachineList->setUpdatesEnabled(false); + delete item->takeChild(0); + item->addChildren(itemList); +@@ -1548,26 +1545,21 @@ void MachineList::parse() + machineListDb()->beginTransaction(); + int pendingDbUpdates = 0; + for (qint64 rowCounter = 1; rowCounter <= xmlRowCount && !qmc2LoadingInterrupted; rowCounter++) { +- QStringList xmlLines(xmlDb()->xml(rowCounter).split(lineSplitChar, QString::SkipEmptyParts)); +- for (int lineCounter = 0; lineCounter < xmlLines.count() && !qmc2LoadingInterrupted; lineCounter++) { +- while ( lineCounter < xmlLines.count() && !xmlLines.at(lineCounter).contains("") ) +- lineCounter++; +- if ( !qmc2LoadingInterrupted && lineCounter < xmlLines.count() ) { +- QString machineElement(xmlLines.at(lineCounter - 1).simplified()); +- if ( !machineElement.contains(" name=\"") ) +- continue; +- bool isBIOS = value(machineElement, "isbios").compare("yes") == 0; +- bool isDev = value(machineElement, "isdevice").compare("yes") == 0; +- QString machineName(value(machineElement, "name")); ++ QXmlStreamReader xmlMachineEntry(xmlDb()->xml(rowCounter)); ++ if ( xmlMachineEntry.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ bool isBIOS = value(&xmlMachineEntry, "isbios").compare("yes") == 0; ++ bool isDev = value(&xmlMachineEntry, "isdevice").compare("yes") == 0; ++ QString machineName(value(&xmlMachineEntry, "name")); + if ( machineName.isEmpty() ) { +- qmc2MainWindow->log(QMC2_LOG_FRONTEND, tr("WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml").arg(lineCounter + 2)); ++ qmc2MainWindow->log(QMC2_LOG_FRONTEND, tr("WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml").arg(xmlMachineEntry.lineNumber())); + qApp->processEvents(); + continue; + } +- QString machineSource(value(machineElement, "sourcefile")); +- QString machineCloneOf(value(machineElement, "cloneof")); +- QString descriptionElement(xmlLines.at(lineCounter).simplified()); +- QString machineDescription(descriptionElement.remove("").remove("").replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'")); ++ QString machineSource(value(&xmlMachineEntry, "sourcefile")); ++ QString machineCloneOf(value(&xmlMachineEntry, "cloneof")); ++ QString descriptionElement; ++ QString machineDescription; + MachineListItem *machineItem = new MachineListItem(); + qmc2MachineListItemHash.insert(machineName, machineItem); + machineItem->setFlags(MachineListItem::defaultItemFlags); +@@ -1576,37 +1568,40 @@ void MachineList::parse() + hiddenItemHash.insert(machineItem, true); + // find year & manufacturer and determine ROM/CHD requirements + bool endMachine = false; +- int i = lineCounter; ++ + QString machineYear(trQuestionMark), machineManufacturer(trQuestionMark), machinePlayers(trQuestionMark), machineDrvStat(trQuestionMark); + bool yearFound = false, manufacturerFound = false, hasROMs = false, hasCHDs = false, playersFound = false, statusFound = false; +- QString endMark(""); +- while ( !endMachine ) { +- QString xmlLine(xmlLines.at(i)); +- if ( xmlLine.contains("") ) { +- machineYear = xmlLine.simplified().remove("").remove(""); ++ while ( xmlMachineEntry.readNextStartElement() && !endMachine ) { ++ if ( xmlMachineEntry.name() == "description" ) { ++ descriptionElement = xmlMachineEntry.readElementText(); ++ machineDescription = descriptionElement.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'"); ++ } else if ( xmlMachineEntry.name() == "year" ) { ++ machineYear = xmlMachineEntry.readElementText(); + yearFound = true; +- } else if ( xmlLine.contains("") ) { +- machineManufacturer = xmlLine.simplified().remove("").remove("").replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'"); ++ } else if ( xmlMachineEntry.name() == "manufacturer" ) { ++ machineManufacturer = xmlMachineEntry.readElementText().replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'"); + manufacturerFound = true; +- } else if ( xmlLine.contains("= 0 ) { +- machinePlayers = xmlLine.mid(playersPos, xmlLine.indexOf("\"", playersPos) - playersPos); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "input" ) { ++ if ( xmlMachineEntry.attributes().hasAttribute("players") ) { ++ machinePlayers = xmlMachineEntry.attributes().value("players").toString(); + playersFound = true; + } +- } else if ( xmlLine.contains("= 0 ) { +- machineDrvStat = xmlLine.mid(statusPos, xmlLine.indexOf("\"", statusPos) - statusPos); ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "driver" ) { ++ if ( xmlMachineEntry.attributes().hasAttribute("status") ) { ++ machineDrvStat = xmlMachineEntry.attributes().value("status").toString(); + statusFound = true; + } +- } +- endMachine = xmlLine.contains(endMark) || (yearFound && manufacturerFound && hasROMs && hasCHDs && playersFound && statusFound); +- i++; ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ endMachine = yearFound && manufacturerFound && hasROMs && hasCHDs && playersFound && statusFound; + } + if ( machineCloneOf.isEmpty() ) { + if ( !hierarchyHash.contains(machineName) ) +@@ -2544,28 +2539,29 @@ void MachineList::verifyFinished(int exitCode, QProcess::ExitStatus exitStatus) + QTreeWidgetItem *versionItem = qmc2VersionItemHash.value(machineName); + // there are quite a number of sets in MAME that don't require any ROMs... many/most device-sets in particular + bool romRequired = true; +- int xmlCounter = 0; +- QStringList xmlLines(xmlDb()->xml(machineName).split("\n", QString::SkipEmptyParts)); +- if ( xmlLines.count() > 0 ) { +- int romCounter = 0; +- int chdCounter = 0; +- bool endFound = false; +- QString endMark = ""; +- while ( !endFound && xmlCounter < xmlLines.count() ) { +- if ( xmlLines.at(xmlCounter).contains("xml(machineName)); ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ int romCounter = 0; ++ int chdCounter = 0; ++ bool endFound = false; ++ while ( xmlMachineEntry.readNextStartElement() && !endFound ) { ++ if ( xmlMachineEntry.name() == "rom" ) { ++ romCounter++; ++ endFound = true; ++ xmlMachineEntry.skipCurrentElement(); ++ } else if ( xmlMachineEntry.name() == "disk" ) { ++ chdCounter++; ++ endFound = true; ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ if ( romCounter == 0 && chdCounter > 0 ) ++ romRequired = true; ++ else ++ romRequired = (romCounter > 0); + } +- if ( romCounter == 0 && chdCounter > 0 ) +- romRequired = true; +- else +- romRequired = (romCounter > 0); + } + if ( romItem && hierarchyItem ) { + if ( romStateCache.isOpen() ) { +diff --git a/src/machinelist.h b/src/machinelist.h +index 8a4eee1e0..679b90546 100644 +--- a/src/machinelist.h ++++ b/src/machinelist.h +@@ -132,11 +132,11 @@ class MachineList : public QObject + void verifyReadyReadStandardOutput(); + + // internal methods +- QString value(QString, QString, bool translate = false); ++ QString value(QXmlStreamReader *, QString, bool translate = false); + void parse(); + void parseMachineDetail(QTreeWidgetItem *); +- void insertAttributeItems(QTreeWidgetItem *, QString, QStringList, QStringList, bool translate = false); +- void insertAttributeItems(QList *itemList, QString element, QStringList attributes, QStringList descriptions, bool translate = false); ++ void insertAttributeItems(QTreeWidgetItem *, QXmlStreamReader *, QStringList, QStringList, bool translate = false); ++ void insertAttributeItems(QList *itemList, QXmlStreamReader *element, QStringList attributes, QStringList descriptions, bool translate = false); + void enableWidgets(bool enable = true); + void disableWidgets() { enableWidgets(false); } + void filter(bool initial = false); + +From 82309af74c9e07556f1249d019c29675be5145d6 Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Fri, 9 Feb 2024 17:03:02 +0100 +Subject: [PATCH 2/5] imp: convert softwarelist.cpp to QXmlStreamReader + +--- + src/softwarelist.cpp | 60 +++++++++++++++++++++----------------------- + 1 file changed, 29 insertions(+), 31 deletions(-) + +diff --git a/src/softwarelist.cpp b/src/softwarelist.cpp +index 99f806da4..13c1f0f55 100644 +--- a/src/softwarelist.cpp ++++ b/src/softwarelist.cpp +@@ -1012,6 +1012,7 @@ QString &SoftwareList::lookupMountDevice(QString device, QString deviceInterface + QStringList xmlLines(qmc2MachineList->xmlDb()->xml(systemName).split('\n', QString::SkipEmptyParts)); + QStringList *xmlData = &xmlLines; + QStringList dynamicXmlData; ++ QXmlStreamReader xmlMachineEntry(qmc2MachineList->xmlDb()->xml(systemName)); + if ( comboBoxDeviceConfiguration->currentIndex() > 0 ) { + qmc2Config->beginGroup(QMC2_EMULATOR_PREFIX + QString("Configuration/Devices/%1/%2").arg(systemName).arg(comboBoxDeviceConfiguration->currentText())); + QStringList instances(qmc2Config->value("Instances").toStringList()); +@@ -1047,37 +1048,34 @@ QString &SoftwareList::lookupMountDevice(QString device, QString deviceInterface + #endif + } + +- int i = 0; +- while ( i < xmlData->count() && !xmlData->at(i).contains("") ) { +- QString line(xmlData->at(i++).simplified()); +- if ( line.startsWith("= 0 ) { +- startIndex += 11; +- endIndex = line.indexOf("\"", startIndex); +- QStringList devInterfaces(line.mid(startIndex, endIndex - startIndex).split(',', QString::SkipEmptyParts)); +- line = xmlData->at(i++).simplified(); +- startIndex = line.indexOf("briefname=\""); +- if ( startIndex >= 0 ) { +- startIndex += 11; +- endIndex = line.indexOf("\"", startIndex); +- devName = line.mid(startIndex, endIndex - startIndex); +- } +- if ( !devName.isEmpty() ) +- foreach (QString devIf, devInterfaces) +- deviceInstanceHash[devIf] << devName; +- } else { +- line = xmlData->at(i++).simplified(); +- startIndex = line.indexOf("briefname=\""); +- if ( startIndex >= 0 ) { +- startIndex += 11; +- endIndex = line.indexOf("\"", startIndex); +- devName = line.mid(startIndex, endIndex - startIndex); +- } +- if ( !devName.isEmpty() ) +- deviceInstanceHash[devName] << devName; ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "device" && xmlMachineEntry.attributes().hasAttribute("type") ) { ++ QString devName; ++ if ( xmlMachineEntry.attributes().hasAttribute("interface") ) { ++ QStringList devInterfaces(xmlMachineEntry.attributes().value("interface").toString().split(',', QString::SkipEmptyParts)); ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "instance" && xmlMachineEntry.attributes().hasAttribute("briefname") ) { ++ devName = xmlMachineEntry.attributes().value("briefname").toString(); ++ if ( !devName.isEmpty() ) ++ foreach (QString devIf, devInterfaces) ++ deviceInstanceHash[devIf] << devName; ++ } ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ } else { ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "instance" && xmlMachineEntry.attributes().hasAttribute("briefname") ) { ++ devName = xmlMachineEntry.attributes().value("briefname").toString(); ++ if ( !devName.isEmpty() ) ++ deviceInstanceHash[devName] << devName; ++ } ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ } ++ } else ++ xmlMachineEntry.skipCurrentElement(); + } + } + } + +From 3bd0ec2c4744f1b73bf01a05d485aed31346686e Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Fri, 16 Feb 2024 23:19:18 +0100 +Subject: [PATCH 3/5] imp: convert deviceconfigurator.cpp to QXmlStreamReader + +--- + src/deviceconfigurator.cpp | 80 +++++++++++++++++++------------------- + 1 file changed, 39 insertions(+), 41 deletions(-) + +diff --git a/src/deviceconfigurator.cpp b/src/deviceconfigurator.cpp +index 6b06ebc4e..e0da99d21 100644 +--- a/src/deviceconfigurator.cpp ++++ b/src/deviceconfigurator.cpp +@@ -2006,55 +2006,53 @@ QString DeviceTreeXmlHandler::getXmlData(const QString &machine) + + QString DeviceTreeXmlHandler::lookupDescription(const QString &machine) + { +- QStringList xmlLines(qmc2MachineList->xmlDb()->xml(machine).split('\n')); +- if ( xmlLines.count() > 1 ) { +- int index = 0; +- while ( index < xmlLines.count() && !xmlLines.at(index).startsWith("") ) +- index++; +- QString description(xmlLines.at(index)); +- description.remove("").remove(""); +- QTextDocument doc; +- doc.setHtml(description); +- return doc.toPlainText(); ++ QXmlStreamReader xmlMachineEntry(qmc2MachineList->xmlDb()->xml(machine)); ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "description" ) { ++ QString description(xmlMachineEntry.readElementText()); ++ QTextDocument doc; ++ doc.setHtml(description); ++ return doc.toPlainText(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); ++ } ++ } + } else + return QString(); + } + + QString DeviceTreeXmlHandler::lookupBiosOptions(const QString &machine, QStringList *bioses, QStringList *biosDescriptions) + { +- QStringList xmlLines(qmc2MachineList->xmlDb()->xml(machine).split('\n')); +- if ( xmlLines.count() > 1 ) { +- int index = 0; +- QString defaultOption; +- while ( index < xmlLines.count() ) { +- if ( xmlLines.at(index).startsWith("= 0 ) { +- startIndex += 6; +- int endIndex = xmlLines.at(index).indexOf("\"", startIndex); +- name = xmlLines.at(index).mid(startIndex, endIndex - startIndex); +- } +- startIndex = xmlLines.at(index).indexOf("description=\""); +- if ( startIndex >= 0 ) { +- startIndex += 13; +- int endIndex = xmlLines.at(index).indexOf("\"", startIndex); +- description = xmlLines.at(index).mid(startIndex, endIndex - startIndex); +- QTextDocument doc; +- doc.setHtml(description); +- description = doc.toPlainText(); +- } +- if ( !name.isEmpty() && !description.isEmpty() ) { +- bioses->append(name); +- biosDescriptions->append(description); +- if ( xmlLines.at(index).indexOf("default=\"yes\"") >= 0 ) +- defaultOption = name; +- } ++ QXmlStreamReader xmlMachineEntry(qmc2MachineList->xmlDb()->xml(machine)); ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ QString defaultOption; ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "biosset" ) { ++ QString name; ++ QString description; ++ if ( xmlMachineEntry.attributes().hasAttribute("name") ) ++ name = xmlMachineEntry.attributes().value("name").toString(); ++ if ( xmlMachineEntry.attributes().hasAttribute("description") ) { ++ description = xmlMachineEntry.attributes().value("description").toString(); ++ QTextDocument doc; ++ doc.setHtml(description); ++ description = doc.toPlainText(); ++ } ++ if ( !name.isEmpty() && !description.isEmpty() ) { ++ bioses->append(name); ++ biosDescriptions->append(description); ++ if ( xmlMachineEntry.attributes().hasAttribute("default") && xmlMachineEntry.attributes().value("default").toString() == "yes" ) ++ defaultOption = name; ++ } ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); + } +- index++; ++ return defaultOption; + } +- return defaultOption; + } else + return QString(); + } + +From ddd40524240c15c44475462ee89ed51598da214c Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Sat, 17 Feb 2024 00:08:28 +0100 +Subject: [PATCH 4/5] imp: convert romalyzer.cpp to QXmlStreamReader + +--- + src/romalyzer.cpp | 99 ++++++++++++++++++++++------------------------- + 1 file changed, 47 insertions(+), 52 deletions(-) + +diff --git a/src/romalyzer.cpp b/src/romalyzer.cpp +index ddb5b0b38..76789cf9f 100644 +--- a/src/romalyzer.cpp ++++ b/src/romalyzer.cpp +@@ -2753,18 +2753,15 @@ void ROMAlyzer::on_pushButtonChecksumWizardSearch_clicked() + lineEditSets->setEnabled(false); + labelStatus->setText(tr("Check-sum search")); + +- QString hashStartString; +- int hashStartOffset; ++ QString hashAttribute; + switch ( comboBoxChecksumWizardHashType->currentIndex() ) { + case QMC2_ROMALYZER_CSF_HASHTYPE_CRC: +- hashStartString = "crc=\""; +- hashStartOffset = 5; ++ hashAttribute = "crc"; + break; + + default: + case QMC2_ROMALYZER_CSF_HASHTYPE_SHA1: +- hashStartString = "sha1=\""; +- hashStartOffset = 6; ++ hashAttribute = "sha1"; + break; + } + +@@ -2775,29 +2772,28 @@ void ROMAlyzer::on_pushButtonChecksumWizardSearch_clicked() + int progressCount = 0, updateCount = 0; + foreach (QString list, uniqueSoftwareLists) { + foreach (QString set, qmc2MainWindow->swlDb->uniqueSoftwareSets(list)) { +- QStringList xmlLines(qmc2MainWindow->swlDb->xml(list, set).split('\n', QString::SkipEmptyParts)); +- for (int i = 0; i < xmlLines.count(); i++) { +- QString xmlLine(xmlLines.at(i)); +- int hashIndex = xmlLine.indexOf(hashStartString); +- if ( hashIndex >= 0 ) { +- int hashPos = hashIndex + hashStartOffset; +- QString currentChecksum(xmlLine.mid(hashPos, xmlLine.indexOf('\"', hashPos) - hashPos).toLower()); +- if ( currentChecksum.compare(searchedChecksum) == 0 ) { +- int fileNamePos; +- QString fileType; +- if ( xmlLine.startsWith("setText(QMC2_ROMALYZER_CSF_COLUMN_ID, list + ":" + set); +- item->setText(QMC2_ROMALYZER_CSF_COLUMN_FILENAME, fileName.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'")); +- item->setText(QMC2_ROMALYZER_CSF_COLUMN_TYPE, fileType); +- item->setText(QMC2_ROMALYZER_CSF_COLUMN_STATUS, tr("unknown")); ++ QXmlStreamReader xmlMachineEntry(qmc2MainWindow->swlDb->xml(list, set)); ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.attributes().hasAttribute(hashAttribute) ) { ++ QString currentChecksum(xmlMachineEntry.attributes().value(hashAttribute).toString().toLower()); ++ if ( currentChecksum.compare(searchedChecksum) == 0 ) { ++ QString fileType; ++ if ( xmlMachineEntry.name() == "disk" ) ++ fileType = tr("CHD"); ++ else ++ fileType = tr("ROM"); ++ QString fileName(xmlMachineEntry.attributes().value("name").toString()); ++ QTreeWidgetItem *item = new QTreeWidgetItem(treeWidgetChecksumWizardSearchResult); ++ item->setText(QMC2_ROMALYZER_CSF_COLUMN_ID, list + ":" + set); ++ item->setText(QMC2_ROMALYZER_CSF_COLUMN_FILENAME, fileName.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'")); ++ item->setText(QMC2_ROMALYZER_CSF_COLUMN_TYPE, fileType); ++ item->setText(QMC2_ROMALYZER_CSF_COLUMN_STATUS, tr("unknown")); ++ } ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); + } + } + } +@@ -2820,29 +2816,28 @@ void ROMAlyzer::on_pushButtonChecksumWizardSearch_clicked() + qApp->processEvents(); + } + QString currentMachine(qmc2MainWindow->treeWidgetMachineList->topLevelItem(i)->text(QMC2_MACHINELIST_COLUMN_NAME)); +- QStringList xmlLines(qmc2MachineList->xmlDb()->xml(currentMachine).split('\n', QString::SkipEmptyParts)); +- for (int j = 0; j < xmlLines.count(); j++) { +- QString xmlLine(xmlLines.at(j)); +- int hashIndex = xmlLine.indexOf(hashStartString); +- if ( hashIndex >= 0 ) { +- int hashPos = hashIndex + hashStartOffset; +- QString currentChecksum(xmlLine.mid(hashPos, xmlLine.indexOf('\"', hashPos) - hashPos).toLower()); +- if ( currentChecksum.compare(searchedChecksum) == 0 ) { +- int fileNamePos; +- QString fileType; +- if ( xmlLine.startsWith("setText(QMC2_ROMALYZER_CSF_COLUMN_ID, currentMachine); +- item->setText(QMC2_ROMALYZER_CSF_COLUMN_FILENAME, fileName.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'")); +- item->setText(QMC2_ROMALYZER_CSF_COLUMN_TYPE, fileType); +- item->setText(QMC2_ROMALYZER_CSF_COLUMN_STATUS, tr("unknown")); ++ QXmlStreamReader xmlMachineEntry(qmc2MachineList->xmlDb()->xml(currentMachine)); ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.attributes().hasAttribute(hashAttribute) ) { ++ QString currentChecksum(xmlMachineEntry.attributes().value(hashAttribute).toString().toLower()); ++ if ( currentChecksum.compare(searchedChecksum) == 0 ) { ++ QString fileType; ++ if ( xmlMachineEntry.name() == "disk" ) ++ fileType = tr("CHD"); ++ else ++ fileType = tr("ROM"); ++ QString fileName(xmlMachineEntry.attributes().value("name").toString()); ++ QTreeWidgetItem *item = new QTreeWidgetItem(treeWidgetChecksumWizardSearchResult); ++ item->setText(QMC2_ROMALYZER_CSF_COLUMN_ID, currentMachine); ++ item->setText(QMC2_ROMALYZER_CSF_COLUMN_FILENAME, fileName.replace("&", "&").replace("<", "<").replace(">", ">").replace(""", "\"").replace("'", "'")); ++ item->setText(QMC2_ROMALYZER_CSF_COLUMN_TYPE, fileType); ++ item->setText(QMC2_ROMALYZER_CSF_COLUMN_STATUS, tr("unknown")); ++ } ++ xmlMachineEntry.skipCurrentElement(); ++ } else ++ xmlMachineEntry.skipCurrentElement(); + } + } + } + +From 06d96bba32bf784f91018c81a59e2a4d19acbd69 Mon Sep 17 00:00:00 2001 +From: Julian Sikorski +Date: Sat, 17 Feb 2024 01:02:28 +0100 +Subject: [PATCH 5/5] imp: convert qmc2main.cpp to QXmlStreamReader + +--- + src/qmc2main.cpp | 64 +++++++++++++++++++++--------------------------- + 1 file changed, 28 insertions(+), 36 deletions(-) + +diff --git a/src/qmc2main.cpp b/src/qmc2main.cpp +index ec16009b2..e24fe89d6 100644 +--- a/src/qmc2main.cpp ++++ b/src/qmc2main.cpp +@@ -4631,44 +4631,36 @@ QStringList &MainWindow::getXmlChoices(const QString &machineName, const QString + return xmlChoices; + if ( defaultChoice ) + defaultChoice->clear(); +- QStringList xmlLines(qmc2MachineList->xmlDb()->xml(machineName).split('\n', QString::SkipEmptyParts)); +- QString defaultYes("default=\"yes\""); +- QString defaultOne("default=\"1\""); +- int i = 0; +- while ( i < xmlLines.count() ) { +- QString xmlLine(xmlLines.at(i++).simplified()); +- int index = xmlLine.indexOf('<' + optionElement); +- if ( index >= 0 ) { +- if ( optionAttribute.isEmpty() ) { +- index = xmlLine.indexOf('>', index); +- if ( index >= 0 ) { +- xmlLine.remove(0, index + 1); +- bool isDefaultChoice = false; +- if ( defaultChoice && (xmlLine.indexOf(defaultYes) >= 0 || xmlLine.indexOf(defaultOne) >= 0 || defaultChoice->isEmpty()) ) +- isDefaultChoice = true; +- xmlLine.replace("', ""); +- QTextDocument doc; +- doc.setHtml(xmlLine); +- xmlLine = doc.toPlainText(); +- xmlChoices << xmlLine; +- if ( isDefaultChoice ) +- *defaultChoice = xmlLine; +- } +- } else { +- QString prefix(optionAttribute + "=\""); +- index = xmlLine.indexOf(prefix); +- if ( index >= 0 ) { +- xmlLine.remove(0, index + prefix.length()); +- index = xmlLine.indexOf('\"'); +- if ( index >= 0 ) { ++ QXmlStreamReader xmlMachineEntry(qmc2MachineList->xmlDb()->xml(machineName)); ++ QString defaultYes("yes"); ++ QString defaultOne("1"); ++ if ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == "machine" ) { ++ while ( xmlMachineEntry.readNextStartElement() ) { ++ if ( xmlMachineEntry.name() == optionElement ) { ++ if ( optionAttribute.isEmpty() ) { ++ bool isDefaultChoice = false; ++ if ( defaultChoice && (xmlMachineEntry.attributes().hasAttribute("default") && xmlMachineEntry.attributes().value("default").toString() == defaultYes || xmlMachineEntry.attributes().value("default").toString() == defaultOne || defaultChoice->isEmpty()) ) ++ isDefaultChoice = true; + QTextDocument doc; +- doc.setHtml(xmlLine.left(index)); +- QString choice = doc.toPlainText(); +- xmlChoices << choice; +- if ( defaultChoice && (xmlLine.indexOf(defaultYes) >= 0 || xmlLine.indexOf(defaultOne) >= 0 || defaultChoice->isEmpty()) ) +- *defaultChoice = choice; ++ doc.setHtml(xmlMachineEntry.readElementText()); ++ QString xmlLine = doc.toPlainText(); ++ xmlChoices << xmlLine; ++ if ( isDefaultChoice ) ++ *defaultChoice = xmlLine; ++ } else { ++ if ( xmlMachineEntry.attributes().hasAttribute(optionAttribute) ) { ++ QTextDocument doc; ++ doc.setHtml(xmlMachineEntry.attributes().value(optionAttribute).toString()); ++ QString choice = doc.toPlainText(); ++ xmlChoices << choice; ++ if ( defaultChoice && (xmlMachineEntry.attributes().hasAttribute("default") && xmlMachineEntry.attributes().value("default").toString() == defaultYes || xmlMachineEntry.attributes().value("default").toString() == defaultOne || defaultChoice->isEmpty()) ) ++ *defaultChoice = choice; ++ xmlMachineEntry.skipCurrentElement(); ++ } + } +- } ++ } else ++ xmlMachineEntry.skipCurrentElement(); + } + } + } diff --git a/qmc2.spec b/qmc2.spec index bc6d748..5fa8c4b 100644 --- a/qmc2.spec +++ b/qmc2.spec @@ -17,15 +17,20 @@ URL: http://qmc2.batcom-it.net Source0: %{forgesource} #Fedora-specific configuration Patch1: %{name}-ini.patch +#Fixes and improvements from upstream git +Patch10: 0001-fix-MachineListDatabase-wasn-t-saved-to-qmc2.ini.patch +Patch11: 0001-new-added-a-Brasilian-Portuguese-translation-thanks-.patch +Patch12: 0001-imp-Added-history.xml-support-and-use-XML-parser-to-.patch +Patch13: 41.patch +Patch14: 42.patch BuildRequires: desktop-file-utils +BuildRequires: git BuildRequires: libarchive-devel BuildRequires: libXmu-devel BuildRequires: make -#https://bugzilla.redhat.com/show_bug.cgi?id=1998742 -%if 0%{?fedora} >= 38 BuildRequires: minizip-ng-compat-devel -%endif +BuildRequires: qt5-linguist BuildRequires: qt5-qtmultimedia-devel BuildRequires: qt5-qtscript-devel BuildRequires: qt5-qtsvg-devel @@ -34,11 +39,7 @@ BuildRequires: qt5-qtxmlpatterns-devel BuildRequires: rsync BuildRequires: SDL2-devel Requires: games-menus -Provides: bundled(lzma-sdk) = 21.07 -#https://bugzilla.redhat.com/show_bug.cgi?id=1998742 -%if 0%{?fedora} < 38 -Provides: bundled(minizip) = 3.0.5 -%endif +Provides: bundled(lzma-sdk) = 23.01 Provides: PDF.js = 3f320f0b %description @@ -65,10 +66,9 @@ the games" %prep -%forgeautosetup -p1 +%forgeautosetup -p1 -S git #ensure system minizip and zlib are used -#https://bugzilla.redhat.com/show_bug.cgi?id=1998742 -#rm -rf src/minizip +rm -rf src/minizip rm -rf src/zlib #fix opening documentation from the menu sed -i s@doc/html/@doc/@ src/qmc2main.cpp @@ -78,19 +78,11 @@ sed -i s@doc/html/@doc/@ src/qmc2main.cpp #https://bugzilla.redhat.com/show_bug.cgi?id=1998742 %make_build DISTCFG=1 CC_FLAGS="$RPM_OPT_FLAGS" CXX_FLAGS="$RPM_OPT_FLAGS" \ L_FLAGS="$RPM_LD_FLAGS" \ -%if 0%{?fedora} >= 38 SYSTEM_MINIZIP=1 \ -%else - SYSTEM_MINIZIP=0 \ -%endif SYSTEM_ZLIB=1 LIBARCHIVE=1 GIT_REV=0 %make_build arcade DISTCFG=1 CC_FLAGS="$RPM_OPT_FLAGS" CXX_FLAGS="$RPM_OPT_FLAGS" \ L_FLAGS="$RPM_LD_FLAGS" \ -%if 0%{?fedora} >= 38 SYSTEM_MINIZIP=1 \ -%else - SYSTEM_MINIZIP=0 \ -%endif SYSTEM_ZLIB=1 LIBARCHIVE=1 GIT_REV=0 %make_build qchdman DISTCFG=1 CXX_FLAGS="$RPM_OPT_FLAGS" L_FLAGS="$RPM_LD_FLAGS" \ GIT_REV=0

A??drQ)I7)c*Xn~i +zEW-~B!3Qr-;0F@0wwm_f2m8C>^(B6|$`z9Rp7JBvF!k`u26<3`LE(3hAGz2LA-ya= +z^6ezC9~Jr0X>b~s&hew$nm{6i@nfOpE>MfE{MbF*`PNoEvmS=>V+POchBb7!5kE2Q +z39*N<{KSX3BtypXlZcEgd>KE*F;(Ub{M6F2Bq}}PXO_AVzgUiEO@S>Z2J>@%kOEWt +z^YbA{T&m9ImxADr@0{hA(w@REx8;||ZYRFt2EW{YBXq7^Uw$>BKJgjR{QCB2bZqYM +zTS+NIKb-jO&9{l(W*Ov58}K`~!-;R|%kP%;#?Y4J_y0oVeQU-aT-AtX$M8on%ZU$} +z$Db5(MW^T=gM6zV=T*tB#z4m3KFWet;{08Ctg(Px{_YB9I6j`gpM*7h{~Uk+6`51X +z&2gcofAl`^?m+za}yX!XZ|&98k&^({Ks)9mFQFaXYNa4_dD{R +zKW#`1zsY|)bwL16;J;%bTt4mMzw@dPUw?<^*RUqBAdKf1^v*lTA{mP(Fus_bC?dQZqPIryF@7Vhz|aQ_X1((#s% +zFGjlg{d9BCw;gmbRZdx2S-sjB?JN} +zPZUEnmSQRkt6nxp4r+_yt7bvhloiF-{w1?mxk!}g;!7e#h?2Fvh^O=v*2_HL+lC06 +zatQo0iU^yV?@*YUCQ8Lrg?3#d?CZdn--r_SS-wc&8;i1CZzI(&Cd$qmK)h{BQNBq* +zIu$7#ii1;}MTPbd9*vW&amUG`(Ihyb>Qh9cZ=u8*G10ig +zXGl9+(Kw?Nu_3EO<5%uzO`jG`@)5TW?iOBoFK{Q>qUpR#aB}xV(EA@+Wj@b-sfI(a~NkH3hiI3~Pf;cMOVgiqtnBx#xOF(U_NdlrdiS`vu^B}KE7 +z&}xIviRNXpiJ!SDn$Jol9`jl>PsWOhj1(=8#**}&AX>hJ5UAQ#_^sGQEGky`y#mMl +z5$yx8l(*Ir?ZZ-uJ-%U(&pIGFq7FsVSD;-B;m~2G=u&V&$K8dw%Y0nGnOdTNVn7uU +z7%~_Dcd{qG=d0*#jnAhx7rmWe +zjAKlq_qKSFJ%5Wn1taz{NQ4X-j@N5MNIb&U>E|M3ZNcjcB4h_6sz1$a9Ps;X4T_}Q +z2BkwQ5gPf8*yMU5tTaZTUZx0Z4=-7?ndrZ34@uW3F@VKkwZ0YumIjk({85Bg$DBqE +z5`!PCClUEU45{)8wMQQj@dRr3(JwLV=}ls_%ZXv{Q=t87iIK|@PhHL9L}a6{M3oPT +z$n|gs*SHvEf}8NKBSvMSrC+G4h&mVtJ-$ms-B#c|(?s+}Xs+?g4T^S0MD)9_#Io;; +zaqmW;>``7!L_ik@Vubk_rl5kGm|S`W$>4`#Y6v>?vX^ +z<&dz~L~O=%h(WWM)&_5g3=`9W;ZJ(mh*@*s?>lri$U8@an35jx7KR2H6uEX{cGm#( +z3!}yCa0e0>1H|n4S4p^k7IU_bLh-b#n6m?J`@~`~x9B@!cfO0cEn~6%9sI=nhr!52 +zUBm+U7Hyk(V)3yI68lDpxF|TpE=NUtIjGjCiel;c01V{-vGn_8$l@fiyz~ZQKSRXI +zy`kv)1&h^5aM#bfiPdM2M7!QFDAsNltFNHkF)LB5NscGx+gT*`gON8GDb`K5LE*=D +zmst1r30kJZ#rhd=4EjW|sRHJ(<7=_$T7g_%CN_t|6F=T9whRd(KCzA1`W2Dz`vS4e +zBaK8Z*s5YB(*G;C^O@qn%x7@g!Jz~_#7;&{h +zKCEd~F^fkNh5YIcMlh~dva_iI~*(gZ7s`ie=xu@dQd5E;=IR=Gad-1wV5opAH7FPEc +zugjVc`f7>SgVRyY=vGI(8I5LmyWZkmMU)}x2aET0aGjTzh>!EJi>YR5@o6F?NTuQ8 +zOQaJqzn0?5Qb>?8_r%x5NyHoX7T>~_ldQB$e4C8St#wQBZFUB>@XZq64&%bJO(GBd +z7Fyg&^g!tN&ha(I%3j)Yel{f)Z*e6;_sNX=nUMH#2tu@SYu(- +zDJdCNecmUj7;EFURO)3BpX4tUcXM-sq?5{6WI{_HNWHQfDo1T);Tk_MbDd@3`HpZG +zrDTy|aIC+M%c2>vM1$MOVk5eu%%Mo@dhkQbOwx9ET@t(ZOWRRjNp?$@r3O0_pF3Ta +zS`bE*d0duexY4@zW$D8mp$@mmvUeaiPZg2n%%h!1{&Pr{!`3I>Xt*q2rXS||o~-D( +zk?7oXUR@05n)X=42qvAvQxok +zuC#ixOYBSZH+#qcn}I=)4T?cuRl;>pEN6@tER?EP|i6pqQ?6wz% +zF;9`*p5_xPe^&s6q3V^1i(q9S$O)p +z9F~8D_{{QhcnAza>j}i=m;xv#wv`^rtWfPTvn|j<`bploa6JM5thn%Yy7aa +z@uWdn%U>?IZB2CJy(l2VY?LtW*=)fw2h3*M111A +zWPCrk*Y?$9f)i9%-{UgDt13}xPr2k^FKh>SAea2X)GbVu%lr;uBSn!i#sRBW+rptW +zEgWfM;n-RRWwX6<*_dE>pG$Ii_*dxB?{awrhEl&Hmv7wzndc=}l&?bMFxDV{a7nK8 +zfYD9+N3LA)3|uc)bw?&NZm?YKh4Z6p%Qb~H*g*Rka!tV(jM*;}r$-b2FIKLdiMbmU +zDA$d~(3NZ<*L{Hv{Olvwn?p#tdC8=fw1P> +zKoI*Dawo`b3kX~XGVm10!PlU`YA+5-1kRG626})x*b_8?Q$TF7e!WR1sEcc~+#P>Ck +z=JX;6X;b^lgAlN??n-%ZWo_bDQ{=(__7YqDL>`iy_@5W@NWUpW#pW3lwhr=mm-%QO +zdB}`^KN6cZ*C1cBLuM?%4}B^;PnUXdBMf|0$?mM5ZNl>hEG +z%QKywiR;5H+@B!NK$mgmC|YyTw4^AFz<|MF92uNsBMtE0?* +zh-J98m_hdKxx9!ykmTIcp!nQIUKQ0bGS2eq?>J)K3+0U(c)$I9gRF#kqP!7@&{xLK +zAnOq>Z=Ar!Sno7>dnJr%uaI|o4@B(smUq)JGAk10-P6dfmMk+UOEs5wZ^8Kb#>s~b +z;o-NAl#dcLqFV#y^WdszBCVCrM`0@By<~3Jujq*c%iNixk-%4xxvNV-Vec&@a}U)= +z$MLRwnF^~daa_JKA0@G}qkR1bRyymod=m!O8@*k=n=+DwZY@7n4=3^BzCl^bEWaEJ +zK{hr>e%sT5SRW_(E%h{tl@sOnRa1$Tlk(@6YuFmNMgHnA0`0UZ@{db15{3H7{2qxY +z$=6$L9MGA&@^55Clx%7$;va941E(uW4d}}MG(`#UB!2XhqWZ(C&t)rxrhZ25Fi +z55&Zb-AeHb+lYOwr4+wp4_DpMptwEBplm%%DbXt#<=e7Ki5W-G5A;?_CVoLHwzXpY +z>kHO@g%^s=yfp~o_Z7Q;5vAAFQ|#8Q#om?|irt|)D0>dK(EL`hyM-SZ8)i`4Tw_rB +zjaTe`79-j_-ylzYtCZU64kHUt%KKYmD@lLFp)`ty<(nuD0b5Ai$Tlcj9aJ2W%{_@n +zR8}0)pOI*GTdBg3oVXrT9P499YkyN5H}@raHc_e8jT8GEtW-Ohj&MCtaaxSm`70D> +zTd0*c8H%$v6l>glrAGe@lD0WYjqP19b(umBT5<1pjd+`*N`qO+ +zB(^nIJZ2(jaa#+w38i6=2?%Bfm4BQv(0q$V +zG;0cf(xsvj*y8apVsqvx29K{-T26aU?09*l)#R~oEE!6xhw};llr|B!Q4D#fwE2cy +zq|`2@v#TfZ)kl;r%|eJZf2Ra|DuZpH-<81G1)pydm*{S1PRUie)r4)QbyIrYK7sA| +zOO&2}OvF!LP=fsva6S1-@MXllh5kxk#5!JUzS8gZ3^c#@DPfmSU^mi5rT-E{{pNp^ +z{wJb|6=|moC>#KV?xPIYg$Qu>i$OO3fimD-7|w6C(5bdEaBdgGwv2(wz$^%%?k_Ez +zoN7??v^OYweNu)LGLfwOLW%elMD%kkh{XHHDP?#fJol%1$_Vu;^5Xzyq-!*Bo2|;o +z1sTK^#3+#qY>7_}Q6lpom={JVqX!fO+tio^GoZO14&LIx4Od6cjD`oC>Oz9|T +zQ1n`DVcITbVLFuV7As{@K`2`CPFWOuBMs5rQHiUDde^9p23hd|N?e056j$0PaXn+v +zd}*%4eRf9y?zoarCIJ=1U?m}aIf_1al!Pl!h|Z@g33m_yn)Owd;K>8F_=&RQawvAL +zRE@LpurmklQkHIl{7FqxmbHYxjT^5lpNbhTUsPGK1kbwk?yIbvxeT0U;oncnDwiY@ +zeQlLhXOmLBc93N9UPTSg`+X~9?GUF +z(}?}fQ8qoowN_cBY`%|cJr}5KsToOBv93Y>ZJe@Y9yFrEb7e~kcEf}&SCW$u)Ld0% +z>l6&poW{!5Ihn)~ni{Oa9s3vuBJ8cQts&NTzeUQ<`tTD2+9*56LC~~+6BpRf!R+F# +z?An8^u0H!feBOVxvg>^t;+KjkyMEUuYWU5<^ES%vyGMv_PgV9_#VUU_PD%BGrmf_o +z>??r~RcwrMP$CrVIinnM3B~GHl|$}WEx}a{N|!#$q0YF@zeAP7N)%+xa^-N$2`tCH +zeU-zx^WzCkXRZbPy#F<{onIf=}d)t*W84A*kFG|*!7^2sk4T={j +zO4h?{6m!bNDp}YNMz88B7m61n*?NO=;Z1WSzSouPMW}@g`=DIhUIQcaNV)VQjVSq< +za#@1}ov14}8rLTo(nh&^zba{?<*g_X=VeWe+=PTsE^cTvDxwxawY09fs +zp+qU`l~=0}jN7Zqt0(rvcUDtgN97S6ys5l(#4?;QQF$A29c8bT%6tDc#7f;#K2(7& +z%3rR0yaO3BKUevLJ@q`Gqw?82U>4T-H|29SJa*803;X?6zOKMr)y-A%u)~y|{ZzhV +z8#QmZRQYM0MdINU<#&x@#42u7sa7r&n^~of?@)zGQR$u;UEx4gbVxyZ(nJ+Au|KL% +zVO1T2dVKG6Rh=>o?UO^Q`ZOMbZKG<|axS9=F-4OXyH +z?av_Sx}>P~7cm0nvj#=`_h!}pWe)bFEmrM+<>L*{)v~`A5WikdEq|#cF;^$GVs2$L +z$~UT&QVXM;b6u_S<^&v2fLb#GMyI=3xW9*5^C0Ga!B4f;cl_PAyIR}hHt`n6)H;(x +z;E6`5b**63y?oVrj@el4<M|qs0~)2dJ*(g^*D~@*K&*6FtiDpqm$K!Yhf$3 +zN2#7gQczXit$IGo!j9GZYGd!S5cP%C#smD&Lh~K3{`(2}hw7&`nevR-r3z}3n~;RF +zSE^n^8xjrmHpq%jRhzjZiv3)oHs81x=|eBow>XA0D_U&jtv<)`)vgo9lD(jdbR1pn-S +ze)JW!_wZ}Ps)nk)KW~KJn5OnwfjRG)u7=)+NYC4^hUG<)bZ2V+qUi|7_uSP1NSf*C +z7&W{~KJgPf)$rCxi0nJ4g9~;x6@8@+v4(Nk3{!_za3r>Onn6(|&cey}EZps5P!^xB +z4y_VS-0Pw`)M*(?f!o!gUXDZ~k`0Qr6V(W-#l##(s>5oO$I!dDs>APj65G5>9YI;d +zr+iaK%t;~co)D)saWLN>twz@DL?S82pmdm|j=2zo>O`O#ePcQCBKOsT@&*fgppH9z +zoy48)24$On)bTtTb+uCJcvTRc+G~&>D5sA1gRtDaUY!`V5F4Xfs}sM$)ZAOBlgJ#)fv;_msYM-XRJSl +zcI!KXV)Sx#W)(=_k!RGIC!gYn@2fMft;Y>aH7FhIENqY)_qU0idA(Vk=O0a?|3Gzt +zZ!WQ%=IY{t&Du}G)cC2`mRhr!x}=jUB3>tT$!X{@?_=sx&jBP_^j4Q0DT%UBdv%ra +zfY{Fs>ZH`vIrp0acaxi;WQ8#UV4DXkwZrc7s~0TaN@1>*Aqq>+zZRkFV+4E-sAj?r)qkMjYz@*i>T=fA=e)Ks~#R}L(DT+JsKH7G$vI& +z8s&j%kGFbswKH*9T|L$o^D`=6JvI<~`Wm^a$A&H@PRrC|!$zXfGebQ#)`LWMNA=iK +zKcbN{)#K$O&^YR=9{KNHFqtufF +zkqdqArk**7mC`uI!iy$@Y-fM<%*PYxtM69NH(gJxu%mjRaSE|7H`VM$kaHnh)aiMrPw^?DG5+eRCM(&4H4a3WUF5Kr~tkE&>A+)y92Z-$(x +zh5D%5UgCeRs874$kqmiTeHzq~WXA|K$7(8aiAw4-74f9-U4ydOc=frfE!NnsQ1y8Z +zOng;g_4)5;ysoe2<{>$$Ttz +zvj78@RMH?X;-r2Y2@{&+sD6A~AG=QT)z3?DeF&sqM}C3@W~q61E~EWYO#NPZ7TT@$ +z>JM@yc7BKY!|f50&tB@!waKWd+u#X9R7AvB^|vo9HsYiDJ17SxllVaWJrr&|pr`t0 +z&vNYN@>c&kAT0EpqyB9?5>www{o5iFCDpDPt22vu>`IN*#|6v}&=|H$vE;p)ScUuX +zc%o?y@%K?xv_ge(!8HQ4La}J~1b@^DZJmQ!u$5LU9X?}FVabV +ztn0zXPHURY8(UN`25O~0Vz+$Y2dzw#E-2zh7!)s?8k99QY2}x^B)+$@R>dU;ww|n2 +znE>hWWvS-a5fgBvlveFJG|hY0xZcg|%nOpW>c2CIWyBfeR_!c2Jj|e2-yVEQEG0^F +zrc%h!W@^s$VL+MNv>NqOq2=0WHI9uUmcB%D+2@P-jMHirE=;`eAI;74BzmgWn%f=t +z8sB4@dtxgRHyaz2ewDQPVRca)cUq{`e+@(U+(v7#7&BG!i{@F-7%Tr$Yt#oC%fVi2 +z6ptC7w^wUiHI~>hPwn4Z*Ad5SYhFH1#Of5*nihiQ%SqIlT166nSzBxBbsH&!o94X; +zpI=j1^Vtc5o4sCZRt(ktlS8y-EwPk3+h{G$;RzFdkZCQ~o3LdtTk~6mfl4T5P`Yl@ +z+SIE-WHmzbS2dIeMriFTqWj_YQ0s8(I0?2|>(~g%qU~#~UnBiYnknde!tSX#$gS0m}=qP-Uda{ +z;}%ZdZ%`H=pam915?L}w3v7x8y4wUTD9#a5sI1nbMKbZEYg&)}a2mgAXuVf1MLhP_ +z`uah5xKGmh8hg#3YoW!i6W=mL3!S +zL<=v9_)xpD7JdTtj37TP{AwxU_cOHcoHR6Ptu%AN0q?%SI3d~<(+1&xK%g1<+Tcna +z=&W7P2DiiF`a4w{5|M$%&SGuoZAhWqA6f*q=<$%rS_JmtiiwxB;RR0_*)G;bggHa^ +z-`65%B3*4AuZ?zsC``A~#;l9QPUSt?7#ORR#VvH$ZPvy-g7xmt)S^s2sFr`#qQdb* +z)1GT%*My_3+(nCy`9*BUJ8gUx++Y49ZNkJ2D1!aaCM-`UzWs?du^il<+dggLORSEj +z3$;mWFcoV*pyZByF;=0PxlS0dxU<@n4qwru4A-VznhIO6#q-M8AsiC4O`EwDrH-_+ +z+T6Y;iMK7L&AotRF3($=dvPiJXtF`pEJcQZ&lQmmv4@?#yo9#L7%_#MQ!=Jjo3o|#Gtgx&{i#g +z38y{O68py>LJ!r}{n?IOG`)qk{?bwsJ6CAyZ{dEng=ywyDr)O)FXWVV|~bzQCr$F50$* +z$V=3x+JBBaNh}|$?Pw1*-lmwgBOMoPj?i{i+)XUJjkfc<8~o%^gJOe?wyQ-LQL7c& +zuD<1vr$}vA2>xeuQiXl +zcFt(e-73NXkJNJU;3~`it>wtnj}+u*$gU8si?i$h|g~rV%A=t#}IAM +zwYQt%u-b*?a2vz^XM +zJVPFkrt=(xklT5>aH@m6VY@EpAiIw(qbt|eU$-jyK{BYRUZ|4?v92C^;oM95ADqUi=zjVU4$XiPrF6$E|eh +z=@_|VIlA?-FT^@N(o2m>z|+-p;}YB0bzePIudxHB@OzV9<2tVAQk3pe)t1=f%?A0b +z`FhRDPl)v{Z&19l(rbF%C6Q*Q*Ex*|a9gj}EsJs4(o3%wjKpDdf8FgVMBs^*aaL^| +z%;D{I&$|fmb=>sEJ&U3KldXGomqfd!>fZJt#NUzb-AW^h?xK4yf>-idsQb*eAqtzU +z`&-VS3w8Cp_u6L-#KS_q}4a?mvGTwAfmMTy3Pc+w&D|sfPxo|3ke) +zVoN+kzEAJszXM{ZvK}xD(xCbry{j$eiF@na-`_@^X`J5UCcJ*Equ%Qw7`a^!ZqyF- +zo+n%N;1@yACY$u$ZV)lvi}b!jZAkXtqW6uiO|t6+z2791_WB;tL+-XDvGAiFmWz4o +zb3h+(+82frtPgkwX)(8kKFHxS3AaFf_|UH?V4v29@4;rHstNkY(E~_U|ErIpm-t~H +zee^c0h^903sOIKyq-JIHs1>ldPSN_BQAo(S+hQKWE}ChZu+b=zm?_!Swg*TfDJnqr@0J*$Dxy`#?SULVXO}R()$NeEjJzeQVuN +z;^~+4txtoISP6aGBNP69Mc?+sL{!DgATvt~kIlF6?ka)CEuMkS(sCc7l*s&KySLb_UwCC+L~OXOXTQ8ce0l}_Dt5Vu(8>CZxD!aaOX_#}VJ7n$>30%v +z=RN<`bE4tqm(J8*gyRB2cIdD17%k0gpubOshKB=r#JMHHhdT +zcKR2Zg$AXE{v{MQ)-_xIad!rZ;4%77hfmjuKd!6)LL-j%uchY;XoI~w^!!}Zn~HhI +z{q1099?;e#0v!+$zJ14_CvQ3 +zcbsOjpYW7;kxiyD9b1x%n3-xSTe1tufmcoCbFr0fLQ|822`YD4b(4b)*21u>rpoXd +z{O!TGqaD#-JYaJC&kfS!a_xzUnU!m*t-B(s>@AvvPP2lebb;U +zx6D*;p(`xY+Egze`A8Wuxlg@^J&jW>>>q8aU)Y0a>n>BHEAX~W^G%H>=974pV`_Xe +z8H@BwDbv425zznKH^{eKFnKldC1w&PZ|C~h3TSO=Rtb#oH#M7rttz8$nwo7bL2UY7 +zlkb;&bl>ioS~$V-T)LTB?0{BV6m9Yw@B{yEM7F6-3_d4L#(8vhFn=s!@*j{7%^GCk +zlob{pJ7`cW{mbV^G)U$k3FOSVc6Z#nx?U$K?XI;hru2bFAuZAN!#S=^+Wi=8< +z>Y75s;bR&UHig~}fUjt83hTHB7am{=n-zq8&G8_j%$z!=f&N&!ZTFf6K5YWEp5Me2 +z?ivK=TGuochiJbu5&@2}^lPoHt`Ip@9K=X}&<)3Ju9T~TAOWs|%bqOKYX??2(58rLC?NFVLh +z)q9F8ew4cU<$EOg;|)sh+o)?+%!HXZsK(p67d5Kn84t(>dv$FrGGz}u)C9|L6yfWs +z2`f-3E~l&OIfU_wtGfO{9x{pH>V|30h*aROCYISn$ioaZv2qC_=@ZpN4+!PHeQILg +zFe0`1tZo(rKCq&0sacDdybr2dTy7yL5Tb4!fi3v$dZ{}H_D1y(YH+te*syt)LAiQq +zb+^?~G^iX=_Xa?S^ycc`@ZLlc$JM=Ou=;mRSND5k(^U7x>i(|DL_Ri7J(zBXev#Sg +zk+POVneU+e2%oq)}Z{6s%Ng1g_}A^P3wA>$X_KjeVGGd_akb$`8-~@?vTkqc0g$Vs;rcSzc2!dblC!+0~$;*{B(7F!W2$su{cCbMzRmp0&bU2fL_eYdS(2 +z{#DOLf>kT2=d9ogJWE&4)z(l`8*I>I(L-%`;c5nvR#Z_hnvuNRX{TO10p}^iU%j-) +z2G4g;FC8jJq-i1Q74{jW>y#LMfVK1HFKVWgMod-5shQdBiCpQdn&ne~#qXrval?|y +z>tRstXRF>xhe6Hj9@Bq-UGuf&)qA@Ov9v#__g9yLw#ZT+#HJE*Jy?D49hti8P1J|a +z5D)UbYEF~SMDYN<93cFUV|EX)GdEhH=5>e2+O$yf{Lc|7^|1OfdOAM+y7~$`X=SsO +z`l@UMkvD{@uL}whQ2VHF9Cu?|;a&C3$NmuAx9ZzMD^wzb)%+5NiIm}|=GTXEev_o; +zdtV@O$PM+K=@#PON$UG>{6F18{pddn@$*IX+wcfP30bSu?-uZ^HcnE141pcnSyBCw +z1nsxLTm5+j5@UZ%{rw9Ox$0|B`SDu)JM%8eGT`zX#AKzYe_xD5zwkLqR>1%0dxOe@ +z;If`yNtIG|M7f?$m9QXK9o?W})rFRtJq^vWg3^3Hcv{|}l(`=ya;6hy{hAWl>m6m| +zGKd_POSPiYfD-HsN*_FFnVTt4!Ev4xf&|k00U{c +zCN4zT)0UR&j1jmWOD$I?BTV~5ty-pF1gp{tBe7upuhGi?Rc?%#_=nn^%O%9Eq(Nz= +zKdo|cB@DD*%&3741};8Is~7E%jXzY(+pP^M9}mzPFR;EXdQyi9!*D&rsH0mfAxm6n +zEo(R$qwCVTqu&wvXCbYdgxt*ed9?nNqRrUTX@e6_aSp)pnD+y%&F3?z%llj;BHXFl +zp8dF;yR>P_Q6jG#NSg_aU-_-H#c;^;nU%DqBUW+2W!iFq2dvFB+A0Yd^a@>zS@S4u +zT{jJ@`6F$;`X{2bOVoV;qVl9i22EA^Q}@5|M5^veJ){kUH2gq4?hk{iJUxbbKEVVh +zeWmTs!Ew7#nzp|N@u}UIwtw{jc>_*6rD6pxdrCW9`9>rcTk3rpj@+e3v|y +z=o#Yrj0W7t^W&-+R1z|2z)#qi-AfEA_V;8g4lm4I+8PeA$;ys2@y}VF`3X +z!)9>&uF;A08W3`IsX?j4w_+anYEbT&U{HxVMJG;3LbtX9owy7l-s=vXRPHW}S>#GO +z37KlC(O(*Yq?ocU-Jr=ffkw1MFJYrsG-5R9aGFNuz(=kXK_~CW_9N$Sbc!GTZc~*` +zL6-scThpm!@p&7*88lVQqEka5`Z*bN>iSQ_R4#{3eH{)_D@kWeNFZ|iZ!~&{c{O?k +zo#@OnNH9BTTNf42C(ffW +zC)UD4Izm^p*iYovrRmBcNHsiqPFHOSfN;#Ev4ORTvSTofeTZmC)oAQ{{Qq(9nD@R7 +z%mW(J|2jkXhFckw|JhK?ua6BXDQgXyoa+?RGndAFmf>ccqN~5(z{eEQc)A!(3w`L? +zk*Kd-Tt(Nl>kI49k*>Rqnb&&I4VLfFCSpZ5Bn87(-l7}-z$TXRq=~(KA>@zF(!|xB +zaYHIias}Ufqg%0MK}zUHlWRh21W}s2-U7Qt;_0?UzOY`6>9$SaqqcPCIrz|3=g8cuA`QeE{DJry>Z|fP9 +zm+v>ISdK2HS8y?*{)*mja@C9J^@^U1H+#W#{7z5aghTdmJWavgIpUc`Q*lO;HFumt00 +z(2Se#mu4o=^RZBy3;YZ!-qw#(excuWK}Io8Kc*LN!gK3%fnI{) +zl&r4O%Rfh;sN05S9)|ge|3t4&z|b%6XV6s6i(WlgRLR>*ujX$;oV$r;^*BP5lw&_4=v?58IZ#t+*?|mqyQ;%XcPcG(d3xjh1BgOP9 +zG^n`jDrSsVF>lW)=GzQ|Cd;T|c4}43K2PX7H$?iGvuHuPaGX#PLBHz5;S$kc`n4UR +zk;|6!YZ%nfunqM4M3`KUuJk+336Q#m(;uS>kPyE{f9eN`@~|rX(=Umb+Pl-gC9!0N +zL^Bfcgh-W|f=D1&8Ux~el@dT0fJ)au3|M8HMH%rNbYtWLgk{D;CVwe}OSJG5Q~pgx +zRpbFv&SDAZ&zPyCBV3D2W@_7(DCO#~(p%f3N-~MjDo;?bd&lUw+PL6}jE=v64{~R8 +z2GmBm`;6zIFQ8Ig#`7&vWiP|D!|>H&>NDME1ySN{44TU4Fg@6ZD1rM~ndw$#VDpzU +zi|_|TuI|dLOV>aR!6)YL2y1g;Agg#ABQ?{PRoaDu+|(Paa^6T}>N8li0LYGAXJ%jh +z0#=NP*>A=3!~L24pI1mpM>B`nFkE96vsx*hh_WPB>oy|mQFmDFt#I|GJz;hKZAqkg +z@vMPOIU+Bf&l(JYx_>l|IhTiWNNmZRy%bo&Ha^Vx)=l^jAQqbS^=TN6bt%WZJC{b-_nme53hyqZ +zkagAF2yt)6x@ONIQc4Hb{~;88>;&fH(;qpC3vAHD0Gx5~4;%CZg*bVs7xQ&5fExPE +zh8_PxlqD(~QMCWFdpG7+bU{0vnSU*$4I3sg|5im)-kOc7<%08OCbLluCL&>)#6|_Y +zAjJPX8|?>ov%@tO^eq;tfR8M=Og51ku4m&bcP8?L^=v}BTSS_a#U`ZVbK7lUk!F!e +zq_0g_WNr;?Y8k{LzZ@iTVjY7f@1<-?Od9fkiELUyMR;uvENVA4-hYr-bWR2#H|-2c +z(>k)~T+F>vo<$di5jlMbo7rq4A$>j+bMzL2%Klqy?kqStKfkm2H829VM=|q)rhkxF +zbYKfz`w%H>5-aL5m$G)Sg}!%*96o|A+<{1_-cPph@&V}6Mr=_dNbYy2qK>%8STJyQQ*K +z(mZ(BCxtrm;1*tx%?T&JsHN +zpvmMkOBlF~D9uN(O~0@?xq1Lgw1+-6ePoGEJ0kFX&XQ*7L~$$6HizCqM$*jKmZsB* +zVi(D_oW$G?4q;o*MWD={#CAGjO}Lh4JDqVMxhZU?s|n2^f7z~eb1?M(vAtqEk+Qe2 +zyj);m(Ylyv`Ruw0 +zGZ72ROKyo{tb9XF7zr~!lKMwzSBG-H|wbuyOMz$x)r02ZMw=n3# +zAZ}s)<3>zMJzjQ9RdlZ=amzE=sGPZQtD^nz-3D_TH`v&7=Xix0&EUM`@(Qp3^7L$O +z8#IVWHT`+T;aExz&3NTOSZa-;c-7i&aQC|L>KZIS-{HK52|^q&kJp&q5Hj(DI|O4S +z7Y*f(>w<{#=KcRdq_@=7b-WXv +z%CX4?mH%u&_zb%UZ~ihAPRaNZyycz)Fnv#XD;xu>_*?K+tELfoctzeS4^utkJa2vV +zI#J4K#mox=KfzZR#NF*|kk65Mo9Z#R(2u;$>Wk4vdVqIrj60v7 +z%zNxct#fY(@6~THnqo>Dl*%?L=BfyTO48n9KI|3~Jl5J=dN=-r{~Rb6^JuU^rAD)2 +zE;(7uebk_->;m5F#Y*&7=)6xOq#auBdZ4xa%@=%FQ-oe4I3HmF +z9W}TSA9)H&MC-*zMc+p%J3Xdjpq+V85Fh;xSwR;IgK}1YK_$`KpsBJaA6~M*6G`584Vd*{M1Yae|Is +zd4Z3&{X|IhF$NhqvxSde4-djgiFqGrZMHwgC$8#9q;uu?q_odqJA)?AEj+R@BEpBX6apMIZ5FarUOc*C +zZz8Yt;4@b(M_d)bXEnt7pKygQz(xY8^1pmRatY|nr>*#c>^#`}DSTlFZrr09Uo>w8 +ze9$s{aak;z_{RoK6~g(F06bse9$yk#^Z}dr(lPT8O|0k3yl{hFz4-Fc)!?!zeEAjl +z8*@MKnD%TB(CERf4U}k6rod|JtKY*SeS&RlfSq2_hZ0keP!Fnw7{ddOozhmdzRd{EBTX8fc#LEB{jL7HPpVA6|gNu$53lX +zO0@nUemxd*+Wb4eeW*VgIhOKl>!nyEL-Al@(Y0^o*%67v)F+nTxgSI1gFX2@`<94d +zfAV`{AQjma_=C#W)Zw|nU(`v5 +zfjz}vph;A6Fcq`j82+m22)JMo{8dXdGfKYEMGuInZYqD>A`f;djK9uuL9#fO=gZKh +zm-g}e?s!A|M4o?YCQ(e=`MVN@=qzu0&Lq=#@FIs`{Dh&Zt|}S%{8!WCh@}E=ZMr~FaJ@#3@rCa +z{-Xor>4iW4u`mFBeSQAh9)|F7CjXlWC(wZkl8RvcLVZDU6f|mV7m8IjZse>%Q$0l} +zw#cJ&E-REB2>CL;iV}_ScaJZkbQMf-ubM(F3`Z5bpOqg#lI+k=Qq +zKZ{CpAU_w|ib_QWd*(r5chCoNR3Pk9p%P}a?xKbh=F(J4IAV8zeEGF-{1Zc@!&5}Pw6th`)`g|nPOIHv& +z`sGmY3%CIMMx<972+i=S8TbSA1Al=_K&YHo$AsrV0_K4VkzSVpO<)VK1n3VUxO}|~ +zRKXJ<&W?EfLU?XP%d^@4NAZJYLkub>PKyqu%AhpYLUic15jOF;=2u-RbO;&grM?%W8qa|5wd$LgqI3c^zS#}b;1#g^grR9gZBq?7F~-DIB$7h +zbUU^cRoAbgduRL(ip^Znb8Zc!Av^qQJdh&YMXxoV5CAL|y{jRmH1Cb*J*hg8E5wQ3 +zGoZU2UWmQ{7trhxDf%`4O_WM4gin2l*}(2%V9{EbyITD7vKf&dg$dv6C4@K+Eav$* +zF?2x>qJ%#Z!)jp22kBziw#I~nFfn|`4LC7*HO24)F!uX@2|pujHi?mAVMRLc6(bXy +z;X>93e{|O?&^c4~mP^%P@LR}$GWN{nrBk0_Q4#Mlg1)VTVH +zv00c&&kkbjn^;16IEuh#&xqW&h6waW9%FhvgG!IKA`r2y9Ct_r*+5Nod?SLFl!bME +zDnjabU|_4PHy+6Ezlrf_RzzwSCPJ_Dg%#c;CX!ufu5b{Mq!4{zjv^A97k)>fSb7ZZ +z?5+(W?qwR9=^e!C5OV~EytG);5{`KGYmx9}F6{hev94YKQMx#Z^{?!Se7CvSSpFU% +z-^z-O)&3yitcy(@@P!|8#pdg^5&ZdxE#W8)A7q^ythBaUVqfZ*0mA)Z1)r8OM9`e +zS7+pT8;X6&eWCAc4Vo;wi32|%ETg)MLn``t`uT}NGwUL8@>3i}DoFNNFODSO0=n9Y +zqw}C8Cf^mu?q?7ZHdY*;57YH}v`F#B6c3e!Iko6#ResbEr;>8fNjyZH$#q7HfFjO3 +zw?zBoa*?q#2z@Qb#QF13puuazg{BqY(H<3-$U0*3ts*Y@tsu%juoXLH1j8PVwWI4Eu@o6w|D*DSKDK@asmB(isIB=Y`i +zBKsiHj`q>w4vsrD4K|6pRyPUBY%U&n&mTO+1-_ +z)qVM}$Q@D+ty*hEo_Q1@6R(LEEC5D$qj+%#p&8vMULJt71+)-vwqddFF>e*`C!`ay +z=#%&q1^?vUa`6f6l+wF2@!4u0n(e-d&wr2_n%h-;v4f544r0cZ7xU=~jbwTelTV~3bxS9bx3?yp_C*<{X=hDI +zu0bT55Us?SWcVqXR&p^+O$$%0>uGC?o4DGL3hEyk{A=fO6DsnCvnq^uXx;PGNR%7tN +z$F6DCa}d?^`Jt7!G9kxbQma_EJ(0VW)vB<&M4sP6v%k6prNthaV|)T^+_=zyVXz<)GGJ*$s3*yBm~~cWDh` +zUZbM7LTh*ib3DXVYgF+O=6J2<6!Z*Iuv&Beiz&HMPHViNXe2^4m+I+INSig+S5QzF +zziDpPu1G)HX>Jn^5@p4G&8^T3pR-YAt%U_Nm$SXrvL)v1T}7=Gb0SKueOl{Yu)?h! +zHTM>EQQsM$wQ253h;MVPZGp1fa`X63u +z9SgAf?=ICkPmMu8W~$~@3E!I*sC8*#S%_Rqcde_Y5c#p6*3B^j#lcc(m^Mx8KW0C2YTLE`&qu%m%{M6J +zH;XAX#m;=wQ5#h-4F$Us24%MtZFFQDmU=gB^c)9592RI}QlQ{-7HeZK=0d$C8I=8Q +zYJr8Az$3r3VA~|*L8fXU=id?KT%0x$=>XHva4q5{=IhWQZSqN&e2=c$6bHywjltT~ +zC}^K~7Mj`VBD(5yOU*n)Bg)yPnmHWGR*y|YGN0CFtA1!~`J>GZ!hO!`t}RY|3ZG)6wsdMy`0`R)RsrMr +z{ff5yHT=$>_S(wJU5IHwgtqeOdRUkSdx{b!Oa)fxF-o_6Na +z3+!u%*3v~|c+l2b#w`4Rmt}eF{Ex+iJes0iwuJ1B`>9=y_a?IVs%7@8l}1c_td`kn +zIHDt8Eo&qc`eRAE)&w0Wwl%aH$nBHk{k3dceBr=J+MV(-MEY7%yXzMYllMZq=Z0!W +z&~xp9RT7atq-qa$<0!E*XJdk=S=$b_)Sd?5cTV$rX}OyUpjIuk+-JR@D;CA9n`Yg7 +zOOE!Y9TCHk{0JGTYxx&!h+J4(%YS^BkVr*)-=zV{ilep9yJw-}Xr1;s7b>Kz +z9`k;hwfWgi?aNxc{n>AD0_MM__9bCDI2nv4((}4n!8&Ki>jbS}3*J6sxc2og7WP1s +z_Wd?SVfRn1&=p_1|FHJ6j0ZL-dTGDbx}je;Q2QO;1Flu1_NOTp@RBAvse#eo9idBe +zVaG2z=%x`aaE&td=_Tr2glgNRm+){wA$Wma@_jS3k!0$n>%2q#z)M#bW7JCC)3wNC +zG+bZO%algIWBE|GEY+S!bu0|ZrPk|~k(jPBkHJ`CYWhaEJX#3X=#N3=k(WVJ_vgCJ +z4_~4bme>9$ooh`h~JuY?2FrS8I@GN!&>X);db +z`ca@)`tC?b&B=Nd>=06hzS65)IS9>FPp|qQ8cp7y(lmSKTEJyI${1HfZv)(p?`y#E(1$3)n(6H_J&APH +zq_-=$LFCLQx<|iExHitZ=Wi^XCoy`5O_+iud-M(`dl6;u>0%!4s&}l2oaFd_^^ToZ +z5Hk9X-bw65#pSL+IjfmLCDFp5sd6dZ+)2Y++dk1dUqNV>yFl+20%dN~PVW|OgNnvD +zy;m1JKWx0-dp_p0cUQen@GIEk%X;5xnA^<@^nQg0;B}7C2kiNbIp3=L9>QXLwMZX& +z8(T3)9n^;w<(T@H)kof(PL#^w`shZO>W7y4=$(k<_Wonm0|vsOfAByL7e+|E|R5BXgYbKw7%ipnNJ- +zpW=cwk=jw8(i3UWMn4Qn%PSj{%X$>^^mBvCrpfvg-<#Odxk8^3T7r;M4Rv!Cg5rwh +z_371X6H;-!9@TRmks?C$C`bhvUrL{aH6Yzuug`6X8#TKv)92^DLXCH)KED7X@%g;I +zu&BK+#Lu8|`?o<;r|0^@H+WspF?~_@bSx@oeR(qEdaFranKTM9=x#mM9?`eUem(AG +z5)A)3gC?s8eQo`-M6oK=*N#lW+KAH=NR!o`1jY87+}+xFH|YoJ({e^x&gTm$z#M^9VUhQxTzv>3SgoqjoCCT!|r{mMG5 +zhPku#tWm=eV$9XEU~z~|3H?UH&O}aKrr%g{myon@{pO%8h(%`U_coWnay0ArqgNuu +zI81-whcOHb)*sq@LAfY0X7@~MbK9%>qgNTkG^C6EI2nd(&vgCq?m2|a?y2Xb;ZjG0 +z>Q6h_Hyx{#I|ZJwTXQ^O`@>{?WCSX +zuPJ&^HrBnh)H=3I +zDy2pTgoXu=kBDvPq*OiJ>7zWebnMs@O6k}$A+lv`pp(M>?^j$dl%3pSyE`eR{{J5l +z`@4~{(d61Ccv$SI5ZT)J1nxgRII!yf`XaNFa&Ha>Q!lVbD#yd>7$SD|xke3ipCzNWED{s%x?l^y^9 + +diff --git a/data/lng/qmc2_us.ts b/data/lng/qmc2_us.ts +index 317a5ea7a..744e8f348 100644 +--- a/data/lng/qmc2_us.ts ++++ b/data/lng/qmc2_us.ts +@@ -3608,147 +3608,132 @@ p, li { white-space: pre-wrap; } + + DatInfoDatabaseManager + +- ++ + WARNING: failed to open DAT-info database '%1': error = '%2' + + + +- +- +- +- +- +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to fetch '%1' from DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to add '%1' to DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- ++ ++ ++ ++ ++ + WARNING: failed to update '%1' in DAT-info database: query = '%2', error = '%3' + + + +- +- +- ++ ++ ++ + WARNING: failed to fetch row count from DAT-info database: query = '%1', error = '%2' + + + +- +- +- ++ ++ ++ + WARNING: failed to change the '%1' setting for the DAT-info database: query = '%2', error = '%3' + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to remove %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + software-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + WARNING: failed to create %1 table: query = '%2', error = '%3' + + + +- +- +- +- ++ ++ ++ ++ + emu-info + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + machine-info + + + +- +- ++ ++ + machine info-texts + + + +- ++ + Machine info - %p% + + + +- +- WARNING: missing '$end' in machine info file %1 +- +- +- +- +- WARNING: missing '$bio' in machine info file %1 +- +- +- +- +- WARNING: missing '$info' in machine info file %1 +- +- +- +- ++ + machine info + + + +- ++ + WARNING: can't open machine info file %1 + + + +- ++ + %n machine info record(s) imported + + %n machine info record imported +@@ -3756,82 +3741,79 @@ p, li { white-space: pre-wrap; } + + + +- +- +- ++ ++ ++ + WARNING: failed to alter %1 table: query = '%2', error = '%3' + + + +- +- ++ ++ + meta-data + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + + ++ ++ + DAT-info database + + + +- +- +- ++ ++ ++ + importing %1 from '%2' + + + +- +- ++ ++ + software info-texts + + + +- ++ + Software info - %p% + + + +- +- +- ++ ++ ++ + import stopped, invalidating %1 table + + + +- ++ + software info + + + +- +- +- ++ ++ ++ + done (importing %1 from '%2') + + + +- ++ + %n software info record(s) imported + + %n software info record imported +@@ -3839,43 +3821,43 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open software info file '%1' + + + +- +- ++ ++ + emulator info-texts + + + +- ++ + Emu info - %p% + + + +- ++ + WARNING: missing '$end' in emulator info file %1 + + + +- ++ + WARNING: missing '$mame' in emulator info file %1 + + + +- ++ + WARNING: missing '$info' in emulator info file %1 + + + +- ++ + emu info + + + +- ++ + %n emulator info record(s) imported + + %n emulator info record imported +@@ -3883,7 +3865,7 @@ p, li { white-space: pre-wrap; } + + + +- ++ + WARNING: can't open emulator info file %1 + + +@@ -7779,186 +7761,186 @@ Use local value for option '%1', overwrite with global value or don&ap + + MachineList + +- +- ++ ++ ++ + +- ++ + +- +- +- ++ ++ + unknown + + + +- +- +- ++ ++ ++ + good + + + +- +- ++ ++ + bad + + + +- +- +- ++ ++ ++ + preliminary + + + +- +- ++ ++ + supported + + + +- +- ++ ++ + unsupported + + + +- +- +- ++ ++ ++ + imperfect + + + +- ++ + yes + + + +- ++ + no + + + +- ++ + baddump + + + +- ++ + nodump + + + +- ++ + vertical + + + +- ++ + horizontal + + + +- ++ + raster + + + +- ++ + Unknown + + + +- ++ + On + + + +- ++ + Off + + + +- ++ + audio + + + +- ++ + Unused + + + +- ++ + original + + + +- ++ + compatible + + + +- ++ + FATAL: can't open icon file, please check access permissions for %1 + FATAL: can't open icon file, please check access permissions for %1 + + +- +- ++ ++ + FATAL: can't open icon file %1 + + + +- ++ + 7z error + + + +- ++ + Waiting for data... + Waiting for data... + + +- ++ + FATAL: can't start %1 executable, file '%2' does not exist + + + +- ++ + done (loading machine data from machine list cache, elapsed time = %1) + + + +- ++ + parsing machine data and recreating machine list cache + + + +- ++ + ERROR: can't open machine list cache for writing, path = %1 + + + +- +- ++ ++ + sorting machine list by %1 in %2 order + + + +- +- ++ ++ + restoring machine selection + + + +- ++ + done (processing machine list, elapsed time = %1) + + + +- ++ + %n machine(s) + + %n machine +@@ -7966,103 +7948,103 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: machine list not fully parsed, invalidating machine list cache + + + +- ++ + WARNING: machine list cache is out of date, invalidating machine list cache + + + +- ++ + Filtering, please wait... + + + +- ++ + WARNING: XML data cache is incomplete, invalidating XML data cache + + + +- ++ + XML data - %p% + + + +- ++ + verifying ROM status for '%1' + verifying ROM status for '%1' + + +- ++ + Updating + + + +- ++ + Name + + + +- ++ + Source file + + + +- ++ + Clone of + + + +- ++ + ROM of + + + +- ++ + Sample of + + + +- ++ + Is device? + + + +- ++ + Year + + + +- ++ + Manufacturer + + + +- +- ++ ++ + ROM + + + +- +- ++ ++ ++ + +- + N/A + N/A + + +- +- ++ ++ + error text = %1 + + + +- +- ++ ++ + %n supported set(s) + + %n supported set +@@ -8070,501 +8052,501 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + WARNING: the output from -listfull changed, forcing a refresh of all emulator caches + + + +- ++ + BIOS + + + +- ++ + Size + + + +- ++ + CRC + + + +- +- ++ ++ + Merge + + + +- +- ++ ++ + Region + + + +- ++ + Offset + + + +- +- +- +- ++ ++ ++ ++ + Status + + + +- ++ + Device reference + + + +- ++ + Chip + + + +- +- ++ ++ + Type + + + +- ++ + Clock + + + +- ++ + Width + + + +- ++ + Height + + + +- ++ + Refresh + + + +- +- ++ ++ + Sound + + + +- ++ + Channels + + + +- ++ + Input + + + +- ++ + Service + + + +- ++ + Tilt + + + +- ++ + Players + + + +- +- ++ ++ + Buttons + + + +- ++ + Coins + + + +- ++ + Player + + + +- ++ + Ways + + + +- ++ + DIP switch + + + +- ++ + DIP value + + + +- ++ + WARNING: the machine list database is invalid, forcing a refresh + + + +- ++ + machine description + + + +- ++ + tag + + + +- ++ + year + + + +- ++ + manufacturer + + + +- ++ + machine name + + + +- ++ + ROM types + + + +- ++ + players + + + +- ++ + driver status + + + +- ++ + source file + + + +- ++ + rank + + + +- ++ + category + + + +- ++ + version + + + +- ++ + WARNING: XML bug: the name '%1' is used for multiple sets -- please inform MAME developers + + + +- ++ + done (verifying ROM status for all sets, elapsed time = %1) + + + +- ++ + pre-caching icons from 7z archive + + + +- ++ + done (pre-caching icons from 7z archive, elapsed time = %1) + + + +- +- ++ ++ + System / BIOS + + + +- +- ++ ++ + System / Device + + + +- ++ + correct + + + +- ++ + mostly correct + + + +- ++ + incorrect + + + +- ++ + not found + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Default + + + +- ++ + libarchive error + + + +- +- ++ ++ + WARNING: the selected emulator executable cannot be identified as MAME + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- +- ++ ++ + loading favorites and play history + + + +- +- ++ ++ + done (loading favorites and play history) + + + +- +- ++ ++ + total start-up time: %1 + + + +- ++ + loading XML data and recreating cache + + + +- ++ + verifying ROM status for all sets + + + +- ++ + WARNING: couldn't find machine information for '%1' + + + +- +- ++ ++ + SHA-1 + + + +- ++ + Configuration + + + +- ++ + Mask + + + +- ++ + Setting + + + +- ++ + Value + + + +- ++ + Driver + + + +- ++ + Emulation + + + +- ++ + Color + + + +- ++ + Graphic + + + +- ++ + Cocktail + + + +- ++ + Protection + + + +- ++ + Save state + + + +- ++ + Palette size + + + +- ++ + BIOS set + + + +- ++ + Description + + + +- ++ + Sample + + + +- ++ + Disk + + + +- ++ + MD5 + + + +- ++ + Index + + + +- ++ + Adjuster + + + +- ++ + Software list + + + +- ++ + Category + + + +- ++ + Item + + + +- ++ + Interface + + + +- ++ + WARNING: can't open ROM state cache, please check ROMs + + + +- ++ + loading ROM state from cache + + + +- ++ + done (loading ROM state from cache, elapsed time = %1) + done (loading ROM state from cache, elapsed time = %1) + + +- ++ + processing machine list + + + +- ++ + WARNING: couldn't determine emulator version of machine list cache + + + +- +- ++ ++ + INFORMATION: the machine list cache will now be updated due to a new format + + + +- ++ + WARNING: the machine list cache is invalid, forcing a refresh + + + +- ++ + loading machine data from machine list cache + + + +- +- ++ ++ + Machine data - %p% + + + +- ++ + and %n device(s) loaded + + and %n device loaded +@@ -8572,7 +8554,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + , %n BIOS set(s) + + , %n BIOS set +@@ -8580,275 +8562,275 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- +- ++ ++ + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + ROM state info: L:%1 C:%2 M:%3 I:%4 N:%5 U:%6 + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, triggering an automatic ROM check + + + +- ++ + WARNING: ROM state cache is incomplete or not up to date, please re-check ROMs + + + +- ++ + determining emulator version and supported sets + + + +- ++ + done (determining emulator version and supported sets, elapsed time = %1) + done (determining emulator version and supported sets, elapsed time = %1) + + +- ++ + FATAL: couldn't determine the number of supported sets + + + +- ++ + ROM, CHD + + + +- ++ + CHD + + + +- ++ + ? + + + +- +- ++ ++ + ascending + + + +- +- ++ ++ + descending + + + +- ++ + ROM state filter already active + + + +- ++ + please wait for ROM verification to finish and try again + + + +- ++ + please wait for reload to finish and try again + + + +- ++ + applying ROM state filter + + + +- ++ + State filter - %p% + + + +- ++ + done (applying ROM state filter, elapsed time = %1) + done (applying ROM state filter, elapsed time = %1) + + +- ++ + saving favorites + + + +- ++ + FATAL: can't open favorites file for writing, path = %1 + FATAL: can't open favorites file for writing, path = %1 + + +- ++ + saving play history + + + +- ++ + FATAL: can't open play history file for writing, path = %1 + FATAL: can't open play history file for writing, path = %1 + + +- ++ + L: + L: + + +- ++ + C: + C: + + +- ++ + M: + M: + + +- ++ + I: + I: + + +- ++ + N: + N: + + +- ++ + U: + U: + + +- ++ + S: + S: + + +- +- ++ ++ + ERROR: can't open ROM state cache for writing, path = %1 + ERROR: can't open ROM state cache for writing, path = %1 + + +- +- +- ++ ++ ++ + ROM check - %p% + + + +- ++ + T: + T: + + +- ++ + done (verifying ROM status for '%1', elapsed time = %2) + done (verifying ROM status for '%1', elapsed time = %2) + + +- +- ++ ++ + ROM state + + + +- +- ++ ++ + ROM status for '%1' is '%2' + ROM status for '%1' is '%2' + + +- ++ + pre-caching icons from ZIP archive + + + +- ++ + done (pre-caching icons from ZIP archive, elapsed time = %1) + done (pre-caching icons from ZIP archive, elapsed time = %1) + + +- ++ + pre-caching icons from archive + + + +- ++ + done (pre-caching icons from archive, elapsed time = %1) + + + +- ++ + pre-caching icons from directory + + + +- ++ + done (pre-caching icons from directory, elapsed time = %1) + done (pre-caching icons from directory, elapsed time = %1) + + +- ++ + loading icons from cache database + + + +- ++ + done (loading icons from cache database, elapsed time = %1) + + + +- ++ + loading category.ini + + + +- ++ + Category.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no category.ini data available + + + +- ++ + done (loading category.ini, elapsed time = %1) + + + +- ++ + loading catver.ini + + + +- ++ + Catver.ini - %p% + + + +- ++ + ERROR: can't open '%1' for reading -- no catver.ini data available + + + +- ++ + done (loading catver.ini, elapsed time = %1) + + + +- ++ + %1 category / %2 version records loaded + + + +- ++ + Category view - %p% + + + +- ++ + %n category record(s) loaded + + %n category record loaded +@@ -8856,12 +8838,12 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Version view - %p% + + + +- ++ + %n cached ROM state(s) loaded + + %n cached ROM state loaded +@@ -8869,7 +8851,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + %n icon(s) loaded + + %n icon loaded +@@ -8877,297 +8859,297 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + Icon cache - %p% + Icon cache - %p% + + +- ++ + unused + + + +- ++ + cpu + + + +- ++ + vector + + + +- ++ + lcd + + + +- ++ + Is BIOS? + Is BIOS? + + +- ++ + Runnable + + + +- ++ + Display + + + +- ++ + Rotate + + + +- ++ + Flip-X + + + +- ++ + Pixel clock + + + +- ++ + H-Total + + + +- ++ + H-Bend + + + +- ++ + HB-Start + + + +- ++ + V-Total + + + +- ++ + V-Bend + + + +- ++ + VB-Start + + + +- +- +- ++ ++ ++ + Tag + + + +- ++ + Control + + + +- ++ + Minimum + + + +- ++ + Maximum + + + +- ++ + Sensitivity + + + +- ++ + Key Delta + + + +- ++ + Reverse + + + +- ++ + joy4way + + + +- ++ + joy8way + + + +- ++ + trackball + + + +- ++ + joy2way + + + +- ++ + doublejoy8way + + + +- ++ + dial + + + +- ++ + paddle + + + +- ++ + pedal + + + +- ++ + stick + + + +- ++ + vjoy2way + + + +- ++ + lightgun + + + +- ++ + doublejoy4way + + + +- ++ + vdoublejoy2way + + + +- ++ + doublejoy2way + + + +- ++ + printer + + + +- ++ + cdrom + + + +- ++ + cartridge + + + +- ++ + cassette + + + +- ++ + quickload + + + +- ++ + floppydisk + + + +- ++ + serial + + + +- ++ + snapshot + + + +- ++ + Device + + + +- ++ + Instance + + + +- ++ + Brief name + + + +- ++ + Extension + + + +- ++ + Mandatory + + + +- +- ++ ++ + FATAL: can't start MAME executable within a reasonable time frame, giving up + + + +- +- ++ ++ + emulator info: type = %1, version = %2 + emulator info: type = %1, version = %2 + + +- ++ + FATAL: couldn't determine emulator type and version + + + +- +- ++ ++ + Optional + + + +- ++ + WARNING: name attribute empty on XML line %1 (set will be ignored!) -- please inform MAME developers and include the offending output from -listxml + + + +- ++ + done (loading XML data and recreating cache, elapsed time = %1) + + + +- ++ + checking real status of %n set(s) not mentioned during full audit + + checking real status of %n set not mentioned during full audit +@@ -9175,7 +9157,7 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + done (checking real status of %n set(s) not mentioned during full audit) + + done (checking real status of %n set not mentioned during full audit) +@@ -9183,30 +9165,30 @@ Use local value for option '%1', overwrite with global value or don&ap + + + +- ++ + RAM options + + + +- ++ + Option + + + +- +- ++ ++ + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + WARNING: emulator audit call didn't exit cleanly -- exitCode = %1, exitStatus = %2 + + +- +- ++ ++ + normal + + + +- +- ++ ++ + crashed + + +@@ -9528,153 +9510,153 @@ Use local value for option '%1', overwrite with global value or don&ap + + MainWindow + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + Default + + + +- ++ + Toggle maximization of embedded emulator windows + + + +- ++ + Searching machines - %p% + + + +- ++ + Show machine/software titles + + + +- ++ + Show machine- or software-titles at the bottom of all images + + + +- ++ + Embed emulator widget + + + +- ++ + &Embed + + + +- ++ + Kill selected emulator(s) (sends KILL signal to emulator process(es)) + + + +- ++ + &Kill + &Kill + + + +- +- +- +- +- ++ ++ ++ ++ ++ + &Play + &Play + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play &embedded + + + + +- +- +- +- ++ ++ ++ ++ + To &favorites + To &favorites + + +- +- +- +- ++ ++ ++ ++ + Check &ROM state + Check &ROM state + + +- +- +- +- ++ ++ ++ ++ + Analyse current machine's ROM set with the ROMAlyzer + + + +- +- +- +- ++ ++ ++ ++ + Rebuild current machine's ROM set with the ROMAlyzer + + + +- ++ + Remove from favorites + + + +- +- ++ ++ + &Remove + &Remove + + +- ++ + Clear all favorites + + + +- +- ++ ++ + &Clear + &Clear + + +- ++ + Save favorites now + + + +- +- ++ ++ + &Save + &Save + + +- ++ + Remove from played + + + +- ++ + Clear all played + + + +- ++ + Save play-history now + + +@@ -9687,55 +9669,55 @@ Use local value for option '%1', overwrite with global value or don&ap + Waiting for data... + + +- +- +- ++ ++ ++ + please wait for ROM state filter to finish and try again + + + +- +- ++ ++ + please wait for ROM verification to finish and try again + + + +- +- +- ++ ++ ++ + please wait for image check to finish and try again + + + +- +- ++ ++ + ROM verification already active + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for reload to finish and try again + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + Confirm + + + +- ++ + The ROM verification process may be very time-consuming. + It will overwrite existing cached data. + +@@ -9746,187 +9728,187 @@ It will overwrite existing cached data. + Do you really want to check all ROM states now? + + +- ++ + automatic ROM check triggered + + + +- ++ + image cache cleared + + + +- ++ + icon cache cleared + + + + +- ++ + About Qt + + + +- ++ + ERROR: no match found (?) + + + +- +- ++ ++ + Export to... + Export to... + + +- +- ++ ++ + <inipath>/%1.ini + <inipath>/%1.ini + + +- +- +- +- ++ ++ ++ ++ + Select file... + Select file... + + +- +- ++ ++ + <p>No data available</p> + + + + +- ++ + Embedded emulators + + + +- ++ + Release emulator + + + +- ++ + WARNING: no matching window for emulator #%1 found + + + +- ++ + Embedding failed + + + ++ + +- + Scanning pause key + + + +- +- ++ ++ + Choose export file + + + +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ + All files (*) + + + +- +- ++ ++ + Choose import file + + + +- +- ++ ++ + WARNING: invalid inipath + + + +- +- ++ ++ + stopping current processing upon user request + + + +- ++ + Your configuration changes have not been applied yet. + Really quit? + Your configuration changes have not been applied yet. + Really quit? + + +- ++ + There are one or more emulators still running. + Should they be killed on exit? + There are one or more emulators still running. + Should they be killed on exit? + + +- ++ + There are one or more running downloads. Quit anyway? + + + +- ++ + cleaning up + + + +- ++ + aborting running downloads + + + +- ++ + saving main widget layout + + + +- ++ + disconnecting audio source from audio sink + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine + + + +- +- +- +- +- ++ ++ ++ ++ ++ + Play selected machine (embedded) + + + +- ++ + destroying YouTube video widget + + + +- ++ + destroying process manager + + + +- ++ + killing %n running emulator(s) on exit + + killing %n running emulator on exit +@@ -9934,7 +9916,7 @@ Should they be killed on exit? + + + +- ++ + keeping %n running emulator(s) alive + + keeping %n running emulator alive +@@ -9942,12 +9924,12 @@ Should they be killed on exit? + + + +- ++ + destroying network access manager + + + +- ++ + so long and thanks for all the fish + + +@@ -9963,16 +9945,16 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Tag + + + + +- ++ + Icon / Value + + +@@ -9981,10 +9963,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Year + + +@@ -9993,10 +9975,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Manufacturer + + +@@ -10005,10 +9987,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Driver status + + +@@ -10016,9 +9998,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + Icon + + +@@ -10212,10 +10194,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Source file + + +@@ -10225,10 +10207,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Rank + + +@@ -10685,7 +10667,7 @@ Should they be killed on exit? + + + +- ++ + Internal browser + + +@@ -10890,12 +10872,12 @@ Should they be killed on exit? + + + ++ + + +- ++ + + +- + Lock ranks + + +@@ -10989,7 +10971,7 @@ Should they be killed on exit? + + + +- ++ + Internal PDF viewer + + +@@ -11067,13 +11049,13 @@ Should they be killed on exit? + + + +- ++ + Machine / Attribute + + + + +- ++ + Machine / Clones + + +@@ -11084,7 +11066,7 @@ Should they be killed on exit? + + + +- ++ + Category / Machine + + +@@ -11095,19 +11077,19 @@ Should they be killed on exit? + + + +- ++ + Version / Machine + + + + +- ++ + Search for machines (not case-sensitive) + + + + +- ++ + Search for machines + + +@@ -11265,9 +11247,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + Add current machine to favorites + + +@@ -11306,10 +11288,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Check current machine's ROM state + + +@@ -11448,10 +11430,10 @@ Should they be killed on exit? + Forcibly clear (remove) ALL emulator related caches + + +- +- +- +- ++ ++ ++ ++ + &Analyse ROM... + &Analyse ROM... + +@@ -11471,13 +11453,13 @@ Should they be killed on exit? + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + please wait for ROMAlyzer to finish the current analysis and try again + + +@@ -11491,90 +11473,90 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Name + + + +- ++ + Are you sure you want to clear the favorites list? + Are you sure you want to clear the favorites list? + + +- ++ + Are you sure you want to clear the play history? + Are you sure you want to clear the play history? + + +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ + No data available + + + +- +- +- +- ++ ++ ++ ++ + Tab position + + + +- ++ + Default configuration + + + +- ++ + ProjectMESS in-memory cache cleared (%1) + + + +- ++ + ROM state cache file '%1' removed + + + +- ++ + ProjectMESS page for system '%1' + + + +- ++ + Fetching ProjectMESS page for system '%1', please wait... + + + +- ++ + destroying emulator configuration instances + + + +- ++ + destroying image widgets + + + +- ++ + destroying open dialogs + + + +- ++ + setting GUI style to '%1' + + + +- ++ + WARNING: GUI style '%1' not found + + +@@ -11604,10 +11586,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + ROM types + + +@@ -11616,10 +11598,10 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Players + + +@@ -11628,9 +11610,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + Category + + +@@ -11639,9 +11621,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + Version + + +@@ -11734,7 +11716,7 @@ Should they be killed on exit? + + + +- ++ + &Notes + + +@@ -11793,9 +11775,9 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + %vs (%ms total) + + +@@ -11863,21 +11845,21 @@ Should they be killed on exit? + + + +- +- +- ++ ++ ++ + paused + + + +- +- ++ ++ + Copy emulator command line to clipboard + + + +- +- ++ ++ + &Copy command + &Copy command + +@@ -11954,7 +11936,7 @@ Should they be killed on exit? + + + +- ++ + Select one or more audio files + + +@@ -11983,7 +11965,7 @@ Should they be killed on exit? + + + +- ++ + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + audio player: track info: title = '%1', artist = '%2', album = '%3', genre = '%4' + +@@ -12088,118 +12070,118 @@ Should they be killed on exit? + + + +- +- +- +- ++ ++ ++ ++ + Set tab position north + + + +- +- +- +- ++ ++ ++ ++ + &North + &North + + +- +- +- +- ++ ++ ++ ++ + Set tab position south + + + +- +- +- +- ++ ++ ++ ++ + &South + &South + + +- +- +- +- ++ ++ ++ ++ + Set tab position west + + + +- +- +- +- ++ ++ ++ ++ + &West + &West + + +- +- +- +- ++ ++ ++ ++ + Set tab position east + + + +- +- +- +- ++ ++ ++ ++ + &East + &East + + +- +- +- +- ++ ++ ++ ++ + Component setup + + + +- +- +- +- ++ ++ ++ ++ + Component setup... + + + +- ++ + machine list reload is already active + + + +- +- ++ ++ + saving machine selection + + + +- ++ + machine list cache file '%1' removed + + + +- ++ + WARNING: cannot remove the machine list cache file '%1', please check permissions + + + +- ++ + saving current machine's favorite software + + + +- ++ + saving current machine's device configurations + + + +- ++ + destroying machine list + + +@@ -12224,7 +12206,7 @@ Should they be killed on exit? + Titl&e + + +- ++ + freed %n byte(s) in %1 + + freed %n byte in %1 +@@ -12232,7 +12214,7 @@ Should they be killed on exit? + + + +- ++ + %n entry(s) + + %n entry +@@ -12245,7 +12227,7 @@ Should they be killed on exit? + + + +- ++ + removed %n byte(s) in %1 + + removed %n byte in %1 +@@ -12253,7 +12235,7 @@ Should they be killed on exit? + + + +- ++ + %n file(s) + + %n file +@@ -12290,23 +12272,23 @@ Should they be killed on exit? + + + +- ++ + Choose file to store download + + + +- ++ + loading style sheet '%1' + loading style sheet '%1' + + +- ++ + removing current style sheet + + + +- +- ++ ++ + last message repeated %n time(s) + + last message repeated %n time +@@ -12314,17 +12296,17 @@ Should they be killed on exit? + + + +- ++ + Toggle automatic pausing of embedded emulators (hold down for menu) + + + +- ++ + Scan the pause key used by the emulator + + + +- ++ + Scan pause key... + + +@@ -12335,187 +12317,187 @@ Should they be killed on exit? + + + +- +- ++ ++ + Enter search string + + + +- ++ + Dock / undock this widget + + + +- +- ++ ++ + note: the special characters $, (, ), *, +, ., ?, [, ], ^, {, |, } and \ must be escaped when they are meant literally! + + + +- +- +- +- ++ ++ ++ ++ + Reset + + + +- ++ + Negate search + + + +- ++ + sorry, devices cannot run standalone + + + +- ++ + No devices available + + + +- +- +- +- +- ++ ++ ++ ++ ++ + default + + + +- ++ + Show machine- or software-titles only when the machine list is not visible due to the current layout + + + +- +- +- +- ++ ++ ++ ++ + &Rebuild ROM... + + + +- ++ + Include BIOS sets + + + +- ++ + Include device sets + + + ++ + + +- ++ + + +- + Unlock ranks + + + +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ + N/A + N/A + + +- ++ + ERROR: can't load HTML file '%1' + + + +- ++ + ERROR: can't load PDF viewer from '%1' + + + +- +- ++ ++ + please wait for ROMAlyzer to finish the current rebuild and try again + + + +- ++ + YouTube on-disk cache cleared (%1) + + + +- ++ + WARNING: cannot remove the ROM state cache file '%1', please check permissions + + + +- ++ + triggering an automatic ROM check on next reload + + + +- ++ + INFORMATION: the arcade mode has to be set up first, launching the respective dialog instead + + + +- ++ + arcade mode: launching QMC2 Arcade, command = '%1' + + + +- ++ + WARNING: failed launching QMC2 Arcade + + + +- ++ + ProjectMESS page for '%1' / '%2' + + + +- ++ + Fetching ProjectMESS page for '%1' / '%2', please wait... + + + +- ++ + Emulator for this machine + + + +- ++ + please wait for sorting to finish and try again + + + ++ + +- + Toggle embedder options (hold down for menu) + + + +- ++ + To favorites + + + +- ++ + Kill emulator + + + +- ++ + &Kill emulator + + + +- ++ + Couldn't find the window ID of one or more + emulator(s) within a reasonable timeframe. + +@@ -12523,91 +12505,91 @@ Retry embedding? + + + +- ++ + Information + + + +- ++ + Sorry, the emulator meanwhile died a sorrowful death :(. + + + +- ++ + saving YouTube video info cache + + + +- ++ + done (saving YouTube video info cache) + + + +- +- ++ ++ + failed (saving YouTube video info cache) + + + +- ++ + destroying audio effects dialog + + + +- ++ + destroying media player + + + +- ++ + Welcome to QMC2 v%1! + + + +- +- +- +- +- +- +- +- +- ++ ++ ++ ++ ++ ++ ++ ++ ++ + Loading, please wait... + + + +- ++ + WARNING: can't open style sheet '%1' + + + +- ++ + using default color palette for GUI style '%1' + + + +- ++ + using custom color palette + + + +- ++ + loading YouTube video info cache + + + +- ++ + done (loading YouTube video info cache) + + + +- ++ + YouTube index - %p% + + + +- ++ + %n video info record(s) loaded + + %n video info record loaded +@@ -12615,141 +12597,141 @@ Retry embedding? + + + +- ++ + Add URL + + + +- ++ + Enter valid MP3 stream URL: + + + +- ++ + Buffering %p% + + + +- +- ++ ++ + running + + + +- +- ++ ++ + Play tagged - %p% + + + +- ++ + Add favorites - %p% + + + +- +- +- +- ++ ++ ++ ++ + please wait for current activity to finish and try again (this batch-mode operation can only run exclusively) + + + +- ++ + It's likely much faster to do a full audit than to check %1 sets individually. Do you really want to continue? + + + +- ++ + ROM tool tagged - %p% + + + +- +- ++ ++ + Tag - %p% + + + +- +- ++ ++ + Tagging, please wait... + + + +- +- ++ ++ + Untag - %p% + + + +- +- ++ ++ + Untagging, please wait... + + + +- +- ++ ++ + Invert tag - %p% + + + +- +- ++ ++ + Inverting tags, please wait... + + + +- ++ + External browser + + + +- ++ + External PDF viewer + + + +- ++ + Manual selection + + + +- ++ + Multiple PDF manuals exist. Select the ones you want to open: + + + +- +- ++ ++ + Software detail + + + +- ++ + Choose overlay color + + + +- ++ + WARNING: ROM path '%1' doesn't exist + + + +- ++ + WARNING: ROM path '%1' isn't accessible + + + +- ++ + The ROM path '%1' doesn't exist or isn't accessible. + + Please check the 'rompath' option in the global emulator configuration to fix this, otherwise ROMs will probably not be available to the emulator! + + + +- ++ + The ROM paths + + %1 +@@ -12760,58 +12742,58 @@ Please check the 'rompath' option in the global emulator configuration + + + +- ++ + Check ROM path + + + +- ++ + processing global emulator configuration + + + ++ + +- + Export global MAME configuration + + + +- ++ + Import from... + + + ++ + +- + Import global MAME configuration + + + ++ + +- + Enable processing of MAME output notifiers (this forces '-output console') + + + +- +- ++ ++ + <inipath>/mame.ini + + + +- ++ + emulator #%1 is already embedded + + + +- +- ++ ++ + WARNING: multiple windows for emulator #%1 found, choosing window ID %2 for embedding + + + +- +- ++ ++ + embedding emulator #%1, window ID = %2 + + +@@ -15143,21 +15125,6 @@ Are you sure you want to do this? + Browse system notes template + + +- +- +- Load software information database (from history.dat) +- +- +- +- +- Software information database - history.dat (read) +- +- +- +- +- Browse software information database (history.dat) +- +- + + + Define additional artwork classes for systems and software-list entries +@@ -15306,11 +15273,6 @@ Are you sure you want to do this? + Archive + + +- +- +- MAME machine information database - history.dat (read) +- +- + + + Browse MESS emulator information database (messinfo.dat) +@@ -15331,21 +15293,11 @@ Are you sure you want to do this? + Machine favorites file (write) + + +- +- +- Load MAME machine information database (history.dat) +- +- + + + Machine info (MAME) + + +- +- +- Browse MAME machine information database (history.dat) +- +- + + + Video snap folder +@@ -15995,11 +15947,31 @@ Are you sure you want to do this? + Browse system manual folder + + ++ ++ ++ Software information database - history.xml (read) ++ ++ ++ ++ ++ MAME machine information database - history.xml (read) ++ ++ ++ ++ ++ Browse software information database (history.xml) ++ ++ + + + DAT-info database file (write) + + ++ ++ ++ Load MAME machine information database (history.xml) ++ ++ + + + Machine info (MESS) +@@ -16015,6 +15987,11 @@ Are you sure you want to do this? + Emu info (MESS) + + ++ ++ ++ Load software information database (from history.xml) ++ ++ + + + Software info +@@ -16025,6 +16002,11 @@ Are you sure you want to do this? + Import software information to DAT-info database + + ++ ++ ++ Browse MAME machine information database (history.xml) ++ ++ + + + System manual folder (read) +@@ -17209,28 +17191,28 @@ Are you sure you want to do this? + + QObject + +- +- ++ ++ + correct + + + +- ++ + incorrect + + + +- ++ + mostly correct + + + +- ++ + not found + + + +- ++ + + + +@@ -17248,34 +17230,34 @@ Are you sure you want to do this? + + + +- ++ + Import from... + Import from... + + ++ + +- + Export machine-specific MAME configuration + + + ++ + +- + Import machine-specific MAME configuration + + + +- ++ + Setting up the GUI, please wait... + + + +- ++ + M.A.M.E. Catalog / Launcher II v + + + +- ++ + GIT %1 + GIT %1 + +@@ -17316,13 +17298,13 @@ Are you sure you want to do this? + + + +- +- ++ ++ + SDL joystick support enabled - using SDL v%1.%2.%3 + SDL joystick support enabled - using SDL v%1.%2.%3 + + +- ++ + Phonon features enabled - using Phonon v%1 + Phonon features enabled - using Phonon v%1 + +@@ -17399,19 +17381,19 @@ Are you sure you want to do this? + + + +- ++ + + yes + + + +- ++ + + no + + + +- ++ + + partially + +diff --git a/data/swn/Shideravan Software Template.html b/data/swn/Shideravan Software Template.html +index ae5820e18..bf8d15cef 100644 +--- a/data/swn/Shideravan Software Template.html ++++ b/data/swn/Shideravan Software Template.html +@@ -63,7 +63,7 @@ status of the languages supported: + $SOFTWARE_YEAR$ Year this software was published + $SOFTWARE_SUPPORTED$ Software support status ('yes', 'no' or 'partially'/translated) + $SOFTWARE_SUPPORTED_UT$ Software support status ('yes', 'no' or 'partially'/untranslated) +- $SOFTWARE_INFO$ Software info DB entry (from MAME history.dat) ++ $SOFTWARE_INFO$ Software info DB entry (from MAME history.xml) + $SOFTWARE_INFO_STATUS$ Status of the software info DB entry (OK/NO_DATA) + $SOFTWARE_STATUS$ + $SOFTWARE_STATUS_UT$ +diff --git a/data/swn/template.html b/data/swn/template.html +index 3a8e53372..df37cdbfe 100644 +--- a/data/swn/template.html ++++ b/data/swn/template.html +@@ -12,7 +12,7 @@ + $SOFTWARE_YEAR$ Year this software was published + $SOFTWARE_SUPPORTED$ Software support status ('yes', 'no' or 'partially' / translated) + $SOFTWARE_SUPPORTED_UT$ Software support status ('yes', 'no' or 'partially' / untranslated) +- $SOFTWARE_INFO$ Software info DB entry (from MAME history.dat) ++ $SOFTWARE_INFO$ Software info DB entry (from MAME history.xml) + $SOFTWARE_INFO_STATUS$ Status of the software info DB entry (OK / NO_DATA) + $SOFTWARE_STATUS$ The software-set's status (translated) + $SOFTWARE_STATUS_UT$ The software-set's status (untranslated) +diff --git a/src/datinfodbmgr.cpp b/src/datinfodbmgr.cpp +index 6c23df514..7abbd6e70 100644 +--- a/src/datinfodbmgr.cpp ++++ b/src/datinfodbmgr.cpp +@@ -7,6 +7,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -568,77 +569,79 @@ void DatInfoDatabaseManager::importSoftwareInfo(QStringList pathList, bool fromS + qmc2MainWindow->progressBarMachineList->setRange(0, swInfoDB.size()); + qmc2MainWindow->progressBarMachineList->setValue(0); + qApp->processEvents(); +- QTextStream ts(&swInfoDB); +- ts.setCodec(QTextCodec::codecForName("UTF-8")); ++ QXmlStreamReader xsr(&swInfoDB); + quint64 recordsProcessed = 0, pendingUpdates = 0; +- QRegExp markRegExp("^\\$\\S+\\=\\S+\\,$"); +- QRegExp reduceLinesRegExp("(
){2,}"); +- while ( !ts.atEnd() && !qmc2LoadingInterrupted ) { +- QString singleLineSimplified = ts.readLine().simplified(); +- bool containsMark = singleLineSimplified.contains(markRegExp); +- while ( !containsMark && !ts.atEnd() ) { +- singleLineSimplified = ts.readLine().simplified(); +- if ( recordsProcessed++ % QMC2_SWINFO_RESPONSIVENESS == 0 ) { ++ QRegularExpression headerRx("^\n?(.*)\n{2,}"); ++ QRegularExpression textEndRx("\n\t{2}$"); ++ QRegularExpression doubleLineBreakRx("\n{2,}"); ++ QRegularExpression singleLineBreakRx("\n"); ++ if ( xsr.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xsr.name() == "history" ) { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { + qmc2MainWindow->progressBarMachineList->setValue(swInfoDB.pos()); + qApp->processEvents(); + } +- containsMark = singleLineSimplified.contains(markRegExp); +- } +- if ( containsMark && !singleLineSimplified.startsWith("$info=") ) { +- QStringList infoWords = singleLineSimplified.mid(1).split("=", QString::SkipEmptyParts); +- if ( infoWords.count() == 2 ) { +- QStringList systemNames = infoWords[0].split(",", QString::SkipEmptyParts); +- QStringList gameNames = infoWords[1].split(",", QString::SkipEmptyParts); +- bool startsWithDollarBio = false; +- while ( !startsWithDollarBio && !ts.atEnd() ) { +- singleLineSimplified = ts.readLine().simplified(); +- if ( recordsProcessed++ % QMC2_SWINFO_RESPONSIVENESS == 0 ) { ++ while ( xsr.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xsr.name() == "entry" ) { ++ QStringList systemNames; ++ QStringList gameNames; ++ QString swInfoString; ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { + qmc2MainWindow->progressBarMachineList->setValue(swInfoDB.pos()); + qApp->processEvents(); + } +- startsWithDollarBio = singleLineSimplified.startsWith("$bio"); +- } +- if ( startsWithDollarBio ) { +- QString swInfoString; +- bool firstLine = true; +- bool startsWithDollarEnd = false; +- while ( !startsWithDollarEnd && !ts.atEnd() ) { +- QString singleLine = ts.readLine(); +- singleLineSimplified = singleLine.simplified(); +- startsWithDollarEnd = singleLineSimplified.startsWith("$end"); +- if ( !startsWithDollarEnd ) { +- if ( !firstLine ) +- swInfoString.append(singleLine + "
"); +- else if ( !singleLine.isEmpty() ) { +- swInfoString.append("" + singleLine + "
"); +- firstLine = false; ++ while ( xsr.readNextStartElement() && !qmc2LoadingInterrupted ) { ++ if ( xsr.name() == "software" ) { ++ if ( recordsProcessed++ % QMC2_INFOSOURCE_RESPONSIVENESS == 0 ) { ++ qmc2MainWindow->progressBarMachineList->setValue(swInfoDB.pos()); ++ qApp->processEvents(); + } +- } +- if ( recordsProcessed++ % QMC2_SWINFO_RESPONSIVENESS == 0 ) { +- qmc2MainWindow->progressBarMachineList->setValue(swInfoDB.pos()); +- qApp->processEvents(); +- } +- } +- if ( startsWithDollarEnd ) { +- // reduce the number of line breaks +- swInfoString.replace(reduceLinesRegExp, "