From eb617051a38c9cfb949e6216aa7a98f837ffaa95 Mon Sep 17 00:00:00 2001 From: Daniel Ding Date: Mon, 13 Apr 2026 19:36:06 +0800 Subject: [PATCH] branding: add dashboard docs and serve OpenLAN logo asset --- README.cn.md | 4 + README.en.md | 4 + docs/README.md | 1 + docs/assets/openlan-logo-orbit-dark.png | Bin 0 -> 41147 bytes docs/assets/openlan-logo-orbit.svg | 17 +++ docs/dashboard.md | 155 ++++++++++++++++++++++++ pkg/public/favicon.ico | Bin 15086 -> 4286 bytes pkg/public/index.html | 4 +- pkg/public/openlan.png | Bin 8066 -> 149563 bytes pkg/switch/http.go | 3 +- 10 files changed, 185 insertions(+), 3 deletions(-) create mode 100644 docs/assets/openlan-logo-orbit-dark.png create mode 100644 docs/assets/openlan-logo-orbit.svg create mode 100644 docs/dashboard.md diff --git a/README.cn.md b/README.cn.md index 83551f2..c0e4173 100755 --- a/README.cn.md +++ b/README.cn.md @@ -1,5 +1,9 @@ 简体中文 | [English](./README.en.md) +

+ OpenLAN Logo +

