From 79d0e232f691242ce5af63d7f6d1b3b416855f2b Mon Sep 17 00:00:00 2001 From: lax1dude Date: Thu, 30 May 2024 00:16:53 -0700 Subject: [PATCH] <1.0.2> Fixed various handshake issues with EaglerXVelocity --- .../EaglerXVelocity-Latest.jar | Bin 287221 -> 287460 bytes .../EaglerXVelocityVersion.java | 2 +- .../server/HttpWebSocketHandler.java | 342 +++++++++--------- .../src/main/resources/velocity-plugin.json | 2 +- gateway_version_velocity | 2 +- 5 files changed, 184 insertions(+), 164 deletions(-) diff --git a/gateway/EaglercraftXVelocity/EaglerXVelocity-Latest.jar b/gateway/EaglercraftXVelocity/EaglerXVelocity-Latest.jar index 247dbc4ae9e1c7f2bacd8decd901ead7255eacc1..2feecaa9e4e32693e2f40bceaf6a68fce48909fa 100644 GIT binary patch delta 45691 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

6=~Fp(mG$ zzh}z#ts@43NGYj|G#)Nir>)&uJVE}=lpi@>4zjR9D`r+yP381YO!+CNn@;-CP5$sI ze}?zDDgVy?jHGC&oM%LdFXDH}FIXwH!gqL6RQ}79U&^oSTcgMdW4CiBFW&i*gM>1 zb-_^BZ*>Uo@W6LsluHSsd_yQ&OEgi+e^eR=h^Hh5h&u#RhN)cbqQ@<&xs->JPaevi z|DlCL*_id$4n5VSOoX&}^5R&!p?Z_4zF(Yn5;t4Gm{|xoOOQwPf^{C1s?rUWw$Ju@ zt0pY)vFH)iM`iGZMPWbHNo*J)(1Y>k39GQZQYJQ4l!PAD&r}B}FEM(fbCd}of2)gg zgRuioMJ{z9O{I2GpXOG>Rj#3OVpmMGmD^lxZZHrvRi4Tx zDpZ!1RLq)M8NUjzv+_kAm8A+ue+yJ25e~{eau214&*KppZK^S9EC)=~)=u%0R`2ha z*M1uEx^aaXZ>kA=ZXlg{NoGt{S;eeHWwR=)if5IS8tPDlxjnFEwCGncXNFr%R7Iwm z1RVCu*Jt_tLC3!G*Lu`p>Ig#}zQ1Cm+WHLXenrwyBPGj$_+bym4Zssj95VKRXWoD8Ik4xIVDl z&w2AqOy_NB8R4^a$?-rGe~zIjt3?R@)B&A|F&nIop;~A{p*q&S6{gIij#nobY7t4H zpA8RF`K-;h5c@NH^{lT@x&+v5?MZ`Mpju+8IzEJ<&8?cYXrc#atAMFaDFMs$9zq$APfQolf$TE$0r=s#aD zGhw`s$s9FeqI0q*e=jo-$EJ~Ji4CZm$aERaRVd;~dWEU3 zRKF&Uw?a=MEIEcR{2673n{c?=RM)6AWG@%bt(q~jbW!Duf8x>O#`BG?KQA8Fn(8_W zkJ94l<)w2RJUHhDQ{Bip?%CzVWwWYEkEt@$x>h%pCEjDj4psw-*ahorSX}GNB1P`b zJ)GD2A9NUI9&^ZTCJeS>UDa<)7y_9tbq7M9#JL%BPPx=wB$7sr7&&4z&%k?3b&RTZ zse2J}5)Xd0e~CJ6u*jYn_D4eX9RH;@Ar#o*RJ?=fr~tvbyv(KqAT0xCUqmuY-Oo3~ z%xod`D1;mLCAzxBdGymCgb;_St)|+>YkO~JZ6^`M0oa_i!&DE%qDwiwCAw5SWU7bN zBQ5KF3^MN={VYMSbNrD;QgGOy`W+c39Tdx4;j?A5e{D+9z&?&p(&4}cLzw~A;_K_% zvq!{=0*?XV!FH>i>JNr`g2ckl*ilnGsh*dyq-iX~+SRP`R z-hk{QyEr~c(BCrE+YFuWEh*>I4eh|kkQsw;%l{bR&}D$Idf!wZs1NO_ZtXBw&PSf= zk)ECEouJX072WD1^@*WACPDKvH*Km<)n~N6e-xLOSIkE^>1Xdc560h3^$!-w8L`2z z5Awt%^WEy7ruvuqG9G!yky&R|>^`j<9 ze;3x&9&h#P{7e>WADV8$c$h$4&|IeG=7n-lAbvM_M^}n-r6dz3vKuHi+sC4CcYn73 z-*)8x=IzLN9wJ#xF2Vrr>cnjMQkliZ42p3_AvLf2!H75fzrs(1xHp^%<3piUK^+l z;?t=S4iK8!&FJ{9AadA0-pnX+__a24UqY^(;EOa!(y~l3PCFRIg#Y!i4L{3-{_jbi z|5}W~a&4HYWoyF`^gwWVXqmswV&*Vg_aZ1s&cqDU@ohq;6Yls-NSzl7)E2q4e|*w= zTkhTr1oyF?Svnb0%WOLX8*?@1LczR$oS zT=mk%n%X$_dwV!Sw<^RsR?C7v4)KNmSquLE&C&f{xYNMYvXZnyZIYoC@ns#I1`3(l zWbH6ATK!g_k991r!#hmowQ$UMe-D156`R@=Rxt;2n2S}WERxuzn6m4pvQtg16lm(C z1Y$*;Opi8QD>JkitUKP;C2%O|D3i?-Xq=Ywz<~ZkK8?e>}R3Ewm6G zJ}*f-Mq6NL)d*wu0RdB6s2xj+zOS}6!PKZC0UV5!EopIeUEFzKWLrCB4|Ai_sNBxA z!FDYe+VKdJx>oTTtu_*?IUm8YcTlzCv=f-_K7>U*7}VMh)df76dTBMLd`7E9am4>= zNP91RdqUR!|Hy3GQ>df1f5g=4w525U*a>JU=MldXo4KUxXvdxl((J9B$Sl2#uZryc zZ0NdghSt#P@(^2c$Cix=D8~PL@6eYFDs=awY4o-8p2!HLfzX ztF>zoGHK9AwW?u%_{`9WRL|j+7N#7x7rfoVmE6c$Q@fT`_pF3QELmjx%52>_=Je(Y z*PGf6e8EuvScOXKHldQHNHo-7AD4A$H}O$w>iweSqqxq^f2MW|d(l%{*O@z~+=G3! zTTSgYZG&@V5mky`4_Lm>`!w8kq@XMTnl+pFp#wL6UZtc8{UmP5jzZt(e+x zd5nj~?$&h(7d!o$z}$?^MpN6Q-G|VtMZg3&fTY!T1g+0J*glT#%Mh}&Hk(>A)BM2r zMbOR(+ytjTf0x^8YTLB!#Ft%^OGIuwN4M+)uTg&=FtrD@hwS?c5<#}!rLjz*B&}Y1 z#Kc>)N84R36FXU}e$*Z_wa2-SY`XEGP>;4#`-7o9(aMCJ;*0plk2SR?wWng&ZE$2+ z*!}`c+j3b>t_A-YQ+w9>_zKHmYfDIbPJ6-7o{xR!f3AayruL%t63ORUza78Ux1)IV zg;PA*E81&@_A0{k{b4?9bnL5vOzltFpApQ(9Dr99Dvs0y0^EH3QnpsdIkdlMZy4HN zX&&=f)`ddUY(bsnWu`x~`Gz^_%A49-{IOpC75n<_s1D=rI|5Q#?{Bcq9BS`q?-|;= z#EV@Ne>1iBwGW)Yj0mUO<7}U8>Zo4q(j@I~2&(d^vRNMOW9?Hz`=paTIbT|$WcjOMk}h_LlRc%a@5|Me^?(XKf6s%b>UpFf>-h-J{dBiF{uk`%;q%;TqF!L? zBlS_Fe%S5UpS`c>>5p2;pgzXb$FhpW>k%WvWN;I4$D8^DeIg&JYr&9|gi3#qKe(MR zZ%8vQO41AUNrqn3>gq(wF!jm0b-8+Nt#wDRH*vxxeD-Yk0&emMQ!m!1kkVh%f0i@| zbw3mJxhGRiy_9crkc2kh!L-cKXYB1Ko@d)peqlpD65+5tI66845Fzq4H9CU7OfP3% zpNY`eg}1sRFqKWtEm8Y~y(Pa=^$Jr=)@LKu{||Lv?^$5{S3`~V%GH~A2uh!0>XmvG z&9|0AP+fX@O zBJRbfb^q6~%${7PdypiS{!^wOYwE}8$CJ8fAD51K;H}G$_DQ;Q;SlVoTHNLD(oaCx zT%2jkjm(z9u_);nD%j4hJ8nBLeUuaXD$haGi|3a)f$l*Ki`zOf4HfR<2m>m zT)U+_E0mj(Vk0>slg$lgJvKS`V@F)L*1l%5qsB%s9T%H=jb3Z7oiUNw`3*^XmbM-! z)*kb~O1;k1m&T05SWK&-pV-MJZ-;?x2{+v60ll7=j|PO{-Tizf$^A6FA`Q~@MpHhc zpJZJHx?d_=mwP`g6Z}xbf6@Op!S`x_`LMCxgfOw&bz9CVSODDm3VoHKuSA%-uOPB4 zbes<~>Z|pWNvxOfIrQ@K(y5E4R4@l zU!wY{%;KkYEyEI7yk}Zwff~@yFtt?uOoYSt7}RPz$zx|v+C{MHe`jlCTc3kav>#x2 zIL|fp^LP-_S`EVNITgoLdtkMGfvI1}TO?`WcKah-`yx}nm}{q&RLq)IURF|7Hfy?l zIXHi1)J%gu`lY6RnSMDHVXv&^pmwweKjP{CrziHTp17Cam`%{y#v;`2pWyDUB6k(S zq!vYP#ZtbA-q~&Ce|6Okqzte-k{0lYeR8RBDSvH{*KOAE;z*A~9Q6P48qn!*J6bs( zO`oj#C8>e>wWfZZe!X>iz9Gb)lrP=$eJ|a)yhXneVW4d_$NS_Q0CTo241L}H9`9}g z-vR8=Z-RB)xAmret9~0_?o?Y_?&DyP`5kSA_DFYsgOF}te<+{d$Tu_A#yWWiLSg4a zAHNFOhHoE!pUt08iS^}nSm)C3Mlku>`F!V+8$ z+mP08=eqTWfAvQV{gHj6uhWF7|4x65l*ibuHzb3)b8&Si(1;IyPb*qOtRF30@C2## z-G-+Yq;(lSYr6N??d9Usx=E{VpCC-={-LQ* zB${Yne}1gjr$L7PIa`WlOuU&oHz%_6GUNLPib!epm@i%`<7&_SChB}+pzCS|tf zX#=wGG4$`d^6FcpaMrijUaY^?uJ6&m(SKmkfB7TA3HxhrcG;5UiRov6DaILya82ip z?M2V`kHHh7tgbM)<}5gnp7~|Bc}?4L5V5 z6$qKw0)IN`J(po3929H8x#v3=$|nK^>X|V4cJCs@)JAX9NH$VPRMf^D3L~v=HFe|Y zf8_!WR9I=GnMS(Nhn5f9bK5d2ozPf>llH`poif@U>a}Z&zus$YnHhbJ0}P{I7gun1 z4Z)OKt@CA-p{8(+f0`A0>+Q$~FoGG6hGI%66s2{~*J$5M6Y&@WjlqU7sMY7Y?Sq5` zLEjQzO*9lVf(I_;GLlLstHEa{2#QMnFG>6FIJ)_7He^);> zS-beGTGu3+;4%&)opo+-SunIB=zMf7^B{B?M^JL>Z?RFbL#Pr{GqqkslqnXW>N#zO zspV+71af+cmg^92rm2n6MpIfjLUoT`448O4GsUQI8FLT@Sl{<;K{nGqvl{hh4#QzC zqY7bA>yK<_#?E#XW-i3zGGo1)e{X8zwF%U_dE7fY?O0Pg+)7*6(qo^g1+@^Roq({k zo1%KZmI8mIX>Q=hBPBjPS0g1d}m2nSLx3NvGa#^E^5hXD&SX+Rs=7U0mSmIBU@ zHJW<0zJNLvBK=~Io!awGTZ$2OATKxdupS}EP1Z^KeRJ`r7%QFbpJM7)f9O|I_fMwo z^Oc0%a2TZ+r*qY_O#N#88p7mEN^roPXX;<-UlF)-5qx`r-M(peDaHj(yBC{=u)1*( zPaB)rE;kL$&?)V*6kZa{vLHv~)cYb4f5b4ZM#$X@zc@m28_zh2{RHPdEu)=W_(0}j zEDqT)uJ7Jgv|1U*q|L<5e`CYA3E|*w$w9-onWk#jMGFxz+^M={v29LTP|&* zPIeOOg3!D5x5bG%vuIk*^fxRfjm0qT+}{g?JHEa#YZMFt1PK5`p+9J#(=UU532@PG zH+bm1KO{L%(|PtvDA${QCqs&ro|=%JM!(aY^gd3#jD-BYRH7doe_*|PDUY8AI?n+x z(0UGXeh-FB>p8@E4t1UfL6-GA*!g{kQ*Rh#ThHOnGY4|%nFe`~A8&sI{VQhIO{ncCRopjR(^jtl;Nfv$(Kmd?}La|lVCDIK8y-oO?}h=@S?QC^#`H2 zTBem$R;#qq%4#ibe|lvzl-&n2H^EHR3>9f5X>*%l-hHrO6D**FV<};gmEhY1J}05Z zO7L$2zm-s@Y@mnRpaPp9V1cSjTju06P)_JRh-`ugn*iY-QSo4zP=CV3%xyOKf0imsltrByzDlE|E;#h4S9;(g9BeY|%RIA1#f3<~pw0103X~$u;c03-hEy7yu z1Ps!1g|-+^)@tw^&5ys-mcSng+kDW!M$Lfd+`FL)=;a0jZZ@ElY*R3I6H^L1iDWrE z?I!lT4ql+{5|dJ=B)tJlq>*?rM{b6fa>QnMh2LJ|w?F6XfWOdiy|EeIXn zUNa7C#)G!uA(Cn*&C1(~dGqrhwjLY#%49f+{tpg|OtFO79V9;Pq+Z@dV&HBPKlhOE z_$>*7dtnA_ggLMYs^NY(7B)i=wm=xR5)*AB2HHvtv)vlDB+v(D^h>ESaI|5O!!2+u ze^G-)4dQs5(2gW?=$%FMaO%KBgl#wpVGRtlIx!`dHWh*TGkqH#sbFIq>E2ew2kH3` z4aFlC0unGgvEf-(>2Kg$n>kV+AUWO#z@z2d5AUx5wUM50uf5yuo)NK0DhXR`OR3n4VNMm>Kh=(t8YVE z;~v3iq2|@L;_^bnYwUzHuhERBaJ}0=ry0$~&O%tb`^609KwAg>a&l8#>G+FgJZ}^J zavNSoW4tke3Wdu4u?erdU*s+YsQU~n{z+j<>Y&Ew&G?hiP6|v=<@12A=T^J38t6coACke!Y2IPZIHqg zc;8{RjhuMft&o+I%WuEG4O}V42GCOUbo@iBE>OeG_|#^6+8WnqsqLq?;d2rg+kRHs zi=1X*ybWJg5bNfv3EhO!Lbul)f2;6ktAg7qy#a<>X@7|W-aw?hAKqQt24Qg+jpZAM z4ZMTc!no9$r$EAlr@Hl<|Ecnpcl~;L&Ll`LtyPdivYVvIR(z*WaeqE&#*Yg%1~^{N z(A7VtkIyB8jouivMB45`n*;?=@7bM~0P}e~v%WXc%4> ztqpd%*R@GNv(V?~?tm|jLm9eu6F!hGdW|>4c$XaSmg7DAD@lwu<@jEC z&7$}C-g12M1{iC-r(~oM!|Q6iJ0nH6UOX8o8LstUWTcFD(W`N@^=h1xj2X!pz1Qu2 zIsryr3`RcupWA6 znEZ%Wp~Rc*#Fk1q8J;y@5c?~QmWK=yqSv+_nlx{kJv3=rvq)=sf9Uo@*^iV0erBYu z0XL1-21w0F;aAaT1L*0ZZ(+JO&6^$@K6-66d}-~6&*B|%Ks(+UZ{%edR^|SMuC@to z8uWEAG=~Ob&}K2j&d$j&9&l|I2j%75FAi!J2hXS6;cKAx4v|-#E=Ft-BZ=r9i*pBB zoVyk>a+nsx0kj;7e<3+YwL1|wN#3LK zJ0)ekoquuLfBb`Kq+2^bECb_lN1?(n6hN zJ>18|9y;Lx7l|g_>cZvHYe*|=tGJ4D>32&>PV*XD#dVv-&F%ZX-bu0%xs6%zwvJgb zhxp<*#1}4>uO#Ok`Reg{EDm{+hkgzGjsZO6knGM@e|_E|?v8VcJ(|C@SjBqX#NDQU zH*|dmjh*u=*kRRvd zk_`HD>m@vn?_XNs3lBK>4v$ZO_Cwn&-mvO#fJ-_8vC09i25uMc03^1%0gkm+Tk!!Y zF`{k_Wb;ZdKGGk=LDiDidos=jZWW)9?Z?Hwf2iChzLMYo)CP*1SQvl30o(-p+t#o* zLN9HD-cRpO+Ukq0rLJW-8ov>Z?mKa`I7$53dcLl%;ip=o?y{bD>o@RIzfphCdOoDT zVLjh8Uf?Ied5oW~$K50O=^o|&4L@y_RXs&-0FRNL{Wz%|J0Y2jwtnyjGUA^kUHd6A zf6|{NgZz(VdOr_`!;4S`FF`pOUrXQ>GR$XEP-zeuJN?|kP6Zo98?tjB)WIcV39{4-o`%ojfaX4uuy!2MdDMOB>s+vi7)YR@gF=we2Y`WZY+@+PL)Ym zDpPTq?1M98e=L&&@hF*voFiV;E8fOE|bqt6T5_br)W!?#7GNeRzp_2!Ev>$4k|7c)5B7uTXE`mFhkGwfYpVe^OuJHR^j@ zqv?2^=Em!_et3g60B_U=<4sx?uG5C&daW35)u!QXWYBLQ!~Hj8nBT4~#XGbHyhl3; zf2*B^?`h}Z``WMY18oETjTZ5bw5RC#tQe%dA_i-J6`9&QVu<#MI7s_kWa+vXrl*K( zy`RX@2Z&t#5HUi}7bEqNe`1tAPK?&4i*fpqVuC(LOw_AIp}t5I>Gfi=zCs+PUn~yS ze=UyCZxF@$jbf^PmnhZm7t{0y#dQ54aiso?I7)w6lS&NV(3=NY@i`7V#Rz|~(|=sHOJ z!j&yaG-TxEF{w z-9GV_yI#EOK1saqUM@axuM!`+e3&Q6+x@=ykNY$6wfh@-elNc9DDfSe+oA!Eab@o&>)SAZ#DT}a*#@jeFfasg$Zi-8 zDlr3KHxz>_G070$8MxknQUf;t4AytSfd)RAeWf2aaL`YsrUKf+W4`x^KKeh*7`lQd3=mp~^Y{y%_S&>LNz@4zF{c0n>) zZ{I;*<3~7{@{hpOBT#vd!1N;!%LvYHcF%SWk05eia2J$Qwr7fkqDu52~53nGTNn?@iRl3J>BMZ0XgAm@$lpqcC+p%Cq|gT8?@Z>HJj zSSq;-#?as0kjC!3mcEUS57BPW+GaU`85;E{(XsO#J9fld;%(cpqb&my(gCE}iVJ7P zy)#QCe;fRcb4FuNh!%IwkXFIY8J(RSY3${QJ7*+vG21yaFz%Zf(1CBpvK2SR_4`?Q z`OV^oW{ISxaOtg5PnYIa*?X((vsL!rCNl+e=Gq~fsdMj+<<;2%r&W7d$&p!G(TQIyvvz%Dyf7$`ltGCD^RxdD<%-Gysd-G#Le zlP*tsyrmM$V_AD{mM4twg@wJ@Tp!0j{c9ng)z5UfbelX;z$0RpZNT;OCO?#V`qyN( ze|wX+%7*GfB4WhbyD)hZ%(Rt1uZL7WFA;eK>wfOaW_j`>aCl(~!#1zOWHZ zv2m*_Ol92CEZov;+{Bz6^6qMH3Rx2Jf45uYea*6Yhulu6=d-o4MLtlN#)Z6TWMJgv z<`J3Gys6%#d~b3_FR#8`lAS^(iu_%(+__yoMf$D$Bk8pUF2d9BO!*?dBZSc8%g!_Q z`&DtFxIwIwFFVf{o#(5zo=P*XoTk?gpu}$IEdf#_*+o*oC@EozR8UI4E2Ik+e@Hjf zN)I&1BnV3rA~FR|m8o#POoNMLI^0ChTVx-&OJ=~`@&I^Hdf^q>A6}OS!Y6VNd?^RR z_i_mKmP0XF9*l$KA$W)!h6SX3O_0O!FquQzSuSZ|`M5}qBrR$bM&)QcjkL0}aiKg`+#rt=x5(qg-SPzSJGofA zC~L&O)JfuNdVZ%)l2R?V+|M6C@@^Oex+BFBm%{w`vcv1(E;y8A+7B?ve}L0ShVOzb zL+0*=lj0(mRx%d2oJl$S!at`QP(u0gMH0Ieki5sT27Y2lA657hFTKO!>sohea3vDF z&+THI4xf1Vyx4o4v(Z6vI0Za%m0TU)d9i)@6LZRQWV3vI@&K_OJUMbevwX8Ww^_cs z76#?!Hp6|Ywi&jhjJOGse{-etn@ijqckK`2jZC!)gjx+Qbu#o)r$8TdI^?J`V7xlp zqP2$^v=8qI4RH{XA20wiRiurO{FaO?laeO2^7f0NmQ0r)u7zIq+sA7}Z<_6&RnJV9 z|7e!~T!XvwQb+*)yIGtz({}vx9?>TG^-dU>M~`N?YYiM?yOwvre|OdCa`zSmtvz|f zh+l8aOIJt$58G=Wey_Oq{s6~&pAvK4Tj>MWILIr>4t(oP-)qnPSS!(M6uPZ$&|<(| ze0REXv-eUZwd>SIEOb-TUWbBfVDJvrt9pw{E~FaiF=~Q4Z>vhNz4f={Zc}|pdZerV zUiUUNK*4-Fg%Z-$f6yH&tGbUmWRuF?qDE{}qpWO;JZfA5dDKL;SrvNS+(K?%vzqL6 zKdO3>Fy5g`2<=ByuPv&y(BpL%CXoWb0@FhR)0?zi%^;bmj+#&MRaLBovHYB~7V_+l z(~r3uU~nR7HngEs%YM^$%v0)OFw`Z)l$XM2bs0=jmqW3-e*&hdU&B0g6)aR&LsVS@ zE7clUrLKcB)eUfox)E+u>)>{EGu)$YA$DI6+tsb`pt=oyuQtGo>Q4Ar-34E&yJ45Q z7nRzGZnX(h$dpT^h0Ck9;2_dfhN^8iOl`*^dLE&6V3~RVk5muiO!WvJtscdN>UUU6 zX5UHb_hdpoe?eyBAIKDZ67N<|;S=g0|9hCbn`BT-ho{-sT7&P?YZ|HD zq+r@w{6XO9xFltBc}ZC=Jc$0=O;ql>tcsVl)Im~#e+L-qu;lOI!U4N^GcaBmXwtW+ zifTTOAb+{g5mSrl$s5EYwyFiW&FZ)jci5l(&T{sHScDCre;ju)G!=H=rS8)15_iS< zpfATjs1G1Z{SC6!$0U?Kg*^4SMI#+lmL!$l7D#HbrKO%PE^wOuiXmfN$64#M5oVfw|a%#G&Sr2BOOt)m@%vL)Tv+`4{4T`)?%HJ$5 zw=}{8sJ-*O>LJeG07=%XNSja3X0_DbeaMe(KD5Z)!$|1|^)K+MFJY+q3JTP}VWRpP zCaZ5?iu#t={5zPbz9&}S1%CAdG?3lVsCL6je+}VuO;{vI0X;b*?FYzXgG}u5ByI$& zWfnmi@j{0nhcLx>FE=MwACSLY)mt9Ad*fU198&|DZh`0}EfBPv!U>k3zaRz%8Hi44 z*R`Q*ew?oP4qayvUGw8~&3EWJtM$$gnFbuE!8Ed{1%sW4qjgV|a-%-8zB30ek(w7x{) zesHpO0Gy-shl{iWTTyzvP3a_8BAFT;&PP&H93u$|9L`UUNjQ?TTUEFv;=$Td*9L>8 zWkPRlNXtUcLYdJ)*JeZ|Tu&7|N z9*}KW|D}3c6Vc7z40f{inzzcAN95)f4kr^u)d=WlQ*eLt9OFBcm7s&`9lwQj>_4jt|A$! zSCIUjPe0bu4=wiNditU4AJzA%OYbEhDd2?xyrW2CIGmn2Fora?n;c?U(;560K}g4& zVW^vTli7~+^6JW-lNnx}XR0+Rb$g>WUER(bTV&okTe9@(Y{{mpJ6VBh*=*P2o9%2r{$ma6 zSz^dq=;PI;T|hF(4G_+8wv?LH-Q(REZgCTg$nk1qjjP`#nuNS{!AdAT?Udi9?o+VQ zt7o{av9!0Uc+ZRNU)}4mf8`0i@F3GXa$59imT1vqGs*Hpyw<{#SHZzVtb1wdZiFP< z1SxnQWZ-7#kIgUyx5B}=4f1e16yOdx6d!E$TBXBf63diDO;KRqE9)Axj@Ci5< z{{R=`lW-+I1y|$KupXajy3F=VC;edny#roz*O6*l(GvZ<1QFZGVEK>Y2Y`jW+&osFtH4o z0$5?uMs49B7Bau>U)x)6P+4gYvgmmN@-1J8dbAz&AB$5TpK_?LHYrkiyM`+^vlHeC z()lg8Pq%~X#IzhDe_>+|i~qYhCWQDP+pf?F8+bJv2b-@BWmKNK4MtHNx3yEt`;*(% zi>_z4_9^K1xy21D^5kc(fyNc<-h;=iB- zzl3W13Krnkuo%CAM*J35kr-KxKfu}eBb<-B;c{A6t`!J(e+U703JvZPI&2dLJSJT5 zjBvvn!UJ!LUhui-4gVC$uv_#-AyP0&q+)-Oh6jp1c(BO80?`*Iihej<9Dp;#fjCPH zu-K+A7(;i#1Vil{%#K`j{4N-clk!qniGAA z$5H}Zwh9p6e{FC18J7#}rD;~LHmld;Ki=dYZ5IE8wawD8L;#dH5qgVd;1%^SS~NhB z2*Mw ztZ7tKGd63Uw)`{NGO#ZKkGL2Hh)ZCgxC{;!mqWg|62^#M!$ffv944-Y*2Q5OgQe-Uwd)ALknt~XokBzd)D%Ymq++YUq;M{9O()x7jm8~lh& zcE(bpf3bW7O4~T$B3{jQ!{y}W<+Hf=YF<}{+w0k`9RyI>tQ|6+y>h)QuUs$o%59{+ z&431IlrK6@$1etjjGU|mL;ArbmqM}(Kwo(x43f)WsH}$~dLAYlV7d>hZ)J#Ed-GIKpSWDz%OW7-5us^`ggeF1u_mtw(^y@~qcNs+RlR5{V` z!(!CWZtVpXNy+l z_+++RnVJ6#TONtmY>wL{iKYsPIVlN$qwVLG;4lu(snHnbCbr`2aS(u zxjKL-U2T)lg~gDiW@WXDlg_c-$SVuYHVm836XEKgzk-b%m+k)Sb}Z z^5|S*o70kI`({{oTZ<1#5 z2LB}DI4shv-OF)h2W6zJg+WZvfBWqw2@e0-5-UQrJZpesaI_tEiEHHev<+}BOSROD zv~AkMBrMdA&D!sp#hGhh*;eiMt<#@w*8aFvd$};(o4!?hy;*y^u#dM-y7pnS_EBMm zH)AJ^;Gds2YyT+h>+QP}27CK9YyaG;eO1`c>07^6eIvt@1WnpGX_%2le}vJ#MOe2x zn$c?wG&l^v&KCpmi}HpH#kcN<_zVJa7hrTj>eBEh@3RTtjWW}LoVr@_?dnW=ah#e4Yz!pGJ!^5BlLfJlM}@WHoE$e&(Ti5WVi}2p(qD z!!SSVLhw)(zy=Sq{p@DQ^|SYIv8uGAzHEhXQk+dT@(3$2D~KoVYk<{Wj7RV1F+~}6 z6lc0ooOvM_#ABm=f2yAm=kd;v`KfBkx-@ZVV8FO+w_2WDsD#__&43;a=v&@ylddqT z&|GiIO@-1HbH<$W3UL>{hzHcd9l)0?rEI#I`f9you%{Mg>b(clcs~fK_%MWV3FP1- zkc-Qp5|_j6_!!K=RWJ`%!@al$7UNo2qjWv4gUz@ew%`V+f5#d)gqz?9{tDi}T6haL z!*P5P-p8llLwp)eU>$slTi`R?3a9ZIIE(dODsJ=Aal4m+&w4qy!|R35>AUXq2IDTT z2={oyaj!Q`9jz*idw1aT-fV32evD1tV%+CFg8RM4@PM}(4|*H$khdFO_Ksk)_a?sL zy@!Xr5Aap*e-k|7oxNNOBeNGjHZR}_a{&KpUdK;N3!XHm@E_*1(lhv(4(?Of4L`>M z`~nB!zi=4-8^>WQPR27>h3Bvq+p&%Sw~>dt$Y4V0f6GMJLLvN!7|)VWHzMto?%FSx zQ-4aMLb`&=Xa-H8E9`9Jt%hEyZO}vDzI)DxVeY=J9f~2nQ$)uFZ(yc%s_>X+13RHg zt)WFd39S-3XAjS`K_B(AS|RtEtIn#x&>RKuKebgtC-iS)@Zql{(n@eU0njLznWxO4 zRJ$a_e_ix3KXl37?Jym(zM525UA#pqUjOa^t$^(c9;d4Q;z`8|U6ejxXRq!xaIeq# zF}}ryZC**9<>4xyV?5oS=iwQ8?*~q_PJs=ueWKk<2<_q z6@{93E`W{TTWgZv#6LQZhV0qE5inZqLXw^by+bTwqcEgU2BcA@Vzw-}ma?Icd>BDJ z;k%RrH_E>*#NrFSX4pJoJ0l;lwU@=2<;m$gEHe*8S1A1v!cgO7jLef&ndGHYLX ze?c_Af$xg*eKCyv+J5}v7(bZYx}e~{xKp7e$wKGd0r^sQpg2& zO#QVnzX{WnR#6_@NfD@~0)?If6mnh*f4`uC@PyJ@8U*!J2-|2d?4%*Em#%~3+Th8E zDCV@m1a&QLROMX5YcHyt>n^37x2bYY*Zz5&H)#65j%j)2+EezN%*kLH=Z!iiYLDbK za*dteB+Ru5eli;8ryIErAoHr8u2hI6ooR7I2_u#jE3KDkVo!{}Pfse>AG!dr z3mkyv4`Te6qyn6HI9#_i@!xeU@JSsMr#f7OWE0&Cnc5!T)+Q=~EV==D&@kvn zH^LAqhM`mfqiDDegc2C9>523mf9=B&FpEa2=Qj#g(iqr8W1)`5!44V^hiL+QNKyEd zDz%?J=YIzMbhjE`dw}O$Q7FNuqY*!3J%s(-8t1kmcFqsmm?uY?xIKUi z*xb>{Ze^HCRr9_Ny=WqQi^^amP1Uz9OY3Tn$X`rb1TUp671|WHXvL6le^7CDuy{Qn zFD5b}KPFx6dBw0?mfR*oF;NU0j^x`x%B?X;ZOUhXc;Txe;hYnN@b!eQ|7LdT<#Q^DpAK(NTuBBxGK3_?r_`;xl^iL z=~?bN$K}qIpU8a2Es%xsGsoQ{i{$5yyI&rXhaI;>9+h7@Zkeo*m5y5_Yh%`vO6tH5LA@4gmMzeQJ~myw z1ymf(@;(g9qCtXta7fVL?(XjH?oNOW1b1IN!QBZC!QI{6T>}Xa{>z*Dd%t@>4(H51 zPghlUSI>6O&eU}An%jmeHm2uXM@?H4q|cW)#Lu2Q7i{`l6n5Nj9MZ1nR|Bj|_-rly zz`yP-48TTU^V5Xv=Y9w#8v_s}>KE|5W>AF(Gl@VpaIX{w;xsPk0Zx(s=2yl2n_u;x zQamud4d5+^QcM9+tD*XHK4M=81|b665}ch~3I#srrJ1iZxgq(kKCd|KN7V{$7O#I z*r)V;TllQ;uTu_URvJFyNVZkKej?VAxuF7|(D5+2Z)Bxnk2FZ#3zKmgfWFRJ)isM8 zc~QTw$*!Z{4iQl%#tiHgC#+81@Qn<8S08m-F1%=L%->MKd;IckvdF(w>1T#Q%HxX1 zm7-`qh~HE<2K#hcX(b77vbuO?42js&T8m@n(0_&`r%oBq>Z229F2V8gT!W8Q7`|3i z3xbA|=Q>I)kB0SOE6k+l{m+Y%TW`d9qpXh-4fvibqHStsOqxQnGP5h<2p7-Mza*M@b z0>-=ohb=~QFApH8#?0AMwp#EaT&YGRL zD+<0BGBE+pn+ew=Sy${}Y}RLrY+lA+^C@_fHIkyf77TKVMrqJXE%$a3SO9gnM+@1d zhQYL-rfE@^&(X>8rM*V;oGF>zu@pSMr0{seRsb zXPmv&Rp@Mxy;~#4bFK@On;4D!EZz^dAD+1fUvPU*S7Y;b!oJDA7A?CKwyUv%l?Kk_ zw2ap*HmOvaXmn$ZbM`2VX%?pXuc9XwWf59^HSD*}%I(JYQ6fw2mNb;(L(Z%RwxftTs~0gNvAAu4YHiA!S^R|OLlUERidhse!5J~4bp z3pF#U_Y-(tI3$*(^gmcL)j4A^m3=WLjvmy0t>j$PAzPgYe_yL+} z3u*-J-J>1Z)>wVenjm~&_E!N(N90MiE>4-6s}#2;Waia;-NNPZH}G)s>FZ>osv-{{ zOs6X7jzBZCwCUKHFRpVkoV?5pK$a@aM)2=Zs`I#M$B3VI-%uH@CB zSCbyjuuqcz5%Dk-eDR42JFC$CUOT|bwz%hl;-N02_ZFI1GcCWespX|#vRjl<;MC_z zez~w8!C>LCshgHj(S;j?Pr~`^^-B(8$?KzoxfqMVU214+Z)X({AnSneZ|KCotzcjvt{VoeN zyT=&MR8r||DEk;=*gXxdJ{6~rWQeV3i<2jomJA6CHC*1ptwQqd zT0^aXU2qx!;ji{MkeH?Qs%+VGqK0{E_%tH@fft$}-1&hIg(k)m^%V7hjGZUv!s>i-egM(Sppvbipp4 z_LnZ4BMI51Xgp^47tJzeH;TgA<)JzLpn^oNGu3^~-2D*W_n9JZM-<*t9EquUY+=M3 ze8UMJEBO%i1vHjeJ*^o}pkgI01yq4#SMOMp3ig4)!u znBnF3G*$;ou%p6u>(C0{ONoN&IO+^XQl>LKVmr} zG*!<8>ym*gr<|a&<wtY-~zzj;mRRcsuT&|2&;6Y(Sm%X`{&E<)%2n6#CaQsLO?a zo@6a_N{Gq!fZ4I9Xoc~vOJyz>lJM*c65wWGl;gE-N(=~e>JP?DeVZ2$cd}1GZpoXt z=EFkA=7p#6Zfd~Y#MT_}B~Map+WfK*MKuY{-53;Xv>0H}a%NNy zCwhfo8~0$q^sN>io)*F z7@3D-(A=76ir=*A?nEz{wR*OvrM$e>SA*fsen@EuOtuIO9Y(7E?%>!iPwwtoE`kE0 z(idye=Ea^P=BF79fTb?X50YkEe)#=s!3(&O`WRzFAN;!b;b4Ru4ukiy}! zbiBwsztGP)#clr-d~b_BK!$=C!k`IKbqfQSE#eHkJyo zZ5fodiYH|3`11+1ccNE1C<)saBR`wFZ}uU$p`a-zHWBT`B{$lu=5tBJn`sGbDP={d zfdg4q&vlcIl6%F;%)UyqVpY9cs2zJ@hsIg3ld_51`{)!TJc7huAXB(UJ4XgG50V*7 zqM>Gg`4vOMTZ3y_dv4EHPNsPJhqwxwR=X4vJ|Ftx9g!3e9)lu$%PP)s zUr)76937LOziJMz>d=Hp(p>e*g6a6MkD0G@D;^ZT>WaGUg&aGhHKoc1g{IDNb6$Sl z+t(v*OvPk9UvS^0KHR_poSp$GI`MrV*3|USNGqZ6p(eg#Ray zpw!QRFBX@*t+U$3AV9!HNP>%qY0F$D(s_+OqN|=Dcx(&SO6IAIs7m^3q?NZ-vMLzPNGUxH?5|`}Z z(_HKZ5|Qj+*3zq{uMA^9W4MIu zu=*;*iQsQvO%WwV_zztrtEs(t7xS|((AoPQWuS5R*vXQQ83X_H=;Z9pPpQFsB0(uB zcRoBqq<(~88)j~tsT93F@WCQNp) zIL5a_whHd#51ek0IcAzWyx|xG=?bCyrbS;WCDFaZ1{v=2xB$ zCiflF3diQHSI;*%qO<-;Ot5)85|$QDojXnz)(mVY@kaao`Q2JH#m>}I6}2Lqa84@f zned@i>UqtoH>(N#Y%vP8-Uv;4J@Q?5n}KSI)v%`0Hh9Jn_F03rQ22IyX;sXIMaT9@ zby4ukpdxOtM%iO4Ht46(5MD#pgG?o8l$?hzSS#`c_cXI>>&EMnNF~04br5;fBq|eZ zdvBK!D1N#2qcf{(m*0)gKm>Hmmz~k-T@ZBnd-aOp+A+@(?qbjt(al9uT~z%ne8$S5 zSmz6xVy2jCp5%6>L-Dlbm0(jWC8y9hs_D1sXm%PEuBybQ<+>}zHmk2`4>UIP$+W->XQn6hbtt@ zCoA1b4PlNoK~`fx-uo{%bN$oK|#5p{Qq+AXhHqgAK0D1gE=^<{BL@{ja$%B4!RqKLC0M~CB#l>^Vnwuc8xF0+q%8L# zsdU2TgM163_%K~yrz`ZmzMl8C>eoQNj~AeExu5m7S7n7~&*S_Dyay{_*BP1@|6OCK z=;@tc*=j}y?(fX5pY+)v04<6f2ivzIV)LdDd)f+aRV)1Ei25__>6T_@N3Yc z*JO1p*C!v>sC;kN_;hA7Anj1Q%z22Ir=kj77q7VSB2Fz=s*?F{@=oV86Fe~c+- z4aw)6>yb=ccMK~*iSAk6G&2vbpAIZpx{ER$uvti#CV${u%yOO?%BL5$IJFTyL8w7d z7>@CrZ_GxIPXWbVs%?n90}z{Ww68|FJ!7V6*}AKmrx#mvn-1j7d)RnkJ!|luIa#ka zl}LN3(0CvmB1n(Kb;fM>6&v zWl^mNA8e@Mv(OK3^+SnIC2q{37BY@P^Fe+ z4#()8u&kYFl#bcO#%sAQX$cY?xbLv@DeFeuf)%|71&6p52d)!qs%~97pwX`9tU92X zd=2Qae}fWWFJ(~*`(UGHYD7>tL${!#ph@1cE|<2JVp=dw zYh#k;1_m{Jf{Jv?!Hpc)4Mp*@9ysQ3LQjdaqfC_fP;=^FTR|MTWNp924yzSXjq8Yk z6{B1g;KMe#%x^)ThcU2ZzL%#~!-pO@Wqc~u)&V8ov>3_x#zL;aVH1OGrpoTxjztpD zB8Iz!igUtM!zdY-?kE*g6QvEd>?q3FmKSq9DhGrq@mPs#3p|-{6Z$n3r~zYJqoDMW zHaWXyllaWuzkFcNpzTg>i22wKhH#Sly+(Kgck&@sVM{$m#b}*k zy^$b~E^QiN=C`oy$MV{v3f8i``|86aJSc8QnTfgLKJ@JFSpoJ0%_DMEGwVuCUCb0K zhqXNSUg$-s6p&m1;?{N2LsHsN3S|Q-OJbAC9MY@VzoJfI{MI!a%txYiZAR!|oI3YO zSvi#0onhLIeqH4!GG~}DWJa}@(Tsav{UiegxDV4o(YDcWg!#VUbM7?u3 zd`H6HtctZ>0k+b~9?Fw&lCn$sYld z^<4IEEui+mUyP2$$eD4O-C{_j425Dn8bG0pyWPS}D$-!~{2HLRwc$1Gj+mj~dS%s+ z;+a;0k~9+`Sw8hkpN7&$^_h}Kt>l(9BJC0O4YlgnuCL#G=fS1-Z)VjB;sVRP-`^fb z#@kr`z&zF}FVKXEeauC;b+SS^vd37^HLV11MaPZ@RB&M@x}S|kOAKi z5sS2ou@j|yk?hq|{V=L*+k>KwH(Mx!Gi~r;$`WxW>q7|3J?D~RRH7*Uy|(X4LJ?MxuIIYZRGDt5{R;RCe)AaEwbBs53E>SPn)OnG&#F{$yr zu)p0V4K1-x8q<7Dno7y0C7gc@so`Xm+K{dC{pS&$_n*?%w>QCX{=tSfl}Y3EMc*x` zDZ!PY07B6B@ZvRN-6^P%Ba)=?Ke|o}C(D2GTexn<2GiMXlg6^Uz9K(qV;d_{rbwyA zIXv}s8eU&-0{ z_U-;@!?<_&pYJ(jukho@)3%aLx`sLXPi3OL_OP2hMP-8SxdeyIG=U6`TIf6Dm71g3 z_EJiq@gbFOiSCQY-=ZB;MZ~_wQLu^8e4;NIOL1*yk-VH|^=~3ODCt#}BC9ntt347m zt0XIM5uj)tIf|)>;%zW3*(Tw@XRnGhMviq>4tofUTGP<71I4uo! zAbXMeh(ct8VQGFp-CSU^55qVR)A%B>@O)7dG>~UO+rsyl&5^IcNGeFUqG7L3%~j;y z9Ya)jOl=-d78%@elGotk{cE*0(ecBNmL)n_YQ0!atr$hA(F!)gxN0`90{>#~cSoK> zx_N9hE~(aYEZ5!o9(U5R*Mpv+pYvQHYy9JvTfdeWfot;Ayj)rDgQ(<}Iax zygi}DG*U?E{WBhFUN({^%yY6J4~_h#$UL1r0=dfMJVV`UM_b!+(7ZN#d_IFEQJQX< zPYufY6Ftc{cHE+8SY%t#> z@?5P*l?~D8Vpk~8JPOO-%Lbr?%h4vZx`VKzf8}fEjpuM@U?PSF&&gT*aLI=;kuK8I z`f?DhRJ+3;Zm$tz)G(xLevG5k2g`&*g3lm@%KK^4#>Zt;X2MpUvcWu|s9`WQx&=!? zOt9HCTEL_kKhoYvS4EKBFjruyA1;AxH_;(pkaJYudFi@g>_jspNs*m>H#-I2-Uej! zCrn#@S}B8=EuZ28?@p1;z zBgY+)rk*xFT+-Ws*itoTxiDlm6=v>?QBSjO@OZzYfe{=K3BU#o;TFIxq1q-Z8c_(X-2*v@+9xEiO^y1fm0=as7nYwS1~p|Um_Im-FpD;iE@}<) z>9&`vl}JnsXxo7ZWIx%Jai&Re7v!ui6!%XX@E*IdOH{n$HBmnSm&W~;u+6ABcI(ZT z(GtGpwp^`oIAm7Maie7^*_f4_y`!6Lt}Un;6$r*%-n;XV#8)iA|0ScOvE0Xp&d9*@ zLzvibIRh1}VUv`D+IE_I{X3&vYZ)oa%+=@iJbVSb+pqzOtId?7H2`7$qNmvJPvXZy zFI$;!;7CFJw1iVxSzDpyHWF86&%M*pV7|B{bK;6@onRW66gaza+n-yzB3E;QXegv2 znty_0?$=i4VC9HY(vmg5s!=gl%9(V$s6V)yH6LyDexWKvBh7<8u@)y}cu>Kcu@Lv9 zc+Jb(wwMVNkLaGppC_6Mz2n5bGzV@t%E{S+q*^6UTL@RmrKnfJxi0T38boI1bx`*- zzk>`OR|XwMR8-P$j<+XoN|+#baO!CDeKludYOeA;V;ovV+}TG&;#1`Z%2htr%9}Ed z`r9DX?Dit!hAgwjB!+R;m(@e=VshCo{aB$d_R|2_7>9Y(lzXX%sng`UZWOB}-&IqO zVSQ&!(itt6sI^12Ha0;uj$O)qGUC4Ax28M8ZUEjWmK}Nr7d))0=G6ualbbSXl`o1v zeAItN{gQWd%!!wI=XxpvC4TIQ-E(pLMxLw?`G?}(BingEKmEK@NXS9)20l8$svpky zKIB&5#`wXzJ5?tv?+mofG zrz1-JN6WY(VEKy5N%pYko{P&7S{{}8U3Qz3;EF>C+4(9{G7UR-j=6py+*GHsCM{Md zYJ>$pamqV(7=@X0gEQuqQ9_kGulz@s+Rmpy5isvJh&*h)@MK{_r`{uc`uUCQkQ=!n zKK2_`CdsJaXIZq(TKvT(SKR&VqIFJfR;Rh~Ps-&64al3z@;2~F0`Ti98kbYW3?oihSr!jrEaP z1ATV4>ZNAeA{d7x+7fSTH03r~bw|I34?nyTSvA=8t{IKQ?yMEoS>k6wyvlvV-mRGI z6lb7{qs*^tQ&dh={oDqdEWUt7+TL)ywRSoD4j7XgYtdq?zm9SLj!iwe>6hmel*4LV z@QVu*POEa%zjL7b{M#e&`pdZ=FQ3ZxhoK*imy)$rhwI0p4`z#b z(;cECWUQ%Q5HQGzoh@J*D#Oiu_)L`e~+k3%}O&wDZ`1@#M+ETYK{UrvqqT z#(L8Ats#=D4b-D&UX&`9sZ2p2)+b!R<5ZR6$hfauH1>6ue!`IMHevkK4|vHyoqddr zxHw5CAOd`CCYBjDVpKwokgIB3a*ks?@D*8k&fkVhl?ycW6*SOQ2B~RLn(pZG@5V$B&;ejVY`$jSg+$-h=`_ zx&W|jaNc~VWe)irsu;N!@s0CPnax*t<0Hz;TNJ~X5W|_v#1N(fgrc0Nr=0-~XMYmf z%eNgdj?51o!H%{M3A=A@vLE^;FEy4v+`nC?Xk|YIV_pNdFt3wBCWdaVZMzLYBNte1 zcTMYOK1^Gm^hqW!AwN9ym@qmHf9C}r4n%spBD|2IAYJpc>-6AgW(P7h+LngQ=ur`j zyRB7hL1H#T;Pqo|yjJfLAkC0h{pjekZijNP8+`k#v$C!E(89}Kr{_^xQ&=3VG^4IG zMK$Y&t@c0vAP7ce*M~jW9h*BiVS8^(&9licy23EJW1D);B+jjqcDdkEkE-c(t}~zH z5aVDW@hLeYX z7pbe%rrD=~^D8+^KPEiOxJ;bTq|;%>W6w1rZ=m7KnmE9449D9WIpmz>Hy!-t?3p}< zhwP#&)`VRpUszS>&A}*lkYfog?&w$6&lmRO^Re9mh>u@7tl426juM2VJMR!VoZ&x$ zm=5U>o2rOAZ<v>{*V}Wy7j*Gh8XY>d0;~MH_ z?4wq9h+*Klsc}lx06KzC_bF>(-LaQI4`-vy?n}>}d~Gc8uv~*2ubZt8;W_nc*TGuL zOB>4LhkI0kd$c`_^69fPaP#lCo&r(aAg&PD-S0?-IU(-~{A25Ke4>_iftB4mqeP0N z5j4^}wtN@TZIPG4d04|wMbS=M4fnA?{t)-JaPL9SZ<2ik-Xu$*V==AI&=1-y`RDY>#BwP zuKCbgqPf(KS{vMM$WVq8$nMQaZ2py?y?T~)M%7y=i1@?OWp*eo?!;Y+EM zcH&1T+eT&3A}iQXTw?UCw@g1I-=HG%=m@t287|2iW_i9N9=wqR`IY2YD1MR8cj5$p zPSuvE2&;MXOjf$BAV5OU;K@q|cZnj=&*^RMl~VbKXywq+^^Es4=EsQLB|q&2yj?9Q zEb@vX``T3H0kN!4(R$~rF|U72#^sykKi<>NRMvbGT#r=z2b#C(8`Gx#ReoD8SPzCh zz62H*q>s)&IFurN++#uPW+Qz&(P@GNoR+qQFhk<>Szj8kCoU_>R1M3$&`f5W0l~ie zw;-u&60sM5#A0nkanazMLS@EA3cQg{6U(^1)biaR~bF^Y&M*7qL-b-9|$6`cD zBv-ZXD+Ld)f;jC^ zN;UeMTUY3>lKIGsOvx}R3qDvUoFvJS9IYgQb=*~2DGpqejy&%j8B_L6w3$UUh?C}Q zk5biAeJHO8`d!Q2)>=+s)M{7$k0g$NgoDxY1s1Y(^8wgAjdA9O#Dm?5QQ zv5cNNu#`E>E<~Aw8ot+FBM^QeinTS29T*wf;YmhX6P445A39ERxU<9%h#a(JE*wUd zOC&AC98c0tmFEg&kf|H(()B91D>F1R@5!PboqX(j6cO^r%TRNBp7}h)kdOd3OqrFd91%7K2*LUbPEPL`VfUj6UF7g;!epsX}U& z_C9o%&ZF9+(n%iL*@z^GGKh76Qr<;D5p=@+4E9l2naEn}q+Tljq;OX~+U|Pr*uHUp zfAhQms{BLTnfI_Ll-OBYL_U&y0O#VYpe?hnkG&WG(u*jc3kasr7>d4$vD`DypWpr6 zUFzbu5J|`gMbC~xsrRZfNt$rP!RcsL}nmy#!O=h#S+N1-laJDyI6%em2I&MM- zd^+B++J>5zqoo<`Z>Z@0$b40T<>Ndl^!2kgF(PK@q$0{SZF-7rk(t`t#rX4PcK`I3 zYEU?|{F*_bKZ{0}4_ycCXGTbpVCs&Ls+oB4=5jnaT?tnOwMpaXd|c(&XZGvdkYYxk zKZL()C4n)k9LWMZ7%-xMXTr+dP!~Ch5sO>lF)_8^FBNy?;t@knbUUHj4 z{1Ri#BXO*>)FIA#-`ssI_Gi00yFUvl7J`H|d~SjL$Wa=cg)7xbiDSJxc(@-m3JA+e zr~-1*|Ja?fM3D4yx})%sRVO)Uok&zwAYgOG9s+yvNsCRi>{HYO%cVcOEvw9_jNeo=3L%dx{(0YexQUl+#6HzDB+_P#tz6I zui%n_&vbJIB~?p#rWcTH9vwo9!KF{EoZ=og=YMIZem239&kospSdu=y`n!I~%+l0R z@YaANjipW(s{2OJOXg0?v`^E^Wye(hLUvmFx(fVnw0pr~Ud44WXw9DhDun4{18z4YARvqDL-1l34u;)XoE5AX{Olu1U8SHSlAMi zIisW!nqPfLJn?{iBKb#{*@9@>B@KQDL5 zmWd_9i6x3JIPEI6CeUjgt7 z%F}j;a8)_<5P19g{ajW@iHE(33K6h=V;O1#t7e}8^M2DHg#2V6prW4$<&xL&r}hsV z@$dmZL8Lq(4Fdht?v;m%08h|+Cslm7IYSNXtYIxK>a#(#dG^X@h0QaY1-0T4+!&hg zL>`vDAa2IF!@Ne*Ol_tTf?dT0+G5?x$r+oJWUj@jz>WItSb%(NxJKK6I>LOXG_}ab z?ctAV<@JJye3Nm%;r?_76bO6})u5&}e_qNK`o!cm=ft1wS@!vvyoH8!{6(S zx0EB&atoT7LxCjllqPiJ?(Ft@unYYo$Hhi5YJyvT`Myg{5; zI)7LdM7y4i(k$}md!(fSKh}-&851#h^%;}(lh(jT zZfetld)3p9pzLdtXUqzaK3cY<QzxIw8{6^by?R)c(Rakvi{_AngQ~6IUzHbz{b)=( zeRL1fm;%yzdGh{25`c-xN?4vV?OSK!&-n_GT>W=I;XP!RLD3p*5M#~V-W5j9wti+` z+3srOJ}gYtGg!fzg%nu?abe-%ku#es&g&dCU?E`K*yj{QroGG5m*Xnd|Lp7$zJ+OP zY|N_OY3|YDiADKd^MQTAe)T!K2qcw#vF(?AW=ty3`SnV3wXY64Gt@za?jg>?FX^)K z3GHMGHyvxNgfLDiswH{oH3Lam+vjaE-EQP?n8&>i4=bRY{Tzi9gLoHx1)PrO&> zcu({!qZ?CqNz|#Z zvH*qeHmcZTHE8`st-l>^jEE?qYc;4Jcww@Z0~^(j`x73L)9DjnxD*nDOkpq#4)+FM zY=qDeeB+w=EUAbUAMnHOQZ<5;2Q&xH%@Yj=mfScf;>V*s(q5g@@aS^zmW z955C;(D@&9D$G~j7|jmUgF}2RY}8%z83kYS0+Rvob6{s)pdfgV4=4uUTl@>;`GFDu zm(_m(7IVaNdJ z{@3GBD5!v^zd9g6AT6miM0EM#@F@!h3Q7|a<)i&SqWCZWisFFZ2>~$>U*$=*?mE1| z+(N)e(tmpTZ=5p3#Q&(vz=8urA$^0?gatn22V#IP34uVcyfBaeAgBMg?Eiw9$^WtS z{{N@;}!9 z`+>2>|5$hb^eS)mkJLX`QCLt=LJUw)YX2kUANbcQ0Y&SSw8VCYlj=#zXfR$u`9DtRr zzrbi0fC8S8d2RXbzYHE&iX8YB>?RA*b~*f)MglL&0x|ya#@}!8>z5b`%K3l1!TR&B zeAXR+9qcCuIW_s8|7FO)Lr;)y;mbp4IRMyM3DO*hAOSc_9^!&2gnt=yFoOb+3qbJZ zU*;|Ny8`edpceZt^Gy-rln;tPPJjsUzl;dri2N0(fUU@3(7@3G|2O*TN|2t=QN5PM z0>)@wk6K_IWgr^>Nc#%pz^lp-yU01v7_hI3B}?5qPR zmQjUxTwnGTh=9jcA#E_!{SVNAL4EDre@;3}HAuAxMz3WuV2~jUJlOj6gxpjEz60o) z{iS8pfh+(!>%U;|6(BnP1)m)t3i29|R!F-3Wjb6S%hP9cBkMlFacFzPR0(}n>2_`e`74x-Sc4XLIr<&{wa zbEiNYvPccFtgZtwL6!DOM*x&E!11~ePpazzc>vwtUO@tYwD9$)49+fq!3Ia_L9Doz zy^2ex=tEqrKmE^V@F#ts2*7;yFIbs@K>^e8{GZ#X3?Oyntbv6MfWCmU!`Bhu0)I9H zqJt3(fdYV}<9``pzzk%n`%f_(Sl|MN1WalKsq*Uje`z#unh~USXvoa<-_nR+brndE yBAqdi0Ol7Q5Da|*BMOc*2EIdptVLR{b2qrg7>EN{!T=8$1F7N8F(LCN)c*s%jv*@m delta 45490 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 GL;XJ=wY?$$ diff --git a/gateway/EaglercraftXVelocity/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_velocity/EaglerXVelocityVersion.java b/gateway/EaglercraftXVelocity/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_velocity/EaglerXVelocityVersion.java index 752f804..735873a 100644 --- a/gateway/EaglercraftXVelocity/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_velocity/EaglerXVelocityVersion.java +++ b/gateway/EaglercraftXVelocity/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_velocity/EaglerXVelocityVersion.java @@ -23,7 +23,7 @@ public class EaglerXVelocityVersion { public static final String PLUGIN_ID = "eaglerxvelocity"; public static final String NAME = "EaglercraftXVelocity"; public static final String DESCRIPTION = "Plugin to allow EaglercraftX 1.8 players to join your network, or allow EaglercraftX 1.8 players to use your network as a proxy to join other networks"; - public static final String VERSION = "1.0.1"; + public static final String VERSION = "1.0.2"; public static final String[] AUTHORS = new String[] { "lax1dude", "ayunami2000" }; } diff --git a/gateway/EaglercraftXVelocity/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_velocity/server/HttpWebSocketHandler.java b/gateway/EaglercraftXVelocity/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_velocity/server/HttpWebSocketHandler.java index f53f130..7d90651 100644 --- a/gateway/EaglercraftXVelocity/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_velocity/server/HttpWebSocketHandler.java +++ b/gateway/EaglercraftXVelocity/src/main/java/net/lax1dude/eaglercraft/v1_8/plugin/gateway_velocity/server/HttpWebSocketHandler.java @@ -60,6 +60,7 @@ import io.netty.handler.timeout.WriteTimeoutHandler; import io.netty.util.ReferenceCountUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.serializer.json.JSONComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.translation.GlobalTranslator; import net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.EaglerXVelocity; @@ -101,6 +102,8 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { private static final Constructor stupidConstructor; private static final Field remoteAddressField; + private static final Field stateField; + private static final Field protocolVersionField; private static final Constructor stupid2Constructor; private static final Method loginEventFiredMethod; private static final Constructor stupid3Constructor; @@ -113,6 +116,10 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { stupidConstructor.setAccessible(true); remoteAddressField = MinecraftConnection.class.getDeclaredField("remoteAddress"); remoteAddressField.setAccessible(true); + stateField = MinecraftConnection.class.getDeclaredField("state"); + stateField.setAccessible(true); + protocolVersionField = MinecraftConnection.class.getDeclaredField("protocolVersion"); + protocolVersionField.setAccessible(true); stupid2Constructor = LoginInboundConnection.class.getDeclaredConstructor(InitialInboundConnection.class); stupid2Constructor.setAccessible(true); loginEventFiredMethod = LoginInboundConnection.class.getDeclaredMethod("loginEventFired", Runnable.class); @@ -212,7 +219,6 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { if (i >= conf.getMaxPlayer()) { sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, "Proxy is full") .addListener(ChannelFutureListener.CLOSE); - connectionClosed = true; return; } } @@ -240,8 +246,8 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { } if(loginRateLimit == RateLimitStatus.LOCKED_OUT) { - ctx.close(); connectionClosed = true; + ctx.close(); return; } @@ -251,7 +257,6 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { ? HandshakePacketTypes.SERVER_ERROR_RATELIMIT_LOCKED : HandshakePacketTypes.SERVER_ERROR_RATELIMIT_BLOCKED, "Too many logins!").addListener(ChannelFutureListener.CLOSE); - connectionClosed = true; return; } @@ -292,6 +297,7 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { return; }else if(buffer.readUnsignedByte() != minecraftProtocolVersion) { clientLoginState = HandshakePacketTypes.STATE_CLIENT_COMPLETE; + connectionClosed = true; ByteBuf buf = Unpooled.buffer(); buf.writeByte(HandshakePacketTypes.PROTOCOL_VERSION_MISMATCH); buf.writeByte(1); @@ -365,6 +371,7 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { if(versMisMatch) { clientLoginState = HandshakePacketTypes.STATE_CLIENT_COMPLETE; + connectionClosed = true; ByteBuf buf = Unpooled.buffer(); buf.writeByte(HandshakePacketTypes.PROTOCOL_VERSION_MISMATCH); @@ -610,7 +617,7 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { final VelocityServer bungee = EaglerXVelocity.proxy(); String usernameStr = clientUsername.toString(); if (bungee.getPlayer(usernameStr).isPresent()) { - sendLoginDenied(ctx, LegacyComponentSerializer.legacySection().serialize(GlobalTranslator.render(Component.translatable("velocity.error.already-connected-proxy", NamedTextColor.RED), Locale.getDefault()))) + sendLoginDenied(ctx, LegacyComponentSerializer.legacySection().serialize(GlobalTranslator.render(Component.translatable("velocity.error.already-connected-proxy"), Locale.getDefault()))) .addListener(ChannelFutureListener.CLOSE); return; } @@ -777,7 +784,7 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { final String usernameStr = clientUsername.toString(); if (bungee.getPlayer(usernameStr).isPresent()) { sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, - LegacyComponentSerializer.legacySection().serialize(GlobalTranslator.render(Component.translatable("velocity.error.already-connected-proxy", NamedTextColor.RED), Locale.getDefault()))) + LegacyComponentSerializer.legacySection().serialize(GlobalTranslator.render(Component.translatable("velocity.error.already-connected-proxy"), Locale.getDefault()))) .addListener(ChannelFutureListener.CLOSE); return; } @@ -790,9 +797,8 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { ProtocolVersion protocolVers = ProtocolVersion.getProtocolVersion(gameProtocolVersion); if(!protocolVers.isSupported()) { - sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, - "outdated_client") - .addListener(ChannelFutureListener.CLOSE); + //TODO: localize somehow + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, "Outdated Client!").addListener(ChannelFutureListener.CLOSE); return; } @@ -804,29 +810,12 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { fakeHandshake.setServerAddress(hostName); fakeHandshake.setPort(localAddress.getPort()); - ChannelPipeline pp = ctx.channel().pipeline(); + final MinecraftConnection con = new MinecraftConnection(ctx.channel(), bungee); - pp.remove(HttpWebSocketHandler.this); - - pp - .addLast("EaglerMinecraftByteBufDecoder", new EaglerMinecraftDecoder()) - .addLast(LEGACY_PING_DECODER, new LegacyPingDecoder()) - .addLast(READ_TIMEOUT, - new ReadTimeoutHandler(bungee.getConfiguration().getReadTimeout(), - TimeUnit.MILLISECONDS)) - .addLast("EaglerMinecraftByteBufEncoder", new EaglerMinecraftEncoder()) - .addLast(LEGACY_PING_ENCODER, LegacyPingEncoder.INSTANCE) - .addLast(MINECRAFT_DECODER, new MinecraftDecoder(ProtocolUtils.Direction.SERVERBOUND)) - .addLast(MINECRAFT_ENCODER, new MinecraftEncoder(ProtocolUtils.Direction.CLIENTBOUND)); - - MinecraftConnection con = new MinecraftConnection(ctx.channel(), bungee); - - pp.addLast(Connections.HANDLER, con); - - con.setProtocolVersion(protocolVers); - con.setState(StateRegistry.LOGIN); try { remoteAddressField.set(con, baseAddress); + stateField.set(con, StateRegistry.LOGIN); + protocolVersionField.set(con, protocolVers); } catch (IllegalAccessException e) { throw new RuntimeException(e); } @@ -835,13 +824,14 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { EaglerUpdateConfig updateconf = eaglerConf.getUpdateConfig(); boolean blockUpdate = updateconf.isBlockAllClientUpdates(); - EaglerPlayerData.ClientCertificateHolder cert = null; + EaglerPlayerData.ClientCertificateHolder mycert = null; if(!blockUpdate && !updateconf.isDiscardLoginPacketCerts()) { byte[] b = profileData.get("update_cert_v1"); if(b != null && b.length < 32759) { - EaglerUpdateSvc.sendCertificateToPlayers(EaglerUpdateSvc.tryMakeHolder(b)); + EaglerUpdateSvc.sendCertificateToPlayers(mycert = EaglerUpdateSvc.tryMakeHolder(b)); } } + final EaglerPlayerData.ClientCertificateHolder cert = mycert; InitialInboundConnection inboundCon; try { @@ -851,18 +841,17 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { } if (!bungee.getIpAttemptLimiter().attempt(baseAddress.getAddress())) { - con.setState(StateRegistry.LOGIN); - inboundCon.disconnectQuietly(Component.translatable("velocity.error.logging-in-too-fast")); + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, + LegacyComponentSerializer.legacySection().serialize(GlobalTranslator.render(Component.translatable("velocity.error.logging-in-too-fast", NamedTextColor.RED), Locale.getDefault()))) + .addListener(ChannelFutureListener.CLOSE); return; } - con.setState(StateRegistry.LOGIN); - if (bungee.getConfiguration().getPlayerInfoForwardingMode() == PlayerInfoForwarding.MODERN && protocolVers.lessThan(ProtocolVersion.MINECRAFT_1_13)) { - con.setState(StateRegistry.LOGIN); - inboundCon.disconnectQuietly( - Component.translatable("velocity.error.modern-forwarding-needs-new-client")); + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, + LegacyComponentSerializer.legacySection().serialize(GlobalTranslator.render(Component.translatable("velocity.error.modern-forwarding-needs-new-client", NamedTextColor.RED), Locale.getDefault()))) + .addListener(ChannelFutureListener.CLOSE); return; } @@ -883,7 +872,9 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { PreLoginEvent.PreLoginComponentResult result = event1.getResult(); Optional disconnectReason = result.getReasonComponent(); if (disconnectReason.isPresent()) { - lic.disconnect(disconnectReason.get()); + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, + JSONComponentSerializer.json().serialize(GlobalTranslator.render(disconnectReason.get(), Locale.getDefault()))) + .addListener(ChannelFutureListener.CLOSE); return; } @@ -907,104 +898,6 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { return CompletableFuture.completedFuture(null); } else { GameProfile gp = profileEvent.getGameProfile(); - - boolean doRegisterSkins = true; - - EaglercraftRegisterSkinEvent registerSkinEvent = bungee.getEventManager().fire(new EaglercraftRegisterSkinEvent(usernameStr, clientUUID)).join(); - - Property prop = registerSkinEvent.getForceUseMojangProfileProperty(); - boolean useExistingProp = registerSkinEvent.getForceUseLoginResultObjectTextures(); - if(prop != null) { - texturesOverrideProperty = prop; - overrideEaglerToVanillaSkins = true; - }else { - if(useExistingProp) { - overrideEaglerToVanillaSkins = true; - }else { - byte[] custom = registerSkinEvent.getForceSetUseCustomPacket(); - if(custom != null) { - profileData.put("skin_v1", custom); - overrideEaglerToVanillaSkins = false; - }else { - String customUrl = registerSkinEvent.getForceSetUseURL(); - if(customUrl != null) { - EaglerXVelocity.getEagler().getSkinService().registerTextureToPlayerAssociation(customUrl, gp.getId()); - doRegisterSkins = false; - overrideEaglerToVanillaSkins = false; - } - } - } - } - - if(texturesOverrideProperty != null) { - gp = gp.addProperties(Arrays.asList(texturesOverrideProperty, EaglerVelocityConfig.isEaglerProperty)); - }else { - if(!useExistingProp) { - String vanillaSkin = eaglerConf.getEaglerPlayersVanillaSkin(); - if(vanillaSkin != null) { - gp = gp.addProperties(Arrays.asList(eaglerConf.getEaglerPlayersVanillaSkinProperties())); - } - } - } - - if(overrideEaglerToVanillaSkins) { - List props = gp.getProperties(); - if(props != null) { - for(int i = 0; i < props.size(); ++i) { - if("textures".equals(props.get(i).getName())) { - try { - String jsonStr = SkinPackets.bytesToAscii(Base64.getDecoder().decode(props.get(i).getValue())); - JsonObject json = JsonParser.parseString(jsonStr).getAsJsonObject(); - JsonObject skinObj = json.getAsJsonObject("SKIN"); - if(skinObj != null) { - JsonElement url = json.get("url"); - if(url != null) { - String urlStr = SkinService.sanitizeTextureURL(url.getAsString()); - EaglerXVelocity.getEagler().getSkinService().registerTextureToPlayerAssociation(urlStr, gp.getId()); - } - } - doRegisterSkins = false; - }catch(Throwable t) { - } - break; - } - } - } - } - - if(doRegisterSkins) { - if(profileData.containsKey("skin_v1")) { - try { - SkinPackets.registerEaglerPlayer(clientUUID, profileData.get("skin_v1"), - EaglerXVelocity.getEagler().getSkinService()); - } catch (Throwable ex) { - SkinPackets.registerEaglerPlayerFallback(clientUUID, EaglerXVelocity.getEagler().getSkinService()); - EaglerXVelocity.logger().info("[" + ctx.channel().remoteAddress() + "]: Invalid skin packet: " + ex.toString()); - } - }else { - SkinPackets.registerEaglerPlayerFallback(clientUUID, EaglerXVelocity.getEagler().getSkinService()); - } - } - - EaglercraftRegisterCapeEvent registerCapeEvent = bungee.getEventManager().fire(new EaglercraftRegisterCapeEvent(usernameStr, clientUUID)).join(); - - byte[] forceCape = registerCapeEvent.getForceSetUseCustomPacket(); - if(forceCape != null) { - profileData.put("cape_v1", forceCape); - } - - if(profileData.containsKey("cape_v1")) { - try { - CapePackets.registerEaglerPlayer(clientUUID, profileData.get("cape_v1"), - EaglerXVelocity.getEagler().getCapeService()); - } catch (Throwable ex) { - CapePackets.registerEaglerPlayerFallback(clientUUID, EaglerXVelocity.getEagler().getCapeService()); - EaglerXVelocity.logger().info("[" + ctx.channel().remoteAddress() + "]: Invalid cape packet: " + ex.toString()); - } - }else { - CapePackets.registerEaglerPlayerFallback(clientUUID, EaglerXVelocity.getEagler().getCapeService()); - } - if(eaglerConf.getEnableIsEaglerPlayerProperty()) { gp = gp.addProperty(EaglerVelocityConfig.isEaglerProperty); } @@ -1015,14 +908,131 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) { throw new RuntimeException(e); } + + con.setAssociation(player); + if (!bungee.canRegisterConnection(player)) { - player.disconnect0(Component.translatable("velocity.error.already-connected-proxy", NamedTextColor.RED), true); + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, + LegacyComponentSerializer.legacySection().serialize(GlobalTranslator.render(Component.translatable("velocity.error.already-connected-proxy"), Locale.getDefault()))) + .addListener(ChannelFutureListener.CLOSE); return CompletableFuture.completedFuture(null); } else { + boolean doRegisterSkins = true; + + EaglercraftRegisterSkinEvent registerSkinEvent = bungee.getEventManager().fire(new EaglercraftRegisterSkinEvent(usernameStr, clientUUID)).join(); + + Property prop = registerSkinEvent.getForceUseMojangProfileProperty(); + boolean useExistingProp = registerSkinEvent.getForceUseLoginResultObjectTextures(); + if(prop != null) { + texturesOverrideProperty = prop; + overrideEaglerToVanillaSkins = true; + }else { + if(useExistingProp) { + overrideEaglerToVanillaSkins = true; + }else { + byte[] custom = registerSkinEvent.getForceSetUseCustomPacket(); + if(custom != null) { + profileData.put("skin_v1", custom); + overrideEaglerToVanillaSkins = false; + }else { + String customUrl = registerSkinEvent.getForceSetUseURL(); + if(customUrl != null) { + EaglerXVelocity.getEagler().getSkinService().registerTextureToPlayerAssociation(customUrl, gp.getId()); + doRegisterSkins = false; + overrideEaglerToVanillaSkins = false; + } + } + } + } + + if(texturesOverrideProperty != null) { + gp = gp.addProperties(Arrays.asList(texturesOverrideProperty, EaglerVelocityConfig.isEaglerProperty)); + }else { + if(!useExistingProp) { + String vanillaSkin = eaglerConf.getEaglerPlayersVanillaSkin(); + if(vanillaSkin != null) { + gp = gp.addProperties(Arrays.asList(eaglerConf.getEaglerPlayersVanillaSkinProperties())); + } + } + } + + if(overrideEaglerToVanillaSkins) { + List props = gp.getProperties(); + if(props != null) { + for(int i = 0; i < props.size(); ++i) { + if("textures".equals(props.get(i).getName())) { + try { + String jsonStr = SkinPackets.bytesToAscii(Base64.getDecoder().decode(props.get(i).getValue())); + JsonObject json = JsonParser.parseString(jsonStr).getAsJsonObject(); + JsonObject skinObj = json.getAsJsonObject("SKIN"); + if(skinObj != null) { + JsonElement url = json.get("url"); + if(url != null) { + String urlStr = SkinService.sanitizeTextureURL(url.getAsString()); + EaglerXVelocity.getEagler().getSkinService().registerTextureToPlayerAssociation(urlStr, gp.getId()); + } + } + doRegisterSkins = false; + }catch(Throwable t) { + } + break; + } + } + } + } + + if(doRegisterSkins) { + if(profileData.containsKey("skin_v1")) { + try { + SkinPackets.registerEaglerPlayer(clientUUID, profileData.get("skin_v1"), + EaglerXVelocity.getEagler().getSkinService()); + } catch (Throwable ex) { + SkinPackets.registerEaglerPlayerFallback(clientUUID, EaglerXVelocity.getEagler().getSkinService()); + EaglerXVelocity.logger().info("[" + ctx.channel().remoteAddress() + "]: Invalid skin packet: " + ex.toString()); + } + }else { + SkinPackets.registerEaglerPlayerFallback(clientUUID, EaglerXVelocity.getEagler().getSkinService()); + } + } + + EaglercraftRegisterCapeEvent registerCapeEvent = bungee.getEventManager().fire(new EaglercraftRegisterCapeEvent(usernameStr, clientUUID)).join(); + + byte[] forceCape = registerCapeEvent.getForceSetUseCustomPacket(); + if(forceCape != null) { + profileData.put("cape_v1", forceCape); + } + + if(profileData.containsKey("cape_v1")) { + try { + CapePackets.registerEaglerPlayer(clientUUID, profileData.get("cape_v1"), + EaglerXVelocity.getEagler().getCapeService()); + } catch (Throwable ex) { + CapePackets.registerEaglerPlayerFallback(clientUUID, EaglerXVelocity.getEagler().getCapeService()); + EaglerXVelocity.logger().info("[" + ctx.channel().remoteAddress() + "]: Invalid cape packet: " + ex.toString()); + } + }else { + CapePackets.registerEaglerPlayerFallback(clientUUID, EaglerXVelocity.getEagler().getCapeService()); + } + EaglerXVelocity.logger().info("{} has connected", player); if(conf.getEnableVoiceChat()) { EaglerXVelocity.getEagler().getVoiceService().handlePlayerLoggedIn(player); } + + EaglerPlayerData epd = ctx.channel().attr(EaglerPipeline.CONNECTION_INSTANCE).get().eaglerData = new EaglerPlayerData(conf, ctx.channel().attr(EaglerPipeline.ORIGIN).get(), cert); + if(!blockUpdate) { + List set = EaglerUpdateSvc.getCertList(); + synchronized(set) { + epd.certificatesToSend.addAll(set); + } + for (Player p : bungee.getAllPlayers()) { + EaglerPlayerData ppp = EaglerPipeline.getEaglerHandle(p); + if(ppp != null && ppp.clientCertificate != null && ppp.clientCertificate != cert) { + epd.certificatesToSend.add(ppp.clientCertificate); + } + } + } + PermissionProvider prov; try { prov = (PermissionProvider) defaultPermissionsField.get(null); @@ -1041,43 +1051,53 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { throw new RuntimeException(e); } } - - con.setAssociation(player); - EaglerPlayerData epd = ctx.channel().attr(EaglerPipeline.CONNECTION_INSTANCE).get().eaglerData = new EaglerPlayerData(conf, ctx.channel().attr(EaglerPipeline.ORIGIN).get(), cert); - if(!blockUpdate) { - List set = EaglerUpdateSvc.getCertList(); - synchronized(set) { - epd.certificatesToSend.addAll(set); - } - for (Player p : bungee.getAllPlayers()) { - EaglerPlayerData ppp = EaglerPipeline.getEaglerHandle(p); - if(ppp != null && ppp.clientCertificate != null && ppp.clientCertificate != cert) { - epd.certificatesToSend.add(ppp.clientCertificate); - } - } - } bungee.getEventManager().fire(new LoginEvent(player)).thenAcceptAsync(event3 -> { if (con.isClosed()) { // The player was disconnected - bungee.getEventManager().fireAndForget(new DisconnectEvent(player, - DisconnectEvent.LoginStatus.CANCELLED_BY_USER_BEFORE_COMPLETE)); + bungee.getEventManager().fireAndForget(new DisconnectEvent(player, DisconnectEvent.LoginStatus.CANCELLED_BY_USER_BEFORE_COMPLETE)); return; } Optional reason = event3.getResult().getReasonComponent(); if (reason.isPresent()) { - player.disconnect0(reason.get(), true); + bungee.getEventManager().fireAndForget(new DisconnectEvent(player, DisconnectEvent.LoginStatus.CANCELLED_BY_PROXY)); + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, + JSONComponentSerializer.json().serialize(GlobalTranslator.render(reason.get(), Locale.getDefault()))) + .addListener(ChannelFutureListener.CLOSE); + return; } else { if (!bungee.registerConnection(player)) { - player.disconnect0(Component.translatable("velocity.error.already-connected-proxy"), - true); + bungee.getEventManager().fireAndForget(new DisconnectEvent(player, DisconnectEvent.LoginStatus.CONFLICTING_LOGIN)); + sendErrorCode(ctx, HandshakePacketTypes.SERVER_ERROR_CUSTOM_MESSAGE, + LegacyComponentSerializer.legacySection().serialize(GlobalTranslator.render(Component.translatable("velocity.error.already-connected-proxy"), Locale.getDefault()))) + .addListener(ChannelFutureListener.CLOSE); return; } ByteBuf buf = Unpooled.buffer(); buf.writeByte(HandshakePacketTypes.PROTOCOL_SERVER_FINISH_LOGIN); - ctx.channel().writeAndFlush(buf).addListener(future -> { + ctx.channel().writeAndFlush(new BinaryWebSocketFrame(buf)).addListener(future -> { + ChannelPipeline pp = ctx.channel().pipeline(); + + pp.remove(HttpWebSocketHandler.this); + + pp + .addLast("EaglerMinecraftByteBufDecoder", new EaglerMinecraftDecoder()) + .addLast(LEGACY_PING_DECODER, new LegacyPingDecoder()) + .addLast(READ_TIMEOUT, + new ReadTimeoutHandler(bungee.getConfiguration().getReadTimeout(), + TimeUnit.MILLISECONDS)) + .addLast("EaglerMinecraftByteBufEncoder", new EaglerMinecraftEncoder()) + .addLast(LEGACY_PING_ENCODER, LegacyPingEncoder.INSTANCE) + .addLast(MINECRAFT_DECODER, new MinecraftDecoder(ProtocolUtils.Direction.SERVERBOUND)) + .addLast(MINECRAFT_ENCODER, new MinecraftEncoder(ProtocolUtils.Direction.CLIENTBOUND)); + + pp.addLast(Connections.HANDLER, con); + + con.setProtocolVersion(protocolVers); + con.setState(StateRegistry.PLAY); con.setActiveSessionHandler(StateRegistry.PLAY, stupid4Constructor.newInstance(player, bungee)); + bungee.getEventManager().fire(new PostLoginEvent(player)).thenCompose((ignored) -> { ctx.channel().attr(EaglerPipeline.CONNECTION_INSTANCE).get().hasBeenForwarded = true; Optional initialFromConfig = player.getNextServerToTry(); @@ -1151,9 +1171,9 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { hasBinaryConnection = false; if(CommandConfirmCode.confirmHash != null && str.equalsIgnoreCase(CommandConfirmCode.confirmHash)) { + connectionClosed = true; ctx.writeAndFlush(new TextWebSocketFrame("OK")).addListener(ChannelFutureListener.CLOSE); CommandConfirmCode.confirmHash = null; - connectionClosed = true; return; } @@ -1178,17 +1198,17 @@ public class HttpWebSocketHandler extends ChannelInboundHandlerAdapter { } if(queryRateLimit == RateLimitStatus.LOCKED_OUT) { - ctx.close(); connectionClosed = true; + ctx.close(); return; } if(queryRateLimit != RateLimitStatus.OK) { + connectionClosed = true; final RateLimitStatus rateLimitTypeFinal = queryRateLimit; ctx.writeAndFlush(new TextWebSocketFrame( rateLimitTypeFinal == RateLimitStatus.LIMITED_NOW_LOCKED_OUT ? "{\"type\":\"locked\"}" : "{\"type\":\"blocked\"}")) .addListener(ChannelFutureListener.CLOSE); - connectionClosed = true; return; } diff --git a/gateway/EaglercraftXVelocity/src/main/resources/velocity-plugin.json b/gateway/EaglercraftXVelocity/src/main/resources/velocity-plugin.json index 7556849..c282603 100644 --- a/gateway/EaglercraftXVelocity/src/main/resources/velocity-plugin.json +++ b/gateway/EaglercraftXVelocity/src/main/resources/velocity-plugin.json @@ -1 +1 @@ -{"id":"eaglerxvelocity","name":"EaglercraftXVelocity","version":"1.0.1","description":"Plugin to allow EaglercraftX 1.8 players to join your network, or allow EaglercraftX 1.8 players to use your network as a proxy to join other networks","authors":["lax1dude", "ayunami2000"],"dependencies":[],"main":"net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.EaglerXVelocity"} \ No newline at end of file +{"id":"eaglerxvelocity","name":"EaglercraftXVelocity","version":"1.0.2","description":"Plugin to allow EaglercraftX 1.8 players to join your network, or allow EaglercraftX 1.8 players to use your network as a proxy to join other networks","authors":["lax1dude", "ayunami2000"],"dependencies":[],"main":"net.lax1dude.eaglercraft.v1_8.plugin.gateway_velocity.EaglerXVelocity"} \ No newline at end of file diff --git a/gateway_version_velocity b/gateway_version_velocity index 7f20734..e6d5cb8 100644 --- a/gateway_version_velocity +++ b/gateway_version_velocity @@ -1 +1 @@ -1.0.1 \ No newline at end of file +1.0.2 \ No newline at end of file