From 9099d5aa699d1c6063dc782d1ad2afafa585b2ed Mon Sep 17 00:00:00 2001 From: Wind4 Date: Mon, 15 Aug 2016 18:35:59 +0800 Subject: [PATCH] vlmcsd-svn998-2016-08-11-Hotbird64 --- GNUmakefile | 19 +- floppy144.vfd | Bin 1474560 -> 1474560 bytes kms.c | 387 ++--- kms.h | 1 + libkms.c | 102 +- libkms.h | 8 +- make_dragonfly | 2 + make_freebsd | 1 + make_hurd | 1 + make_kfreebsd | 1 + make_linux | 30 +- make_lxss | 3507 ------------------------------------------ make_multilib_linux | 1 + make_netbsd | 1 + make_openbsd | 1 + make_osx | 1 + make_solaris | 1 + make_windows | 7 +- msrpc-client.c | 4 +- msrpc-client.h | 1 + msrpc-server.c | 35 +- network.c | 2 +- network.h | 2 +- output.c | 10 +- output.h | 2 +- rpc.c | 167 +- rpc.h | 133 ++ shared_globals.c | 4 + shared_globals.h | 4 +- types.h | 2 - vlmcs.1 | 8 +- vlmcs.1.dos.txt | 183 ++- vlmcs.1.html | 26 +- vlmcs.1.pdf | Bin 25770 -> 26351 bytes vlmcs.1.unix.txt | 183 ++- vlmcs.c | 64 +- vlmcs.h | 8 + vlmcsd-floppy.7.html | 2 +- vlmcsd-floppy.7.pdf | Bin 35003 -> 35003 bytes vlmcsd.7.html | 2 +- vlmcsd.7.pdf | Bin 17301 -> 17301 bytes vlmcsd.8 | 9 +- vlmcsd.8.dos.txt | 37 +- vlmcsd.8.html | 42 +- vlmcsd.8.pdf | Bin 38264 -> 38913 bytes vlmcsd.8.unix.txt | 37 +- vlmcsd.c | 13 +- vlmcsd.ini.5.html | 2 +- vlmcsd.ini.5.pdf | Bin 20852 -> 20852 bytes vlmcsdmulti.1.html | 2 +- vlmcsdmulti.1.pdf | Bin 10042 -> 10042 bytes 51 files changed, 987 insertions(+), 4068 deletions(-) delete mode 100755 make_lxss diff --git a/GNUmakefile b/GNUmakefile index 3b2e3db..0d1b71b 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -313,8 +313,8 @@ VLMCS_OBJS = $(VLMCS_SRCS:.c=.o) MULTI_SRCS = vlmcsd.c vlmcs.c vlmcsdmulti.c $(SRCS) MULTI_OBJS = $(SRCS:.c=.o) vlmcsd-m.o vlmcs-m.o vlmcsdmulti-m.o -DLL_SRCS = libkms.c $(SRCS) -DLL_OBJS = $(DLL_SRCS:.c=.o) +DLL_SRCS = libkms.c vlmcs.c $(SRCS) +DLL_OBJS = $(DLL_SRCS:.c=-l.o) PDFDOCS = vlmcs.1.pdf vlmcsd.7.pdf vlmcsd.8.pdf vlmcsdmulti.1.pdf vlmcsd.ini.5.pdf vlmcsd-floppy.7.pdf HTMLDOCS = $(PDFDOCS:.pdf=.html) @@ -456,6 +456,21 @@ endif endif endif +%-l.o: %.c + ifeq ($(VERBOSE),1) + $(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $< + ifeq ($(DEPENDENCIES),1) + $(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $< + endif + else + @echo "$(COMPILER) CC $@ <- $<" + @$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $< + ifeq ($(DEPENDENCIES),1) + @echo "$(COMPILER) DEP $*.d <- $<" + @$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $< + endif + endif + ifdef CAT BUILDCOMMAND = cat $^ | $(CC) -x$(COMPILER_LANGUAGE) -o $@ - diff --git a/floppy144.vfd b/floppy144.vfd index 4c0f330d99489303ded1893138a0d5f9b683a94f..6d26dee282075568021ddcbf6c47f3645c65f443 100644 GIT binary patch delta 79306 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 OD^#<=Cszli1{QifrXOJd delta 78519 zcmXWgQ*fY7lm_6~wr$%^CUz#aZS#w5+qRR5ITL4MPHfxQe{1*RsngY``mVd`)Z2l9 zI)Q;YjS6Tf%4pOrZfI+$|F@vX2L@_$hNgZdw|4m@h~YY~7!QFaHbewEG+>^q$iBVX1L|C6GsJNE{Agq?nzhpxpa z@$LAEG}uRrMRndAJOerFo{w^rjEUEe5>Q5 zsojN;P5P0P==Y{ZlsyEyU|qK5=*UfI)T!rfDkE&tSVHIYx`_ZEii}7ed;3FRj?*B? zHPzo$%9&I{W|(0%i{fs|k56mdmQ3_?zjqq6-I0#6J+qjJ{v&A`I1g#px z5VQENoOJ;OC%KgUt{^wsh-~j6boEje;OwnIf!>)@8n-&MFR77X;itM}zvH@OVvq%I z3e$13Tf5+Ut7;U4$G|+fgG?gJQtUD(x&kZY&9S+0jy`D+h=zeODla}hyTFLOgrWZ3{CAw10_wx$$?9_&iL{GP# zi{*YOazBqoBLQ1WSC5=O?CoXUUId4Wlp;w=*{XBgvQvEwG5zLO)?{hLRgSWd!&9}I zbYgGP$Icy4=|eG+H8@=Y3yS-U1wa2lODJc$o$Yi^wNjS0{e4X4Nq=6j*a6va_{aB8 zl4j)aS18}XYkz58gxDu%TUU%y2BbTG^;>~K_a zp2c6x7#>Iv5JRNgzINDJsNc)zXaMg3pT$?-E z2YbOF7Y$$IPlIj)B)fxFXEv*4+&|R1Jy%!yLS?|pZ}XRQHsqDzH0X%$MJjw7A%0K4 zFi(4jVkq6Zw2;mZn68Sd5-)S+T&S*4bXsv9mP`$ax8J#K#{2jrq-{u}bi^8iOrorR zZ~k@|Nhp1kITY7V{?KQ&P=IE_ewrS*QkkVsOPS$Z<#}_ZnLfB42O~Jj*_WnB9v^Rh z(}Mv%q$ljFX;K+S+CY(bM7A`bl~TpC>=C$ZyVY=up{lW8*uqMDWG z&$%k|muqKp2;3G{)QldW#?WE?9UPB1b`4TSc38 zo!>H8DLPnipdd7l<5_bW=<&jpz4r6me*6W%q`=9rXyO&b*;L^G1Q1vhmSiolkL&oS zkw*)fjccuL+V=F~8b1c)MN`&k{eq&RbLSDxH^YTzV3$*?0pQLZEw$ahw2p zX0#s(yAjt`o@PSMU9f)3!#EwH!w&ofT84fk3!Bh1d^u)~7aj_DorF~lM z7t7MespFkGKZ6uqcFw2pyNl$SXcdoc8+Fb0qPLAyNyRVOAoH#U=Um)Str*S^XbiZn z0BSkz(iYdLfVrAJ;^;NOtNKVtc^H6iBg%AHDAw^@OU#5DR~LL>`y!7q>1*c~eTvo6 z2Gw%-@Os&r)X<^4`d^=ju|mSxg-eFEbH%br=I0_u?Lsf!6E@7QvtM`nlI{8nIK#x+ zIMX5wdho5y0GsB_S+d9vr;^6<6_i2o7Zdl-9*lx`n~4ib*7m zG`HYYO)K^qmAs&#mHW-O6CYoQ6kSTJLV?g8{cReuvNY-n(cJ}}aGS#$iY~tiMiSST zFNQFwNnBz0#)pG8Q;Ao-P{k(xaDWV8xnYM=&}Sf@2Rl-mHzJM}k^v5!nTN`^Kov8U z#t*ymI5;^w3`U3Q-OhH&k)~=r=ofBYA(kUZgrug)Nj`gMcAH5uHl;&)opaBHdi^po zkmKV$ds{LakpL9|ED7}cS8IJ+AtpBI=+fE!$vp1}Pu;Uerz<1=4(2~2C;j*G%KcaP z3$eNW>az6P1y4+Ai$LWCNa{Gl%k$V5Qalg8d%INa@O`W#&jwnw5ED{(e0Fx6cVV4$ z`qK2>xjI4AZ!-E&+%=+SWzL%?&vU8;@e-_ES8uloR`qN!ew%-cJ3zxLTFt_rqf9)a z5n#M6o`?lEeCrOsBqW(o$l2i=84VYzy?WK#;RdFZd2Om60^nvH!Q!>p)#!yD!s2rw^xIJ%U>>BR|8{F3zVRjNY z)Qnr^k)Pa(3mlvvist^LUsc_}7};#Y>Cuu+H`p-*z25xmXPhDYWS6Qr6B5^`4L|~7 zi1?B8g9FiPTvj${pdd5yNZcn{*179^BL^);#~v3;e{5>Gxw&fHXSI#{kr{Kk{*n2x)U6C{J(X-Mpu$+zL-A4!vPmyZkmY*_6!}cGy zJZ?b5x{Z9JaWUNVT7CZ&7d=E5T6geZ<#N#_I}|=>mE4D;v5A-!VKY#T3n|~5%zz75 zPL5&x1uRF#R~4586}3qr#KSY`o2(rFT#wd08EdnVcr6@5^S3ppV-IZE3>Ow@6I+y* zpVf0)_{m~(g=lAtpPA$nd^PfvmNIOiSNT*Ml6%n$|bh|n$w z>~G}v+Xgi^hguDdI;c9~B-zH|-v)*WXVZ$;1FB4WWqomkvy&|lgESOlq8&aVf#9Ft zy=HRfXG-3P_2zhdiuPZ2H5*p06|xKr{H-vR#n5T{J02-!RU@q!MPb9ULlL9ivA?t> zq2y_FA!j8aQ{(L?%y^cAq&?`MpeG%T*F7C_mu`i0P8s8Dax|$w>CMNebEbnI$lZH}H{Vrm7I##!%31N)L5LokK`AZL1_b{k-DO(0mT!3H{g}j|euJk)YSj z84}@-A;t*U2R(wd(}t-!HJ6~J5SHn1fax=eiYLEgM^9Ayimv52Mwr4N%$9~mTb{M|3Dj zg{?2~SQ$fx41bVp(Y9O=KLQ)~`Bzsxe_j_Q$NmpY4(#o_&aXipE3jRQOTP_vAkKIX zi>m23biAKAsYE}pyJQdVE2P2@A<>5Vw&FRPrgzr}b~{1qY%o5l4(Hv0}cl zwp#z4+ly^FMlg5$Usvy}Fk(XpfMPaO$O9ROgU~UD)7aD9EhjQ)J*>`W5xq2ifpMpX z?h|RsRVozCNo_QNq@wcb+@-N%`+8FMlaQ?jz(1rE-aH5wCTw%|i}~6m$J4>yE`Q3nnP0ueuLec zn93JY?Y%G@V8!=_xE`fm24G|@bX9ZSV3RNuD|ZLoIze6wnAlXIUXP`xUiLX8b*Mhp zjjUtgqp|g(H6V;K-I5V4i4;$yak5&d$t%$BE$L+)tL$P}=l{lAue%J?iB0v!%YjQG z;6B(abPaQQ`zjFM`if!z)%0`{E_}mz>fROm4 zH>7!-kw(Y7qtkVe%>7iVtR~lrmpOwC_gT-ALme>89XHw+yYiO=_Ft(mCR}dGzOBVl z%)L|HbrCB+hOn@_&W%cnU}lkQF-efQ+6 z3cO9TOLC6KP{GS5N8UR)en4K{F?Jnp_Pe_9fbbq+RR(L@0KyDKXwAL;kI=7JEnC zDT6|DKdI(1S^O1R3Hs>RZ#?F8rpy%+eLD78v_?Zki(Oj^fc4gYV*Kj=aC*neARO!n znd4$=gvA>L;40IIbUEHRqgP`km~RfaH%hO(=A@B`kIJF6)jr z@UM}V9EAJ=0=Esbs1xh!CUA)L@0i{r_o~_)`8iZw3w^P9lOZMyM5HjvKXo|1j*)qh zcOOLL(1Igzz$%bo-*w@|S*HmRtc(>#o)(Wva^$ELv@uWj9;?;enr0|xO3uG!Y)|Q8J8u~xDU4&fce~`<#kL7;5)`f<94UOzA7CS{z{5J zb2~QHu321fW;-xt`i)(_ebp~>`lC5`tnK0o|YzXn5kZu>ks`oMQLPEV`1lmP=R1NI`&SGgzSNJJ; zI(h0v{V{t67cO@i#(vfvtgN7Iu-~37P7yQ}zXwGo8eh3<2kHPYlIonNels||L{uJ4CCw2WyVB73rjG}n zpbLD*Eol;!r+l8&eK<5XNW6`He$5jI)FN_*7)bPr^i4hOeVQhSFP6WUxDKlyPtNJo z7q4fv7iE7snISx;^p{A};M1Ms$xBa|+zCgRtc8`ZY)!{h&i`4Yn>W0NwyS(Q-OD#j^t|EdeVK{i5 zx8ajAT%!tcN{SipAl#PRzu5DPh%-e#m7FU(x>C2&OAihL5Z_2XbINk>|ATy?gKvDPdpJb4@DUw^v8VaZ3jP7pqYophB4S zZqF6NF4{_IvxPWu9o6<;;W<-i;3(rU*gihh2+VgP1$DnE2a;3`i;%a zU1!4Qk&e%moK)pCd7^pnJCCm0hG1iQWoK7jATid>{)qyZY*CiK3{W2UCC%}hF}UBL z$HajRH0Qt9zM8S*q*x`51hbR&2Z9tQ3EHAT$(1S z5P{;*546^SHjf5nVWQ}aX&>vy;>&-NFl=^q=WQx13t9A!O_ABSK!=lJqf@iqH>7~3 zG6e+=#5JFXEc_D=YXG)uaRgWSx0~!H(r)!CdJ!I6VrZGx!tUWF=hW1N#|B~M&uE>r ztY+GDryk+{&89>jq{3E->0Iq+e~fe(9^5J#G7cl?B#=hNGsf2k7Ka@} zlQI%XUzpiP3g7n^Rf`;IX(3H^tupNSmG6{!3D_8N{)XAwN+8A+g96ipWB1uBx()d} z0j0MU#$xN^DVqif28PVUgS}Br*&7O5CPBHR)M^a-#i?UZ8aIU~t%TJ16uBu%BU#u) zgI8W8#rmw-FHR`W8l+{}b-ye)H-ohRk>+C7c_k--HI>SCjqW>^nupDP%>$MFh z_%_=dLAjM19)SEbtHWpR`tch9ym7^fXx=A^n3xbfN6Amk34(B%PdMdWvn_PbqzLsE z^<%|(=YTZ8fX-o+F=oGz@r`S{!@y&xoc~gmadFw#$aPnBNKDSK){~x6y*>R?Q4G;wwYi)9$_wcj8#+#ZBy^90V`!J|QUR2^#3zvWPM7ETJ$I(<_GO@Ai*KuJH5&9hM&d}C zL+z={WB!0K!IK`VUnKF9S=e^>o}~g8T_7k0jFFwbTJ@hIJg(B_+21!^@5&pKzi5Px zOd(#?+PoLZemNb_@)qRJzo9nDc>QkTEmMdW6M&)vvE1V#sJ}xF!iBiGd0{H^5EOsN z&)B9~UP2B$qg}rk358%SjvAicXG^#QB-NHJ45oW0&UFKI4;tOJ){Ai^i+AxFV{06K zts9IFnLZ~A(3s*$eY$~l$#6rnT~&2N8K?BoHU9glykoIA+ie&n8K_aPlan*_aY)jW zEC87K8sM&z>EjhS4S9NSrlJW<>Tr>b1+#ACm+^66mwKCW{yBSacc)h443Me)fwUF! z0z$lfK1Y2TGl{qyAng5J9@JJnH3z-hlT4T)wu7%HsoLx53PPK=w1Vj&loDWthhP}& zTMcvQb(@iR3{izLq1VF*nw82RV8GRvI|=;G3>tW;!6S;%`pn&P^E`Sr@8U5VhCvNO~`_n&ulx0OI(8Z=e zxpIXqBs`jA=0V@>$i1Lzy@+M_=L7FEoxNt)+Z;zzmg~bSuiQLe;voKRE4Gjk(F_2i z^)ICO;ZNxNr?km`0y$Ug^R%LkXCf0m!ztvqaq*ScKUl)>Si8m~Nd37PWbEZC5M4{1 zY5xS_@}d3WN9e}iKW&yLsQs8w{p}eI*SqY{>}p&@@(67eT6Gr*(29HiRaQg|A)f2{ z30o}PmQ~zqS2NN{)Wt6Ybca@95Lf`BE*B%YZ#?w*hRx@&2n(O1W3LZG6e6i2F4G9F z8>Wn4X*$LNh!Blaz@wka=Ey&I9Nxj*;LMP+sgWH+4(QBk1V+mf1o$fT^u_$K&=2_* zLxm;nKahg4c>1+8d}|tlXiGA`ep)yBq-l{%tSdfJ3F~xvEbC)U3T%_nU?~F+pFweb zz=u1{lZWS0;UGPIR=uaKi5xANBLsvE9ra_7)!nk1R=!cZ zgXLdzMXo{YYf)N4C}c|;+ZrfRz7p1I%et^0WXjbghtva*^Beu!S^>4<#HU-Ap?H%0BRiP9(#~cU&$FUQvkHa2!ZZ_Im>X6;1LSKCax5=Kpd7 z*;bcnhsHu%ge^pFkUb%hm{zq$f@M%v`wfhYKk`H(rOaqEZF^VuA7?Pwk@*WjLPQf9 z6w~W|Ejc<7=$ z9l7>Cq6_g9gTAq$_qRxqs7>)2&9MLBSjg)3P$NFORw0R*)_?)XpY;b41&TTXb(!^U z^_#ru7K#9J@LGKa$MyJ;Xc`Nws!{X_QVMrIIHhv~?m+Hz?r#B{d>Aag)?~-wE?Bn1 zroMCNR#+W5TV)gqL`xlpp{qyi6Rq4fdnp4A@>-& zEB$@>^OO^9O&p-{@S)`y?2X;u+bK|0Lllg2Jm-lhOd|Gd0VK1Z!GX#R)}6Kt^@c3X zPHWv{f?+|_%!7w}@&mk7;3xQKc&jJoBs*VMv z183C&1&)tY>kM%vBrs*%Y2aS7On_D0`4u&4LkW;B&gs{YHKGSjt0%gD3@P)yTfLiR z-cEm&wpr?XOz#u+VFc}IS~?AkS;h5ANLZVq-g&Y&!u-soZfm3?zk_3B zI*V)HOdIIzSU(0gY8eVZFeqD!o8l;LJ#g%nHJdh8#^9$DB!ur+>>{46#ojWt*B!W) zFakVr{U(LY?7{wAI!4T?rd8IhAFL;~KVbjQ!o5jk3)1rzG4jnT&8siB^3#zEYg-n8 zbQJUbWMS#L848jwA+gYa?_!=oIpZBv(q)`p)+r1^jNdI({B;l8IDE@8UldHxm_nBWY_Vq#oc1&vEM7)1M_$o9Gjo@2bN$AB-l_X9zx zK7#e14z7lG5enUP@`lZCvK0q^0!%pDfgrp6Mv+noQvmPC^38pVBQe(n7gnGl4F1EA z9$BvFcrl_11KRYod^G|%NLYVL2Y4|+FBft+$S6tPA|<3&Vz*GFZb1;T2Djm|C^1dK z!;O7hun#lJbnnUaWHGlyy*|6fH|T}P@Y%%ZG#DM5R3So}qIpd(3t!FKD&|-CG-W(1 zb)&eg`0zZMxZ-2`G^B-W<3K~0Oj!Y#09)tG!I!w9 zB5gQZ7)SE5%6(5St`ytM-2jBnVtPEZV3L5lrwn&<_0#C72ak zxtsFa%9A>OST}AX+8)WC?Q!Q@T4TcSVF;Fg41lJH~q3j)e4uS>Xhvm2)eoK&X5wQ%@A#LBP3dS zf{bG=*PHb|`wWWgi;9xj6_@XQZJqHpPU%Md%Stj(4l~%BKjEqaa8d}`%VPE;I5WK8 zb;+oUy$^d9UA&bKTJh3kzF1GEucBX-clI`QCPpEFYIS!kh^K_~ns$gxuFOJt>@E{f zs8XzsEBF|x%#aJ9%H^(G0mXU|1GnGYokJNS|u6+&-X}MRkJZP6gO1Ro+jRO|4>OkeW1#ty#IF zb_<^iW`4tSd4xJ9wYFEXWJ!v?@Hd&5wZyQTznPp?F?*#x-bG|?!f%gp+a7S0f5w*h?PLtP5xd(> zRftAew%#I*7kz@ygH34K;OxS@rRo1#u=K{~eA`Q3^Mnr6pW4_UmiG|+d$Idk)*dnr z;S9Yj^;#nX7@?fs@jfNhS1inM1d`#BGM-G*eI*Q@ zT`hYK`b8d<_WJET!arLAl(#p?Q04!YR&Z)sT4#LVTPF;Bea>YcCiW=N6*R@G**32S$5BV`GfxtpL`5{U7?ZHh6Bsw6hv`-VG8w2x?m$Mv3Avp_HS- zMwfxIkG%XyOQz%}KQt$$8pY50*>pN_X-Nr8YVgYj5zMcr!X3BJO#P?q8SCd{opFDLz~~{Sf^rSCm|tA_Ku0W?%V6;2F+}7EkVTx zHiIkLId*xY)oLho;fG&GKE)>;g94LN`}M0yvBX7WgYhRG98bXizjRw zPYFidsNJ0Z4)*{XPxPfv=)$Gp9n-m6Zf^i8j^Ru$t)JB7bVOR=3#afeM~nAba!=E7 zo5S2N3e;ntLV31L5^sx@*{CCl(CP99XFU3xEai`dKdgdwZ$e0XaeWvYDNDu~zK2vL z-^slR-{()pjxo-?8eIQNhjnDVv~z;ALA9!1Eqo9|Ts_w59Y+qmOr1dj)$C;9B-H`a zh*Xq{gP*?-dmx8@594e47c{fONzYjo2M`^92uOLZ2e&y;SqdZUfH_v*v?S~`Lq3g>L=ymVvYiO3nt-0gJiXudhq?ws2*xIq)Vpy z_Z_D@ebajThV^?ku}$E0`>WIN5W5HnP<vWGi-t+N7winm`} zxBsR)!vB!QAkk1O)ng6^P)VdxFDt=!gfUj8-U96u=(p!PPtt}kwL*0$i#Y%b-F&}Z zrz?;A%PLHO+hc}J+j#30F~l6c8bo_&+F|Ugduz7CLd_+@y#W3Wnq=D;v^tZjm06co z%`Xn{CBJGf>kk97E|Yv>SCo&$xoG(D*929k#jMjOqB>R-hqN-h6K!gx;UB(Y_u3Hy z^9{84p{W~KKAze1W|t8mC%*vKwYX{*{lt_uQ3&yr&SE2#gFz+-LH?xA7rGw3MI=(t z%E8ElMBe$KgDVXvy-S~tHY+d8KdworOxM5gUCo;BXPWMEs;b1&nzM86?E4eSZpcNk z>Go6oX}|wUz&I{P3YerU4Rs5?6L-3Ci+qx@Va_$0YcY@wv1a9!-iFx8EGC^3ZxZ!NPw(OT4F(9RAT!=x%oBgyn|GL zkaFz@vbZ3VDYGtGtX@iOgtEF7=Mvt2qY+&_!vovNa^fN28uo@t({eiOM?`{!(}#?+ z$-%nPmpRfow7nF39nlWxh_s0jH}Xa$a{K;1bN%_l3chb90gWjVH;CV7cvVs~(4w@7 z?lW{sN#)|8w-9xLO3$mT_YFE0sPyZIHR#GX$r>ggOTsrfr&tA1OW;if zbRDz%uE8zz`nyuYcLmte{{1rGbWD%_H=bTPmg@`c1&Y)6rok|?!Zo|2K{O7AQw@Yy zTOq4W0%*qgL_eN_>|5*H3C3(x4mfA1)jCi|;Hi-GB1;0XUIYKZY9?p5P^R^rQH31| zLES?6q6B4meVzhNQeU|2Jm~W`s89I^PCUf0-RvJ%$!l)C?&VA(+NtIj0Hohm@e4?rQ?(D(tY*x!CDfg&_h9k8)7fBmzU4${mh*buq~@yo$YgDe|| zYlv|i$IcJ9I;t>Oe+(dPwa!Fv1!W@;d9HY3#@Q%-?QS`jKo`DAsp&9173G4?P#UAo zmwj2P@@^8_d1?w1J@42+rU}5TKQG~Byv}n&uM_;owmFKM{Z%uOhZIf=s+pqS=e}bf zn+2OJmk08W>$qtJ=-=T8I}S;Xfbu zt!@AifN3XpckRs}{U&9VE&om79T?{1@@lS4=T3iG$DxJBGB$>ZLFL|1cQQA4lpubZ z@}~v$h|npZtdT$aLRxCj_JzBJ*0*0!%-k$_$8gt_IY&SzhmAf3RYnC$D_Oxb=8eeP+9^)eitH%t-JUhLH{G|+?EI{j3?1BP#r%#@7j3erB(CMql+)d1*KCf{%-ZSuE$s zR_1jhtm0~1z4?SmZDyg-Q%FRo4S$W+2^i>_M1@`5{GCpk88+Dh=#53>+uGv7gU^R@ zPw_83drBH90ZB>i+hoe5M4njM3#Oo;e$N&#$nlBtc$;pEfvau1u*Oq)8*ZQrit?E> zE%>K)G>uCqcuiek@C>+x1h*k*^b8ti6Sd-{tP$2DWQ0XQ9e4_9KdPwmfM-+U$fB|@ zI+aps-?bg*;TP6ms3P zwF<8kW6zk+5lgs~HEmM>=RqPMDOGb! z*mA+oC`n_N4`4^^GawI)NZBT^m} zp2HPN3K9FXRY41p`#cVawEOYUv`i8i-fwduF3TDJIzn8T{s92S->SLhV)RT!^`l-? z9qJMxVD4+ja>My7;n=_qHG1En@N;fPOtwb(JHLXN&d{d2HN}8g7`fE4a87hOpZdG} zYNkY{_y~7Fw-^vyg{PJcqbQ%D?k+wF?f(*c#mOy?PQOMu$0b; z930=Kl0{U5Lm8gjYEDLtFQ;0{9C@3iSTOhZ;I&eGBx+s#Ky(>#?RWd7ysCHq1?wCv zUjubKj-sy;oyqebN5}Bia%wAz;~q4{xZ>4l+J8QUMfPXyr?I4Mx6|~&pT@S6D4V|` zg^$5dKmoAQTB8yB#B*n*hK^i;`T?5n*RKwkPzmjXs8|b*?2LLST-NfACo$#4gR+s` zPCvz)Y?D0rLLuXnW;}}il&Gyd1?r5?Av3Fz&_fk~T6|*Q>v%`0v7s%L zrK+ILRe-8M;}7Q+;M}9#5P6ZA;77Y!8}zPZmNebJ{Vi;K5oh90ai2E9#OlEq z?5MHUity(#U)z!o*3&7#9eve*H#bcA2GB0G=RMNu9LRN9=<{1&O+p;QoA8b4`Be=rP7n`!))ufU{G;ZGrcB?j1B=y^9h-;ZTV_wau* zG4E!VxcH!cra1ZAH7Bh4!Mn%Rv&$VO#$gw|(vIg_It701b(Yt-ZyF zp=WG387oQn^YoB%INnHIvG{R7H1Gn#-V?1C{0wt$8!UT5Q~J(O;K#82L@L{S6eLUX zQG?yYMwvypo5$@#-g+~GKI_{U3}C6D|L;jcWtpKe)KKf77ZX*Qk*nr&zycz3DE9F# zsD}Fq(c&y}1lvNdvmbJa-X!sJJ88uF>cdir-Yw@)JJ5)AcukGe z1hb1{O^P@5s(ldMN-gGvOITvGikD!BSaIZZ_&!S*(_lV10I&Jf5>?B&~dF z>%jHLmB))+#e zRv~wk3`dzJDhe*6W9%*7Y3rEg`BCQ?NgB9Cilb4}WOscCF+i#9h?n{C4Dkv-8@HiA zx$D@29oFB;8W!;@*wL_VH6IrS!PpORkWAz1O04f9uBKc^x*iqI0ssjx9T$3}l}u~d zm0POdrDM6nJ50npM9Kr&d9?+ zZ$lO5Jn99albmP5LWP>x5rfS$A?d`UF)&VF`}uc0y*CIvCHNzupr4iM{*(6Dp~OC+ zI})9SGX425yn_RX8Bk*=d*<>UeKkU?Fw_J|wCV^>{R%kpFi$@?iFR`HNe*<+X$y|n z=F$f|7RlBWY#(@?HMxS1%n{q^(?$tyfvLaMD~btanO`h3kE*6;$izy+bNvp?2%5*c z7hj?8u{^fL zW5}%8o$L=ZIxFBdO&8dx$v{Zdw5}Xt<#L>P?oY_JlS&0+fpTBc!8B-A`Dw8b?g*FW z*_6LuEX`zFwmlCizg!2bO!)yU$5Gm{WA&fSHZCqSiDu5572;(4SJM=W+n7xS;s3r7 z2z_!$hI;$!0fY#@q-X`6*gH`HoA*KFnwl_8$|OZy4%H3aSpKd-3ztTv>JF|SbXqAe z4nagv-}*7QCzZcMMYST$#P~yUnT=k$uKMcELV=vq?dLA?+ zBo84;z)crKcUaVZs?Qlx7>aM>6TAM z?JnOrRJz}pSw9`z`pcZ(;`d^0g^{r(9;m7%b}3FjG~ugYTi2w3?YI4cjPmS6Nc#`D z>aaMbEjf!=g1^gEu6-;${>3aYb*=a)haRADnJnU`IL&x2ut*@NDdMu;Y!MirT$y{0 zVvpG$K>hJ-afOz)e&wNi5%05~%Ifcb|CT=+`yf9#@Pr$}^70ae2Oaq@K8f24C}4jv z>bnk|VZW`N67TWu>3rFql>p+zPCp!e!N7zJCb_#$iq|s*q+r!j-$J=)t@(syXsL zi>SOqY=67zCBY&ECv6s9B=^4~F{YRuif+1ws!pmJY>a=l_as_IA!fdXYD7HF?ABn{ zBM193GTKV;pwK6=|1PplGVZ&i-Jzm=J_(bVolA|1?)##I<(Tc;9 zwQ|1WnlH4CU(UI>0)9>Z_93o8)jf%k12m)q4PPmfWC&wYRj+dZj3V}JiaxAS27GkG zZuLN3)ghceDVqlvv*@O&U4NH(trc;3>z<9rsxj5bx5%X-xEvDa!)RehSHjOJRa0o@6v z#rzUnG+{N(a*NXgwpmLH?i%%Thl=<Hvx2ewB=lgGNtH~WK-;0Wzo-@=b5AakxO;9SS!H?Pni8;hD~-RQGjZ6# zjaNyU5ADk}59U0DDe=-4L=(OJ8l$u+F~AdtV~sSu>Pson%;tEP3Cq~y>_Y8ubY;Eb z|ER#ic*MD$LhUXz=2pAkOj`q~%1{_MBd|>br*e<@1_9;%*gpT4V&A917rBX%v3p5=h)WW#z%v7S zeZJ4*y10~_0QGw(%uJ5K@z2+|=7XHzpR-~WfkSR`jg_dO$2vJbbWJCmTcfRs9G3@7 z+!k?zqwm=wt!qQN%AQ?>gr(fwK&(oy6P8xzx8i`GM~3xo63YVs+t(S}VM{)_uAth7 zmu>)5>?^KDzhMTMwU`HWMTKRKS%DbO4{Rk6dh*a(G5no#;lFxtkoKl2Qqv+G*0xCk zd2Zcs7T-i`GCdzmDeKVdUa1WLnG78HmZ#>_lirWWpScjzm`aQ4=C@HlRBL7&oP8-w zjD%G|Q!1fgH4NqfI=Pe_tX=s6n@0(zegOoT2w5c;wecRF$hInZqSGi8TpfiJXnZ}K z-)Ynmto%AD-tZtN)0j=|OHfqkm4Sqyo6JP2uz&+tER&7b$lScR%Dj-xMi2J|Z+LRO z+2+PrH#;MnDJxfME|d4q^54EbG49r=LP}d)s<|4I!IRiZ9=KyNOuXz9ixs%qF6%p8clivY=7fsmayx%f_awIpqgfy~drHcraK>v7GDIp< z0>nKE3o4S6b==OIH^b`W#fdjU=L8pOV`}vYjPl)0+h8aOto;O5&Lv&IcoB}4)afrV zIGT-TfnV(aH9Bqe!84DS5%h&3`UL8|nnTrzMEn!zR~h28CM}UFiP2Sdu2=U#(e1cqG&I&s*DiCQ0p^1g=}28(ImB znUW5&5#bZ0GeZGFwswa`&wS^{t4HbL)%Kq}xFTY}2+eFafj{j5L$nv3&7! z54vRjSC2anzg+;tn+e6pP0$o}5Ot|j3=2x?sQ+mQML%u0ej!yJDC-xSv$Cbb9>2cC%=sJ;$3#?xV%3eBX64mo^bILY=r1nR~62u6xikS1dhY3VeJci!96z>KnTbq0e zUlJ&{gjRevNi0rU3!HG6kY$UaLcuz%gB}~O5#d)@Wu7SGrKZ22A1T$o1rwbS$P<4* z1s&dc^1hDpFcW`n1oQJPuSoL?%Gar^Nwe76xXxOyG?dq(J-7N48IOx=BL+?tmMnT8 zDMr|1ClgxVAjAEQd_2`PuBn<)CL&L?3_4=_(%Yy-v_Qc)p0 za|uRD#^7>^c(e=3!{-u*otzlmwN{6o-SNaU}&0J7Byr*mtHgln(xZ9*Y$C(bhh&2g-?L8f$}yaaX)y8Ze+ywP8}}K{SC- zHyFd|K!Fl{Ey}pj{;&Q-Ly5!FZneuofw`rwPa6;N+weq-J9>*fp6FFy==iRt=C!XW zz1oFK!#ZQg+05v4_UpUolE#3g8THYLrut6wK6Ha^uwzAj30xS9Md?e4=Y#;*?%oll~OBmZAIq^sxoQk6Uu!f?kR!-j#>Xe&D^0Paps)Y$1Oj8R zDE*uRgqq%Xq%@X<>^_BQ-~!cVhz@C?(UDEviF$o>HJvYgfADYvwmxIDD8rf( zBJr{|u;dG+zV~YiChR@e;c`^@DfP9`xvizNNse%jbYObwf0PHo(_^!TNnbr#P@FyK zoPix1<*ykt*)A+cU+AN-2>Qx{63E+xu`(MBEiS_w@$z&dty{H#79poiVbD)Z7IMrl zh;IgI95%UMk3Oq?a;FLwrM9*-Y6TY-2LrJ@$9|@}CEQu42Qg$z!S6RVd$P5taqn}2 z>y|=9rAXQze=H4ZICu&JYe+lwX4wu4}C!=z1CgjXz~`)B#5x*ir~`Fy>!7| zd7J-XUu#FqPm%?GVD;ZsiuHnQT4V~12l6=utf4n(?aVVwrO+?XPx8^|%IsBk67t?^ zT|f9|x)iuVkd^_S&X7Z0Km1f1qbjZY2=P)?r}fyY`>e6ZERqi}IANSXY0@m#Q9}Efn6)aeMPCc# z_^hKL9-}pbm)?Wa2_(Y0_-(*9YX3a-&!VxQt2Z8gSO>5jfv;w%_4=4MIR`eCaG5w*61uhPFt?@nAxoU`1h|lL_t>b!4KAtrihDAQZwO4HP*-@; z;_86dzR4Z>c9olQjO4PfSwrqAas3l%^ouI#&{iqIv5DWcZ3TY0kEtmeD@d~^YXC}+ zwrxCqXY^kmyu3a*$xn*G$y5c*_jy5ce^>kY77EkT34Ftxp3`)^1+LR(J*C&)i{QJp zLoSnIr_d2B35KVafX$)vY;LCUl~)23CjM91!G3QAl;o^VoFM!M(`hM!M^ecbD`cPY zbE{#Ma@%M?HIpa}Z8t_>g-{z5g&q?Q+wf!6eeYdd!C=SiYzDuSL%EEXdMu!`fAe`1 zuu;#c`ryX55CSa6d9zrFulz+a)snRluwyg&NC7V>gw1cHC{u~1qPNMo$}i&V{pOR4 zUoGi6f&`PcK$FIajz-D>wcQt=(1ho)Y4Z^UA z!!G{!e@<-5yJ+fG)iB;*@(8Mmy8bdZKT4PK)u8cV9spLTT0-ap zQQFGV0cg94ozGQvZq+N+i*Dco4#w?bBD*%Q2;p*Ua(;g9Bi#>n%i@hR8)Q-?iC(k{RQmA@C`gIf zvEovAv=cJwsQFX>V&)QCz|m-V)v2+V0yvH_e_v3l`>Q=*9Di_q>15w zF|+`P<*s{v7KH8jV8u4_vCR_di=ato7u*#h7^F-;-e4#&e~GG&-Xk(ifiS#yjX0<@ zA_N`g9D;?&NA$kI0P7d)ER}~{X}LQ+8d6QzOXu;zQ$=W)BWuzjotJP+L2L_MJ}cWl zvo4VR#?cqy=_t6lIe@^C;z>9XPH`(s_aQVs8s{e)RWq_N(D+b74?wPf_abhz+G<-~ zy4WBPisZdDf7#9L;R6G+L?x2)vN~I5jjt|B+ubH30w7?tCTV}o_fm+PnN{F<0~Bl` z=T_ruZj~y6veNIQ1_~w6m9?utWmqI*y(7iQR=~duHT_3BxwA{@oJqMAg^ti@UIT|* z!vQW)R4;Xs629y%geZ@EcuHAiH8F=oPtFLO>C&3s~} z388yOyYm7X#Zfi^40*81(jaD3f_|2;Q$tfux6{Tf@ogVjUY2JY5-6z+v?UvsJy?f3;nk#AaC}g*I+M=(SU};)ZLB_KRHP zFYDL-NEG3?A;Q!1pI$jlYqm?PY@I_fYY0dJSO9xY^RfJ6N^a!BhA!yOxjY^H!R|mZ zO=E*SoHfDQL}Tz?=dxnji3k3z{vIvdy#~@w_L>iAj}gApqM!1sez}~JMkFR)ffy@R zf205(&ay8>we1O=Syv!*pwliRBQ(|7u)ga7d`qjFwMn$?zS#088^${uS4R7o#$^N= zY=dYc^At&6FNk?rQlOkK2iXMp`&M8nAhjTmF@c8D8wY$k&HHpDIMz#xraO1Bf(wAHpWBC z4liUmsn#j5Z23-hfo3e0?AC{tV}2l8Cq1d6*BQsGkL%6d&gnoILp|~%OxIp1hDH$z zd((HD4x^GnlbD8{kbuRlX2V&i-l6vRZf9Ec6Tj3DXkCsilb@nZ{Iu>oI%7K=e>2{H zSI5%tyt`}%>;Im~=X?~onSf#jI?)sQAKgx^{dQSL``6a&X5Nudw^)BVmrfer%;ahY za?d+rG&Jp1Q2j*|F6L=L0<4;{lIXF%zsqVmT_os{mRkz^@6Ep~3sp`E3~+m414?1v z&19Thz{}juMm-iJqO!DV$#osMfB79>jC*=WU-ZNyRtb+PUkR?DkYAjoabN2fyLhNp zjYkdsosx*Ci{m!r17*{cEVY${fzo3%c+jBc1Y=u|B7t{mV_N^FLC; zf<|tSeO=egQM3J@8y|Q`!p8MB3qux!yST#2jZV0G^s6m(L~MslTKV4qx{-^CYWO%_(OeDE%{K+2W9bk^fWM}+aKVh>-KVcRo z-m}EAKsR~LUx^~Js{PFF?_`Ru#lTEuyTY}uVi5(zc!T*~egNC>d3nK>Oyg!o;R zCt_V3u=a=KCep7v_)-{OB4Ih>y=IYdf#N-z^f{trtD=5WWXqVEFX4J}l=X1n0h5s8 zf6|x*Mw~JofQEaCv$alix8Ri}wvEGIq&j5*kL!FI15A>W9hk@)v`>W?;)Z^G6fuhk z35U8UhpSAaf1{{L8#&$-6USstbdiR~K2_>ytTa4r6^^xP0yZ5)d|Roj3Bg6@Y=J$a zRCQ64%onP=4QLut`sMk`ldg0+!J%;}Grr_7^i-ZJlbXG{SD}&8xw`~+G!F0(uZ}7g zcvp|`-iA*=n4_)(+6))h&$r|&lo(}aQrT~rQ4y(4f3Q_`_G2FEAHD-byWy*)OfF}a zA4G)hSl$S@fCB1WDXI=~Y5>ES&*D_!T4373f0%bm9FG(B#3>B!z&;5e?oDMS^ax~9 zn&b|wh+_^shSgUhdk^^A4(Idx!T*x>NoZ}^wV)xI-B@nXsGgEl!63W%MV~Q@>xN>t zu@50_fA*Y(L+cc5hXzT>iv2o2qf30|nVB_>v(o@IQy)0jX9&rdP0Vc59J?rvq*ubn zy_jekUCM}Ffe1ccNCJH^a-UTqQF|po7n(TQz|P=Vw&-byvpWnX-`TEBl!9iD4x3dB zT0G>qIY>dS=xn(=$cY1p%cvW4G`8n$9wmdRe-=FDK>uEr4$a=~iFf^095wkQDuE0k z@1p&7cL@8`es~v!%UCE$2{b8c7f9LSdXIpbFSFCvtUhV+$xE3(@SyC>F&GQ%xUJ(x ze1Wd(d(8A0k{3t9TOZkC`}j@hnlFCr^PY%885Ds7BIwF(v=E@jVNblc9V7eb2K*l? zf7Ep_t$<79JZ(|a1@TrPzZl)aoWpYsN89hc58U%%+oC0d8u4a)$M{YPY)Y zx7nC^3fH_yly28lsbXadUBXmEJVds`O}^r_0eGuTlp`uaLrRRf20tn z0Ps>1K1?*#&f{PUpz`EH9c`{y7jlHS{mZnIqK*^is;(i5P}7Gv@fyC1wFR4%T6%~P zfU+RVp!Lk^4x)SpSFT;mD)3tH+;u5bJVabM9gFs$If2zup>l5JlGvn{?j7k8 zQOpUKOF(XG3uvY!Wzf9aE;ai|l)*gch{tAQXSogzKLLA8xOO&=?6*@3D% zw#iMLfv@pHB zv)nFks%wE|03f2fRra1jxE<9k(bd(({A!lTqbe-JZTF%O87^%89dXmbe_QIUIwC;< zcz8DFEoJ6Wb)md4<;!af26;2fc!Q0qV6L(dzwCF3K~BD7y6ygTd74Ko6(sSG$ENbW zqUmZWwN8rLBGwS&rR-vfD-~Q`*?QR}zzZ@vTop8q>I;NSA!M`pe?uvDST?^aauX+(=C{_;0T$*R(n7{N%TO)lF4oG|0Pzb? zd~6xn;*GXkOr$3k6u3c;*m1a-4ig}3VEix|um)~x+6SWOM+l&u{FrKCRoo!>sWc_L zbFF%#uF(jKyuo$$9a1rB%%9No18`WGqK{tSMwQ}X2wY5K&q3D5f3V`EEc1u$t;5y@ zrZ}b8`}6c?P+wd$^=(H`ScwKNGzb( z3+9|})?MV*5_@vkj0KqNY}xb3nOXAQfSbB5$x!-8M@jXw9vO!(P5#BGTnji>IsrdW z5ZNHoDkuxF^qB(8f8i!DCNj(OBwY~Rjq*^4Gh`Tx`1)Gzyz zX>c(VC?6Xh8ofo_WRtU%f|Su%_O<9!Z+M2$mRg8v;Ibi|CHmj8Al0PTnmecMrNT$? zepPD8>V{lzGb&vp&8Lgm%vI%(r1KUYaiw%Kv#x1v;b0n+e+~H&zN|x_g6ANmfC>sA zg8I<;+2T30mAgB=9P|hlSx#^2^>-a0@flL&>P$Y=9)%LR_-V+2p{=J@*&u*lFxD%!-zLo%XoBJE@a*w&FomDc!`DT~{V+?sYD9ug(n!ztw+b8S8AtlaWq2IseIH>J4PQ>~6tS_$n9e60O&# z;XuvOP{>b$Ip}-Nb<34j3k@#PwOWLjW<$Nw9?^-xfx=Bzjt!v4`Ng1Evi#CsP#vV| zWnPG+f6Cxerf-uwerKmhe1ZPmxKyhWLvcK5wJzMY(|0p7)sb%IOJB*da@!<<*H@6F zl7Bhdq0__X6|?P>0`&?tHn`sZ&s4im9MQgz@0gwHqH7n%C}-O}zYFO(R{$P*iy8Vd z<$?%7XjjKXYsQ)B#d}}j-MmLYCsOx7^gf64P-tDS54gl+jo;O$K8nRwKUQ_QVZ zG}WY>x;XHq`muUM<*uJ!!fN2_=w{>4`(I7sCO+gd|tYgfcynd`o`n(5hVzInsj$3cln_8l;%Dk-3RasrH zf8E8D{Q)@&jwDpJLr82c+DRiRjlGnk=3ro*y{lRk=c9yQT52gB-01=3&p}9JB|e~? zne2ac|GMP*({xYcqUcT#=6k~g2%XHfu(9@;NO>>+gD7ad{q%wX>_+P^b@5;vwG3@O z#zHIPK=l89FNyrr;KOh2Sht+B*-JDpf1Rn#2(`k;&P6bb2Cypv1xB_d``=K#O!Q)} zx@UK@_#$lYjVjUL2p9=v2YK^pC>WvImU7n&xY)8TbX7)ggQI?LP~&&8jC~d%Dr{n;pgid;7d~$P;afVVuGX@P zI=&K*Ec?QX@epwqpz2NAR)5eDPL%REp;TV-jQ4)c`PyHyxo5WEiI)Qvf9KEBye*c| z%PECHSqJp48+ zxziOf^jE&ote?DUYAxCVe@mQ0F1L_Ue<`d?Ey_vRHviU$qKP{8KhVQG>M~MM=E|Wl z;cW}FktUo@-S8r!R?CYRM6&J9{H4f=vB@tKY)={z%YEyfaBr)!`ZAhki+6o)=9h_V z(^|bCLm?5Vw+9zcR}U1}rDb_(MdkiW+6sEx^9NGVk_jvkOon92f1EV4E(vDLx}I}t zrrcn`qaHHfm^Tvr&HdyO(iN|+{3ctQH>I)2g-R7$1cVd6ht{Ap^yc(uw{5bn4-N*D zTxf<6MxBSurX#1L&;ue9+_JGeKhTW(z^t@eiSM6Cl~(aOrQtm2>;+&9qO(K%nqeHA z!AvJ|sT4>9MNGkc1S5IwYBQ`yvY0s=2ER3JON187s&48hMeC@fGV{`y^c1&U% zyIjjENJ%s9M0zfv=Ki8uw>Xuq=00p<`u(}}aiK&WhR?E9e`}AlEHIobt22yFr(!Z1 z`_Tm>a;B8Dd`B3PY+gk^-1_eSK1{Ky&D_OY%4+6xDbty>kzPZ8_p;c!6T^6P_+z>*p04?d5#tZ8Q z!3k_3+QhA!e^}aNY5*plbh$9V>MB|;{t@)&tmJHjRr?LCD$AJ8krsBCx$wLShY+1o z#$+2CHg0rD3POro&oW9)@JMPfXylMXSEQ^iC)BP}7_=Cg0Y`OXk;^({8R4!= z0qZNRdl_%QXpn+u_pr)G+^{}XCKtN94@yaPfD%Cpf8+{Ti|-N#IRulEKi=ccK5y9| zp+fyJEq+`ln$ny%TLnA<`~0Rr(+XZp#khCZN6zHit-xMUpuNs!v3RQ#vAn<~^PJSd zNv9w`45Mr$g;N+Hs44qxvI--Yn(UH0{Z>z@;f$)wtJ>3nON*uShZgDnayGe zvoTAYf1seup(HK4IzQ2uge88qK9@&XC%X?w+*$hdm!T6i5)+|l&AXHD%X6bwTZBgT z_J3e|YtdI`n+`W%W=*Eo!f47B2)&6lhunvGeQMs=J2d6v`O`M=vlzdn&UWLypiV}J zwr}mu3cYD*OBFCj+aw8%uR znY47jismN$^(~xmX|iM-wK>}g{5Wb|9E-?%FN9PZdQY1B|G83Yauy4h=BeCP=4)XT z=s(+WG90(qP>BlGMX~$hK38U|Rm;Zq{TVdkNo_~`M3bZg*w3fDzR0+5Oo3NPo#^@p zf2b0?zK-btM`X*R-WX>@1s)kBP`tM4;B{YmZrwa9PpD@-iMc|=4SurVp(E?-5QFSJ zrk@)niEOQShx)4{=N9P|5qzz0YK@kVe^ib> zU7|9SB97fcrDSEn0#W5EK4~UHc|>u>fqhrx){UBhg}=Nf3t@lQ)36k}1N`(fP`vNJ zTq8nmI+9e}eJwk&s8fe&WCE6u~qZ4>GkxcMoLh{ci6T@#rX2 zspLhVz9)Ph_BQ>Ds-hIPl(JlO)s9T1MShtHC&@#Hk>AwirKunZE&7zFe}d*e4l-A zDkDuNY|WaEE>P&JfSQ^9F7@AA#xe2d zb67aUkD$cd=w4iAk7Cz-bBj`{mI*3pq^>pO12SanO&pov8;DJkAm1|5^BnVj1R!#I zKz-sfdP3Fk$Y3T zG)@+Y9lf3Wiiu5^ywuEjJKvnha1*vFR(xS zfiPbv`LZZ`kIn@xlCc{}E@+?l- zy(?K71qB`qp*VJifB6e0@nqFbb;*%tfi1s~Rpjo#V}!Z7_2id{^ysd7*)m~A&q^2L zx!XUbW|O@~egUEUfCR|_6?DB+mp$k71pThw@fir@PLYl)?A*NbCIKfKj~4u9-#7gQ z1}60fS`r1=)jH$w>(+$vbP)e5+yPj)k;oj)_9E)hEtE%>e~MfnuzRrR(4~=8lEK7< zQ$w4yDv_H?@K=#Lx_;WjF$T8+6{f7~BWQWtH;03N1u{>;uq_!Ab9GN%rm7I&$Xv&Rq^Pz&n`{Kat53X zK43@wUztFY`ri;!(7+YgbmKJej`cDp?qUti0bp}zf3p-gQ_2%4&;I2VeB(4v$GQmk z+9%wu**NIMz1QUmX#_`l`Z(9z(rNBlkg%||;ov$Sm|UgmW|{*- zZYPVVKK|FIQloNi^9oZYc9=iqSe_)V2SH5D74{s%`V0jQI*&0)pDt*+o zk$#rE3QZJ#oCqh5cX7JA#K+LV&Lm&;tK1WJY;P=)#otPR@r`@Tt4_B6>R?{Y!wE3! ze@Q2fp?bW1k*XdGV1I1E6slsIN-At&Qz2WU)~i2&q{znq>sHT)SG*SI6kwhVIAX?s ze^1bc0&h&H1WRkNtr9wn5!C`#D0$s0^LldlNG%%;?bWr_pqRv3NZnW(CYO(pWR;c` z@~?B9oJ1H$vXo@Mg2l&$utuJcxD6x#&?&rr0ZDNv9H1b)ha2+VIu9 zE`zEdMtZ-YRZBE1Y@j(2KGg+uh^m03e|*;}??fM<4pBf5+Ljm zb}~ij1C0L+@d~xGYVqjvy>ZZIX@%Y`10_0{KQx(&un2fr`03)rqHzfv#K40%jd4yO zgYTx`MI~#&^-!gPP~85JQwwCC^2fqWa6Cumlo`Rm1?7(*+N-X^)kmUUdK6E5e^uu) z$@_vVwu>|_=~?6kQ#1aj-dBKIGkS?b7PXvu@!l~ zfsCAMkmsfql#FgdR)Rsxg-7|-fAIX_f?n0ZF!AGt6bkERF&bsp7c_tLi=XHW%(Hr* z7eqE^d(^_2=a5z^R*y~HzuOT`52t&ydyYj#^kT0q= z`cTVW#LtN%wp`3FKAQo=e@@%77UI^9W3lkACuLe_8#f-iIpbtwjt8;8s6^A~6pc%) z6*a0Q&`#uBrF8Ur7Mj5yT~mq2B|e*v0ps8u+19^2N*8!tiZkGzTCE z?c4n8hJTg-CEoX?Q#B9BC3sFRIr|Ys(? zO%Tr}Wm1c9fD+Ix&M&(3Y76dUmuG)Q;_b(wuZfh~&GIufRg5e}E!|L803~0!34hI2 zx0IHa-ZfW#b6OP?zRIt$?xg}k;uP>C+&EwW1Jd)j41+XO(Q6Gp?37LN*}~_u$t=k9CX(9v+1<#><}1+x>2-IR$ar{A;l& znay8rIq%o#hI1`oJLd(#WI&7T_X7()9{I9B?$U;w^wkI2_NMWM2%V~O>J_qa!Akgm zcZA4EUoD{}f4`1On(yp~%CX|`m_cybIqSSNPVVtcM_4tnTE{}vcrM=<87R6Q+}=yf z>6EuVsPcT&WBf{GkA~_OOrzWj&Q+G$tpy&1q4Ji2j@iKxFf&d$j;Q3j!iKciXHGbeM`-@o&qA60pnVbb&q> zOER)uf0uPM!O{%0^R8JOUfzCkt)hDY}>!YR^%ZtOsYD)`UU z)gjp@gSN6!_S(g)9`j%z+`w|DtVc5H&ZeZd{`{_(IA$AqkKkV`{0z7#zL#_gdDT3| z0(FsK2vO{xh9ep#@Yj*=n1dEPRl`tgykHKve;c*GwL6J<4W?5Khh^L{T~$;Qm2W#{ zE)W>7zwah)(Y?-nCbGA)jkBqi_xYED+=vP~^lg>ly${s%VNhbgvWo;yGxB9!V|i90 z!@7KZjNoY~WMdi-E-%hsTwURK_1e@nQ1y!iTh+dEKtcC~zO}hBt02f*h{}U+rU5lO zf02=AY#*6e6agdHSXA49V~2=An)?D$y%vX(^1rZ;gKd6H>F!Bwp-)g z#c7i>-5ms&ubBREgF*LwCs`IeH3-M7o1f`1wU*7A$%D6WgL%j99Rg*l|Wi4MHg>oL4P;_D`G8#+y_pL+eK139>>vx`vme>}85T%p3ZE&d3XA!|_ zV{c5O@L`U5Fmy36A^-`w3gWk3VndCl#F(`9_j0>EcL@m}3fyJ)(L6PkS3>vZ-su0izvh<->G^Gl@7k ziMlunIZw*HRNM!BG9_a-L`37-f12qpJ+U{1ykUfZrYD5Y5VKGP0d#*)AutkiiZXZHaN?{2NxyUUeoHsplv4Hfm+u6q z`&3!1<6uk7wlR>acV!Nc+U#qaz&hsqFmWX1ZeyAcyBJZ=%=Xjw7m!(fGZPdd8*bl5@xVYF2yi_epZ^T3x`m$Dk} zTJcBbD?RAyD_J*pI0+7If1*`MLM#gQib#41KKq*LF!>`Z%32kd-(vBzLF3~NMWRIi9Ztw= zl60(ovoAzZ{%CX5wTIp=vZ#*4*npa|%`T@G2Q<+RvDe`|FqZCce=*QyXB^l^NB5r7 zoVG_hp+$#gQTIq-D!UmDD1BwfDS*4zNC+qj{ zx&8m~mx%fBS;k&xe4D!JPX7@(%=JFYYhExrk&Mo5|vcCP?H7IiN}9&%gsb(*F&%yc`$lEJfk zkPdRLa2k)hU3)t;2&k7XXT(lK#({|FF^&PL?r6=Ts=0!t5?Nsn=IH5z38-n|AQ1+~PKjmQ_JLM+{;=!IeY~J*Didt!V8( zIVLs+dIA=;f4gw2z#BYZ(<=41{-J}aBs^}yK>g{jt|CpixHIyxM05tQ<1Nwevr%*c zcXC(qMO1oy?+H}?Jymsz(}OH30V z>!BeioAutp+5qI)vuS$q1oU=fo`W`V|DT)arK_J{f1Ct7kf-FNdDA%LvlY>w*7YeR zAA70z3asIzEg0r@z|L#(H`{*cW5yHe*~f98*@a*YMaK0k09KrG)6tWSHu_tbK@VIC z@V3b`B0HNWkcGOQ$uuq4v&^hzOD3A$2Lg*66>88EhK07YouGMd75yv)y__o4IWC}faI#Xv-#*^K!?#yddZ4i0#q~2=ul4vbW#dx6A90HSy}f#v zt~F^L+k`E2efHezUmyJl7koCu`D4}?za+R|e^hBt+{&@9st}QkC^}Y>*dbhjkQ|r$ zkRLP9^x~^o97IqTR^)Pl7gG-JPr5qd^exW=Rp!a$)&&WFhrK%NL*Pj?ai?PM@rp~$ zSH!OwyC36;rj9>phUh@u&WZF(B(2>NgVlDTlLPj%98K)QdYjqGDsryEKP#+od~b3H zfAK=Ydd`R?h>h0Ny>@e<6awm?fPs~RfLh1ps~dUyN2lwRJp9Bshq(xzK&3pzPi3o){uGwV#N$7VDHcdfMlultqXRs| z`m^)iUqlb&-deq))%C->DNp%a?oEmmf2n@|ib^IBtpBSM3{;34iX6{=*>usUrT^Gc z!k=}DKSl9?sO2y6G0ubasAv3+ls-=Ku;SkUk8=^ZyW+g;BeP20rG9=Ye?zvWC=NJO z;LC|;ib$_jUIb9w_p9i2kA* z6QQTAE4=6rXAD$xzOJP^*%Qryf3Ec5l~SwnIJHF%;m2qVfBNVPEzq15wVzndfO)AR zm^S(^+r7{d-XN<$8Sd3?`H09aNqKD!Z~5Lyh&W~ZLkr0-gG+3v&n9|bX zhkj6Bfm5TY{HXP&`>N9DBmhj)jP&v8Nh3!GgnWakjAp1aHTYFzEY~r-Ub;jtm!l#b z(rYayAE?Vh8t>C(nbJBiEDmf*Q7<6OFjrv|^O z_>@fO_&)|xAYhT@M3!Q|beRw=y4PRk&LKn2qw}V$x7Rn4N`^#Wf6e4FHT`>5$m1v& z(3R18hzGEz9#Q}zR2YQJXgK+lny~3-_>j>8jfx69b+Wh+vt!N*DDERD`k3p`?~rj1 zC*g<_y}jP-e#Z9Fu5lebPRAT6Z4l+C7c^+P1Uy-c&$Ke}*r#upeN;bDdl6y6w)g~A z;HDDM8;*M;lJxJke*>}V3@Rltt^4sxss-${4${av4)>5q)!0XdS9ae>nj1Qt2*~?h z36;4=CanAavf%@oE4rzmpV>^n)gIA+qM({$_LRRF4n(B#+5q!YppO2YX7~NE;m&}v zBD=dcrb8>Mxf=EZc$KbY`^dQfB)d#^d7Ebv72j7wC$*G1sy8LxA&C& zkOLVo`OR6!F!U|J_jqvX7{Nt;>uM3)_k=20p|TLdng!V;nEAaKb|>4RN1jBukpb?( zV@Mbkt0}zLc0p|}hYK6kPH!m#DiK3?k&3F0G$oibgVeab4I!rG*YK-Din)z&XC2J9 zeRt10WTyq;f2VNC1n90Y9ukMyzZFneAAzC%d%);PrHe75wGV9+ znPR2dSP($vuk06jiyL&H(cwJ6hgM!P_${6rO7>@?UUmS1`y?J+_Zzmm=~}{Xc`5|2 zbB0(tVY-uZxCUmK(Zns9t=sYl#fsLyoXD|xu!87Aw8aKfb(sDT&(;AF>)s*TdQsAMHio-T3pU4?H%359E+e;6Qy{N_h5f9Ti)5$QrpWJd#lxMnfv z?b}-w!4rmLisq+9yW&|0%k>JG2r{pH{I!t-m!uIXy*2;EysTljh{x10;+gl$LqTbC^oP(e>zN|(KAXteUsEM=X|(y z?mhoGiSfPlwsK&r_o@xT*pf;N4HC@Z zY3627to2S+h~O@?qyyd^yG8XH10RB0DH`Gf62VY6Vor7-E@+v*{V>Yb&wXKb+q$LJ z=s}s6pqL8o#sj1@H<)}{i0q#hyShFx-k!i3QRjo3Vs3q%QR9mAu@G~yyK>Kgp=-knppsi8YNkj~d4UC4#e+#Gd!r?P+2KSegTUweRgY9e6%Kce%Dgosts1FKa5)sA&ua^|a z?%P|?w7WIRZZU&SNnPAxLKtkbXW<5WIbTbB!IYS<=Y+STsf~my>S)qf6FFN$;uaQ=|^593J+w@ z5;HXKcrXoxN3(iYQrQVE)Sqdle&*Dk#x1QOwd%toILjn}(IX;Gy4i=fBZKA{SN>}3 z6#p?{-WCO770lkvUJTqG*+qT|o{eT7iva9FK1e%tFy{NmCcLByoM zKmHm=TGlU;@uQD3gopa`h-xAAL8i(FmfnOBXbQ5l$(|R`2|wUYy$fEPIsOhWv@+$S zF}`6Ue~bPp3qXvXF)cW*unVbUPAP<3l#Vqy5ENt+F&02)64R%%7zEk}3E|rz=5MNK9PpsKLWlslD z0N`N8NMGj)DS$!@2d}krB&kZgEW2mTS1p{Zf40dh@d8bsTaaMb>cc8yJkMu_=ZbpH zPqMNQ8e>|a%H%_)++O2V_;qktyb*IQHg@lA#c zX+jQko7?mONXOb+mOxn(sg6^)?szIqJyL59?4Buf#>6qBR?Lo(p+n&0z(g~pzyWdR|dZe_GS@ArdjfL`?adXh>#IC|pu8fLBdyXu01@m*UX5dMp$;Yd$gq%}uCJv=ILa#0T$eIg5Kv3wYn=*j+-uIP_Nhe7C?cf1$aQ z(oxc)(q&2%cq{RE!w7}M=?gYQb4ALBVGox5s|rYw$If`VBPRS@#+#()Q=D5@jM769 z>s#Dg+N;z>!b~dg=~K7@Boh*%^b;XKt~GdB}Q^s@53IQ0v;TM#Yt__Bny)EU;cUY7>S*uC8( z`A4yfd&l)6>_?q)b!X#(gU;gUa*{J>Urh@7d1%PqicO_rk&yMgDOMzwDdz+|41aWK za2n)8?xnqd1lq-6a7(+3MWX}h{y>(Ngw%xm;i-pKU<>fuk3YO(t3^lQ9`H5`S6OJ2 zwVs=U>rIh)5v#(0EO}*{lAhMBsEkdnRs%lFyjGKafLh+Sa8J7ku2bNT@x$I_xclL} zDUn7ZJ$T1ZX_zwc7LmFPmB6VUs(*iYDmaDSRZC#e1b{VA`Xf`qL|=#t=*?#i?>ZAI z(eT6K{9RZCzkRCqn299xD=$N~_>=AC3n19m|fy#*i9e*k2Y`b#V zw%egNE%j_pM4by%)`F7%>VH~NofuBp=9mUF z{+$OY#bqFdH_5P?%9D(MZ*s&WL_o!Ne=Pi%*6H9apQQ}qsGWD?LdN(PY zeKTxQK~Gt0fZSx&oWlf9bjr;WGWCd{ez)jv8=`gi0cat1QC`8iP%6ydfd{VCK^} zw2qQq%OwK3@8&KJ{=EcV{OQd?yg4YXH9;Rn4oP2KeGl;%tRGx6?*o~HYSjqS^rJ`R zQ(e5BJGhH#wkCL6mv;aFUodsS?E-#Fkt=))DPn%o&8%*xz|1B@y0!`!O(T3AuAgvW zThqTZMCf-loPS|N!j(y7*lZ2{htFXfxlR(k(NSqsN0FC_5E`i*WX`^tlK1@VN>PA8 z(>gpw)41g6M;9BI{JB9|*u2=fC>w$uB@QT&d%@M#UXE4&fDEKXbQ~MHPcLw%s>4HO zmzB|j8Gm-xPoVz^4GDe?A(y&P?qa^c0s+R_5d+OtquM~z3Q+q5B7O1a{z(H&X#j$_ zFZD4$cwNSYhd>;X$CyE*K=TLL;?x%Il>Gm|IZ<8@u^R^^a**275F2eUW=TaRw247L zptrXoF9PTjKNNf~OIgZNREAsZ^xAt&5j(Aug@4f&?C(?|o{gIO%*fGvM4b7RmY$IQ zhu_DMMgw?A%IME@!~;Lkxcn0L8nfS<+bK=`1B*m;QXa8om-`p31U~a5WTpyDdR$zU zx~TE1dQ+1efl%Bm&XpnWF-Mfy@Jy}TD7=*{sSa&?B;mB=WO^w)$4Cv1)|cfTE2>{0 zYJc@oAZD`MRe}N09LLPOMe3;KCS4CkBz%j`mH{5o!TlL8tF6ZHE0#h zI=Nv1q&z6B2!(a;Ng{LG`?BE^vV&&rRpEXzs&IwBpNX(~R15_N^u=la2NAL(y!S*A zKo=QY=Ct6DSszK~!OWXZ(8W(NX@IAUh`@nW@v*#2D(_9JcQ@j*yImwmlW+;@&wq(4 zhb=bowZ(-yD%$zhbR!_#c&wEPzow=Ji-B~&vh%RYzoK~N0ppFk?b1f1d_M{CQ{yW} zk=nJaigS+RM{bwSH=Q7tD}Bz0tO0tQ1nOyAJoa2@1)wT#z;rXwlLGOW`)3>>>zNus*8PY!?WF zd|H8}VXd8qB#sU(xM&b=dgJ)-NveXyv2PK8+^vypZmRS2mJ(#hpj*E;#=>@(vj%7J zLrlnCoiloQD)>2?F=Of~kgFW{dx-zk58%a{Ua}!Amdf_$chn!5f*}h0TYnGY4BhbQ zARZPr!NM@XIt#DjtydZT442?Ns4X#vK=G^)WQBM74uiqF-dcKtINdIeIVF0Gl!NJ% zH}$2oHcJuXka&+xMz){W^+g^?ml4ZDrbI_06^7)v0-GFHG+VjZQ~b{Hix>l1b(&E# zVhM|n6apEjoySKl-^XcGuhNvI#&=iDrBmzkQ~&(9Wug; zXuv89g0um;KVnXNrp)x*MchIHYBv!8yG= zD&r*AW)9WldX6Qw({=*(V7pB-yL9(;AC`!nElBOT<4&1&EUv@{e&z z%O^q7^J#t{U1HYz#k-}%<87e&`o;H-5=2j|_@*x+KOv#F&02rdhYXJW;iWKn$-kDX zvAQazZ@K^~O1{H%X!1PcQ_!%hS?;WozJ{UMXOSRq7pu=cz<;Ora=mvk+F{`TG29_Z z`M}SnOP??fs4f{yKHa4Ao#5$#b#2PX5~ms$?-`GbIgoyR1x11torUco7Dw0lF(5lB z;aa%ULxO!i7{@9su)Gltk46kBFJj^I@;dXlYVW^Gk6~08ba@)qv0flZ*=?rmCAc>7 zmHFLVHc zGq~&LHY8M^R*ZcO(4t!tuZW$OQMPF>r`eN~5Rlw+iwbI=yd`(BE`FftZEa+PK$F<9499d=S$GL%Ltyi`LW2Y!VBk`U0LIpAeuBuI>>rCxz9>zKQ zd#j}tZJQ6PfiTz|w2mo>q@|u=R>!UZ)g>h(_kRdcOBC^UD6`W7d7#DosV{*n|Ij`k zBJbXm?@1%pT0OcYXbZ$qN(ZQ1@d+z6CPNO7QCQE*_03hK=_r2peTiHrP8C2Y1m3Ip ztr7mh7!yq6F<_EDG6mgw>H25)@zdw+{_>Z_1hu2>hS+HTAVJdUu1CdA2-1`gshB{l zbbsX?h+d;$+ksM9FI~ilpe8tKwt$|(Hy8ivFaA2=p3Fss_7IYSN?jje@0=Dsdq~eb0Vil5y7d{7JtQ21nQ4G^21vV;5}fhJv&4If2{ut*@92x zu^^ENej;%2^PK|JnO3LPLEr}^3#sCMgJZl z>6z|PJa6&iLc@++tbhvV8Hz!HCXISUlv)@2Z0-a(eld4&^T zG-AjI5Cg)DwuIfxnWxNe0l{ZiIkIX@i}PDaz$?SHnXS5WOW|i_382BeXClfm1gHGh zicQw|?U&Y6nLsfjz+0Rb?1`SDkc- z3J)J?vx#yCy1BEPWvK?>O-Q+piCs?GTe3g*bx8a#1xak#r?+cHII?B60osxd*ki9B z164Py23P3ocK7ZyBGjSED3uy2Y9{`6^roX!fi=Nl>I}jvs4=1w@j~!zhksJfEtwJ$ zmUUZ`^3-&U_76@+p&Mk2rd}Un#M<$8ZB?-sZBPJ}q?~12eF~qOSz;y8tLC-Dn}u#! z2^9bvW`P}t?51%W*}h@^UEX(1Vw_+>=8R-w^uAAds_`?Sbx-s8{ zc8V0s>6Zp4(?9?nKK1P(3F6!;NW;(AjM(VEI+Yb(#{ju5-%@5{t$%?!BLikaY0rl2 zozeaqcz&gsZ?$xIALvV$ZY{_$W-@N=rlD?x7hnn(XOK)c%iaYb;!AB!{#7@hf^HP* zFUEY~ZP{Nc05=Q1N&VnO{$8g?qe1Nu)kAXcB%I8%9p9WV{=T!nJB6wzpSV)^f6-kH$DDEyf_TQ{E56Cd&svh7OYHD6xU^H~& z-JC+wLd8A{xwiS!FdIhu(gH0{i(^;-!iGUmaK&TPHu7T)>VM0pYN)CL>pYV*xcw5&S}J@R+!$w^!A5#OvWaIO_wUJ8J|1e||V?19@ahhEO#IR0+-{Q7+z-g0a?; z@J(CnAzx@avGdsaSZ@<3VVZRVi9yusk97~BvHe?FB){DCy+HU)S{TEYJYZ!>v}1J z=+9GEEn6fTL{AbP4J3AL@9#c$dI7dk?qf)P7#L~^ao)Pdd7Fu!dqykMmZ`_OF3qLH zguKdJhX0CCn9E}Jxx-(`PJevxjVt-0#y>^~PZS$sPcZ+U+af-a z`K^@{kE}h#M{FRI4Dr6dObDMWQSo`&qc!7N+-t7kn8)wLyS^_8QK|?fSekSaKG+fR zh&ulT1k7fWW(l;nNl8r@t0hYukO|OultWux&c9!ie@3}!Xd2?3c5ez6tOZn6v$qA5 zrGK}Z_nKFhQCV9zq>wQ&c)Yk5(Y*TnB?>hk&n9HuP_I-Zzcq~L>)rpm-xoXb(ea7a zp|x~|Up25ueinCMHqnxSAFKb_MrnM%!A(E@2P@oU4&Y}UQ?SS1pT~?o{m7B@HJU}~ zkvT{!;IFv$XeL4&R-$y(ztSG}(!FhK3xCuq93bJ({v=nj3Ne+V>}|&8zQ3@Qd9l_G z`U#_rvlnTY2Y?D89=ONqwmj^ecMJr{&dn9L!fD(uyHOk4wN2C(OvE0q6%p_3nRj^pGN*thV%ECOgGli3Juz0n&czF{fH!MrJ1XC2bE_;-FLoX;PFq zA7ke>R3?}^@|yTx8PI00#{t?Q%QkGOp&?N~j{4JANtC??*W-EL(K8khBqgdRzs|?4uHy_s zbe?Vl4AQ=1tvk@Q^g+BXRVXb6ueKNsz~Bhh529Q&57?`@M1PdlIvyerm1URaquulM zF_N^lii}hEPzVLgx#`A}->n`>I>+e11pSV2yy~%xrAkjfvl%QS#OA)sUS>q%vxA}a zp;t-|Mt8Y)l*>Cyf=KH$^Wmy<5cGU@D00okompo~n6J$_K2o%wm|j4gtLQDam9T6n zDQ-KrY@nY4rhg0F5r;RvzG5F#G*`^UxqRn|8psE=4>S^qxl{Jk32e|E*)2RpiZ~#9 zr}o4lB6DWY zIS&fn%+j(juU#&K_%kXx9)UbxS!Cbs69*+qDftq^a(RITKcgVo_()?QiXG#3YW;(! z^Blo3eSh{UPQI5q;8FOhR^>(vto&}Rwp81i+g7+e#!5HlZ#`XeVacJ%Tt{8S8O%u+ zQ-As`(?X?PmSunZ+TD!QK;F&bCEMMMQ+M16vTSX=Z6;C0&Z;974x`0itbr1gGDb?2 zV^Nhq%{P&3=d}}qNE{IciQzdtDPcT?ejU9v#vT|4@(b>@2Ml7iNs)~J$tedl9*j1w zm}431CWs-iN=^~+X7BuJ6;ILzE*(TD<9`p)rAgrs!v%^8O-5qy7Hy(UYr`mJwvYn^ zlY<;hrNpPH356SZR@YpTj+5nRR%y4aMX~eBhPeHapDf#g4t+u%T!=x(ge;`BwEXP?hg3-LtiU*< zG33>$N|&2-t@H&~X5I1rdhoZ|vVbB`JCL|aA6!0x}l5FiyhfX&TjMyFb7N*>?ni*PTffl+|H9(hGj;byQgF$ zdYws&z3w_0=xqI}+5xT%1AkBgV;9O9ZW@UK^g(Er<0P{`JAYNy9i%0%!=vjtu z^kw6J=r6Qv`Md*iVkIC!Kwa4$Jjb;85fUs|^4&o6i&eF^Tt&iUNPkFJPJDcTS8=?@ zq2lf>K>$r#j;Huz&QhtMb6@LN;&u+r(Vox4siQ6@(kcB{iz0kr2C!QSD||w0&<=~I zk?1jcZPOq`Op^Snw3~{`1Gxm6e-moFs$Z4v8$vU*@$j|}N2NQ zUzwVZRVGC;kBteobYC%(ZD(@QA)(>*|+#FQn*tuNo?3-R^LAd|r=X z`j*D|bEH8iK|0P60EO%Xs_@!T0IvuP>1nPntLW4DN-oSk9;`meDA)v#W0oG}B71yV z+ik&Gs`AuG<1`V_v>jgVD3c1hU69b_6)l+PkO995S$|431N57)z{bQ;tHN6E2`=lR zGu-*xBaG$|TqOE)x;IuDA8RzqRdT9};v#Ie>B;@U0iYMXtL#F2M@^KsgTtqAZ~5PH zwOb*4yle%NRpTJw1nn7a)zKup<#uT&=hWnSzlLQdyvpH3we0CylucHzWLEd+s%rLm zRu2R|9e=xh-aD3Pg_j`@#H}ayEma)TjsQ`Tm-V12f>Pc%&Pe@=?#%(sCaMgp@;Oqj z$7cn@k5G`$1Qw!%84&^9DIqSHS3i;gjOMp8IELzC~y%2mYRsd3@`5A5I| z=6}w-yoK6;^-*!e2s}(}D`EPw~sZCqF5H`KwELF=KH2-T<=s< zlgaQbV(auqvyA23o_`J4gk~3yB8U|EJ6Vty-9|Vul{}2Sc}})jV?;aWu4IihBPO)Z z`@q3-7s8)><*vJxlHt`MltP42NtA88vmS6fsUNmD!II{gz6aWFw-U zDYS+R)ucoWOMQ!Zavsb4?m3GCi|_ihmJ04iLO9e{nM1Bbpu)F9G}F3?8uX&< z^!WH4q~7}|ZM1t+21uDdY|XB~AF;Rm=t!EtDMdb#DrEN~gGQEHQ&k~G@uRzX)_m6y z6#P_ukEv2%9SS$*atHo)stLUitA9$Kn8MuKAboe;Y3ko&(VNuyU;M=@4bA~u=D(pF zT89+lBlvZtX7IKbH*w6W_;bL-@B725FOJwt-=F7sn*#bXqPFeK#oGe1EYu1b~uA zPk-M?MoxMAi@fn3% z$iuo0@({p(WjGaS!T~-Q>3;>Mo%sWlI=dn6z57!ayw(1k5RC9FbNleEW!~Ax9ixz3F@*{2aus2~GL0T%oG|yKCqlvbSm(nPItb`1}Em zdLa@S+31%6>?D;WA=XjF!Q|$=@c#j!<1IiGP1i{>sQ0S^5?s3?R2qp&%a@m+iL*_4BJfi2B`yfIm5gGaU3&R zMqTmzKhrgVqNW-IIH+-3r1JC_UEja~0wX?U%lU`cs=#=sxPNF%+L`pfuWdBn*twd4Bo+k7i|Ad^qK>EnshzlokTSKh)5Vn zs?{I*B<#3f5M@c#;IY*4{xRtJV!;+S5kbB7e8b`g$$-Xo-pl5+#QVrlA3QXJ!AgAZ9_zPS)C>(j44jrMavg zLb{lcEI@}p|B|BmfX5NN@8Mb!(Gtcj=T6w^q>H3NrU)t53~M72qM_7grwp(p{o2nF zpj*A&et!aL@r8{CvzDhLh7auRV?0o3%7PyJKiT)W@Cjvo3wS>NyN!U~2=M>GTGtAr zbDV8CGw4?q(#ZBGGBr^@o&xM=ehrK8NU7*a?mcyO2ii?u0ucvS!(ZJD0c+e|4BbQM znhOSpUAB&<%3lB11tNR>b`CCNYa)@I{@tZ(nSYHBdD09uI%}1dWFWQ})Pxv4H|1#; z;Y3kiG1WXIJllOLLd(!|U$P+C!iLf+1AiRUfR$zZ#X!5&30_By zM44CsT%k9j;aa&VLM15>lK%O7x_GhkTobuhXhC8RV#OLcQ9d0V}$VCxuD5e?2B&M-Tk7DW@E23La z*G6pu4iV%wWjs&;RYZ8#iRpJNBX-G!0DpR8SZQ(siL=qQ0x4turkq^U_%Y$>(PgIa z396!C3$3#nK!Vro8dW1$xB(&04xKd5mu*u#_Irnm_6;kVqo^s3}=jsAe43w z5w!iu*OfeC`JB$toLzIbJooq(z<(zlHpZiSH_2%)Z3i3wJArz0a#_k~V;NlMKWUAW za~?^Gf$snsd19Z&n|7bJV-*v1w3HOrcJy;Cc*e*KbC4Id0QtFBxxRHw>%ok*n{yw& zuvsBa+%XJ_guETao|QOlLn9WzB7?j0Cv;1aE%3spG0sf@Duzfm>e0E#!GBY(V{SYC zt|wSCiyH6~g}cd!!1b2lhjLM2AiV}rMMc&xj$XQIkp(N;<|x}w7I!eSKa7V6QDetq zXoC?ss?zz{I@=L(yWM_yBlJM@K@^Lp0~WuKqKIOR$=ltV5_5A5$ z9%sLOEP~HhoQ2mv;fgqKi)J7f~cVI!y8u+7z^ozVUw+Ep@bLH zMfn>QwX(n_Jb4H#0~L$`r%I0G7R2=@CzgnDAN~tD*vIZZriL*|m&8pnf&Y(|fv3dP zoQdE}({krC<=oWW8-I<6Ahn6_5=RTF;g}1U21-)6*8y#vRJMgZ5I60szh`ghyFTk5I!Z?E?uFQ2Ltcd;RUPo6c9tinFkKrJ-6?)Z8 zrLT~QEkWcsL_`k!0E)^qu^aFw=5YlUhG{Z|PfO4GXoVui-OF^7+OYrrp5#uanM-CZo?lOA6nK(GXAZo)PG)Dn>i= zN%_zVRcDQYl@mfF!r`D``JXf`cSDE@o1!E@NKhi*WD2m=eJ<#BTfdCuYZvWe2kV_Y z(rN*(c;ah6S%1{2Y%53CC$Xk( z79XOr6n`=^0YH~U}(J;!??}e)ImiZ43 zIS_s@k(hVR!%+kCeh+{joD#-t3ZCJ!hkyr4!a+ zeeCSg$p1;RrZGDHC`z-R!+p(Gz)25LLB29w0Jf zr+=t0!r{A9H<)87W&LkZR1zpS&dJGbG=`F75;M4FRv?WlaOCx~LvI+$ zajcW|*RvGky~_yq;EiLM#M)7#$xssB6b;P&j?D9${uYK^@X75pg-GoiiznZ6lO{dT#dDXEuv-cwRV)WwssXEzRd`FJq3IuH;ur&O!i@CuG7k~oj+B2|Bj?$^CN9e6y8=2#tNzxcn^lK(x@{V)+UnAqfGk` z1@gdOCP7E~hQ`|Tsl^?Mgq4G2L?PLU`Zjv@yBaxVqPZU?&nRC?!;L7LKG&sDOxLsg zIqp`xC`3z9>yA7F40PMnWX9U%C4WdDBhYWCVm2Yo=dm|{!kf8&+y6HMaA2N-`3Re( zLyE&iJq%bI@6O^BhNBy{kCSxj6wfDxRUzBe#$owQdPz!i8Yi@h#hpl{9VfH6=iN`$m%w{57~p!s-Z`tbIs)hzZX=PqJ9)@*ZOuG~gMZ1SJvGNZ zgSi1`2a3TY$IRc6#Zfp+BJS`U2T%z2$lm~;?b|T@f1PF|@UE!!W!1w1FA;t?s7bJ`$vFRGRD9vVx0TfZ>FA~-r0x~Ki1hH)77+d zlpAdfbXkLcO2PHNzaj~m6n}BPiJLC* zNTg?_ewtgxw_z*avcqycX~@E22b5?CNE23jr|o-l78iQlV$2L>^bsv9eBsOZnSa)_ zC1TWmFX>fhgPbu|cYpdTmc(IH0G`ZU(BXq{9l{z}%Y3PH_gud;bq;FgC;AqfT<*2= z+UvXjj;rDLB*RiJa!x ziU=6cMa;B2i9lu~q@NfmOb7)wpw59t0XRejWqftY^#@%eNq@$0AoM-$q?D+5ex_&T z#v}Vz4(0sO^hi}5;2M;+GS5YU{j73U*I_lOF%!1A#=W6d=+)UV3be9!-Ur9F17~JD z_=x!85oM)i0G-7HKHv=Xbyt@JCiD}_ZX%LjoBSUG<#5Jl2N)hl@!@~h;GcVzdK`fR zLG}IYajxWL?SCRn>ilJCWbLb1eOTwm-qfr0?y9oyoT|IPGe=gsii1SE+7(4vRVb^4 z$$4>c$1?8hzb~U08i&r^g+kbI<(0{$od6Y(8cSWLi&=Wp?918Bgp02$c#fdzFuzL^ zp`Ya{3IYH7Wl*A8CkzAhI*2{f&>8Ql?NIgG$$=suhJXFYK`u~PsS|GckyWVnR5=T% zoLhSJ>!4dDId^7Doo_I-iFE`e{nh{lJ>q0#dhe&}>QNY5lo{?4;s(>+yjA<35+~}L zH^|i&@WnV2Mj7F*3hhi=Uu69&BF;oNZK?LNUJ+I~W=u8_C>23v#ql;;eB8Zb%_jf8 zXfoh$Fn^?z41$^6-cY9`4Fm2Zz&z@p7LH?7F9%qWZ2pRJS#A zz<#xS;5jB7{bpQO_?a)k@;3cf2Ylfca+B8e?0?PBx~I(prWryA_HN$>th()#XgIiV zEpLkT(J40CY&&0JM?I>qu%52srsD_yQ{a09@HOdLul2UMCVV&yr-rksGO@q5fUT1R zHNKWkizf@`|B4c`XZwQ9pVK0paNkzN^&~V3bv!S^HQlc0mi;T zWq;gk*7gDVsdMCx&k;C%JiN0g8%uCR%$4!h_mf){pf<`c2WPm1aOw^sB3Ik8E_6xZ z)PmNNit|&GI@Qx+D5Zp$y^^m(E?=_CluxFvsEY~C4}U1T$%J_1Q>A?Nt{zQ3GtKYpqExv>`vlk( zyn~BM35(P6>;t64LsxiHJ1-4yBRSjMif2))2OLb+o!z1bp_Y-q>1}BW%AJ9{DCivO zx+avBELh$R1=|9F5_uA7#`v$;*S$*q-n|I|IrBw|togmqt2Eo0i8<|Ng4z&(^?!FT z!w)J&Fx)b1yW({^Lwa*9f(At;Re1sGum*>lqcEh5z&@QcZXKN5iAf-u%GgUwp_O2f zYQ5ivGj3+_Hkty1(VimOVYRw)KIJsziY_{0<=Wzy^ozhdtwlcolsyexTKxXwR(`fDkzllC-MC-G|Okbx@+5&P8fi%+{4CzeoxH4=u{D0pw_yHj7 zXQIBZJ1O6%usB}ZpKudxk}n)R^N;zF55vq5F7nMzUV}MV@+5mJ-E`r{f4?-h+AknQ z2)UstV!Ig4{p*+haT6|$xRtF2h4LdWw6?z;wvRhm$jS91zmAL#VN{rutKf@vnBChX zIfn*h+hh15MEzHJO(miwet$)|lURKM$lK(xR{Ya^a+z#_&w8|)Y;ayKKNh5c5hlPp%<0NsF@PxoXl(1F9dTPqi zoXhPAz6w7>o$*B$f1jsH@GM@mt2DZYVvs+z8x?3M&6C&{27gp>(2)WnN%cB9vqbF&8Xhs;p zAGgiZwO;8S)$X5!KKY$_K+xZg4Hzd?^W z_hMOu?03-9tA9XmUqOMXFHs^=Zw`!x`KBp)R5eGUwQru>D!s`R=;f0sO8`O{9FvD| zzJL_(G?;gRrgWvlb+-Riq}P(>VQ7_ZDvB4bu6)B7rL1snt?a7xOyLN8`okVRcnaee zh47Z#^iE!_Ahos0V%O&fiaJczmi1I&sxHs}85OMK6@NzEmZ1D&IsHx8xAUKV|4rES z7U3>@x44Hl?M2e-`{}&yEb))*(L^+wCip< zMEtizKU9AO50|oJo`^2&P##m|UN><&n{d1yKu~3t{+H#AiD_vx_P&H{(KED)CX`B1 zL;T_NS${Uftc~=$UJt|n94~4O`^Hpo)yo1ZKyG$GW%)&6hE6XHhZq4Zl3*Zt_04rQ z{B>6s`vq8$YgZ(bL_Pz`a zqFMD-`v&2DCB@?5oTW!^OB#tJ)6p^lWBkJ??*osGvI-HBVklp8K3o#kzasu)V-_QG z5z4rwtdhNSa`4XV^QHgX$`y7>4TO!C8b&h1(!M4bs3ju!F^mj*Kxz*#t*gdnf@M%% z6Mw@V*y}}XJc-_;Kka;anSV08HdMPhw%&YX$;DQDpm(?!9@Fr|)|0@^ zM;x!j{sTtj-U=4aLC-vAD{3D`^^na|>Yl)p2kv9bCQn>hb_~)JwE%+RES*IBi1HR& zO_MYUxcJ##GLo>+ur}1bL!!kIDrSq!v0^I$T$TU5_7?&j+sx0npqcY~C^G-})_=mv z#apyAC;?wbV)@D{i~dp>5(&QIT-8f9@fK>VRO~PbL%xX1U-o;>SJ?;iQ~%7@TNA@xi05nNl?YEl}A`kWs_csH#+P9T$`k^9=qCbqfc1P@C_3#VXFDIwHK{C`OpK333&V`&JD{ynL zy)!(w?H`^^jEIloVxU1th&rV4{hr`?;1&q)6hO$8YH4H!2WmV>0 z&fSzu!=;Tb^hIB@0VZ}=`WKV-VGCY&m{7p>>e)g>0isT<^?cFfRMLpfj3pXwuxP|a zKGRf$`BG8t#I@uc@-@+o*?)v71Kxlo=GMm!Cb#--JGIL2IASXl+SE+s7#P(mt2_|E zd}Ez~tJN5p4lk33teNF7TR4&bXuht!k*JMd^l$#x@51LdZ*3jDqZ|Zv**APVIgB@o zhfFnu*MnXQnLB3=)N--JtQ?z$@r}OV$HGk=6F)WdU^m%@a zLS%G48<^5bFE8-0uR=?^h{5<fG_P5zY#=Zy)ej_jZ#cuP+gGxf9#qH^p_tNh_(7XYE zf)e63(rLAwjXNX7jqIjuw{o+MakfnOG!Xo7|byo*c?!5wJRoU^l?xfg(`)l1D7f-e5HKe;u#4934g>Fv%?c z6ewstdtHjdO`dvd%+-sih&G6fi`(282(NWmh++~HSQo>Ex=-c*!EHlE5EYy3Ce@&z z-T!h>b83YObbs+u(C93p{?;}-Su`lce<7xo#L5vxI!3MvP1MiA%4Nok8@K&{ zU!ac|9euobw*smw~|jcsJi0CMCz=ViMF42of+ zh#2OzP=Au*#5c+~jCqE%Bl_oRHTbMC$qMfvngVWqO6lRv!23VI=6*v188TZ4)P?C` zed#4hTK}*k$zqejdAoy17=FKE*;|CVNKarwi)k&1WJ*1PuT|K)%0ro;^2_P$c;e zf?PL9vF|ZSomRG*G3z+Wm(6FjvJ(*(x{rb2G%zM(|ESDlCd7+}61mHcXt-x|>HuZ; z<0HZ|WZ=rzeB(SCqGoV;l@U~_?nHY=S2j^yvP#=a)WY^{Qf&amd{mNxku8g7fjaTR zam&);*#m!%YzQBgzFoj?hlIJj>{E5*y8j=I+sxKYYPM?X| zj^7GM6g5Vgol%VVJlHB$Q7F}wu@B~2zl5*iN+sFZ?!Em>3${c|gYC|@;1eiBAH8++ z3AA>Wlj_xh1{UU?Nd^D%&Z&9rT2y4&R;DQ1TQGkF;xj~3(d|lw%fG=bS{;8Kbo&{y znjg2{a&wRGeXCTCpa>HJk|rgYNfO1+p}Gm2kZ0 zLNcxoV5dxb=;^TPj=HFc)S3Y|Ork?!Hs6H+YG`<3?;bp2PoxH3ZxOoGeyY1E61aSz8kw|PMYW!IqWz3r+b zvu3^T{9(U1BLizf5H^)dJ1qVrLk*II_@P6U)>0-%`Kg@djo{>H@c~tq9Zpd^LuG&2 z?B=ELl{OT@9ny4Kc-R$=44XJd-^}{0#v3YCzdJ7u))m;Q+D^nngJQu6^5f|IPW6Ai zqqxfj5ZrxTHVs8plZIbzh5lOS6QX&&zCuYk%5hCF@36EVr_;^)YQLn2<3fctm1?-% z_KRrpjD}|?cSlA#TD0a*%*27Wt$u%?pnD<1+>d-xYp+NS8G14!&Y-(`;qgL65B zADb}`j6>thwoj!#{#9&UuxN|u^E#qogkH8i*yBvQ6z{%+48|R-c%ZzN+IX5K3{WMs zq3VYHq^-1c=*T4KSZ0s=L7fes(1UC$qWj*yKXl>f&v#QEybYY zWmbqA#4BY?(Kv;>l-HL74u+q-I{C8x`z|UeL@;2p$XIoqqgwmZb^b|(&<77;yU)-* zvSw8cBb`BzV&&_Tc(b_el%4sJ1_yR&TnTpKfk~0v*`Y+_gxC)(`YJav*5Q`wNqfPn zv-KGjmrYY+TFQMEcrrgDpNoGXJ4g#V*Dds36l~6bkaTu7Pn>Za|%6GLHk3QONgLlqflzxm+9M`NuAj9mTCP z^8|9}BbT#d{4WbNja;9XlCGfM!10PsGoEWGHX;r$z1>Adr6UsKpcH?EKm6u9Q!v9( zRy}(?Hp=Zk70pwikJzWg(x&_F*vGpvQ97INBqUWfH4`j0a5T#zmFV#3u5f2L8W$%fnMIZ{Si6%DjNk zod=#6s;v=fc4>)(wma_n9BKt2lO{ljI44)6zc#Sx(9U zw`UI{O(4r#e`@2+Ss-_Cv7+6GP0{Apxto)7^bo7SyvIG+++KeyRS3$m_(QFU8_d~L zhv91Tbz4yI&(XAqgRIt;30F=jN^5GuOM&Id z2?J){v*%}3lLUW!ci?{K!aZ$xJ)~HM>*z#3cUA*DQr;bv@e_n~fL2t0j-@Fp;4tTm z|8egfr}Sbyz2*f3Vm@tzI`gl66Up42ahlVzZska{9zw*cnbb<+@FihBU94qK46NJ! zF?b>IgWRhKQx3#A)jwr0(oX+QnQ`GoT{ypIF54D%iO%d+#Uqzgf3OAY&lv@Z;Yt!s;Ce7>EWTlXVf}j`cg!&fPa}&)+)-f@bw5 zJF$NyVG)|eEBN|O7#YAC`5T#||KA=9WifG8*M`Uqh){2hfjxhPd!;yI3v6F8KqF#^ zwmgBI#do?P+v+EjHrWiaLYI&l`U2N%-$ap@%^uJyM>}N43Gkj|UdChOaWnx<9`ogN zKR(q2CO?Ej+PPe8v+|#(eUz{cI++H^U+#aP%f>Lp&+lWVs@}X+bNT^L7jT3%#|o)J zLa)&*BII1+lL_b^KerdZ-=^aEt2AUZR&V*n0oj?3E&q{_zblAF@M*&zb!vN&+AI?# zS7ueA+T3wlH&eFq% z>&~L?+0>Fa4;X$FtC;duOM`%g7uRsy<&{`LDd|Neo9&*>ISa%hVZnoEGK{&FOte;f zesjMiG!-t8W58*ag2K!D$z9FBKJp!sAy{^w3lVzW@k@WW|i zirdcaOe*dwBNVlQaP7gv=E44dHN6M};WY-6^%7v8BGy?;Sv&XfbD&i~#!d-sGX*VV zOhy-p472_#)No)L7KtSG2myco--j{_!tOj4sYg`jEts>2Wz-oE1Qm2WuA}M*9VC;s z;?G8`#}MzHo*Z+!E2~Z`F%&F2DJaMG5=qvUWDF`KLtA6^yhzh;&(7gN_vdciR-ekXC~eZ@~pdluOL; z0;c&efbUo6KI~&jnzNt^y0Q@A3#Kh)f|lJdsM>bnc2{A8o)V3fLt^_-(yBxm8xR>< z7z}%c`wT7_@pgt9b8mkZ<3B_{Fh+8OY3HxKugYBUpuyL)aIM8L?O*N&2@NAC)V*Lr zV#zSO?v1kLGf=rVeKam`L-(STmOlW*6+kx;kBHTbp)sbaiZ-E*V_v_a6yvSGa^U^P zq(}qs&U*~tvl3#@#gH}Ndz&x}*XO4&DTU|k_y6i%d^{x(!aaYEm|MY9#Nn2XM|KAL z^+Gb;8(jZbNRFql9Dpv4RVrGf>dH&Fv6y1-o3pmYy;xAj^g<+_L1J+wVa}>hz84B(jRBQ*>&|3i z+eYJ?Q|&HZlzV?^3&KP;Y|4F*DZz7}%ywl9%ZJZl!7RwA*`Wrx^a#^%ZNf#ug#9%u z=Ja(<#sF<1?jWBb)?h=K?DdI`iW><~&$6r}lZh}F;YvAl14seheo&{kaE7J6vVg6d zuwfwvQl@NF_*T=K4y{*GTY>v=UN-UR^jSyG0yLI7j|YEWS_WoOTNOXJmdRg9q6GW? zpph>3uhczIsy1Hk0MJLh&=QK)=Lp+H6t?>=YH|t}P6JJQE!%Z~+`11?j1VbdANU9C z{j(e2Fhl8PKwrw=2;9e%3yW}gWGcUBGG~No0$mj* zI`i@V25nU%RKa<|>B|?N`YkgQqy5LL*_&5USWif5Vl?Ngx6#D>hO5r@I-h+5fqV;b zF|>xlf$FgdWR7tNU=RQ?T==&PgN^&n@LGD@l_P&nPixX(crPhe*ZTG>&ux1v-Dwz# zPBSM-K%+dB%bM0m4^3BGJF8t$0K`D%&tCG}ro0<%hoJ@7Tm{#PC6YbN-59-~c=#s@ z4#~6Cz3s(xLW1tc>Miw`8-v8ajIo&&7@1)3WV-oUe9*DkGn%cZpHk9Z6?h$|BXA`E zY(9T_w>nvRxLd5{AMwFGP{(;+GEpmn0r`zW{AbP|HZ;~_yyJf5Ec#Zt9Q4~1J_a{6 zAW;32J5v5Ic%zWQF>6T!)dp6X5vO&mS!D$CdlgQSB1_h_7bhGZ1&;A^_}4(5NJt*) zE(22*h4{I;c_X-Q#?13*!;Oeb32^2hbclbM&*@{z7M}={vLvyWK;aPtd#1_3_#xDg zY}uE^1L0`bTS%-Pw#3j;?Un(zA=*gOK`7@hx=}AE1FQSik5GiVjPX*{&q?EKuMC69 z;sOd83RSvwjGJjSCwLqi3dmeCdz%KS1Lffkni8HR7xC2U;Rp*)+y1biw|r`~`4xchhQ z5~DW!MO_J32b|KJ`;%vT5o{lQB@M}sH$lD`F_9$-9K3c9xmC+`?`N487z6#;yC5De z>8q4)v|r;9%VB|=N4Zh1h8avu3~%=DLMw1CgUOGqTNqm4XA588QzGuw9ik0~gJ5ia z&?IBy${rQ^>_X@lwA9psx5R&~sN=n&ZFe+|A?KG?_fQ7K zT}Ubry)`}rYq>~Xt~cR$AgE_`P^U06dgd4$wX|t#)|D6`hLqQSFUf!B{e+MsMNx}o zGPyW71OUGirkX}?F1@Y3iBC2=?3#~n)h@K5Noxtoy36lV6thhqzP|rj@wbxQ4^t9T zS&0~p6{YJO7lQjfX6Q@mDc~)wMbs9h<2*8tm1=Yqn78QaIeqTesE#kR;pv_npQ_7PKU0r;1dfLT9}8IP*4i$vaKrB3s*L@^rOt5SsR0fwY}MzHg0V0r=i7io8pMPxk|c z37KH2&SW)%XDPd92#7ao7~xE_B7AnoRO~*4t@Km%Z(ti76ut`gN6O2%sHf^kh}qrm zHF`v0If{qa+cNaN9>sSv6X%tj`{s$8FI&Ys(*Rq7e<(V*DOI?IZq|I-0TB#v|7D);8{3x}HDDL1* zPiM^HE9(Wag4(1dY(Rwse)OBYD&uA>l^Bl1SGzB+@WY!t^oSh8H*JsjobUrM>R$x+ z>)mH}TnB&5!fgFKb!tMs1zuU)A`g$RjC8vDz-9Ma>Qvu%o7#Q_bobBGRNXru*g*Yo zO(vP-v4e{bNAy<7hH0LEOf@_4BKDNnRoUvznbE4{vA4>$)Em-KKp!jNkenuz+Y01N znA5WO*$S4n5KbJx#ZE_JI8A-fx(m2 zz0iN~ReXHeZISh0!64pqu(qU2pKm^=2=?2~rQhX4xP#X7$*^%8t#!nM9V}8zupx>b z2X>`S9=VYj+BUK0@&O^$2J{f?>29oy`&Hk4IuEI=E2wd(!^oQ!t%QysW=J56Fjp9k zNp2-`Z+#tH#&o`lW}Wvk4ys}B1eNII2J(N&O|+>@63u@hhqrI8w=tD&xJwKk1mFL+ zEYhkE{%6lgt1EC9Q14H-#A}y1ao)y`zN+$;1PRI?hiF`j0zk-8X}0YYcpW$J6ifHn z4G^-EQq8NuJxa?bG>vJB`K8q92m;16vFXOL%>sivmxX(#`qE6qu3f-r_#PdamvDbB zUOB?8f9s=cd_389ASTX^3Rs$^PJA#qccTz+@IPK7+tx>@abv#CN(?G&yWQJy=LIiX z0giS(+)Bt}ZDFaB{WAN0!K<wd%=!Na>U?`!=bFV4Bx{Wal898>qq%e zxg+A26fwMct>rEvWf6+W+NWf|QO~G*I9Wp;wcO~&8|9>mkpg(yk`(pjL7@y?fDN&4 z;KH9>PJ8XAtd|(+Dcvd^KsiS5TnJx8`-WP}1e@nxZ}b-3ma|UC6m`<|Y2bh0@9CUQ zN;>lt3uk|HD2QOMP!2q#>J52-s_}S5A)5vOU#Ms4^uC~mZraimd_ZGvWBSMpHn!sl ze1)HpjY@`1%KA1chnV_vf(>AFxqx!hH5@63E5>dF6vXCwKhaqIf7xDh`wpCsTiXu1 zx8Nv$@}Rn|RP9_H{Hd8c6|aA(l#?eMJ@@=e6Topv&YGAyAl>0u)v{{lr`h8I$5BbW z2dS5!h^+OYPTrBu?lAX7eU3GQ0TP|^q8Hv_#nc!ipqG>aCOEyr*?_J->Gf#xPjvML zUa9Zd@hGQSCyXgmqcbfzGv0x)~ItnoJG0WN*2U5(sZR=%z0T;ie(Z5bF-3I@ zUrFDiZCzG|`{eTd@*aP)-~;h_Egqafx}>$;YFRP+u*av3XeZ#Z<76`(n|5!zaZlG5 z6sw~qw5ariz=WU`4uZ))ohw}e>EJ`(Txh4NM-{djq;|!nG8uAo6s({Vq7EsqFjiD4 zc_U6__t@5lv_(fIZ{lOEL z2T+Qm_YH!Z7=^l@z5ll)X`QT%Oiev;NoNbUU_O`MWzC`~A_i&ZPp+0HrpB#!Q1e2} zNYZ!e-6*OuO3{Co4g%yO=+9tEcRjAykheHM@PR4@f@>-=^>0=;$ron_>#6c_kB$8Q zaP_;9{+PRCgN!!BFG&Z9PUx6Qtij%7%k8)v?K8iQDGsx0hG5Z>f<5Rh`Q%G8;!Lc@ zch&S-=wEb1)P5x$-YQRgCp1f&!YL;#qZ;lTZ%a&z`K^DUe%i*pW9?&VP@7z9JpJoA zO>{CLnHm>zN-@TQq8n^1E$xK9=34{OGp}r|T=zt^o>(MlnUMcj8QDAj<&qUs_yx=$ zna9D8uKTR9Y>}2$#!3~85Xy? zI;S2RF6V!qHK7rj^xw+aQ-x%~epI{%F`=RrWg_PC3%r67^(PMd>y3h1@toC~S6 z&s8c~wu2)hm%FYW$IDj+D}txUJK9VD_Vyt}(Pj&oxJs@e!siC|vQTbOwn;9f^I!{z zf=frYycR?OH3@=8Noj48UFly1Xmi%{VK#d<(i?wAR7)4Ib9!BXysvwS!LH>D zrUGRKcP57Uy*uo6+1wU@L^dN^AIusncGGI|9nVBKS-z9ac*wo4y+Tpq2eP{c>J;m< zy&``$6zq(B{BLun{(Zzj(U)=oU{%13;j71vP$@&I^@J0x$xZQ3!e{5eoZTkj7V)!1 zn1GbX0hbcI&w0>k+W4E&>GOeEL3C%Q#rt(bl-dR?aByNuU5Z+q^u0WCY+6#v<-sCjCqVP~vC^kG$M+gJ`<=U1%k96@iY#~>~n)r(4O+Df0)IopckO+K2R5ITndYh`>P5{|4k?gK=2%QO4G_!@A(A8<8(P&j`i9TdI1 z0T%lu^|&4dr;u+5#wn}H64o4xeEcQ?b45+WHOYxjxh}S`C~(d5jFK!e5Bg~Nvvn>LSA-OqLOoDIODX9B}PMKd^qegEg!omG?p(HWm()n*?I zI@qInP)P=2z3CMm*;z0#a(aKfS~ZJ8je<@RRui4kGV$RsZ&^??vHZZE4!(~1{FvcA zkqvj`tga*?&m8rP+1b+(dp1<%??DK*n;T`^Um)$XpE@rh&_S#9&=7PSk`VQPd=RrH z!+M`8m`W`bS4LlRv}Nc!CKP<796hmUsnZ236&(0kXe97XEyW+ej=X>3jHTy5mgrMC z+@c0DbD&PL3^G(S<@pMQi!wdCN#yw4m0XSTU|wx`aOHc_n3{U9O3uB1JTNRZ;g}{Z zeC3EFbbx$@g7jj!vA`|2Bjm)M2o=f9&&sCNaEE^(+~p1zkfe(5qbx&)Jm?;7B?bZ! ze2jIx8&M#S%+0t2+n;}g?lmc37D5$i^j-Rj2@FUA(^WzeS_%df8@DBj-)McQtR0er z&3on^?(h#8%%J^Osjp(9TR_jbAhpgasJw_YxY=D1HpETSedohkb(ceCT z-bUICJS7r1~I(J3f{a?P!;_b@2)@VS^l%x zz&Rf9>_({o!6<)-oc&Xxwcg+}eC#I~8tTXn&rP7yqCmwNP!c6YBT8|xOCo}LiWDs9x_;_Gk-V+Mcgj{#QYlmWqOVg8V~t$K0; z*P*9NP9e`h2S0|Af8zQHk%=PE?%uBb^@ACZw*6=xnGG!DCqE-j!3h;7cw28&gWeBy zTJJ7jTm#k-t6lg36TS{9SZF#I&{_Xy9|p|jO<*?IJ`hVpW-qgtye(1rJiwie_hM!U zi^O>-7J7g1)!7voVj0(e1&7#vov~+RQ-reEyB_&Lra7GEQa0T{l zaY+sqZuDOZacr3nPYDmgVGgUget3e{;#Ym4G?i7sNE z20CT;p!4wcp%r|@Ojx}S?+33~5ngAt6TsKO*{*-4&^9$hwEoU1ai$esG;KDR1zUQY zo?<)m@hi!3ZkDV3(8}Ma4C8n7cQ<gTa?JbkOu)lFK zV7*IL^WS5mDYptyceL!>M6z%)2rx)kZJ-52x?9Y3#?xRslM-9!=M82Pj`TR;qvY zcqrr=`DE{I_8ccJDH(ky*E>1|X9$87D{8p-?cZX0fxvYoC4BuAv}zsU=_8+>0Ql0% zR}CXRVQZ74pzMt*Tk*0X-LDSog(3CI!%zCb!hV#S5tsoFM|>Y=+t8aY&TQ1K-q_4>PS23 z6ManjaQdlg7f`laQKx_7cqw5J%sz_$*Ojz@L1&_l_b=3`QkW;P%%v&qLQ4ukOx_x@ zyIw`$`A1wVnEKmKvH(%Djyw{#1x-EaW(3f^Bi?{mtGkqWb zcOB8J(!6F9VkG3RAvG(jws)Y3RJc?rD(GXc6J|xS*)O_XEQEDbCh0SK&oj@ zvMG

yzT&3W@?(DNm2-xYD@(4O6AHJp6!qR?l&Yyyuwgb%y3wRP{YC1KGN^Z~rPA|ocL?F&hwvI} z!6bC$UdcC%!}Beg4Zysz3S$#1 zn+OVg#}Uf*lB%7GE)MQ;VRdXn_eT+THGWxi-QZsNEv|He|5@0QXP@Q|^`GP-)x_wp z6N|C3axURshT7^wp_gVi>ojQ=0Vl^ugR^E75MiiTbWwTi%}`M}-5^5>HetNdr&NU2 zR4G8MP6&U+Hyo;_b+v8I+WhIlrOnY)r86)owgK7HO5?)*;;Nv$L*l7erx$Wpmb=p| z;W1@&4FUtCoq8pCw7T?6^sT}@!Se>@T8U)T==Q7_r0jL8tPzgH3x)T#h@?nG!JibT zd4?jb*hmrq^&iW@hRgP%F}AA$ydub7VO5>5-YQG%#EyStbXB{qaE^Jp?h>#bDrk>LAD#6+Xft{m zk)nXF^r@9sI-@ww!lO8rhKp=k%*&8?j#lcNs%ivq%jfe3!|zdBn46d^J)dK6cwXFR zwOxX*HG_N9-*`x6j(>x~1`a;=;qP?0&wO%sNQ00rdtR~PLe?n@MLr1PAbL=I_!fVJ z6HAueo#lQ=iNa`;f%wbfIQvE`Z?dBvP!`+XV-j=3ZbWF!v)q|sc$$KA)UyXaSv=j- zzVTIHQL~4GhG{AGt5@Hf1)Tkrj=>v@em{yv1t`8KD^}emmuDY^;A(IPK8( zLcRZ)cXwVGkg~@Dg5dGrhJ}bSZN%tzkFDE(S#un$U4W6M^7-e=wLLDrLrU#5^^>>` z14*%>%KMXwmb!hSDqQ;cXr}#4&W^u(=o-72G~n@a@5pTh}!8wV#yEfsjosm}7E?Z0-kg zp>A}cyD7P8PV=ci+}=OhCASEP1H&+4;bhVv3->D{%P_E!D z*{306?o#bYv_00Ig)(Be4_Qa959&iFobC`sJ0+H$Vo*r3c}VKC@4lkp++C5HkVH51 zcOLCIycf3l-?6ZEB*lOilds&#ZrBwE6Ow0Q~h@=n#TxlI zwxE`Q+6fu!9per#`2{<#pFk`GxhD?PxwK;QED)JYy5|$&ToC_@hc#ONUCEHylvcM1GJH_0AjE_1xl+Zn(axVumBrE#NewHI* zY4LGNsa$^#0HTgZL32oSH3-;*S8C02K)HCvqe30Hjh%;_`XQ?_d4yg3hm4bD*6uD^ zyV7O}Xt#x~pf=*zilmA@i`#LH@h8Z^%|Fd%mUcl7ui>eQf#-~?#5j=#J64V#etTJS zSs>?8lssnRj<_@fx3stEZQx{fBmM)hcfNYME2w`^EJ5Q+%Dw&SdIBcG?J5u9a8>-6 z%|wBzG}i8;h{#7d_g|J0wxB!NQOo3%P%{!Bec%`e9KMVztnx6oH7f4}*DI}~b%{;p z5~Gx>6B>U9XaWfa-?)%2OIVKsTw-!~nCsFhULN4SrO@zk!J~iPk8!wOwCmka=A)q=Z#?-iwz%H}*dN?S z968qcJ$V3ALWTWDq=_5gD)U(3w|Q@AX?n`mjdDC}D9=D&>*?>gyj2jmbO94--uF8B z9C0Qz>JVemIc@vXWMU>LE}9XxUkKw0CjSKV502w>n|O!BC6R#|9fAE2T2OSyE>C|h z#H7C~KtdOM+VLe}3){c5UDk{80wvB!vb8*ip%GW?YuaE!>}A&T8LcfTnMMiKmPqln z91Mq&V;K#O7$V~18g zqV2=!D%}WuPGkgp0D})-(1E$!Z8yw=@$p# zl);}IyYS9Z0M`Q+Gp}jQK8>=}v1C9mg|4pi4W~ERL=gC4ti3kC#=*#|sgTsn>qu+M zE3)Vobfq!sJoivcdvEEb`SCRB1?;lU?)M{t9ll30RJ@q<5;shuGvsFr7{pU|s$RM8 zK+duV126@ow<$ThnzHx*44r?KNCuz{zQP7^Qrrv23APBM zP7FTN8oy<0@r^ImJYow)^};WrUWxOr5Kt!5_3iLC-HvCFW|ZT;E^ZbkAd}DeeUw6| zl8{n+o8ay^KRqx$O4z#znt)E1^Ae8n3u24_-jLQSwsGk1<8w=Ixx;@wMrVFu|Dlp? zFl*rJ@i^atU6j|+>EN+fj&s}gM>`!7uvVngV-#0gghC*VFIF`_YK+~tqf+Lqw+ew~ znE5xR0f{TMa{h%FW56nt%O(1cuShXJVYu7JW^?u9!(K)9VK(nLp>&|aCw1*F8KqhV zDzwxqG?%~?!@2lw#rJX^nVVJt9)^w zJ7@b(mqFFj*3A;wMzrMkG?H*N6aXPObd3sqy4*iZAmKP9b^3q0kGxGqEo9P>kBB*N zS{hsb%kn|@2d%x08*FBDkpSoud&Ti9bA2D`D^~|-+PsSGP|2rEH;n=qR396_zRyDc zvSM2%lz~PnK8;Be=Dp0ZoK&L84`lCK#Hui}(=5bF4>AA=cltb1I*ufAPRzk`u!nyL zEf=8=*U#gknAm?>bW7VKT4#a*F6i2OeYlfrojJc5r;a82Kf9Zt3QiX=?NM8h?vq(k zTeW&FLMFKzqCUYUwZ+>R6eqgZMan{45AIrPFiV7eY#Oo&RY9$&m|z+Gf2!q&;vVW{ z2BOt*2GE|NHLjsZgL}xHlhXd;kgz?Q#5e|QYR8Ee<5Pdd@waCwGw(4m#Ke$@Q{iD& z)M{ak>yG3(W4P632D2Vvv<-bo2o^Uw)+gv2eP@jb;SpAiXf)p;IJ#Z@b>y#E|GSF| z?1H>jXnUK~C+i2~+*lsU<8L1)wAXYn}XPjnUK7iJ;8qa3`tY)m?P*6l_C+c3g5WbS~27l6&9Ar5Cwq(d+5rvUL_el zbM4DN3%n~$e&f7N2ch6z=Q0s{{$WtJ-IpZN@tSsQgL=L3Nm)Nt^dWKhY&5N@C{0w( z^Spm9b`WGk>os)a&c}k=Sg_}V)@s)3AMY$k=k+#$0GA1_k_y-F=H#6P^)!J(63@Y- z&%O_r&$hd9#Xc0Csy}kbjJwfu^NcIFV@*j_p1rgT91Rmxt1xE+LD%*o!kx#cI%$E! zR=nc?N2xpaWDx0Svm!cW(#ydEme()<6zYGjr7$yy3+1h5_Q)QdN&x1tu-v>XK;|}A z>m;$~J=49<2;zvmd15?E2jG=wnl=7at9wEVvgIMfMO9eE13w3=M9?(%*S6sCdG<(8 zQoZPkAl6y_)8p+|o~A&>1cn%#y}CzF=YWfX_-SA<$`fY^)OGg56UO2bWcQmoj7)!E zp?xUp32ojM(d+#skto!}y0Kh_h>e(VxT?`ZV*5G-tFPNUG6xla?6NIbLAkLG@Z(M6 z#+Q@LXGa~+JQQAt?0~+z%D5X6l^DD+^*9l-3BK&jzD{x%u?b{c#B->aC)1aNW+0K` zYP9jckzpDZ9;kcT&SB?`irK}VB(Z<8Dk(A2;)#W`l9VY94nm38-2>2;xk@+u6(4k^ zn!D1st`)ue8je3lkr%kNoNxiHWHe!dO6;N3HamW@sgZ}DZ&N&cUlk4w3DydCs3g!Q zVMo-6tNVPbD4wB&MbHy#zJ@2RW*i}SLKz&%&24Qbj_Pce;{?gzshym|vw3 z1m?gRDosHYQHi+}fplFMMbH`w^~V_&BQ5_Y3 zsD_WHmv%Oz!FrCn?T`KMi9~AF!ilx~YmGe-;{;C4Ac|ea;P~ZDHYQvYT83T}rd}0f ze<37On}w;Y(V}RXjT)nJY4xP#rn-+rNNX-fRQQKIZ2#I^siL2-kUS}5x7icXHZI};vC#xE9GJ= z6Em}${u!aZa%5^N#DE!l&~l;T_4`#2m;V-G!!6Y60th^}b$ZW5%>G%l0?)j!AVp%qNjh zO3#q!HskF%bo2A73un~)3vzA_l5k>Ltu3l#@AIXJLTxCZisS~$9=(9S$IOY~7$_xI zM(PaumAF9`)G8j5sM{ZvcG~>Uf9t}XW! z)N3Kp?RU60@_Z^El7{!^nJJfl^tyT4qkyCq(S)P~!(%UyF%%pfnCH$3f9R>GX{F0w zdH-dC`|Z3z85qp5@NP9^Qy2q1m^dTFT-sN>Ga3@5c?NP|sLJqBpH z;H?xy@Im4pI>nQ%NsoDbe}&B1lp#yitF6~51nuNi-$R9f)cfY=yFzHA7;hQFcMb)? zc@8I2xrL%d(U~~dP!=-@aMFO4QT^k{WJq}GBkN?2K{#V?6M=kts(vk*z=i{!Cmb8K z7egeHfHI&oVNg~7Gk@L&?Ko1k!#9_e6Zt69Kk(i=?*%$HXKo^)fBAO0ZS6?}V*>)H zyb);3G4<;SE8X8~Q{;1QgCmXnck#_Pbu2<8VSxX5xzgDyoQ`C9h-GT`p#37eL_~5t zAk3p5*I}I!8sFEbVgC%xm0UG}8|Dt_SpNi0r1-*#LuC$Xro;j} z1hyBi)}1LamH~+@_El80Pr&s~6Q#NVHG$2)TdDahBPym_e^2r?L~W$f>uO($3@vgY zKf$~1nGz?`3n62YRQnDy2A)w~ZsJBOH+g0QGihNH0LRL}`)Y~fU6|q*{uSW7qUZJ{EkXso!w&wK_4ch~JEY8z@x?=vq@GYN~$ZLAYoL z?cDqvXSJvw&o+qe%tlEwvQPjW{8GsG%!2NC!ssu!1%=o#Z)O&c>rNV$UU=jWqNit2 zg?w>;7!GCc{clP{dh<$ePA^J)k??(ZX4!k>iQJl41_7}X~Fi?SEiF2B* zVJ8`je+#B$rYrwqjl5ktYjDLnwP0Ww@$E8ZjVj{4+kYZFs6JJa1W8=($fH4__>L<2ze}d! zQ@ ze{K0t`H*QZWG;+B(7E=n?C2+sx#+w{)n|&oJT?R>7w~Kcg_fG6XEhvi^jC4)`!u_~ zu=$+ZMe*A<$dHt-0CyphONtO_*FnoY_kk|A9g+vqhvWKO(96>>80)egQ>ebp>suy+ zh(j%Wx!tJ^o$H|!M1d13gZrki5ZK_tfA$Ro%$xoPI|8}6k56Evbl(3@uAK}0s+#?6 z4MXx9lmwu}26B_y@SnvSMA^`DK)>D|t8893+Z<46U+9?E60FTo_FT&p*+yEFkNFKV z07?{a=P6SyFPB_u=z3qGuU;YZtaLC41%*@(Bb@`6nR02NK}(h=)UaULb<(77WHt<>=S!y?jr#hK^M+apkVmG)q7IE&CK(*t|R3J(z zDc@%J7Caz>aLquR*+iNYeMZqkE=ruC1a~8Ic0+>7!vTSW#P^KwT=(4(Cb7cV;EO2U zk6^6wx}~JbC_YMska=)XzcN-He--nJ{1by-7rI)4dv50?apkc8MYzMg_{+hUiESl! z2ulnMSAe(A5B)CUg|7gl0h3T#*x1Ed7o#FMsW}n5GdIsE1Yk!=3 zCqdc^Aw|>zcl~d~2{N;rZ^9yksqrN1j5(ld|E5CP#cCGub!=u4lnf1Z0VP*j(LDPu zY|Wy-aCI+aJd^it`&q~PN)>qHWyI49%mu=|$StAC*8PCT8NTHEksc8oEDA+7kmUXQ zKo#+7czWt1Cnp&T;I^E>BcmsKxPNaH-^Up=EhSuuAwC3KV*jPjv5k4aR#*q6o)8>% z`|}Sf0Rqr~K}=X>RVsHLv;Ga4i#3tc01tQb59%bek2lbQa_?K4~#QiK|Z*yGq z>uC6Wo>lYUCzPPV4wY)r)t=l#3ImD)3V_eEHUXwIq;H0ss*01F79JJ4@WvLCk9!T zrYGf|RWQ9BUg=pB(WkY1{|^KD#b~CdWr(vuH3qNcH3 ztxj?Q{DZ@*|3HBgU8Y2zPk*VE8ioEY|71p`ND)^<}CWZkCxk$OA0F`-6p zIQIS{?ta?;3l^N#(D*a;755PB7p;(u-TDutGSIkq`d1d8j{+BZ_`CinoV}e+Vjo7> zW%`s7^d$fBsoNS=gOm|BaxN=e@rpowc)DnhFr6_v(A|{agGGQ_6`SPDu-FYqCS3;S5a%|aJ&807gt?HS~q&2 zqAS+8Xw7Q0z0QGNAB>~3Dwz1I2~_tTiE#%fT%_pAxMY+l0B9$&*H?bC(BjaDS^<36 z$45WMLtKc|(YMrDLw^{^2JXBsTvcW(9lFQ^Gf`!vGx!rljI4=H3)fT6@%zsBXTw-4d_fB>ozW+?M zp<|w&xg&Ea-G75u^7puZ35H0X#w}O*>^a&Za7$y6U;fSbBJVrW$nG5P?6;?%%Dml| z`Ew-76JV#tmO`SD!;;~R-TpXY@X+*^fa~_hq$COk>33^1*fV4Bf>2#U;pS9_M@N^Jzlt^#J=D#0^ld$D~PZX=+8{oooH3->@G%aUzq30 z$Q9LcGYsP1K7JSv7*k-fKq_-6Gc=BIEM2DbGbV^yL4PlC4ZYN|Hr?uRt`MI=z|Jxy zKm8wiHYE9S3+<<1e2R=!*aEa-7gV(Z<|&Rov|kt!SlOqz4CiNCv!RkwJDph`?rzY+451^c z)jB%aygWoi%4^&<;#O-pA|Z^^2)~>JN3P&KcYhhpFgJ5@`v#2cE6_SC{oz_RL4>u| z%JCrcVo`glp`$-2r?C%=+0h1}!zqLSS*7|stkm9e;@^%nILl#+pq!6$ONk)%Zp1yfWO@INi<;se5H1U@k8bGhXxz_wUQEWJ#oNkxINx)cq<#{#qQWA8?B z3%%%z`3m|v-2WJ^&gl_$7hK!yUvbSwQbb1r%`dDNmIoiPRHv-8SLZ1I;Gf%6}>X z%F<}BsoDXbb%o8YRZ;_O)pa{7c|`?yZ83DZMLARsbyle}a)QWq)jslG#M05ytd$|* zyxE{X(;yj%{}&qiFEZe42)LYMP)!3(8^dm%tybZ<7E~o{B4-EhNYRwhX`+~?wf{>M zDKwYvn}pb8%Ql(Ee>`dn1BXC3A%E|c%{iIHs(%L>&geDZ-n__bc>ryW9Qk@vkc*o0 zm@YdbwDgX@hw#LKJh^^C(iMMC2C6dfmq>W-&!*G2?DF@;r_0xn{5|ulxkQYol-@tO zAS~=ZD5%N>&nr1iLS?q8o1x=SX72^A4)n8m(Hy25ffPFtL&`q9*E151n}34Amc9jI zao+&EswX+ZDn(TM<+Pw2CqS`=G6@X_W_JHu`@{e!&Tvg?;_M>}A)j-DYVa*;GyS#` z+N`;wvB}@O3yAQtL*7_zeHZT&<}PNG&ILqcAt3cjdapoZ_sO0_~9| z1cIs2Jf}IQ)3J1AUS5QyvwvSHV{RHTR?mFKA`zZQf=CPFb#35I&UumyL!`S;Pe`W7 zV>gV&C&Sq|pU5~=Q|M=6%L#KRBX`DlA=UM5(fpCcjFV2qA^qjalFWBv5uCl48N5lp ziiYS!?SUEXa};phd!)IIX#RHv-O)B-a`xg(n{l`>M2RCfi^?D_<$p5c#2^$cG0X;X z_NojjmJO>Q4Bmo`@NcLd?QXx=&tys971~)XCv%n^G9EY<2u);Jccg$_#;@#gsHAQi z;+3GY1+c4GxN4?uaD4^OXL@g0P=$jN~I}qsZHJoJ2v_ zQqnEd?(rv4Q3ydPp32F|CHDm0`+w02*%%%-yWqR_ChSSZw}933d^{1GOpOgKaWwRB zDmvV57=KUI1?r#K$0APSgi;~sijhkinNW1w_yP)kKG2|@6Myl_N;_B_WNwG4#~pl9 zp_||!8Wi4&u&O#UIUy~SObUwx74a6QIrC_QZbAFHV>M~x(eeLWmRkgITjfYn zZj?FYPJ56IRjI^>9(%1mncnVAine8Jeig#EKzW|qhvV8pzXw+JwCIfk)$2q#W80qm z#%rs$4}ndbdw;f&xeB^6%I5B`a`yzw!-QFzsrCd8&t`IgBj~Ipk(}Y?QC<;kVto&C z#a;ty&k%wgCZ?QgPIyL8~EK}hSM%|)+7wQt?xFFtEoh~#8^ z|G;u;gi9j)ZYX*p7XV5YGtuC4@&o3!XIM8R9kD5n@e?)Brw~_FEmB6*WWMJdJcp1W z#}Z3*{kJm=G78u{2gQwcst9mWKOS-3353m?{eQ^fdLR+<0AuBGyKyn5u9{@E0h!UO z;iVqcfc|Jar5|;PU~N6_HV2#rPfuw_#&W0oyqL7&9l~yTT-{Jzps`8!P72~fS87X_ zNCy-gjuj4(#z**ZENrc6NZF%OI*zb|H=`w2s-bSFk23z^qiy>91_<e1=a#ljYd^0xW$F`G|vP15GSr<0m)beqp47A@B z?oZ`1^>i`_Ea*XSnCE}N24BS0J`UcZX~_<;K?~C$P0mmRlxmqy+3Q|QrZ(lFqDdWU zu3RKP7p{mm0jkZ2aX+Mo=EOo+3c8-na(_VXzfStx0?8nIlGxN>EBt7<_)R4OU~m=0 zj_$vq%0wnb%c432;d~E1I(RLoZE?oO?y?k`eQT{m<0zRGlJ}m7r8x9K;<#xDEo}uJ zWzUxT1?`c*qToC=hf-X;x z7jtx+T6*MVIZ2SP%GFTyDi|p9yG^i_iZZ1@0r_T!_PU2%LpL`6AK=F(u2O`)D)-(^ z>0zbHN#|HV4rrIWr(k=A2PgsH&Hd*6$91VyuX7VRA0rj;-Uv)#wa6Xv4S)4;aI?#*i~Z#9L7jZoC!X+^bNV{V$dz_f@z}JfdTN~zgNr7 zP=ku<3#leKMeI=wV7Lk2y+u{=%+jd2IjfEJ3e-*d@K4K*pH581fr z&-3QA{vdT5sMzMHMdiGGNyH6q%oXdd`C++I>zx}P0{hSk(JV}Z2l8g$IYwXR-s>d? z&5#8UlJjp;@z^B@Juk-g&hfx5%-4+~Ea}1+s^7pNX@Zoo0*(sfGk+?a>m4PzjLFkA z3AvGaV$rGj2bhM+aX5iIknfi4?ERO7JJ?Pi286Gmk-^3b1u4m3*c@6TF$6p=Bl_Gm z-a^02>qAgLPw8U3CXF1x50*ZT%GO|?7T&S+=lF-KVY`LJt}jfQ4Gz+FmAD{>2PZJqiIGxGz?)wAd=>3Eh^{8O=Iyq ztaw;dboz^!LK4vyX=OBN5{ryS53jNx0}#*WS*s^vr%Ob>r@=SYh1&Qm-$?tL@Y5ic zNy91eAe;ldtHGia(-gd=eCc_3plW}Fu9E|$Ty5p*8va4C7sO_@GXWX(e+=SakBKpKuN_F6GR_OONA?=j(?`V_zNBuuw*L6i`3J60zR6PxpEDE4oMuAy87)gx0bB;+dGcPi5DM@ z2s?GqP*+#BF>4YJ4EW(6aES?ko8}sFBFAWGiv(7#mAWbEIQzBswY}0r)semU4zKp_ zTBik2CVN3`3%Vl1mU}IFo18trAnsbM|4#-kZKF?^P=8W!36avPTu4>6xWpU(jEv@j zs@qHQzFMP(IRhx83)&T4=M7m_$(SaWd(rUUv4=Q~@dZ3p@qft^)d$Qp;BZGM;pOS< zeL!+3|97pY=Z$}lObbIri#&n(xhCK21S);FouPFvVfeJN|G%i&fEc;r!jrFDcQ$DV zXNOY_q~ zujtp$lvYREBl843JyWx?ZY?8Ym1M{uCZ@$+8|YnRtK*S^ko&iOPH}5T^&cgPDH&Nz z0JHse{RowioeO5&DJGvf?7#g>T=S)TL?Rrefq&p}qF4a?Uyajs9DTeIC|=91hA^c@(dM@)c(MKWW7|xtTc@dn1FcRnenEQse>EV#x=<_ zA%CJ}%)Vb52jIPNTPN__&l=>U~MNK0~>b zV~Zzrayu5I$tN(jVHUG5EO}sq?MVGvbF|u71uY$PnURlCK60DsfqLU_q_rsB`z%-;_cbu^QjzAx8G&tnCf zNfx3w8y6rO(sftXMd$xGQi_pB^#aR#lV?J7y+P?Xy|Ja5Iu3*;5r7qvb?y6)wi2X2 z<4P^j7e17JBIW(%9T2Kx$AiM&f{V647#deD2D*R#o#Et6ZEZt_K35>x*Kuq{{ zNsZXqfwv*HvH{Z|Bmy-nDaZgxOZuu~JGTDmjb>88ZHcJ}F$h|G7ZIt9+cUrt{}qg- zTaj}Ylxx1WeVRpJYhGAigtX>o_kXd?{@2BTiOS0ok$U`j_dq2VB?554p~v!K^J{92NSzitb-@dN$ti$vyav@Ywz187g{qNjfpFhZzwH1U|(4}rzW$0|5xslAD0E3{+U zKcy(BGR|wK+@`dw{BSG)A->a0`(74at8R*NpJs%cV@?bg=BUM$_23pI1%FmCh{NSz zlA-;qas>8&0p_z9MlwQ;5;iGqk{83F*@!yPsDNd@+(m@EB5E(KfJ+DWeguJ(92(=d zfNgH)06Sf=2|}!fq+YHLQ8$bqym8WU<4v#62^;;Im)5w`(IgV-#=9NkSX?lhzmwdr zA-1236DH761I3Dn5a*GiVt>yKkhBMnYQ5tzOtQ6X!$h&vrY%L9`U9RtR1Bq)mzFY^ zjpi+q5yBh$6gMKfy0=c3k`h5XHSshSq1VG!sw{NX;Tp;+tn|iK+^2xE%kb1 z23T1?9o<&~Hy*Xb>41*66kN_N_PTHeT6n&!-+2*fp#^=tgD!>$@qg_1XD47_6VKk$ ztzsYG3k9+Z$Y%bj@45zEkM{=U@b_J6&RLe_?wf-uYMoG1>h2w#eY0Z_HbK(s6mDSd zA$<#VW#(6JJMZji@~&G+&gPpa%4_*dGIaPX5C~3V_O@9GgGkDm{H-OrVmeB@f({DY zgbo!N<0A7HM|J2p$bajV%9CY?(&9v{;1!|?X!Gdu(a;{1lES7N{ZQ{gWH*O9V(S|E zJ4bmNawnXIl@U}Q+cCdnW8{b-DgrDytA0YJ^D!0^0$cRD1L2Uk)G6TtMf}z;$*9nl zoji;HmET0>`5Ng-5KXF^PW1Dxuegr(#ETzhgl(y(M1@R-={xfv{99q_aRKoZdDf0=U;74 znLh_vVgrre(QEtRd~mM*M3?w$!*v$>i@d!O;H-53o+16@avGvH&!h+95(@Oqoe<+JB1 zx7R>%<$nOw9gA^F_O2z*mw5akke;XWm@dObn~;iTJS`3H_|7vsRs2ccqIt130K*F+poe_TD3#U8++q zvFWZ1c6yy=2#fH7H3;N#6`SD%`)455Bu2#l8h=teV<$>fqp$6MH_!W`{O-h%!5-eC z9uRk#hHlnJ0X(3ZvK*B%d1G|ILFAkjqv_7x|dV)-Oq%Oo06CfNRyM2V`cy z<*FqK+;J79UD7>oFd0D9Ic%kT?w$qSKC4xg!{ROzE1@kp%Dp-J^68Ejr2UD7&VR?W z4bsIS_S>s!+og~R`m{8XG}!Dp-dfKGC!m^k?yF25RVb}UJ}F3tp;xi7fm`P7!rB^7 zhSHbX(^&(iGYER>Dm)$7_gE{9JNHBz2{o}lo)rNIj{a{t(}Mv%NnyA=UbXeKGh@cn@?@Cm%*f-QXvsng#g<&Hi7tp2@^9@f?-Kk z_>HM`6CkAT4tOJ}!ldgjn6jU`4c#q9f3k?+PjtPk+?-ZYkr4 z=ODP`XgQ%ig?9=3Jk2=49Bu3eNq@t)mow|&mb~>n zQEgjWXOg8BZ|*$y&Qz{(L9<&rUAG%RT58C0#U*lgfHUdCXhfMkt+J>ytMhKj(rJB% z)nZCr6Ob$6y_pqxsv_sYbJhXAd4R19alsPxSADu}|tARG*3V&3h0doUJrAnRrHn{PXwK$SYah2B>*CNuaM4ul)gi!-oEd9J7btFg$s9) zO_t8Ap)dKW>x{h$1ae5st**4UB#G89A8e(VH`7=Dkjd@%?0*I3@0mP6Jhcl@h5Gac zm4W2w8sIh+ThKu#Rv!z$4vr`z>)<>^Ifo=lX$Du9nOW-STXJDn@W?{gCRD|F2m3Ma z?s`5Sb;HZGt#1z4wl{#D>~Go3XqOx`e5f zPkYUclcu4^NPnQrN|2VI*GZb+O1QF}c@rQ4Bt-3Jw4_^`1h1g5fv037jqet5N7|jtsG%taDgerUb7|kBLJku|oZE)2M z8?XXJ9UQLqk3tOK`=~2sliw#*Hch_YXg$W6j`Zx}Q-9~Gm{3E2sFEtCEU_d0hptA* z(UZw+!P2lqTUqVkXSvhnPfrtn@e_I9gFQau#>rHItrPmiu0+{AnIN6>}MCh?$zH1DN57HQ|D7t)#r%iuC$!G!Nz+j?_|@G`>*E7QW_oQP;Uf;eXBr+u#`U^R}9?fK!2n{)T@L_qml-c$4;; z2!+#`trrUr%a48iK`3r25V8{7XTgu{cQ}|HW$L) zV%o#oIw8R!Ohc*oYMZv^_nzU9WUQ z!r9wO0-Jc8{2adWV)_oA+le%PcS}DTNq<@3NKK?|xXdJf59Mb#{`FsoqtN9 z1(UEX3a=xHz5qjUmL9sor?4MRkQ8%y#We+-p{XwQ6%2(hN{fpaDK7%**|xK4c_>)j zw7RioRVCnitiy_69z)<(iBFB1%z|bbe&Tya7R#0QTV9CnAKQiy=F6MDBM0u-Qr1nX zjjc6U88|Fl=cI#~^r{+cFi3a3e}AQU>A({%AxmjvA1Zo*XyCoEIJLaL(J|PP&}K2G zmA$cOj__|odVeAbn#W9Q7n6D&;ITES8%9g%B9<&RSzHu++EyBDhy&9mTp@V1u*Nvn|P}s)qm)*wDbu% zb>G=WbJ@pRpD2gr;KwsknDL^;aIbL;fqB{l7IrVbv)8DSG`J&7ioe@-U$$VLY7+a@ z1+e(FRM&6(i1GI!1KQvJ{fs(DYxK2N`^G-}k>=#h1`r}6#SQ!Fz zGGH>PvIYKA)=Rabxa%R9*Y;1AvpT8tp?KtFxv9XA&CN*Klg=n?lkOuY=1%TZc|Q}N zn}t!}>V28;2i=k3H0MZQROCeR?V=4xHp0&}eY-1L)W%%8cl$A4Hm59p5d?us9X zjl@cGXtulDzed|tKZcAEWC9{+piT>i@ANGxM8m=-&q`o1==s2A_0Ay5m10%0l2;D; zn1<$ykyk&9f>H%+H%Ny5H>->t1(9VxBcs}Kw5{TC$ed;Vj9^Tr>KyRpwTrId=NUT! z;Tq)m3vqJ}afEGr*nfX8MiGPg)omg$<}FJ>%#v|59C1(=>pzmr$#O$Y%SHUZe-P47N_+Hy+7U}>jzd2X5Sh% zN~H}@GV&L_D--!l=?VGv?eY#U)Krz4yoBJOxf}k8d{JYB{(qsSmt)Ubo_?eDl?FoP zdcy^$iK5q;#^f}vJ)5{$$ZsFB{2nMPt><13UIhK)l=8!7cOevL38}e7#wCK>a5uK1 zZx@06YITJFbLcjBUnI<%W_vHM_O&FKpBE2rXe%1 zkuo8i%FEcN^@OOcC?Y|y;Zp{7xB+ZQ)_uaqzh@LgIDf0I5gAEQvo&JWpg-3RtM-^7 z_$Wd{3^B{LZ}Q3#TugfS6AjJ44!7>LRuk9N?6}pVS{q9&Ow{RgF6o=*a1V2bZrozj_LWqxbX-OiRsih+Sw zsQd8`5{?=bK)m7R{wOK>0rlE9cKs}lsOLV8YWSy){Tdv-Yvk1b$6g3CR7?ZTdwO4krB(F9b@a{G*XG?UamEz&vk&NCHR9Ik${Nmaif&2pL_Iev*cgPD>2}OQc5!)1) z8-L@Z=R*b&AK^v|m{x=|`Pe73e?)46S&lf9vwZ;ym2l;t2!`O^gXPHS&)i^vnU8b9neC*P`zf7y@_;| zZ0--jQTdVcBUgH$_8Ue&M0H-Ea|Z9_?tkKWx6z2tBuL4f2I+V_Z3j)z>w3Ntl&vMo zzNJAaInAC_ypV)f*V%fz-a%z}Q*yDq^dT(&Ef&QwiW^drqFfx)_a{nh+LKc*{49Zk zYM+<>EAD&LPRl&}1mXw!!!8>yI^s{`}a%0eYuo!ZH>!dQxE>Zg%qNi(k4)qm+z z*d19`kt4tZX0m-VCbW_pvj6!vY+p!78O*z*uk9i> zIq;!l_7^iXEHGJt!l|<5qkNE_R)6UEjG<)0M{xeZ9_pr&%=d60!hHr??r{qoh>wY? zIIvb)A(w<*Qq!+QX}Qihzl2_6u5)RZm*fQRI@d13G(sCRHr2$f%L#1!Jg_S>JR=s1 zft*}iCu$=E!FAPBiNw2w5DuZ`!J-Is4B-QkBQ;kl!yfy-*x{vKBw60v<$tOWA=)go z7d-5XazdckepLqX0<$fyHz>GQDK}d7hJV+mIhV+#7y5pP2JzlYnlIM|lIQbY+qeCz z?2vBHrPn@G-l7BVtBoNd3gIrK7X8^0B3KvQe~mTsrCt$|!u&YR3=4tLXvn+S7b9=kMVb(EB7%vveXBDqF=HP&YOLZML_<> z%bk~hVWcd@0qY&9mf*kiw1?ZDZX>v_txhyW&H97W1(RdDi zAbZWq_|y`DK;SJ5yghSg3cL#G>O!s4)1{gL9uSPQPFsRGeztX%=l3Svt~uRL-XcHK_e z-8ctu5o^zPI|P-A7Jpq=Bx$ZOiss}Di0~NncOMD=M%l5MjxsH8r?Xr4M11iSrqyev z-Xrx?0(_a@qz3viaHm)(J|J}DzRg(FYACN?Gl-6ANOy$L*`moQu$Xw^VJBjKUZ%fboK=RYCO!#DK>xxzkll%hy*Fwx1iE~dIZ+DEfLJLtB*uQmok(G}2Z*h3m~#`%d@UnTI1K%MJhQG{4=YiH`P zLk`9{LX@zy)Zhur&QYq}@Gy=XE3{)edgH0qc)$*uQ-b}GUSN#}pw81(7yKmKS-Ps# ziBO$lmnVnPp?}!k=OzUkDjMI!t%D{3dAVcvMzw z8SaMZ%{)gTgBaWNAyotHJI3XB`=02={6s7JSqV87!hgtwj7Lva8g$)7oLvz$D0Tm( z=I&A)X=-()bJCyh*;Up7+roxx7=frf{l_nRXcX_J|3zBh$9DfyBq$^TQWtFg z4iv#pE~V@QkkbaJ9OX*~81-2|&DrJ?4_akmar3F|UCYa{WMQeqR@5A~rV;}#PG&=| zQ~6>qCVyw8$G3Dp4q3=DUiQoVq7lxCkUGYk$6ALI(Tusc7OFiUGSQUkhc1o3v(`quBfN=7c`b? z-%-1FA^LNMNGLJ1xU^0|y~HgyGy|{{Cvq$s^q)pZ4h%wxzc%P;8Q3W(u;*N>^hQ|% zD5!;AF%9Cm4ZoM+?S#PDy>~<$ff0#|b}2p|e}uAQNR90?gicQS{9SHrTPZ>DW=IRV zdw*=u>i_yr)w_IX*0;oYUB2(5UxV2W@q7F=%MyiV0u!ou`tJ+OdKO8#lK~@(^bIr{ z9XD77+tJ(Gb#g~f<}-%EMXVvr8M&t8RkYa(QY89ZUisBF!BCM>cr)T?9_2IpgqAiV zODq+GpQgU!DdX%C>RS6SMW2~M8U-B}8GoUfFyUQfTX zrYm*(l#X)p=@Oml7!VH=Ne6wIZ{A_$&Z36g4Y*+mloc+>3;bO7y{{aBhBoCV?a)dX6dT39ZKH@*Ue>QHykkTe#tm5Xl@x~SZ-hc5*;J9A- z?4!4ZM3cFPQ@rO~T^!W!`fafm=duieCDj29Rc6d7oFEY&d?XNs{$qGHMT;b;-N)vH`+0 zUaITDae9ZgVnrp?dWUC7?0;zwDi2|#d?^|PUiff@)Hqt-s}n9S%10UCKGoWup5YF+ zn#DgwX}2s%l3m+5H)5YX;`V;uPi^B}2*n?xeBlbTHi>|OEle&Vuzu88a1w^(if_T| zznhZ%Y=k8NS}RYBz`RLs@-5k+LMmTiBbs$Pr25r5>uy54Z(s9Jgrm24I3N8K#9c`e0U zq+rS3B*}hGl$oUbHh*xB2x0FcRR)_hG%M%NjG65{ZR6K zhg`6{^C0uU#Hp{DS!VaZq<+P+JnC<(UI%3 zHocl8AHB;yyN`(crta}1O{B>$PUDFWMa}Tzt4&f9=@z+fvzBz)_HRFKyB0BGUV+8c zgEm1F$Jv84#_xYy^9QlH(D@H}mn1^93`J~ti0Ghvm4@&>N-|8aXdJN@oXGd$-E~8wj+<2pYD-WK WWr--8h5z(38aA`RCs+!m1{Qi5-_bJw diff --git a/kms.c b/kms.c index 3287013..fa242b5 100644 --- a/kms.c +++ b/kms.c @@ -42,12 +42,13 @@ const KmsIdList ProductList[] = { /* 013 */ { { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } /*"8665cb71-468c-4aa3-a337-cb9bc9d5eaac"*/, "Windows 2012", EPID_WINDOWS, 5, 5 }, /* 014 */ { { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } /*"8456EFD3-0C04-4089-8740-5B7238535A65"*/, "Windows 2012 R2", EPID_WINDOWS, 6, 5 }, /* 015 */ { { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } /*"e85af946-2e25-47b7-83e1-bebcebeac611"*/, "Office 2010", EPID_OFFICE2010, 4, 5 }, - /* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013", EPID_OFFICE2013, 6, 5 }, + /* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013+", EPID_OFFICE2013, 6, 5 }, /* 017 */ { { 0x6d5f5270, 0x31ac, 0x433e, { 0xb9, 0x0a, 0x39, 0x89, 0x29, 0x23, 0xc6, 0x57 } } /*"6d5f5270-31ac-433e-b90a-39892923c657"*/, "Windows Server Preview", EPID_WINDOWS, 6, 5 }, /* 018 */ { { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } /*"85b5f61b-320b-4be3-814a-b76b2bfafc82"*/, "Office 2016", EPID_OFFICE2013, 6, 5 }, /* 019 */ { { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } /*"58e2134f-8e11-4d17-9cb2-91069c151148"*/, "Windows 10 VL", EPID_WINDOWS, 6, 25 }, /* 020 */ { { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } /*"e1c51358-fe3e-4203-a4a2-3b6b20c9734e"*/, "Windows 10 Retail", EPID_WINDOWS, 6, 25 }, - /* 021 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } + /* 021 */ { { 0x6e9fc069, 0x257d, 0x4bc4, { 0xb4, 0xa7, 0x75, 0x05, 0x14, 0xd3, 0x27, 0x43 } } /*"6e9fc069-257d-4bc4-b4a7-750514d32743"*/, "Windows 2016", EPID_WINDOWS, 6, 5 }, + /* 022 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 } }; #endif @@ -64,174 +65,201 @@ const KmsIdList AppList[] = { #ifndef NO_EXTENDED_PRODUCT_LIST const KmsIdList ExtendedProductList [] = { - - // Windows Server - - { { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, - { { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, - { { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, - { { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, - { { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, - { { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, - { { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, - { { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, - { { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, - { { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, - { { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B }, - { { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, - { { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, - { { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, - { { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, - { { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, - { { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, - { { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, - { { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, - { { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, - { { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, - { { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA }, - - - // Windows 10 Preview -# ifdef INCLUDE_BETAS - { { 0x6496e59d, 0x89dc, 0x49eb, { 0xa3, 0x53, 0x09, 0xce, 0xb9, 0x40, 0x48, 0x45, } } /*6496e59d-89dc-49eb-a353-09ceb9404845*/, "Windows 10 Core Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, - { { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, - { { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, - { { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, -# endif - - - // Windows 10 - - { { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, - { { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, - { { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, - { { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, - { { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, - { { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, - { { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, - { { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-76ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL}, - { { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, - { { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, - { { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, - { { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL}, - - - // Windows 8.x - -# ifdef INCLUDE_BETAS - { { 0x2B9C337F, 0x7A1D, 0x4271, { 0x90, 0xA3, 0xC6, 0x85, 0x5A, 0x2B, 0x8A, 0x1C, } } /*2B9C337F-7A1D-4271-90A3-C6855A2B8A1C*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, - { { 0x631EAD72, 0xA8AB, 0x4DF8, { 0xBB, 0xDF, 0x37, 0x20, 0x29, 0x98, 0x9B, 0xDD, } } /*631EAD72-A8AB-4DF8-BBDF-372029989BDD*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, -# endif - { { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, - { { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, - { { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, - { { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, - { { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, - { { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, - { { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, - { { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, - { { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, - { { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, - { { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, - { { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, - { { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, - { { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, - { { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, - { { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, - { { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, - - - // Windows 7 - - { { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, - { { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, - { { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, - { { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, - - - // Windows Vista - - { { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, - { { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, - { { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, - { { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, - - - // Windows Embedded - - { { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, - { { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, - { { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows Embedded Industry 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - { { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, - - // Office 2010 - - { { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - { { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, - - // Office 2013 - - { { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - { { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, - - // Office 2016 - - { { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, - { { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + // Windows 10 (Retail) + { { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL }, + { { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL }, + { { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL }, + { { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL }, + + // Windows 10 (Volume) + { { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise 2015 LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise 2015 LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x2d5a5a60, 0x3040, 0x48bf, { 0xbe, 0xb0, 0xfc, 0xd7, 0x70, 0xc2, 0x0c, 0xe0, } } /*2d5a5a60-3040-48bf-beb0-fcd770c20ce0*/, "Windows 10 Enterprise 2016 LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x9f776d83, 0x7156, 0x45b2, { 0x8a, 0x5c, 0x35, 0x9b, 0x9c, 0x9f, 0x22, 0xa3, } } /*9f776d83-7156-45b2-8a5c-359b9c9f22a3*/, "Windows 10 Enterprise 2016 LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x3f1afc82, 0xf8ac, 0x4f6c, { 0x80, 0x05, 0x1d, 0x23, 0x3e, 0x60, 0x6e, 0xee, } } /*3f1afc82-f8ac-4f6c-8005-1d233e606eee*/, "Windows 10 Professional Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0x5300b18c, 0x2e33, 0x4dc2, { 0x82, 0x91, 0x47, 0xff, 0xce, 0xc7, 0x46, 0xdd, } } /*5300b18c-2e33-4dc2-8291-47ffcec746dd*/, "Windows 10 Professional Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + { { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-75ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL }, + + // Windows 7 + { { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows 7 Embedded Industry", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x46bbed08, 0x9c7b, 0x48fc, { 0xa6, 0x14, 0x95, 0x25, 0x05, 0x73, 0xf4, 0xea, } } /*46bbed08-9c7b-48fc-a614-95250573f4ea*/, "Windows 7 Enterprise E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x5a041529, 0xfef8, 0x4d07, { 0xb0, 0x6f, 0xb5, 0x9b, 0x57, 0x3b, 0x32, 0xd2, } } /*5a041529-fef8-4d07-b06f-b59b573b32d2*/, "Windows 7 Professional E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + { { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 }, + + // Windows 8 (Retail) + { { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + { { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL }, + + // Windows 8 (Volume) + { { 0x10018baf, 0xce21, 0x4060, { 0x80, 0xbd, 0x47, 0xfe, 0x74, 0xed, 0x4d, 0xab, } } /*10018baf-ce21-4060-80bd-47fe74ed4dab*/, "Windows 8 Embedded Industry", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0x18db1848, 0x12e0, 0x4167, { 0xb9, 0xd7, 0xda, 0x7f, 0xcd, 0xa5, 0x07, 0xdb, } } /*18db1848-12e0-4167-b9d7-da7fcda507db*/, "Windows 8 Embedded Industry E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + { { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL }, + + // Windows 8.1 (Retail) + { { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + { { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL }, + + // Windows 8.1 (Volume) + { { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + { { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL }, + + // Windows Preview + # ifdef INCLUDE_BETAS + { { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0x2b9c337f, 0x7a1d, 0x4271, { 0x90, 0xa3, 0xc6, 0x85, 0x5a, 0x2b, 0x8a, 0x1c, } } /*2b9c337f-7a1d-4271-90a3-c6855a2b8a1c*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + { { 0x631ead72, 0xa8ab, 0x4df8, { 0xbb, 0xdf, 0x37, 0x20, 0x29, 0x98, 0x9b, 0xdd, } } /*631ead72-a8ab-4df8-bbdf-372029989bdd*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA }, + # endif // INCLUDE_BETAS + + // Windows Server 2008 A (Web and Standard) + { { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + { { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A }, + + // Windows Server 2008 B (Enterprise) + { { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + { { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B }, + + // Windows Server 2008 C (Datacenter) + { { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + { { 0x01ef176b, 0x3e0d, 0x422a, { 0xb4, 0xf8, 0x4e, 0xa8, 0x80, 0x03, 0x5e, 0x8f, } } /*01ef176b-3e0d-422a-b4f8-4ea880035e8f*/, "Windows Server 2008 for Itanium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C }, + + // Windows Server 2008 R2 A (Web and Standard) + { { 0xf772515c, 0x0e87, 0x48d5, { 0xa6, 0x76, 0xe6, 0x96, 0x2c, 0x3e, 0x11, 0x95, } } /*f772515c-0e87-48d5-a676-e6962c3e1195*/, "Windows MultiPoint Server 2010", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + { { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A }, + + // Windows Server 2008 R2 B (Enterprise) + { { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B }, + + // Windows Server 2008 R2 C (Datacenter) + { { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + { { 0x8a26851c, 0x1c7e, 0x48d3, { 0xa6, 0x87, 0xfb, 0xca, 0x9b, 0x9a, 0xc1, 0x6b, } } /*8a26851c-1c7e-48d3-a687-fbca9b9ac16b*/, "Windows Server 2008 R2 for Itanium Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C }, + + // Windows Server 2012 + { { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + { { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 }, + + // Windows Server 2012 R2 + { { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + { { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 }, + + // Windows Server 2016 + { { 0x7b4433f4, 0xb1e7, 0x4788, { 0x89, 0x5a, 0xc4, 0x53, 0x78, 0xd3, 0x82, 0x53, } } /*7b4433f4-b1e7-4788-895a-c45378d38253*/, "Windows Server 2016 Azure Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 }, + { { 0x3dbf341b, 0x5f6c, 0x4fa7, { 0xb9, 0x36, 0x69, 0x9d, 0xce, 0x9e, 0x26, 0x3f, } } /*3dbf341b-5f6c-4fa7-b936-699dce9e263f*/, "Windows Server 2016 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 }, + { { 0x21c56779, 0xb449, 0x4d20, { 0xad, 0xfc, 0xee, 0xce, 0x0e, 0x1a, 0xd7, 0x4b, } } /*21c56779-b449-4d20-adfc-eece0e1ad74b*/, "Windows Server 2016 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 }, + { { 0x2b5a1b0f, 0xa5ab, 0x4c54, { 0xac, 0x2f, 0xa6, 0xd9, 0x48, 0x24, 0xa2, 0x83, } } /*2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283*/, "Windows Server 2016 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 }, + { { 0x8c1c5410, 0x9f39, 0x4805, { 0x8c, 0x9d, 0x63, 0xa0, 0x77, 0x06, 0x35, 0x8f, } } /*8c1c5410-9f39-4805-8c9d-63a07706358f*/, "Windows Server 2016 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 }, + + // Windows Server Preview + # ifdef INCLUDE_BETAS + { { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA }, + # endif // INCLUDE_BETAS + + // Windows Vista + { { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + { { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA }, + + // Office 2010 + { { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 1 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + { { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 }, + + // Office 2013 + { { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + { { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 }, + + // Office 2016 + { { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x829b8110, 0x0e6f, 0x4349, { 0xbc, 0xa4, 0x42, 0x80, 0x35, 0x77, 0x78, 0x8d, } } /*829b8110-0e6f-4349-bca4-42803577788d*/, "Office Project Pro 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xcbbaca45, 0x556a, 0x4416, { 0xad, 0x03, 0xbd, 0xa5, 0x98, 0xea, 0xa7, 0xc8, } } /*cbbaca45-556a-4416-ad03-bda598eaa7c8*/, "Office Project Standard 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xb234abe3, 0x0857, 0x4f9c, { 0xb0, 0x5a, 0x4d, 0xc3, 0x14, 0xf8, 0x55, 0x57, } } /*b234abe3-0857-4f9c-b05a-4dc314f85557*/, "Office Visio Pro 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0x361fe620, 0x64f4, 0x41b5, { 0xba, 0x77, 0x84, 0xf8, 0xe0, 0x79, 0xb1, 0xf7, } } /*361fe620-64f4-41b5-ba77-84f8e079b1f7*/, "Office Visio Standard 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, + { { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 }, // End marker (necessity should be removed when time permits) @@ -260,7 +288,7 @@ static const struct KMSHostOS { uint16_t Type; uint16_t Build; } HostOS[] = { 55041, 7601 }, // Windows Server 2008 R2 SP1 { 5426, 9200 }, // Windows Server 2012 { 6401, 9600 }, // Windows Server 2012 R2 - //{ 3612, 10240}, // Windows Server 2016 + { 3612, 14393 }, // Windows Server 2016 }; // GroupID and PIDRange @@ -380,9 +408,9 @@ static int getRandomServerType() else { // return 9200/9600 if NDR64 is in use, otherwise 6002/7601 - return (rand() % 2) + (UseRpcNDR64 ? 2 : 0); - // if (UseRpcNDR64) return (rand() % 3) + 2; - // return (rand() % 2); + // return (rand() % 2) + (UseRpcNDR64 ? 2 : 0); + if (UseRpcNDR64) return (rand() % 3) + 2; + return (rand() % 2); } # endif // USE_MSRPC } @@ -409,7 +437,7 @@ static void generateRandomPid(const int index, char *const szPid, int serverType else if (index == 1) clientApp = 2; else - clientApp = serverType == 3 /*change if HostOS changes*/ ? 1 : 0; + clientApp = serverType >= 3 /*change if HostOS changes*/ ? 1 : 0; strcat(szPid, itoc(numberBuffer, pkeyconfig[clientApp].GroupID, 5)); strcat(szPid, "-"); @@ -427,7 +455,7 @@ static void generateRandomPid(const int index, char *const szPid, int serverType strcat(szPid, itoc(numberBuffer, HostOS[serverType].Build, 0)); strcat(szPid, ".0000-"); -# define minTime ((time_t)1382029200) // Release Date Win 2012R2 + time_t minTime = serverType==4 ? ((time_t)1470175200) /* Release Date Win 2016 */ : ((time_t)1382029200); // Release Date Win 2012R2 time_t maxTime, kmsTime; time(&maxTime); @@ -436,7 +464,6 @@ static void generateRandomPid(const int index, char *const szPid, int serverType maxTime = (time_t)BUILD_TIME; kmsTime = (rand32() % (maxTime - minTime)) + minTime; -# undef minTime struct tm *pidTime; pidTime = gmtime(&kmsTime); @@ -526,7 +553,7 @@ static void logRequest(const REQUEST *const baseRequest) static void getEpidFromString(RESPONSE *const Response, const char *const pid) { size_t length = utf8_to_ucs2(Response->KmsPID, pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3); - Response->PIDSize = LE32(((unsigned int )length + 1) << 1); + Response->PIDSize = LE32(((unsigned int)length + 1) << 1); } @@ -656,10 +683,12 @@ static BOOL __stdcall CreateResponseBaseCallback(const REQUEST *const baseReques memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID)); memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME)); - baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1); + baseResponse->Count = index == 1 || index == 2 ? LE32(10) : LE32(50); baseResponse->VLActivationInterval = LE32(VLActivationInterval); baseResponse->VLRenewalInterval = LE32(VLRenewalInterval); + if (LE32(baseRequest->N_Policy) > LE32(baseResponse->Count)) baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1); + #ifndef NO_LOG logResponse(baseResponse, hwId, EpidSource); #endif // NO_LOG diff --git a/kms.h b/kms.h index c4542e9..8202daf 100644 --- a/kms.h +++ b/kms.h @@ -252,6 +252,7 @@ typedef struct #define KMS_ID_OFFICE2016 18 #define KMS_ID_WIN10_VL 19 #define KMS_ID_WIN10_RETAIL 20 +#define KMS_ID_WIN2016 21 #define PWINGUID &AppList[APP_ID_WINDOWS].guid #define POFFICE2010GUID &AppList[APP_ID_OFFICE2010].guid diff --git a/libkms.c b/libkms.c index 37ba157..bc1148c 100644 --- a/libkms.c +++ b/libkms.c @@ -13,7 +13,7 @@ #define EXTERNAL dllexport -#define DLLVERSION 0x30001 +#define DLLVERSION 0x30002 #include "libkms.h" #include "shared_globals.h" @@ -28,23 +28,74 @@ #include #endif // WIN32 -#ifdef IS_LIBRARY -char ErrorMessage[MESSAGE_BUFFER_SIZE]; -#endif // IS_LIBRARY - static int_fast8_t IsServerStarted = FALSE; +#ifdef _WIN32 +#ifndef USE_MSRPC + +static int_fast8_t SocketsInitialized = FALSE; +WSADATA wsadata; + +static int initializeWinSockets() +{ + if (SocketsInitialized) return 0; + SocketsInitialized = TRUE; + return WSAStartup(0x0202, &wsadata); +} + +#endif // USE_MSRPC +#endif // _WIN32 -EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest -( - const char* const hostname, - const int port, - RESPONSE* baseResponse, - const REQUEST* const baseRequest, - RESPONSE_RESULT* result, BYTE *hwid -) +EXTERNC __declspec(EXTERNAL) char* __cdecl GetErrorMessage() { - return !0; // not yet implemented + return ErrorMessage; +} + +EXTERNC __declspec(EXTERNAL) SOCKET __cdecl ConnectToServer(const char* host, const char* port, const int addressFamily) +{ + SOCKET sock; + *ErrorMessage = 0; + +# if defined(_WIN32) && !defined(USE_MSRPC) + initializeWinSockets(); +# endif // defined(_WIN32) && !defined(USE_MSRPC) + + size_t adrlen = strlen(host) + 16; + char* RemoteAddr = (char*)alloca(adrlen); + snprintf(RemoteAddr, adrlen, "[%s]:%s", host, port); + sock = connectToAddress(RemoteAddr, addressFamily, FALSE); + + if (sock == INVALID_RPCCTX) + { + printerrorf("Fatal: Could not connect to %s\n", RemoteAddr); + return sock; + } + + return sock; +} + +EXTERNC __declspec(EXTERNAL) RpcStatus __cdecl BindRpc(const SOCKET sock, const int_fast8_t useMultiplexedRpc) +{ + *ErrorMessage = 0; + UseMultiplexedRpc = useMultiplexedRpc; + return rpcBindClient(sock, FALSE); +} + +EXTERNC __declspec(EXTERNAL) void __cdecl CloseConnection(const SOCKET sock) +{ + socketclose(sock); +} + + +EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendKMSRequest(const SOCKET sock, RESPONSE* baseResponse, REQUEST* baseRequest, RESPONSE_RESULT* result, BYTE *hwid) +{ + *ErrorMessage = 0; + return SendActivationRequest(sock, baseResponse, baseRequest, result, hwid); +} + +EXTERNC __declspec(EXTERNAL) int_fast8_t __cdecl IsDisconnected(const SOCKET sock) +{ + return isDisconnected(sock); } @@ -56,16 +107,8 @@ EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, Reques if (IsServerStarted) return !0; # ifdef _WIN32 -# ifndef USE_MSRPC - // Windows Sockets must be initialized - WSADATA wsadata; - int error; - - if ((error = WSAStartup(0x0202, &wsadata))) - { - return error; - } -# endif // USE_MSRPC + int error = initializeWinSockets(); + if (error) return error; # endif // _WIN32 CreateResponseBase = requestCallback; @@ -113,15 +156,8 @@ EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, Reques int error; # ifdef _WIN32 -# ifndef USE_MSRPC - // Windows Sockets must be initialized - WSADATA wsadata; - - if ((error = WSAStartup(0x0202, &wsadata))) - { - return error; - } -# endif // USE_MSRPC + error = initializeWinSockets(); + if (error) return error; # endif // _WIN32 defaultport = vlmcsd_malloc(16); diff --git a/libkms.h b/libkms.h index 1281ce5..6babaa7 100644 --- a/libkms.h +++ b/libkms.h @@ -8,6 +8,7 @@ #include "types.h" #include "kms.h" #include "rpc.h" +#include "vlmcs.h" #ifndef EXTERNC #ifdef __cplusplus @@ -17,11 +18,16 @@ #endif #endif -EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest(const char* const hostname, const int port, RESPONSE* baseResponse, const REQUEST* const baseRequest, RESPONSE_RESULT* result, BYTE *hwid); +EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendKMSRequest(const SOCKET sock, RESPONSE* baseResponse, REQUEST* baseRequest, RESPONSE_RESULT* result, BYTE *hwid); EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, RequestCallback_t requestCallback); EXTERNC __declspec(EXTERNAL) DWORD __cdecl StopKmsServer(); EXTERNC __declspec(EXTERNAL) int __cdecl GetLibKmsVersion(); EXTERNC __declspec(EXTERNAL) const char* const __cdecl GetEmulatorVersion(); +EXTERNC __declspec(EXTERNAL) SOCKET __cdecl ConnectToServer(const char* host, const char* port, const int addressFamily); +EXTERNC __declspec(EXTERNAL) char* __cdecl GetErrorMessage(); +EXTERNC __declspec(EXTERNAL) void __cdecl CloseConnection(const SOCKET sock); +EXTERNC __declspec(EXTERNAL) RpcStatus __cdecl BindRpc(const SOCKET sock, const int_fast8_t useMultiplexedRpc); +EXTERNC __declspec(EXTERNAL) int_fast8_t __cdecl IsDisconnected(const SOCKET sock); //EXTERN_C __declspec(EXTERNAL) unsigned int __cdecl GetRandom32(); diff --git a/make_dragonfly b/make_dragonfly index b1147b0..5cb28a5 100755 --- a/make_dragonfly +++ b/make_dragonfly @@ -1,5 +1,7 @@ #!/usr/local/bin/bash +export VLMCSD_VERSION="svn`svnversion`" + export VERBOSE=3 export DNS_PARSER=OS diff --git a/make_freebsd b/make_freebsd index 318e3e0..5a00dc5 100755 --- a/make_freebsd +++ b/make_freebsd @@ -1,5 +1,6 @@ #!/usr/local/bin/bash +export VLMCSD_VERSION="svn`svnversion`" export VERBOSE=3 export DNS_PARSER=OS diff --git a/make_hurd b/make_hurd index acbd68c..8af05ef 100755 --- a/make_hurd +++ b/make_hurd @@ -1,5 +1,6 @@ #!/bin/bash +export VLMCSD_VERSION="svn`svnversion`" export VERBOSE=3 export DNS_PARSER=OS diff --git a/make_kfreebsd b/make_kfreebsd index 5ecdbf2..4254b03 100755 --- a/make_kfreebsd +++ b/make_kfreebsd @@ -1,5 +1,6 @@ #!/bin/bash +export VLMCSD_VERSION="svn`svnversion`" export VERBOSE=3 export DNS_PARSER=OS diff --git a/make_linux b/make_linux index bf6bea5..fa430c0 100755 --- a/make_linux +++ b/make_linux @@ -1,6 +1,6 @@ #!/bin/bash -#export VLMCSD_VERSION="svn`svnversion | sed -e 's/:.*//; s/[^0-9]*$//; s/^$/0/'`" +export VLMCSD_VERSION="svn`svnversion`" export VERBOSE=3 export DNS_PARSER=internal @@ -88,15 +88,15 @@ if [ $? != 0 ]; then exit $? fi -export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden" +export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden -DIS_LIBRARY" export LDFLAGS="$LDFLAGS -static-libgcc" -make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME - -if [ $? != 0 ]; then - echo Error creating $DLL_NAME - exit $? -fi +#make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME CAT=2 +# +#if [ $? != 0 ]; then +# echo Error creating $DLL_NAME +# exit $? +#fi @@ -148,15 +148,15 @@ if [ $? != 0 ]; then exit $? fi -export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden" +export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden -DIS_LIBRARY" export LDFLAGS="$LDFLAGS -static-libgcc" -make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME - -if [ $? != 0 ]; then - echo Error creating $DLL_NAME - exit $? -fi +#make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME CAT=2 +# +#if [ $? != 0 ]; then +# echo Error creating $DLL_NAME +# exit $? +#fi diff --git a/make_lxss b/make_lxss deleted file mode 100755 index e4d0dfc..0000000 --- a/make_lxss +++ /dev/null @@ -1,3507 +0,0 @@ -#!/bin/bash - -#export VLMCSD_VERSION="svn`svnversion | sed -e 's/:.*//; s/[^0-9]*$//; s/^$/0/'`" - -export VERBOSE=3 -export DNS_PARSER=internal - -MAKEFLAGS="-j`nproc` -B" -REUSEOBJFLAGS="-j" -SMALLCC="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" -SMALLLD="-pipe -Wl,--hash-style=sysv -Wl,-z,norelro -Wl,--build-id=none" -SMALL="$SMALLCC $SMALLLD" - - -rm -f vlmcs vlmcsdmulti vlmcsd 2>/dev/null -rm -fr binaries - -mkdir -p binaries/Linux/intel/glibc -mkdir -p binaries/Linux/intel/uclibc -mkdir -p binaries/Linux/intel/static -mkdir -p binaries/Linux/intel/musl - -mkdir -p binaries/Linux/sparc32/glibc -mkdir -p binaries/Linux/s390/glibc - -mkdir -p binaries/Android/arm/bionic -mkdir -p binaries/Android/arm/static -mkdir -p binaries/Android/intel/bionic -mkdir -p binaries/Android/intel/static -mkdir -p binaries/Android/mips/bionic -mkdir -p binaries/Android/mips/static - -mkdir -p binaries/Linux/arm/little-endian/glibc -mkdir -p binaries/Linux/arm/little-endian/musl -mkdir -p binaries/Linux/arm/little-endian/uclibc -mkdir -p binaries/Linux/arm/little-endian/static -mkdir -p binaries/Linux/arm/big-endian/uclibc -mkdir -p binaries/Linux/arm/big-endian/static - -mkdir -p binaries/Linux/mips/little-endian/glibc -mkdir -p binaries/Linux/mips/little-endian/uclibc -mkdir -p binaries/Linux/mips/little-endian/static -mkdir -p binaries/Linux/mips/little-endian/musl -mkdir -p binaries/Linux/mips/big-endian/uclibc -mkdir -p binaries/Linux/mips/big-endian/static -mkdir -p binaries/Linux/mips/big-endian/glibc -mkdir -p binaries/Linux/mips/big-endian/musl - -mkdir -p binaries/Linux/ppc/little-endian/glibc -mkdir -p binaries/Linux/ppc/big-endian/glibc -mkdir -p binaries/Linux/ppc/big-endian/uclibc -mkdir -p binaries/Linux/ppc/big-endian/static - -mkdir -p binaries/MacOSX/intel -mkdir -p binaries/MacOSX/ppc -mkdir -p binaries/iOS/arm - -mkdir -p binaries/FreeBSD/intel -mkdir -p binaries/NetBSD/intel -mkdir -p binaries/OpenBSD/intel -mkdir -p binaries/DragonFly/intel -mkdir -p binaries/Solaris/intel -mkdir -p binaries/Windows/intel -mkdir -p binaries/Minix/intel - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -export STAGING_DIR=. - -# Windows 32-bit using MingW32-w64 toolchain on Ubuntu Linux -export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-x86.exe -export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-x86.exe -export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-x86.exe -export DLL_NAME=binaries/Windows/intel/libkms32.dll -export THREADS=1 -export CFLAGS="$SMALLCC" -export CC=i686-w64-mingw32-gcc -export PLATFORMFLAGS="-march=i686 -mtune=generic -fwhole-program -pipe" -export LDFLAGS="-lws2_32 -Wl,--gc-sections,--force-exe-suffix,--large-address-aware,--nxcompat,--dynamicbase,--tsaware" -export FEATURES=full - -make $MAKEFLAGS CAT=2 all $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME - exit $? -fi - -export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden" -export LDFLAGS="$LDFLAGS -static-libgcc" - -make $MAKEFLAGS FEATURES=minimum $DLL_NAME - -if [ $? != 0 ]; then - echo Error creating $DLL_NAME - exit $? -fi - - - -# Windows 32-bit using MingW32-w64 toolchain on Ubuntu Linux using MS RPC -export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-msrpc-x86.exe -export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-msrpc-x86.exe -export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-msrpc-x86.exe -export THREADS=1 -export CFLAGS="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fmerge-all-constants -Wno-unused-variable -Wno-missing-braces" -export CC=i686-w64-mingw32-gcc -export PLATFORMFLAGS="-march=i686 -mtune=generic -pipe" -export LDFLAGS="-Wl,--gc-sections,--force-exe-suffix,--large-address-aware,--nxcompat,--dynamicbase,--tsaware -fwhole-program" -export FEATURES=full - -make $MAKEFLAGS CAT=2 MSRPC=1 all - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -make $MAKEFLAGS MSRPC=1 $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - -# Windows 64-bit using MingW32-w64 toolchain on Ubuntu Linux -export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-x64.exe -export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-x64.exe -export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-x64.exe -export DLL_NAME=binaries/Windows/intel/libkms64.dll -export THREADS=1 -export CFLAGS="$SMALLCC" -export CC=x86_64-w64-mingw32-gcc -export PLATFORMFLAGS="-march=nocona -mtune=generic -fwhole-program -pipe" -export LDFLAGS="-lws2_32 -Wl,--gc-sections,--force-exe-suffix,--nxcompat,--dynamicbase,--tsaware" - -make $MAKEFLAGS CAT=2 all $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME - exit $? -fi - -export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden" -export LDFLAGS="$LDFLAGS -static-libgcc" - -make $MAKEFLAGS FEATURES=minimum $DLL_NAME - -if [ $? != 0 ]; then - echo Error creating $DLL_NAME - exit $? -fi - - - - -# Windows 64-bit using MingW32-w64 toolchain on Ubuntu Linux using MS RPC -export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-msrpc-x64.exe -export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-msrpc-x64.exe -export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-msrpc-x64.exe -export THREADS=1 -export CFLAGS="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fmerge-all-constants -Wno-unused-variable -Wno-missing-braces" -export CC=x86_64-w64-mingw32-gcc -export PLATFORMFLAGS="-march=nocona -mtune=generic -pipe" -export LDFLAGS="-Wl,--gc-sections,--force-exe-suffix,--nxcompat,--dynamicbase,--tsaware -fwhole-program" - -make $MAKEFLAGS CAT=2 MSRPC=1 all - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -make $MAKEFLAGS MSRPC=1 $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux mips32el with uClibc 0.9.33.2 using gcc 4.9 from OpenWRT toolchain -export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips32el-openwrt-uclib -export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips32el-openwrt-uclibc -export CC=/opt/toolchains/mipsel-openwrt-linux-uclibc/toolchain-mipsel_mips32_gcc-4.9-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc -export CFLAGS="$SMALLCC -DNO_LIMIT" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips32el-openwrt-uclib-static -export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips32el-openwrt-uclibc-static -export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips32el-openwrt-uclibc-static -export LDFLAGS="$LDFLAGS -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips32el-openwrt-uclibc -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux mips16el with uClibc 0.9.33.2 using gcc 4.9 from OpenWRT toolchain with statically linked libgcc for Asus routers, e.g. Asus RT-N66U -export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips16el-asus-rt-n66u-uclibc -export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips16el-asus-rt-n66u-uclibc -export CC=/opt/toolchains/mipsel-openwrt-linux-uclibc/toolchain-mipsel_mips32_gcc-4.9-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc -export CFLAGS="$SMALLCC -static-libgcc -DNO_LIMIT" -export PLATFORMFLAGS="-mips32 -mips16 -flto=jobserver -fwhole-program" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips16el-asus-rt-n66u-uclibc-static -export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips16el-asus-rt-n66u-uclibc-static -export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips16el-asus-rt-n66u-uclibc-static -export LDFLAGS="$LDFLAGS -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips16el-asus-rt-n66u-uclibc -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - - - -# Linux mips16el with uClibc 0.9.33.2 using gcc 4.8 from OpenWRT toolchain -export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips16el-openwrt-uclibc -export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips16el-openwrt-uclibc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" -export LDFLAGS="$SMALLLD" - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips16el-openwrt-uclib-static -export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips16el-openwrt-uclibc-static -export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips16el-openwrt-uclibc-static -export LDFLAGS="$LDFLAGS -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips16el-openwrt-uclibc -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux mips16el eglibc 2.19 using gcc 4.8 from OpenWRT toolchain -export CLIENT_NAME=binaries/Linux/mips/little-endian/glibc/vlmcs-mips16el-openwrt-glibc -export PROGRAM_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsd-mips16el-openwrt-glibc -export MULTI_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsdmulti-mips16el-openwrt-glibc -export CC=/opt/toolchains/mipsel_74kc+dsp2_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mipsel-openwrt-linux-gnu-gcc-4.9.2 -#export CC=~/openwrt/staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_eglibc-2.19/bin/mipsel-openwrt-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=mips32 -mips16" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# PowerPC 64-bit big-endian glibc. -export CLIENT_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcs-ppc64-glibc -export PROGRAM_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsd-ppc64-glibc -export MULTI_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsdmulti-ppc64-glibc -export CC=/opt/toolchains/ppc64-glibc2.19-gcc-4.9.1/bin/powerpc64-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# PowerPC 64-bit little-endian glibc. -export CLIENT_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcs-ppc64el-glibc -export PROGRAM_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcsd-ppc64el-glibc -export MULTI_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcsdmulti-ppc64el-glibc -export CC=/opt/toolchains/ppc64el-glibc2.20-gcc-4.9.1/bin/powerpc64le-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# PowerPC glibc. Compiles with gcc 4.8 from OpenWRT toolchain but uses libs from an old DM500 toolchain to be compatible with glibc 2.3 -export CLIENT_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcs-ppc-glibc -export PROGRAM_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsd-ppc-glibc -export MULTI_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsdmulti-ppc-glibc -export CC=~/openwrt/staging_dir/toolchain-powerpc_405_gcc-4.8-linaro_eglibc-2.19/bin/powerpc-openwrt-linux-gnu-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program --sysroot=/opt/simplebuild/toolchains/powerpc -L/opt/simplebuild/toolchains/powerpc/lib -L/opt/simplebuild/toolchains/powerpc/usr/lib" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Mips 32 glibc compiled with gcc 4.9.2 from OpenWRT toolchain -export CLIENT_NAME=binaries/Linux/mips/big-endian/glibc/vlmcs-mips32-openwrt-glibc -export PROGRAM_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsd-mips32-openwrt-glibc -export MULTI_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsdmulti-mips32-openwrt-glibc -export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mips-openwrt-linux-gcc -#export CC=~/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_eglibc-2.19/bin/mips-openwrt-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - - -# Mips 32 glibc compiled with gcc 4.9.2 from OpenWRT toolchain -export CLIENT_NAME=binaries/Linux/mips/big-endian/glibc/vlmcs-mips16-openwrt-glibc -export PROGRAM_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsd-mips16-openwrt-glibc -export MULTI_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsdmulti-mips16-openwrt-glibc -export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mips-openwrt-linux-gcc -#export CC=~/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_eglibc-2.19/bin/mips-openwrt-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - - -# mips32el glibc 2.19 compiled with gcc 4.8 from OpenWRT toolchain -export CLIENT_NAME=binaries/Linux/mips/little-endian/glibc/vlmcs-mips32el-openwrt-glibc -export PROGRAM_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsd-mips32el-openwrt-glibc -export MULTI_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsdmulti-mips32el-openwrt-glibc -export CC=/opt/toolchains/mipsel_74kc+dsp2_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mipsel-openwrt-linux-gnu-gcc-4.9.2 -#export CC=~/openwrt/staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_eglibc-2.19/bin/mipsel-openwrt-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" -export LDFLAGS="$SMALLLD" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -## mips1el uclibc with old tomato toolchain gcc 3.2.3 with Broadcom extensions uClibc 0.9.19 -#export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips1el-tomato-uclibc -#export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips1el-tomato-uclibc -#export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips1el-tomato-uclibc -#export CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc -#export CFLAGS="-DNO_BUILTIN -pipe -fno-common -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" -#export PLATFORMFLAGS="" -#export LDFLAGS="-pipe -Wl,-z,norelro" -#export THREADS=0 -##export TERMINAL_WIDTH=80 -# -#make NO_DNS=1 CAT=2 $MAKEFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips1el-tomato-uclibc-static -#export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips1el-tomato-uclibc-static -#export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips1el-tomato-uclibc-static -#export LDFLAGS="$LDFLAGS -static" -# -#make NO_DNS=1 $REUSEOBJFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2 -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME -# exit $? -#fi - - - - -#Android gcc 4.8 with API Level 3 (Android 1.5 cupcake) armv7 - -export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android15-armv7 -export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android15-armv7 -export CC=/opt/toolchains/armelv7-android-3/bin/arm-linux-androideabi-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-fuse-ld=bfd -flto=jobserver -fwhole-program -march=armv7 -mthumb" -export THREADS=0 -export LDFLAGS="$SMALLLD" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android15-armv7-static -#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android15-armv7-static -#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android15-armv7-static -#export LDFLAGS="$LDFLAGS -static" -# -#make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - -export LDFLAGS="$SMALLLD" -export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android15-armv7 - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Android gcc 4.8 with API Level 3 (Android 1.5 cupcake) armv5 - -export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android15-armv5 -export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android15-armv5 -export CC=/opt/toolchains/armelv7-android-3/bin/arm-linux-androideabi-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-fuse-ld=bfd -flto=jobserver -fwhole-program -march=armv5te -mthumb" -export THREADS=0 -export LDFLAGS="$SMALLLD" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android15-armv5-static -#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android15-armv5-static -#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android15-armv5-static -#export LDFLAGS="$LDFLAGS -static" - -#make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -export LDFLAGS="$SMALLLD" -export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android15-armv5 - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - -#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) armv7 - -export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android41-armv7 -export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android41-armv7 -export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android41-armv7 -export CC=/opt/toolchains/armelv7-android-16/bin/arm-linux-androideabi-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb -fPIE -pie" -export THREADS=0 -export LDFLAGS="$SMALLLD -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) armv7 -# -#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android50-armv7 -#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android50-armv7 -#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android50-armv7 -#export CC=/opt/toolchains/armelv7-android-21/bin/arm-linux-androideabi-gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb -fPIE -pie" -#export THREADS=0 -#export LDFLAGS="$SMALLLD" -# -#make NOLPTHREAD=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -# -# -# -# -#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) arm64el - -export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android50-arm64v8 -export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android50-arm64v8 -export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android50-arm64v8 -export CC=/opt/toolchains/arm64el-android-21/bin/aarch64-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mtune=generic -mfix-cortex-a53-835769 -march=armv8-a -fPIE -pie" -export THREADS=0 -export LDFLAGS="$SMALLLD -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) arm64el STATIC - -export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android50-arm64v8-static -export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android50-arm64v8-static -export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android50-arm64v8-static -export CC=/opt/toolchains/arm64el-android-21/bin/aarch64-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mtune=generic -mfix-cortex-a53-835769 -march=armv8-a" -export THREADS=0 -export LDFLAGS="$SMALLLD -static -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) x86 - -export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android23-x86 -export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android23-x86 -export CC=/opt/toolchains/x86-android-9/bin/i686-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32" -export THREADS=1 -export LDFLAGS="$SMALLLD -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export CLIENT_NAME=binaries/Android/intel/static/vlmcs-android23-x86-static -export PROGRAM_NAME=binaries/Android/intel/static/vlmcsd-android23-x86-static -export MULTI_NAME=binaries/Android/intel/static/vlmcsdmulti-android23-x86-static -export LDFLAGS="$LDFLAGS -static" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export LDFLAGS="$SMALLLD -fuse-ld=bfd" -export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android23-x86 - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) x86 - -export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android41-x86 -export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android41-x86 -export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android41-x86 -export CC=/opt/toolchains/x86-android-16/bin/i686-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32 -fPIE -pie" -export THREADS=1 -export LDFLAGS="$SMALLLD -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) x86 -# -#export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android50-x86 -#export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android50-x86 -#export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android50-x86 -#export CC=/opt/toolchains/x86-android-21/bin/i686-linux-android-gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32 -fPIE -pie" -#export THREADS=1 -#export LDFLAGS="$SMALLLD" -# -#make NOLPTHREAD=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - - - -#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) x64 - -export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android50-x64 -export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android50-x64 -export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android50-x64 -export CC=/opt/toolchains/x86_64-android-21/bin/x86_64-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m64 -fPIE -pie" -export THREADS=0 -export LDFLAGS="$SMALLLD -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) x64 STATIC - -export CLIENT_NAME=binaries/Android/intel/static/vlmcs-android50-x64-static -export PROGRAM_NAME=binaries/Android/intel/static/vlmcsd-android50-x64-static -export MULTI_NAME=binaries/Android/intel/static/vlmcsdmulti-android50-x64-static -export CC=/opt/toolchains/x86_64-android-21/bin/x86_64-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=nocona -m64" -export THREADS=0 -export LDFLAGS="$SMALLLD -static -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - - -#Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) mips32el - -export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android23-mips32el -export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android23-mips32el -export CC=/opt/toolchains/mipsel-android-9/bin/mipsel-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -export THREADS=1 -export LDFLAGS="$SMALLLD -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android23-mips32el-static -export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android23-mips32el-static -export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android23-mips32el-static -export LDFLAGS="$LDFLAGS -static -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export LDFLAGS="$SMALLLD -fuse-ld=bfd" -export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android23-mips32el - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - - -#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) mips32el - -export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android41-mips32el -export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android41-mips32el -export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android41-mips32el -export CC=/opt/toolchains/mipsel-android-16/bin/mipsel-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie" -export THREADS=1 -export LDFLAGS="$SMALLLD -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - - -##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) mips32el -# -#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips32el -#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips32el -#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips32el -#export CC=/opt/toolchains/mipsel-android-21/bin/mipsel-linux-android-gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie" -#export THREADS=1 -#export LDFLAGS="$SMALLLD" -# -#make NOLPTHREAD=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - - - -##Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) mips16el -# -#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android23-mips16el -#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android23-mips16el -#export CC=/opt/toolchains/mipsel-android-9/bin/mipsel-linux-android-gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" -#export THREADS=1 -#export LDFLAGS="$SMALLLD" -# -#make NOLPTHREAD=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android23-mips16el-static -#export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android23-mips16el-static -#export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android23-mips16el-static -#export LDFLAGS="$LDFLAGS -static" -# -#make NOLPTHREAD=1 $REUSEOBJFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -#export LDFLAGS="$SMALLLD" -#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android23-mips16el -# -#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -# -# -# -# -##Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) mips16el -# -#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android41-mips16el -#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android41-mips16el -#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android41-mips16el -#export CC=/opt/toolchains/mipsel-android-16/bin/mipsel-linux-android-gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie -mips16" -#export THREADS=1 -#export LDFLAGS="$SMALLLD" -# -#make NOLPTHREAD=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -# -# -# -# -#Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) mips16el -# -#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips16el -#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips16el -#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips16el -#export CC=/opt/toolchains/mipsel-android-21/bin/mipsel-linux-android-gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie -mips16" -#export THREADS=1 -#export LDFLAGS="$SMALLLD" -# -#make NOLPTHREAD=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - -#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) mips64el - -export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips64el -export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips64el -export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips64el -export CC=/opt/toolchains/mips64el-android-21/bin/mips64el-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie" -export THREADS=0 -export LDFLAGS="$SMALLLD -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) mips64el STATIC - -export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android50-mips64el-static -export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android50-mips64el-static -export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android50-mips64el-static -export CC=/opt/toolchains/mips64el-android-21/bin/mips64el-linux-android-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -export THREADS=0 -export LDFLAGS="$SMALLLD -static -fuse-ld=bfd" - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -## Android 5.0+ with Ubuntu toolchain -#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android5 -#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android5 -#export CC=arm-linux-androideabi-gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -#export LDFLAGS="$SMALLLD -pie -fpie" -#export THREADS=0 -# -#make $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -# -# Android 5.0+ with Ubuntu toolchain STATIC -#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android5-static -#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android5-static -#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android5-static -#export LDFLAGS="$LDFLAGS -static" -# -#make $REUSEOBJFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -#export LDFLAGS="$SMALLLD -pie -fpie" -#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android5 -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -# -# -# -## Android 5.0+ with Ubuntu toolchain for ARMv7 CPU with thumb2 instruction set -#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android5-armv7 -#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android5-armv7 -#export CC=arm-linux-androideabi-gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mthumb -march=armv7 -mtune=cortex-a9" -#export LDFLAGS="$SMALLLD -pie -fpie" -#export THREADS=0 -# -#make $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android5-armv7-static -#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android5-armv7-static -#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android5-armv7-static -#export LDFLAGS="$LDFLAGS -static" -# -#make $REUSEOBJFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -#export LDFLAGS="$SMALLLD -pie -fpie" -#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android5-armv7 -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -##unset TERMINAL_WIDTH -# -# -# -# -# -# Android with Ubuntu toolchain -export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android -export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android -export CC=arm-linux-androideabi-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -export LDFLAGS="$SMALLLD -fuse-ld=bfd" -export THREADS=0 -# -#make $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -# -# Android with Ubuntu toolchain STATIC -export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android-static -export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android-static -export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android-static -export LDFLAGS="$LDFLAGS -static" - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -#export LDFLAGS="$SMALLLD" -#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - - - -# Android with Ubuntu toolchain for ARMv7 CPU with thumb2 instruction set -export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android-armv7 -export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android-armv7 -export CC=arm-linux-androideabi-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mthumb -march=armv7 -mtune=cortex-a9" -export LDFLAGS="$SMALLLD -fuse-ld=bfd" -export THREADS=0 - -#make $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi - -export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android-armv7-static -export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android-armv7-static -export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android-armv7-static -export LDFLAGS="$LDFLAGS -static" - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -#export LDFLAGS="$SMALLLD" -#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android-armv7 -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - - - -# Linux x86 glibc -export MULTI_NAME=binaries/Linux/intel/glibc/vlmcsdmulti-x86-glibc -export CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x86-glibc -export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc -export CC=~/openwrt/staging_dir/toolchain-i386_i486_gcc-4.8-linaro_eglibc-2.19/bin/i486-openwrt-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 - -make $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsdmulti-x86-glibc - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - - - - -# Linux x86 glibc minimum standalone version -export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-minimum -export CC=~/openwrt/staging_dir/toolchain-i386_i486_gcc-4.8-linaro_eglibc-2.19/bin/i486-openwrt-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 -export FEATURES=minimum - -make NO_DNS=1 $MAKEFLAGS $PROGRAM_NAME - -if [ $? != 0 ]; then - echo Error creating $PROGRAM_NAME - exit $? -fi - -# Linux x86 glibc minimum inetd version -export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-minimum-inetd -export CFLAGS="$CFLAGS -DNO_SOCKETS" - -make NO_DNS=1 $MAKEFLAGS $PROGRAM_NAME - -if [ $? != 0 ]; then - echo Error creating $PROGRAM_NAME - exit $? -fi - -# Linux x86 glibc threads -export FEATURES=full -export THREADS=1 -export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-threads -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread" -export CFLAGS="$SMALLCC" - -make $MAKEFLAGS $PROGRAM_NAME - -if [ $? != 0 ]; then - echo Error creating $PROGRAM_NAME - exit $? -fi - - - - -# Linux x86 musl -export FEATURES=full -export MULTI_NAME=binaries/Linux/intel/static/vlmcsdmulti-x86-musl-static -export CLIENT_NAME=binaries/Linux/intel/static/vlmcs-x86-musl-static -export PROGRAM_NAME=binaries/Linux/intel/static/vlmcsd-x86-musl-static -export CC=/opt/toolchains/i386_i486_gcc-4.9-linaro_musl-1.1.6/bin/i486-openwrt-linux-musl-gcc-4.9.2 -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" -export THREADS=0 -export NOPROCFS=0 -export AUXV=1 - -make $MAKEFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export MULTI_NAME=binaries/Linux/intel/musl/vlmcsdmulti-x86-musl - -make $MAKEFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -export LDFLAGS="$LDFLAGS -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export CLIENT_NAME=binaries/Linux/intel/musl/vlmcs-x86-musl -export PROGRAM_NAME=binaries/Linux/intel/musl/vlmcsd-x86-musl -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - - - - -# Linux x86 musl static threads -export FEATURES=full -export PROGRAM_NAME=binaries/Linux/intel/static/vlmcsd-x86-musl-static-threads -export CC=/opt/toolchains/i386_i486_gcc-4.9-linaro_musl-1.1.6/bin/i486-openwrt-linux-musl-gcc-4.9.2 -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" -export THREADS=1 -export NOPROCFS=0 -export AUXV=1 - -make $MAKEFLAGS $PROGRAM_NAME - -if [ $? != 0 ]; then - echo Error creating $PROGRAM_NAME - exit $? -fi - - - - - -# Linux x32 glibc -#export FEATURES=full -#export MULTI_NAME=binaries/Linux/intel/glibc/vlmcsdmulti-x32-glibc -#export CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x32-glibc -#export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x32-glibc -#export CC=gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mx32 -march=nocona -mtune=generic" -#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -#export THREADS=0 -#export NOPROCFS=0 -#export AUXV=1 -# -#make DNS_PARSER=OS $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsdmulti-x32-glibc -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make DNS_PARSER=OS $REUSEOBJFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -# -# -# -## Linux x32 glibc threads -#export FEATURES=full -#export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x32-glibc-threads -#export CC=gcc -#export CFLAGS="$SMALLCC" -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mx32 -march=nocona -mtune=generic" -#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread" -#export THREADS=1 -#export NOPROCFS=0 -#export AUXV=1 -# -#make DNS_PARSER=OS $MAKEFLAGS $PROGRAM_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $PROGRAM_NAME -# exit $? -#fi - - - - -# Linux armv4 little-endian glibc -export FEATURES=full -export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-glibc -export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-glibc -export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-glibc -export CC=/opt/toolchains/armelv5t-glibc-2.20/bin/arm-linux-gcc -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4 -marm" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 -export NOPROCFS=0 -export AUXV=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux armv4 little-endian glibc thumb instruction set - -export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-glibc-thumb -export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-glibc-thumb -export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-glibc-thumb -export CC=/opt/toolchains/armelv5t-glibc-2.20/bin/arm-linux-gcc -export FEATURES=full -export CFLAGS="$SMALLCC" -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4t -mthumb" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux armv5 little-endian glibc thumb instruction set -export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv5el-glibc-thumb -export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv5el-glibc-thumb -export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv5el-glibc-thumb -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5t -mthumb" - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - -# Linux armv5 little-endian glibc -export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv5el-glibc -export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv5el-glibc -export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv5el-glibc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5 -marm" - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux armv7 little-endian glibc thumb2 instruction set -export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv7el-glibc -export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv7el-glibc -export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv7el-glibc -export CC=/opt/toolchains/armelv7-cortex-a8-glibc-2.18/usr/bin/arm-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux armv4 little-endian openwrt toolchain -export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-openwrt-glibc -export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-openwrt-glibc -export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-openwrt-glibc -export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_eglibc-2.19_eabi/bin/arm-openwrt-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - - -# Linux armv7 little-endian openwrt toolchain thumb 2 instruction set -INSTALLDIR=binaries/Linux/arm/little-endian/glibc/ -SUFFIX=-armv7el-openwrt-glibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_eglibc-2.19_eabi/bin/arm-openwrt-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - -# Linux armv5 little endian thumb instruction set -INSTALLDIR=binaries/Linux/arm/little-endian/static/ -SUFFIX=-armv5el-musl-thumb -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}-static -export CC=/opt/toolchains/armelv5t-musl/usr/bin/arm-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" -export THREADS=0 -export NOPROCFS=0 -export AUXV=1 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -INSTALLDIR=binaries/Linux/arm/little-endian/musl/ -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -INSTALLDIR=binaries/Linux/arm/little-endian/static/ -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux armv5 little-endian uclibc thumb instruction set -INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/ -SUFFIX=-armv5el-uclibc-thumb -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/armelv5t-uclibc-0.9.33/usr/bin/arm-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5t -mthumb" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 -export NOPROCFS=0 -export AUXV=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux armv7 little-endian uclibc thumb 2 instruction set -INSTALLDIR=binaries/Linux/arm/little-endian/ -SUFFIX=-armv7el-uclibc -export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/armelv7-cortex-a8-uclibc-0.9.33/usr/bin/arm-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux armv4 little-endian uclibc openwrt toolchain -INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/ -SUFFIX=-armv4el-openwrt-uclibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4 -marm" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -## Linux armv4 little-endian uclibc openwrt toolchain thumb instruction set -#INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/ -#SUFFIX=-armv4el-openwrt-uclibc-thumb -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4t -mthumb" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -#export THREADS=0 -# -#make $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - - - -# Linux armv7 little-endian uclibc openwrt toolchain thumb 2 instruction set -INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/ -SUFFIX=-armv7el-openwrt-uclibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -##Linux armv4 little-endian uclibc -#INSTALLDIR=binaries/Linux/arm/little-endian/ -#SUFFIX=-armv4el-uclibc -#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export CC=/root/cross-compiler-armv4l/bin/armv4l-gcc -#export PLATFORMFLAGS="-pipe" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="-Wl,-z,norelro -fwhole-program" -#export THREADS=0 -#export NOPROCFS=1 -# -#make $MAKEFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2 -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -#export LDFLAGS="-Wl,-z,norelro -fwhole-program -static" -# -#make $REUSEOBJFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2 -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME -# exit $? -#fi - - - - - -## mips1 little-endian with openssl 0.9.8 support dreambox toolchain -#INSTALLDIR=binaries/Linux/mips/little-endian/glibc/ -#SUFFIX=-mips1el-glibc-openssl0.9.8-soft-EXPERIMENTAL -#export CRYPTO=openssl_with_aes_soft -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/mipsoe20/bin/mipsel-unknown-linux-gnu-gcc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD" -#export THREADS=0 -#export NOPROCFS=0 -# -#make $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -# -# -# -## mips1 little-endian dreambox toolchain -#INSTALLDIR=binaries/Linux/mips/little-endian/glibc/ -#SUFFIX=-mips1el-glibc -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/mipsoe20/bin/mipsel-unknown-linux-gnu-gcc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD" -#export THREADS=0 -#export CRYPTO=internal -# -#make $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -# - - -# Linux mips1 little-endian uclibc -#INSTALLDIR=binaries/Linux/mips/little-endian/ -#SUFFIX=-mips1el-uclibc -#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export CC=/root/cross-compiler-mipsel/bin/mipsel-gcc -#export PLATFORMFLAGS="-pipe" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="-Wl,-z,norelro -fwhole-program" -#export THREADS=0 -#export CRYPTO=internal -#export NOPROCFS=1 -# -#make $MAKEFLAGS CAT=2 $CLIENT_NAME $MULTI_NAME $PROGRAM_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -#export LDFLAGS="-Wl,-z,norelro -fwhole-program -static" -# -#make $REUSEOBJFLAGS CAT=2 $CLIENT_NAME $MULTI_NAME $PROGRAM_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME -# exit $? -#fi - - - - -# Linux mips16 little endian glibc -INSTALLDIR=binaries/Linux/mips/little-endian/glibc/ -SUFFIX=-mips16el-glibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32el-mips16-glibc-2.18/usr/bin/mipsel-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal -export NOPROCFS=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux mips16 little-endian uclibc -INSTALLDIR=binaries/Linux/mips/little-endian/uclibc/ -SUFFIX=-mips16el-uclibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32el-mips16-uclibc-0.9.33/bin/mipsel-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -## Linux PowerPC glibc with SSL support and Dreambox 500 toolchain -#INSTALLDIR=binaries/Linux/ppc/big-endian/glibc/ -#SUFFIX=-ppc-glibc-openssl0.9.8-soft-EXPERIMENTAL -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/powerpc/bin/powerpc-linux-gcc -#export PLATFORMFLAGS="-pipe" -#export FEATURES=full -#export CFLAGS="-fno-common -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" -#export LDFLAGS="-Wl,--no-gc-sections -Wl,-z,norelro" -#export THREADS=0 -#export CRYPTO=internal -# -#make NO_DNS=1 $MAKEFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME -# exit $? -#fi - - - - - - -#Linux PowerPC uclibc OpenWRT toolchain -INSTALLDIR=binaries/Linux/ppc/big-endian/ -SUFFIX=-ppc-uclibc -export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export CC=~/openwrt/staging_dir/toolchain-powerpc_405_gcc-4.8-linaro_uClibc-0.9.33.2/bin/powerpc-openwrt-linux-gcc -export CC=/opt/toolchains/ppc-uclibc0.9.33.2-gcc-4.9.1-binutils2.24/bin/powerpc-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -L/root/cross-compiler-powerpc/lib -L/root/cross-compiler-powerpc/usr/lib" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$SMALLLD -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -##Fritzbox 7170 (mips32r2 little-endian) device specific, May or may not run on other devices -#INSTALLDIR=binaries/Linux/mips/little-endian/ -#SUFFIX=-mips32r2el-Fritzbox-71xx-72xx-uclibc -#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/fritz71xx/bin/mipsel-linux-uclibc-gcc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=4kec -mtune=4kec" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD" -#export THREADS=0 -#export CRYPTO=internal -# -#make NOLRESOLV=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi - -#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -#export LDFLAGS="$SMALLLD -static" -# -#make NOLRESOLV=1 $REUSEOBJFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export LDFLAGS="$SMALLLD" -# -#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - - - -##Fritzbox 7370 (mips32r2 big-endian) device specific, May or may not run on other devices -#INSTALLDIR=binaries/Linux/mips/big-endian/ -#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc -#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD" -#export THREADS=0 -#export CRYPTO=internal -# -#make NOLRESOLV=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -#export LDFLAGS="$SMALLLD -static" -# -#make NOLRESOLV=1 $REUSEOBJFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export LDFLAGS="$SMALLLD" -# -#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - - - -##Fritzbox 7370 (mips32r2 big-endian) device specific with _PEDANTIC, May or may not run on other devices -#INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ -#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-pedantic -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" -#export FEATURES=full -#export CFLAGS="$SMALLCC -D_PEDANTIC" -#export LDFLAGS="$SMALLLD" -#export THREADS=0 -#export CRYPTO=internal -# -#make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $PROGRAM_NAME -# exit $? -#fi -# - - - -##Fritzbox 7370 (mips32r2 big-endian) device specific inetd start only, May or may not run on other devices -#INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ -#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-inetd -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" -#export FEATURES=inetd -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD" -#export THREADS=0 -#export CRYPTO=internal -# -#make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $PROGRAM_NAME -# exit $? -#fi -# -# -# -# -##Fritzbox 7370 (mips32r2 big-endian) device specific with pthreads, May or may not run on other devices -#INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ -#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-threads -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD -lpthread" -#export THREADS=1 -# -#make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $PROGRAM_NAME -# exit $? -#fi -# -# -# -# -##Fritzbox 7370 (mips32r2 big-endian) device specific with OpenSSL support, May or may not run on other devices -#INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ -#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-openssl0.9.8-soft-EXPERIMENTAL -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD" -#export THREADS=0 -#export CRYPTO=openssl_with_aes_soft -#export OPENSSL_HMAC=0 -# -#make NOLRESOLV=1 $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi -# -#unset OPENSSL_HMAC -# -# -# -#make $MAKEFLAGS CLIENT_NAME=binaries/Linux/mips/big-endian/uclibc/vlmcs-mips32-uclibc CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/mips/big-endian/uclibc/vlmcsd-mips32-uclibc CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc && \ -#Linux mips32 big-endian uclibc -INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ -SUFFIX=-mips32-uclibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux mips16 big-endian uclibc -INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ -SUFFIX=-mips16-uclibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips16 big-endian) device specific, May or may not run on other devices -INSTALLDIR=binaries/Linux/mips/big-endian/ -SUFFIX=-mips16-openwrt-atheros-ar7xxx-ar9xxx-uclibc -export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips-openwrt-linux-uclibc/bin/mips-openwrt-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC -DNO_LIMIT" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - - -#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips16 big-endian) device specific, May or may not run on other devices -INSTALLDIR=binaries/Linux/mips/big-endian/ -SUFFIX=-mips16-openwrt-atheros-ar7xxx-ar9xxx-musl -export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_musl-1.1.6-mips16/bin/mips-openwrt-linux-musl-gcc-4.9.2 -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$LDFLAGS -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips32r2 big-endian) device specific, May or may not run on other devices -INSTALLDIR=binaries/Linux/mips/big-endian/ -SUFFIX=-mips32r2-openwrt-atheros-ar7xxx-ar9xxx-uclibc -export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips-openwrt-linux-uclibc/bin/mips-openwrt-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc" -export FEATURES=full -export CFLAGS="$SMALLCC -DNO_LIMIT" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$SMALLLD -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux mips16 big-endian uclibc threads -INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/ -SUFFIX=-mips16-uclibc-threads -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -lpthread" -export THREADS=1 -export CRYPTO=internal - -make $MAKEFLAGS $PROGRAM_NAME - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - - - - -# Linux mips32 big-endian glibc -INSTALLDIR=binaries/Linux/mips/big-endian/glibc/ -SUFFIX=-mips32-glibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32eb-glibc-2.19/usr/bin/mips-linux-cc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux mips16 big-endian glibc -INSTALLDIR=binaries/Linux/mips/big-endian/glibc/ -SUFFIX=-mips16-glibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32eb-glibc-2.19/usr/bin/mips-linux-cc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Linux mips32 big-endian musl -INSTALLDIR=binaries/Linux/mips/big-endian/ -SUFFIX=-mips32-musl -export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32eb-musl/usr/bin/mips-linux-cc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal -export NOPROCFS=0 -export AUXV=1 - - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$SMALLLD -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Linux mips16 little-endian musl soft-float -INSTALLDIR=binaries/Linux/mips/little-endian/ -SUFFIX=-mips16el-musl -export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32el-mips16-musl/usr/bin/mipsel-linux-cc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal -export NOPROCFS=0 -export AUXV=1 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$SMALLLD -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Linux mips16 little-endian musl fpu -INSTALLDIR=binaries/Linux/mips/little-endian/ -SUFFIX=-mips16el-musl-fpu -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export CC=/opt/toolchains/mips32el-mips16-musl-fpu/usr/bin/mipsel-linux-cc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -static" -export THREADS=0 -export CRYPTO=internal -export NOPROCFS=0 -export AUXV=1 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - -# Linux x86 uclibc -INSTALLDIR=binaries/Linux/intel/uclibc/ -SUFFIX=-x86-uclibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/i486-uclibc-0.9.33/bin/i486-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i486 -mtune=generic" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 -export CRYPTO=internal -export NOPROCFS=0 -export AUXV=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - -#make $MAKEFLAGS CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc LDFLAGS="-Wl,--hash-style=gnu" CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic"&& \ -# Linux x64 glibc -INSTALLDIR=binaries/Linux/intel/glibc/ -SUFFIX=-x64-glibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#Linux Sparc32v7 glibc -INSTALLDIR=binaries/Linux/sparc32/glibc/ -SUFFIX=-sparc32v7-glibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/sparc32-glibc-gcc-4.7.4/bin/sparc-buildroot-linux-gnu-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mcpu=v7" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -lpthread" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#make $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsd-x64-glibc-threads CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc-threads THREADS=1 LDFLAGS="-Wl,--hash-style=gnu -lpthread" CFLAGS="-pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc-threads CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic"&& \ -# Linux x64 glibc with threads -INSTALLDIR=binaries/Linux/intel/glibc/ -SUFFIX=-x64-glibc-threads -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread" -export THREADS=1 -export CRYPTO=internal - -make $MAKEFLAGS $PROGRAM_NAME - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - - - - -#make $MAKEFLAGS LDFLAGS="-Wl,--hash-style=gnu" CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL CRYPTO=openssl_with_aes CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic" && \ -# Linux x64 glibc with OpenSSL 1.0.x support -INSTALLDIR=binaries/Linux/intel/glibc/ -SUFFIX=-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 -export CRYPTO=openssl_with_aes - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -# Linux x64 musl -INSTALLDIR=binaries/Linux/intel/ -SUFFIX=-x64-musl -export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/x86_64_gcc-4.9-linaro_musl-1.1.6/bin/x86_64-openwrt-linux-musl-gcc-4.9.2 -#export CC=/opt/toolchains/x86_64-musl/usr/bin/x86_64-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 -export CRYPTO=internal -export NOPROCFS=0 -export AUXV=1 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX} -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -#make $MAKEFLAGS CC=/opt/toolchains/x86_64-uclibc-0.9.33/bin/x86_64-linux-gcc LDFLAGS="-Wl,--hash-style=gnu" CLIENT_NAME=binaries/Linux/intel/uclibc/vlmcs-x64-uclibc PROGRAM_NAME=binaries/Linux/intel/uclibc/vlmcsd-x64-uclibc CFLAGS="$SMALL -flto=jobserver -fwhole-program -pipe -fno-stack-protector" && \ -# Linux x64 uclibc -INSTALLDIR=binaries/Linux/intel/uclibc/ -SUFFIX=-x64-uclibc -export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/x86_64-uclibc-0.9.33/bin/x86_64-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -export THREADS=0 -export CRYPTO=internal -export NOPROCFS=0 -export AUXV=0 - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - -## mips32 little-endian DD-WRT toolchain with gcc 4.1.0 -#export CC=/opt/simplebuild/toolchains/ddwrt410/bin/mipsel-linux-gcc -#INSTALLDIR=binaries/Linux/mips/little-endian/ -#SUFFIX=-mips32el-ddwrt-gcc$($CC -dumpversion)-uclibc -#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export PLATFORMFLAGS="-pipe -mips32" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="-fwhole-program" -#export THREADS=0 -#export CRYPTO=internal -# -#make $MAKEFLAGS CAT=2 $PROGRAM_NAME $MULTI_NAME $CLIENT_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $PROGRAM_NAME, $MULTI_NAME and/or $CLIENT_NAME -# exit $? -#fi -# -#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -#export LDFLAGS="-fwhole-program -static" -# -#make $REUSEOBJFLAGS CAT=2 $PROGRAM_NAME $MULTI_NAME $CLIENT_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $PROGRAM_NAME, $MULTI_NAME and/or $CLIENT_NAME -# exit $? -#fi - - - - - -#Linux mips32 little-endian uclibc -INSTALLDIR=binaries/Linux/mips/little-endian/ -SUFFIX=-mips32el-uclibc -export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -export CC=/opt/toolchains/mips32el-uclibc-0.9.33/bin/mipsel-linux-gcc -export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32" -export FEATURES=full -export CFLAGS="$SMALLCC" -export LDFLAGS="$SMALLLD" -export THREADS=0 -export CRYPTO=internal - -make $MAKEFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="$SMALLLD -static" - -make $REUSEOBJFLAGS - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME - exit $? -fi - -rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - -export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -export LDFLAGS="$SMALLLD" - -make $REUSEOBJFLAGS $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $MULTI_NAME - exit $? -fi - - - - -##Linux armv6 hard-float little-endian. Used on Raspberry Pi with Raspbian. -##The hard-float ABI cannot be combined with thumb. -##You may wish to use armv5el-thumb instead because the binary is smaller -#INSTALLDIR=binaries/Linux/arm/little-endian/glibc/ -#SUFFIX=-armv6hf-Raspberry-glibc -#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX} -#export CC=/opt/toolchains/armhfv6-glibc-2.19/bin/arm-linux-gcc -#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv6zk -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu" -#export THREADS=0 -#export CRYPTO=internal -# -#make $MAKEFLAGS -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME -# exit $? -#fi -# -#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null -# -#make $REUSEOBJFLAGS $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $MULTI_NAME -# exit $? -#fi - - - - -## Linux arm big-endian uclibc -#INSTALLDIR=binaries/Linux/arm/big-endian/ -#SUFFIX=-armeb-nslu2-uclibc -#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX} -#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX} -#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX} -#export CC=/opt/simplebuild/toolchains/nslu2open/bin/armeb-linux-uclibc-gcc -#export PLATFORMFLAGS="-pipe" -#export FEATURES=full -#export CFLAGS="$SMALLCC" -#export LDFLAGS="-Wl,-z,norelo" -#export THREADS=0 -# -#make $MAKEFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME -# -#if [ $? != 0 ]; then -# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME -# exit $? -#fi - -export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static -export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static -export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static -export LDFLAGS="-Wl,-z,norelo -static" - -make $REUSEOBJFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME - -if [ $? != 0 ]; then - echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME - exit $? -fi - - -# Strip off unnecessary stuff from binaries - -find binaries -xdev -name 'vlmcs*' -exec /opt/toolchains/mips32el-mips16-glibc-2.18/usr/bin/mipsel-linux-strip -s --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag {} \; 2>/dev/null -find binaries -xdev -name 'vlmcs*' -exec strip -s --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag {} \; 2>/dev/null -find binaries -xdev -name 'vlmcs*' -exec sstrip -z {} \; 2>/dev/null - -make alldocs - -rm *.o - -#cp -p binaries/Linux/intel/glibc/vlmcs-x32-glibc /usr/local/bin/vlmcs - -cp -pf binaries/Linux/intel/glibc/vlmcsdmulti-x64-glibc /usr/local/sbin/vlmcsdmulti - -ln -s vlmcsdmulti /usr/local/sbin/vlmcsd 2>/dev/null -ln -s ../sbin/vlmcsdmulti /usr/local/bin/vlmcs 2>/dev/null -mkdir -p /usr/local/man/man1 2>/dev/null -mkdir -p /usr/local/man/man5 2>/dev/null -mkdir -p /usr/local/man/man8 2>/dev/null -mkdir -p /usr/local/man/man7 2>/dev/null -cp -a vlmcs.1 vlmcsdmulti.1 /usr/local/man/man1/ -cp -a vlmcsd.7 /usr/local/man/man7/ -cp -a vlmcsd.8 /usr/local/man/man8/ -cp -a vlmcsd.ini.5 /usr/local/man/man5/ -pbzip2 -f -9 /usr/local/man/man5/vlmcsd.ini.5 /usr/local/man/man1/vlmcs.1 /usr/local/man/man1/vlmcsdmulti.1 /usr/local/man/man7/vlmcsd.7 /usr/local/man/man8/vlmcsd.8 -#pbzip2 -f /usr/local/man/man7/vlmcsd.7 -#pbzip2 -f /usr/local/man/man8/vlmcsd.8 - -mandb >/dev/null 2>&1 - diff --git a/make_multilib_linux b/make_multilib_linux index eeba9ed..64dcde5 100755 --- a/make_multilib_linux +++ b/make_multilib_linux @@ -1,5 +1,6 @@ #!/bin/bash +export VLMCSD_VERSION="svn`svnversion`" SMALLCC="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants" SMALLLD="-pipe -Wl,--hash-style=sysv -Wl,-z,norelro -Wl,--build-id=none" SMALL="$SMALLCC $SMALLLD" diff --git a/make_netbsd b/make_netbsd index 1d78bfb..b200941 100755 --- a/make_netbsd +++ b/make_netbsd @@ -1,5 +1,6 @@ #!/usr/pkg/bin/bash +export VLMCSD_VERSION="svn`svnversion`" export VERBOSE=3 export DNS_PARSER=OS diff --git a/make_openbsd b/make_openbsd index b883dfa..6134ec8 100755 --- a/make_openbsd +++ b/make_openbsd @@ -1,5 +1,6 @@ #!/usr/local/bin/bash +export VLMCSD_VERSION="svn`svnversion`" export VERBOSE=3 export DNS_PARSER=OS diff --git a/make_osx b/make_osx index f0459ac..c8c0d8b 100755 --- a/make_osx +++ b/make_osx @@ -1,5 +1,6 @@ #!/bin/bash +export VLMCSD_VERSION="svn`svnversion`" export VERBOSE=3 export DNS_PARSER=OS diff --git a/make_solaris b/make_solaris index c66fb47..4116e0e 100755 --- a/make_solaris +++ b/make_solaris @@ -1,5 +1,6 @@ #!/bin/sh +export VLMCSD_VERSION="svn`svnversion`" export VERBOSE=3 export CAT=2 diff --git a/make_windows b/make_windows index 630423f..13ee8e9 100755 --- a/make_windows +++ b/make_windows @@ -1,5 +1,6 @@ #!/bin/bash +export VLMCSD_VERSION="svn`svnversion`" rm -f cygkms*.dll libkms*.dll vlmcs-* vlmcsd-win* vlmcsd-cyg* vlmcsdmulti-* *_all.* vlmcsd.exe vlmcs.exe vlmcsdmulti.exe 2> /dev/null export CAT=2 @@ -33,9 +34,9 @@ make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-m make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-msrpc-x64-openssl-EXPERIMENTAL CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-cygwin-x64-openssl-EXPERIMENTAL CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64" export CAT=2 - -#make $MAKEFLAGS libkms32.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms32.dll CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF32" LDFLAGS="-static-libgcc $LFWIN32" -#make $MAKEFLAGS libkms64.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms64.dll CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF64" LDFLAGS="-static-libgcc $LFWIN64" +#unset CAT +make $MAKEFLAGS libkms32.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms32.dll CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF32" LDFLAGS="-static-libgcc $LFWIN32" +make $MAKEFLAGS libkms64.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms64.dll CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF64" LDFLAGS="-static-libgcc $LFWIN64" #make $MAKEFLAGS all vlmcsdmulti-Windows-x86 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x86 PROGRAM_NAME=vlmcsd-Windows-x86 MULTI_NAME=vlmcsdmulti-Windows-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF32" LDFLAGS="$LFWIN32" #make $MAKEFLAGS all vlmcsdmulti-Windows-x64 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x64 PROGRAM_NAME=vlmcsd-Windows-x64 MULTI_NAME=vlmcsdmulti-Windows-x64 CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF64" LDFLAGS="$LFWIN64" #make -Bj MSRPC=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-msrpc-x86 PROGRAM_NAME=vlmcsd-Windows-msrpc-x86 MULTI_NAME=vlmcsdmulti-Windows-msrpc-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF32" LDFLAGS="-Wl,--nxcompat,--dynamicbase,--tsaware,--large-address-aware" diff --git a/msrpc-client.c b/msrpc-client.c index aee5695..bbabcc0 100644 --- a/msrpc-client.c +++ b/msrpc-client.c @@ -72,13 +72,13 @@ RpcCtx connectToAddress(char *const addr, const int AddressFamily_unused, int_fa if ((status = createStringBinding(addr, &stringBinding)) != RPC_S_OK) { - errorout("%s\n", win_strerror(status)); + printerrorf("%s\n", win_strerror(status)); return !0; } if (PreviousRpcCallFailed) { - errorout("%s\n", win_strerror(PreviousRpcCallFailed)); + printerrorf("%s\n", win_strerror(PreviousRpcCallFailed)); return !0; } diff --git a/msrpc-client.h b/msrpc-client.h index bfb6dba..17d2a0c 100644 --- a/msrpc-client.h +++ b/msrpc-client.h @@ -7,6 +7,7 @@ #include "types.h" #include +#include "output.h" typedef int_fast8_t RpcCtx; typedef RPC_STATUS RpcStatus; diff --git a/msrpc-server.c b/msrpc-server.c index 04d2621..eb9b151 100644 --- a/msrpc-server.c +++ b/msrpc-server.c @@ -221,7 +221,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char { RPC_CSTR clientIpAddress; RPC_STATUS result; - int status = RPC_S_OK; + int status = 0; result = getClientIp(IDL_handle, &clientIpAddress); @@ -238,7 +238,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char logger ("Cannot verify that client has a private IP address\n"); # endif - return RPC_S_ACCESS_DENIED; + return 0x80070000 | RPC_S_ACCESS_DENIED; } if (!result && (PublicIPProtectionLevel & 2) && !IsPrivateIPAddress((char*)clientIpAddress)) @@ -248,7 +248,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char # endif RpcStringFreeA(&clientIpAddress); - return RPC_S_ACCESS_DENIED; + return 0x80070000 | RPC_S_ACCESS_DENIED; } # endif // NO_PRIVATE_IP_DETECT @@ -256,25 +256,38 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char if (requestSize < (int)sizeof(REQUEST_V4)) { if (!result) RpcStringFreeA(&clientIpAddress); - return RPC_S_CANNOT_SUPPORT; + return 0x8007000D; } *response = (uint8_t *)midl_user_allocate(MAX_RESPONSE_SIZE); + int kmsStatus = 0x8007000D; + int version = LE32(((REQUEST*)(request))->Version); - switch(LE16(((REQUEST*)(request))->MajorVer)) + switch(version) { - case 4: - *responseSize = CreateResponseV4((REQUEST_V4 *)request, *response, (char*)clientIpAddress); + case 0x40000: + kmsStatus = CreateResponseV4((REQUEST_V4 *)request, *response, (char*)clientIpAddress); break; - case 5: - case 6: - *responseSize = CreateResponseV6((REQUEST_V6 *) request, *response, (char*)clientIpAddress); + case 0x50000: + case 0x60000: + kmsStatus = CreateResponseV6((REQUEST_V6 *) request, *response, (char*)clientIpAddress); break; default: - status = RPC_S_INVALID_ARG; +# ifndef NO_LOG + logger("Fatal: KMSv%u.%u unsupported\n", version >> 16, version & 0xffff); +# endif // NO_LOG break; } + if (kmsStatus < 0) + { + status = kmsStatus; + } + else + { + *responseSize = kmsStatus; + } + if (!result) RpcStringFreeA(&clientIpAddress); return status; } diff --git a/network.c b/network.c index 8a96844..c90efa2 100644 --- a/network.c +++ b/network.c @@ -280,7 +280,7 @@ SOCKET connectToAddress(const char *const addr, const int AddressFamily, int_fas break; } - errorout("%s\n", socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno)); + printerrorf("%s: %s\n", szAddr, socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno)); socketclose(s); s = INVALID_SOCKET; diff --git a/network.h b/network.h index 48343d5..f46cd0f 100644 --- a/network.h +++ b/network.h @@ -11,7 +11,7 @@ #endif #include "types.h" - +#include "output.h" int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send); diff --git a/output.c b/output.c index 9df8abf..f0d7c05 100644 --- a/output.c +++ b/output.c @@ -94,7 +94,7 @@ int logger(const char *const fmt, ...) // Output to stderr if it is available or to log otherwise (e.g. if running as daemon/service) -void printerrorf(const char *const fmt, ...) +int printerrorf(const char *const fmt, ...) { int error = errno; va_list arglist; @@ -103,7 +103,8 @@ void printerrorf(const char *const fmt, ...) # ifdef IS_LIBRARY - snprintf(ErrorMessage, MESSAGE_BUFFER_SIZE, fmt, arglist); + size_t len = strlen(ErrorMessage); + vsnprintf(ErrorMessage + len, MESSAGE_BUFFER_SIZE - len - 1, fmt, arglist); # else // !IS_LIBRARY @@ -125,6 +126,7 @@ void printerrorf(const char *const fmt, ...) va_end(arglist); errno = error; + return 0; } @@ -191,7 +193,7 @@ void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p) productName = "Unknown"; #endif - p("Activation ID (Product) : %s (%s)\n", guidBuffer, productName); + p("SKU ID (aka Activation ID) : %s (%s)\n", guidBuffer, productName); uuid2StringLE(&Request->KMSID, guidBuffer); @@ -201,7 +203,7 @@ void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p) productName = "Unknown"; #endif - p("Key Management Service ID : %s (%s)\n", guidBuffer, productName); + p("KMS ID (aka KMS counted ID) : %s (%s)\n", guidBuffer, productName); uuid2StringLE(&Request->CMID, guidBuffer); p("Client machine ID : %s\n", guidBuffer); diff --git a/output.h b/output.h index e08e9e2..12e2560 100644 --- a/output.h +++ b/output.h @@ -11,7 +11,7 @@ typedef int (*PRINTFUNC)(const char *const fmt, ...); -void printerrorf(const char *const fmt, ...); +int printerrorf(const char *const fmt, ...); int errorout(const char* fmt, ...); void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p); void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p); diff --git a/rpc.c b/rpc.c index 0ac8ef0..7696e97 100644 --- a/rpc.c +++ b/rpc.c @@ -176,25 +176,33 @@ static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, cons if (requestSize < sizeof(REQUEST_V4) + (Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64))) return 0; // Get KMS major version - uint_fast16_t _v; + uint16_t majorIndex, minor; + DWORD version; if (Ctx != *Ndr64Ctx) - _v = LE16(((WORD*)Request->Ndr.Data)[1]) - 4; + { + version = LE32(*(DWORD*)Request->Ndr.Data); + } else - _v = LE16(((WORD*)Request->Ndr64.Data)[1]) - 4; + { + version = LE32(*(DWORD*)Request->Ndr64.Data); + } + + majorIndex = (uint16_t)(version >> 16) - 4; + minor = (uint16_t)(version & 0xffff); // Only KMS v4, v5 and v6 are supported - if (_v >= vlmcsd_countof(_Versions)) + if (majorIndex >= vlmcsd_countof(_Versions) || minor) { # ifndef NO_LOG - logger("Fatal: KMSv%i unsupported\n", _v + 4); + logger("Fatal: KMSv%hu.%hu unsupported\n", (unsigned short)majorIndex + 4, (unsigned short)minor); # endif // NO_LOG return 0; } // Could check for equality but allow bigger requests to support buggy RPC clients (e.g. wine) // Buffer overrun is check by caller. - return (requestSize >= _Versions[_v].RequestSize); + return (requestSize >= _Versions[majorIndex].RequestSize); } @@ -205,10 +213,9 @@ static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, cons * * The RPC packet size (excluding header) is actually in Response->AllocHint */ -static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr) +static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE isValid, const char* const ipstr) { - uint_fast16_t _v; - int ResponseSize; + int ResponseSize; // <0 = Errorcode (HRESULT) WORD Ctx = LE16(Request->ContextId); BYTE* requestData; BYTE* responseData; @@ -226,28 +233,45 @@ static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const responseData = (BYTE*)&Response->Ndr64.Data; } - _v = LE16(((WORD*)requestData)[1]) - 4; + ResponseSize = 0x8007000D; // Invalid Data - if (!(ResponseSize = _Versions[_v].CreateResponse(requestData, responseData, ipstr))) + if (isValid) { - return 0; + uint16_t majorIndex = LE16(((WORD*)requestData)[1]) - 4; + if (!(ResponseSize = _Versions[majorIndex].CreateResponse(requestData, responseData, ipstr))) ResponseSize = 0x8007000D; } if (Ctx != *Ndr64Ctx) { - Response->Ndr.DataSizeMax = LE32(0x00020000); - Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize); - len = ResponseSize + sizeof(Response->Ndr); + if (ResponseSize < 0) + { + Response->Ndr.DataSizeMax = Response->Ndr.DataLength = 0; + len = sizeof(Response->Ndr) - sizeof(Response->Ndr.DataSizeIs); + } + else + { + Response->Ndr.DataSizeMax = LE32(0x00020000); + Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize); + len = ResponseSize + sizeof(Response->Ndr); + } } else { - Response->Ndr64.DataSizeMax = LE64(0x00020000ULL); - Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize); - len = ResponseSize + sizeof(Response->Ndr64); + if (ResponseSize < 0) + { + Response->Ndr64.DataSizeMax = Response->Ndr64.DataLength = 0; + len = sizeof(Response->Ndr64) - sizeof(Response->Ndr64.DataSizeIs); + } + else + { + Response->Ndr64.DataSizeMax = LE64(0x00020000ULL); + Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize); + len = ResponseSize + sizeof(Response->Ndr64); + } } pRpcReturnCode = ((BYTE*)&Response->Ndr) + len; - UA32(pRpcReturnCode) = 0; //LE32 not needed for 0 + UA32(pRpcReturnCode) = ResponseSize < 0 ? LE32(ResponseSize) : 0; len += sizeof(DWORD); // Pad zeros to 32-bit align (seems not neccassary but Windows RPC does it this way) @@ -518,10 +542,11 @@ void rpcServer(const SOCKET sock, const DWORD RpcAssocGroup, const char* const i if (!_recv(sock, requestBuffer, request_len)) return; // Request is invalid - if (!_Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx)) return; + BYTE isValid = _Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx); + if (rpcRequestHeader.PacketType != RPC_PT_REQUEST && !isValid) return; // Unable to create a valid response from request - if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType, ipstr))) return; + if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType != RPC_PT_REQUEST ? rpcRequestHeader.PacketType : isValid, ipstr))) return; response_len += sizeof(RPC_HEADER); @@ -560,26 +585,26 @@ static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPack (uint32_t)desiredPacketType, Header->PacketType ); - status = !0; + status = RPC_S_PROTOCOL_ERROR; } if (Header->DataRepresentation != BE32(0x10000000)) { p("Fatal: RPC response does not conform to Microsoft's limited support of DCE RPC\n"); - status = !0; + status = RPC_S_PROTOCOL_ERROR; } if (Header->AuthLength != 0) { p("Fatal: RPC response requests authentication\n"); - status = !0; + status = RPC_S_UNKNOWN_AUTHN_TYPE; } // vlmcsd does not support fragmented packets (not yet neccassary) if ( (Header->PacketFlags & (RPC_PF_FIRST | RPC_PF_LAST)) != (RPC_PF_FIRST | RPC_PF_LAST) ) { p("Fatal: RPC packet flags RPC_PF_FIRST and RPC_PF_LAST are not both set.\n"); - status = !0; + status = RPC_S_CANNOT_SUPPORT; } if (Header->PacketFlags & RPC_PF_CANCEL_PENDING) p("Warning: %s should not be set\n", "RPC_PF_CANCEL_PENDING"); @@ -591,7 +616,7 @@ static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPack if (Header->VersionMajor != 5 || Header->VersionMinor != 0) { p("Fatal: Expected RPC version 5.0 and got %u.%u\n", Header->VersionMajor, Header->VersionMinor); - status = !0; + status = RPC_S_INVALID_VERS_OPTION; } return status; @@ -639,7 +664,7 @@ static int checkRpcResponseHeader(const RPC_HEADER *const ResponseHeader, const (uint32_t)LE32(ResponseHeader->CallId) ); - status = !0; + status = RPC_S_PROTOCOL_ERROR; } return status; @@ -715,19 +740,19 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const if (!_send(sock, _Request, size)) { - errorout("\nFatal: Could not send RPC request\n"); - status = !0; + printerrorf("\nFatal: Could not send RPC request\n"); + status = RPC_S_COMM_FAILURE; break; } if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) { - errorout("\nFatal: No RPC response received from server\n"); - status = !0; + printerrorf("\nFatal: No RPC response received from server\n"); + status = RPC_S_COMM_FAILURE; break; } - if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &errorout))) break; + if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &printerrorf))) break; size = useNdr64 ? sizeof(RPC_RESPONSE64) : sizeof(RPC_RESPONSE); @@ -736,21 +761,21 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const if (!_recv(sock, &_Response, size)) { - errorout("\nFatal: RPC response is incomplete\n"); - status = !0; + printerrorf("\nFatal: RPC response is incomplete\n"); + status = RPC_S_COMM_FAILURE; break; } if (_Response.CancelCount != 0) { - errorout("\nFatal: RPC response cancel count is not 0\n"); - status = !0; + printerrorf("\nFatal: RPC response cancel count is not 0\n"); + status = RPC_S_CALL_CANCELLED; } if (_Response.ContextId != (useNdr64 ? LE16(1) : 0)) { - errorout("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId)); - status = !0; + printerrorf("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId)); + status = RPC_X_SS_CONTEXT_DAMAGED; } int_fast8_t sizesMatch; @@ -760,7 +785,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const *responseSize = (size_t)LE64(_Response.Ndr64.DataLength); responseSize2 = (size_t)LE64(_Response.Ndr64.DataSizeIs); - if (!*responseSize || !_Response.Ndr64.DataSizeMax) + if (/*!*responseSize ||*/ !_Response.Ndr64.DataSizeMax) { status = (int)LE32(_Response.Ndr64.status); break; @@ -773,7 +798,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const *responseSize = (size_t)LE32(_Response.Ndr.DataLength); responseSize2 = (size_t)LE32(_Response.Ndr.DataSizeIs); - if (!*responseSize || !_Response.Ndr.DataSizeMax) + if (/*!*responseSize ||*/ !_Response.Ndr.DataSizeMax) { status = (int)LE32(_Response.Ndr.status); break; @@ -784,12 +809,12 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const if (!sizesMatch) { - errorout("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n", + printerrorf("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n", (uint32_t)*responseSize, (uint32_t)LE32(_Response.Ndr.DataSizeIs) ); - status = !0; + status = RPC_S_PROTOCOL_ERROR; } *KmsResponse = (BYTE*)vlmcsd_malloc(*responseSize + MAX_EXCESS_BYTES); @@ -800,12 +825,12 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const // Read up to 16 bytes more than bytes expected to detect faulty KMS emulators if ((bytesread = recv(sock, (char*)*KmsResponse, *responseSize + MAX_EXCESS_BYTES, 0)) < (int)*responseSize) { - errorout("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n", + printerrorf("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n", (uint32_t)*responseSize, (int32_t)(bytesread < 0 ? 0 : bytesread) ); - status = !0; + status = RPC_S_PROTOCOL_ERROR; break; } @@ -816,7 +841,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const if (len + pad != LE32(_Response.AllocHint)) { - errorout("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad)); + printerrorf("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad)); } else { @@ -825,7 +850,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const { if (*(*KmsResponse + *responseSize + sizeof(*pReturnCode) + i)) { - errorout("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n"); + printerrorf("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n"); break; } } @@ -834,8 +859,6 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const pReturnCode = (DWORD*)(*KmsResponse + *responseSize + pad); status = LE32(UA32(pReturnCode)); - if (status) errorout("\nWarning: RPC stub data reported Error %u\n", (uint32_t)status); - break; } @@ -914,14 +937,14 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const if (!_send(sock, _Request, rpcBindSize)) { - errorout("\nFatal: Sending RPC bind request failed\n"); - return !0; + printerrorf("\nFatal: Sending RPC bind request failed\n"); + return RPC_S_COMM_FAILURE; } if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER))) { - errorout("\nFatal: Did not receive a response from server\n"); - return !0; + printerrorf("\nFatal: Did not receive a response from server\n"); + return RPC_S_COMM_FAILURE; } if ((status = checkRpcResponseHeader @@ -929,7 +952,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const &ResponseHeader, RequestHeader, packetType == RPC_PT_BIND_REQ ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK, - &errorout + &printerrorf ))) { return status; @@ -940,9 +963,9 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const if (!_recv(sock, bindResponse, LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER))) { - errorout("\nFatal: Incomplete RPC bind acknowledgement received\n"); + printerrorf("\nFatal: Incomplete RPC bind acknowledgement received\n"); free(bindResponseBytePtr); - return !0; + return RPC_S_COMM_FAILURE; } else { @@ -958,12 +981,12 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const if (bindResponse->NumResults != bindRequest->NumCtxItems) { - errorout("\nFatal: Expected %u CTX items but got %u\n", + printerrorf("\nFatal: Expected %u CTX items but got %u\n", (uint32_t)LE32(bindRequest->NumCtxItems), (uint32_t)LE32(bindResponse->NumResults) ); - status = !0; + status = RPC_S_PROTOCOL_ERROR; } for (i = 0; i < ctxItems; i++) @@ -975,7 +998,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const { if (!IsNullGuid((BYTE*)&bindResponse->Results[i].TransferSyntax)) { - errorout( + printerrorf( "\nWarning: Rejected transfer syntax %s did not return NULL Guid\n", transferSyntaxName ); @@ -983,7 +1006,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const if (bindResponse->Results[i].SyntaxVersion) { - errorout( + printerrorf( "\nWarning: Rejected transfer syntax %s did not return syntax version 0 but %u\n", transferSyntaxName, LE32(bindResponse->Results[i].SyntaxVersion) @@ -992,14 +1015,14 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const if (bindResponse->Results[i].AckReason == RPC_ABSTRACTSYNTAX_UNSUPPORTED) { - errorout( + printerrorf( "\nWarning: Transfer syntax %s does not support KMS activation\n", transferSyntaxName ); } else if (bindResponse->Results[i].AckReason != RPC_SYNTAX_UNSUPPORTED) { - errorout( + printerrorf( "\nWarning: Rejected transfer syntax %s did not return ack reason RPC_SYNTAX_UNSUPPORTED\n", transferSyntaxName ); @@ -1012,12 +1035,12 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const { if (bindResponse->Results[i].AckResult != RPC_BIND_ACK) { - errorout("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n"); + printerrorf("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n"); } if (bindResponse->Results[i].AckReason != LE16(3)) { - errorout("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason)); + printerrorf("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason)); } if (verbose) printf("... BTFN "); @@ -1029,38 +1052,38 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const // NDR32 or NDR64 Ctx if (bindResponse->Results[i].AckResult != RPC_BIND_ACCEPT) { - errorout( + printerrorf( "\nFatal: transfer syntax %s returned an invalid status, neither RPC_BIND_ACCEPT nor RPC_BIND_NACK\n", transferSyntaxName ); - status = !0; + status = RPC_S_PROTOCOL_ERROR; } if (!IsEqualGUID(&bindResponse->Results[i].TransferSyntax, &bindRequest->CtxItems[i].TransferSyntax)) { - errorout( + printerrorf( "\nFatal: Transfer syntax of RPC bind request and response does not match\n" ); - status = !0; + status = RPC_S_UNSUPPORTED_TRANS_SYN; } if (bindResponse->Results[i].SyntaxVersion != bindRequest->CtxItems[i].SyntaxVersion) { - errorout("\nFatal: Expected transfer syntax version %u for %s but got %u\n", + printerrorf("\nFatal: Expected transfer syntax version %u for %s but got %u\n", (uint32_t)LE32(bindRequest->CtxItems[0].SyntaxVersion), transferSyntaxName, (uint32_t)LE32(bindResponse->Results[0].SyntaxVersion) ); - status = !0; + status = RPC_S_UNSUPPORTED_TRANS_SYN; } // The ack reason field is actually undefined here but Microsoft sets this to 0 if (bindResponse->Results[i].AckReason != 0) { - errorout( + printerrorf( "\nWarning: Ack reason should be 0 but is %u\n", LE16(bindResponse->Results[i].AckReason) ); @@ -1087,8 +1110,8 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const if (!RpcFlags.HasNDR64 && !RpcFlags.HasNDR32) { - errorout("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n"); - status = !0; + printerrorf("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n"); + status = RPC_S_NO_PROTSEQS; } return status; diff --git a/rpc.h b/rpc.h index 86792cb..18ac456 100644 --- a/rpc.h +++ b/rpc.h @@ -8,6 +8,139 @@ #include "types.h" +#if !defined(_WIN32) && !defined(__CYGWIN__) +#define RPC_S_OK 0 +#define RPC_S_INVALID_ARG 87 +#define RPC_S_OUT_OF_MEMORY 14 +#define RPC_S_OUT_OF_THREADS 164 +#define RPC_S_INVALID_LEVEL RPC_S_INVALID_ARG +#define RPC_S_BUFFER_TOO_SMALL 122 +#define RPC_S_INVALID_SECURITY_DESC 1338 +#define RPC_S_ACCESS_DENIED 5 +#define RPC_S_SERVER_OUT_OF_MEMORY 1130 +#define RPC_S_ASYNC_CALL_PENDING 997 +#define RPC_S_UNKNOWN_PRINCIPAL 1332 +#define RPC_S_TIMEOUT 1460 +#define RPC_S_INVALID_STRING_BINDING 1700 +#define RPC_S_WRONG_KIND_OF_BINDING 1701 +#define RPC_S_INVALID_BINDING 1702 +#define RPC_S_PROTSEQ_NOT_SUPPORTED 1703 +#define RPC_S_INVALID_RPC_PROTSEQ 1704 +#define RPC_S_INVALID_STRING_UUID 1705 +#define RPC_S_INVALID_ENDPOINT_FORMAT 1706 +#define RPC_S_INVALID_NET_ADDR 1707 +#define RPC_S_NO_ENDPOINT_FOUND 1708 +#define RPC_S_INVALID_TIMEOUT 1709 +#define RPC_S_OBJECT_NOT_FOUND 1710 +#define RPC_S_ALREADY_REGISTERED 1711 +#define RPC_S_TYPE_ALREADY_REGISTERED 1712 +#define RPC_S_ALREADY_LISTENING 1713 +#define RPC_S_NO_PROTSEQS_REGISTERED 1714 +#define RPC_S_NOT_LISTENING 1715 +#define RPC_S_UNKNOWN_MGR_TYPE 1716 +#define RPC_S_UNKNOWN_IF 1717 +#define RPC_S_NO_BINDINGS 1718 +#define RPC_S_NO_PROTSEQS 1719 +#define RPC_S_CANT_CREATE_ENDPOINT 1720 +#define RPC_S_OUT_OF_RESOURCES 1721 +#define RPC_S_SERVER_UNAVAILABLE 1722 +#define RPC_S_SERVER_TOO_BUSY 1723 +#define RPC_S_INVALID_NETWORK_OPTIONS 1724 +#define RPC_S_NO_CALL_ACTIVE 1725 +#define RPC_S_CALL_FAILED 1726 +#define RPC_S_CALL_FAILED_DNE 1727 +#define RPC_S_PROTOCOL_ERROR 1728 +#define RPC_S_PROXY_ACCESS_DENIED 1729 +#define RPC_S_UNSUPPORTED_TRANS_SYN 1730 +#define RPC_S_UNSUPPORTED_TYPE 1732 +#define RPC_S_INVALID_TAG 1733 +#define RPC_S_INVALID_BOUND 1734 +#define RPC_S_NO_ENTRY_NAME 1735 +#define RPC_S_INVALID_NAME_SYNTAX 1736 +#define RPC_S_UNSUPPORTED_NAME_SYNTAX 1737 +#define RPC_S_UUID_NO_ADDRESS 1739 +#define RPC_S_DUPLICATE_ENDPOINT 1740 +#define RPC_S_UNKNOWN_AUTHN_TYPE 1741 +#define RPC_S_MAX_CALLS_TOO_SMALL 1742 +#define RPC_S_STRING_TOO_LONG 1743 +#define RPC_S_PROTSEQ_NOT_FOUND 1744 +#define RPC_S_PROCNUM_OUT_OF_RANGE 1745 +#define RPC_S_BINDING_HAS_NO_AUTH 1746 +#define RPC_S_UNKNOWN_AUTHN_SERVICE 1747 +#define RPC_S_UNKNOWN_AUTHN_LEVEL 1748 +#define RPC_S_INVALID_AUTH_IDENTITY 1749 +#define RPC_S_UNKNOWN_AUTHZ_SERVICE 1750 +#define EPT_S_INVALID_ENTRY 1751 +#define EPT_S_CANT_PERFORM_OP 1752 +#define EPT_S_NOT_REGISTERED 1753 +#define RPC_S_NOTHING_TO_EXPORT 1754 +#define RPC_S_INCOMPLETE_NAME 1755 +#define RPC_S_INVALID_VERS_OPTION 1756 +#define RPC_S_NO_MORE_MEMBERS 1757 +#define RPC_S_NOT_ALL_OBJS_UNEXPORTED 1758 +#define RPC_S_INTERFACE_NOT_FOUND 1759 +#define RPC_S_ENTRY_ALREADY_EXISTS 1760 +#define RPC_S_ENTRY_NOT_FOUND 1761 +#define RPC_S_NAME_SERVICE_UNAVAILABLE 1762 +#define RPC_S_INVALID_NAF_ID 1763 +#define RPC_S_CANNOT_SUPPORT 1764 +#define RPC_S_NO_CONTEXT_AVAILABLE 1765 +#define RPC_S_INTERNAL_ERROR 1766 +#define RPC_S_ZERO_DIVIDE 1767 +#define RPC_S_ADDRESS_ERROR 1768 +#define RPC_S_FP_DIV_ZERO 1769 +#define RPC_S_FP_UNDERFLOW 1770 +#define RPC_S_FP_OVERFLOW 1771 +#define RPC_X_NO_MORE_ENTRIES 1772 +#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773 +#define RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774 +#define RPC_X_SS_IN_NULL_CONTEXT 1775 +#define RPC_X_SS_CONTEXT_DAMAGED 1777 +#define RPC_X_SS_HANDLES_MISMATCH 1778 +#define RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779 +#define RPC_X_NULL_REF_POINTER 1780 +#define RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781 +#define RPC_X_BYTE_COUNT_TOO_SMALL 1782 +#define RPC_X_BAD_STUB_DATA 1783 +#define RPC_S_CALL_IN_PROGRESS 1791 +#define RPC_S_NO_MORE_BINDINGS 1806 +#define RPC_S_NO_INTERFACES 1817 +#define RPC_S_CALL_CANCELLED 1818 +#define RPC_S_BINDING_INCOMPLETE 1819 +#define RPC_S_COMM_FAILURE 1820 +#define RPC_S_UNSUPPORTED_AUTHN_LEVEL 1821 +#define RPC_S_NO_PRINC_NAME 1822 +#define RPC_S_NOT_RPC_ERROR 1823 +#define RPC_S_UUID_LOCAL_ONLY 1824 +#define RPC_S_SEC_PKG_ERROR 1825 +#define RPC_S_NOT_CANCELLED 1826 +#define RPC_X_INVALID_ES_ACTION 1827 +#define RPC_X_WRONG_ES_VERSION 1828 +#define RPC_X_WRONG_STUB_VERSION 1829 +#define RPC_X_INVALID_PIPE_OBJECT 1830 +#define RPC_X_WRONG_PIPE_ORDER 1831 +#define RPC_X_WRONG_PIPE_VERSION 1832 +#define RPC_S_COOKIE_AUTH_FAILED 1833 +#define RPC_S_GROUP_MEMBER_NOT_FOUND 1898 +#define EPT_S_CANT_CREATE 1899 +#define RPC_S_INVALID_OBJECT 1900 +#define RPC_S_SEND_INCOMPLETE 1913 +#define RPC_S_INVALID_ASYNC_HANDLE 1914 +#define RPC_S_INVALID_ASYNC_CALL 1915 +#define RPC_X_PIPE_CLOSED 1916 +#define RPC_X_PIPE_DISCIPLINE_ERROR 1917 +#define RPC_X_PIPE_EMPTY 1918 +#define RPC_S_ENTRY_TYPE_MISMATCH 1922 +#define RPC_S_NOT_ALL_OBJS_EXPORTED 1923 +#define RPC_S_INTERFACE_NOT_EXPORTED 1924 +#define RPC_S_PROFILE_NOT_ADDED 1925 +#define RPC_S_PRF_ELT_NOT_ADDED 1926 +#define RPC_S_PRF_ELT_NOT_REMOVED 1927 +#define RPC_S_GRP_ELT_NOT_ADDED 1928 +#define RPC_S_GRP_ELT_NOT_REMOVED 1929 +#endif // !defined(_WIN32) && !_defined(__CYGWIN__) + + typedef struct { BYTE VersionMajor; BYTE VersionMinor; diff --git a/shared_globals.c b/shared_globals.c index adba698..0487791 100644 --- a/shared_globals.c +++ b/shared_globals.c @@ -14,6 +14,10 @@ int_fast8_t DisconnectImmediately = FALSE; const char *const cIPv4 = "IPv4"; const char *const cIPv6 = "IPv6"; +#ifdef IS_LIBRARY +char ErrorMessage[MESSAGE_BUFFER_SIZE]; +#endif // IS_LIBRARY + #ifndef USE_MSRPC int_fast8_t UseMultiplexedRpc = TRUE; int_fast8_t UseRpcNDR64 = TRUE; diff --git a/shared_globals.h b/shared_globals.h index 2a1dd73..808b2e1 100644 --- a/shared_globals.h +++ b/shared_globals.h @@ -74,9 +74,9 @@ extern const char *const Version; #define UINT_MAX 4294967295 #endif +#define MESSAGE_BUFFER_SIZE 4096 #ifdef IS_LIBRARY -#define MESSAGE_BUFFER_SIZE 256 -EXTERNC __declspec(EXTERNAL) extern char ErrorMessage[MESSAGE_BUFFER_SIZE]; +extern char ErrorMessage[MESSAGE_BUFFER_SIZE]; #endif // IS_LIBRARY extern int global_argc, multi_argc; diff --git a/types.h b/types.h index b3db448..ce948bc 100644 --- a/types.h +++ b/types.h @@ -301,6 +301,4 @@ typedef struct { } CLDATA, *const PCLDATA; - - #endif // __types_h diff --git a/vlmcs.1 b/vlmcs.1 index b42e44a..7ef8f93 100644 --- a/vlmcs.1 +++ b/vlmcs.1 @@ -75,11 +75,11 @@ to specify applications that are not listed with \fB-x\fR. The .B -l option is used as a shortcut for the most common applications. +.IP "\fB-K\fR \fIprotocol-version\fR" +Force a specific version of the KMS protocol. Valid versions are 4.0, 5.0 and 6.0. The default is to select a suitable version according to the \fIapplication\fR selected. You may use \fB-K\fR to send an incorrect protocol version to the KMS server and see how it behaves. Genuine KMS servers return HRESULT 0x8007000D if the KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do the same. When sending a request with an incorrect protocol number, vlmcs ignores the minor protocol number (e.g. sends a v4 request for version 4.1). If the major version number is less then 4, it sends a v4 request. If the major version is greater then 6, is sends a v6 request. In any case the \fIprotocol-version\fR as specified by \fB-K\fR is put in the version fields of the request. + .IP "\fB-4\fR, \fB-5\fR and \fB-6" -Force version 4, 5 or 6 of the KMS protocol. The default is to select a suitable -version according to the -.IR "application" -selected. Plese note that some products (e.g. Office 2013) may use different protocols with different versions of Windows. +Force version 4, 5 or 6 of the KMS protocol. These options are actually shortcuts of \fB-K 4.0\fR, \fB-K 5.0\fR and \fB-K 6.0\fR. .IP "\fB-m" Let the client pretend to be a virtual machine. Early versions of Microsoft's diff --git a/vlmcs.1.dos.txt b/vlmcs.1.dos.txt index 49d84eb..dcd26b6 100644 --- a/vlmcs.1.dos.txt +++ b/vlmcs.1.dos.txt @@ -80,31 +80,44 @@ OPTIONS as a shortcut for the most common applications. + -K protocol-version + Force a specific version of the KMS protocol. Valid versions are + 4.0, 5.0 and 6.0. The default is to select a suitable version + according to the application selected. You may use -K to send an + incorrect protocol version to the KMS server and see how it + behaves. Genuine KMS servers return HRESULT 0x8007000D if the + KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do the + same. When sending a request with an incorrect protocol number, + vlmcs ignores the minor protocol number (e.g. sends a v4 request + for version 4.1). If the major version number is less then 4, it + sends a v4 request. If the major version is greater then 6, is + sends a v6 request. In any case the protocol-version as speci‐ + fied by -K is put in the version fields of the request. + + -4, -5 and -6 - Force version 4, 5 or 6 of the KMS protocol. The default is to - select a suitable version according to the application selected. - Plese note that some products (e.g. Office 2013) may use differ‐ - ent protocols with different versions of Windows. + Force version 4, 5 or 6 of the KMS protocol. These options are + actually shortcuts of -K 4.0, -K 5.0 and -K 6.0. - -m Let the client pretend to be a virtual machine. Early versions - of Microsoft's KMS server did not increase the client count if - the request came from a virtual machine. Newer versions ignore + -m Let the client pretend to be a virtual machine. Early versions + of Microsoft's KMS server did not increase the client count if + the request came from a virtual machine. Newer versions ignore this flag. -d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐ - ates some random DNS names for each request. If you prefer Net‐ - BIOS names, you may use -d. A real Microsoft activation client - uses DNS names or NetBIOS depending on the client name configu‐ + ates some random DNS names for each request. If you prefer Net‐ + BIOS names, you may use -d. A real Microsoft activation client + uses DNS names or NetBIOS depending on the client name configu‐ ration. KMS servers treat the workstation name as a comment that - affects logging only. Clients will be identified by a GUID that - can be specified using -c. -d has no effect if you also specify + affects logging only. Clients will be identified by a GUID that + can be specified using -c. -d has no effect if you also specify -w. -a application-guid - Send requests with a specific application-guid. There are cur‐ + Send requests with a specific application-guid. There are cur‐ rently only three known valid application-guids: @@ -113,91 +126,91 @@ OPTIONS 0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013) - A Microsoft KMS server uses these GUIDs to have seperate coun‐ - ters for the already activated clients. A client that does not - contact the KMS server within 30 days will be deleted from the + A Microsoft KMS server uses these GUIDs to have seperate coun‐ + ters for the already activated clients. A client that does not + contact the KMS server within 30 days will be deleted from the database. Emulated KMS servers are always fully charged. -k kms-guid - Send requests with a specific kms-guid. A Microsoft KMS server - uses these GUIDs as a product id to decide whether to grant - activation or not. A list of current kms-guids can be found in - kms.c (table KmsIdList). Emulated KMS servers grant activation + Send requests with a specific kms-guid. A Microsoft KMS server + uses these GUIDs as a product id to decide whether to grant + activation or not. A list of current kms-guids can be found in + kms.c (table KmsIdList). Emulated KMS servers grant activation unconditionally and do not check the kms-guid. -s activation-guid - The activation-guid defines the actual product, e.g. "Windows - 8.1 Professional WMC KMSCLIENT edition". A activation-guid maps - 1:1 to a product key. However, neither a Microsoft KMS server + The activation-guid defines the actual product, e.g. "Windows + 8.1 Professional WMC KMSCLIENT edition". A activation-guid maps + 1:1 to a product key. However, neither a Microsoft KMS server nor emulated servers check this id. The activation-guid is use‐ - ful in logging to get a specific product description like "Win‐ - dows 8.1 Professional WMC". A list of current activation-guids + ful in logging to get a specific product description like "Win‐ + dows 8.1 Professional WMC". A list of current activation-guids can be found in kms.c (table ExtendedProductList). -n requests - Send requests requests to the server. The default is to send at + Send requests requests to the server. The default is to send at least one request and enough subsequent requests that the server - is fully charged afterwards for the application-guid you + is fully charged afterwards for the application-guid you selected (explicitly with -a or implicitly by using -l). - -T Causes to use a new TCP connection for each request if multiple - requests are sent with vlmcsd. This is useful when you want to - test an emulated KMS server whether it suffers from memory - leaks. To test for memory leaks use -n with a large number of - requests (> 100000) and then test twice (with and without -T). - This option may become neccessary for future versions of Micro‐ - soft's KMS server because multiple requests with different - clients-guids for the same kms-id-guid are impossible in a real + -T Causes to use a new TCP connection for each request if multiple + requests are sent with vlmcsd. This is useful when you want to + test an emulated KMS server whether it suffers from memory + leaks. To test for memory leaks use -n with a large number of + requests (> 100000) and then test twice (with and without -T). + This option may become neccessary for future versions of Micro‐ + soft's KMS server because multiple requests with different + clients-guids for the same kms-id-guid are impossible in a real KMS szenario over the same TCP connection. -c client-machine-guid - Normally vlmcs generates a random client-machine-guid for each - request. By using this option you can specify a fixed client- - machine-guid This causes a Microsoft KMS not to increment its - client count because it receives multiple requests for the same - client. Thus do not use -c if you want to charge a real KMS + Normally vlmcs generates a random client-machine-guid for each + request. By using this option you can specify a fixed client- + machine-guid This causes a Microsoft KMS not to increment its + client count because it receives multiple requests for the same + client. Thus do not use -c if you want to charge a real KMS server. -o previous-client-machine-guid If the client-machine-guid changes for some reason, the real KMS - client stores a previous-client-machine-guid which is sent to - the KMS server. This happens rarely and usually - 00000000-0000-0000-0000-000000000000 is used. You can use -o to + client stores a previous-client-machine-guid which is sent to + the KMS server. This happens rarely and usually + 00000000-0000-0000-0000-000000000000 is used. You can use -o to specify a different previous-client-machine-guid. -G filename - Grabs ePIDs and HWIDs from a KMS server and writes the informa‐ - tion to filename in format suitable to be used as a configura‐ + Grabs ePIDs and HWIDs from a KMS server and writes the informa‐ + tion to filename in format suitable to be used as a configura‐ tion file (aka ini file) for vlmcsd(8). This is especially use‐ - ful if you have access to a genuine KMS server and want to use + ful if you have access to a genuine KMS server and want to use the same data with vlmcsd(8). - If filename does not exist, it will be created. If you specify - an existing filename, it will be updated to use the information - received from the remote KMS server and a backup filename~ will + If filename does not exist, it will be created. If you specify + an existing filename, it will be updated to use the information + received from the remote KMS server and a backup filename~ will be created. -G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n -w workstation-name - Send requests with a specific workstation-name. This disables - the random generator for the workstation name. Since it is a + Send requests with a specific workstation-name. This disables + the random generator for the workstation name. Since it is a comment only, this option does not have much effect. -r required-client-count - Also known as the "N count policy". Tells the KMS server that - successful activation requires required-client-count clients. - The default is the required-client-count that the product would - need if the request was a real activation. A Microsoft KMS + Also known as the "N count policy". Tells the KMS server that + successful activation requires required-client-count clients. + The default is the required-client-count that the product would + need if the request was a real activation. A Microsoft KMS server counts clients up to the double amount what was specified with -r. This option can be used to "overcharge" a Microsoft KMS server. @@ -205,57 +218,57 @@ OPTIONS -t status Reports a specific license status to the KMS server. status is a - number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB - grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification, + number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB + grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification, 6=extended grace. Refer to TechNet ⟨http:// technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩ - for more information. A Microsoft KMS server collects this + for more information. A Microsoft KMS server collects this information for statistics only. -g binding-expiration - This tells the KMS server how long a client will stay in its - current license status. This can be the remaining OOB time (the - grace peroid that is granted between installation of a product - and when activation is actuall required) or the remaining time - when KMS activation must be renewed. binding-expiration is + This tells the KMS server how long a client will stay in its + current license status. This can be the remaining OOB time (the + grace peroid that is granted between installation of a product + and when activation is actuall required) or the remaining time + when KMS activation must be renewed. binding-expiration is specified in minutes. A Microsoft KMS server apparantly does not use this information. -i protocol-version - Force the use of Internet protocol protocol-version. Allowed - values are 4 (IPv4) and 6 (IPv6). This option is useful only if - you specfiy a hostname and not an ip-address on the command + Force the use of Internet protocol protocol-version. Allowed + values are 4 (IPv4) and 6 (IPv6). This option is useful only if + you specfiy a hostname and not an ip-address on the command line. - -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request. + -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request. This can be used to test if the KMS server uses the same setting - of this flag in the RPC bind respone. Some KMS emulators don't + of this flag in the RPC bind respone. Some KMS emulators don't set this correctly. -N0 and -N1 Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the - RPC protocol. Disable NDR64 only in case of problems. If NDR64 + RPC protocol. Disable NDR64 only in case of problems. If NDR64 is not used, vlmcs cannot detect many RPC protocol errors in KMS emulators. If you want to test whether a KMS emulator fully sup‐ - ports NDR64, you must use the -n option to send at least two - requests. This is because Microsoft's client always sends the - first request using NDR32 syntax and subsequent requests using + ports NDR64, you must use the -n option to send at least two + requests. This is because Microsoft's client always sends the + first request using NDR32 syntax and subsequent requests using NDR64 syntax. -B0 and -B1 - Disables (-B0) or enables (-B1) bind time feature negotiation - (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐ + Disables (-B0) or enables (-B1) bind time feature negotiation + (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐ lems. If BTFN is not used, vlmcs cannot detect many RPC protocol errors in KMS emulators. - Options that do not require an argument can be specified together with - a single dash, e.g. vlmcs -6mvT. If you specify an option more than + Options that do not require an argument can be specified together with + a single dash, e.g. vlmcs -6mvT. If you specify an option more than once, the last occurence will be in effect. @@ -265,34 +278,34 @@ FILES EXAMPLES vlmcs kms.example.com - Request activation for Windows Vista using v4 protocol from - kms.example.com. Repeat activation requests until server is + Request activation for Windows Vista using v4 protocol from + kms.example.com. Repeat activation requests until server is charged for all Windows products. vlmcs - - Request activation for Windows Vista using v4 protocol from a + Request activation for Windows Vista using v4 protocol from a KMS server that is published via DNS for the current domain. vlmcs .example.com - Request activation for Windows Vista using v4 protocol from a + Request activation for Windows Vista using v4 protocol from a KMS server that is published via DNS for domain example.com. vlmcs -6 -l Office2013 -v -n 1 - Request exactly one activation for Office2013 using v6 protocol + Request exactly one activation for Office2013 using v6 protocol from localhost. Display verbose results. vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini - Get ePIDs and HWIDs from kms.bigcompany.com and create/update + Get ePIDs and HWIDs from kms.bigcompany.com and create/update /etc/vlmcsd.ini accordingly. BUGS - Some platforms (e.g. Solaris) may have a man(7) system that does not - handle URLs. URLs may be omitted in the documentation on those plat‐ + Some platforms (e.g. Solaris) may have a man(7) system that does not + handle URLs. URLs may be omitted in the documentation on those plat‐ forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly. @@ -301,7 +314,7 @@ AUTHOR CREDITS - Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐ + Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐ ferati87, qad, Ratiborus, vityan666, ... diff --git a/vlmcs.1.html b/vlmcs.1.html index 2d3ec65..0196526 100644 --- a/vlmcs.1.html +++ b/vlmcs.1.html @@ -1,5 +1,5 @@ - + @@ -183,14 +183,30 @@ applications is not complete. You may supply GUIDs with that are not listed with -x. The -l option is used as a shortcut for the most common applications.

+

-K +protocol-version

+ +

Force a specific version of the +KMS protocol. Valid versions are 4.0, 5.0 and 6.0. The +default is to select a suitable version according to the +application selected. You may use -K to send +an incorrect protocol version to the KMS server and see how +it behaves. Genuine KMS servers return HRESULT 0x8007000D if +the KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do +the same. When sending a request with an incorrect protocol +number, vlmcs ignores the minor protocol number (e.g. sends +a v4 request for version 4.1). If the major version number +is less then 4, it sends a v4 request. If the major version +is greater then 6, is sends a v6 request. In any case the +protocol-version as specified by -K is put in +the version fields of the request.

+

-4, -5 and -6

Force version 4, 5 or 6 of the -KMS protocol. The default is to select a suitable version -according to the application selected. Plese note -that some products (e.g. Office 2013) may use different -protocols with different versions of Windows.

+KMS protocol. These options are actually shortcuts of -K +4.0, -K 5.0 and -K 6.0.

diff --git a/vlmcs.1.pdf b/vlmcs.1.pdf index 97e3ba04e7e4f28effcccca9e2c3766c76ae1690..dc0b8e68bd10e4fd2ff8057e875f85b00f8fc986 100644 GIT binary patch delta 9892 zcmZXZRa6|nvaT5{xVyXi00Y5oaJS%r0KtO>XK;6ScMt9|xI=If+&#gad(VEkcjxp| z^;h***XpOgS67Y!E~fzXo#+rA0WLulQBf2ZS7!@TdlZlC8ht&N-~2d!%XQ+97P8tT z!7#}2lUXx^e-q5vN1E|3;bhD#iJasz_T)0&w_ay{2_RDdojpOddX7`5aG?)6ZDOvlu3owwY&FW8()e}d^rpCA;AP*012|S4R~#T+CA?) zq!g_iJyg8$eK#s}Q^4I(fq}dUwO#PG4Py zqt!Fv=krQi46A_9|RA(>&nB zVP&-hctQq=A42rukAC}}+)(mIeB8-Gt<8A_1OrZ&3wf^nh|GZxW#4re9Vf47bM+m_-Dyk@=6~f&t!*q*qmyiX!32e zl;gS8w)n3Cotv;0V@E~nMD_Cbmzgw5(H`ylFm9DFaR^;SfqP6~ZxU5Fbw!u>zHp)i z(t>iF*6%SZTm53#)BQI!3tzZ1*Ukeq{PJ0^i-zt#mko~-3u!r1hH=qz>6qdPx%(OM z2F?$2w?_qM?w^s1e_PsJKh^gJ7?uNNiA+XCGQtSFV)&>vUFS{>wJ-CXn9T% zIB+@jb|6fA!=b2ihbesq)gB?)!56e6XNX56MG0JkY{=|VvHng&NK)H0>%XyL~!WSkgD% zlKHyvq^4B2gJo7DY#GyK(1^UC$#_~Ba$4-4^@7&85(`TNk{@yR{I+1^*axyrqD~)t z{7-$!X0}0%L?JHKL-K0UlZVoo7MwjL1$7;k zL9?c)uHbQ$pA`)h+P#NWI6Umv?a*C0xOY?JVrKVcWJc0&JO>+j-1mDhDw1ECS_^f- z<5e094HV%NiLuoeAe1qWTFRlE}t%JP!+sxvItGjoPqFC<{UQQ`S=aMI! z0*bxc3~8*L>OQEc6^a|EM-iM*;B_K4ZAxkdyaj9p+8|wr^#A@j|035#)u&(d(FYz4 zL$n*P8{O8c(VKAefR22{vnqV0&V^=8;;=sIe3o0=WZ6RSE%n69ZS;my00ZA4wn6!rJG|PJ6 zl$g>;OoaCBswAfS2)XglsBuJd@9k z+WkU~XRz=Ao5Fo26gO^Mx8bhZos|sT2nlH3cPR) zl`}?^V;%oH`+$@I@nDDVrU5r4i1z1b2X20@j_C{@RcqwSUmh`WF`fIxIY`Ct1%vxe zooJQyrP3^nf-ga>wNpO`#TIJc<(v|q)J!m=*qU8Pau2h@uiAf5%tOLTS6&5*2vod2 zNyYsTE`fnvLQp;W$YR!@lBCwBv9}%i$G?Qsic*aD5$8y1lnFmYP2t9Z+j9Fz7jyk^ zLXdLI45pFy3$Og>N5v#pbSLBLM&-d}Qj*5(FsD9GB%c=>AQs&fUG9fD-M$%KssM7Q zSclj$da)IzI~+1P)V~lpXNi^8D_mTN0N*~N;U1&eN*=Dv0-4vxt@dNXkS`Q%8kZR2 z>)LK*y5%MZl7dfC-z%k%h=;j%D-UDb5N#Z{a{^IG`o=0^*q$2#&GGS)cEUpw6$G@0 zUPu*eI3wGIqDckGK5@9Z!B<}|5GbTgo z0{+Pz`JRQSd5He+Qxg2Hj~qZ+dPKq)w;t`Fg?R*tvJz{FHW33Xhx_#}A^s{P)Ru~G z?)ZV*(2!ulozIXyToh7RB~;5#vpw+h4~jFk9$RGq{>k>kA0_eFyuXI1O{@}*ie+{Z zj;jX}}1#7PfPGl^S`{Hdpu^K>CkNdsBF_Z=RnFB9^+6^=Xc zHuD94zqlfmRWJ}!ty6hPC&UKo>=lGAXe3|hO)2gvbz8YkuSUG+ctMp)Xqk(wmJD+> z?sns2VxPHj3)VeH5mDOS83w^4A~D2ORRH7c!T2*3)5c@;-E&-V!|=N1qu&fbYF<>4 zbdn{8+FD2`$oacSb*>MOxW1PrPs;@j(cI=cug0lbAo5d!hn`^;gk0>f1D zlQ|o+Kc^_<`Dy>zmaZvIIDy(72Rglg_Y*Jg38Q)D;$y3Yj33U0lstk4Oe6TNN_bcH zj7e@CpE&tmcppyQBx6rb$1Ut53ep5XMXRUGjYP6GygcSW1J^n?Eh9I#!?N?ta^Z-W z=#Y@*Htgh5j&F*5yrC@4wp9tiEe;Atv8XqDNiMPRNwT}MLf$kOd2LtwU}NEIX)o~xon5MmZj|;cpk_K2&vhv1V_79>1K;WXrgJK57bp>Ap_YI}|&iDd*y1>0AFMfYb z3ThU^lTwN6A>1JT|8mI9`nIvZ+pyon%BZp_t>GMEnG}-o`T$*7XTUqr-*Q+h68Y+l zWzF;KQ;|Pg7{#1nO)M}|X!j7Ad+5}Y&Ak(&&wrF3R7Gl=_-dc!VM_pB=6a*9@g+9< zdh=@izNs}yX*Rf=4e7O6;xPdld&y2<$wEK4jlx2BDr@PYR_U^iO zr~U^~MMha%&Y#$=0{QpJhmv zJwI#eF?qk=wy>5U%+d|bLAga2j5gt7PY0t?FV7QV@bN-xeeE|KAZ>!81Wy?EDi?)z z5>JY&6bXlnOO(#blnk9!q}P8-g?}NRXJx%r;99r|{bl`{Gj+%7L{1CUtR{EZYho+% zz;f$vTvxG-S&#HqLEMTC)rZbpt2kQp{t+8jA8M||2~A>awmI)KnZ3BaR9DxIRhZxq`l`8ndqEGP1FCPO!z^uh}N87%LjO&OR>daU0t0S%ot zEgHrex2KTO509w#DH1o+vm3Ju@YVJN`0?6h9U?p_H^OtMG~b7Y0N;V@ zZ-Us4Bmit?Ty^I$8@--KrQ%b{=r3#?J(95YKMw324La_$yW0K>k7S-rvN!c<=ln3W zs8VRt-}z*~-{TvoHw=FdGuSbrs79Ej{hHW!Fv4X`!sh#;@p#~X*0|js-BrQG8iJs& zYN3D%j|gEK8zgawRwn3{#~O0m?Hcko%jJ#BVdGDs==EPx$Gkw)1dvK^5Hzb`wb^JF z4M+eUK$29mvS+Bzf=ddBL8|CavzS`|287D|2qP;LZR%YVPu`+C@8^XlRJ)Fh2$A(~ z=UQ$e%_f&)0U+F}Y~<|?e!buC_fkapmX7=0f7icF4=I#1lsjA<$WnGj9wrWK8)# z55+uEKo&7JMaZRYKq=;VVudl;tG4`TT|H{lJ`Z8zPt{kFH7DnSoC~2lSej`H(5(Gs;F}R9IdQCZHZaB?_T?mO@YO0v}NWIWW+4@q(NOp)aLL2TUw`&7TdxDVOW&6 z((5LI=KP?&Ix;k`dGnWU;>L5wmx>}Gv$2R&01cwNVU~@Of=Y(kUeV zBif80Ixl5n+>Zfwe6W9)q^t_+!^|4;t@>nsNhEzSc}rI&_i*9XN}p6S9ncSDqYC6r zggm`Ev|oNXoQUvmh(!rGA*l}x}@o&eMrdbUn?z7fzT^kbj`so6tzRxU@L>}NvAvile zNI|SdL?pnV;FyHa+*tY{u!)H_c3a)-Nc*#23$XVrPTuB@=yh?Sf^N%V@T0d_1_T*c zrB>pDt5HtB*di4c6QO$`Q)xdUtWf(kic3RzP;fZltYV`o6-+y6cw@}RI|D7GyJoZ7 z`GG^WDqAol``H*zDso%Fs_Edv}b$8IRfQU-dkCDlA9(e z1J@FGgiUJ6gK$#4jdVp7bc2rV@dI@ZV%piQ`&Of(d(^DJF3#QwiAaqWs;J~`Z|cAE zA;A#`QrRK=kH3nGUO3@Js~UJ(hf-LXHYvInQxLx{nEp;I*htHk*1TRNbAdFA$-UAp z?<{K|Bv-j=vaqJTbigI$lE4QaQe_g`qCw4b=fWSo@uUjnXQJ;sv+D3S51Pr-*NjgV zhs7y*vz*H6QYiF78%v~}%rkc#aOZz7v)mkWgqCI^f^?Ymn44dSlP1%LIyIVR=;peT z%aWSFR1FOr!3o?BDORxG;vsuIjCc4u{Fgy8G=zBj$))9OY^$(Z(ccfwDmynPj2o!0dhZvLC^KFx4>eS|}!wnHaS|g(R&YZTxG;ZB6`6pHBG*Tr>W`5d-H%$20w1 zb8)<1E+lrws#F;EIN{Lggo#ky7$XvjS@e>;xu3$#t*v+<#jZ#1202;Pnip-ZMjPo7 zW${`le^4)4DFW}uk??irJ+-O3#}Ofn{Hmt-W_-S^Thj#vcR^Km#6aI+NW1V1+c&Xrk}BEL`?l0ui^{Dyz)h@^p1Px^3kX5mnHF;K z{hHMQ%j@^$MC!?57}6u$HZ?}a?*(`*a#(@K_Q_-#+f(A38I3HiChF#>l1w2~P!^hQ z_#SXld3Y0DF8rB@U$-T@#jknn5eOX(=PclRf{jR3+x`_H_~KNbAzlGS%b(U+anZ-&$!sQ1 z=^uqJI_-?S+Z}uA^H*DZvqRihJx%WKLI~}~SB{O`N zo@=eb2nkuSnS{yZfT)sLMtOJTJ1*vmeop3g>w4mL+cUE?zTP%eQ32f=HZg^l)f(j5 zRiu+FvD^{IA0}_n(K$-|_b?+D?~x zu4y@|vn3&2F$!W=&mGo7;fgRY*C-muB4vDp%UhCqZ_isG*Gc(Gnn&pL=8Zv`Zz}7# z)CZ&Eg}5gIFDnDXS$3|>f&!~f&s5K;SrqW@>2}6;##3k)fV_&kWt39*lBKBa6)2sH zIkSCz+4GFH&hOcuM~#C1MO!a2iJIXK_uOvz=n=xYWzzvO>-5a;hXD_-A};|2Zi*w{ za+0mMY(RAFN~!+TB3L5(mFV;x$@;}(JC#!?uiV5Ej_CT>#13+gK!_Dx*I!p!?t43X z983cvTOaI<(BY^%4;EW+mnpiFM)^|?wKjM?uN{2_>XS?Qa9y0jEpDn^hw!N(Wt_E6v|@PR7vaF}1J6{KhMVtF{;xMl zjh=l{mH^J%g-O9TTiqdjEXlr+Nd`@jcShRO!(9uDOLNGNGgHhUIFIZ{%++_F8p3#U zA|7wOvK?49zSpap`Sr}1QCW%?&CON6gQC3ccgn_@BQw5JzbK?goJgJL)wne3E0LzP z=`GeQ&y{P))=seK6y(+Mb^dkWH{?_P`(>l}M6jIaHN<$cs8uhE^DRh6Yz7ILJ1Ur= zYD%fc{;f&8O3V^Z*7SabDY3;|GAZuKNk*n$+LZIVm*;n(=3~7WRNqgD^(2gxc#X5Q}QtjS+)+XgsE_nDM%_j zSIg=)9aO$A1K5lsLuLeZ`DuKo$G!_{bFu6VTR!^n)6{ZW*!c2V>nwMDzQ?`K90TAvb*0oCXf; zM%Q4}SSUUYzF?NE}X^-O2KW!IuGom$;&+92f?;3+#QEe*IxRrytJghE@bK z!rN2~Bk+hQ)g+a-?MQ=}HtzgO!YpE!Dyb?SN#bGL@O6RyG*KGuLk>nk4U|z_w)gV} znMW#QpY)mz^y~1sOSq-0|6t6(#WUxt+oIO5C1F@ugF=}WR{ZcwxU!$qt-%PsJ!N4K zDHbe!;UeWBQY{_!kK@s&3HC*ToUPh5*kEQ$?nV*d4V&V0x^qt&2Q+gQe4O$FJ_*o& zkOc2NOC3>v2(GfJs%A-5HDu54G54~S04mq9MNg+>n2g_2m-aBrA!~Z+@XZE|!f(sS z?XZr%b?mVRPNr1m4>ci31P=K7)*(Yu!9?BcD9Wc)*>raKyyh4`O9Is5MGX@OWW{Cm zU8Dn$>MnAb_PVwxN*z`QU}+_Wq@GN9n?$T^+}(~I;C-4!2+COip^pS2y0UaUyQhui zyhRsJypZb57Nz^&Awzn#0ijR#f>fQIN)z&I`(YLxt4v>U!Hzf`^3z$CS0xZ_Mq?c^ z-wf^N?h@sMG_unh*Luu73zVOV$UAI5+uhS)e{=$HD+iux6NxurL=h~-HePR@*Y_`% z-=Fdakj_S6rO4J>78lpU?t2Tw=E(!SYTaohY8&YOln#Xgbufa;pX}1U`l1unquN*) z1qnw5w(twaXt^G!Pkf^Mpfv&+IuBsF@sa+pqz|8slv!R{0q{WHY%0u^;85fs19b>$ zVX3*AoNLz&-OH9AX^SLc&g!BUwpNT&YCVmtP+GfmV)Z{aqI49aAsH-7V9Gl1Hc*UnYyL0gb!zfPNvUTl9f zkWVR<^%fgB>@3Z$14>7Ao>Xbw#E*=_s zxX%Tp^-Z&GqQj<2_BsOcqXWNXyZY~L+9jY=LtZAfvydZ;8EOnEWqt4Pn9uUzMCOSq zgmaX_bV{{4q=vD!&Og<@E_Qi)9Kf4C)4*61y^+I6{jTzv&h) zIxPlAQ_HOKm@g(kaFwKgt%iXxMoI%y!PJ$ilvj3QO3 z8K)2D1+?j^qf(sn83m9ZM+CKC|=*O`Q6cV6De57`2i zqI;Uch<;&W>(DsDpo7>o7Y4P)yX~4i;shUSRL%5a9}zu>6pF-r4Lt&v!1KWZ!z_G* z(1pzRh+&kc3Wq}Y(skxYk^OVpKh>jx;foCR6q{7B?w<&g>3@mU@P0Q7E%GY{e#3$n zYhsWC8~x^!u)sFfhC(HzV1H;zA6iRES0(`cK6A!_k0RoAq%Lz<@Sc2Cg8-%0hqtbpeJZJ{7yg z34hg}e1ooe#AcixuLp#EKB2ME{e3X}(-1O^VZZ&nxnaE7Jw8e`NKN+`b?FvOHcgwC zoU-0_ZL$S;qhF^)i8aO1&vt3au?v{*4YG*1pcFlUD14btv{BA9`9IB^=(aSxs}ldJ3iy>S@u`QnnCMN8KY9T zhV@2em5SJf&wDa(Ik5yKtf0Pr&d$xfR-&c6<8&hCZqDjHh!UM- zsHBECQQGQ3skXv)J4Ul)ovM?|2D}ue!O)E<$fd(YNkO5oD+FUjYe&wrLy9gqn$QX# z6y{wjdDLmI@@);3I=Yt_>cJ9xrcE6!D@BA!;G>I_)Jq~M=2<|0B3TX%opcfr5dwqE z`Q1Km%Wg=E@-(r{p5NIHM;v~zdJImbzbcbF3sW&rr3LkMi800$(0x~SZ9P$B!7$E; zglrSwK;dPh{os(hk%EE^*7s(KUQ|Dz3T3%Uuj)xhu_&TCA+i|UNhOHhGq$P4?2cAM zb{XrUQ>t~V&Ky`09b|r?KDw@c4F|JA#VWt&ER%A*eR~Mk0W{Fym7I}OQ`3mOy_{CcPK>*k91K zXTkUgn`-3u(~Sjl@Y*e}LAfwT{bq|ngnn}rBcIKKbDmneE`f2GRraDZFVl+k_8MEi zXgQkDj>GwdG9kTDb)*KPnrH=1p%P)dr3F21)~o`(>IypQ`s#zTw_bdIN8@1l$EvVe zi_}4jilVuE1`4@N$Z=^JSKKn%E}o}#F+K-wPHOX8qYaRi*G^Mq%Y)B5N)wf1*YzCioTEXB5^KyO2N8BlbP^YXLM$Hm4|4csY2<>S;y z;WiLwmjioovIpukZAbU^-iw8Jsxc7mXNu4Ym~TP8q4Ou*9eyA@?6aRuV&<_x7U1UQ z=H~)&2_~iSeEfgA#x_o2e-@Pk70Q1C9zH%UP*Q=JAcUWf=bs!m5XARy zJvX0#!2e?WJluT$YWaaY-2XBGUcUd$`1t?BlJvgtL4bVx|7f`Qc|lzNFdi;`!GCAv z;Q|SQ{;lH?JV0*XKVohkUY>ss<_7W# V2qx*7%c6ilTqyMPGOA#d{{uMuql^Fm delta 9331 zcmZvBWmFu@vMug1xCEErFbwYQ?ykYzgAWkg-6eRCpuydO1RGp~1|1~0^Ugc#t@ZBt z&h1~-yZ5f@u3x)WUrfPPkHa=}VS>4UARwBkD4M62hqZ+>ns5Gh!}Zj4UfiIfdhthV z9vwnSnC=6M8nV$<{zmf3+FDA`a|ksxCKtW{HIrJp>t*o7+aB+Ew}bI2d6o`Bgi|$UZt2A(P^;^EWFpCgs?B zvX7NicV4{Lx4fiaF_Nj%UGUt)6mMbeNjQd7diY=Iu?y`Blℑ6hM#m`~h4LNDi>e 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 100000) and then test twice (with and without -T). - This option may become neccessary for future versions of Micro‐ - soft's KMS server because multiple requests with different - clients-guids for the same kms-id-guid are impossible in a real + -T Causes to use a new TCP connection for each request if multiple + requests are sent with vlmcsd. This is useful when you want to + test an emulated KMS server whether it suffers from memory + leaks. To test for memory leaks use -n with a large number of + requests (> 100000) and then test twice (with and without -T). + This option may become neccessary for future versions of Micro‐ + soft's KMS server because multiple requests with different + clients-guids for the same kms-id-guid are impossible in a real KMS szenario over the same TCP connection. -c client-machine-guid - Normally vlmcs generates a random client-machine-guid for each - request. By using this option you can specify a fixed client- - machine-guid This causes a Microsoft KMS not to increment its - client count because it receives multiple requests for the same - client. Thus do not use -c if you want to charge a real KMS + Normally vlmcs generates a random client-machine-guid for each + request. By using this option you can specify a fixed client- + machine-guid This causes a Microsoft KMS not to increment its + client count because it receives multiple requests for the same + client. Thus do not use -c if you want to charge a real KMS server. -o previous-client-machine-guid If the client-machine-guid changes for some reason, the real KMS - client stores a previous-client-machine-guid which is sent to - the KMS server. This happens rarely and usually - 00000000-0000-0000-0000-000000000000 is used. You can use -o to + client stores a previous-client-machine-guid which is sent to + the KMS server. This happens rarely and usually + 00000000-0000-0000-0000-000000000000 is used. You can use -o to specify a different previous-client-machine-guid. -G filename - Grabs ePIDs and HWIDs from a KMS server and writes the informa‐ - tion to filename in format suitable to be used as a configura‐ + Grabs ePIDs and HWIDs from a KMS server and writes the informa‐ + tion to filename in format suitable to be used as a configura‐ tion file (aka ini file) for vlmcsd(8). This is especially use‐ - ful if you have access to a genuine KMS server and want to use + ful if you have access to a genuine KMS server and want to use the same data with vlmcsd(8). - If filename does not exist, it will be created. If you specify - an existing filename, it will be updated to use the information - received from the remote KMS server and a backup filename~ will + If filename does not exist, it will be created. If you specify + an existing filename, it will be updated to use the information + received from the remote KMS server and a backup filename~ will be created. -G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n -w workstation-name - Send requests with a specific workstation-name. This disables - the random generator for the workstation name. Since it is a + Send requests with a specific workstation-name. This disables + the random generator for the workstation name. Since it is a comment only, this option does not have much effect. -r required-client-count - Also known as the "N count policy". Tells the KMS server that - successful activation requires required-client-count clients. - The default is the required-client-count that the product would - need if the request was a real activation. A Microsoft KMS + Also known as the "N count policy". Tells the KMS server that + successful activation requires required-client-count clients. + The default is the required-client-count that the product would + need if the request was a real activation. A Microsoft KMS server counts clients up to the double amount what was specified with -r. This option can be used to "overcharge" a Microsoft KMS server. @@ -205,57 +218,57 @@ OPTIONS -t status Reports a specific license status to the KMS server. status is a - number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB - grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification, + number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB + grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification, 6=extended grace. Refer to TechNet ⟨http:// technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩ - for more information. A Microsoft KMS server collects this + for more information. A Microsoft KMS server collects this information for statistics only. -g binding-expiration - This tells the KMS server how long a client will stay in its - current license status. This can be the remaining OOB time (the - grace peroid that is granted between installation of a product - and when activation is actuall required) or the remaining time - when KMS activation must be renewed. binding-expiration is + This tells the KMS server how long a client will stay in its + current license status. This can be the remaining OOB time (the + grace peroid that is granted between installation of a product + and when activation is actuall required) or the remaining time + when KMS activation must be renewed. binding-expiration is specified in minutes. A Microsoft KMS server apparantly does not use this information. -i protocol-version - Force the use of Internet protocol protocol-version. Allowed - values are 4 (IPv4) and 6 (IPv6). This option is useful only if - you specfiy a hostname and not an ip-address on the command + Force the use of Internet protocol protocol-version. Allowed + values are 4 (IPv4) and 6 (IPv6). This option is useful only if + you specfiy a hostname and not an ip-address on the command line. - -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request. + -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request. This can be used to test if the KMS server uses the same setting - of this flag in the RPC bind respone. Some KMS emulators don't + of this flag in the RPC bind respone. Some KMS emulators don't set this correctly. -N0 and -N1 Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the - RPC protocol. Disable NDR64 only in case of problems. If NDR64 + RPC protocol. Disable NDR64 only in case of problems. If NDR64 is not used, vlmcs cannot detect many RPC protocol errors in KMS emulators. If you want to test whether a KMS emulator fully sup‐ - ports NDR64, you must use the -n option to send at least two - requests. This is because Microsoft's client always sends the - first request using NDR32 syntax and subsequent requests using + ports NDR64, you must use the -n option to send at least two + requests. This is because Microsoft's client always sends the + first request using NDR32 syntax and subsequent requests using NDR64 syntax. -B0 and -B1 - Disables (-B0) or enables (-B1) bind time feature negotiation - (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐ + Disables (-B0) or enables (-B1) bind time feature negotiation + (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐ lems. If BTFN is not used, vlmcs cannot detect many RPC protocol errors in KMS emulators. - Options that do not require an argument can be specified together with - a single dash, e.g. vlmcs -6mvT. If you specify an option more than + Options that do not require an argument can be specified together with + a single dash, e.g. vlmcs -6mvT. If you specify an option more than once, the last occurence will be in effect. @@ -265,34 +278,34 @@ FILES EXAMPLES vlmcs kms.example.com - Request activation for Windows Vista using v4 protocol from - kms.example.com. Repeat activation requests until server is + Request activation for Windows Vista using v4 protocol from + kms.example.com. Repeat activation requests until server is charged for all Windows products. vlmcs - - Request activation for Windows Vista using v4 protocol from a + Request activation for Windows Vista using v4 protocol from a KMS server that is published via DNS for the current domain. vlmcs .example.com - Request activation for Windows Vista using v4 protocol from a + Request activation for Windows Vista using v4 protocol from a KMS server that is published via DNS for domain example.com. vlmcs -6 -l Office2013 -v -n 1 - Request exactly one activation for Office2013 using v6 protocol + Request exactly one activation for Office2013 using v6 protocol from localhost. Display verbose results. vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini - Get ePIDs and HWIDs from kms.bigcompany.com and create/update + Get ePIDs and HWIDs from kms.bigcompany.com and create/update /etc/vlmcsd.ini accordingly. BUGS - Some platforms (e.g. Solaris) may have a man(7) system that does not - handle URLs. URLs may be omitted in the documentation on those plat‐ + Some platforms (e.g. Solaris) may have a man(7) system that does not + handle URLs. URLs may be omitted in the documentation on those plat‐ forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly. @@ -301,7 +314,7 @@ AUTHOR CREDITS - Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐ + Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐ ferati87, qad, Ratiborus, vityan666, ... diff --git a/vlmcs.c b/vlmcs.c index ddb77bd..74d8ef1 100644 --- a/vlmcs.c +++ b/vlmcs.c @@ -39,7 +39,9 @@ #define VLMCS_OPTION_GRAB_INI 1 #define VLMCS_OPTION_NO_GRAB_INI 2 -#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions +//#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions + +#ifndef IS_LIBRARY // Function Prototypes static void CreateRequestBase(REQUEST *Request); @@ -53,7 +55,7 @@ static int_fast8_t verbose = FALSE; static int_fast8_t VMInfo = FALSE; static int_fast8_t dnsnames = TRUE; static int FixedRequests = 0; -static BYTE LicenseStatus = 0x02; +static DWORD LicenseStatus = 0x02; static const char *CMID = NULL; static const char *CMID_prev = NULL; static const char *WorkstationName = NULL; @@ -63,6 +65,7 @@ static int_fast8_t ReconnectForEachRequest = FALSE; static int AddressFamily = AF_UNSPEC; static int_fast8_t incompatibleOptions = 0; static const char* fn_ini_client = NULL; +static int_fast16_t kmsVersionMinor = 0; #ifndef NO_DNS static int_fast8_t NoSrvRecordPriority = FALSE; @@ -185,6 +188,7 @@ __noreturn static void clientUsage(const char* const programName) " -k Use custom KMS GUID\n" " -c Use custom Client GUID. Default: Use random\n" " -o Use custom Prevoius Client GUID. Default: ZeroGUID\n" + " -K Use a specific (possibly invalid) protocol version\n" " -w Use custom workstation name. Default: Use random\n" " -r Fake required clients\n" " -n Fixed # of requests (Default: Enough to charge)\n" @@ -358,6 +362,35 @@ __noreturn static void examples(const char* const programName) exit(0); } +static void parseProtocolVersion(void) +{ + char *endptr_major, *endptr_minor, *period = strchr(optarg, (int)'.'); + + if (!period) + { + errorout("Fatal: Protocol version must be in the format #.#\n"); + exit(!0); + } + + long major = strtol(optarg, &endptr_major, 10); + long minor = strtol(period + 1, &endptr_minor, 10); + + if ((*endptr_major && *endptr_major != '.') || *endptr_minor || *optarg == '.' || !period[1]) + { + errorout("Fatal: Protocol version must be in the format #.#\n"); + exit(!0); + } + + if (major < 0 || major > 0xffff || minor < 0 || minor > 0xffff) + { + errorout("Fatal: Major and minor protocol version number must be between 0 and 65535\n"); + exit(!0); + } + + ActiveLicensePack.kmsVersionMajor = (int)major; + kmsVersionMinor = (int_fast16_t)minor; +} + #else // NO_HELP @@ -426,7 +459,7 @@ static BOOL findLicensePackByName(const char* const name, LicensePack* const lp) #endif // Both Lists are available } -static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:pPTv456mexdV"; +static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:K:pPTv456mexdV"; //First pass. We handle only "-l". Since -a -k -s -4 -5 and -6 are exceptions to -l, we process -l first @@ -536,7 +569,7 @@ static void parseCommandLinePass2(const char *const programName, const int argc, case 'r': // Fake minimum required client count incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; - ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 1, INT_MAX); + ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 0, INT_MAX); break; case 'c': // use a specific client GUID @@ -583,6 +616,12 @@ static void parseCommandLinePass2(const char *const programName, const int argc, incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI; ActiveLicensePack.kmsVersionMajor = o - 0x30; + kmsVersionMinor = 0; + break; + + case 'K': // Use specific protocol (may be invalid) + + parseProtocolVersion(); break; case 'd': // Don't use DNS names @@ -610,14 +649,15 @@ static void parseCommandLinePass2(const char *const programName, const int argc, if (strlen(WorkstationName) > 63) { - errorout("\007WARNING! Truncating Workstation name to 63 characters (%s).\n", WorkstationName); + errorout("\007WARNING! Truncating workstation name to 63 characters (%s).\n", WorkstationName); } break; case 't': - LicenseStatus = getOptionArgumentInt(o, 0, 6) & 0xff; + LicenseStatus = getOptionArgumentInt(o, 0, 0x7fffffff); + if ((unsigned int)LicenseStatus > 6) errorout("Warning: Correct license status is 0 <= license status <= 6.\n"); break; # ifndef USE_MSRPC @@ -697,7 +737,7 @@ static void displayResponse(const RESPONSE_RESULT result, const REQUEST* request if (!result.TimeStampOK) errorout("\n\007ERROR: Time stamps of request and response do not match.\n"); if (!result.VersionOK) errorout("\n\007ERROR: Protocol versions of request and response do not match.\n"); if (!result.HmacSha256OK) errorout("\n\007ERROR: Keyed-Hash Message Authentication Code (HMAC) is incorrect.\n"); - if (!result.IVnotSuspicious) errorout("\nWARNING: Response uses an IV following KMSv5 rules in KMSv6 protocol.\n"); + if (!result.IVnotSuspicious) errorout("\nWARNING: The KMS server is an emulator because the response uses an IV following KMSv5 rules in KMSv6 protocol.\n"); if (result.effectiveResponseSize != result.correctResponseSize) { @@ -852,8 +892,9 @@ static void connectRpc(RpcCtx *s) # endif // DNS } +#endif // IS_LIBRARY -static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid) +int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid) { size_t requestSize, responseSize; BYTE *request, *response; @@ -861,7 +902,7 @@ static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQU result->mask = 0; - if (LE16(baseRequest->MajorVer) == 4) + if (LE16(baseRequest->MajorVer) < 5) request = CreateRequestV4(&requestSize, baseRequest); else request = CreateRequestV6(&requestSize, baseRequest); @@ -889,6 +930,7 @@ static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQU return status; } +#ifndef IS_LIBRARY static int sendRequest(RpcCtx *const s, REQUEST *const request, RESPONSE *const response, hwid_t hwid, RESPONSE_RESULT *const result) { @@ -1212,7 +1254,7 @@ int client_main(const int argc, CARGV argv) int requests; RpcCtx s = INVALID_RPCCTX; - for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++) + for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy == 1 ? 1 : ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++) { RESPONSE response; REQUEST request; @@ -1346,4 +1388,4 @@ static void CreateRequestBase(REQUEST *Request) # endif // NO_VERBOSE_LOG } - +#endif // IS_LIBRARY diff --git a/vlmcs.h b/vlmcs.h index 47386d0..cca368b 100644 --- a/vlmcs.h +++ b/vlmcs.h @@ -10,6 +10,12 @@ #include #endif // defined(USE_MSRPC) && defined(_WIN32) #include "types.h" +#ifndef USE_MSRPC +#include "rpc.h" +#else // USE_MSRPC +#include "msrpc-client.h" +#endif // USE_MSRPC +#include "kms.h" #if MULTI_CALL_BINARY < 1 #define client_main main @@ -17,5 +23,7 @@ int client_main(int argc, CARGV argv); #endif +int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid); + #endif /* VLMCS_H_ */ diff --git a/vlmcsd-floppy.7.html b/vlmcsd-floppy.7.html index a9b2c2f..def268c 100644 --- a/vlmcsd-floppy.7.html +++ b/vlmcsd-floppy.7.html @@ -1,5 +1,5 @@ - + diff --git a/vlmcsd-floppy.7.pdf b/vlmcsd-floppy.7.pdf index e58b5484213fe2c40bcb731a8a9be9971d29bbca..c7f8218616bb730a34ec96089c33317fe4ad10ee 100644 GIT binary patch delta 38 lcmdlzk!kltrVadIoEC - + diff --git a/vlmcsd.7.pdf b/vlmcsd.7.pdf index 35c98a8ccfe982ca32bda9cb301de7e802310a8d..82a808270ff19cb45abef5a9b39e636eb1611502 100644 GIT binary patch delta 38 lcmbQ*&N#K5af6^Lr-h-Rp_zfXf#qZ=RVxHqPfzf0sRVxH - + @@ -30,6 +30,7 @@ FILES
EXAMPLES
BUGS
+INTENTIONAL BUGS
AUTHOR
CREDITS
SEE ALSO
@@ -204,6 +205,16 @@ addresses even if NAT port forwarding is used. While -o1, the client sees that the KMS TCP port (1688 by default) is actually accepting connections.

+

If vlmcsd is +compiled to use MS RPC, -o2 can only offer very poor +protection. Control is passed from MS RPC to vlmcsd after +the KMS protocol has already been negotiated. Thus a client +can always verify that the KMS protocol is available even +though it receives an RPC_S_ACCESS_DENIED error message. +vlmcsd will issue a warning if -o2 is used with MS +RPC. For adaequate protection do not use a MS RPC build +of vlmcsd with -o2.

+

-o3 combines -o1 and -o2. vlmcsd listens on private interfaces only and if a public client manages to @@ -840,11 +851,15 @@ sources or may require minor porting efforts.

vlmcsd can answer activation requests for the following products: -Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows -10, Windows Server 2008, Windows Server 2008 R2, Windows -Server 2012, Windows Server 2012 R2, Office 2010, Project -2010, Visio 2010, Office 2013, Project 2013, Visio 2013, -Office 2016, Project 2016, Visio 2016.

+Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 +(up to 1607), Windows Server 2008, Windows Server 2008 R2, +Windows Server 2012, Windows Server 2012 R2, Windows Server +2016, Office 2010, Project 2010, Visio 2010, Office 2013, +Project 2013, Visio 2013, Office 2016, Project 2016, Visio +2016. Newer version may work as long as the KMS protocol +does not change. A complete list of fully supported products +can be obtained using the -x option of +vlmcs(1).

Office, Project and Visio must be volume license versions.

@@ -900,11 +915,16 @@ C:\logs\vlmcsd.log when the service is started with

An ePID specified in an ini file must not contain spaces.

-

The maximum -number of -L options in the command line or listen -statements in the inifile is the platform default for -FD_SETSIZE. This is 64 on Windows and 1024 on most -Unixes.

+

INTENTIONAL BUGS + +

+ + +

vlmcsd +activates non-VL (retail) and beta/preview versions of +Windows.
+vlmcsd always reports enough active clients to satisfy the N +count policy of the request.

AUTHOR diff --git a/vlmcsd.8.pdf b/vlmcsd.8.pdf index 331f5119ff0dd75236dd25497703f6a45438f438..0f9a0e9abd4a6319e4c4281c1f0ef0ccf698e604 100644 GIT binary patch delta 21609 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
S>ro2bR;&55RF1-2qHc^oB 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 diff --git a/vlmcsd.8.unix.txt b/vlmcsd.8.unix.txt index 832237e..d0557f1 100644 --- a/vlmcsd.8.unix.txt +++ b/vlmcsd.8.unix.txt @@ -117,6 +117,14 @@ OPTIONS the client sees that the KMS TCP port (1688 by default) is actu‐ ally accepting connections. + If vlmcsd is compiled to use MS RPC, -o2 can only offer very + poor protection. Control is passed from MS RPC to vlmcsd after + the KMS protocol has already been negotiated. Thus a client can + always verify that the KMS protocol is available even though it + receives an RPC_S_ACCESS_DENIED error message. vlmcsd will issue + a warning if -o2 is used with MS RPC. For adaequate protection + do not use a MS RPC build of vlmcsd with -o2. + -o3 combines -o1 and -o2. vlmcsd listens on private interfaces only and if a public client manages to connect anyway due to NAT port forwarding, it will be immediately dropped. @@ -533,10 +541,13 @@ SUPPORTED OPERATING SYSTEMS SUPPORTED PRODUCTS vlmcsd can answer activation requests for the following products: Win‐ - dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows - Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows - Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013, - Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016. + dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 (up to 1607), + Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Win‐ + dows Server 2012 R2, Windows Server 2016, Office 2010, Project 2010, + Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project + 2016, Visio 2016. Newer version may work as long as the KMS protocol + does not change. A complete list of fully supported products can be + obtained using the -x option of vlmcs(1). Office, Project and Visio must be volume license versions. @@ -547,24 +558,24 @@ FILES EXAMPLES vlmcsd -De - Starts vlmcsd in foreground. Useful if you use it for the first - time and want to see what's happening when a client requests + Starts vlmcsd in foreground. Useful if you use it for the first + time and want to see what's happening when a client requests activation. vlmcsd -l /var/log/vlmcsd.log - Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐ + Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐ csd.log. vlmcsd -L 192.168.1.17 Starts vlmcsd as a daemon and listens on IP address 192.168.1.17 - only. This is useful for routers that have a public and a pri‐ + only. This is useful for routers that have a public and a pri‐ vate IP address to prevent your KMS server from becoming public. vlmcsd -s -U /n -l C:\logs\vlmcsd.log - Installs vlmcsd as a Windows service with low privileges and + Installs vlmcsd as a Windows service with low privileges and logs everything to C:\logs\vlmcsd.log when the service is started with "net start vlmcsd". @@ -572,9 +583,11 @@ EXAMPLES BUGS An ePID specified in an ini file must not contain spaces. - The maximum number of -L options in the command line or listen state‐ - ments in the inifile is the platform default for FD_SETSIZE. This is 64 - on Windows and 1024 on most Unixes. + +INTENTIONAL BUGS + vlmcsd activates non-VL (retail) and beta/preview versions of Windows. + vlmcsd always reports enough active clients to satisfy the N count pol‐ + icy of the request. AUTHOR diff --git a/vlmcsd.c b/vlmcsd.c index 4b54310..fd243b6 100644 --- a/vlmcsd.c +++ b/vlmcsd.c @@ -279,7 +279,11 @@ static __noreturn void usage() #if HAVE_GETIFADDR " -o 0|1|2|3\t\tset protection level against clients with public IP addresses (default 0)\n" #else // !HAVE_GETIFADDR + #ifndef USE_MSRPC " -o 0|2\t\tset protection level against clients with public IP addresses (default 0)\n" + #else // USE_MSRPC + " -o 0|2\t\tset protection level against clients with public IP addresses (default 0). Limited use with MS RPC\n" + #endif // USE_MSRPC #endif // !HAVE_GETIFADDR #endif // !defined(NO_PRIVATE_IP_DETECT) #ifndef NO_SOCKETS @@ -1678,7 +1682,14 @@ int newmain() } #endif // NO_INI_FILE - #if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC) + #if defined(USE_MSRPC) && !defined(NO_PRIVATE_IP_DETECT) + if (PublicIPProtectionLevel) + { + printerrorf("Warning: Public IP address protection using MS RPC is poor. See vlmcsd.8\n"); + } + #endif // defined(USE_MSRPC) && !defined(NO_PRIVATE_IP_DETECT) + +#if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC) allocateSemaphore(); #endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && __minix__ diff --git a/vlmcsd.ini.5.html b/vlmcsd.ini.5.html index 30dd070..906319e 100644 --- a/vlmcsd.ini.5.html +++ b/vlmcsd.ini.5.html @@ -1,5 +1,5 @@ - + diff --git a/vlmcsd.ini.5.pdf b/vlmcsd.ini.5.pdf index eb3a2d3ca5df7a5cf0cdc08486efc660f02b2e0d..f0917fc8baad9aa510f2f7c57737a10412f49493 100644 GIT binary patch delta 38 mcmeyei1EuJ#tjpUI4ukf4b2S94J;?mG_peQHs3LtAqM~i?hIrA delta 38 mcmeyei1EuJ#tjpUIL!@>4ULRV42&nwG_peQHs3LtAqM~h@(fY{ diff --git a/vlmcsdmulti.1.html b/vlmcsdmulti.1.html index d6d352f..c4337ec 100644 --- a/vlmcsdmulti.1.html +++ b/vlmcsdmulti.1.html @@ -1,5 +1,5 @@ - + diff --git a/vlmcsdmulti.1.pdf b/vlmcsdmulti.1.pdf index d2dd6773f51e18d244843542666201611f79f462..656f4eb10043c3cba39b513954c3d2cdccb9317b 100644 GIT binary patch delta 36 jcmdnxx65yXI47rtp`oFffw_U@WCczu1aEUP=XF^Cxflta delta 36 jcmdnxx65yXI47sMp|PQnv5A4vWCczu1aEUP=XF^CxB>}^