From 94993b21b476f06424de1f781ecd883a7874c902 Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Mon, 22 Jun 2026 17:06:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(client/windows):=20=E4=BF=AE=E6=A1=8C?= =?UTF-8?q?=E9=9D=A2/=E6=A0=87=E9=A2=98=E6=A0=8F=E5=9B=BE=E6=A0=87=20+=20?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E6=96=87=E6=A1=88=20+=20=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E6=89=98=E7=9B=98=E7=A9=BA=E7=99=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - app_icon.ico 重新由 assets/app-icon.svg 生成(穿山甲品牌图标,多尺寸), 替换残留的默认 Flutter logo —— 同时修好桌面图标与标题栏小图标。 - 窗口标题去掉 "VPN" 字眼:main.cpp 原生标题 pangolin_vpn → Pangolin; main.dart 用 windowManager.setTitle('穿山甲') 显示中文品牌名; Runner.rc 的 FileDescription/InternalName/ProductName → Pangolin。 - 系统托盘空白:Windows 走 Win32 Shell_NotifyIcon 只认 .ico(传 PNG 显示空白), 新增 BMP 编码的 assets/tray_icon.ico,system_tray.dart 按平台选 ico/png。 - 安装包版本 1.0.0 → 1.0.1(pubspec 1.0.1+2)便于区分测试构建。 Co-Authored-By: Claude Opus 4.8 --- client/assets/tray_icon.ico | Bin 0 -> 18526 bytes client/lib/main.dart | 2 ++ client/lib/system_tray.dart | 6 +++++- client/pubspec.yaml | 3 ++- client/windows/installer/pangolin.iss | 2 +- client/windows/runner/Runner.rc | 6 +++--- client/windows/runner/main.cpp | 2 +- client/windows/runner/resources/app_icon.ico | Bin 33772 -> 34787 bytes 8 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 client/assets/tray_icon.ico diff --git a/client/assets/tray_icon.ico b/client/assets/tray_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a917de10c8e988230a1a9a1e6d078363310dab8f GIT binary patch literal 18526 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 l*_ng2RsOR|Yg<<5(~_E?Msq0(GW$R_b)YU main() async { await windowManager.setMinimumSize(const Size(720, 560)); await windowManager.setSize(const Size(920, 640)); await windowManager.center(); + // 窗口标题用中文品牌名(不带 "VPN" 字眼);英文环境下原生标题为 "Pangolin"。 + await windowManager.setTitle('穿山甲'); } runApp(const ProviderScope(child: PangolinApp())); } diff --git a/client/lib/system_tray.dart b/client/lib/system_tray.dart index 67edadb..1eea776 100644 --- a/client/lib/system_tray.dart +++ b/client/lib/system_tray.dart @@ -53,7 +53,11 @@ class TrayService with TrayListener, WindowListener { windowManager.addListener(this); trayManager.addListener(this); - await trayManager.setIcon('assets/tray_icon.png'); + // Windows 托盘走 Win32 Shell_NotifyIcon,只认 .ico(传 PNG 会显示空白); + // macOS/Linux 用 PNG。 + await trayManager.setIcon( + Platform.isWindows ? 'assets/tray_icon.ico' : 'assets/tray_icon.png', + ); await trayManager.setToolTip('穿山甲 Pangolin'); await trayManager.setContextMenu(Menu(items: [ MenuItem(key: 'show', label: '显示主界面'), diff --git a/client/pubspec.yaml b/client/pubspec.yaml index 26c90ac..e697407 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -1,7 +1,7 @@ name: pangolin_vpn description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。 publish_to: "none" -version: 1.0.0+1 +version: 1.0.1+2 environment: sdk: ^3.5.0 @@ -45,6 +45,7 @@ flutter: - assets/logo-wordmark.svg - assets/app-icon.svg - assets/tray_icon.png + - assets/tray_icon.ico # Windows 托盘专用(Win32 只认 .ico) # ── 字体(本地打包,全平台离线)── # 拉丁全量(Sora/Manrope/JetBrains Mono)+ Noto Sans SC 子集(GB2312 6763 字,单 Regular diff --git a/client/windows/installer/pangolin.iss b/client/windows/installer/pangolin.iss index 72d5015..93df1d2 100644 --- a/client/windows/installer/pangolin.iss +++ b/client/windows/installer/pangolin.iss @@ -3,7 +3,7 @@ ; 前置: 先在 client/ 跑 `flutter build windows`(Release),产物在 ; ..\..\build\windows\x64\runner\Release #define MyAppName "穿山甲 Pangolin" -#define MyAppVersion "1.0.0" +#define MyAppVersion "1.0.1" #define MyAppPublisher "Pangolin" #define MyAppExeName "pangolin_vpn.exe" #define BuildDir "..\..\build\windows\x64\runner\Release" diff --git a/client/windows/runner/Runner.rc b/client/windows/runner/Runner.rc index 89e9401..e1b3e72 100644 --- a/client/windows/runner/Runner.rc +++ b/client/windows/runner/Runner.rc @@ -90,12 +90,12 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "com.pangolin" "\0" - VALUE "FileDescription", "pangolin_vpn" "\0" + VALUE "FileDescription", "Pangolin" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" - VALUE "InternalName", "pangolin_vpn" "\0" + VALUE "InternalName", "Pangolin" "\0" VALUE "LegalCopyright", "Copyright (C) 2026 com.pangolin. All rights reserved." "\0" VALUE "OriginalFilename", "pangolin_vpn.exe" "\0" - VALUE "ProductName", "pangolin_vpn" "\0" + VALUE "ProductName", "Pangolin" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" END END diff --git a/client/windows/runner/main.cpp b/client/windows/runner/main.cpp index 45dd14e..ffc6f9c 100644 --- a/client/windows/runner/main.cpp +++ b/client/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.Create(L"pangolin_vpn", origin, size)) { + if (!window.Create(L"Pangolin", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/client/windows/runner/resources/app_icon.ico b/client/windows/runner/resources/app_icon.ico index c04e20caf6370ebb9253ad831cc31de4a9c965f6..c1febf41fa9b0c8143a6c9c67fc953b38239934a 100644 GIT binary patch literal 34787 zcmagEQwji|0P$~p0Q|>a0{{RZUr7-`758i(C0U7NMHJrKQ*1Mw92iEz7^yHVVRa&SftqejGV@-V{^H^q|-R{?$m{(^h(N230 z@7Els-S-<_Ab?zW9A3@5SX->ZoLCKL0sS0({}dFqM8`&qEGuxZJU%4)T0G8NHBSwR zvtbT_>M5Ot5JhB4hJn%9+(jAhDAY?w!yFVLkN%50SoKw@2!{*_@LJd5>yqJmfaEGD zR3IU#dMAA%iJF1l2Kl;pO%FJKS4ok;@DSoqVj#g_X5I84BZ1N;38^Uil|T&p*u93_ zL*-9+N>K#L;9yGnQ1uPZj|LAvcqJEDis-(<;UK~I3IQtIWDp*JYi_bAXz7ETkx_4Q zu35O?CM;T=9tj)s;k6uU|G)b5CLJNEiddVSUWjw3^%X_X+VHtz4_0V;xv&L)-oPq| zC31v(thg<+v>1QifeSlB`=XX5J0Maf3_f>;ButzrzSH5PGGB25RiIKvJd#aI6Kr+@ zamncnFOHGFvb~`j!3N>I-h|k*91(>+V40Y(v+S>4B-*{5Zoyo0I#4WIkq)1?F9k&% zEPH@Eg7IJ2?z!>40RVtN{tvb#YC6`*qA0v>roG=*UE4Om5UsN62qQ?OSTUIgz~&2N zmWGRD;q-|T-ix8Z=sxxG=0_pwKJ(yF@GO=xC@O{|QY?y4vH)3zLc@bIvRyN$gKm=PjYcT_KnFy|bwPI-nW&1|feA9cv#0wfoofEwJt%`h?K8%2xzwaA&A<|>>+Y`=7dL(psl#*d;FVj`ywW- z;h4e$*K08X>gj+k8>9MrTS=l9D0JouSeJsr^!THvle)0Sah2R`MuO^k4_`5B_OtB` z(ZzgjXd74Zxzqs=17ZYedcd^xc>Hg0gLdq6=<+$7K<{6k%co5Zh7cxdXUwm60%?Kk z_P55nATks6tI|4(shn05);YtC$Hkf>v(uk{gxJJiGBnwp3+e{BBp5=~{9>@@_Y0=|FXAN0+P+Niq>h zw7Ne&-EPIXobu+7%v34aW862nemA{kIlfpOz?4t@1Uq|R&G>jU+NR!uf*Zh4Lf{Lm8 zTzC=YUHMewN%IQ&EH4W=Pj#?Yx0260il^o2@$dm*MgUs-5LUV` z88Q?5i|P43>0yan$6GqgQb&+z2`GKgRHZ^evvo-8k`$YWw#`#*VbS*%DD8beFEh${IF-EtPj!x`C47pd~TnG__Fs)dcY1RzweAG{0ap0sK{zV(wNrVS$ zdmaOJ5rHVC+Spl<=C2IyD)g?Xe7)l3@|9`tL%Z1*>)61y{7KI+ORss}zC#P$JbdAT z8$0H}ecdg)uhf3PdDQ(sEC|6rJ;8r1h?A%16953{*Z(X?kGh35sw&FQ4b$UJcS$n= zXu(yK0wDqfLAyVKsBocT5TPJTB7oRCD46V9!Ovg)=mKNQ}5H<#~h~{27omNw_114L$MZfV>W_b%{E$rcee)Cw~E&udb+N?ozvrvAw$iBdYWK$P<8@_ZM8#tW zMzS&%^JePzJfTtUz|92Z3x!GbD6{H~#;p45LDw30_eSbtxLHk>>##^>u~*Jc^=7uw zVPYk7qeelxY{u)F+m}WgdO7)VcW1xp6yhac3`e+i8|gk349x%ryaXoXU>Ac;DT{{<+mke5tI$cOV7 zPsIzNyYm*S%>jVXgsD;k6^Qc@!X6T5I{!S&PU5&bqZW1NOnyy)aHWod0U*_FU*b1IgO!cr4?!QR)V;(RvMqXNxJ%1 z42;up6D`6bNR?Ub&`1lX&c7MFepui;dI2jRT;t|Ap^hJuR*iEUA^z?Ht1H+eR*|Hq z3I=dLBc{o)*kP1YJ5769$N5A3p#>byvtg@E@MLs4pl#xI!2x-zn)AnZ6UQmCFVcs4PogMewZq`D6FibvHs5tg90BpR zQHYdw(;_8-Vix}w*6h;q0aIYbA%G!E>^+?_{rv+A8|naXr0+g0$DGdrBSoI3fv$|I zd??$6It{4?cFf-Wk?ZT;h&5Nc3*Gn9182K)hc24R92{I`fXJv{2c8J&(ip#KQd?w-__&6mAftIp~ z3(ofkj_FixC}I==%m(5+8a5%?{oQwAK(L-Zw=Ya#W9f>CvY2ui^0*B!TTlXhaORZP zV!}jurKVLfLA!|2o)9V}e)HA98L-=5u|KI5v$d=EQqDBFb=oys!Z%A=R0MUZIsjQ3 z1qFSh^X4hr|Gb;|^N~M_`f;XwsJx2Jenm2&rYYo+s3H>1THPJhCuFQ~{OvN)O138g zH%3Lw4D?XfLC>B$`06NHk$zml{4Z35gA}GwBu(cr8U`(ik<=wug~1BM=qR<()3sn5 z?jpo!yPC$3cA&NDXgaMy>tyKn;rk)Ehs@Ppw8wh3(zI<5 z#bK8?4SU7+5XKzh%MuNC`8hQE->bu?fOdPEncn6)vk)o#hhl_8W;wg{84-4vMNuxu zYzBy^{!MekW*u?^mi-&pm*gzBo6}nJZekOHL-5(A^XzEK zD<9ZtvQV%wvF~_{+(+4>1%;&Ad;RH2K9pc)^)Yd>89jeA36Cq0uVv}!-k$k4g{yI) zg0*_OykD*%r*!jBTgcejx}HP}z!*j~LK}Su6Mu@6joGI5c*rdaSg-M9I%fwn=xzA1 z3{CgLbmn;f7;0OW*426gntVuZ!1SS?el4c?_!aYNA)uvwbURDJ$mz{5r=lh2^a z?R_w31ssDcrka*g5#Di;$;ny~Ke#{;(bGHyd?&~uGCFjfFlWC+sB%rzZ&`Gh&)QB; zrThck>u)Yg1J5B(gx=Rywip2Hg_NeLvjg?D|hzVOjDDv4MgARIvEAvPq zPSAj}36_=uhXvc^UVg|MSy=kyjwpq_4w$yt5YyJbg zvGRIcVMCX`AVT*?;uAu0?Fgk=Ek&4OSTf5JuEu04o8K zUvkZ$$Fmxf+@yD*2$S;{{!)Xa54eOP3hEUa3Y!tuguH0E*Ik{XwmV-yY|Q0>wh{GI z3u4ii-JYegvZTO`PYbWdW!Z0PsisnT99hU{H)sW^8x4|Hf|c_is5txBoC%kxU)$_^ zQ3Y(|}f-HW%4n^-$=v!@QH41T6c&#``l0 zw8Lp##0^NdP)aE>wB>RJoOBXf%BbB_7{lWNi`^s7TkEf*z;yKCJbUei=H#F&oKyXo z?5|eSwQM=`!05aCG%w!?2^H?*7RXotX$*@QsF&0mJ6n$$fGI+52P(jK_1@I_d$U!Z z%uwX;3`3m?TJ{Vyt&z$UXumX0o#DT~bUGkSy4;h!@20O+sZaGASY6a1i$@^ZZc*SWj;bUZliqm1 zD)I#+>Aq^GaQqn?NT)o;(EdrsVz%9BQ*5)t4u(3rky&gHdKS>2 zG&$+jjRO>^csi&sn&cwJ_iTRTGverVLXNem6Ed8KAi=(L*n6dR*j+@|7cL zhRbC@4Xx1*nA@pX^w@RLA4cMMAJA@hzn~DC@rDsKA}31KD}Ix+=-S`)QgqwHuf&9* zJm7@Ol+WuANfM{<*C%ac<)x1b@~`#NWP1PDI48*QJVzT`^zEfwC2Xt$!ZW%my@mhQ6AjH! z^#u6>GNUNGF5RiQu&a=m)Z;Tqi)RHhQ>t8L3h?@PCk#o3YC;LK&_0F*n@+xP{oTzL zyZcDoU2iJe$&?brbgVpNi>BmB50EKVjfie})3)0?7Rx#Fh|{*v8dvj`jPTBd(I zT6QDuPPcI!{G-_NTkScM8O^R0y3|N+iv8ML!kgwG=i}UmOc|UNp01X4sQ&r#J`vFh z{zsR&S4ypVJtOdx_ols&&onFbE<_s9;j)JInXs5dCYbg*(sNL&;lwzy9-N;Qz$^u! zj>mWIdR?)X&o%=&DHdFQe6I}5Qgvx;pO%uk^1;|~6uC8mZI%11czBSsP8}bXu_`x( z4Y{F=E zAaygnja5aFp^5jSL6DtF5lV-M1YGETj=tcTeVnpoH?S|pW2e?~m;2f#MI_Yzf-_vI za*Cvrj{P6boxnf6z<-^)N(+abe@Enb|8wq+wY}_7moa~Hnz~*SvdAIpFapMj0|UY8 zBMm|I6e_qZ>06Y>v}$Z{TUIbz8lKjh7{TGYx!A(@C{UTHt@|c*)Cz3;7V#QBseCkRRd%zfX_snpiM6= zQxtWG7q{frBajV>VRTWz^-kwNbNcc9{p{=U_Qzz^n}*LyV(n#GodJpIU!r?Z2pCsF{&;`MjKPgk{uY#~Bxtkg!b!1niO1mrI!0x09a zYTQtM0mFVstcdGbk=ca=logcuI~^-Mokg9$m1dNxxxJM^bcgmGI?I;<@0UUAXd8DzbqF^3&ydq00xMto$!jjSZzEs}Alk zRs6FE6}8;g$^UHhQt=J4m5SA$pD$E%P{08qC4712B2cnxWdZwX9N}p1cP`onJUaT zsGC@zk}fb=585z9FEQzS%XjN&8(SDa9fJS4&RSM~n~Mu!cW_Zkprei*o05RU67|ON zeT)>KZcT_8;Gaiavo9gf{B38bNjV21HX+3H1&m_Mz{aI|Zms-eXy!z43yt|nUb&?E zdnni@>Yts(z&WxCC}Qp;B-cjZ4b^dcCLG{OvcmQUnWHpyqCYGMViYj!DFR;Ka95j8 za2Kn!0+lt0YSr;tym-Qo-X-cM6wRyX$ShY6++~-C9T$@hd!<~A`IbnbvR!b%V|nn* z*{?09q%VFU@@YS~dNsZ|v`6k>lnpfMfMcF91j!266Ab&#twWKh`4^d+4i_QnX7ovn zHj&`#8$)$#1jPflZnav`aeCfJi%<=yh#^yd4mD2Cqa@KwfZ~_-8=$l+k5c5@*b2>u zIkJ5&y^r8)o+cS;-nszx1RtT2_kUgAn(+rFsfSC=P6i;vyVY85XwmQNvt)ohi6NAn z(-M8wTb3}G?hUhD9`W^$Q3a^S;_gNh;z(i4R|Vf+>B6?xBR9~|2$J<+%qOwN*p>n6 z-~#ns`*WkSTST=KuRA5$+Vbt!Frqsi)L?SFBiM=RIz3d7N!f`=<4K!Wd_r-nbj8Z^ z)9aQW-%lhI9;^-kaSWQSm++zo$)-+r7AC26TxRMR97p91f{QZpQIEWDle5`OYKapk zJ_m@UqvKU;)i6E}yBzkKV$RlH`Q`HP)H%2iGgu((ar;Z|VB2G3RJ@?U z^1glk-1RSEI4#p-@PKn-1&uB2d=jMGo8hfbfC%T|crf;p3t^ggVD`g^JB&WR3Utgi zbos}rd#P}QK|=$wuR~g7;&@QnnPpA+4!`(i+1iOUJ5!A6dT~?D_6=fdbm#=)Wc7{r zx-CgkjG2;35?`WKoPe!GxJpn*OE_R66Wj3|YiFRtgXKEVO_J+HZsXI1rRb#}Lh&Z! zbeoEig7D=WMK#~92fTdb$cUt8F3SH&ThDa09#_CXJ)IkDf79VH0Gd2J5pm1qdGu$w zSgkn<8dY^gDi~Bsj^={)FgZ3a_rbU6;xj4~k%~Zp7h2CyX1MxXC9qQvb)D@U9MyFL zzhLi%y^c@8&0!3eVJ!Bc!U<+6aTldL{`>O@$#S~}#hzk(tdW3WNIY6tZAlcWq8EIC zXyl~UqwQSwmx@%&)q13LM84pDDJDD>PH?}TD)vZrlig^wOL`q^S^~x7a8_7wgrZmr zd!g5h+qLJF3d?d=`275oV0qEsS({l%w1fhW5AFDLw*M~b@a^l_k0@DhSmvIhP#vrp z^GLV^wHP%3F@nhNjzOm5l#(Rtg>ZRi8ej;N6apP?eBcar3D;Zy#f!aqFclro$Rr!D z5BlF&M~~S2nqw;nxC|igWzoYwacactTmJX#yyLd3tzO)gd0rs6UY825FG!{_4Ff~- zorgw$>wJ*8)#-#Jmr2Mpc)%MQ@u&!gJXy>DZ|R7{A7|BAtl#5N1^Cb@F^9$J%4W zNdTnN%}9Mk6WsHg0G*az)BtG@hY(c0rQPer>U!`*9HnplAlxLKFWrO5wX)meWD+Y3 z2J?OW>bK)a)Z0OeUw*MA6MxnG-9nf|3u}X_@!;pGqA5Rjfc0<6rUc-?X>#D7mruYV zGX1mRC8&pa()!5S$R*!+lGllc5NB;<`Pc)HGNE49oEaXx ziibb7O$O)>V4i}BlV>*4c>||Y=nr3>N(|}is`Fp*fU?8kqxSkKyelDyha*6z0OJ#w!$!YZ(NdiVF)x^`jqlhWOf02A_^3ip*X zH#cBvuz8V$E9l!FEioioaRdxTB$8t|xgXaDR`vqOnU?BZV4)_d6WI0b!S)E(jnW=@ zM-+bjjlZS+MtlViRldq0IOfDwLx?5dc^=6 zQy>XZsD&$6mKBy8k_2J!I>BA+_~mHZgjo^e6q1MAq48^j)OC56P=ti8nIOe@AyQ(d z6AEG89kqd9-0vW}HMSr?R(|SZQkCgNEiRZfATc?&XAuG2b*MZ&7GzSA-Gl{f)%lg^XSxiV#Vbss!g^B zK%psz>d{>*)q9l*ff#_rkYw7}_b-8ZMsFef!{N|%A`2Bo@7?*FNWnq>fF;^l6f==* zwW-s^#Zv0H(ENyuv-X2HZNGL18m8eR@3^=(#hHN!@z@77v$m%OCld_f@(DH5Cc z(y)743nd?bU>V|UhFwR~Ay(~7Ap|O#t@B0~tF+d1k9$LL+By%{+j=UL0pLTjq_edN zb*G*UMa`Zwd*U(llvU771s=2)8K?Ybqbc6@X(jRmUom4xnK1}pIZKPcEk7~UGAdi% zDH8)+FUAlEQZrn2Lb}UABs6^dnKO|iz zHZsb=W*4Iek%YfG#BW3T4@fUJB2!PU{_lhT7KOPbEUI(ZXAFo{ZF8X(0bsaB-y?9G zGRZj53l>t@I@D9OzMh{Hld`1-(x75FJK>Y5@TAnH>eJp|#GP*Lb5TsC#il^*vxT+e zzr~PjvQOX!)zRuSNrMi$lEpb{lpvIZ<`B=v!r09t)2`YOUETX5uzD7RmJc+NaT8sF zv^(hV_*vMb)lgB8U2QfZoN;a&wwZW;3x$w;R3NYojH~VOUR$S!4;^O*WAfHpeOb_$ zV9hyvR)O{q#5P^=NT*rvIo#++3f=#VqA!=9+NHNgw@$T?+h{`=JfkY#xutD@B2HP# zcTCy+X}2W{$kS04CSeeczS~+hL(O0`GRZYjX)D3G;C@c9aoV7S$Wkl2wzcQlit>Az zEJgc}ie@~H}k>vKUAiC}qB!@6BXeLU7xH-+{`85}AP=hldpb3un=eQ1H zZE2!+Y)q~zQs(vbde#z-_z*6IlPuExxkavwy4`{w7Lw!1Ar`x(? z7#Y~oDGJ-+$+_-6H#;zkgVuat*E+Y76@ECeP^Y}p4ML{TM2ITuvI+I0A9PsuB^*g? zuK974o*AtfAe+CLQwbk}ZKuFvH+LfJ@imxzgQ9RsRZ1@?7^99Um=9lkd>O;vKnxEJ z6cB>CLPTg$GQ=!?+=%(DJidPH(CD1{1+?mjsbRUe_*dBU|642K|4;4z-?(mw&tM7w z0Jradaox2Kq%+QP#*Leus!N;edSguYB=$}NU=ZV|1_z{mtMMQ~7GNMSA>2gNKEeai ziOh}!A2WFprY@65015ImLMuYOBmi&(p|C(KB*z-Yp{y=LDth2Fo# za-xZL)pFv;Aq(xRl1o?b@6Trs>Aa*l?7f_31EZg2$8}$;(|Mr&wSW`Vfn{xKy6L7T zRWJrFP;teVd%SvCH4ztId*;6IGMr zScIpRSYc3&6O33KEd4{+F{mIBQ!US0A;fVWE)bc_hp?AJ=V{(!k*<#`5Qac(o&_8 zX_u}Up>5FojUlyPzb|c(L;s|rGK{W{S+B*m0@8*cG#2$S#Iy=q)c_R82&ZcTBEvFz zr4?l_uJd~ywp}lS*&qQpa*R)SU1vFg!%WQikPz!{;k9U@u47qOE?V}0=d(5gWcyRf zE<(gOoU)6{uh8|}r&-B=WanICn32x%&u4q^QMGmKaDC z5XF9{Q2&0@aV1%NSqIB}r+IC*- zFZyX$&12&zSbYSCifsW44z#r7p8E$rDtk?|GI>`L_>~7*B zXi-oDb3lz`p8422@wY%3u@38<0ZM#%_asN!khMashe3?uPH|Ox3UpK0`S++CW*3$| zVTCURCY%pDJ2L|pmK#o<_piV?xaT&jgaCwOHd5O#ql0YrqjpJ2yvbDluGd~BU@W04 zRw%|92NmPz(i!o*t$BHJWg;7y?oXawE)8`^ym~?UT%6 zu}gIL%6cjj1)-7ADehFKOhG>e}$%(n`WFReu+Mn zWZlNie-2j-;8M=>&F_+dz^}kkC!8#=UrkSfn4jRI?k~#+JWsC<@*X*um!p71HZw_~ z&ja9}mu;N-(veY%C*=0-GWGWliPUdjV>nqiVJvnM1RoZdI~SbaJU2r}x8`{qC6^kYLAy`Xa@Q*h)TD z<>9Q?nbl$h$(iSu8efg71y8gM4)P5M)HtGab_n3PK7=5%KM`My$_bq2993_vL|WP* z#Mn~~`q$Lu71j2vp{T)1H%gy7o+IA9BU#d?T_%95kOFleGZISAi~h(q{*5+A(HL{-%0uW0VMKFu#AP-J?M6~A``j-hd#T<_EaR0qzz*%csKll_7$+7kwaDv~h4OJ+VXR(ng-qV1Ax@5j7v#7lWZ%4< zIM;Mg_xN9VzO3Q7!kz|_;J|UQoENGD40Yy5Wc=@u)CpJ-}nef zZ-{C0M)f-u+Q|ZurgG1sdDZx(}O!rbt9<>rQio}au%sBtEb>%F&NAFwYC#d zob4xcG$5z}80Puv$1o6e4^|MQv+6-2b&0{{YRs*(Wgci`IBwb%t`{Fl>6VY{scOU~B5H)s$?WfGbv z)K#n3*~bbiGC-Wn<<)~lyKjggy6^6)+>ri;noEU_6BCu|jbYOOzvw)fyH0cAchGS< z8li#UC_G9 z4Uz>oF)Y#ruRT$uY<)v7bbW2|03Xua=VG9S4L@zB<9?_YM0-?7BcorMnvk@P?d3 zFTc#Q;mHC?P_i|GI|OyTu5%d1Y;4rY_iPY;dV>F(@+&?{m}&L%_HR5deV*ypN!d?I z7K;VUy*(^Y2e89WA-ID3{a5Ln*DM<3ed#ZqFpYPj*PDcWQ)uky*&O|F!_4jexcG5x z8hk+HE^p*CAu*%*0}US^Bw|LY{H{CNSX=L00$^L_*g4$|P-3V5_%x{SI6iZXEC^>u zan6+l?ptNcqo8E1C{qU(h22Rw~RQIo({s8X}rO=Ro zAVEA_ovX9qaQ6eTxenx{-?_a$e3EdWDB|qC@Wt9{O>KnD%J0Tyb42@_5S^^ulul2~ zD#Hs_e~2|gO8AZ~0}R$HdbO@@-FwoW^Cv67la32TS|@4#&bb+|tuK)eVey=pC(AzFLop$Ne%_*=s2n zCV|_5F&N&UD>^UJ%CNMAC!J%see2XWI(AR37$2N@;%;li%Ktv$T*Rq3GKGI)S;_}K zA@8OQG4Re@SWP?OfL4EuZXG!)G{GLl^r3PibtiC@AcZ1lGA zJre&_u^qcxUp4xYeRa2MbBenxMo?;dtNp!|{Wq6b8;>}jO!FCsS$vt!W4@!U@+3`6K-Xr;bPlP1SaMQkzw7Q*l|H#(ekVFoO-d4{ za+=)rLoTXqXWTzxfo*kR-ustK&dKI@hIFUupoM1M$_`=AR{MZ(Ui{1kN(6hU^T0%< z|KZOq5H|A#OhVh4yFQ6fdn|^z$Y2VZ$UN`wsxw@znp(HRWcr4ZdHXCW=dH&UZ>t`< zkAyAftdFY0ZfVc+)ajyx@iv**YO00Kj~b04D~kDtOH5)jdV&2Arvzqana#P?10r(% z7S97U;?PpXR<9K|0990c2E?G!KPx=H^ARd8Z%w>cQwqaE8~xyQ}noFqN*p z!*Et^DPaO~cxF@X3nuEH zu&3UfsV~@MTyDv15VVl%v#WW-FKPJF93|W9s((!ZCAgLtn2jmlomHn^|X59n<84~-Ey zSIH{juLe@p^Td3X4YJui$VzwYxoIANgZuYotr~6?ZtvCq5T4=566pSXpng;z?=AVf zCqI;kRD zsm(9WllP@M>tdmhDipdbTcdmA=%Jej1b^RDZi#^RC;2l~h6c=3e3&1A<#u+xmL?EWGN_Jz)en3v#ek%r0gyjRI@98Nz}x)9E5 z_~0ZYi6{8%l+Th%Bl|!kvU_qg9{Xg!88g2U$b1~EcJiZUHFu`V7N1+@+%*L8G_40a z#syT#4voRFx=2%oK>qu{z_T5pw{c(A&W)k+UM=)lLA3LweG;*X5l4d=HnhL?@})*m zc-=qVd*E>GyT@4tHg^JlXpB1936BO8E=OCVMGU!pQlyae3xmHEAG)7gv%vG+|8u4D zYWDi-`Hr>(WjG#;`K8mhA=$f>KDQkh)AvIdh!X0mSmrQU2S@ho+-=A!rXwdyjC+Ni zpDieif&X;@&T-fFyFVU+#Z%510%BnIPM!XBOnO!1-178E7B;Zz8?TQPs^g6+4ys~*KxLY?0;Hq>)b5K9 zvp=5N=kPLD=-!dz3-HMdq|w(6^SRnH!JPB({gl7Mld0LY;|}+a(GWF*LS1-9`IVO) z?Lb%fbwiQ!tR0B)D&9Ar`kA#(jEU@yL}a==AVX);hj!(Qn=Kxh#>7VZ3CHO( zqlvS24?~!Ak|>?uZF{-e$I@y%;cGln|Ke^$&9QYK*0if$lj+ZCQ#ai9@OK_E|YLto`HR)_Q zJpUB!j`jBa06vewJv5wgpkO6oQgZll;b{46iSoRAmsLaBcf|&--G3-!FkV8-%A%Ob zekzU5xDd7VbmOR*(&1Q+^Bmv7O;6+CY_x-6=f0u;ag?u+R!~YP|2A@^rOwE4>H8wT zDJ&#HoH;nSDbl%*ETnoW|YYaF}}AOtJ^-`vyKDJjvOvNcSCOW zhI42#-M);GwcQcwuepsodobt|^3}m{c>TFIb>cSMZlJ6)9@14Wr75)5I?!E-ex#tmd^hT)e~)M zd_WSbdWLs(6f9kV99uvqYoqNIjqKu{^??&Cx^l@9?P^`%G#jk^z99R+;6Wwe)`FBN zatjjO*rnqW^yNne+J^qhy%9*7;6HA4_=d;&#_rM2>u2c%=1O^mR*nG0L%%W&Ib4mcB3}WCDRq6j)f%3=E4J+qXy`M!!yR( zOc+w1QprMCuMEK`4}HBY$`jKImuDrQB4OT;p;_hwy?FKN(@s6~2Ri?WZE3;M#^}$c z5X90m@S?B2UT7PZ0NbbycBz(CE`~-^%bv*3PCn)6n01Z$fVn(8Q;cnJXrl~aQR@!2 zx%n2&t)HT z8XUeawiO{7c=RPEK}qe-GsN-$SG`ajXbA9#pXIlv+$N_yl>I86jP}cY29tR{m2c_7 zES#a7osfm0iuf$mIYZr}ImmC0nFMMmC==R#U56ZCd9WH`BsaMq1t1 z)1w%wMDuSOaNPb9iC1YUOIYGO7Y63e8JFO9!mjqWd=BF}U^L}u-+I3sdLFQ4c*i{| z?^i{TqtCRH>1X;mH>1S@u|gN;4C*332x17Gfo=BQ*?C^ zH<+K;5F*cUXh~~Zh(FAZnSHuqouWv3Q`F!pLk%Gau?|1yyjH*6vGb+X_&hf=XZ9*+ z{juKp9t=Gta{ZDmI7T^RNio#?Zxfrw%KHjko40N zYsgA;_g#D3;^SKOA%lbZ-?!kv*CL|Fuc?pLQ}NA1q~ZMQpcEyg6~Y_Xwa$u0bD{_$ zcGv=F)yGpZ;JNw>uU2#Ti>L0T1^wSY`fP3eU>$s9LUS4ygjn^aDR--|#w2g$y!^(g zk@%UhT2$`AQx$uebMO13-iEwQ|H2n{(VO{hV#QO=-QOk{u z;5%n?(+kJCY-s{;(j%t(EEQGRPkIws?v)8F>q~E~-;doG9ra~;Y2pP^KZ1DOqw=8j zuE68QYnZ+c1-nZvg^_QmRHA(*g0#i{(ad_TvS|B(qds~JD~X*&^CWWx{q375HpDQJ zzH8I9DJ#ILT-;ROzY|s>!YdoPxsce+Xe3M~1^L3D8Do|V8#vp!&%gi_*zfrq!q&w8 z-CT@}{01qmL54vF-`4P3ybQhM^5=xK&JN`V?CH^i*QXfxD2?oglkB=Kmm*qJ{Qr!k zXwDx`NuA!b?`XvT(yG$HS9CddQC_XJ;-E%eJE5&VfTn( zutwfZ{RHZAG=CKQkP1~hkmP#6z1$l1p(q1rUm$+X&2mgOU(fCZ_b13=8uk1Z7tUe} zpCf;{7foBc@8!5n3Z;nkaQN|B&zh9q5i`5)O~4JkZ~PUkP!P}8VXIy?w+B!E=trC| zK?NImLM&f4&R50KzN0f2e-y&rA}%Gm_kgiX!>_);33d4%5y7G4dogn-J+ zj-J(uMxt0;qe3fxm-{-KsbjZqKZPl)-SZ5%F6Sw&b|LJ~@3~q|OVN`%w%B41=Qw2^ z3Z5m}=@f{puPw7Ht`2r^s}(50aPi;u7QR>8Fxez1Qp+D6l+|NJ0Jb+x5OR4rvOf+H zc1p(q^0?sJCMazLF;$k(XLV@yYgJ}VTFo!L2rmYHHFX{(M&k3fSq%sbhi<} z9l^l`V*~u}?5n<>>hV?-52n_zyzg0t;$*so_ip(QZEK_t!Y4;6nVq%#1D`rOM@$h$(t>1-T5w4qCts;Ep=Y2i2@T}bS;iZ`n!vLavm1X6B-3L)XB8OK%lQczJg@o1F8d>*j#b$cR3;vu+46T&@EV3>i+AEt>mQaz^alr7y;w|C zRPOg`Ee^lxueuXi7{R9&2>`kh-8FK=-FtzsXMd7cjzP&iE&DyQzE_ z02(zAtNZvN}+FR~|OuQZ0$2-T^hM4V<4i z$Z_Onz*J0OiB<%IAcvMzAm&JknI-~mmp75w-G!bZrc<;9tctfE0zFd{Pfwj(z8OE( zM*)s(NJL*H*8ZZxa?~5fbISdq5UMBY#yi!pR`D%dn_AoJX}qfKEs$gS0~RvKl6~8P zI^dav#5Q!8RecicFF~j7mzS>)3QRUtHAtvC z%fM&&Enag)wzzc6Xnl(1*w^fjBHr6rtt{3mG^XuHV4v&qTipiRlP~8vE6uc;PZjF3 z9iMUy;hETAr(D)!-i2)w8 z-kQ%c1M`VEgK&@ze-fL?-E488<_+I^F_N-z;%S8|BkZG}MKe(sldF6p!S?*iwEtqV z&D3Buxv)2uk#)@i9R1~|(#DzUZ#NjkRV-v;4f&AR6uvNN5SSJsP8I4_+gI$kgbvpj zpkYv73FN)7P#_%&f`dm?4r?XAjC_+IhZK1Vx} z${*DoGKaS0sSwk!CLxv8GlAELzLfHT>L*o>&IabM>WsJOv?jTn&QkRPZtU^1royr^09PtfKcivBh$0(Z}&xs#*EwhB?4{(8C zWB=YYsRg^umfemho6nPkH_>#=`u%x1KUO~Ct)LwV|HF_(uUGzDEY=-gCe(e96Fn(S z{uztP*+3sa^y32RfaT&pI?HV;`JV1G*lJ~{Ft+00)rUz;Fb$XHJVy809fn%B)+jn_ z-@HK)E0w@J5}59TdB3ly-1gpsQ@_5B)o{0N+10<%X9uv@uJQVs%$cm!pVsEz&T`+4 zWo@>Uid@lJE;p6H_Xv~_%PE|7v}BpvvZaPY%k zhPFL@mgdaA?bdsD9R5WK>Nlb|SqXw${R_Tg3_hxzTHO22@dq7ty)4GA+^*8@bbOHr zE9_b&f<-e0qAFIj3v}d1+|H9O_$G*E3!gu$l%y%fDYab`**tI+ch8|$#PWT7tc_K$MLPg;rn>r`fb6GUxfyK?{1 zzAZ%A{;0We{t2iXv4GOE#1hr#Ro1T)trK7wfo>E4zU;;XE)Kaxc!HFdl8A@}Va*4J zRWFGC+NfYS@jj2x=Ru5~U!@$4G(s(9cAw8KY-R&*`baXg!e;CN^LAljTc~HKL`$!v zBqZ`JO7Zh8><3g|Vkixu^E^+73Q|cd5_)x=?YkhIYs|<$%w!Yf=$d6lJ499p2OuMd z1KjsP4M_kirPpZ`rdM*H3aAvzG}PqiDNR99g1{jL4;S}}OeaeOn-g^~d-bIwHjmy> z9vE~lQgfhJF|?2sv9Rh|EB5W`nTcUna4OO1h**JtLb!7pnzDHp_S3ogYy+qn&ne$Q zLHla|)kf#sL6^7sO_7eYR748IgFxwI1K!vuv=l5V-dJT-F#29YIZ1Pl0tC#G)<3wk zXj`GuME$5FqCrMRengl~o}G?w7BGm0-n65SniR;cw)L-_mCy{_syCarhILZY7l?<8 zj6g^}Mv6e(*T(C3g+Xv4y0OT*DfCSfn3Taa+9xf5PmC)Ji^WjzhKn{wx)m-8is&%J z=Nw5wf2Y0reAUHKwh5ig8JtU#>R*$RE8Z*d(N_u{`K7VdjU4cT@005tc$uA~fUWoF ztHB4a%S!~%n&=J@2l|58d)Q0`^$U9ykXXizXdH)ew?D-De>u-hQ zYC{ynP%RzcLKq3KzO6ALuUP6NzXT==oTC#J%fINE`Zala6;;MZo0xk63+`XSJrA&a zW+P|75uFaMd~P9derN?;;M}b(ehpJl@>3d~lK#zt_ga#tI^46A$G!q&whEa1UQKUj zSv*Su@LknB*ANrSp9=0kM|~oztT{DzMyChbS@L%Q)pk;m=>R`yE!^Z{I{A~05k;s*>fBm?WC{%a)N@U`zrD6ml$Quvbv`yK; z>W^j$I1(`^S>$4E&;ax-LFkm$4w?giwOV)qzu;6=8PHACG4C+Sr>5>pAkh7mBE$fI zl|&jke)5_PNX1baMiYCX3aw3;Mw9~fJn=M1`rXa&M)_qI3kIj&q``BJoAFNHBQ=@x zULeE-tU{8LR`|nq8s^q~zEgUWwVaqBiJK^bN|i1#AJxIg`Id`=UM?e~nO|it&@fX| zp}Zt@17_MGLcIqLnK|~o&47fNm%%aFr-sfoD3Zgc^0mPz5Jc^fA zfGrHvctq-}ft)aA_O%SyrFnU(2k|elaha>EnhtPyxZhzlQHKBdv61QIFC`2R9%O_k zmz3shMZaPi0W9B{sH3JtwafBxx&IToH{CAjz^Z zu;le*81DMJ48c!0K$|SAHGx-o*$okjN%Dy3*!zEbs{K9~z8HRpbqGzehGE)3j7@!(FM5KQ3^s4tR99ix-hSU9tXFl0rf>rA*hO{9BYy+$1?!!Y8+P%5qqz zl#rWvgsX;U8T~{+Av8Q8*MI{j8 zjD!SRga=C!vN=F%#uj)Avq)Q7&nVlN3|p4;ZOGmwI41@WH+3PXA>%R>LX-8S{|t|oB&cc;*KT$+f=13pw=&1@v03Ob4V1RODx z@LAzR_3_Jwk6%Rs3sHkD5S+0DYf(H|1JFHLbpg`>t737?u1mmaO0h4EA!K}F=TKfW)2O+W#*E{OR+uPFe1YI=Ra|ZBwFMi+-={)a(Kei1-uLHHqxg`*P7vJw^LMnEYai)y%`!o0nQOh$@jld8? zLio}KF~uwY{#&pCO&;O_Qo%w9W3j|FGEeGAulaU=rg0B+yF+!=>Dp$>9)c%gK`?iH zi>$+y@WoSqD!OpuuyAfg?BG$mcimJMybwDhj~bR15#kTyU~qNRNtUkqj7|ExgXpo< z=2G)CwsM7%QSxX-0pRVXmLtA7b@0T}kzn3_3zs^oWP;DfXg^_KhOsYNgz=RR!#N+S z_UogVDJ3LXU9v!YDEMI=&Trcj8Vm!bpKykktal}Z>@VgjOy~YJPZ<$uSrZ*-FvPEj z_E)o9Y`l+0w4IU|wu7sXaXo0)gaCfqcC+e6fL|B~ChXq_RHTnT(t5pEodp}wD>)YP z5)fN6{XCp^!sICB-USc1AE$o{Og5^MTlIyK{3B13{bZ7Ad&z?KBv`12XHuUt@)UVagzY`ARW$ zTCbZ6NoKtsj?szl{k4aS{pl55^2;8smdyCFR3-yIFE*UI(Vm69XK`QxEj7mn3?`)# zo)kkpTDshY3&%ygo3r-EJ9{%={G(jK(&sMCV|EPr8;mE{~D0S0J&uC3gAxR z1y4(S97P^j+KMRfPwG3iM;h&lMR`@wkmxLGZ6-05<}#Xc_fE;wd!>TGP8vy*KE!zk z2ubARKV3K%Uo@ppP%2ysGnIi^HfDX0`gHt>JRLVFYC+7Wd)s+0=#{iBCOuyL5yihd zh!nw$gYCqxx3F_-VLN#;dQPJ6VzwT(LSb8T+{_DD2&?kq zHJ3@IbC!G(_i8u+5H<)Hd1$(8#Dzg+YnS9avnp2hF2xM)7F^r6fbXg2U(|)~uc1+Z~p281r>Zt)*=mGKS zXGe?TD!Y;(ys8%?rK4Q{8rH|p>6R(ujN1&m%7~~Lo;;)v&H^V!ci8Ecc#Prv2tI%Z z>nR#<^Ar?Hn_Y_blq$;=*0z$TAO5V6uD=Sq^;hTDDG6+g@!!-)%gfKf{aG6&&Zg@< zYv0BIi_G`RF;sp=-%DXkC}&HI?3ERHJk1x#B9V2H?@8nxJA>8NC$G)O9&u?kXMVCl z+M#xPj9i`@QB>U7Q+4Ab8@Hy_=P|KkFM4c7UB;aK&Jz#k`x`RZKdj&srYiNNCZSmU zUeJ|kD?Z!u9Koq?!po@e0iY^`u!0%{$39O|3ujF@kOoN#r-*ikbpF*o`1Dff?qTes z^a=Bf91n~dg0NT$u51js0Xa%sB8F6_zd84l;@I}ItQWun-=@tcYVs4s^%rTPx9*+Fcz(sR2nrQ zhNJj>+e#IZrfOPdFD)kVtKUD3{;lO_hEexOqobYP-zdH^FpSjdZK-g&p5Jqu4{&|| z2wPNyM+}^%Y`Mu_?dYMzqn!JM+1)NB2GO*yJ;2vPMaP{!s z5#59@WzWDceG#ZV5wgAD{BN$3Fd2_wwjLC|!I@W!i4Kk3zLSI;TC%HN@~g6I5xhR? zco*EuX_%bM8;4g*4E<9(2~1_2$VqgCS^0jvE_+O;SfZ#E>v$K4z)k6Js3$Yt5$uaW zXNIQfB8TYc%XMwS<4N@$jO?4ofLDVXd3XMJk`!}mlA7HAhi?rfsr!wcqkB<{&w4CQ z@sQu>v9=LF^qwm#jZfhc=M`b5k?&rCj^G-=D z1?$)Xky-lw&8~R^+3|R%B~u*3#bOZZbuBsd5I(Fw^(<9%p@vR$ey-y7F!6s19CXhh z%nDmLUz7Y;x1>hz>5RcMPZ<|(PhM#A`$4)8wl75}zu?`O;gl;KJ7wevL&b(ieW|q% ztS`r3@4-U4aRZzS?1-I+tN5tRdBsSOka}*5U&!(4CMpD=A1KpyAHfSW2WM`Z?8Xr5#kG5(c0<~Ow@MjGhrfKnV~Tu3DnbN3P!{dDcx*OY;Vs?w znpv-PlbsYZRQ*-=!(5!6Sx?$LRE=sh*S`sP@Rhq4p89#Dc;GgodBFSE;=TkaNTGdd z%2{q{lL4;}2X=nn_4d^d28AiI8VjFF1A*?y(9)OzD%y>yGk@0qBr zSDf$pVI@K#;_7v$9C)S67z{rdvkJ%UP5j~Cl-rB0iR6gM`?HgH#~UUd`(+bq_1*Md z#?}hlg>?-?zz@9s8S|B_7=p%x$m0 zKmt76l&U{?nf)qKyzis?C7Gd3aMdd|JPQ)tT&y8nT~7hNMCOf~&$A%SX}tSFTG*M{ zcvqC%fBJ*bJKy7y$iH;Il^7%LR6jDN9E^Md3gWm{{3bL!j~%!+-T!Nq@3P5TN1SC^ zV{!M*zM@c6vZ_!1H-J>RvG<&R+Rf^blg$jH8SA05b1)aKzc>h=5k9t1BCJyL55_M*9Oe)d=AX(fT^kCtZIG`kSpL-UW2o;bZxd-qq+S+H`>ECc}COG&KT5 zkQzr#mUxJ{FFDkL2!BZ85L%|Vlinfs$TU=1bTDpFs0Hoz*gHS^LEC znLC6))Evfx^30ZV$>^>WN~NEL`c4Nzft)u&4vaUXer;K-nO!6BF^|)Dt&fi)eG^3} z2Tu@HxlyM2A@AYQgAKReG`jZ#w(>U~uU8KBJ=|@Th;3pUa5L4Fv`G5Q zQ{PrU`%`QtRRlJDNaN;O4YsJvX@t6+fwGcV9h39U#_84)(pIX}D%q#*ohh%sLKY7t zhuo8GsN_)8CN`3_zdWzbUu7k9XuKvdA9nS9yOEC+^3WJ`um~KL>Mx6ay+T^G@ zb}62k6fvm%qx4|6+u37`pum9KYsD&*_cR&p8`|!PNU<=KuHYc5b2l|q&SmQ=8g~1# zE&t)o*)^{Yi5^yatBjPLv@K2;%{Nv!{4VS3$7)9+9BSD=)WRsAtD}zJAMLD{S_e8E zzbK3hezsU@VBo?!gfLa$Gv?C~Z;zbOB0Aqf7AatJ6leAedu!*N;XWCmq;4U59Evq1 zIj51Eq-tVvE&rjDoukMvA9{!~3Vk{yDHTQ7AXw2p*i(ZIW-d*{l+$7mjqeSpgGz6< zQDh6?KyVtI%KK8c!qB%*cd}3TzDoQEz7VBl!V4M%VFRE-pljp>qIcg7Aqpz)HsQW{ zxl&#(373=6b={yOEm>QJBx~^S$GjS6H2J6voZ_j?d?gAfCq>Y^F|R$}^@m2Z7P#jOCq^{9Qb)=#ghlbkRlO%vq6P*-kySh^jb9hruiJLI=A>p-l&q*Zg ziHyYN)_(SFqciArq65|!BGjoxK_v!lxIp>>J-6xK;@bq`#>M|@zw{~?q%`oTY@MDa zu`)`9H?cO!G#ijgXBOZ?f9jCT80aj(! z%_mRADWcDM%)EAO0f(zS3&Yr&(-&XO+0nj^s|_qbs;ifo&-m3yJe|U6^cTfC-q?SQ z^@WgF{}2z(i=;7$P_W?<^HOe6P$?y4#~yh`3&z9`8`GKp9ICGOTd$VV20ZxZR^>I5 z`Q>-VOwWEK6Ky5`URz||VpzkUqKLy`O|J`vz7IxTm0wH&_;^ zZKzcRc7r-$Lg(E`PVYA&y`m(^lge0NkLKB-nGop}ToEkY5bWRlzRU^xi=OjbnvaYK zF$LW_!6im*!OUX%hx%rLkT{*|MT(w$G^XF>Y%D9nTP}n(;67aX%Xphb@#X}a2A$sZ zSV!S;l+e(P=hx5si3PO z_P;Y(3_so8S1cV3L?d_;AGz|D2LIyG9M5bL`@s-B6Y5OE-@pEhzR+wb+pIqcoH#$e zrOz6+bNeFY)DA5NH2*Bda;x^e0hX?IVU1m}>N2iyrlrO-)=&ftQEV30x9Kj@j{ zJ*3UyIKNVcf`5yRd<670`nZro#SQdz7Vn{Mi2EZN&XH#Tt9u>A-TD-+p^cLbA=+NZ}@D&8+%uZZR80z65u<0;26vMU3iU=*$?B z%;D4Ah-u0wMU$e&lBEp`pmkt<-WN(EP^UGg2!nSfO$;;Zjlm>+e2{QG3@c@QtK$hS z0FRQ&rfJ1}hUTXPVcou-v|FZga!!}3tiwpK{z!4;v-!Ycsl&c>$cJP+G%U{Sz}xhM zexU1->K91T7Ml+EFFjzN^DeV=x7RJTmEic0uEAbMzZ9TIQ-d+t@c1ZWx>^xbvRL-b zDitEiHo`%Uw;m`zG7E=}{Eyth8;W!NCdfJz*b36J_6u!PPUT!tl+E&MR3C%d#!RqO;opwSJEk>=s8U;{UW@ zdUjGBYUbisD5_7ST~Nji%#_p+y-tBUHSZBRj}~M8cFh8gV7xXMKS+k;pp>o1S^1w9 zvx5D+qbDa(oAY4S9prW-9~}rLr0r@{mBSjh@_mTSW?-OF+{KS$Py{JJ8B5IQ@5XnS zAKn26o(A{3617hAW;6D~^*?NMZcsBhT=xsw(VOwx)7Wmr<3A=;mSIsF`iU)W<4D?r zTIDs$hP(}QyYp}OyjOUpYTdX3&U3tsi(YW35XHw&h%CM!hKotieBb~2t zgdm4d*7^9lO)bEPgflJ|hsX8yG_c|EX_iL}pz_`2nVt{jg>%x;byXc(2!1@~L#11D zrYNE$JxP3!wa&!i;0w&A zWS815IIf_*9`M#p$9S5PDl{DJW`Y;x6a=%I{d*9fNZjA>YM-+SOo#qj*+hS6q6nNs zF4>6j#yBaan_4#nEA@%-_pb;aUsHr^8uD$;Hs>6pz+Xxhh5J6kMRsLJrOg?xP>Q3Qrlz#-C7>#o2R>H(qJ;jHw9PeIoL$xnO}JRh0Q zbQLhd0TodoOnzb4Ewlk}3ew^$0p!PJYr%N}J<-vyjNR6{agau3X*He6K*7{=^0mp! zt(TQyMjXjB|ZhsX*^adi*k7jj9PuVUUkd7NVMDwVY&Fbks zuSd|Im8+~)6-*PQ(3tl(mN|z_$|r;;SHeUz4|l^E%#2!6)UQ-%VhjY!KM7E9%HTHV z0i4X?Rb=gxmKIoNR5If)pCL6}5~S*LD`3j0U>=1(su95)gk7uekVAI+CoAjY@(y(%tSnwG+py8c5zO9~|x0zO1 zfwCPk5d%Jyr}}5*&jf>$Z6HR3*kPmCa-FSe;fLpsl1+s_r~$9%|IpTs2WmI*y4xZv z&o?^q9sk_^mlpnUv+S2=w#86mWhV0`-CetUxyMy|dANxr2qwZ>4rv2wH;EkqUc{S(7Px#3j% z#z>|oMQKETQdN@PVdKlria&qwd3auzYj`U&?i;F^!~999dU~$KLo{f3@4>n2VSDt8 zjRtSFl7st`r*}}0T&a)~6lh&p58@l^srYTTF$Gb}qx>#6gt z$pkbzIN6g>Wydg15EGvMH~Q_xoQPCVk3@8GIJP+_Vkuv!F!)yRRQ!PV2shU%f^Ris zOWSk*D$R5@Iu80ESV)M*3eRS68$yu-V#4HgcEKSj+&*9{;lixijoD1yCtv3;w#?>N zE`rV3Llr?Oke#<3CRN?qK5ApES_h@*zEZf*kN26qQImOJELQ(o$zei0QSuUfqhrj? zJFD3f2autwuM>+55@*nCKyfGH#`e|9hQoV}h-YFpn2sU;LuhUm`{0rsoj7gjIQu=> z{sIN{vM@u4_E|LlgR26lrf~~_N2b5|gKP~Y?WVGpK&t5xb*IojL(%8K%9voAo#nxkpRI#XU!(s-a zO*P(Ru_sF~T>Ebn?qvLZI4}k5X~%QbVyyDIQr+UW$=DlXDhW%g1FD++|!Yap3szw=ta7 zm6*Qd?Dp$lO<;|5VLW>4e$ac_X8#^vPEiPz5gU@%#FknD>w3QFJFE9=+I=YAka%HP zB``tGM&tO`A7j6$nXT!6WUz}?`oAa{*Qkvcn}nR?1+D26{a3$_i40+5#i02$qxAlj z>VqTA2;npi3lPM$wpr>X(Vl!~3aewzap3By!oddXrgWBlpx>qoY%zwldUV8GRSTxzf&{tBwde<;1{de zF9e$<=80aked#CV^jn@4UbBW|e~n_dS@I5RO6_n94H{^TAAt87nMe<#XNXakEw+lS zYs(B2OzReRIbC9)@!SOv1)0g*^_MCLgG$!@yC-Q4tcMvsA4kBu?TMBaLOMQGeTohp z8vV*OZu8+3!4N(!Vw=DSbetQIthfD7115p0xn8P~kW^%?FLl@efiD06nr!1|N8Oza zTYa2RxY&LX>D{h69@hG3@Pm2*7+QK)?Gx#HWs245%$Um8dC|Z5z&GxwzCA@>cZPY zAQ9xDp(Gn9iv4Oeizbc0jpyt8?VaYFB0~5e8daN{WL`*TMQS2IVh0~7@^i$=6LWNc z>UBov>h|ygM%fAB*<_uGQn$uru5ETx_y1+@#(#-}m#%Bz- zW}sdPr^wl5+WWTPT!@nA=J<~_PE4H69{o-4Oiu2yOlNXCVBq-vg^Zo)s{Ul(+bt6` zcc)xy7PDK>pT}XbHI9-S_EwUO5lWYXEiQfrv#DtyL3g41bQVh#{RXM4A=}d;qD>1{w#QzCB^(;fzHK^R(q@|UW z9(&GpAZUu5d`~V5Z?7WjAJxh`2ua zOdvz5#0u;Tnk!*TsPN101dys4aR`4Z@`BXzWp${uSQ=2m^rEnAs^}fF;DdA!IZ4a8 zGlNd$q+F8eY#%)p?h$glE;|pq?7CGYT6X3`odTtL z&#UlPfMaNpH@0WU=`)DlIEdbzVQs9@0z2z!0S4{fO&iA8i@R(Ty-&QTI|MCydXFN|J@eZIme63S0+uL@JhmiAy%^&Q!6nio+cJFI`I8 zt`y4TTTYRslLF^EB70+p#D3<49v+WzoTqh6Hi3K#VQszaBZ|78=zjPu_FM3y6wpyR zkRRthbNRn4Tw|7HlQ3Pvr(c-dIhj>L)#i>?Uf2X%E0-ZrkXhW zSnvJgu>Vc=s8K{SvLkteU=zaT($@!5NgQ38eLBS`oY2O3h4&;dzOLXXQkdcrq#{j+_ zTj}BmWDH($SPJP#8gb!RUfHO^4lCQICA4=|#cV&^*KzpH9RlVOp$2DlzQAyPK7047 z@kQZf^&UI!$a+4cV$szaqV-#P6AUN>`o85GNU!CUas zz_XIA)Te4MDPQY2tFcRR3Qr?cNQL(ocuMNR`Ov_OzaVZFeLL%^mc1}`Ew&Pki4(`T z0Y)lpzYYb7Lj>$sQW~kPTjyZcX6*xuBHGT>vwa=^?Y?>Ay9`nH6G%_7Jg<{3HCX^5 z?N|7W`>fLmryF5+`4ZH67$nBtYgHXIeVKv*j;`m_Wuw(eUpf-Y5iK4h!Y%9U52bFq zO9o|rMl$dQQ}vC$KL9#|f#Nqttamex9MK2C>$O(%>fgoku5&J4vHxzqlb6-E0l${X zO^39cll$K(V%rKyD_#UffAO1+ZnQ%P-ukK+`0_NX+H4*j<(gbJ;qX>vi)tfotU8eA zEQO6V-d<$I$YHz2DHN8X_fx)~>Fvf4TIv(hG`#)5Xs&!d`t8`Vtgfl-y$#+^n>Hu`X-j~!T25PoXeEcorF{ShPNlA(7~EL#HK3!pEOl>R~eNUU!o9qfYz9P%y~cpadH$iBVKYP&>`pgNRuv6_y3NdQl+)#ygBCVwM=4NJliE+|Kg6;x zJPqTl7*x_3teO>+My}d&bHOZD_6IZlKS(sl_kkK1j>Q0251wz?fuf<πkt2$*7o ze=sdZ0DDu>8BqZ}TqtF^o8w6Xlw&VFg<`|gqM9j~8$?Lh2mb*+DF}sALKl%d6rR zAbGqzA0bK}Rs-m2ZUtZU=F+{`h16LVB&8^8qRU2FSy^SJRP)ofkU(>Q864P@548_@ zXFiwtMVVkIw<-lrKAu$l1N}Gvm+(F?`wZh{ zhk;rQCXC>vH-$u1EI&Qr7hj&Z3uQoBsjB@w83o#jeno3Utgngc@(;3n; z`voaN_EX?)ZcsQBk^U*u$4jWYG?1(*JlkVepZ09bVQhg?%RL* zp8x#Qxfo~C&c30SrAZ)PpsAQ6Tab}gQY^oxmj_K}W)I)XBs70@g08xb0i?ZMtEr0_ zPA$48t(MOq3MZD1^G|Wr%>6LHVspEH{q7Kz(O$+Pa?}jS`NbdxC52o#+W9|SgBPq2 zX4_zo%hK7!a74h$SR~&7@Bvw)WCq|_t{8?$09|pB%#rRs^wtLSe1xl(e7lF065#)om$vUmxD6D^m|htR!v_-Sg3j>-3w93f{hT(q%IBJo+Chx+tdwBlz=Ie!q(vP z|G&)`LO0ekduw|&J78|GPT8*!mj_nEpZQ6bAODM3u(>rcWeuNZkFCF0mXKeQ=kd9= zB=BJ-z8V&aU<3Q9$oKs}{)hcf2i^OVZJP9K0=5=al>lGd;svFGxD$v8;Duha0pzv+ zg*bt)b3Mq_1l5NO;A6ac+m6ReHvHI4jH8Wu3V`ZdOa%nyT51n^^$8KSSLO&;Ldh+5 z>=c(`QU~9@eU9s>8HaOL#d}yYKMx!O8ljVX!bfoBRFbeY(7Czz*-#@DvzkjjJUhG! zxlD6<8U5}sd_DZ!c$f=cvrV&u9u#6;UW<&Vsmj1WsY2sqhyMASMB0956^sp1cTM#X zIZ{eBANPTchLLCks%dygh$cQBG703E*gW<0q(RYcjDS4gJ*wleUXXpi!OE_Au2Km0 zhX@XbyEFe#3*{zjpI`;bE-r%DO1|Kgo=6?)5`i-c`X`J;;Q$n+gfuYvFvH%-KVIugw z36Hm{Wx2`Z%qPnjxzz=JX@p{m%E53k43SUIdUGuS2ixqmql$)3kkxA^Z~uXRi9_qn zv-+ViUcUg2*ST~Kjl=+awA(!9Cg_nQ0sy7>CEBMzKK!OG)g1dWf#hk{Uw8Wxw;{my z>)Rxwk7$Rp1#+vV)V!i%VpMTGz!PkZSu>aYUnDs?F8R9-?;JM7fP$~7-Z3^8@jneh zkdb}Po7qtbIZ_*Nqpc)9L_VKL z^iXfajJGQ@iJvEPGj95?;@@JPS}g4#KIA~Cr)~j>R<_rw5wm;^`<|wi;;LF?u3VdT zI{CqhP_b>kV{csgKMdaABwxeb9h_%8+4&K#kydYI7#J8xF(gMPwCXpJsM2lWNDELwF*_z&Kek`T6I1|w)(wTaIa3!$h>0Bc;VYI^>#9X!Q_Y^| zelzFf$jK`vZq(&rvL!oPGjStd^l)cmlz>K~N#)z8oz(uH!#{^Bc;@F<>e4Bu%e6@F zF-w)#pi_<}HMu$cp5mYr)x=g0`VMc4E^0O119$d(8-{jI9XFBlX`Vmzh;14l1vBf5 zVb%6Giq{*PxD*-4@$rsaG{-^#y%vI1}crnZP#V|{; zXIDL4C`(C?LquJFA~!nhrffRQG8h{M8JP@YqG~4I^mpQ&U7hdUAHyV8yG$-GR_#lh zU%6dM5uaWDwqBGyG8L@Vew9kPJF5LZ0bB*6`l%b7bD?f1T~N_L%>n2Ly&rilV(LcB zaz5aOe(kOEv9$kOmq**g(`|?68vOL65xUM_*O}HoVcRNSKtZ8{;`~Fprdy7)+lguC z-Sn>&n_J`Z%ZB5Q0zpH=+(nD5zkK$z$r^_j7-N-j+p#rD8d8yh3JUEM>1Ug|rUQq% zSkjsC#hQ1Q953^WGoAqC7yo|N#B)k?qsGu#znEp&8fYqKATK~ABRcyc6j~eO4~`u% z4Bc_~?x>*_Dg`(X8nGC$->{L6Ub-&R)*F3}?YC=KhUHzbl42c|Q%#3(2nH$-iIZkLBl zqcLGEvw7m0o1a{>{a7*ntwm14c}1WQ=(pCa-BugdXEY}4XG%@Oz!+i-QOw16C@2&g zILDfv0LV+oQwcjfBbUq%x!wTIo(6>i`${Mo}=m7cT7#Y5HBERk#>WXhO~~nCIy8~0M^o=W;@t~7r8s>IIq|V ze*ew?cyBQtkPH8QYtf<1=GO*r{O9W@UI|>g4H&y9q%(*mDT~qK9I&df5(FJ_N0hwn z5OB9%9{@8-ObrsYgXDh+nD(n19$)bI?PwrDNL5>%6RlMr(6U!`>MnF z6=fk(hrqHqZ4a;tu?i+q$VYJTzr!$JUS}E__Zky6mec#E#r%MWq@a2R%fXnW7!! zXf9#Db@9x>7j>rTVM7Dk;Sjf+odEn90QSe5=e@VAB_8N#1VYV5B48f^sTKTX#+j9N zg*Ag|&Q&&t86~FH6?X&)%K;1Z0uc2FTsgpk^jj2)23$T0O_k=OZfFcbhK4FX#4P8C z&R_v>_Ajm0eE#zb-l>xs@c6aWtTP!Og2*)42=m*kCiOE6>vBWWrrF#%hXET@V(Qqc z3@p+PXn!R_jv2>(rnqImm5up+V4!}dLf(LTtGry@8Fv8Z7y}I#B@AdWbc}BUh$U@2 ze!I@tTbARz777{9eEx4McDJ<91p$F%4BYr*Rntsj{r0j+rDmx;9vHijaeg-EFrG2! z%{i2X3{6Ani|Ur+>SFXq8!;)P6%<+rMq4AHV@fp>86M|Y(&3O4rSTg%hkZz>%rQ9z`f0CC)ut_4gs$ztF})xEAN*g)X}WHh^Z)<=07*qoM6N<$f?YLN ACIA2c literal 33772 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 From 5ea4e1ae0325fb416a217fbbfbb52371771cea4b Mon Sep 17 00:00:00 2001 From: wangjia <809946525@qq.com> Date: Mon, 22 Jun 2026 17:53:34 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(client/windows):=20=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E5=9B=BE=E6=A0=87=20+=20=E5=85=B3=E9=97=AD=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E4=B8=8D=E5=86=8D=E6=96=AD=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 关闭窗口断连接:onExitRequested 原先无条件 _teardownVpn 再退出;Windows 点 X 会触发该回调拆隧道,而 window_manager 的 preventClose 又把窗口仅隐藏到托盘 → 出现「一关就断网、进程还在」。改为 Windows 下点 X/Alt+F4 取消退出+隐藏, 保持隧道;真正退出只走托盘「退出」(onBeforeQuit 标记 _isQuitting 再拆隧道)。 macOS Cmd+Q 仍正常拆隧道退出。 - 任务栏图标没换:仅靠 WNDCLASS.hIcon(LoadIcon 单尺寸)任务栏可能拿不到正确 尺寸。窗口创建后用 LoadImage 按系统 SM_CXICON/SM_CXSMICON 各取一份, WM_SETICON 显式设 ICON_BIG(任务栏/Alt-Tab)+ ICON_SMALL(标题栏)。 - 版本 1.0.1 → 1.0.2。 Co-Authored-By: Claude Opus 4.8 --- client/lib/main.dart | 18 ++++++++++++++++-- client/pubspec.yaml | 2 +- client/windows/installer/pangolin.iss | 2 +- client/windows/runner/win32_window.cpp | 19 +++++++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/client/lib/main.dart b/client/lib/main.dart index 8a75226..55af956 100644 --- a/client/lib/main.dart +++ b/client/lib/main.dart @@ -46,17 +46,31 @@ class PangolinApp extends ConsumerStatefulWidget { class _PangolinAppState extends ConsumerState { AppLifecycleListener? _lifecycle; + // 是否正在「真退出」(托盘「退出」菜单触发)。区分:点关闭只隐藏到托盘、保持隧道。 + bool _isQuitting = false; @override void initState() { super.initState(); if (isDesktop) { - // 真退出(Cmd+Q / 托盘退出)前先停内核拆隧道,避免 sing-box 孤儿 + TUN 残留。 + // 关闭 / 退出请求的处理: + // - Windows:点 X / Alt+F4 会触发 onExitRequested,但桌面端要常驻托盘、隧道不断 + // → 取消退出并隐藏到托盘。真正退出只走托盘「退出」菜单(见 onBeforeQuit)。 + // (否则会出现:连接被拆、窗口却只是隐藏,即「关掉就断网但进程还在」。) + // - macOS:Cmd+Q 等真退出 → 先停内核拆隧道再退出(红叉关闭走 onWindowClose 隐藏)。 _lifecycle = AppLifecycleListener(onExitRequested: () async { + if (Platform.isWindows && !_isQuitting) { + await windowManager.hide(); + return ui.AppExitResponse.cancel; + } await _teardownVpn(); return ui.AppExitResponse.exit; }); - TrayService.instance.onBeforeQuit = _teardownVpn; + // 托盘「退出」前置钩子:标记真退出 + 停内核拆隧道(避免 sing-box 孤儿 + TUN 残留)。 + TrayService.instance.onBeforeQuit = () async { + _isQuitting = true; + await _teardownVpn(); + }; } } diff --git a/client/pubspec.yaml b/client/pubspec.yaml index e697407..9d57dbb 100644 --- a/client/pubspec.yaml +++ b/client/pubspec.yaml @@ -1,7 +1,7 @@ name: pangolin_vpn description: 穿山甲 · Pangolin — 极简、稳定、跨平台网络加速客户端。 publish_to: "none" -version: 1.0.1+2 +version: 1.0.2+3 environment: sdk: ^3.5.0 diff --git a/client/windows/installer/pangolin.iss b/client/windows/installer/pangolin.iss index 93df1d2..6dbdb72 100644 --- a/client/windows/installer/pangolin.iss +++ b/client/windows/installer/pangolin.iss @@ -3,7 +3,7 @@ ; 前置: 先在 client/ 跑 `flutter build windows`(Release),产物在 ; ..\..\build\windows\x64\runner\Release #define MyAppName "穿山甲 Pangolin" -#define MyAppVersion "1.0.1" +#define MyAppVersion "1.0.2" #define MyAppPublisher "Pangolin" #define MyAppExeName "pangolin_vpn.exe" #define BuildDir "..\..\build\windows\x64\runner\Release" diff --git a/client/windows/runner/win32_window.cpp b/client/windows/runner/win32_window.cpp index 60608d0..c37ab98 100644 --- a/client/windows/runner/win32_window.cpp +++ b/client/windows/runner/win32_window.cpp @@ -144,6 +144,25 @@ bool Win32Window::Create(const std::wstring& title, return false; } + // 显式给窗口设大/小两种图标:任务栏 / Alt-Tab 用 ICON_BIG(32px),标题栏用 + // ICON_SMALL(16px)。仅靠 WNDCLASS.hIcon(LoadIcon 取单一尺寸)时,任务栏可能 + // 拿不到正确尺寸而沿用旧/默认图标 —— 从多尺寸 app_icon.ico 按系统尺寸各取一份。 + HINSTANCE instance = GetModuleHandle(nullptr); + HANDLE big_icon = LoadImage(instance, MAKEINTRESOURCE(IDI_APP_ICON), IMAGE_ICON, + GetSystemMetrics(SM_CXICON), + GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR); + HANDLE small_icon = LoadImage(instance, MAKEINTRESOURCE(IDI_APP_ICON), IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR); + if (big_icon) { + SendMessage(window, WM_SETICON, ICON_BIG, + reinterpret_cast(big_icon)); + } + if (small_icon) { + SendMessage(window, WM_SETICON, ICON_SMALL, + reinterpret_cast(small_icon)); + } + UpdateTheme(window); return OnCreate();