+ [![Go Report Card](https://goreportcard.com/badge/github.com/luscis/openlan)](https://goreportcard.com/report/luscis/openlan) [![Codecov](https://codecov.io/gh/luscis/openlan/branch/master/graph/badge.svg)](https://codecov.io/gh/luscis/openlan) [![CodeQL](https://github.com/luscis/openlan/actions/workflows/codeql.yml/badge.svg)](https://github.com/luscis/openlan/actions/workflows/codeql.yml) diff --git a/README.en.md b/README.en.md index 5939b3e..555210d 100755 --- a/README.en.md +++ b/README.en.md @@ -1,5 +1,9 @@ English | [简体中文](./README.cn.md) +

+ OpenLAN Logo +

+ [![Go Report Card](https://goreportcard.com/badge/github.com/luscis/openlan)](https://goreportcard.com/report/luscis/openlan) [![Codecov](https://codecov.io/gh/luscis/openlan/branch/master/graph/badge.svg)](https://codecov.io/gh/luscis/openlan) [![CodeQL](https://github.com/luscis/openlan/actions/workflows/codeql.yml/badge.svg)](https://github.com/luscis/openlan/actions/workflows/codeql.yml) diff --git a/docs/README.md b/docs/README.md index f219e27..cbfffeb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,6 +2,7 @@ - 📦 [软件安装](install.md) - 🐳 [Docker 部署](docker.md) +- 🧭 [Dashboard 介绍](dashboard.md) - 🌿 [分支接入](central.md) - 🌐 [多区域互联](multiarea.md) - ⚖️ [ECMP 多路径](ecmp.md) diff --git a/docs/assets/openlan-logo-orbit-dark.png b/docs/assets/openlan-logo-orbit-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..be6ad414276a1aa48fcfa7f4fb112e452c5603d0 GIT binary patch literal 41147 zcmYIwWk6e7({4zEySqzqC{UniaCdhvP^>_a77Om~ZSf+--6h4{iaW*KirWq6ocFsw zLK2w0_UJRSX3ZvCRapidg#-lv0HDjsN~!|@K-fnh00{y1_SbXj4)zA;sxBiAC?6%; zgME>-(v^F!qy%7weMSPnh1vo@FC?%R3G4*`yvl|Hyn?;Mz5Fg4_`kmb0okwq|K}G% z)SJ3s000b-lN8hRggf*>_O_I&yO#5Ky?6X+W;8S1@(Mk~3`{f*Hy^Jh1;SneXZaqF z!LRmt0rv|?KBd=%a%473-fvSw5~dGsqL>?t=lmpHC^ z-G6_$OEo?gcH1{`D^b?Uptm-}dXpaw<|ixYE%2#rs2aHG=x7RVZuTlFDf!my)%|?z zNJ2#P!-hw`tBV$ooPyvvl!+iR--wsn6hs6k4UIu+G-Mwf8p`uNgZ<2Zc<^RsMN_RT zjT)3!U?O70JyEb#He!1_HJ1Mw{j%3DYs|WDUtf8fOdGJdK!+1PzFoGsd&yT%RH5W# zU%>Xq)xay1jJEwN_CKpr(SwSaS!`~r^J~wG@IU=k8;YJqIh#MYEa>Jia59HCO-bqN zetNhg+`A<-=6Z6PYYdl`k+E)y^n3rp90Z#a7cRC>qC}_cN8;>v+1FX00?sHSfEwl? zUAVLm^!lymvxhHV{#L!-o9N5>QMOpG(h?xb1&jjFLXqa+{H+vH$D6D(#C9@$5ZaD5 z-}X8Ol5g@VNNWQ?ll|J@c2u47fEu;UT0c{77> zLTaa@tMV;pj;;b>d>smy5ib{!Qcvc3=~_qsx?3Z}IWylNBG}^JOH~5^QRrjuEg?Jz+$X?Zgs0KYap%RAxVu_WcO>PmTejX77=rfUq7@Jj1BKgMmHnUu!^pku;MK_i!m&zKT3eV3NK;KGX@^ zq;vlPgir~sKCY|m@p(M@SKe8h|GT^?$PycD=#Oc9D{^<<;n#~KP3P4yUEz@g9AB7W zXL!mQukiIL#I_pSU#s!{N9UZt85zI?is)TDCX&=zji!;7t&e|V(l|B>*vW*_XU9vl zz~o_nw)Kxn_4+N>f0DlgRnne@$NC1fpXZOM$vIaojS#dh%%DK$=7^TR+-Ll~bn=-E zt8)_b)}#CHl2B@hA^fb#wN>+W7bR80qQm0Cyfz#dn#p0}A>3B=xy0d@^)KQV2Qmd6 zMnctCQYJh)F5PIMapZPpg7DcjC6VQA#|T|zV=<7L;s0146$dy5^7$OtX;Ppq6r0zp z1J;I~x1PO(ovs&)BdaR^A>*fnBSZDRUNqq|N1Ds8uU7?N)YebD7P)}ef1Pl_`Q~5W z;{<9;t&zoh?-GhW!cA-H=xKFJxHMt3)$D#lr1VWv_FNHMB? zSS;Ka$ofxQBDh7WO7D4`=KIk_o3q^Dl*D-#8NjvZU!=C9D38-kr>62w;D2oP(^Og= zxLYWDt>ttKtQ0?f8Da!f=|(x;^fv6dRGm{25ltC8v;XU#Fh)6F!42D{8eL*r#B>>2 z<5zcM14i#f|5m9iblP+>qxZRR{ug%$;I^NsLHVdlz8lvXC{f4E@^;tB@a${{cNot*5l^_7i= zArZd;dLL(TjNhI#N4@b<6VBYc}yYx3;2M>yNu5(EpuyQF~ady|HDXfI8Q{OvwoA>7Niea z0IbcOshUx1QNQ0Un1ucRiD(VNdcBt3M>#{nD*KHP(0NbONr`w{t+~Nt~0RtFVi&hyGn+?GuPI)SP`f87vzKJgsx`4aL3ZZ?krJ{0FB^ zLAA7}YhAH8+nVG*mJrsSLMh&;-|b_ieEtuOIf3(G(B+P{X!iCsp?oc!V!+{CQ{;+! zuOREKP#oKsQ+$8&Ek5K`nZu{f#nJ5YS9~ogO>yeeWaZ7muP_oQJM8jf@t+OcCg5k zCG=l(d?Ge-p7&CJpI8kXpP!cM%k*Tfc+v>Tbg~5frC#IsCgG~wnzWtiiHxt!q5L!3 ze}=sFr02f-fC9ziL?s+?wHs#0J1nRgw1h)MV(XWweDIG_faz8&Ie-Cni%JZjlpBl9 z-sh~s1q+UBGM$Cj-qJn2QZ^?kI+VE%u@7N)-}np)t67m@$|Vv6%puDLtE&TEa_6U~ z7IuYvq4rRigY!_u5h6`aq)Vy04yvlYPY9qcB4lO@=-TPVMYcE1Ks*e6idn*!_Oaj_S5^;`N{V4qB}ZL zzCOG8eK)yfdBG!6|2%Ehyvs2mWyc1CVw*kTP6MZo#MgdIVYlYeU`*gUcFeLbtA4+c zXP4|3Hep^O~c&y#F zXi(pZ_>Je9Vlmr(Ypd@!^p=NUI<>}7nFdzg^ecl*v2N~Io_{3#+4KPBy93%U+9)qJ zvod@l?Hs5+`$oH9eIlY)RUhojnuxwm-Xl9o3Y zbuhoo#)7kN%6b?OWP5X~QcmCw%zVB@v=QPJxV7^ggI&x(vv&E#cBtgwXLB*vPxZtV zxW+w1(d_|ICfQpWX)q z1%+}7hslc-BCsKKqERQMiX6*#&Q}&=IsVN?d@uImYxG zOnfd?J%^8ih=A61Fm*&r64zrGEv;a6g8wiTBv@ek(9%X59zgBq=Q>N7u--HK0+|dT ztj#`F(dSRa0AgwuT$tNfV!#d0r?pt;>ET1Z`MC*ZJ&uLYJdYyTNCMV<++=Pvm_#gt zhyP)n7-WiiI%IH?R(DE_58!ON)#=DgMmBi?<2x*{yb1JTh=6 zxc-FEnNmTL+Ka32(vg`gLk|Db-TQA{xXgfx_WE#Mdv7+^1lIu=CD>J^wY#2iPS1TY zU^IXmn1}@>i)j+Vrq={GwrrG3UY}mStOo?PPwF$58rzG@eTje^7QOmceE;oABK&T*1(V6BYFiSi~?WLa0<;yk^1?S zZNWjJ;*!H*7A}nh~eJS3E{#1YW` zkD3p$lSsyYgp=T3Y|TjtH~g6SI6_wZ+k3aE+g=ioD9q3=qm0X%G*t_BKYpT*Z+q5xtNA41NmW@z1n2s3}#Fjp=I1)W=c6{tfh9)?=)biGHfL<@a!IPCj?z9?Yv?wewrl zXu_LbNnJBW&_q9$R99f{g#X}q8X;|5Gz`D5KV6?Puay)BG!TCO+3SK01D;wORoZsAomNSKIS zf9dMt!m4Fr(j#6hd@Ijv^rbjXX#@j=cJrlPSb}YARcbxPD5d!1=H}+tvi~WTRMfJ6 zx&t;Vy%1^_k|owlUqW@X6ThVIn*oNUDjE!?DtUpGqt}FZ@hYurU#$@bS&DPl)T}i= z_ULV*&J@zQG?s)n^NK1PISEO3JvuO*ao#gDQiO!wG0_>H@|wN`&kfS>&yxJ_O_4Dq zC%c>dMrYK2oNDml6z|%B&KPVAkA`O}qe(itVkJ*w%j#NlHyx?JPr;#6!rCoFjD(0)^K{Q;r$Z=6Wcj=T~YG6;tO43r%wa^ zq!_4+N&N{pHg5br}D;8clqsgj*fCXJT3CF;+&bDDsc&RIm&AN547~hUwmbn)= zktZFpAq(-iTrd|^{xI~!K|_|x4yEY~iwno@*9LK3N0I}y0o8S{EM42MlMqXM{Iche zs=kfrT52rktck66p{gNC1p4%r17zri3yh&|@Gl;BS_P{`s^Q@(PB}Oj@k)FuR$T}l z<|h%ff4)uvA0mMw0%>}|VIc^WES#qJXSx{DU>4YA+#8Lhb^62KvC|>|+CIKj3z&Gx z^Su#%AJA_Sl|fNP{(Ku~&`8tD4ueCqzc_|yuma*WEffWkXuvmgfRNV?(LJ*0$&w#_ zWDVtDDZ%6$OE9f7;}0YE7dtc0`&D{~qNipHlO;F3rX+!=`<0Z~hIdx}5? zG$RAS2OKnDE2IJ7be$;;&j`=DvjDVD`fNZ|&gjZ<@p(y8>O-VT)Exb&^lzVE7N?jo zOrQb9u@kWP-ke@Um|zzTOQXO^U}HUE=H!~uLdgB!#BeeOQ=5GM4C}@9dy`gziNwf_(y2y)FUtIDpwg&6&O%EX9|uH;yxUcXxe!1=m3jLXimnj5#rMhq1r zJ=a8YI@5BZPcFnngi|Cw{(A1}z1L*8vV0@iG=QW1D}-ikfEE)Ec-HCXX$1x2c37k4 z9OvWLX{u_<`z$-~kfB>EOgClnO2U*$%B#;C7DXk}lb_rh!A!azIY7Q=7hmUS$#1TB z=jntfP+EkhAru}ThBydz%+zV^_B*4%%}+!|v6C7R>JrJWD9i{%e%DmxV92KpuwU|2 z#%}`$9R|B~3~dd&`YNXB5>t2w+wkM?)*ogpWFjVi4czm5y&skrBvhetcz6@NOs<%w zyu<{J2b`-w4NPT&h~ArnN`n9_0PPRatf}xN-IM1eeGbdi<(72@x;! zmKUI)Jx|R1P5eI4XY){~DpHU+#8OEW=Q~){Qla||!4jgE0Om(3>eoEQ68kV`mmry( znZ^qAi#J=Q{4~srwRjVM8s~`~5iV+Zu>D5rMy`cs%CE9pC-=0C)l3XVnL1STXO`*w*mX;Jtbr0i?(Ut14*{`!ElU6L9yoCP6Z# z3UU*j{JU^@=wUvI86NgA?dG#os&r`DmNug%Qe$B1E@$s3pnmG87!AD6R^f#RI^+ad=EVdAAD9s)Hh&_~q_A^CLgo1mt3>#B~##rcMVT2{gb@&F* zG?p+)hG?D|6ZGfrA`=+TQl@y{+X>FigNJm5(l)!ZfeSbZTaF5ycr^|K7~CU98&$Ea z{Ww=lPO|&VH($y zwf_7rj6jE3`?2!49+kS2f~MK*j|?XTgB>lP2hCvL^H*Ls(gX{QY_sI1cnL1v9~$gy zpbUwyIUnQ#MYpZzJ2fQ>VAMuNVHQ|Y4Z|ddrRKG2KAv%lA3j^IJ_;UXL7ie|5_BS< z^_T;7=!$Cvz--9w`du=MIq6{aUcDHXrS^o2@WHvaxZAfW9coy zg+w)FSLqV7_1J(NhhXp!HrcyaK2TfgQz0hVnK??Zu06+Yewj)v1JcIe1@#dBif>-H zCT*fTj1*FE)Pey_<%gj;-E!|L7bcd9n!ocb<|mjDa+Hapq?hxJHThHmc*2Zuui7#~ zaImljAzH4uP>X`<_abf{ypjC45=>JmPG%q+7&BmV`My%MO0*eqGA-d8A-P! zwa|dHU6d9H8cWQA_s~G{E7=K5bhRFp6?mmv=ElkptBQt6fqF^A3k>cw9sj@{bZXO& zF9S3>x(~A3uj~O>Iv<9>qTJo?P2@mi5ZkYacPXTd(MQYejutIhV>fIwwyf+Jcv6Q1 z=;3rAegY)CR6XX-Y;69bFBEQWhdYuQ1SbmGgt7R5l7_h8t&4Cf7THz1x(i>);J|0T z(ff2Fe@$%2pE-`)i*=i9UC^GG5NZjQJHuefe)Qi?GwjlcaBNw4m}{tuMW4JudyJ50 zW(@|ZpI$|*aeVikRUa|;GRu~w(e}%%#AU=rE-g*?N)+LtC&hNTvrU2!P>=YP#Z&-T z3P{6fdPMCmrqp{V6-Qid7Kp;C)Q%6|`bYs(WnDD5BJ$}ds_o_%vmqr3eSvj)6t{cj1Woz zeE%0{owV*E{kD;y85`VP8?lctr1(?`IktD;(iRrFJ#h5d7A1%K`>wQc0|RChFY zKk%0n&9WfY_+zZNw49_c35P>eQ=Vh`ZFIFZBmNerGZ5Xnk01+RfNx3N2c20}^V(Ag)?wojx(ZxHAQYvpze0CyYq;WB8qI-cp-qRbll|T+^!X@e-c~ zq6@dXm@b3^t%-hsJ0#DpG; zi@{K56acd=dlfa=5gyt5MDrf|#0cCQBq`Y6+**G$@wJ-;Lj{qc~uFFz! zlF@VEaj-@<*Uu5)PQ$P>VF_&IhJqNMmRPFp=oNVn|1=DC=)N$-hgkV0&$n;glPp{@gWUw(nh@ zD3G<6y{@c{@B^x_VXh6B1aQn7?C6wd56${!t~5UYUABtexrK*McZ)U%NqUH0(=PmO zf2XHbU>G|0lwOM!vRb>&o^M9am7n|I4?|_+*U(MM(y!mDkiJQqvQ^>6eK-dA1!jF% zHIlKi8)WQD&I7HT&GEZcoD`&p@@W*k`4RM*TP_L)VBuAA_o?Q7aUw3;I(wyBsf8nU z3<$AKt>1hfyZMSZ=o*4!F2LQGV<4%{z^UaG*3QEBqXGiBm!q2Lr2tEm+w`FkY}A12 zL4or-42s7Q@47paymjh*d%FblL#A`pM=f;CGxxSVsNmCzm{Nzsj|tyP8GLno_tTzI zfX#;`4Q)fkEP-bR6wk=F$(+eYraxkzcGm6o=0~no9;ts7Di-`D$N4<%)uN9p+iP+F zhD8{8QSpWzPH90vr@9*&J^wES>UqshtJjFOPkq~og;27Ks)-!61=k^peP3foXIiz# z(ss=e-%r{S{B`G!si7jDSNwkKus6-u4p8F!*N7gL45r^Ama{;y=n%oCkAD4}t{>_* zBn>)MT$_h-oAXj9bM^+MGxlXjT!;u{5%~F5*(Qo^`sey{sqtExsz*YHxq}y~$;L*$ z9TXn0wqks{=Bv2VkbeD)tou)wn5g4S*y7ReSi&@-;uN`^R(2n2>4Bs3uMzh74dVA_o*^-KQvS2#mtUodCXE>u2hm zlWsn&OJM1*=uO5+t0?!}j{=@lrEfpo*m)9FD19hY2+IKUBY1R}ZW;dGxbNztgp(~{zP^A`Mt0W*~nn%PmTt49fr zrB`1#rNEErZ}hL#b7;o;OhhmTW12V~lB;FU|_hLYoTnTVSm&@ei&?%4= z_h5AdnB?Zy7-hMyc46%IFXZ^!->jh)-NJ+{&l74fyH=O&zs~hY;e;gSq`J7R2%1n_ ziuQf1-s7jbybBS`4U>Z=y=2cHF&WtZwAOjL>HLf#E3Qj@zs=(Rw&5mr%$KD6fZs$V zhWiH7`hX&R_Ki13llP2AQ(z<&5a&&P3@rAT%tKGxn`s~N8TFSIm5n{wN0{`8uKBb~ zNEV-Hiqm4~Xp1c^MP3dcq1?e?KF#lHlkSZM3R5wi31!iazFE|wPxv%$j1)et3dkPiyt!=O9Zmy=!x6-2?KYZQ1glIMl z%kel2mntoj(`=-J#Q8ojx}|wbhvbFG^vUwj912SR_n=i{MT0{AF%J-=yH$ z?@{|$0HUK6m+oATDU#=}4oH2}Uj&W>{M+o;Bkym0|1|&i^q@mayA*p<#$Ktqu7gX~ z+A>IPg$0M7Iy~_V$KSx^qC36p06vslBw1blj)ZC+_e+L->SnustMceCIuZfXe2w_0P544`pMiLjh0Sko zFUHgh0936Uleg7b9hto{&AKLH*tgx5QONTLn2hA7zvD?zWZG3lPIKj)H*>J0#RKt3 z4huPrB_8z~N`LCMIh_*o0j0!S!ICY+vJI`2vF z(AzoR|MP|UQb$##h?XrUt`=1F_^#7LpHsPs_|<1IGh}?cRCRyZ@r0erbc!bD2r!d3 zG-8U9k=MA9{Lzvhr+_-%*|Df1Gz8(xJNQp1jlC`KV-%UcCL@|_@55X8LtR*=j~KcW zb#^@31t_=RFKilzggoRjF5g7*!T6A^_}ZX-j&WerUi#&&aEF(Xe!%6m`$zldS}Y+? z?$Lwz@UrZpsWcufr!5w&H*5q*9N$iG1>yf_F(fRl?Naf~$w)j3^NcUr&f)*i0;jA- zEx|dSu@aEp|*RIaW!%Em34w^KnN1m2b-gka#5= zG;9TPzO{jo!rV!hvtlfRhneu2OnryV?R46Z@FSy`!&AX=hPRh9Wu)%DUi60bV3g#vi74C}YVym_ zJUN$Gux+&?dp?-dEv7_~X?GByV55^o`t0`a`X2atnT)qQoZ; z;MP84fPL{<0Fy`TUJ~^tCu0rIDP3y`J$NBQ@ z)j}G8)X&=11=y}LTS3wOahX$}JnIX!-`4gA;N|T3|65S^2@FH zntFn<&A~lhPJM7@vivC`7NIUsZj>>IX|n7di}Ud2V8e5K(qbP9#J=G@JeZ)0wG}qY zHqoz2FeB8&Y*DAB{Z^*YVp_JMHG##yB0yY={tz@+vJ-)P3~*~W+PMKDH^XOY3DxX< zL7+1oGZ93B758+c++^fG3_C70tVT7<`fY3qvI-v%SRCqavVa3Qn7U^ce>h4?x5A&X zn7^!o=L2v6RwXTMJ*ps2nKjwrv*GQn+k`8waH+mv?3^|axZciI?oXB~X}6@>fcL#S zVI~q2aLmKd8S>(W&*?~m z;LLu7xYQHwO7K*t;aSE!2)?x1F>?;PsG$DQD{4*r{gCPOc{bKMad}a?s9ky3MERR@ z(9sbJk?n>MUbRm=K0vPf%Ht?^8g+&Jb7~#C)6ptl2^iK{8+@Ithgx?EFALRp>#?4L z)$l%C09&4qX4DOnVF{U-zB>?d;+DfE!^V0y6+4hv#|G$-JC+)UfGSR4N{#%5QZmD&2c^5^KT z7PWdDp}@{+AQiH&wIAxy!IIfx6r{{Y37H#?O5A-<~ zB-Fp>zzzx4=h+(`PgLzs_wm<#%>-3d8I$00EU9DKFai?ZcuY)~qqZ8&As#X?Hq6U= z7MS4?m5Sf3(Uv{--Syi3@ENWrhU*&XBnaV#llO4)GVqbr(HTKk>F~`WktSZl>E|fO zvzzT^gY}LKZth>7&=94Dk92hJfBJR4QLFT%S}iW|IK^IHczv=$gRnJIn)XoWfl8ZP zRwT#?Ab^7AcBvR$Y&2>ecyTiwgf`ClTc#w+18DIBJ!kdLT1I#HQB9eTIt2kt*;i8q zUb}-0e(8pt1^_|()&KV|huor06t z+25?k@KJf!+>ml}_Ml6%vu_6H~teCE!NZI-QxuB-;L zohIh9QUcs(EkqNWjeB~a2vyHHbicB(3~rcl8FL(b;HB`eylOMEPcuq*B-33#h!>Yq`c)i^%w>4u1RQyWx1kg`&wSCzpL9VGM zluDpUnL&eiu#}Q@kcUf{rSzIjI2MKqKd##6H$b{FcT@DgQvB*pk3w6%GLw)KWAEG{ zc6ZmUs$1V*C_f@K2@SyS6GvlAWET4VL`kTb(3X)te; z&dJ$L-KVX?3iWM=r;7UQS2ye^1TzW$Wq)sH%fOGr%>9&%T!y&o%xOP2i19De!exA= zMA&Y+fyEuw{w@j$8bIqm*2$~Vq0+YZN{fsHTXycp<9L?+F$e5s?Wewpo>>Z5g z>@zKHj<+}h&yAQk?g;g7JH+$e>@=#F;m=oE=3}Qx!=G0ghO(G=Ddb_-%D}6T3v~x7 z;}0n-MO?xZCFOH(tgx?N!x0e@Oz&k98=ps|b5mDRIS=s@GDpZJ&qz97NIuDJz8=ky z$}*CC`tl9&F823?`=d7@`q9^SmTun{Z%X7~y=_k9D9sgKH~YMV02F;gFMH+&gDZ-L zAqko33T#2(NnX1u;gRjCy`Eko{_tyUFZ9ki6)h~1(!cASyyLSDx7@y^`z+eum2ZRb zxjTaocvn4W!?#YOX06U;4uMbytauzV=uaA0w<y&|kawIa zemI;HH+ppyg%ftM(uAr_lzuenfMt(=jY4@fTJLkE_a;KF#^ORlvwrtSkUW6lS;z67 zKUx}LGPpnKzDl1m=$wAxRfx~tF#?n#yRmi>N!xPPlgPgZPXD2YUh^^LgUkJ)!*W&; z?xo{l{<7#IebSVq&gu04O&qM<^PVVC$}Z%fwaNExTgxvu->q-tV{)5cr~CEqidBUM z(Oab)q}qi7F00N4%5ZN@tfeUdsXM*tls#rkg%Ft-gE`UCrtcqOTEc)@kx>Q+i|&*D zIuzMH2PXw*Z@eh3p<^9}Kdi4JmR{}Q+`XegqH{V4C#N1E+~MD(6djgykaO#A`X#I~#dl5b zG+oWurrS$WmW(f1p3dT(Np7r@&i9u#jgsa~#dL2^Zl2sTAMo8}MS!YE3{hK|^A9@A zSBTv2aZj(0u75i`-!QZ}uhHvw>^L*yUm?HkK}WG;$_)+I+AO}c+xwe*l2iWliiWRq zcpg5Pfc+Pm-UIW8$qK<-y85?~AM0p5(Gu&hp)DXN6+zi7lsFo)IRk8g!91 zh*I?P50mni%&XeAH;;u;KGIxS)q~BoL!n-}sdMLj7=T0{EQl~zl?<6G&!QRD*s>=> z{xKvo{rH3+`qtZ%0>6w=y~hP5YyFkQl!sqhZcD5p_Msp{syqkw8IkupjpK<+xN=`F z$9ak6F^@fFnv&aUV0P7Q74B&~cgKgD89UaH%+*WA<@>=A9xNrYaS%&7?*58$YUYic zMW}e4&>J($ddDuKzuyWwBpy5Ms1k#c{hH?PR6;q|JsKK_+IRL&*S)wS0p}=GZ$CC8 z1cb@XQOAI|`6SZ%D;xS`^QNxSaim>>_kyO)J6wCgeEokih&%S#fO{=8Pqecj3A45f3$1|eS+=4 zF+0^mnA+7qf0ibZQvAL^BE+eqpJ3+)gmZ6gJ;}=q6EZ$_Yiy#g^~pXPSQM z^cTYUbir$nT={Fq-JIT49`zseF1ra}HC1N$f)<`oSYM%=CDnyRgIf}fFBF-{M=vRi0Zgzu@E+PuWq5#$(C9=<{ zfAX1{tBbC$cg)U=YsD8}sNt=;i}i>>hX=q8U4i6(D>76j*Gvc5h=1JjHd};AE5?Zn?T-1wzSQpO)Y#}5THWDt!7^#L!9jiq=15+Gg+gtu zVI#f0;)4%qj1X_Pvt05VylhX{q|tYY+eo31S%5maSAgRncKoE#En+OI`GhkGVYBp) zw~B%H2$FQ7@sDTGz9h%$-%jOFZ7?hcQ6TUnb;XXrCu9K z=zKqiXFe?u;b&k5$iQK?ejQhDWKiCV%w8Aeac|CyyWOb=4gtfDCsI~?f%TR-$b*Hp9=hK zFilrZnqm(#7{4h9?oai*zTfXkR#nz_sg4|%>FlF$Fh#hwNU9#CJWX^+*iB^r1fuyW z&iezFKw>`;&^v43Hag*Qc$fv5abgX&^pa@|R@Iq}^-2#FeR8Fo>sQVs1s$G`-S_>B z7};xtd_VfIA>onEs3kq(x>H_^KzrR}I{(2YOw&=eASm9wMSaf5&(IJLbfpFy^%&Bky~GffoZelo{3|Nbkz zNL#zJymU2hU4^>9X2=0>63DU}{D46T90*s_X<)X5iXXb6J>gO-`F`F!{_PJ)8=t{F2ivpX|+T;yo1 z`iWE1+^qZ#%t+O)F( z8!O$MvT)DZYxmHWTyG+1N*aAccH?^ZI9 zRpIW1718squRZI-(DuYt3OWrzrx`thLC9t2A5pD5(Z;)~x{j3NL!<&uv>-k?=0tKl z^^VG~CkJ1@GLYJS+41|-j@=?EnpQzpxPEN5;I&Bc;o;J_(~F!(AixO1l`rU*xb7p9Grz!5aOVk%EC}cK3(y(YHOPiX}O7O{|cBKAie< zEo_FnTP>E|)(sIx-EG*jZd#pcAe;xhg58d2D$%eV*sSbu5Wo<$uKzV6AzYW@qZ27k zi<9hcgZohd{fFBgJY6DHkkRte87o4?XSso$`W2r~ zv!d-XY=1BZ{aLA7Im8>ysbJ@s?eF69{!aOs$TeO*gm0JU zCDm{xw#BK7ON}^5KQTRHcx?HL)DOuKL-Cv};i;t7CY#VP)tOnMEC;*w-do#QaHTSL zytnEy*jpXF4XOH~Giu1WG+mc|yy`7jhjys+RT$@<%w{Qv-Be+c{vz028esO(j)Xvg z9?L}wrQ?>nuU{i8bKQYvNjzF&%2Or}TYzuktw0Ayg`@1ACmnIRseM>5YGM=8DK@0Z zGqSAKyR78-Dbw9dH8I_iF)~Vq{*{Z+cl9yJz;lBQ4#ruOz z{NY%rGM>U`t0C!NfN&rtMs0sTj27~)2i0a|sm8|MJL&2&yzCL=th9bWX}*zb*^FU= ziwLLtcZ`S@`d0a~Q+WLIviY>AHQ6?&JhJT<14`R`a?v^Ez(owwE@n2#fcf2BPWYf5 z^NMM(t@t^NMH zl!92)Tq~w~St2Ytj4u|RqFtJ6VYec0l*7A^rc~D+LTY)!6L~0EeSRGUrU7Bm0uVlO zqJ3A)gr|u*_3CAG3QoJ3p6{Sw2HJjUh&*jG8grYt3CpAnmI#(>b@q}h=&;q5T@u;I z4}sePk44R%#(sd|3z#jF+oh|?Pc2+zL$t9`&jGbebV=!@6%_XOnwhOwI3(i1irbv- z-a^cnnq0>NWjd9$;L)6qiigYe2ET#tB-yHGmK*2{E9F0lnN{U9whVUj-UM4Db?{1; z{}d2g^0MlX{JLWFTr<=^$0xwa?A3C0fGt4WM$(QYXgqmo1fN6ZYE0Ugzb<+v7WYb>4jjk!R*8DoETPV=!@qYiqrAj*z@;mj0QP z@mY`3A3H+zG?(Vw2#dBspM0iBX!7sz{iDdjSMKIo+n%L*>3HU}viJUL>6ZNjeH?UijPO|8D` z@}g2xjb08Zv*a{o6&1AJvTyA?RNHvUtFTo z?G+K;u9r6#v`S7JM_x=*{9YJvEMn38$ZszrgSnFQ`H$!KCs$~MJXqV)(#tU1Z!_=# ziTd)^r<9UU2Lw5ONAgYv?$ky;GnYXSaRHmh7`MOQtUDx*9>gFRaYYZ< zhNe!FR|p-QeqR$8u-?K4wFG9ARZQ5h`gRhKJ9G&h1wvRvLzy|sv+w*$=vT=uOP+Lj zr0-9bD_E7B3gV~naREE5Ibv-&!`#ssT7$4h6M|A8tM+o~nRCx?;(KfPy4s(asU%CE z*+w`fj(0Jb|E8!anY9riPQBA^k(#O6a&yZ0t=$@l&?!7M*Q69YH{3;yl=R(D@j^s6 zG(sC+J;uPO5|RC91>7-7rUfW9C2uy#ak zrxzw)C*J@57eHK-itY%FMjA%IVw47#EquuVQv+0?qM=Q8QGgGHKKobLT_Fyii7`ak z@Dp!YrU&y|H%CG>)J4r|YhzvsXa`gVJ?p!~mUT+};*K`^qpku*@H4ae%F~e2yF5qQ zubCR!4WB#9ieo4AP;`kML8A^B)8Qmpy%e2d*6jDYBMDsVPuJVs1=ak8_Rp^p&%fR^!bxMG@l2vB#YVF9{%rS*KdLv0_`yL6A6;??m1pQpcb?p}&EBu>=Tok@L#nZZCReEPpmUdG} z@!FIO+D%Nd+p|^AK(~MrHonaqyUzd+`*QZn_nt&fd8%vwSr2Y}Nqmlm1y2wl(9g8^ z%*#5aPbl{AhZ zQ@f40ysr7vZ98y(kKdFGv51i`QRox- zE3n$1BFLRV3O-8Qwjf=K_iaKoKJE+5cyE^b^v8Jt+k-EIP<)<)S3eQaU$XaM! z@CBNMm=+gA#a0ZytW-2T(|dzL#(tu>yZ5TKd(dxPhooPp;)&5wGc7)d@?&Ij2P55A z&p%nPsnW%{xuXBa*jon0*);pZi+gYh65QS0U4lC-?(PuWNpN=!9^Bmt?oM!b3$FX$ z`+lBN=dJVUt=hUi&d#)VPxo)g?L3XPE9q&_Jn+zVl4Xg(ZtHkpXgZy!;vOP(HfVmm)L6QfCQki;G8G}SUgOSiFQl_W&OTh=xG8Lc6r0}{JR6jEK`Wd zj9)uOyxzn1@8OD!`c4CCK_l5aBV12aJ-!pySD=}4kf^&kQqj|&dy}3mrK4K4aSxKk>rrAKD4C{Xm|XsHw1OI9So$QJYwK{u4aEU5=2AP+7ScG^;@fR zmRdeoL$w2N{OSd3bZ%kUuU&M82Qa0f2fTR0fj_my0yXUoC!;20lt)g3A5f06-(2Vy zM%}NjGQQon8DFvA>COwEbeh)ulwbCZMEr|Hy_LK0>X*Zx*v^!MJ85f`Z(IF=mg9NJ zJLJ)=Q{Q`VR>Vn-R|9Il6h2OnUY@OL*%0+1Aeh7;Ep{QBR1upY*1<=LQCWk^S$Gb0 zlFg$0D)?fdV_v0>?gguxbzTK9V(3qYcKotv7G3cEtBtJ(0eS`A2@(MX6gB>8w4cT0HAoA^*1ty?5bv%$r1d<_3`+FSS%7ys zN&M}$q1CNm_&!}T6L~N`$m@UT=9S##yQj%+H0t`Qwu~VRnU);J^cDXRVtqPnoPMx{BE)q5fTH7G1ec@QB~;fslX+|cEt@IyH^Qtse7Xva|7q=SPGAMB#P z={`LO8xta^<4ig@)|UDqy`PTO=rEBeE8|^lTpNPYs&Q*1qj2PCIp|&u1Pqj`N#+mI zfO7Y)M>FACl4ieao7P*%UI+IXcHfS0rmI;{90-06fmW3SrypjYoG{oyq{>61Fg}O~ zErv9`vGC%F2!ii0Xn%E;aBcYsz#EcVw6U$uIUe3{(-tz z=&PKsmaA7v0KQ!pk(;zt=YEp{$3$aW$fZ;4JZmUh|wU(sy>%Ay`XFMvKx5~ASX%&S{@+LrH_kj#+T zg=;B8q30~n$tu2yRrGAAQsg%=%t;4*%fF>bhV@h#8-}s-kOF+5ArCa}O-Pi9Az0{; z9r*OB?48`9@#ec}FfWxfT=y&Qz)jVWRlVnRuzY6|^Ctw{21=5Wf2E@5x2KMWKRzH{ zPGby9hx5GX3SH85T7{J*QkrgyBJI|C^q^sFQrm}ZaMQH7(I5%SOUi1$fx9eKCsUsh zpc7kqO^*%t(7q}~k-&uMQB|Cw+J_a46Cj7atK3t6C&2zlb9D z9&4c16mBQL7)8W>AgY(%6fHAdtb>C>#WI4^bQFp;%Nqp}zWf}pIS;MFGNnuM1_$EG zapkFH+L$Jvq$|yVf}~pYAf&LYWCj$38n{w56103h{~LC`+vs^hJ&gqvcL`vQV)@;w z*jEE_3*#zRyImkauxbP`5LVxnlM)of8l8g@25=WuDaYEa{k7E8L__&~D2kPI)BkKz zI&^zc+iXaie1hfl)QuA0r^%&Odft#wC#9gwGDH=v!Y8ww{!3hw|HcePMBKJ-3q$^;Oc3gu=>MY+T=-mu5Z^6LUqPO=DLMQr4r9cCl;54#{pt>8x<$US*2p@2B zntJNl+h6_w4v5$=$#T&J=>MTZc>Y9s8V`C-{0*;dvQNDCL}78kAAK-iwft@4b%I~v z7E`4;Fs<+nEbr0HOi*8dx=p*M!{%vOSJ)q$E^X*!#y&>^>7NGYD5Fk(B2DLga0cXt z1HkA+ie#(Z(UvgN(LmW{?P6QICi*G5eQ;Y9Ok|Q*D~HZ?Y|Pj*rV1OMuVz6?p%OdJXnCBn zQ;`pn=ctl>H8ba`Y1Uhww3;qJU)dbZ?iR#|!ZkC#_eDP0MY+?N+`-8L7>9G5X& zzWZb~8g6dxLO+Cbh>o6hkdf4ZvPP?2UaFsk`e=D%Ts5mac;~-1J@y6=1N(92n*_0= zPF5AwwC_VJw>#*QZcx@D+R1)UVyW(-;sU*bq%Ip8F0Zai*ZlqXH@+P?mY0@NU!nkk z8==eLC^d7A{;t$1si|{tLQdGg_XJcml?45_@K%_jC(2saNXUPOEh=Nsaz6|3w=Pt3-Zj`(yusX9J+-LU*BqbcR2?xx&S zD)D{X2FHpSmN{RApGTE26+dpEgMJ43I5B&fMFtYFxFL={*sod+%kiAxH@L;rY4%Sk z=zxXvdvo;^FHXZ1df>TcNs=arx{8bhW zOs)l{=6LT6EyY@kc^(n{PLb`z9OsZO0zbRCF^mZ5A2z)Ww%@07CFW)__kY$qearRC z;bdtKsSG<02Qd|x5~6>+u;)D!Zn!UBC8wYmY-b=)l3?P|K{?=)uXZ!Oo-5EZ6%xD0 z=(G>5LzXJ5NI99PW0;~j8W%B%s_bjxP-eQ{dA?Zw@olr=d7l`Kz zTiaip&T-Q?NB4AEAM^4Mjt%yZ;C>o6$p6v|@Bh%uLoxOX&#-+L6v>g*PunwPV|MD_ zHmh@#vcS?)GVRxZi?bK4V;U&)3|R})@(PD~zqN}59}l?gShhhg%NO zX@#-xltr!{dB5RL65*R-`76ETFt$lD_PPZf>VH{woD9rtf%h&70m~JiSre3!CLp;v z@e7PdD4H5wamIvM%lXi-sYPUIRi#m_0>RZuH2UVU9b3ahJ=<;V!jHoL-Otuf$$30_ zJ<$k#aG>2Ej^!-hIK#6FZrD3F;nMV=;`Wzy9^H@A-6C)9Sv9lBD5g9#F2|N0?Y2L< zaQK(9nzkK!>23SRb~~BcVjP0_fkO7W!dCTq9v;CI;7);O_Q0bF8v7HS(?f8Et7cCeZSv_S zR9folJZ)BLn^`&~U`{|QEtM%ftj^MQa5xgg>CCw|-JpPtt-XNYkas;)#2j7msGR^+ z#E+aazR$m$c-Wo`mmcr$?{%MtO&u)217M$Ps(*DSU98nl$I|g?Tqji7{xu(qp&q@R zoT3M-&B|qaY?sSOcR2H01ztoYp|`gW_CsZcPL+O}%OMiSo6SFKltcU)V4!?$zH4x8 zEsE~>kJ(}Wq#X_ot{l@|dpD~2{b`&V8#YhX2vp1Fv&NL9qHi1o>*3+RUoi9z4|=1XkUPGTU**Jg%zRzX;kfF|kxnlpo6u zE&Ly-T(2HmAMYiy$lPtHzT0&3W8yj%?S~m)_M-hSd)tQ?fTopp@7XSb^Z-OX)#cQj z>IhlmMa+79f+Tr-(<5k_B+->_)1&>kKU;=i1D*7FCqe~wj4f$mNL6dY>|Z&Nzf^xZ z#c$AtkSXTG*c$j}axBG`Dm_ue$XNJC``xrkQI(NLihuet0$=~7`sdWB@6`M4b_pdRn3eCx==NZ@? zQy8?Mq35DHx)p+|pcQV@f3Po6F^2wb&!0xm3&gw>*QSk$MONzTttS5Bbxq1=J&Euc zlNjeU543K1qL%k2d^gcBJ=ZWTB%Q@&|FfioDpTepYEbC=Mcj4w_v;7}VT+e%YDl;h z-msZcbN#*RiS5-o`v15WkKeq&whR7-B0X1>$KfH4&k%psIX~%TJR1beeLp(zAu0q^ z`n<`$)SP{U_zF4B-7hMY}aH`V*nudOVM5$kypRH65lU0gJmr`#hQQ` zn6+L%AoyPi=AK)-rB_5-p@WY)0Be9*Cd5hY;D~0(}nAqJ&;aMfaPfBwri{2@) zcP};1`&{uq-W^4_VgDcRKG)t{x=p~`;8#{FC#NkrAg=1`a=Wi7uR6i*bOWvj854$> zd;A(d)k~AAs(nGw8U1AO z&EV)907&kNiD|s7qsG`B5LS=`XhX15C;S_eRfdAo0z^~#D?ph&7{6m-SGJu)y=Ax? z!i5Zs&Dn1x$K}wzYoR`Mnby<(l~<{h%?)4kc)TqUqS`F)GyOfxf6@xMl?+Dkzel1k z7Z;4RqtRAt>Yi^;QJi(}-BUVpq^CMjZFJhde)8V#i}*@6+5H=gc60zf!?>5``8i~n zZRH$iGhcbl=n^=d))};DGthcc1g_aMs7tR-C(Pty)%Y3)E!=ywK6Pw?&{2>_c8nst z%M;O80OX|!c7~~bnw8;c{|U-D-zJj5@yKthv%edQ#TxY0{$d^leIKDczhC>#+;bsk z7B|2_-0Jk6Mp_RhJb=Jxp98#&f0CQ)x&NEoK-dYiJx5Y;JlSK6y2G?UAfcRZvla88!hE`r@vuw zdIx_{tVP^JudJ@1m?lT}lg}S^LXm`Mx-8d2#uF;a8p4RD+&Bx;e+KH=%4#u9B1ORZ z6!Sd2O{oI_{d-CRlAfFQKC}YaUabF3YZ+dnwNbc%rdUJj{Pa?qwxtN*Tr6EgY$pJi z`OA)jHB3Xb-=?faIuf-R!`!q?9y@*~%JF3r_2dV2-c&7C2K^UzI9Nr>JK*Yt)2ij5 z&B_UWp<7HjIH|J(FEkVQk1d4Ks=r4E0Kk_VDMCm0aFI<$)-WZQ4*+J+88-cQ(_hGC z4QkWx)Pczt9ml9%Qs)Zov9#_nI@xASNGTX+BtM_BA+S6D~Sah7C;MQMzK zwNiXM+G@-^4nV+^rWZ1JSVwr8#t+*YDaMtQ`K?JsZEky;#P2CHPL1mvIzJY?*twZl zUJ4LpT!=t(02Q2Kkcg0H;%I0N%>3totyB7&^+Lb#f2HA!2W>K)ydojy_#m@Dz)}sy z`R&ffHY46&F@o>Rut z<8B@d9~b5*5Pi`7nBzFhN*~v3#y>@c)&JT*wtlhK~5dij%vyblU&99WCCKlsAr6~q{?B+Wf3n(uwRJR5GmX&8US z#;H|Y_r5;wIlR24E^td3Lvvexu+bjiMB48?#N33{kG7=0(c2taCp32yu0HG}Gyw_& z%l{dsC<{bwNDl|Be}j~Cp%1cV!0?w)M(&^o@Ft6gQTBzpXMcpC8>rJjlo!bf%2nPu z8mP2aggTz;#NL*5H*c-VRw?+J16J9le50 zPS!}&VvCSG3ZjY(y|}>Mp{Jp$DZ$$OXUgxgR{*{J)t3!C10(}mj8!cf!AQe^?ch^h zLxq8jbkKi^ApUbUzD}Gh>4uqkTK+v8SJWj-Q#3BBn~Pg!D@RN59zpYco;4g}hRFk9 zKs1LrZtVSS)c;e&z#SN*7=bycw5+u?9fu*FUre?+TfKUK4m9f?H{S$$>^Z&^-jI)9 zv~jCjdFU~6cX=<-4b5#mZpBN9l3B>ga;4!*%qELZ+QX>W_AX~gWpT2##$qK2{b^~5 zhy^DrjSL6{5gn&Ae6DAYwHTj543rwY?eu3v4O_b?=o9+p$rq!MV#x^GsgF*lLA6Jm z9F~rU_A_B7`rzB3*Zb@*lXi{s`&{kgls~aBdu#|;#e>_N} zCuZ5{Atg7pEgA#S{;7MMMLCXlW%dsHrICLI_P1ddwK_!HA0 zs@APwEQk_S#gKJuPGA<$tgBzQ)>5Jv8+7Xa)z#t@y>#yx=R<&F0k;SQU zStA_m@^F~+>7zeuC##}5y8|z<0og};l&%($5L_g?kjRQrG_509@`kvWpp)MZu}LIr zhAa@EgAceEt^Zy>7Qkm4b=ufk@LZ?TlpTmvq~95`88BA{B=GUsIn*(!JpPdXEsNoI z6v?XF!)`$X`4y<<2{l7)P7V6;A*>P(1er3-NvdQK@SpWdVjF4#)JZ=_On*P_KEXaF*qY>JW&xPIl$$wI1>zBP4@6@lA0R?_{0 z$m9Z@BJS=@jdmv(y7gY@lR50ePlU*+V0`x#-0%`XJXTTisDv2oMp_;00- z|Fp9q9#S=*E5Q&9LOVeklMT~nseMvv+%wHupaE=CD@Yu7*`mplNVNzZ{Oq}6N;7yT zKP7(Y-as&oug2>2cyy~5U!xM5sSmm1ibt1XXqSmFDUe?p^c^nmC{o&9;I1m#c} zXo{~UDwKtu$#DRXkgU8&K|LSil=`m=OXU*TTz)r@&J<1>!i+V^?D&E!NAp_=%6jDA z9CTYioUu87Io%J5&SCP~fIIbYo+6AC$o2iCZ9&pegw|{^;SptxKP{FD6Em~%-b;nW z^8UssD~FuEw5Pw-U<3ui4xJ0Ll&(_5b`asbfmSYm?i~)xKnJPI{q9!LPP|9k~rsLahA_o^&I9l-Ee32l%cOghl z(=i#$jCEqGBmzkMmxS|p&OlZlEPj*3#bFNjN$iy$JzI0)d0X?M?*d@ZVluX2ApwT| z_wG}&)_X?W2SB7!Y*{mnm?gt`zJO=62ZE##1CF8m1&$@iL+RbN@n>xtEy9x3jlgFD zB5W?ji;Ob{9aT1Z02N0g9Ph>Nj4m57H-UY^K-=sMTDndMx!4sLywY12>64OR_%2S* z=ye;rw@;!lzxNEBH$eqC_IDC_EGq(cNIlMUkgVVd3EiZqFRRBt=YpMem1z~8upa1* zljP*-VNbB?$XU?tXSxmY0{=Qez-fW>exGiAbWNTyV?|{>$@#RuQxl%HborRI2L0gfLu&!};EVQ0iWLoJ9tJTq(N+GsD85M zoWL{Uf`G?QYQ^CfA4@wb?bUTj9}VSEx{S$p(#|bL91G=BZm#Et252b$ zJx+njbogpsk|e^T>0kz`Uk%XM=&|l}FQ0Zc_|9Weh6@{P$#BZj{K0({h432q!|>vn zm_PG}oyS}i`Z`Dq>icb95dpZx%8mSuDxigbSsBs|+w#aX&{H#c=1P+(KZ;(SR_h?> zJj+OUK~REtb5;uVKHMr47rVVZ|Kd4z$mKYti^==k9ajS{wu2 zcUM{LQfg$QExuKQ)7dL?-6H5sL;}jw;=~O)*8cmf<(W1;}qFo>M==LRlCSS05 zGMLO~Lko9d2F^Bkf39}-3d8c1o6~dNkso%YUU>D>;PP+D-V}C4-0Ij_&eCD{pa69> z1-$%^`(oCYE$N7IEyD?xViR!xk-DxyVe%0)yB9|j=T+v@2#AxsR~nEBkvs9l+V@uS zkbww#Q&S5NU-F3QN_VVSw-KP~EYha3U#2bd?z|$t{M|@s`Vr;FF$5UO%o`rw7Apa9 zMKZ2iMWnd+H%AQvL-Nv{mtr>om%#W@>+uG)x6DfET)O&T}pi1 z7oyQ(!n{1#SDvsk?AIV7^L`4TWkiJy%K63Wany0JaFum`8F8qlxf#leLBJ)ED8vP6Q9>-FB2di! zEcf9478XAn0SPQ^DCR-5iEg{@5{qQzYvOhS{bsW$vtUz2aCrDeBMT2jKVk*2Zko|^ zmeN*0eSf@QIm=||Mr25ISW)I%75L#2e>hb4fd`P&pb5Uxkmxe~f7Cme-va_t(mN4q zr%ys4P+E%*U8M%q8vD>8FVG>4lIO%mzYh z)B^Yw9CQ&y-{=uPC)JSBc1##~Fd$>^Xma6|ZFN#!c^hah+yv0$}L%)gd5LQJ3b_GN&g zuB)w438uHO6k&&u){`oYtGg^d<0k!G9&)-ma%7{lIyKH#Bo7gqyQNKlpM_!ha)lby zQl%H3Xr>SpApRBDK&fQL4v*tUN9+RQr8r`_t)Yhd7hY%C@ z1s{Xqx}SFJvH!1NVr_z>H})t?A@z>wi;BV5ni{D1piMT2W!i(Oxc-2f3X|^gVv=3()Q)6@lp` zxEunKzU9nS-h};*46$48Bma7}Rb!Rfp$MeR`ZZ?H4K<{J7jR@0q2FTKV@IIih{Cdj z7y>N%IW{*xFa{WcuMK6QX71Moy_A@zzT#Z)Fr>dKmG-KGsiZB5rEKu z9K?W%EzvikFSD}&R4|G@Nm6VY9Bv6;B_c~_rD91 z71iBN(nBono)fYK%xKzR^~o!uj@m9`jWMB+VG)fX^T1Lo*XPjTJ(Ir>M|nb*0lbDc zTW_P;^EuT#_`XIk_bO)^vK5_lncGLbjgO9-o9oE(En2!Ms?X=V@8u5seXJo&gsM9a zDHaI|MnI3%)AXY?LJ%o1HIj;ByQUu4Vb07{7b@2S?W)e$S&%LB6 z0wEz(o5akI9-)AxAI1KfUGKBxG`Vnw8^*S~j0%BW>s;nfaG{)*II7U(ShYZyEfn^P z>sCe4&PJI(#)Gt?$A+bd{*Ny{$8SeiTW)9O6uoY;tG)*EvUU3EdbF0BQf7YUVVzP9 zhZ?82LN0cEP71*nCYyeD@dAfoqQ;l-Zp*gRS+GGJyuXHySgSs#jkPl&3ihTd>l8&SEx;u z8ykR|w~q)E@^p8t>OM8g`HlR|M+4o<$xHPMUS@J3<_Y(g!{&mI<8v6Wz>dpSxyW|0 z>wa7&r2BsJ%o6w+IodFoOdt2nsk12Zw!%_hTgBBz0&E;oDw2X`9tWZR3*e z>*o0~AskrANKpm3X)pYS*Ag8FymC1q)d7{xe-ODl%iVpTm9u*HlW}DE@xW zMCe}TCasBP{0IwTH|o%Z__ZMZB#+& zQ7>iDua2+qYy^TyX)N+*025cki+R>a$?b^$k7i<*F4K{U`%NTqmw~LvVlkrEb0$oD zn_J<$?D#8TKBfWZ$&ma)kXs3b)?(bKkHH!OMQ+ZnX%xT0c^>_zt5B@s&TSXSx8uk z#KbXU!dHTHv(C1KfR40Z+&+K5L+-s-6X_8agQ zz)QzwY*Fi|zP3{w>SN`E*yy2LNgNS$Jx%%d=w05-hObGYhAAuAcKRx1@+>E&?0K6V z(`8uP6#sO^jM&f-}-2z&WLE^KL8IYIWDH?ECcb28c zIDD^Ur>$g}^)hq*Rbc<*<4-Zn-)H&(mnGZm8`KqI#?*j-PQ_+o-dX13e$Iiv<=hg* zor6TTo7=~Y>n>aAb^3E^$GqOIbO0`4ZLfu`c8@mwtvMst$rFvos33%AT{kfnSjX9+ zb#>fC?lk^e@gR;a!*BQB*J~jB-n7qaq4N#D7tXlfp@qOc-;h#UV`A8IG65arANYi$ z-;&&Bc^aP^$(|?lqKM@A-_p9w{|->w7Q5DJljA6kqtsj_jB{JyDUfLFu?zTLEjd3A zz3(Mb2+D+W-rPxm#S+8XtS#=YRVKMXNARqRK~I|c0Q~HRZ*99wKi4xM#RHtRcaLAb z_$AK*t#eMpt!v!?HQ+r2CcmX)!}-clxB*#gZ6f_cGcALWie*ABK3Am%sXaWgOAPtF zWHp~EV9;%(dHafxDuBD|y}{nqR3qput_5rSAS=@DnSZ)jP!Sj>A_aPXRfjy^m51qt zO=Nl9a(%&{mj2*!qcq2snSZ66TzH%i@ka1b)!d(jlgbWEIb$eB&)qVE4nB$Uu%ckM zTn?V@0be6iD_60Spsm*QhWlcBHA{awN31M{OMn&*kgT&HbhG%w{EX@JNW%cZy@`F~ z7KpO)8DR$Y`SrwZecNumD4K(zkv$y_DQPqBl=?PS8h6ym2MZloYnXTMJ z3{Idv!?+F7euE=@YLrrg@JB>iXRXAwU`q^}q6iLZ5KbV&wx21mB3mt|YhDHCYwf*i z2N;U~4-FjMfBQ?+U5c^X^7~wl4|%)$3E+8Kc2P&A2y* z@0D=RA1Yx!jFk2F&k9qW^(CUI<*r721xiWF@ozMm2)!z3L801}m}O*J{1`)uI;@ zAfE@K8X>j6!Gn*Q4~9pb&I^d7>Xjj4UK4AoHu!s#Ap7h+9hzW+$1T;^F-88WZy%E9 z5dLiLmAq^-0pQ<-nYbd5%2wupT|i*fI?6nHuH1}i;=5;4xtrs*A zHk6;QUu;mp(Bm+_y2pJO(V@@JhixDUn(1(e8J*pH^DEKJBV+{NjQA-Gymj~OSq0!^ z+Uw8pvr=-Oeg_%8QWZ1zZK6)wM0f7itzQQ>_rs0%NJYRE=}TXD#PQWhbv0J%!{~=3 zCrcs=2RQ>%ddb3xrR?`q@6R1sA)i<3as!046h<2_{B#O=zvO^a47zIOIC`|ZZBqNR z69k$_DxM@kL~RaFTEND;%j3^703uccjwSa`&*!659X>Kz9Io2~{bvd+#cCJr)5 z?mz;WZ&8qN%}>Y52Bm#r(odUdd6*QK!7XhYFv6PX?+`;s))576$fyrTz+8yRod|K_ zZP;++AFb{!|tfB)lQ@%_SQH1GNNH! zBNHq4)tUX)!q6LlGpUm7&0oxU@u`2d5oa{MhRvx1N#H{V6NMn?04EJ>Q=MhaYy)vg2oX_x<>4VlL(6hv%GASCsfYal|KnT(A}V&^^{)dEWYT$) zeGN3IG~yJQ86T5+g_MBFk!-&x1vjCTn;um$A$3F65}qL8(uUb|SJ~QdPLxGE2N2>w z4kO<`;yE9malYHBjJ(&Nl^|Ih&Qw?uz{*2pBNo7?GgHv^{}tCprmEAh1*7xd>u1N| zA|@l7dJnAN;NSk1Y)3{V_pS`@MMQ^BTuoEN{uyY%uqU>RfjsQdeCj{!uf0d{?WU;Ua49r`DR7*&0J z6CRj3Vk0I7_*tuAQlP5G;8Rf5{2&Kfq5%%PS#)m~VOYm%01dZbj`W@Tin7akr>F8I zOoV}N#5`?+lS^K{TlM`o??Lg&d-Zd1m%mj+OOLKUNxU%uT_nzO347(-{XF?+H;4}a zw&^|JX-xa3V$T*@;n`&&T#=S^p1Tc7U}64pWZ+hY`I->?$7XfmTw$SqiLv6>2C;YP z>y581$=FAMkny?INlb~IJaLF31_FoYd^#HQG<$s0+0&xIIArjm&~dj`ucYNFl=+H< z2<>$f_61xAe=M(kj%R87{pj9KR(r1Je|rb`T7oMntl(e^hn(Z;wqTUDT;5dCe$%|$ zn?JFj9`%+@Y~RDW%qX^9Rag!TPp06*_owJrwKG>e@Ra^()CAh39hvPHPHIptlVFN% zC+;2$QgVvZQsG{hs($hg>VQd%^Yg7S?9xO!4|X7O0*cjPXZx;^DZ$LjY6i|*?E*J* z8WZQYd0Hn{?|CUSQfLgi#rrEx6!{`u!KaH)%$?fw!7scenlC;bMKv8j6MWPlNWQ)6@ zy0e~Qb!ji&Np)1Q&r<*qg-ia+mDgh_wq*dbCkoHF!GqoH5=a*Bj_IF}fl>0~bR4=H z7?bW>xuk7xLPYaWM&VjAf(;cm1ju0|n9^1H6z~PY`GxO6n-0Kk8G`CX%jheL?kr7t zJ;S=}Hi4B{0ID0zTCnl`s<|r>m|Q3J1cam4h@hO0Ic*Qa46}Sa%N6k#Ho-7yS$v3s(DPJz74+n%^;?3gRo5R`eS?dP&Kw$$*C7&z^ zc0+PXAC)0S?pVQ}cx^pjeGimj$SicHn%IvdbI6GW?3n-nfCNQWLR1|sgf#-iac}e? zM2hE+Le0@LHAbN8!Hh`UO@FD=Azek8Y97Q_;>tDEuazN{4*pE(r-4TwBQt?hCuj04 z`nLpRHQ31jO#)p1D^p~2$nwpAQVKE_8LHGGiT@8|4uaoeo-OYGm;&Fl1gAdfB2q zp&X!1(cy?6;!T9JhGk+Br|vHs21yVFG)vfg{uW~?_WAp4 zt=+0lZV}9fz#TaGu753S=&}7cZxgKg2^kMFT+{h$RCXwbK*MsjkvHv=g5o&0&-!d) z0{fTSBt?+&iyWQycBu?A*sJS=)QU_j{=hw*$t<7}={@ zdG7JqHLxE1?fa;2P`b1`o2th-Vv=6-ulLOJKJKWXC76ehXSFd-bU4aovYj%Ae7fW~ z_8hUd#rLPb3?QR>bZ{TGu{!t+er>wjXe-fz-hL#^Hd3q@8Lu zX*vn&UglWsJEw1BD3W33{)KqAA^^Xhe@0 zV_)LtWo*dMqx)GkEw8&|LE}=#V^%`t*V{Pz4Nh9n(UEDpo%;v1Zyqf~fZ(cv-c`~q z^&RSs_}b$r`};?obOECk=AUrLDxp8_+C3bX{rO`m$abTy*0s;aXil&Nb~ghiAFV5)Ig9Zkis&MCpqE2UB{88#58{-k;~BzS zOuE+qP>by9%xM=TfE+|{6**qk(U9Tlwf~0zT;vc^QA4nzVM_g~vB@)QG(~IyYLyz6 z)0{}Ipe(**x)+6RSABP$_i~*eia+nW*51Sv(G)Ja=OpK7M=;B;k;mk`r|K#$hhDI0 z-ci%-8kG#<4M=|<=1EGw`>Z1<1Jg^_hPB+scHeOv*vW>G#J!{`XPv;`z@Q!bRGtI3 z{}7T>pYCp_u-8IRVCtUx|C+k)xF(*beTj)AC{iN51qe;5D7_?r^eTb|5RC{{klv&v zR8f%7Q4tV9q)3-0LImju3JUT?AxbX-(jk=hEcko#*}w9++nar6=9%4@z1t7(?8P8l z4SbrR_RG3lw<<%|1tAU0L~3#2Emy-lJ;Y=8kcPlbemQoc{H^PDpUipU9}P$*FiO5Kn++%s6+koFvk*%%${d^?4qHkBbZK5DQV*#Hkpp~3F>WD!7e#W;2Fq#e^q17_I86$& zWT_*TLcMm+&!n{Xwa=YD20Zv#=DC(P?zj|g_0HY#a*Q)Fj5-(_07Do=KMy-ge-=jR zCQc!iPC`>b7?Uq6R9icvo2TOG}Yw71%o`&fNQW^$p)W z;MayoY$HvsF(WBAeo)>LkQ+_ocUKR6Xkih!yvdwKj@SxK zuoWoX`65a(MoO!$Iequ}R%PAtB{_wY0sY6J7`2g9ro0-B0O(PNF*YnXDnxkb_MZ)So z^E2vPc9~_DE>DeA4jorwF&KU29MCGhjVc{m)sO=Gb~eoB)V{}FR-yb5bBL09V3C^* zo+0^W3B$&MP$7Zq4a))ff`%BMQK_(v=C+aO11z4;oEp@@TFB?7 z)k&s4Bwoaw4`nYUiMr97K{A0iC>^r2D*mxHtXQy;bX5X9v6B+&soG`R$U zZOUrX{*TxDGdhwE3=n&84?gx%Sdxbs#(~=BolEl z5S_GKYPxE0)cYg>f?EP{vHX$_Q%Z%GzcTGAoZ9eU#kfo$!NqJk zfpNklPBpW>^iw%ZtNrHUmcptw-bV=90r3lk%$gljc%qka^_yo~}jR=Ryfwe_6 z%0|s68Ruvc%G?vMMr8CR?9TN8T9?nuO@-#h`I{hSd+WIvrbbh)%O=P!T|2zy^~j}0 zm{b7*sn5-7mS&b&Soh!J?Fdw2M#t15ab-4Mvqg2i?+o&mZ3)XWo0PSrq;s43DA$nY z=fR%UBjfvPkZg3+DKu7Z%Jh5 zLDU;ptS|&$(IGK=_}hYFGh0jxed@JIfyRjcmd(f}w)MZD>WD7fhXGpwz2GB(te^^M@$PcFH&zDrl z|L2z~VY9tWhJH~v1|IzCTklfaohN8~qb4>hC&&IEN+Ox@2*WA)v>R%luB-78pv~V{ zcz+CVcW!Q1ddhS5Ut*XKbsbo-HUKf713{x4xm$Qy6N<+&=uj4(N|mGB7%(T*K1;Y( ze~&FT5YDu<((3$poYiAnxYj`)0Y58_2olSd#85GyJ)8DAel3R)yk9swA-iH_x$f5t zFf){eh=)YE*}$*xUje+enuQ~xuvu^Nx2qFnShd75UfVgR-8Y2aX>|tmO*xxZ=yV*4 zC=B_Srz!hJWX(}hTvHxnzev}QNTZJJzLJwRa--wL0)g^Z;D?aa zI$+t@Hrp@58hR(^LT*3MkZu0h8PBE4v|Ab{(4@xA&1>OEJPz-rOneqM$AHVY!*4Ef zD>!o)s6f8XL?*&EcguzchoZUo~~)?l8*I{bvkE)A8ApUjb*FO`0sk z`;~{#>}NQMf=qp@|D8E+acy=~(vm;kB1VSvA&4Aak90gAXt;GUj`3MCUY{ZXF4gM< zduV*3nL@S4V$k>}yAaKn2YD8{y7;5p`>3g>bDMEQWW>6)UrkbICtAJZF= z1l4>zWLJ2P1FprEOM32Eo>qDM(Q434h>BHc%LnQm8r2RCQQ(T@-Gs`LKV=w&^uFS zt%gz+g<3sR(SFQ{&{L9W4J?oM}i z)z?^^QSVx9DR{1bx1@Nev5{N~5{k`D{1pV%@9>H@Co`r!47P0wn$<`K(~zPOpq1Z? zmom@QI+l8~;i_uW<1|4ca2h=3iL1SM$h^`$-($|W`&Yayk5%wdji`gVvV;ZWG#;jS zthXO5zFJa9Nar^VG8W~nn@m}d0_zM5!4SwiwyVb~AA#OgWhDXFHb8+lgx^o#AbR7| zT#pu169aPL9kUqcbZy}Nl@bK{hXgB0`PxRy6_Ec1PJZC{*`x`s*g}j!$|h&<4QWII zb=_Abp-CS1ml=?sH3^=+?>T->b}SjIrk30%fW=OxxyjakQ2{^)coQ}yM1~z0J5Je(>+(Sqh72p9OD24+t;Pi2I|+#i53`g~CB+z=9G z_~|qg8;RxJNxjH7sKv2y2;w&8X5$^~vm-&^UM3kBy`Wd;v$(<#Z~`0!Br_!!SOG!M z&sW>AP<(x){C1Pdf0GvV+y1+o!cwu`;L)^ zf?+M!f<5u!8oD&?ny=Pt_hD>ka~qpuPvTwi&jCqX6#uvy1OcsMy2MluMM#DfdP&x3 z1B0y0)pSn-RaVElJsiynQN%gM@TQZ&HhOIm9#Mc+jbO6s1-v0b2aKy0cfB%%ePQGa zoHy46Hfp@FzCE#0-pPPN@bm02?5%G5D?c+@K-8C;U*@|Nq`Ym2=>#*;(VuBjT7UKg+mD%m|zyT*K2mSGJv?3jcE=A-#VcJf5o0}NFig5ao=H8Ib;P?3`}Zjogg zmXpI;`w%@Acwjjbo`6ElRGq}QZQObrp_6iaT(fvkhovM17x=hEC$Hee%c`^ex==qY zAmpm$K+I@(NL~mFp3YL7=mm5-fonmcV@HeF#qhu{9OHcz8R}O3NhMp%loX)2F)ORCB|McjQPGiV`U1CjLd@*KolCz&G3mTFDBtq*ZXhqt`5z_@?ux8xF zmiqdE>o5o972CI3zN12vBVFrLJ+KSM#zaM1q62v@3qV*F8Nq?P&rg!r?h~vG0~07{ z!m)#bLIzQ(cPU+!ZRYg!hrDjqoouP9u`+@t!tqDJKPsf>o*Iregw^KC(|Ctxyy9`IQwarN(maR4Hf9!Dw~ zd3?XwzPCEyMbW@x1g>xJ)ZaVM5DA#p!-~S$_qR+4&*Jn?L%bCpyFE;*^<~(X9fw2U z`n4yXa?k_b(n<^Go$&u;cTdD+6=I8kv|!Ww-YH)N_vHXchgckT+~7nuVApG35>u4^ z4G7L5b5*psbNYU{$KTPAi(%+dl+a$c4FHUl87WLku&+J(i;eq3N&qMJ9K`noD={r- zYmVo)Ot@i|YNzyQ#qU7s$(EKDhv}JBIXSr-eBYD*-lmVH!UW^wlxtmb!=+^ur%eW4p*hK7b?@8^G5SX&>bYecdU^YaaBR!rD?l%rh!;S*v2$OYCf>Y16E z1Fnne=UyM+X4?mzL`3Ne_nDRyyY(p#_9LmJ*YFY}5<-S#De@T2g?5u#qulQh)5W{0oWuNs~6 z`Kb0*YTqJ=J;;*^A3KZKGva!CdlRMX-h;hhH%n*FT9Vs8R&MPjkEqQXt25=QVR=xIcT?&uHV)kumkq*)}*Bpkm zseKLyM0szi3Uc?<;>gmeU>fv~4^c8;H<_$&U9FTu&bYZs2qj&#ynxkr+k( z)9ElXvCvd+<7xPHYrxgsUoY25X<2Ox3LFH}kH5Wi1Kbp}dogHN+`9Km;@QsLG9XjL za-*HQ$f&>~{nTH}z)+Gyih*tdvU<#vkHmHsDA==qlix3r#7DIaDoE885_$^1NYUJjpjV|?F6a!kCLeZ zq?p{olw3Z4%e!~)%H7b>WdlA&bAMTT`RGI~(oAF@CD#bR!Tnhyzf?OOLeXJw__i>% zbFP8=)&FGTVLg2FH(dxhdes_~YgYR}y?<*} zSJjvJKfDPbmGl8QMcZ$&6OJ!{%=oH?Rk_V6y;Mnr^XHPF$7rUz`w{d)@BzfE*Hy1KR{x0JH{ zv;Vk`4thWPP8Y`?1~;9WE_EIy4sxBGquX2KU6%TPT{01!UY^-_YEXF$c)r+C^;)NX zqo#+D^3N{OMo@Ad`Gq&TEht%wiHS+OKi2cL+Q$2ZF75vf&_N$K65LQtGZmMt2&_vF zL}ywClFm>cjd&-it#6N5JZ>EQXEEZ4G_MKHr8bxO@^{lNyUskNK&s;O)Li^MX}FmYU*SuDMYbe94Su)-H4rAVPu~yrE9!ok3EBV4Ghbrrv{$33w9!U%A7ug(_2@-U4 zbTnO$Tuu0+H5?j=(;Z%4e#P)$T9@wpY2ba_K*M}M&7`Q0p%Rbx(~EUrVr#61SBDup z-oJOvKjWLWA1u;=?NM2s`H8lXu$d?*@ey|Ui$cxPSAOzvy+*mzKH|7xCSnzqXO}8E zspIBFk1h?JTIA>3O(MJy+9!fB6r@d~4Obk7#rr=4s1x`JB988k_uGB1+{6KLjAcDB zIYEbhu2@2FO-xh3lOxOv|0oHZPCM{Ar1xnC^{~g52x>u-($xy zA#p7NrHl^g{CBUK67y8{C@y@-+#0K#oIE_>R_oY(EC~p7?Fi%U57qnGEAI}5EF1+q zudJt^8=qmkAftM5Fv(=Zcb}Mj4GBB#v(W(drkTy?b=CN0BHvbSNfIl{mp1?>QK!j6H*y~ z*&W>eX%?LPsD7Ju@MmxL+or!)pdsfFPHK*?e=*_scg5|;66@tO5t0=E*t@%1?CwPR zbiTXzDy9$Wz2{h>@p~|&Y#3pFuOr1p?rc6QE32@&D1z?53m}z9+oFxnj#S&#(?VZi z*zP@utP%dpt3!yy)jM z0~39`oSbnNZ>E#{gExuW^B<%G4GFaQy_aap`?j`g-&_Cc6rn`Y&+bBe_V}b)M6PNWmwVHO9XZ5G z^b3aIH8wU9Y{%DQcR!RIo(pgss5`Oo2X8b2)}K*lD&04xmU6+pv~JgH@=)?}DUT=) zPF1>>?a%wzZYd>q_gL`YRz>O8wJLT;dwap@8a4et-2m`spksQfNQ)5if3b^mlmGw# literal 0 HcmV?d00001 diff --git a/docs/assets/openlan-logo-orbit.svg b/docs/assets/openlan-logo-orbit.svg new file mode 100644 index 0000000..3bdf79f --- /dev/null +++ b/docs/assets/openlan-logo-orbit.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/dashboard.md b/docs/dashboard.md new file mode 100644 index 0000000..8099903 --- /dev/null +++ b/docs/dashboard.md @@ -0,0 +1,155 @@ +# OpenLAN Dashboard 视角下的产品介绍 + +
+ OpenLAN Logo +

OpenLAN

+

从 Dashboard 出发,理解一个面向企业网络互联与统一管理的开源平台。

+

+ OpenLAN Icon +

+
+ +## 引言 + +很多网络产品的介绍都会先从协议、拓扑或者安装步骤讲起,但 OpenLAN 更适合从它的 Dashboard 来理解。因为当你打开 Dashboard 时,看到的不只是一个管理页面,而是 OpenLAN 对企业网络互联这件事的整体抽象。 + +在 OpenLAN 里,网络不只是“把两台机器连起来”,而是围绕一个中心节点,把用户、虚拟网络、路由、VPN、策略和跨区域互联统一组织起来。Dashboard 正是这套能力最直观的入口。 + +## OpenLAN 是什么 + +OpenLAN 是一个面向企业场景的开源虚拟网络互联平台。它的核心目标,不是单纯提供一个点到点 VPN,而是把分支接入、远程办公、跨区域互联、代理转发和零信任访问控制,放进同一个可管理的网络平面里。 + +和传统“连通即可”的方案相比,OpenLAN 更强调三件事: + +- 让远端节点像接入同一个局域网一样工作; +- 让多个网络空间可以在一个平台里统一管理; +- 让接入、转发、认证和策略具备持续运维能力。 + +这也是为什么 Dashboard 不是一个附属功能,而是 OpenLAN 的重要表达方式。 + +## 先从视觉入口理解 OpenLAN + +在 Dashboard 中,OpenLAN 使用了非常克制的视觉语言:深色背景、清晰的导航分区、统一的卡片与表格结构,再配合简洁的 Logo,强调的是“控制面”而不是“营销页”。 + +这种风格其实和产品定位高度一致: + +- Logo 简洁,表达的是稳定、边界和控制感; +- Dashboard 结构明确,强调网络对象的组织能力; +- 视觉不过度装饰,把重点留给状态、连接、用户和策略。 + +从这个角度看,OpenLAN 的品牌和界面设计在传递同一件事:它服务的是持续运维的企业网络场景,而不是一次性临时连接。 + +## 从 Dashboard 看 OpenLAN 的核心能力 + +### 1. Overview:把网络状态先看清楚 + +Dashboard 的第一页是 `Overview`。这一页承载的是“控制面视角”的能力:节点状态、网络数量、用户规模、连接情况、运行信息,都可以集中呈现。 + +对于运维人员来说,这意味着 OpenLAN 并不是部署完就只能回到命令行逐项检查。它提供了一个统一的观察窗口,让你快速回答几个关键问题: + +- 当前节点是不是正常运行; +- 系统里有多少个虚拟网络; +- 有多少用户、多少接入连接; +- 整体资源和网络状态是否健康。 + +这一步很重要。因为企业网络的难点往往不是“能不能连上”,而是“出了问题时能不能快速定位”。Overview 页面体现的,就是 OpenLAN 在可观测性和日常运营上的价值。 + +### 2. Virtual Network:把复杂网络拆成可管理的逻辑空间 + +`Virtual Network` 页面是理解 OpenLAN 的关键。OpenLAN 支持在同一个平台中管理多个逻辑网络,每个网络都可以有独立的桥接地址、地址池、路由、转发和接入方式。 + +这种能力适合下面几类场景: + +- 不同部门使用不同网络空间,互不干扰; +- 不同客户或环境共用一套基础设施,但需要逻辑隔离; +- 总部、分支、测试环境和生产环境在统一平台下独立运行。 + +从 Dashboard 的组织方式也能看出 OpenLAN 的设计取向。这里不是简单列出一个“隧道列表”,而是把网络作为核心对象来管理。管理员可以围绕网络本身配置地址、子网、SNAT、MSS、OpenVPN 接入等能力,这让 OpenLAN 更像一个企业网络控制台,而不是单一协议工具。 + +### 3. BGP、Router、IPSec、Ceci:不仅能接入,还能互联 + +如果说很多 VPN 产品解决的是“远程进来”,那 OpenLAN 想解决的是“整个网络怎么组织起来”。 + +Dashboard 中的 `BGP Network`、`Router Network`、`IPSec Network`、`Ceci Network`,展示的是 OpenLAN 在更大范围网络互联上的扩展能力: + +- `BGP Network` 适合和已有路由体系做动态互通; +- `Router Network` 用于管理更明确的三层路由转发关系; +- `IPSec Network` 适合站点到站点的安全互联; +- `Ceci Network` 则为特定网络接入和互联方式预留了扩展空间。 + +这类设计说明 OpenLAN 并不把自己限制在“单一远程访问工具”的角色里。它更接近一个可生长的网络平台,可以随着企业网络规模扩大,逐步承载更多互联需求。 + +### 4. VPN Clients:降低终端接入门槛 + +企业网络最终还是要给人用。Dashboard 里的 VPN 客户端管理能力,让管理员可以按网络查看接入终端、地址、远端信息、在线状态和流量收发情况。 + +这带来两个直接收益: + +- 用户接入路径更清晰,远程办公更容易落地; +- 管理侧能快速识别异常连接、离线终端和活跃状态。 + +这与 OpenLAN 的产品定位是一致的。它既支持中心节点和接入点之间的网络互联,也支持通过 OpenVPN 等方式为终端用户提供接入能力。也就是说,OpenLAN 既能连站点,也能连人。 + +### 5. Users:把认证和网络管理放在一起 + +很多时候,网络平台的复杂性不是来自链路,而是来自账号和权限。Dashboard 的 `Users` 页面把用户管理和网络对象放在一起,让管理员能更自然地理解“谁接入哪个网络、以什么身份接入、租期到什么时候”。 + +这背后体现的是 OpenLAN 的集中管理思路: + +- 用户不是散落在各节点上的本地配置; +- 网络不是独立于身份体系之外的静态资源; +- 认证、租约和接入网络形成统一关系。 + +对企业来说,这种统一性非常重要。因为网络一旦进入多人、多部门、多地点协作阶段,账号生命周期管理就会和网络可控性直接绑定。 + +### 6. About OpenLAN:把节点本身纳入产品叙事 + +`About OpenLAN` 页面虽然看起来更像“说明信息”,但它传递了一个很重要的产品信号:OpenLAN 不是一个黑盒服务,而是一个开源、可审视、可追踪构建信息的系统。 + +在这里可以看到版本、节点身份以及项目来源信息。这对于开源产品尤其重要,因为用户不仅关心“能不能用”,也关心“是谁在维护、版本是什么、系统处于什么状态”。 + +## 为什么 Dashboard 视角很重要 + +从 Dashboard 来看 OpenLAN,会发现它解决的问题比传统 VPN 更完整。 + +传统 VPN 更关注“建立隧道”,而 OpenLAN 更关注: + +- 网络对象如何被组织; +- 用户如何被接入; +- 多个区域如何互联; +- 路由和安全策略如何持续运维; +- 管理员如何在统一界面中观察和操作。 + +这正是 OpenLAN 对企业场景更有吸引力的原因。企业网络不是一次性配置,而是持续变化的系统。节点会增加,用户会变化,路由会调整,分支会扩展,安全边界也会不断重构。Dashboard 的价值,就是把这种持续演进的复杂度压缩到一个可理解、可操作的界面里。 + +## OpenLAN 适合什么场景 + +结合 Dashboard 的能力,可以更容易理解 OpenLAN 的典型使用场景: + +### 分支机构互联 + +总部与多个分支之间需要稳定互联,同时希望各分支像在同一局域网里工作。OpenLAN 可以通过中心节点统一管理接入网络、地址空间和用户,减少每个站点单独维护的负担。 + +### 远程办公接入 + +远程员工需要访问企业内部系统,而管理员又希望清楚知道谁在接入、接入到哪个网络、当前连接是否健康。Dashboard 下的用户和 VPN 客户端视图能显著降低运维成本。 + +### 多区域网络扩展 + +当业务分布在多个城市、多个机房甚至多个云环境时,单纯依赖静态 VPN 配置会越来越难维护。OpenLAN 提供面向网络对象的集中管理方式,更适合规模扩展。 + +### 需要代理、路由与安全策略协同的环境 + +如果一个团队不仅要“连上”,还要同时处理代理转发、路由编排、IPSec、BGP 或零信任访问控制,那么 OpenLAN 会比单点 VPN 工具更接近真实需求。 + +## 结语 + +如果只用一句话介绍 OpenLAN,可以这样概括: + +**OpenLAN 不是单纯的 VPN 工具,而是一个面向企业网络互联与统一管理的开源平台。** + +而如果要用 Dashboard 的语言来理解它,那么答案会更具体一些: + +它把网络、用户、接入、路由、VPN 和策略,收敛到同一个控制面中,让原本分散、依赖手工维护的网络工作,变得更可视、更可控,也更适合持续演进。 + +这也是 OpenLAN 最值得关注的地方。它不只是帮你把网络连起来,更是在帮你把网络管理起来。 diff --git a/pkg/public/favicon.ico b/pkg/public/favicon.ico index ca2169461e7e2fadbe420f71e58983f69f103f9e..da16dd7d10475730599e8095e1db66db943362ec 100644 GIT binary patch literal 4286 zcmcgwTWnNS6um~<(vr?h?{waG?!EJ#&UB`4+D=>S!-8$4@)VIs@Wa{|6+}&xgoiZ{ zBuLaxAp8(e{)i?|tmYgqTU zJn(&t0lii;{jN;VU3Wvq=N=^HGP>r1dfj!?=WLRvW)=Ou zzRb4|l!JvB!h_i03WVJ2k4pc;@VnfXxuAQ!#Jl#^Lc3OLOB_K7Q1sfOlyZgrtIc0L zUi*W*uPN84JLIlIEZ{^w;zegNgzl!W61LgLG07uk-(s9)?OGEy{Y)AS3TtCNf(B$O0=0Sx49q{F)MNyXnKIUsr$ODQje zD}Kv4v?Uyi!q~JM!L}awWo&88VtnYYZM0)#>=%q}{}&@8SJ9t~iC@k|F}3{;&Y4e`lF#%e@Da_pYys*g4mvSAouKa9Y^pi){!$lf6m^&5mA|vrbf?2o zSNwPJndi(i#=FG%>yfaxN^0GC@$XzD*jPm#IL2@IZKveoJU(?%XKc#;W+y zu!s2PD0awwKfc(!2w&C;b(i~F{!Wg_RXP8?%@&%3+pOs!2eVn*YnWcW%Jeo=Wh3NY zpG{eABu!oTx0d9;9Ba9E?jMuu=<&jIY{=t5lOpX8j%J;}eYw1fJc zmH`7B4`ng(R8ukkoHeQ*P#1MBhqthwoJC7(hR=4>z{!byxc1^vyfr?FoaIBJwC)li z#{1qHOh?=p-krhdyY1+BAqF$u-;6dVF`gNQc;EshZ53XZ_{3a;8PT zJAlc{{n+;P5Vl+!KzxHo^)KZ&`xxuNWD36>xdMFf4ZfJ3kv%;sbeSbG0;*H`1v zL|P;Tw$;8|ntylyO#~55H6XvkM55Ot`|s-UrwtzAp;7iPZ;A8!&L2`!8-?FD6n`(^~y1I{*rIkQfo@K ztmzC$etEX!8M9g9y|a+O_opV5u+2V>k%tO=6zs~+-{kxB-d5o1b4uQqHv4E}1=#X! z?Je<%cfN}5AH;fTG>$(n?h@IF=_ld}zcTD~ynh@G%Uw`n#k*fcwudFRwswV-uwCi= z;{8iu%iY(Jk-K2U_fPUbsStavgq;z;wZ8T?P3n%uJ8__R7rZU{{;5#sT5O=s+vJ>B ae!WJ^*fH&qzHjEuyf<%lF{Z|} zHa&Y9WWAZPgE9LWW9sW|zKbynDC>e${jgeNu0x>*Iy5muK;_9#_ms%>ci_N*?V%g& zT!r)?rmdlMcKj-XBVihR3Exy9&BQbhZigNHK9C;_OCa$d;T_`KReeC}y37Z~z6ut= z+$!WPV)_Z(7*8VI7A}OiEq@-l19YrHHX^2ept-F+Xg=)*ci6nj&hh6}wWW!#7M`^6 zu0U$dPOy2!Kcw1X_TwSG8kl0^{SB$>u|9r(kRnVo*8l7Ar~jScK!`yf=rv%#fHtKJ zIc@dK+|$}g+QU}2e74XnYy4@yEqnlf!XMBCd*t((tB!W{@Da$?@30I`%%!h#>dT6s z@lpFbLH8=h@O(aV)zN+^xaW>+eF$B1>8qUjvf{Tk`eH}-E*Jj{(i`RTn_Y*#_K8n< zHe_pTwqAA~ol3;NF?L?_eE&lFplo0H^62-1A3YmN?~|{M>d+}Wersoh=UZcUT_N9o zJ^GDV?Vlju&esV_qf@E)dtz&`7lZbLTLk&cE<fOAn;)){pLITdS_n2fd2KFF)8i1^xyX$GfB-gopB=`uD)Kku11w zUBA$+Wc+#-e3li9A6J-ksC64f{PtOJTbc2PTDMWeFPp@EIQ;7Mp^5avFgbunDf<@O zbqT$0BaFWb@yzyO(tTy~L4yWqp0*OKABq3`ST^^ zr-8rT$N2SO(zLJG`gQ)WxjXpt;#ODZB=y<%+aDvnC%Pn_C!?hpOpBrA7zF_a^* z75Vs=6JMdW>*FspLebW*AOC2_w~+M^<9~V~8|$*3_;qh{?@D@C)%Rc8qqt|y1kxL< z%NX ztw`$~Zw!15dXH6KsuAtQb$+U6d&cij$k&3-LQaG8tB~`E=>*uujk{zb`7vgpGVHKs zNz${?k~PMRSN(Eh>WY=i607Uf&dHWh@njwuQ+Yh*WXq^jJ|$NhlguL%Dt9trYLfXx z=S3+w-pX-vQh6um&Q0a#jLVeGom2TmRxYbc<+Ei=ELHAgY5nhP$IFdlQZlZy7*>t5 zsuPLS@3iVE>I3QDY4KaGpbyusBOC>~mQl{J3$T9{c#ad-yNDj z{xz>VxjJ7`UX1^((Eku*^J&QWeK>W)KyixmeV=}sy3qdB4t=c?`PcW7y_r|KE^V{W zo^3ivZvk}oefnwYiuHd0ZS;Ex+15UHIy|4nE98F%>D&#;b9UdaOH)^@{|#yL0?2kD zR-ki)^A#kiFUr4c&_>Tj`EG$b;361qX+(Yps-Fpg^UlRWeJTETqTM2pkBqrR-oHNQ zIX}51`la}9O}hs{{-;9+XP>m2pLyq z|65>R`*e-L$gG$&?+$l9@=5ec>c91Ot@W>G!Y1&5&CfvQop&xK^vdzSAMLewSq^8w zm!R<|IPWUtU(aH7pkJ2%Ae+UMt@ocX{x32fs~~-DQp{MEqKmIa z(7MsROlM3=zYM3tDG@Rl+vmck@F(cAJ-h_|dUoqNDyg%m`yhG0M%KXdmB6n+GCXR+akrSXSKekPPRwtyyaxrg>I)m7e%QD1R32L66h4)Q7zGLLb4kUfCM$Rfo=*pmned=$y0@Xzeva`a50Hx!TuLHy>o< zb<1MpR7juIlg`y%eZ3c61)YOvFY!HO{1$<1V0+t#qp8=pc7>tv4s7ZAZgujt*ZxV@ z<}A?M8tb<$)ZW%#NxOOQ38cr(*`X|_f7`w%I!&N;pB}d&+Sk&q2L%3hiSoSuou6FN zYySr6i{St`I3&`&2A+Wi&>DQJ2;N3l&xL-YndPxKXSh1Yh2ifRGjf43mv3jxh#AIQ RB@Q;Gu`z|y8$}zn{RjVJr#}Dy diff --git a/pkg/public/index.html b/pkg/public/index.html index 0a55e84..fb3e430 100755 --- a/pkg/public/index.html +++ b/pkg/public/index.html @@ -787,7 +787,7 @@ select option {