From 9b1273d890bd46cc2035a81ce1bfb95702baf9d6 Mon Sep 17 00:00:00 2001 From: LingKa Date: Mon, 8 Jan 2024 09:12:57 +0800 Subject: [PATCH] feat: deploy github page --- zh-cn/assets/image1-0b23a908.png | Bin 0 -> 315274 bytes .../{index-25ae7126.js => index-015cf939.js} | 4 +- .../{index-65845b47.js => index-0b4fd2ad.js} | 4 +- .../{index-bb28ce04.js => index-0bd243e2.js} | 4 +- .../{index-8a16857f.js => index-0c28844a.js} | 4 +- .../{index-4e03f569.js => index-1179d885.js} | 4 +- .../{index-cc7824a8.js => index-11edd425.js} | 286 +++++++++--------- .../{index-93097ad1.js => index-148365b0.js} | 4 +- zh-cn/assets/index-1c51c928.js | 77 +++++ .../{index-24fab036.js => index-1c57aced.js} | 4 +- .../{index-8c16a843.js => index-1dde53bb.js} | 4 +- .../{index-494dac65.js => index-1e192479.js} | 4 +- .../{index-1e4d90fc.js => index-1f712296.js} | 4 +- .../{index-dfd283a0.js => index-2530d06d.js} | 4 +- .../{index-ab5d85b7.js => index-284b9c1c.js} | 4 +- .../{index-69ce89cf.js => index-28dd2373.js} | 4 +- .../{index-2c990cf9.js => index-2ee8a4ba.js} | 10 +- .../{index-4270ced0.js => index-39390118.js} | 6 +- .../{index-e197de7f.js => index-4b956329.js} | 4 +- .../{index-b77795ad.js => index-5076d4ea.js} | 4 +- .../{index-8bcfd31b.js => index-5689e7f4.js} | 4 +- .../{index-047539e4.js => index-5968a39d.js} | 4 +- .../{index-6a3ed4c3.js => index-5f61d62d.js} | 4 +- .../{index-5fa4b651.js => index-65e0a878.js} | 4 +- zh-cn/assets/index-67a528fa.js | 30 ++ .../{index-9cbd4195.js => index-6f20c5b7.js} | 4 +- .../{index-f82a02e0.js => index-82a24597.js} | 6 +- .../{index-86e42443.js => index-90593fbc.js} | 4 +- .../{index-9edebc8f.js => index-a27a1569.js} | 6 +- .../{index-fc5f1793.js => index-a84bdbd8.js} | 6 +- .../{index-7b1bdbd4.js => index-b2f220f4.js} | 4 +- .../{index-58491811.js => index-b9ee750d.js} | 4 +- .../{index-1f6cee43.js => index-c832920a.js} | 4 +- .../{index-2bfed728.js => index-dcc07e36.js} | 8 +- .../{index-073c84f3.js => index-e6f44fee.js} | 10 +- .../{index-78a34e98.js => index-e7ccea1d.js} | 4 +- .../{index-3b5176dc.js => index-ffd70994.js} | 4 +- .../{index-faf3ce4f.js => index-ffd93bc8.js} | 4 +- zh-cn/index.html | 2 +- 39 files changed, 331 insertions(+), 224 deletions(-) create mode 100644 zh-cn/assets/image1-0b23a908.png rename zh-cn/assets/{index-25ae7126.js => index-015cf939.js} (91%) rename zh-cn/assets/{index-65845b47.js => index-0b4fd2ad.js} (92%) rename zh-cn/assets/{index-bb28ce04.js => index-0bd243e2.js} (90%) rename zh-cn/assets/{index-8a16857f.js => index-0c28844a.js} (99%) rename zh-cn/assets/{index-4e03f569.js => index-1179d885.js} (97%) rename zh-cn/assets/{index-cc7824a8.js => index-11edd425.js} (85%) rename zh-cn/assets/{index-93097ad1.js => index-148365b0.js} (95%) create mode 100644 zh-cn/assets/index-1c51c928.js rename zh-cn/assets/{index-24fab036.js => index-1c57aced.js} (93%) rename zh-cn/assets/{index-8c16a843.js => index-1dde53bb.js} (97%) rename zh-cn/assets/{index-494dac65.js => index-1e192479.js} (97%) rename zh-cn/assets/{index-1e4d90fc.js => index-1f712296.js} (92%) rename zh-cn/assets/{index-dfd283a0.js => index-2530d06d.js} (95%) rename zh-cn/assets/{index-ab5d85b7.js => index-284b9c1c.js} (96%) rename zh-cn/assets/{index-69ce89cf.js => index-28dd2373.js} (95%) rename zh-cn/assets/{index-2c990cf9.js => index-2ee8a4ba.js} (99%) rename zh-cn/assets/{index-4270ced0.js => index-39390118.js} (89%) rename zh-cn/assets/{index-e197de7f.js => index-4b956329.js} (97%) rename zh-cn/assets/{index-b77795ad.js => index-5076d4ea.js} (99%) rename zh-cn/assets/{index-8bcfd31b.js => index-5689e7f4.js} (92%) rename zh-cn/assets/{index-047539e4.js => index-5968a39d.js} (93%) rename zh-cn/assets/{index-6a3ed4c3.js => index-5f61d62d.js} (95%) rename zh-cn/assets/{index-5fa4b651.js => index-65e0a878.js} (97%) create mode 100644 zh-cn/assets/index-67a528fa.js rename zh-cn/assets/{index-9cbd4195.js => index-6f20c5b7.js} (95%) rename zh-cn/assets/{index-f82a02e0.js => index-82a24597.js} (99%) rename zh-cn/assets/{index-86e42443.js => index-90593fbc.js} (99%) rename zh-cn/assets/{index-9edebc8f.js => index-a27a1569.js} (99%) rename zh-cn/assets/{index-fc5f1793.js => index-a84bdbd8.js} (95%) rename zh-cn/assets/{index-7b1bdbd4.js => index-b2f220f4.js} (96%) rename zh-cn/assets/{index-58491811.js => index-b9ee750d.js} (89%) rename zh-cn/assets/{index-1f6cee43.js => index-c832920a.js} (89%) rename zh-cn/assets/{index-2bfed728.js => index-dcc07e36.js} (99%) rename zh-cn/assets/{index-073c84f3.js => index-e6f44fee.js} (98%) rename zh-cn/assets/{index-78a34e98.js => index-e7ccea1d.js} (89%) rename zh-cn/assets/{index-3b5176dc.js => index-ffd70994.js} (98%) rename zh-cn/assets/{index-faf3ce4f.js => index-ffd93bc8.js} (93%) diff --git a/zh-cn/assets/image1-0b23a908.png b/zh-cn/assets/image1-0b23a908.png new file mode 100644 index 0000000000000000000000000000000000000000..698d6fe90bbce66685be3eb50af2f16991fbdeda GIT binary patch literal 315274 zcmeEtg-={j+vnhJ#hn7h9g4e`;_mM5?(P&TP#lW8yBBwN_u_5^_VRvTR+9Y(HrX(c z$uP`4_c@RJ)kiJQZDuO@|-oUp%EHvFK+f-p8KwPMy|W7}AatT@^u)@aYGRZDzS3{yz3k{3s-G7`P6Vob z>TeeY?MZ;ze^JJdfWqO|JWHkXrc6LNj53o$kR%MMM=dlRnz?3Ww-8d18cacv zsL|vDaC0|sP=0U0h{IX6o0U_`)%9 zY9PzN;ij&3mxmD}Z%`xpC-coOcGvHFt|Wg_A2O)^`geRpWER*Dd?>MLcpU`LF}m5{ z0GK}!=vsA1?fC>OCyCd?IC6ye>po^3D_A!w$Ys|_Bp<9B1B8SfWoR_#?i$OK0RiF$ z9kJy`CnAExK}Uu{4(bUjW@YtM3YiEtL-Dm5mj4LUO2^8ET-0=b^eWzT4WZl5{Y!PV z&~?NE$%B~EKN(okfy^QFEBm3oOlh(>%|TZE%6*ALij`d z%`&U$lZIp-4OWq)=#{14niNT-{FW-H+05Zv0ymai^0&nK2iVE@p`An(mz{#AwPJS_ zzDM|QF!o?@h`nxqYpOtRRM*?D_h2G6a4-y#pRpmg^29?)XOgg(?LWgwZOfqsfg;0p zg_BgllKgS_k@8E+5ca4lzKn!}yTd9{1)HM=fc8eHuIw9?A0d8|{F88HVDg6%BMBre zc-`C;Il>NxvJO`uyUvY9T=_xC9E~FtO&*F)=zz|P`Y>p8Daeb1@@L(F;+$u05ZkX; zL>POUf14&Z-QKCzzVkMnW>AP@Xr2{A@P4tb`^?^L4FRPG;!+Tb)iylcAK^TL)d7nr z_+?kOnX!7_g|@KwG4#cb(A$M$&excOMT$rWnS#d~zvS%q+1IhW)VswSh5286ymt51 z`>X#>s|qK>NW&)dTOEs?1%G9b_l}MJMNG)`ifM}Cs(V-a|Ph?jA6d~EY74A`)k8^H&P6Ud)i28eX z$0GE!E{M3=rH|kX1Ix+9$@w^oP4}0)TZkAmGR>F@fi9?qzO|;1rLCFQYu_IN!pI5W z#|h$64}xg+=W!1bfE2+I6(S%PftCg*+7tRLX+Sd;>>&@0Sq;9>E4~E2YQS+CBr*j% zxW)Dl5jzLHvX}lSl*k?a^%9St1XftM7?zM(oDNm%53YkmswBy$&_5&*lF$hud!&Y< zv16iGB$z`q#$>ffC1S{=67jP`9={Psnp~9L?Y|^TNs9>emMwaW@g6t_Up*4GC=%Zx$~MRX6GsFBl+-LB~sB zBeL)&Ir(8T?7PRwlFgghp3xq(CfzA{{@E|*Nb!^!EXi1k--O77uOQ3ur(^oHqLR|A z)T|n-kWw+1np4LC*tpZL2ewU%V+$^eng$B<;f9|UXEWRdE=ng~lBF8*p_N!mSpKqD z(%&K8G2B(K>#VAz=Z`OD6{|MI|?>C+_YcUI_?UYS8?h39WqFCrC5(=&^tG7U} zHKbLr{+|T2J2HkCcO$kLswGK%W!w7Aqta6+>obc+-$kp6cNLVF{4Q8?Og9PJhoSWr>*B`Dz1G zD)OTbBMdK$Hda)k&?sP+Vo;WHZg`Y>vSj2qkM-~A8J+XS-rCnlrV+O!cjfWo69!EN zx|B~T+$mm_p_R;)H#+z_*)ff{nOvUxM~&0j>+NfzwmfULG1K_yUrpaq511L(GS@uL zRnFCTi;1?0oOplnW_fXY!Six>ZCvJg#oTD_&F|a|uMTSc)wx(dG1^VsS2}abESZcp zV=&3O`SKY0IB~^y@G>#EDtF*EbiwF{{SN-l_ZBy}5{DVR&U`QAuL9!G*AjFiA!DMo zx6*g}VS>t0OmXB}?ZPDBZgxrblZ-aIA?1$l54|X!Bl#ZEY8+pb4-E!F3@km$8SE^= zceqs?SB^CrUXFH#c7a}6L-9W)lETK$dm}?91gyw$N~6bd*Ac%k=kY2qGch`tpM9g1 zqS*>P2)G$6*Zw**8QB>1*TguW4n}AZx>0WM`%3+jgZmTw7+e}07Gdnhd7rrBDDL!G6*Mn0SJ&G^g_ z=E?2a>r22Fl`nQhg|d9SGH$=zHD8>Ij=vWQ&>%6s8bI?0apap6?vHt}UW^-#udw5% zW%9L|#NK6uIC&n3kFE2?u~g}ARNbr}RQ-Cl6j}*92r)%CWbnS!`QzqdvSKn*dlK~z z+eRar5sTqmeW%8_FJW^3-?bji8VwCCKf^x#>;4P#X4Si|y~ads?Ec0mM-@pWYE^S1 zi~0V!N^6;v8lO6!txF%?z_07CRSUAZUY#>_j-%Wo+)u6Ncg!d0>`T__HQT!b?J;U) z!ln0W>8gw+zI72@$1?|8<9AwPjmp*@T`J9Y1C8M}NMBvQCa*@Ues2_5i*L<8gE>HH z;E{1vJ^fezy}iuKZRdPJGkax)uh8q~Vy??|>qZCqz3Vx``l9lMVwX+V_FE)`y`b;b za8G&ABC;5}5B8C)41iTv0`wigcKr{TLIok6-d z6+#Zq&VP{me|ph_D8I`gXC!3&<;nDV78>3Asbw}Zscj)+e#VLKbH6sZEs$+t)R4)G zZGXPx(RCx?XYe-T-t!_X(x&zjuh-$rH?zGyZ9jczs8nQU=Crs}iJlV3kl9J#`E*E| zL5p2EpnKN()A4NJ4sNl{?$VC8le+ckUsJ*+|JpCFbo;h{u@jjiZG~=DzHa|~{F>Yz zuDo&|RxT*lyYBoSwvLJW{k%^#9)CPnU&r_7uMD2Y#odKIxbow^|2{0)I}Yot6>xbk z_dU2g9qbBxx4e+MxbR@`;eRwd{=S>irt8sZi5pJb{L*@P7sjz~7qfZpJLtW5&wuus zkD?@yz+d^k_gM1ebbGiO6cQBlsWPeTAFV$a=vN}dr6D%xD}?_BoFH!1%6n2^v8!qU z^!qopvv8>^=;B2f$s-7TJs8evh;9ZLe|9jEEchR%2*qK8mv-iAO6SS&pZ|iakzSH? zQeQ7zx#uUIRMt1Ma`f+l?I!)e1R1^kO4#?=08T+-B&jF^0(nw^K>ooX&@=Fo{}Bk} z!UO{S)dzvNQ$ZkX`;1lvUf>tdhTkPbLGK@5IUPlbz$t8Qb!=5nVVap`7^?R zp#7l*p>uq68AXiDV1%Hca4$W5JKxWi+0W#I?YfPB5huM49zNTRqRB{S#$>Dc^u#bE zLNq=}*RSR8F}d1bAFglUhp+1pY+NqFQl-q24VaPc@EN>eX6-_}+4%ISiRO``l(1)^ zgNNqkCO*A(9;B1nv$Fds)ZQcb);CJi*{olrZ=jDB%Bie;tPJDBz{bAipg@@-_}- zEw}kj+kwXC8fdk|lJJGGW2X+yO}&%t5mQzktMXInViP)SoLJrE=oW}LGCb~5K~xtj ze6ok!bTpI>ckuy9-1Mj6^~~UC_Hf^fnBpeG)e?#r!FnXkyP)!xvDPt+)tu=8Io+er zYq-(7Uhu1_4TGB1d>j%Z7Q05OROjw20$Sg7t-OLC!b?0{VzWl+uxHOALT5%rvVife z@Sk0hPe1SMME6R6S2YWv6qFlVo)6J1?-%-=4bx7w;*eJ`MQJrT z4DRypnboVE9hMLm>8dGe3SnaBw2+SY=PP2K>mke2wvwT%tm-4vkVN5*i3wG~rH*)$ z5V57KAUf9sCwq<7@ zz+ZXKJrE|eyYXhBXvPCuIc6R^cWxK>1G(j(HTk{kp< zv%igq&%+0DKTUMyPPys4StWfmuAk?5gHOduHiF?MPsH9t8gtgIiIU+*`w~cCFT&31 zuF8|Mg#~22s2<->!;81VTEB^=saQ$5(sbjV11r zNuT>?{g!Xd(6p&1HvFsAc^4CAevuw$2tOd{09TZQ6Ak! zWP9GWhu@-#{35{bV^QC0FNrta(+B+^8BL2#)rSvvuAw5bKQU|b!_ynAB4^3|JiwwX z89CuLkRq`dO~pb2r{I6Tn7i#f^`?Dgr}b?~Ct1NEZpvenyIhmoIDO?^U$jFgc-CDS zl55b)?5fD$a+eM6q{f@JIQ_eKPq;g%_e{ffpLoI~m+7A3Xs`8h<;&0An15(?_-#=U zRJ6nmr+|K*>PSnHh2uvF26G993X3Z7Iz5;RQUt37IYMASD1+u8&A~YvXCd^rsO`bT zAu@J+X}WpS_F%oJyZ@&DeVM7jzkK5&krp%-lonj`|Ls5LFYQm@-wqN3izCealyi_d zF-k?G1NsD+0Idi%19uoG5{vxsK4T*>#MG#$kh3I{&ph4gcr~rB&JQ;Ex^cBVh1_?q2f*!&K zitt%V4ZaoWoOlCnW?Q@DBDw_56zTv83xbYP{fyF68d3|f5i^#Nhl2Afr=0yVcJt?q z(aNv@0KtJSkoe)esUMMH&0*J2rBMx0HBlQ$0!d~_N*Tg+Q4>jiikyc2Nu)*CLJ_B|z-KxKSoVv%?Ny44#u^g%}VwU109j)@-&kAK_o%?uszVi1i_!Mb7>7eZ>tBl zMGQqKM+AmjqK|(=6dMz=7S9mo4R_DhZ~11N@YpO_`puN^f^?sxfkcLqP_{KQIzu{B z*6Gj6u<8$^AKw$a;?)u-9Td8MZ^>*+Du^pEBY03Y#aKOi2AVE zji`X+9%vD`K5KDuaq0n*0fqq?Z*wxELhC~6F(yV+X4B0v!ZCb}VvPwO4(w4xRb$n( z^6l~<^@qLL8D`2xO>5faZw&W|Y>w4(hl1NvN=V4DXc;+82{RmKC=;35*4hl(GTK&7 zvwMx5&1KDMmn4ST3xA}RbY6{_C}a6y`-JH)=#qs=W5#Jt zL!`+jCkgX!CQ(TJJKN;{_J#||RPT1$xi+(6WxCGGz@gbVvW8vCS~3FR*Kez zjmWyVO*$$&lC|rKaIJ}rRk)3IBcHXLbB-(QjZ!qXBUd4}t$l(kjT5xUKo8GGj9nm8DEN5gh#SxkUPE?%C*oD+0@`Snm~R8 zA28j{Xm6xznNyxW4>O=E|41c8NKKen+&`#E81-M&`I>1V%_Iefc4(D(>$wqQovE!o z*Le4jkG=<+{85h|i%*O95=#?}i8SSGiaX+~#2H`~?>CN4Lvy-NZ*o+%Zd_`)?mSzT zO8q&+Q$q^JJWOkGh@%dc51)W99Z0?NCEVl8`(9sb2u=LOx*(j;i z-(>nE9Uhoif_SdRL$+Zq>J-6B%@&7)*ols^?pl5ETz3O4G!2Cn6-3oj)%J4Hvt|!! z2@4ZkRSoCmto_CjY-K7H#1iAG^738<%$HK=Qr8My4H1bLxUXWCu5)=BW!14@7o1{5 zY|ZTDmTcx33*_r;N0tZXmGiuc?!5;TpZjQTxVNb zPnK}+hxjq&CYL&LJVS0*+M3iZDj*1;%bBOVw|0bDVaAEdncYXeiaHFbixh;#;!v<# zU)pm)4HNY^iN?iilkrG6L|YP%v$xtHE--6WF>4H36GqvTH`XisER@jzr6`@ytV%lHZ(k3RAgSKfhWDyt0x zffMGqjK{c+7uafG7J?X7Y>lMH^lASPE+2 znlqK}YCPo|9pX#B!mYBznfo>Atq{uj2B2e*zH@Nfta&L#Td^J-T+`EOLEES-aWAr` zug1>gx$2)6FAdi?Ju=+sjJma5fOSd?G*Iqm>3Ds+_&T`3E|=K5{pK95w*q$&2Y+Za zv2MPkELUV`xseIGw+PcZ^L8I|b@Q~s`UL-iQzantFWB!z_37K5j0U~;3V-B@?L5L{ z`dnxN2g<{<(UM%y9)-?@E;;JW`g6%yM`$IrVjcU@G+juaC68?yj;1AP+}Qg&ZC?O0AESauu`gJv1OZzA;h7pvzz%Y!Y_T5H=>NA}4-mJtxd8?flu`wBy`}gLL=!QPjXCGrDW_WjLhnif&e<$|C~d zWvj9xN_KjZZLgVtA3DtSBrOQbU^R2lp#F_C;Lmv{&Ui>-E(eF_?uoH=W@T7fBQE+m z6xq2r6en#To0!jhet>PIkwD%ivR~TW5ryB`JWk9M!(_b^ueX=!;If?65_Rjao9EZ6 z)y$@Q^k)M*F5zvXUOe=SddOn4<-bd`?j0MI@H5tD_%WfEJa3!IQ$;=vZC&*~3VNB) z+!DY?n6v%HwBOkMv+!qxUCicd`gmofz~-XuG)SO`w2Ig{>A|z3k}KPr=XTR|Mz$+| zmA4lCXu34KYlb=Uz7~D3TIxrbVln_d-=wvH_T3Josdp zdL1obpzO&-Rh}Qpzn|WmdFJxeP8fH`F~&pEICbPW~tEQ^6 z39GKNIM-=LDR6QN!O&QeODry^^}-w77&OAmeP3L&wj*}E^MQ=(k>9kmJP5DVRRp`+ zH}1T}$}~f!byQeUz!L`M2OOd}m=b098g)e9uFXb!sDUB880e9GmdJim#}|<=6cKzt zFk`mlR-g#?7W^pZ;%Tzk>G%|sdx z3;Yc1$vN|2j}eDRmV!DtIibRUZ>;YTQNRF1_252($JguAHlSAJsYo(q^A$@Z1rBeX zP+=iaBScZ-2DfjXemn958vv{ySeaBoLJ9i|9MH!hARuTmd9JF>ysLGq%3ex!tMEhH zYYy9W83TJr6iYCAx2t#E2?RpD`Qx0qJNEzi$Es``-h9SEB*lv%#fs`Vx#OPkf&(>Z zBF$T3E?Z-zNf-7{m2eE0)|JFE0`EeFEzag~$jBU<92kJUero?QQ32xf^5!QN&P64S z52x`{_qo4Bli|&@E4n+8V0w#}ra+4jCGb)!A;aMR=~vg%5^=IvwL6_Jp{}c|8e(pb zMPDSd;|e}Gl;!v4LBQ{gGi^SH_4!x-idTp3+=&YvBjfINUs$ut3D(SUeJNG-W`rZd zuW^b`5s+D4=UiiBVcQ@wI9ky6h7`PQPmyxcks zou4hD0XssJiG?MQ&+C5ca=Q;UMA#B1ZRkW~Ri3lRy;o- zMb8(vNH$ZL1XX@9=-sAD(8IJuxi^_s?Xn+Rk0g7t2{uymuxxNwhy=C!@sU&4_sQgR zrD3$jAOJ`cV1MI?1qLLDeS+`q?tWfPw=?kn6Tpfxu(n3@dN}V7fPevVO_}?`RQKn` zl3=twK0bc4_Y+H{b_;m+Buv#}*|lx!LHYY>U5D3$;bx}~4l(iI<)!_o#{TaHYd2p| zjy%=YOu_eNr$glHCtk~jU;9==2S7HG5g;2mI(`BImYSI<#)gM^ElE27-8)Il>+U~W z1VE;7_?LrTU3m>kqBtXCV@Ti*dx2Q$gvdeaa!#1mHGAAp0E-BGdAIK#6^C^- zPCu9c7LtjH$^ZD+0y0QQWxLMv9M`FQ-cnsltM6>J$>IJ~gV*!cJnGXI#Ydp(2L=Xy zNK-Jgu?4HsEnI7rRagVP0Z8~`XS^o6&4J_DqMFXm4aaJ3C}~_GLP9Z4f`J;NK~0=w zD$(CSS;6eBtl(AZw1whx*lyjQt;ZD+YQyWI zWJ74WoyDL~w<>?yeCtmHdg)*YwfC640Zi(br<+NEL9=Wh(^WjhepeteK|w)4#)z`v zsT``v9UED-*475f@jpR6Tx?>$#Wsp9+IxE9=~iJoIXS^X2h9uw#>60LcX(oQ*lqj? zf~)MTyQ1HJ3*t}1@mSiVI0H%6yEQ~2_-#_4Jk zijtC2ET$<=CL=xl_E;LLy1M!l9rPfrH_%E_)6xR+sDPac$)ghHzL;-z4~fH7+VFW; zr-vtQu8X{y1QJo2BFLUITAeO*d)wfyNmgsr^>BFiDo34e=lSjgsD*N=Lsx2VpwC5! zg2SK?1rP4_?Cp^Q&7z`S1j(J)?_Z5&H~QUVNQXXKic|p;P$wlN)Y5WtJPShe=pk~- zx4kEKq$#7@K%fEa0B*b98lqS-ck<*>2y_%DIn@K8X{)LO}5ldoEgmo0L**x=J{ zcSmcoT~F|xoSValCEyD5dAZM3Eo<;L+YdFuPYtc@WkcQfg*KZ2=rmc{7+zVC<&^aD43Y9(WXb?M_UW67eyT_8Xo zCBC*saCytrh%lDko%cyy?`+`olrEN#Clm;Bu6@y00c$&*R%bY%EhXC8+1sN6^^}^L zD&Ke7fWaZ9MrXKtFrH2$uvv+@|52#QG?>A{pYK>H32&qMf%#***%|YZ1ZmRH`;N<( z8jV#z)9-v5x8qLens#8vLn^PV+yP(~P;Rleb!22@L&hviEl!j`-7#dkc}ere(Irc% z>*)=Cw7Ox+Y!EkZf&?8_A5d8}R*RK3Dz`xs3PAUW!RN3)7{fKL)6nW2rnV!*!xPS* z?j9O~9oct`3RsC`vQrR6WZeRg8raRvjZUT&cEzPTFAfflAa~|KO6TntLDZ`mEB@Xo zmk>EdyPRqB9Lrr=ldp42{`bO z`tG|c1hU|T8#HaA^2|~$$DcK+Fy=aYp>_M|`gt?cYe?DCWnA=3Sa8QTr>iG`d=(_g znTb8kV7mO5anQnT5a$dojKz@a349FyV+6C@z!waU=0fZs+Sq#P#T-@@LB-sn|>D&eegi zgcr@(=AJH8nZe@*^RaNQUS9ta^CD&MTKL~p0nO*O*Rj)GecV~h=kCedl3$}r=%!PB zI!2#qsrR=i(dW)!d=8*tX{BwpY z_PN1s!3{V*4qrNi)S>C&yvTXPr;z3uH-!}i45(cB;t<#96$3xk6$7i@m5YOp5Z8c7 z7gxguDTQp2T-3bjVoi+iC*CGrg8+aaKqkYBS;4}y`AYS^HQ4tadxa%_7$7K^BEb!o zbT}n&=jk)LEaG9@p{q7YM;TnY!X*IQ_O?Avi+1IgFuCuaSrI%LYI;=z1aquzM%<~j z^ztpo8Oovb(6TVkn3W_eu@KR*j+mnLg(FgCq7p3kqS%+C2%(Q=nPT3+4}7)%PpR%cg3V%L>)FtbprRK3~jez zWmUupMWgxG(8!9-B@~Y+JX#DrHYQ6>&Pk82+ymtWu5p)LitD4uFSW-byQPc=sT{QN zDnfYT%p2JQmA!z474-TJ*TFv*X7&RazQL-WQHzA;1X{7!AY-cZ;R3GuOLj40(u>ritsd_>n776x8Lcb!$hvVKdL8)4WuPy05L3NqIU)OLgjxW#{_zBgzaa zmS$y!dM&0bP8Xy8$5TvkGl-EFU+1%6;`P%*T8rQ!9a6-zLE&|Q#?a4!A}HnPBn6%a zr0>QHG;F<9N&*;tThkGFi)YN1I)k5|H{hXEZyA=|8hJQevmrEJMnf9R50NK*cksoH zevhOcZJsq!K9gx#RO^{{th3@y`d_ayS}lDyUuRyssIRfX;4kt}&j{B2RHCrzIi{}c z5x?mzj_n_{!FWyX%FX|FndDKJ=-63nlk+|BNAWY^kdB(?Yf$XWwz2bHzVrFcq+G&$ z9||7+w^sP&j>Y3O=OEuB-n%xEE$5*LM%t7OIi@mm7sK%FY*w-{?o7%k8s8HiM!eO! z`nb%_tPcM%q9ZfBWp;Qy0mi`fqXK=4KgvsB^tA(D@sO0uRK}Sv3+$J_{66*3#D+Sd z_ODgrm~y=FbR*H|AgZ0bE?6p?FSS_|Gl%Ou71n$+RJVtrd!0DExm)k=R;8J9)xlsq z`MlL-^&eVdGc8-Utem}nVVZPiM`_f6?z!#CP%gytxj!G?VfBdXv3Gh5szu%3D;JG~a!T;%xFSV`5_sU0t!_C4W~1 zi}48Z$pFX-fK^sjRsa?gp-8Oh|0R|t0W{QH`ECF^R=2m8pKRx*xTw)!0stHs^*c*7 zM!+M?xeWjy0C{S5+=nOP_l6ZyKpY%S8V?8nJ6&%Bu(EIyJ$I}iiGNRz(AfC+_IJJK zPYVkRzZc2V$9IMkDL*(Dd-{BX)b$561%|P3?hm$1%1?07zyd8Tr84d4C$)-lUi}^~ zKl49sK>)B35*)1Lux^=d=9mot+nNXC7SRj4SAq%{zZI!7cs*t=ZFyJT0niU%gWt0s zz#Ra&M>Cd1Fs$gO;t~>9f6J;24Go2#myKB>03ZrL7&25?oEhX--Zbf*t)8Gu&kkVb zo1?YfwqJuj7{^+R6HKy{n49f!J5-PmK>ALXY9JC56SW?5bUxrQ6OMDzr8QfZEF>Q~ zFz^o!4*^&jYgj|&@<7f?qYdDR5Md!V+316EE%)0awDYx=d>YChm+S?z7IgIV-)c={HxaN3Kgm~ z07q+cyD$V0=BoSa5huXxcCI+Z#l@MJnR7SfmKYVjx&~|_0B?JHs*BulOaFD}l zydG@HKfw|3dDidCqlF|)b^3llynaUCfYB7je091!)iR6wdL>Vpn?aY0PL|!?i_MR95%~j23HWU?)e*14~PI zzsE4Y@G8I8lU8tWEkEFXgme9A)hf6CJ>78nJhK6!gEzn4=<`i3S>`26++Yxp$*(UD zyOZz#CgUd$3kHVFDe+@qM%hS_lcWa0KU!{duj5E%Ko=U3CJgw!MKe= zoRrTp+p{7pX@7vcW@2T{_jG&qaae&;Vp^iuSX=v(FA)bwDEs?g;bADmq}h`Q$yCpDN{@y$ zsZ*qM;9eUS4*&on#X&SQHT$l>5mWIGg)?OVn5jq@vH{Q>)V6nD#)Q9A zRJIp~0aC@?7Ms#gA%K&$8JfHg*s8f=#PgRryf`Q*DGLVn?>ytjO%o>$H)Pn~fq1;!pRrDpxP z#slaYecn#IDwlxFXK6ggI(MB7;OO~oW8>gmk+YPaKQ(#dWg+rW#1yKX4rQZbVsNuY zPg{VvTC+zP))dq9u8M{JJ}IVx2hb0#lg}1{11MuCeP1GO>YK6$ z2Fg5Q$Y5ELHfXlrb!z`guy6C4?Cy@5Gkqhk19?33cx?Je_Uw6*9~;rVsa9Mo!fB-3 zwhZpv8xYYwbsv0pcUjtHX|K(Arc*XjpPY^~lGBfUm(HC&Hs?TPXY^4Z>O;(2JSpvO zqi){lmc4|>c@<#9so}5v2Zc%tUxrFWgVD2d?ol}II|zAFn8U_9{vFUz3B7_%dZQl$ zG0!StD!hjl7EV`|;L4(rUhBh5o=1AC1sA%o+e>G)1!-4yX+t$Vh7op8VMNk)xN0$2>eg~ZSWhEoi+#CaOIvn> z*8m4$;K~En>RC;iu_pE|yb#qvNXpvi)?FH9gP@Cws^PzWsr$bm{3N$_h+TS*1%qe) zl=NGZY5@#L(I{9uXN6eZ6c;(4z5q`N%DkD*SA$O;x>A zI(sz)G1Dq!t#MXuncZZNdSu%;xBZ__%qysaYaY+4X!iuF>V&*XyehCr7Yu%ynCIp1 z9BVL^8S1`_7FLbD{Src+i`iohog9QD$`Pm00 z*~S63Jt~il->fSWb5zpglxcKm*_5FFz1-3eTiW~gR+`nIy9#^-u1D`awxj)ZmVeo)#ZH>q<8vBQM*FcbeZ!rn4km?q z#FncRS=|Zz(L8}T_A(&I0Id^vbd%FN3v-;d!m+z**6NvNoC%BjqlIkFxcojbG1D7& zCrk4mIG8_n6Q8!iT_P3_(lk(VCgg6J$z27nAA88#oIh~^q@X#=ug5RLIPdx!x~?|g zI0jDVoPu?{C!Zw_B|{}@H>+K$l}HLt=FjFJHTRcK?i#h>4BXnz^44iG&w7EegbM3i z5Zsk4mTuf#X|9OTU*ok5ca+j{oZ{<>ucP*uVa#k4rU3x*0!4+FL(%FWIR%Wz*Y{TI zTVLv;F+f26XiDUtgm{TIX9POwcs`y34-(X=_7q73K#9zihn+UZxN_Gny=6No%A*2i z31GWu@oITa&WQ9z+i%@GX+CQLqT>UgsIYesNq@^3so1bPUP&4?aqrND4C?vW5DeB) zW47GMVq|jX*#Qd)E|1ZF*@O`<3He{z$PGsaq>4R;*s^dH=`JjBCt-|u(^UE?j#UHR z$bN0^54(Px^l{VC4Sg%p?=S&^pc-{)6*l8@3B!|3bG9Gjrt_QlAux5F&#%5JQyhTS zvGtgdC{Km4b>;qHr$qH@-bY}y>sE1B0cbo^jYsg1K6?_7mx~7k+WL6YYQi%iNa~Fa zxv`?e#=Q(1x|0;e6aabL88}^pVhadQ%GDsgLfYT*i#@s=FQ2yIwUx{C776eE2$zevb|KN&{49Lk~#sJ z;n)%l%u#@B_*2Qta@A|RNSjMhBm%SImjNYFP}^ZESoUNXfL8!U6de~=mTg7tO$S2@ zpigsi*a*?yOTq2I!-p4U0DDA4z}@Lz|3FX?^ANO_-M!*u=is>78%B3|wLlIl<||AB z<|@E(8oE4NB2Ni{_T#CIq0a$H!(SIjOQLz|oQ{nk|GxDD+1`M69Pe&vQ+k>05}LmL);` zVOyn@b21rxq)ZbsJ^eA#U1ZYyzbA8XPXHRS$}y|bPyrB6Wf}t;8zeyRY-CmhdC$72w3x$eD=JqzZmW6==4v z`&d&a0bYC-%^ptKd^e!2*cbfz07_*nxzGfpNG!QUDCR1|7Z- z6i_S?U!*&)?TDoc9o7ejEmN!d(5qYFan2y{B}n7D0UIO^ol@3X;qmrpJ5i3mXSvR- z$z4#i%j5z+L>Rzr?%N^Q_5gqs0gUF@59b090ZNoh3*Kcx1u9|+O#J+@hgn|8z`bY6 z+U2TDI{`|kh=|Bim!Ckw@ZL{*zK*XIfFGo;-u-gX6}P`{qBS_Yl97?|2SD~UALunU zwsB7a_djIw_1sN?4hw7olwWXJ)6oR*;jZ_WF1zhrPu)(_x(L8JFaj*ERN#;Q{0V;M zVhe`gjs;}&5BEf?H#0KscZt`>1qEL|n17n| z0DBz5{zbnbnp_rd55SRu^hE>O%2SI9r{5bdO>!iI+<^rZ;Ftk4a4?Q|&}ovd2oJu& zJZ5J1!_>MtkO4?N&gkf9s4&kja<&(v=xey>%{?pJxYtN`WlxO*)b zVD$Mm&c*h@q3t=#X@f6M^neus0!#bDhS%e2*Q-`vwQQuCo)0E)S>z8_24G`pe^2z@ z_Vso~l4${8Yq?Zvj&ytoBtPH-Jq~bm23+{PzZ9-0VTir%vJJ?-pd&(mSh$2du3H5u zx-6K6!|jLCTZWObM5(=QFZVY8s^0Iq?9WyjDx=fR!~o?2=wwO*^*~gOCbReyb2AVD z6$}9Z;c?LKpTq~bWt(5**l>r?dw*U84iivNP-wQxcH0^c?rDQ##$G$-}Fy z9tc36*~*XOXEDh*f&|Pf;BbPyb&|xuuEU3pp!c$}cnRZo2~)V@^|0=CHJkm00USl3 zrKP3MLhE?4U{B|CIzR+Yd`-;|x1l13T@B#dZH;qmiqa(aPEE;22?<)sd3NX;v*5PB zoVPtLPx^+AkINi~Lt`zB`ZBV}3w+O+=J)L)cDvZ<{}2se7OV6I0m;vEop0S25JvO{ zIXbV9fUXXdUg_;sd6=86S4bQR;U}9NVDteWg#jOemHT^f3*oDLnURwG`lpP7e6=SZ zwy;U-iL~W*a#SdO;6wrrqUA)sxo(=^hwoFZ+tH~YB$$Nq1wMXmM8>@7NSr5m8E|~1 z3O)fXcgma%KqJ8(1kTYwdk7H*8#h(DYd`jodE_#UELk?>WZP3X`LS4g&;4z97N3mO z8W=m0tk%#wsV0n2@keu{#z0)N?Pc&g9DuU zu-V=sY0t)mjq2aQ3ehvQs|5~;@B-5vSeUaC{gL)@!)}uDZ{2_i+Fb})$5H^wf*yLaVb5KzMd@U~awMHZx%_quH$*R(|s1-K7%;p`jGs?A>|Jk7P-An}lMb37BoxWuUOa zy|r%*!e26>5F_=>|5~)YGW=OIMt4`AKu;e|`b(>EGZi}$H}a8SOm-m8q}$vzS3atk zF)6fdn!)cbe8IP9Yf?>BGH4%v#;yA9{>dAFpEMn#BOH0R2yNZMVH%MT^v}l7zJ=ExC&Aqh9rKXCL z4H?%B(xel0>yKz>WujKsfa6CDB|>Fc;G$=Y)y4M&uQ}4N2gmornc})L$LPy-o{1HP zsBJV|EYAE|0E4ARAoyEfUIc9E;Knf1MeW|NKSh!(f>3A!IHQqn> zs|3sLTNMZ z`^lrIYx@c60<6J_VEvw;y0O*c9{A_OV{; z?lWD12W4&L7hN9t6k)>uq4m-<@Ixi|wS_?vUn{YCB6@t%|16I;lTUA1lOL@kw~aoY zi3v}vgIxq1@P_YDlok_5(hyTJm7a5|_+mZW`F&DrBJ7ibLF2H>exkzT7(9%(0F}Ux zZGp@&CmvMH#9ZLwI28YbsIvg7s$IXhsE8a8L`qOVFc6Rikyc6tL^=-LDIrLMG}0p7 z-4YTajUe41EhW<3AoYK?-<|o-d~@f{cQ0_xj(5M$TEDfn|Hs~d5hEtdNL0ujT%B_U_pDLTL6|gRid*h(+>JNOgu^Cp++=9YSh6Wboo}xOc}0 zzwgsiv8|ysoN(AFuaWM5SNOZ?txyaorB_w?4|@Zm+BK02@@;9_})=;nY>VleR0Sgcx_1-}KaL z>yvtiK2ZnLU3T*ImW9vcU4)vCvg39JUP=W{KKZ=J5T_JMs$^PQx?d<+MT6nrlRvXD zJ6q#nFdx!$-~G<=v%DvMzTxf*Q#qmwC-#T8g=$cZj>L3bLbi#YSuV%Ey0)0H-DeSs zQ7ndsj&3qKC$9-O>#M5tN|M{v(h%Ll5jj?2KzsLC|BS_A*R_r?B|Y^w6rW+g*mF7l zdIN15pPv`Q=yCe$D%TV00`>0&Q7rV28sB!0P}P(zb7U2hS~nZ{X@u5a){~*eMdNys z+|VNRUI_|NoYmVg5nEaj`S#|km4c7rlQP`T1@|&r@{F)uT^U8ZxepJ>_vF%9`nmPj zoH&^5*Du?28Cj9k-sYWpj_&(N{?H!n>(>43@FM3n3p#7Tmttk61S=` zoI8@0^^r9NE1veV`s+m8MRoh?vI+l+`Qgz1+*bB_!44eT)YC_)yyy@9S=N7VO^)m7 zpIOOmOR>n5KF^wTy}LWsxR74bEm>DqU&vl{LABYQCe_I#nuyF=&$z=}x@oBO!}9~i zTX(B;74!Z{0 zwpp|1OKDO0%MOw^v#)F9E5ai=!<+B|3{5b{Ezj*2)!#LfcPAF1TTZ`LlAxtP@Kcp+;(-(Veh1Eh{U6xwjR=6Rbaad#}UBT2j;p7Y|Rz#)b$6AUBad z*1s+=aRR>w6ZrJOG3QdSQXn9ok&%%_U%wjoC&giQ?M;k~)WhE0YPR_r7$L?R+wJWr z@FeEv=cSpV6kaDyvUj@4J|qGn(*v9iSFG<9GYv78!_TP-8fe|*@Yz*9;JMin?st_| zOguAAmCextB?FwX20#l50-AtREBE@$%Hp2iXQTz6%NLKL0mc&f9u?+oa#3IYjcXck z2CI={XEDQB3L$00D#Dm$Bbs z!n3gSgd|{Qt$gb7UNERquzyFeL`~-{Z*$cXK8G3&XZXB|g0sxrS#^dhpL!O)fLXG$ z(4(uXD|}6za1O)ig%ueXp(!cUlCNHAAFNN@Bqx_mBG{tf;o7pl4UV+fy&HX9IhYH^ z*q1K?ZrhA#2H(GbC()QsxBi5^X1D%J=HSZ!0Buaw`(viCjceGO4f+7ID@>N4OTf{& zV)M4a*qr0|U~%ywG6sVF6cZB@8NZY%mcq4v3Yvq$>#r1SH?DDk)`MsTa0);PUMxSN8lK@Nk_*1aiwKnk0o*Ko69jQ45V*+OB~_; z0F@750fZ%NoqG$PsWM7@;F8nEWDNkmaDy>kBr;PIX73rO&H~RA+&CQv2Qn`6U%iZ1 ze=vwJ*B;VLI<7Fv4VjYo?<{2{{hkdGGHJnv92|9|=QM4R~L zsmpd7Eyw~iL&L*P6ZeJTa+%4~Jf#Pqezz75D|l%LKvKDm=8HTx2Z$IJqGoVH-&VwD z_JuqLq7iOp^IzXm)}8WpP8N^Qpc+{?KIeE_Y5pjR1*2%v%C>$mdeDkuPbQISFf9Cz1+ip5WmX~H!N~4fzw3vFEyqt$8^zT@u#$<19*UTATl7| z`N_`VvQnMN@~9?!B1D2J(5Uh65j_9(v!t-@jHmWwj=B8LH*$Ax&m?Z^E7RdT{P;=3 zD@`LKH}R+h0ug-$)^UzOB}V4!o<{1Yu7V%~g8tk)RB3Yy=<4_92k)m=%wK2&!K`_@ ztVDqFmK5wDE$zp_GC=O<%}p>`^A+=E23`vS`yx`IX3kysS@!SZs2rRjxMU(ChzCw| z5gY^*8br!O9%+Es2n-l;NIwGR=-wuX7&ZYdz1}-13T_=ub#Q_}zi^B3w-Hl(j#i8# z_E}7S@q&w*UF>SZFih$oTZ6qDYkE1T=*hkV=-P0t2fQkBAar=e_lw`ewN8`qx=vSC&5@ZG)aFR3ifttm$QITxiiR?^OgIuz2T6!H|ny)OF}I&>%^dOvqC zmuG=8Avb5&8r>E-FV|+@ALMUDmLC$JB)*5qRGBia1_2M%MnwVE(L1D@j`&5gHrWtEcEe>u$M4LZ)g`x*Nz-?FQ=ixDO}Dgo-Ey43 zJf}42Gw_IEk6MG(isz7Z z8GAJ~m00pcx(6Ne<$;Dv9Fl&HsijP91{b;C$FOi*CT7eCsqs{#9+W-I_Kq)i>`+vl ziy)d`BIxtU@?<-t(QnQEfN`m&wOU=f$2{b^!lNbhms;WH1gYYTg+KaC+*9{1EHI`_ zKFg<}m!BEP-{eLa7M;`O&+no^=r6t|>9fo)NZxCz+G6)?A*bSt>dPXOiW` zLWCj>F`cv7q{CdVcfi^ejJRfX_)$xR56QbFndJLTf$VjN}8e!OqIov#;ts!GjSuf^hE{?1$r+ zrYtO3MBzEM*;QhvEfRg(UDb(eL>3MfHwC|ODSpYXJKxO>@I+878x;feZg(6tvsNY; z9s4@YOY#a8d*cWF!xy<_+~aH;Sk%9LbeBxI9@6cSWbkFezK$S}MqcgPNH^@}NtvE} zz{4!@<~Zy*K4SSY=9#>wl9du5b~;$Hxm?B|`!_H=$aW_^{%VPMgvOJ!!P!AoEdE%Q zZMFV06K{6A2ExG0QtTDMiv7Wo(K%tp?|7g7&{g;@cHI0X$04UcUaZaZ1EmZ}QXCgEXB3ilb$iS$(+RrE7w3{;n;rY_cpC_{znXj;D$OUJ85w{wVAA5ke58V-rYBQ6Yriqe#Y}! zdmK%^7k{jho7_q-8>dxd>82})tn5|FM@YTcRFq*#(r7J-FumFkrXM7u*sDZ)k~VQP zZLF{>mH#F68orra*6)nSFL=Ku;&*SeE}NFulQI_zFRkp|RR6X}1cv#qSF=L+HPZef z9!Z_-cRWHn-KQi9ua*6L{BrLZZv$tJZ}0>s?G28jybGJ9sWdfwsy(Jcm>QuMeziT( z!`!f)f4jlO(i~Wy9;+tOxCBN&oU$4rJakU`Mz5%*1 znu$G%Km=S|$URg@tLG(AzNJlESjyOs5O3;>67EQjviX7IaLVz(k&EIzv1hB(_i)CZ z0jJ~W2CVKzJr0D$HR7oB?k-E*v*&}IE^Nb=UEB@o|F#oh)>wVT>2nexxNh6fHhe)D z6C5$=hnGcVDrFBpkYkG&ejPdnyA>YDppoYensh{POI=v2Bb&|7yIE-;i3HCdJ%l*Glg)TKP*S8w zPYfGZEp2TK7-8VqX0|21ccXfn4CT$j!{d)kMBYN*hZoX{qCig!LxozcGZ~nFu@#jG9*&9;BVfnhpn%HfkE;^|M{8-XQRKc>4e-5LLb67e(9dx zY*LcF2$utJ_&R%fbYVULw>no_gh6ju zcwGc|jYF>U`Kc#=3wU691J~>J6H5RvI(t3W=Z`D?|Kxq|@4w-CGD|gkdN4Jta2V}f z3DY|G)Qf#-_TVbRR)Qd;1su>fuYQ0C514Ah#`)O>5EVJTX^I7SP7lJ`rn?h(4-aQU zzLb`F$>v;6>dA7%ak_?I@sa0-pB99<4!5J~0%6;oQ};zUJInOs?093=SMY=y;=BG$ zsXQUo3&GtMe3UKI(|0CakKZ_-A5RSv8yp(yez^%>_xIK}an%X0$fC>F+$XV{-CeH; z+CdTtHm-HR2t)D#lTP2qC8^5*0i@NKu&$F2cBtw){|49ho6GTIzUJX#C1Kedru01NLl_f#aq&gRS4t@<}TNiGa=$@f;<5U zWuDimds^0(;MJe38VWW-9u)K(3`i0sVv02>BXBPaUK6Qu;Rg^XKv;N~1`$Nq6P&qR zN=C*Ij$?#({qBi%2$SUI(L&PfP`)ZmRe(u=d|l<&?x1yUD$gYT1|RBdk;?^=U*4MX0jnIduZDxdt#H2f=` zaN05x6^JnN^71~2r7=1PN?qi?pu!q%&o?}`7+Y4R3*go47Gu{yMcia(H3_ilFJDvr(y7zR3i;&BGHY;g)sp_pd7E~ z##I5SSze|G0WLjB_b3Mxq1=XH=8pV0-$ zQy^1$Z(0_6mm!jDukO}{fhpP5%Rl#iqSi7tv{rgl6S};1_l35GQ0HszaR^C3K-X_p#_~m;&G4yr<%=H(VTviUNZx?`e|_G4eD<^PO31W!Z7U1}h7Ey}65f zUyd)qA~V~OeT~4k zAU?;M^{JA}4D^)SiI4ebBOd;c$;4k%M2Az**5nlrs2TN9eq}2Ro~&Bv`*v%PX%j^y zXD-tGoFrIc=VngBz4l|TZnQC-%kH^6YnphR$|iLS+K$41F{W-G$ji5d5U(wss<8Y* zfdstFJT)44-Y47emNq=}Q{6art+ExekhCpJp}k}3z$$`ysZ)cnca3w#SnSWJkIz

we0`z4`~Xay#ES+7=k5J| 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�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

(WYqi=>uP#!Wq0J%DdTC>+FNJG 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�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≫R%FHP(tn`B8tL_hetYmkv6?;P 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封面

+const n="/zh-cn/assets/cover-bc86e95c.jpg",t="/zh-cn/assets/image1-d4391053.jpg",e=[n,t],r={label:"DatenLord开源产品技术分享 | Xline源码解读",description:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。本期源码解读将聚焦Xline的Curp共识协议,DatenLord分布式存储工程师赵佳炜将与大家分享在Xline中应用的Curp共识协议的设计与代码实现。",cover:"./cover.jpg",location:"中国香港",author:["赵佳炜"],tags:["Xline"],date:"2023-04-24",title:"DatenLord open source product technology sharing l Xline source code interpretation"},o=[{label:"【源码解读】Xline Curp 共识协议的设计与实现",level:2}],l=`

封面

传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord 推出开源分布式 KV 存储 Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。

本期源码解读将聚焦 Xline 的 Curp 共识协议,DatenLord 分布式存储工程师赵佳炜将与大家分享在 Xline 中应用的 Curp 共识协议的设计与代码实现

【源码解读】Xline Curp 共识协议的设计与实现

@@ -17,4 +17,4 @@ const n="/zh-cn/assets/cover-bc86e95c.jpg",e="/zh-cn/assets/image1-d4391053.jpg"

【直播预约】 欢迎您预约直播,或者登陆腾讯会议观看直播:
会议号:955-6910-3992

-

图片

`;export{t as assetURLs,l as default,r as metadata,o as toc}; +

图片

`;export{e as assetURLs,l as default,r as metadata,o as toc}; diff --git a/zh-cn/assets/index-65845b47.js b/zh-cn/assets/index-0b4fd2ad.js similarity index 92% rename from zh-cn/assets/index-65845b47.js rename to zh-cn/assets/index-0b4fd2ad.js index f563f19..9311f36 100644 --- a/zh-cn/assets/index-65845b47.js +++ b/zh-cn/assets/index-0b4fd2ad.js @@ -1,4 +1,4 @@ -const p="/zh-cn/assets/cover-9e502538.png",n="/zh-cn/assets/image1-09ca1c97.jpg",s="/zh-cn/assets/image2-f93efd4a.jpg",t="/zh-cn/assets/image1-50beaba8.png",o=[p,n,s,t],r={label:"SpinalHDL的使用和开发经验研讨会",description:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。",cover:"./cover.png",location:"中国香港",date:"2023-07-03",title:"SpinalHDL usage and development experience workshop"},a=[],e=`

SpinalHDL 始于 2014 年,最初是作为 VHDL/Verilog 的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。

+const p="/zh-cn/assets/cover-9e502538.png",n="/zh-cn/assets/image1-09ca1c97.jpg",s="/zh-cn/assets/image2-f93efd4a.jpg",t="/zh-cn/assets/image1-50beaba8.png",a=[p,n,s,t],o={label:"SpinalHDL的使用和开发经验研讨会",description:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。",cover:"./cover.png",location:"中国香港",date:"2023-07-03",title:"SpinalHDL usage and development experience workshop"},r=[],g=`

SpinalHDL 始于 2014 年,最初是作为 VHDL/Verilog 的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。

达坦科技(DatenLord) 致力于打造高性能跨云存储,其通过软硬件深度融合的方式打破云之间的壁垒,实现高性能跨云数据访问,提供海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持。

达坦科技采用硬件加速提升存储性能,目前采用 FPGA、ASIC 实现存储相关场景的性能加速。SpinalHDL 是达坦科技在产品中使用的硬件描述语言之一,达坦科技也一直热心于推广 SpinalHDL 在业界的落地应用。在 2022 年 12 月,达坦科技曾联合 SpinalHDL 社区举办一场题为《SpinalHDL 应用前景探索》的线上研讨会,收获海内外 SpinalHDL 爱好者的欢迎。

而在北京时间 2023 年 7 月 7 日下午 14:00-17:00,达坦科技将联合 SpinalHDL 社区,以及四川芯测电子技术有限公司举办一场题为 SpinalHDL 的使用和开发经验研讨会,旨在和大家分享 SpinalHDL 最新的实践、挑战和经验的分享。

@@ -13,4 +13,4 @@ const p="/zh-cn/assets/cover-9e502538.png",n="/zh-cn/assets/image1-09ca1c97.jpg" 474-6575-9473

图片

对开源硬件感兴趣的朋友,可以添加小助手微信,加入达坦科技硬件群

-

图片

`;export{o as assetURLs,e as default,r as metadata,a as toc}; +

图片

`;export{a as assetURLs,g as default,o as metadata,r as toc}; diff --git a/zh-cn/assets/index-bb28ce04.js b/zh-cn/assets/index-0bd243e2.js similarity index 90% rename from zh-cn/assets/index-bb28ce04.js rename to zh-cn/assets/index-0bd243e2.js index 9f5381d..460e0be 100644 --- a/zh-cn/assets/index-bb28ce04.js +++ b/zh-cn/assets/index-0bd243e2.js @@ -1,6 +1,6 @@ -const t="/zh-cn/assets/cover-3674aa81.jpg",s="/zh-cn/assets/image1-b73fb0ee.jpg",e=[t,s],n={label:"Rust唠嗑室:Xline-跨数据中心一致性管理",description:"随着互联网和云计算的业务规模越来越大,单个数据中心已经无法满足业务的需求,业务系统从单数据中心向多数据中心发展,多地多中心多活部署的需求也越来越普遍。多数据中心架构最大的挑战是,如何保证数据跨数据中心访问的一致性和性能。比如索引、权限、配置等这类需要跨数据中心共享访问的元数据,如何在多中心竞争修改的场景下,仍然能保持一致性,并且保证访问性能。",cover:"./cover.jpg",location:"中国香港",tags:["Xline"],date:"2022-10-11",title:"Rust Chat Room: Xline Cross Data Center Consistency Management"},a=[{label:"内容简介",level:2}],o=`

图片

+const t="/zh-cn/assets/cover-3674aa81.jpg",s="/zh-cn/assets/image1-b73fb0ee.jpg",n=[t,s],e={label:"Rust唠嗑室:Xline-跨数据中心一致性管理",description:"随着互联网和云计算的业务规模越来越大,单个数据中心已经无法满足业务的需求,业务系统从单数据中心向多数据中心发展,多地多中心多活部署的需求也越来越普遍。多数据中心架构最大的挑战是,如何保证数据跨数据中心访问的一致性和性能。比如索引、权限、配置等这类需要跨数据中心共享访问的元数据,如何在多中心竞争修改的场景下,仍然能保持一致性,并且保证访问性能。",cover:"./cover.jpg",location:"中国香港",tags:["Xline"],date:"2022-10-11",title:"Rust Chat Room: Xline Cross Data Center Consistency Management"},o=[{label:"内容简介",level:2}],a=`

图片

内容简介

随着互联网和云计算的业务规模越来越大,单个数据中心已经无法满足业务的需求,业务系统从单数据中心向多数据中心发展,多地多中心多活部署的需求也越来越普遍。多数据中心架构最大的挑战是,如何保证数据跨数据中心访问的一致性和性能。比如索引、权限、配置等这类需要跨数据中心共享访问的元数据,如何在多中心竞争修改的场景下,仍然能保持一致性,并且保证访问性能。

传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord 推出开源的分布式 KV 存储 Xline,就是针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性,方便业务系统实现多地多中心多活部署。

本周六(10 月 15 日)下午 3 点,达坦科技和 Rust 语言中文社区合作,由达坦科技的联合创始人施继成在 Rust 唠嗑室做开源分布式存储技术的分享,介绍 Xline 是如何实现高性能跨数据中心的数据一致性管理。欢迎大家预约收看!

-

图片

`;export{e as assetURLs,o as default,n as metadata,a as toc}; +

图片

`;export{n as assetURLs,a as default,e as metadata,o as toc}; diff --git a/zh-cn/assets/index-8a16857f.js b/zh-cn/assets/index-0c28844a.js similarity index 99% rename from zh-cn/assets/index-8a16857f.js rename to zh-cn/assets/index-0c28844a.js index 124de29..c500077 100644 --- a/zh-cn/assets/index-8a16857f.js +++ b/zh-cn/assets/index-0c28844a.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/07123c0a1614c5c0256c2c44fccab7ad-82d2cfc4.jpeg",a="/zh-cn/assets/dbb615367665aefe1e8dc131faf7135d-ab0138b7.png",t="/zh-cn/assets/7e55ab5e49360b59ae14ad51bd9f8266-a3540f96.png",p="/zh-cn/assets/50e844cef87960be41630d431f7dba76-74a09282.png",s="/zh-cn/assets/da011de83bcdac4720de4265f06487fa-a09f8943.png",r="/zh-cn/assets/ab91fcebd0198e3ba3e68a1f0ede0dcb-2954efad.png",n="/zh-cn/assets/d6753cc7dafac128a184192d73a671d0-cbc3aa8e.png",l="/zh-cn/assets/8140b483b2b9992795a40af43149d92e-6324a4f1.png",c="/zh-cn/assets/261faba035c5925dd1bf0052673a2819-65bae75e.png",d="/zh-cn/assets/7ccbe7094043e218ad241cc3c2e3c871-e3e8431a.png",i="/zh-cn/assets/7a18e9fc6512a89b6e74a92a92580823-5ee6182a.png",o="/zh-cn/assets/3df9c5c4ff35c6cde20f54a80ed5bb0d-6b5bfe86.png",m="/zh-cn/assets/03beb98ee570de53f1aa4b866838924b-60f7cb4e.jpeg",u="/zh-cn/assets/13065eb252d78f86c7d84a7537e730d7-9522963a.png",h="/zh-cn/assets/0f55765329135bae263d77175baf52b7-2df179ec.png",I=[e,a,t,p,s,r,n,l,c,d,i,o,m,u,h],P={label:"blue-ethernet 高性能FPGA网络数据包处理项目详解",description:"blue-ethernet项目使用Bluespec SystemVerilog(BSV)硬件描述语言实现了一系列在FPGA上加速网络数据包处理的硬件模块。具体来说,其提供了用于生成和解析Ethernet/IP/UDP网络报文的硬件模块。此外,还提供了一个具有非阻塞高速缓存的APR报文处理单元,用于自动解析设备的物理MAC地址。",cover:"./07123c0a1614c5c0256c2c44fccab7ad.jpeg",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2023-11-02",title:"blue ethernet High Performance FPGA Network Packet Processing Project Details"},D=[{label:"简介",level:2},{label:"文件目录概览",level:2},{label:"组件",level:2},{label:"数据流处理模块",level:3},{label:"UdpIpLayer",level:3},{label:"UdpIpLayerForRdma",level:3},{label:"MacLayer",level:2},{label:"ARP Processor",level:3},{label:"UdpIpEthRx",level:3},{label:"UdpIpEthTx",level:3},{label:"UdpIpArpEthRxTx",level:3},{label:"PriorityFlowContro",level:3},{label:"性能和面积",level:2},{label:"入门教程",level:2},{label:"仿真测试",level:3},{label:"使用方法",level:3},{label:"相关链接",level:2}],C=`

+const e="/zh-cn/assets/07123c0a1614c5c0256c2c44fccab7ad-82d2cfc4.jpeg",a="/zh-cn/assets/dbb615367665aefe1e8dc131faf7135d-ab0138b7.png",t="/zh-cn/assets/7e55ab5e49360b59ae14ad51bd9f8266-a3540f96.png",p="/zh-cn/assets/50e844cef87960be41630d431f7dba76-74a09282.png",s="/zh-cn/assets/da011de83bcdac4720de4265f06487fa-a09f8943.png",r="/zh-cn/assets/ab91fcebd0198e3ba3e68a1f0ede0dcb-2954efad.png",n="/zh-cn/assets/d6753cc7dafac128a184192d73a671d0-cbc3aa8e.png",l="/zh-cn/assets/8140b483b2b9992795a40af43149d92e-6324a4f1.png",c="/zh-cn/assets/261faba035c5925dd1bf0052673a2819-65bae75e.png",d="/zh-cn/assets/7ccbe7094043e218ad241cc3c2e3c871-e3e8431a.png",i="/zh-cn/assets/7a18e9fc6512a89b6e74a92a92580823-5ee6182a.png",o="/zh-cn/assets/3df9c5c4ff35c6cde20f54a80ed5bb0d-6b5bfe86.png",m="/zh-cn/assets/03beb98ee570de53f1aa4b866838924b-60f7cb4e.jpeg",u="/zh-cn/assets/13065eb252d78f86c7d84a7537e730d7-9522963a.png",h="/zh-cn/assets/0f55765329135bae263d77175baf52b7-2df179ec.png",I=[e,a,t,p,s,r,n,l,c,d,i,o,m,u,h],P={label:"blue-ethernet 高性能FPGA网络数据包处理项目详解",description:"blue-ethernet项目使用Bluespec SystemVerilog(BSV)硬件描述语言实现了一系列在FPGA上加速网络数据包处理的硬件模块。具体来说,其提供了用于生成和解析Ethernet/IP/UDP网络报文的硬件模块。此外,还提供了一个具有非阻塞高速缓存的APR报文处理单元,用于自动解析设备的物理MAC地址。",cover:"./07123c0a1614c5c0256c2c44fccab7ad.jpeg",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2023-11-02",title:"blue ethernet High Performance FPGA Network Packet Processing Project Details"},D=[{label:"简介",level:2},{label:"文件目录概览",level:2},{label:"组件",level:2},{label:"数据流处理模块",level:3},{label:"UdpIpLayer",level:3},{label:"UdpIpLayerForRdma",level:3},{label:"MacLayer",level:2},{label:"ARP Processor",level:3},{label:"UdpIpEthRx",level:3},{label:"UdpIpEthTx",level:3},{label:"UdpIpArpEthRxTx",level:3},{label:"PriorityFlowContro",level:3},{label:"性能和面积",level:2},{label:"入门教程",level:2},{label:"仿真测试",level:3},{label:"使用方法",level:3},{label:"相关链接",level:2}],f=`

简介

blue-ethernet 项目使用 Bluespec SystemVerilog(BSV)硬件描述语言实现了一系列在 FPGA 上加速网络数据包处理的硬件模块。具体来说,其提供了用于生成和解析 Ethernet/IP/UDP 网络报文的硬件模块。此外,还提供了一个具有非阻塞高速缓存的 APR 报文处理单元,用于自动解析设备的物理 MAC 地址。

除了构建标准的 UDP/IP/Ethernet 协议栈,blue-ethernet 还增加了对 RoCE(RDMA over Converged Ethernet)协议的支持,具体包括:

@@ -413,4 +413,4 @@ make verilog TARGET=UdpIpEthTx SUPPORT_RDMA=TRUE
  • blue-wrapper: https://github.com/wengwz/blue-wrapper
  • 关于项目更多的详细信息可关注链接:

    -

    https://github.com/wengwz/blue-ethernet

    `;export{I as assetURLs,C as default,P as metadata,D as toc}; +

    https://github.com/wengwz/blue-ethernet

    `;export{I as assetURLs,f as default,P as metadata,D as toc}; diff --git a/zh-cn/assets/index-4e03f569.js b/zh-cn/assets/index-1179d885.js similarity index 97% rename from zh-cn/assets/index-4e03f569.js rename to zh-cn/assets/index-1179d885.js index e782740..b0b0d1b 100644 --- a/zh-cn/assets/index-4e03f569.js +++ b/zh-cn/assets/index-1179d885.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-9c53ea5f.png",l="/zh-cn/assets/image1-0a18e154.png",e=[t,l],r={label:"欢迎加入达坦科技硬件设计学习社区",description:"近年来随着Bluespec、Chisel、SpinalHDL、PyMTL等一众新一代HDL的推出,业界逐步感受到新一代HDL在数字芯片设计效率方面的提升。相比Verilog和VHDL,这些新一代HDL在语法表达能力、代码简洁程度、错误检查等方面有不小的提升;相比高阶综合HLS,这些新一代HDL支持RTL级描述能力,在芯片性能的把控方面远超HSL。数字芯片的敏捷设计,其目的就是为了提升硬件设计效率,减少人为错误。无论用哪一种语言进行硬件设计,背后扎实的硬件设计相关知识是必不可少的,特别是体系结构,因为体系结构专门研究CPU设计,而CPU是当今最复杂的数字芯片之一,各种常见的数字芯片设计问题在体系结构领域都能找到对应的参照,诸如流水线、缓存、内存管理、缓存一致性、异常处理等等。",cover:"./cover.png",location:"新加坡",date:"2023-01-12",title:"Welcome to join Datan Technology hardware design learning community"},s=[{label:"学习目的",level:2},{label:"学习内容",level:2},{label:"适合人群",level:2},{label:"学习方式",level:2},{label:"学习规划",level:2},{label:"参与方式",level:2}],o=`

    近年来随着 Bluespec、Chisel、SpinalHDL、PyMTL 等一众新一代 HDL 的推出,业界逐步感受到新一代 HDL 在数字芯片设计效率方面的提升。相比 Verilog 和 VHDL,这些新一代 HDL 在语法表达能力、代码简洁程度、错误检查等方面有不小的提升;相比高阶综合 HLS,这些新一代 HDL 支持 RTL 级描述能力,在芯片性能的把控方面远超 HSL。数字芯片的敏捷设计,其目的就是为了提升硬件设计效率,减少人为错误。无论用哪一种语言进行硬件设计,背后扎实的硬件设计相关知识是必不可少的,特别是体系结构,因为体系结构专门研究 CPU 设计,而 CPU 是当今最复杂的数字芯片之一,各种常见的数字芯片设计问题在体系结构领域都能找到对应的参照,诸如流水线、缓存、内存管理、缓存一致性、异常处理等等。

    +const t="/zh-cn/assets/cover-9c53ea5f.png",l="/zh-cn/assets/image1-0a18e154.png",e=[t,l],s={label:"欢迎加入达坦科技硬件设计学习社区",description:"近年来随着Bluespec、Chisel、SpinalHDL、PyMTL等一众新一代HDL的推出,业界逐步感受到新一代HDL在数字芯片设计效率方面的提升。相比Verilog和VHDL,这些新一代HDL在语法表达能力、代码简洁程度、错误检查等方面有不小的提升;相比高阶综合HLS,这些新一代HDL支持RTL级描述能力,在芯片性能的把控方面远超HSL。数字芯片的敏捷设计,其目的就是为了提升硬件设计效率,减少人为错误。无论用哪一种语言进行硬件设计,背后扎实的硬件设计相关知识是必不可少的,特别是体系结构,因为体系结构专门研究CPU设计,而CPU是当今最复杂的数字芯片之一,各种常见的数字芯片设计问题在体系结构领域都能找到对应的参照,诸如流水线、缓存、内存管理、缓存一致性、异常处理等等。",cover:"./cover.png",location:"新加坡",date:"2023-01-12",title:"Welcome to join Datan Technology hardware design learning community"},r=[{label:"学习目的",level:2},{label:"学习内容",level:2},{label:"适合人群",level:2},{label:"学习方式",level:2},{label:"学习规划",level:2},{label:"参与方式",level:2}],o=`

    近年来随着 Bluespec、Chisel、SpinalHDL、PyMTL 等一众新一代 HDL 的推出,业界逐步感受到新一代 HDL 在数字芯片设计效率方面的提升。相比 Verilog 和 VHDL,这些新一代 HDL 在语法表达能力、代码简洁程度、错误检查等方面有不小的提升;相比高阶综合 HLS,这些新一代 HDL 支持 RTL 级描述能力,在芯片性能的把控方面远超 HSL。数字芯片的敏捷设计,其目的就是为了提升硬件设计效率,减少人为错误。无论用哪一种语言进行硬件设计,背后扎实的硬件设计相关知识是必不可少的,特别是体系结构,因为体系结构专门研究 CPU 设计,而 CPU 是当今最复杂的数字芯片之一,各种常见的数字芯片设计问题在体系结构领域都能找到对应的参照,诸如流水线、缓存、内存管理、缓存一致性、异常处理等等。

    虽然国内大专院校计算机科学和电子工程专业都有开设体系结构或组成原理等相关课程,但是在实操环节缺失很多内容,特别是 CPU 里缓存、内存管理、异常处理相关的部分,基本上都不涉及。但是随着数字芯片的规模越来越大,芯片设计的复杂度指数级上升,对数字芯片的设计人员有很高的要求。当有志从事数字芯片设计的同学从学校走向社会,如何理解数字芯片设计的精髓,提升设计能力,成为能否胜任数字芯片设计工作的关键。

    为此,达坦科技在 2023 年始,发起成立硬件设计学习社区,诚邀所有对硬件敏捷开发设计感兴趣的同学加入我们的学习社区。这里有志同道合的小伙伴,共同学习目标的互助自学小组,有耐心答疑的助教。我们一起花一个月的时间,系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。

    学习目的

    @@ -42,4 +42,4 @@ const t="/zh-cn/assets/cover-9c53ea5f.png",l="/zh-cn/assets/image1-0a18e154.png"
  • 准备好个人的简历,内容包括但不局限于:学校/专业、过往学术/项目经验
  • 扫码联系小助手报名邮箱info@datenlord.io注册学习档案,通过后加入硬件设计学习社区群即参与成功。
  • -

    图片

    `;export{e as assetURLs,o as default,r as metadata,s as toc}; +

    图片

    `;export{e as assetURLs,o as default,s as metadata,r as toc}; diff --git a/zh-cn/assets/index-cc7824a8.js b/zh-cn/assets/index-11edd425.js similarity index 85% rename from zh-cn/assets/index-cc7824a8.js rename to zh-cn/assets/index-11edd425.js index 2b7d4ad..ca20336 100644 --- a/zh-cn/assets/index-cc7824a8.js +++ b/zh-cn/assets/index-11edd425.js @@ -6,7 +6,7 @@ var GE=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var bK=GE((CK,Gc) * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var hl=Symbol.for("react.element"),qE=Symbol.for("react.portal"),ZE=Symbol.for("react.fragment"),JE=Symbol.for("react.strict_mode"),ej=Symbol.for("react.profiler"),tj=Symbol.for("react.provider"),rj=Symbol.for("react.context"),nj=Symbol.for("react.forward_ref"),ij=Symbol.for("react.suspense"),oj=Symbol.for("react.memo"),sj=Symbol.for("react.lazy"),Tv=Symbol.iterator;function aj(e){return e===null||typeof e!="object"?null:(e=Tv&&e[Tv]||e["@@iterator"],typeof e=="function"?e:null)}var Bw={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Gw=Object.assign,Xw={};function Ms(e,t,r){this.props=e,this.context=t,this.refs=Xw,this.updater=r||Bw}Ms.prototype.isReactComponent={};Ms.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Ms.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Kw(){}Kw.prototype=Ms.prototype;function Bp(e,t,r){this.props=e,this.context=t,this.refs=Xw,this.updater=r||Bw}var Gp=Bp.prototype=new Kw;Gp.constructor=Bp;Gw(Gp,Ms.prototype);Gp.isPureReactComponent=!0;var Ov=Array.isArray,Qw=Object.prototype.hasOwnProperty,Xp={current:null},qw={key:!0,ref:!0,__self:!0,__source:!0};function Zw(e,t,r){var n,i={},o=null,a=null;if(t!=null)for(n in t.ref!==void 0&&(a=t.ref),t.key!==void 0&&(o=""+t.key),t)Qw.call(t,n)&&!qw.hasOwnProperty(n)&&(i[n]=t[n]);var c=arguments.length-2;if(c===1)i.children=r;else if(1()=>(t||e((t={exports:{}}).exports,t),t.exports);var bK=GE((CK,Gc) * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var fj=N,hj=Symbol.for("react.element"),mj=Symbol.for("react.fragment"),pj=Object.prototype.hasOwnProperty,gj=fj.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,vj={key:!0,ref:!0,__self:!0,__source:!0};function Jw(e,t,r){var n,i={},o=null,a=null;r!==void 0&&(o=""+r),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(a=t.ref);for(n in t)pj.call(t,n)&&!vj.hasOwnProperty(n)&&(i[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)i[n]===void 0&&(i[n]=t[n]);return{$$typeof:hj,type:e,key:o,ref:a,props:i,_owner:gj.current}}Uu.Fragment=mj;Uu.jsx=Jw;Uu.jsxs=Jw;(function(e){e.exports=Uu})(KE);var dm={},Xc={},yj={get exports(){return Xc},set exports(e){Xc=e}},xr={},fm={},wj={get exports(){return fm},set exports(e){fm=e}},e_={};/** + */var fT=N,hT=Symbol.for("react.element"),mT=Symbol.for("react.fragment"),pT=Object.prototype.hasOwnProperty,gT=fT.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,vT={key:!0,ref:!0,__self:!0,__source:!0};function Jw(e,t,r){var n,i={},o=null,a=null;r!==void 0&&(o=""+r),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(a=t.ref);for(n in t)pT.call(t,n)&&!vT.hasOwnProperty(n)&&(i[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps,t)i[n]===void 0&&(i[n]=t[n]);return{$$typeof:hT,type:e,key:o,ref:a,props:i,_owner:gT.current}}Uu.Fragment=mT;Uu.jsx=Jw;Uu.jsxs=Jw;(function(e){e.exports=Uu})(KE);var dm={},Xc={},yT={get exports(){return Xc},set exports(e){Xc=e}},xr={},fm={},wT={get exports(){return fm},set exports(e){fm=e}},e_={};/** * @license React * scheduler.production.min.js * @@ -22,7 +22,7 @@ var GE=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var bK=GE((CK,Gc) * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */(function(e){function t(W,le){var Q=W.length;W.push(le);e:for(;0>>1,he=W[ue];if(0>>1;uei(X,Q))$ti(tr,X)?(W[ue]=tr,W[$t]=Q,ue=$t):(W[ue]=X,W[Fe]=Q,ue=Fe);else if($ti(tr,Q))W[ue]=tr,W[$t]=Q,ue=$t;else break e}}return le}function i(W,le){var Q=W.sortIndex-le.sortIndex;return Q!==0?Q:W.id-le.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var a=Date,c=a.now();e.unstable_now=function(){return a.now()-c}}var d=[],h=[],g=1,v=null,x=3,b=!1,k=!1,C=!1,E=typeof setTimeout=="function"?setTimeout:null,y=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function S(W){for(var le=r(h);le!==null;){if(le.callback===null)n(h);else if(le.startTime<=W)n(h),le.sortIndex=le.expirationTime,t(d,le);else break;le=r(h)}}function j(W){if(C=!1,S(W),!k)if(r(d)!==null)k=!0,$e(O);else{var le=r(h);le!==null&&ht(j,le.startTime-W)}}function O(W,le){k=!1,C&&(C=!1,y(R),R=-1),b=!0;var Q=x;try{for(S(le),v=r(d);v!==null&&(!(v.expirationTime>le)||W&&!ee());){var ue=v.callback;if(typeof ue=="function"){v.callback=null,x=v.priorityLevel;var he=ue(v.expirationTime<=le);le=e.unstable_now(),typeof he=="function"?v.callback=he:v===r(d)&&n(d),S(le)}else n(d);v=r(d)}if(v!==null)var st=!0;else{var Fe=r(h);Fe!==null&&ht(j,Fe.startTime-le),st=!1}return st}finally{v=null,x=Q,b=!1}}var P=!1,M=null,R=-1,$=5,z=-1;function ee(){return!(e.unstable_now()-z<$)}function te(){if(M!==null){var W=e.unstable_now();z=W;var le=!0;try{le=M(!0,W)}finally{le?G():(P=!1,M=null)}}else P=!1}var G;if(typeof w=="function")G=function(){w(te)};else if(typeof MessageChannel<"u"){var lt=new MessageChannel,je=lt.port2;lt.port1.onmessage=te,G=function(){je.postMessage(null)}}else G=function(){E(te,0)};function $e(W){M=W,P||(P=!0,G())}function ht(W,le){R=E(function(){W(e.unstable_now())},le)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(W){W.callback=null},e.unstable_continueExecution=function(){k||b||(k=!0,$e(O))},e.unstable_forceFrameRate=function(W){0>W||125ue?(W.sortIndex=Q,t(h,W),r(d)===null&&W===r(h)&&(C?(y(R),R=-1):C=!0,ht(j,Q-ue))):(W.sortIndex=he,t(d,W),k||b||(k=!0,$e(O))),W},e.unstable_shouldYield=ee,e.unstable_wrapCallback=function(W){var le=x;return function(){var Q=x;x=le;try{return W.apply(this,arguments)}finally{x=Q}}}})(e_);(function(e){e.exports=e_})(wj);/** + */(function(e){function t(W,le){var Q=W.length;W.push(le);e:for(;0>>1,he=W[ue];if(0>>1;uei(X,Q))$ti(tr,X)?(W[ue]=tr,W[$t]=Q,ue=$t):(W[ue]=X,W[Fe]=Q,ue=Fe);else if($ti(tr,Q))W[ue]=tr,W[$t]=Q,ue=$t;else break e}}return le}function i(W,le){var Q=W.sortIndex-le.sortIndex;return Q!==0?Q:W.id-le.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var a=Date,c=a.now();e.unstable_now=function(){return a.now()-c}}var d=[],h=[],g=1,v=null,x=3,b=!1,k=!1,C=!1,E=typeof setTimeout=="function"?setTimeout:null,y=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function S(W){for(var le=r(h);le!==null;){if(le.callback===null)n(h);else if(le.startTime<=W)n(h),le.sortIndex=le.expirationTime,t(d,le);else break;le=r(h)}}function T(W){if(C=!1,S(W),!k)if(r(d)!==null)k=!0,$e(O);else{var le=r(h);le!==null&&ht(T,le.startTime-W)}}function O(W,le){k=!1,C&&(C=!1,y(R),R=-1),b=!0;var Q=x;try{for(S(le),v=r(d);v!==null&&(!(v.expirationTime>le)||W&&!ee());){var ue=v.callback;if(typeof ue=="function"){v.callback=null,x=v.priorityLevel;var he=ue(v.expirationTime<=le);le=e.unstable_now(),typeof he=="function"?v.callback=he:v===r(d)&&n(d),S(le)}else n(d);v=r(d)}if(v!==null)var st=!0;else{var Fe=r(h);Fe!==null&&ht(T,Fe.startTime-le),st=!1}return st}finally{v=null,x=Q,b=!1}}var P=!1,M=null,R=-1,$=5,z=-1;function ee(){return!(e.unstable_now()-z<$)}function te(){if(M!==null){var W=e.unstable_now();z=W;var le=!0;try{le=M(!0,W)}finally{le?G():(P=!1,M=null)}}else P=!1}var G;if(typeof w=="function")G=function(){w(te)};else if(typeof MessageChannel<"u"){var lt=new MessageChannel,Te=lt.port2;lt.port1.onmessage=te,G=function(){Te.postMessage(null)}}else G=function(){E(te,0)};function $e(W){M=W,P||(P=!0,G())}function ht(W,le){R=E(function(){W(e.unstable_now())},le)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(W){W.callback=null},e.unstable_continueExecution=function(){k||b||(k=!0,$e(O))},e.unstable_forceFrameRate=function(W){0>W||125ue?(W.sortIndex=Q,t(h,W),r(d)===null&&W===r(h)&&(C?(y(R),R=-1):C=!0,ht(T,Q-ue))):(W.sortIndex=he,t(d,W),k||b||(k=!0,$e(O))),W},e.unstable_shouldYield=ee,e.unstable_wrapCallback=function(W){var le=x;return function(){var Q=x;x=le;try{return W.apply(this,arguments)}finally{x=Q}}}})(e_);(function(e){e.exports=e_})(wT);/** * @license React * react-dom.production.min.js * @@ -30,14 +30,14 @@ var GE=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var bK=GE((CK,Gc) * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var t_=N,wr=fm;function H(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),hm=Object.prototype.hasOwnProperty,_j=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Rv={},Mv={};function xj(e){return hm.call(Mv,e)?!0:hm.call(Rv,e)?!1:_j.test(e)?Mv[e]=!0:(Rv[e]=!0,!1)}function Sj(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function bj(e,t,r,n){if(t===null||typeof t>"u"||Sj(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function er(e,t,r,n,i,o,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=i,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=a}var Nt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Nt[e]=new er(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Nt[t]=new er(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Nt[e]=new er(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Nt[e]=new er(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Nt[e]=new er(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Nt[e]=new er(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Nt[e]=new er(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Nt[e]=new er(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Nt[e]=new er(e,5,!1,e.toLowerCase(),null,!1,!1)});var Qp=/[\-:]([a-z])/g;function qp(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Qp,qp);Nt[t]=new er(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Qp,qp);Nt[t]=new er(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Qp,qp);Nt[t]=new er(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Nt[e]=new er(e,1,!1,e.toLowerCase(),null,!1,!1)});Nt.xlinkHref=new er("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Nt[e]=new er(e,1,!1,e.toLowerCase(),null,!0,!0)});function Zp(e,t,r,n){var i=Nt.hasOwnProperty(t)?Nt[t]:null;(i!==null?i.type!==0:n||!(2"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),hm=Object.prototype.hasOwnProperty,_T=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Rv={},Mv={};function xT(e){return hm.call(Mv,e)?!0:hm.call(Rv,e)?!1:_T.test(e)?Mv[e]=!0:(Rv[e]=!0,!1)}function ST(e,t,r,n){if(r!==null&&r.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return n?!1:r!==null?!r.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function bT(e,t,r,n){if(t===null||typeof t>"u"||ST(e,t,r,n))return!0;if(n)return!1;if(r!==null)switch(r.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function er(e,t,r,n,i,o,a){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=n,this.attributeNamespace=i,this.mustUseProperty=r,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=a}var Nt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){Nt[e]=new er(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];Nt[t]=new er(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){Nt[e]=new er(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){Nt[e]=new er(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){Nt[e]=new er(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){Nt[e]=new er(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){Nt[e]=new er(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){Nt[e]=new er(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){Nt[e]=new er(e,5,!1,e.toLowerCase(),null,!1,!1)});var Qp=/[\-:]([a-z])/g;function qp(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Qp,qp);Nt[t]=new er(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Qp,qp);Nt[t]=new er(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Qp,qp);Nt[t]=new er(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){Nt[e]=new er(e,1,!1,e.toLowerCase(),null,!1,!1)});Nt.xlinkHref=new er("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){Nt[e]=new er(e,1,!1,e.toLowerCase(),null,!0,!0)});function Zp(e,t,r,n){var i=Nt.hasOwnProperty(t)?Nt[t]:null;(i!==null?i.type!==0:n||!(2c||i[a]!==o[c]){var d=` -`+i[a].replace(" at new "," at ");return e.displayName&&d.includes("")&&(d=d.replace("",e.displayName)),d}while(1<=a&&0<=c);break}}}finally{Ef=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?ga(e):""}function kj(e){switch(e.tag){case 5:return ga(e.type);case 16:return ga("Lazy");case 13:return ga("Suspense");case 19:return ga("SuspenseList");case 0:case 2:case 15:return e=jf(e.type,!1),e;case 11:return e=jf(e.type.render,!1),e;case 1:return e=jf(e.type,!0),e;default:return""}}function vm(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Wo:return"Fragment";case Vo:return"Portal";case mm:return"Profiler";case Jp:return"StrictMode";case pm:return"Suspense";case gm:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case i_:return(e.displayName||"Context")+".Consumer";case n_:return(e._context.displayName||"Context")+".Provider";case e0:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case t0:return t=e.displayName||null,t!==null?t:vm(e.type)||"Memo";case pi:t=e._payload,e=e._init;try{return vm(e(t))}catch{}}return null}function Cj(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return vm(t);case 8:return t===Jp?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ni(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function s_(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function Dj(e){var t=s_(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var i=r.get,o=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(a){n=""+a,o.call(this,a)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(a){n=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Gl(e){e._valueTracker||(e._valueTracker=Dj(e))}function a_(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=s_(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function Kc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ym(e,t){var r=t.checked;return ot({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Av(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=Ni(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function l_(e,t){t=t.checked,t!=null&&Zp(e,"checked",t,!1)}function wm(e,t){l_(e,t);var r=Ni(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?_m(e,t.type,r):t.hasOwnProperty("defaultValue")&&_m(e,t.type,Ni(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Iv(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function _m(e,t,r){(t!=="number"||Kc(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var va=Array.isArray;function os(e,t,r,n){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=Xl.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function $a(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var xa={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Ej=["Webkit","ms","Moz","O"];Object.keys(xa).forEach(function(e){Ej.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),xa[t]=xa[e]})});function f_(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||xa.hasOwnProperty(e)&&xa[e]?(""+t).trim():t+"px"}function h_(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,i=f_(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,i):e[r]=i}}var jj=ot({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function bm(e,t){if(t){if(jj[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(H(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(H(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(H(61))}if(t.style!=null&&typeof t.style!="object")throw Error(H(62))}}function km(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Cm=null;function r0(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Dm=null,ss=null,as=null;function zv(e){if(e=gl(e)){if(typeof Dm!="function")throw Error(H(280));var t=e.stateNode;t&&(t=Qu(t),Dm(e.stateNode,e.type,t))}}function m_(e){ss?as?as.push(e):as=[e]:ss=e}function p_(){if(ss){var e=ss,t=as;if(as=ss=null,zv(e),t)for(e=0;e>>=0,e===0?32:31-(zj(e)/Yj|0)|0}var Kl=64,Ql=4194304;function ya(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Jc(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,i=e.suspendedLanes,o=e.pingedLanes,a=r&268435455;if(a!==0){var c=a&~i;c!==0?n=ya(c):(o&=a,o!==0&&(n=ya(o)))}else a=r&~i,a!==0?n=ya(a):o!==0&&(n=ya(o));if(n===0)return 0;if(t!==0&&t!==n&&!(t&i)&&(i=n&-n,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function ml(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Xr(t),e[t]=r}function Wj(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=ba),Xv=String.fromCharCode(32),Kv=!1;function A_(e,t){switch(e){case"keyup":return yT.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function I_(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Uo=!1;function _T(e,t){switch(e){case"compositionend":return I_(t);case"keypress":return t.which!==32?null:(Kv=!0,Xv);case"textInput":return e=t.data,e===Xv&&Kv?null:e;default:return null}}function xT(e,t){if(Uo)return e==="compositionend"||!u0&&A_(e,t)?(e=M_(),Tc=a0=xi=null,Uo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Jv(r)}}function Y_(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Y_(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function H_(){for(var e=window,t=Kc();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=Kc(e.document)}return t}function d0(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function OT(e){var t=H_(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&Y_(r.ownerDocument.documentElement,r)){if(n!==null&&d0(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=r.textContent.length,o=Math.min(n.start,i);n=n.end===void 0?o:Math.min(n.end,i),!e.extend&&o>n&&(i=n,n=o,o=i),i=ey(r,o);var a=ey(r,n);i&&a&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>n?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,Bo=null,Rm=null,Ca=null,Mm=!1;function ty(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;Mm||Bo==null||Bo!==Kc(n)||(n=Bo,"selectionStart"in n&&d0(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ca&&Wa(Ca,n)||(Ca=n,n=ru(Rm,"onSelect"),0Ko||(e.current=zm[Ko],zm[Ko]=null,Ko--)}function He(e,t){Ko++,zm[Ko]=e.current,e.current=t}var $i={},Ut=Hi($i),ur=Hi(!1),co=$i;function ws(e,t){var r=e.type.contextTypes;if(!r)return $i;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in r)i[o]=t[o];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function dr(e){return e=e.childContextTypes,e!=null}function iu(){Ge(ur),Ge(Ut)}function ly(e,t,r){if(Ut.current!==$i)throw Error(H(168));He(Ut,t),He(ur,r)}function Q_(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var i in n)if(!(i in t))throw Error(H(108,Cj(e)||"Unknown",i));return ot({},r,n)}function ou(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$i,co=Ut.current,He(Ut,e),He(ur,ur.current),!0}function cy(e,t,r){var n=e.stateNode;if(!n)throw Error(H(169));r?(e=Q_(e,t,co),n.__reactInternalMemoizedMergedChildContext=e,Ge(ur),Ge(Ut),He(Ut,e)):Ge(ur),He(ur,r)}var $n=null,qu=!1,Ff=!1;function q_(e){$n===null?$n=[e]:$n.push(e)}function FT(e){qu=!0,q_(e)}function Fi(){if(!Ff&&$n!==null){Ff=!0;var e=0,t=Ae;try{var r=$n;for(Ae=1;e>=a,i-=a,Yn=1<<32-Xr(t)+i|r<R?($=M,M=null):$=M.sibling;var z=x(y,M,S[R],j);if(z===null){M===null&&(M=$);break}e&&M&&z.alternate===null&&t(y,M),w=o(z,w,R),P===null?O=z:P.sibling=z,P=z,M=$}if(R===S.length)return r(y,M),et&&Ki(y,R),O;if(M===null){for(;RR?($=M,M=null):$=M.sibling;var ee=x(y,M,z.value,j);if(ee===null){M===null&&(M=$);break}e&&M&&ee.alternate===null&&t(y,M),w=o(ee,w,R),P===null?O=ee:P.sibling=ee,P=ee,M=$}if(z.done)return r(y,M),et&&Ki(y,R),O;if(M===null){for(;!z.done;R++,z=S.next())z=v(y,z.value,j),z!==null&&(w=o(z,w,R),P===null?O=z:P.sibling=z,P=z);return et&&Ki(y,R),O}for(M=n(y,M);!z.done;R++,z=S.next())z=b(M,y,R,z.value,j),z!==null&&(e&&z.alternate!==null&&M.delete(z.key===null?R:z.key),w=o(z,w,R),P===null?O=z:P.sibling=z,P=z);return e&&M.forEach(function(te){return t(y,te)}),et&&Ki(y,R),O}function E(y,w,S,j){if(typeof S=="object"&&S!==null&&S.type===Wo&&S.key===null&&(S=S.props.children),typeof S=="object"&&S!==null){switch(S.$$typeof){case Bl:e:{for(var O=S.key,P=w;P!==null;){if(P.key===O){if(O=S.type,O===Wo){if(P.tag===7){r(y,P.sibling),w=i(P,S.props.children),w.return=y,y=w;break e}}else if(P.elementType===O||typeof O=="object"&&O!==null&&O.$$typeof===pi&&gy(O)===P.type){r(y,P.sibling),w=i(P,S.props),w.ref=aa(y,P,S),w.return=y,y=w;break e}r(y,P);break}else t(y,P);P=P.sibling}S.type===Wo?(w=oo(S.props.children,y.mode,j,S.key),w.return=y,y=w):(j=Nc(S.type,S.key,S.props,null,y.mode,j),j.ref=aa(y,w,S),j.return=y,y=j)}return a(y);case Vo:e:{for(P=S.key;w!==null;){if(w.key===P)if(w.tag===4&&w.stateNode.containerInfo===S.containerInfo&&w.stateNode.implementation===S.implementation){r(y,w.sibling),w=i(w,S.children||[]),w.return=y,y=w;break e}else{r(y,w);break}else t(y,w);w=w.sibling}w=Qf(S,y.mode,j),w.return=y,y=w}return a(y);case pi:return P=S._init,E(y,w,P(S._payload),j)}if(va(S))return k(y,w,S,j);if(ra(S))return C(y,w,S,j);nc(y,S)}return typeof S=="string"&&S!==""||typeof S=="number"?(S=""+S,w!==null&&w.tag===6?(r(y,w.sibling),w=i(w,S),w.return=y,y=w):(r(y,w),w=Kf(S,y.mode,j),w.return=y,y=w),a(y)):r(y,w)}return E}var xs=o2(!0),s2=o2(!1),vl={},dn=Hi(vl),Xa=Hi(vl),Ka=Hi(vl);function eo(e){if(e===vl)throw Error(H(174));return e}function _0(e,t){switch(He(Ka,t),He(Xa,e),He(dn,vl),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Sm(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Sm(t,e)}Ge(dn),He(dn,t)}function Ss(){Ge(dn),Ge(Xa),Ge(Ka)}function a2(e){eo(Ka.current);var t=eo(dn.current),r=Sm(t,e.type);t!==r&&(He(Xa,e),He(dn,r))}function x0(e){Xa.current===e&&(Ge(dn),Ge(Xa))}var nt=Hi(0);function du(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Vf=[];function S0(){for(var e=0;er?r:4,e(!0);var n=Wf.transition;Wf.transition={};try{e(!1),t()}finally{Ae=r,Wf.transition=n}}function b2(){return Rr().memoizedState}function BT(e,t,r){var n=Pi(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},k2(e))C2(t,r);else if(r=t2(e,t,r,n),r!==null){var i=Zt();Kr(r,e,n,i),D2(r,t,n)}}function GT(e,t,r){var n=Pi(e),i={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(k2(e))C2(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var a=t.lastRenderedState,c=o(a,r);if(i.hasEagerState=!0,i.eagerState=c,qr(c,a)){var d=t.interleaved;d===null?(i.next=i,y0(t)):(i.next=d.next,d.next=i),t.interleaved=i;return}}catch{}finally{}r=t2(e,t,i,n),r!==null&&(i=Zt(),Kr(r,e,n,i),D2(r,t,n))}}function k2(e){var t=e.alternate;return e===it||t!==null&&t===it}function C2(e,t){Da=fu=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function D2(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,i0(e,r)}}var hu={readContext:Pr,useCallback:Yt,useContext:Yt,useEffect:Yt,useImperativeHandle:Yt,useInsertionEffect:Yt,useLayoutEffect:Yt,useMemo:Yt,useReducer:Yt,useRef:Yt,useState:Yt,useDebugValue:Yt,useDeferredValue:Yt,useTransition:Yt,useMutableSource:Yt,useSyncExternalStore:Yt,useId:Yt,unstable_isNewReconciler:!1},XT={readContext:Pr,useCallback:function(e,t){return an().memoizedState=[e,t===void 0?null:t],e},useContext:Pr,useEffect:yy,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,Mc(4194308,4,y2.bind(null,t,e),r)},useLayoutEffect:function(e,t){return Mc(4194308,4,e,t)},useInsertionEffect:function(e,t){return Mc(4,2,e,t)},useMemo:function(e,t){var r=an();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=an();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=BT.bind(null,it,e),[n.memoizedState,e]},useRef:function(e){var t=an();return e={current:e},t.memoizedState=e},useState:vy,useDebugValue:E0,useDeferredValue:function(e){return an().memoizedState=e},useTransition:function(){var e=vy(!1),t=e[0];return e=UT.bind(null,e[1]),an().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=it,i=an();if(et){if(r===void 0)throw Error(H(407));r=r()}else{if(r=t(),Mt===null)throw Error(H(349));fo&30||u2(n,t,r)}i.memoizedState=r;var o={value:r,getSnapshot:t};return i.queue=o,yy(f2.bind(null,n,o,e),[e]),n.flags|=2048,Za(9,d2.bind(null,n,o,r,t),void 0,null),r},useId:function(){var e=an(),t=Mt.identifierPrefix;if(et){var r=Hn,n=Yn;r=(n&~(1<<32-Xr(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=Qa++,0")&&(d=d.replace("",e.displayName)),d}while(1<=a&&0<=c);break}}}finally{Ef=!1,Error.prepareStackTrace=r}return(e=e?e.displayName||e.name:"")?ga(e):""}function kT(e){switch(e.tag){case 5:return ga(e.type);case 16:return ga("Lazy");case 13:return ga("Suspense");case 19:return ga("SuspenseList");case 0:case 2:case 15:return e=Tf(e.type,!1),e;case 11:return e=Tf(e.type.render,!1),e;case 1:return e=Tf(e.type,!0),e;default:return""}}function vm(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Wo:return"Fragment";case Vo:return"Portal";case mm:return"Profiler";case Jp:return"StrictMode";case pm:return"Suspense";case gm:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case i_:return(e.displayName||"Context")+".Consumer";case n_:return(e._context.displayName||"Context")+".Provider";case e0:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case t0:return t=e.displayName||null,t!==null?t:vm(e.type)||"Memo";case pi:t=e._payload,e=e._init;try{return vm(e(t))}catch{}}return null}function CT(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return vm(t);case 8:return t===Jp?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Ni(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function s_(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function DT(e){var t=s_(e)?"checked":"value",r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),n=""+e[t];if(!e.hasOwnProperty(t)&&typeof r<"u"&&typeof r.get=="function"&&typeof r.set=="function"){var i=r.get,o=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(a){n=""+a,o.call(this,a)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(a){n=""+a},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Gl(e){e._valueTracker||(e._valueTracker=DT(e))}function a_(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var r=t.getValue(),n="";return e&&(n=s_(e)?e.checked?"true":"false":e.value),e=n,e!==r?(t.setValue(e),!0):!1}function Kc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ym(e,t){var r=t.checked;return ot({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:r??e._wrapperState.initialChecked})}function Av(e,t){var r=t.defaultValue==null?"":t.defaultValue,n=t.checked!=null?t.checked:t.defaultChecked;r=Ni(t.value!=null?t.value:r),e._wrapperState={initialChecked:n,initialValue:r,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function l_(e,t){t=t.checked,t!=null&&Zp(e,"checked",t,!1)}function wm(e,t){l_(e,t);var r=Ni(t.value),n=t.type;if(r!=null)n==="number"?(r===0&&e.value===""||e.value!=r)&&(e.value=""+r):e.value!==""+r&&(e.value=""+r);else if(n==="submit"||n==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?_m(e,t.type,r):t.hasOwnProperty("defaultValue")&&_m(e,t.type,Ni(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Iv(e,t,r){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var n=t.type;if(!(n!=="submit"&&n!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,r||t===e.value||(e.value=t),e.defaultValue=t}r=e.name,r!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,r!==""&&(e.name=r)}function _m(e,t,r){(t!=="number"||Kc(e.ownerDocument)!==e)&&(r==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+r&&(e.defaultValue=""+r))}var va=Array.isArray;function os(e,t,r,n){if(e=e.options,t){t={};for(var i=0;i"+t.valueOf().toString()+"",t=Xl.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function $a(e,t){if(t){var r=e.firstChild;if(r&&r===e.lastChild&&r.nodeType===3){r.nodeValue=t;return}}e.textContent=t}var xa={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ET=["Webkit","ms","Moz","O"];Object.keys(xa).forEach(function(e){ET.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),xa[t]=xa[e]})});function f_(e,t,r){return t==null||typeof t=="boolean"||t===""?"":r||typeof t!="number"||t===0||xa.hasOwnProperty(e)&&xa[e]?(""+t).trim():t+"px"}function h_(e,t){e=e.style;for(var r in t)if(t.hasOwnProperty(r)){var n=r.indexOf("--")===0,i=f_(r,t[r],n);r==="float"&&(r="cssFloat"),n?e.setProperty(r,i):e[r]=i}}var TT=ot({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function bm(e,t){if(t){if(TT[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(Y(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(Y(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(Y(61))}if(t.style!=null&&typeof t.style!="object")throw Error(Y(62))}}function km(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Cm=null;function r0(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Dm=null,ss=null,as=null;function zv(e){if(e=gl(e)){if(typeof Dm!="function")throw Error(Y(280));var t=e.stateNode;t&&(t=Qu(t),Dm(e.stateNode,e.type,t))}}function m_(e){ss?as?as.push(e):as=[e]:ss=e}function p_(){if(ss){var e=ss,t=as;if(as=ss=null,zv(e),t)for(e=0;e>>=0,e===0?32:31-(zT(e)/HT|0)|0}var Kl=64,Ql=4194304;function ya(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Jc(e,t){var r=e.pendingLanes;if(r===0)return 0;var n=0,i=e.suspendedLanes,o=e.pingedLanes,a=r&268435455;if(a!==0){var c=a&~i;c!==0?n=ya(c):(o&=a,o!==0&&(n=ya(o)))}else a=r&~i,a!==0?n=ya(a):o!==0&&(n=ya(o));if(n===0)return 0;if(t!==0&&t!==n&&!(t&i)&&(i=n&-n,o=t&-t,i>=o||i===16&&(o&4194240)!==0))return t;if(n&4&&(n|=r&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=n;0r;r++)t.push(e);return t}function ml(e,t,r){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Xr(t),e[t]=r}function WT(e,t){var r=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var n=e.eventTimes;for(e=e.expirationTimes;0=ba),Xv=String.fromCharCode(32),Kv=!1;function A_(e,t){switch(e){case"keyup":return yj.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function I_(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Uo=!1;function _j(e,t){switch(e){case"compositionend":return I_(t);case"keypress":return t.which!==32?null:(Kv=!0,Xv);case"textInput":return e=t.data,e===Xv&&Kv?null:e;default:return null}}function xj(e,t){if(Uo)return e==="compositionend"||!u0&&A_(e,t)?(e=M_(),jc=a0=xi=null,Uo=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=Jv(r)}}function H_(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?H_(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Y_(){for(var e=window,t=Kc();t instanceof e.HTMLIFrameElement;){try{var r=typeof t.contentWindow.location.href=="string"}catch{r=!1}if(r)e=t.contentWindow;else break;t=Kc(e.document)}return t}function d0(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function Oj(e){var t=Y_(),r=e.focusedElem,n=e.selectionRange;if(t!==r&&r&&r.ownerDocument&&H_(r.ownerDocument.documentElement,r)){if(n!==null&&d0(r)){if(t=n.start,e=n.end,e===void 0&&(e=t),"selectionStart"in r)r.selectionStart=t,r.selectionEnd=Math.min(e,r.value.length);else if(e=(t=r.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var i=r.textContent.length,o=Math.min(n.start,i);n=n.end===void 0?o:Math.min(n.end,i),!e.extend&&o>n&&(i=n,n=o,o=i),i=ey(r,o);var a=ey(r,n);i&&a&&(e.rangeCount!==1||e.anchorNode!==i.node||e.anchorOffset!==i.offset||e.focusNode!==a.node||e.focusOffset!==a.offset)&&(t=t.createRange(),t.setStart(i.node,i.offset),e.removeAllRanges(),o>n?(e.addRange(t),e.extend(a.node,a.offset)):(t.setEnd(a.node,a.offset),e.addRange(t)))}}for(t=[],e=r;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof r.focus=="function"&&r.focus(),r=0;r=document.documentMode,Bo=null,Rm=null,Ca=null,Mm=!1;function ty(e,t,r){var n=r.window===r?r.document:r.nodeType===9?r:r.ownerDocument;Mm||Bo==null||Bo!==Kc(n)||(n=Bo,"selectionStart"in n&&d0(n)?n={start:n.selectionStart,end:n.selectionEnd}:(n=(n.ownerDocument&&n.ownerDocument.defaultView||window).getSelection(),n={anchorNode:n.anchorNode,anchorOffset:n.anchorOffset,focusNode:n.focusNode,focusOffset:n.focusOffset}),Ca&&Wa(Ca,n)||(Ca=n,n=ru(Rm,"onSelect"),0Ko||(e.current=zm[Ko],zm[Ko]=null,Ko--)}function Ye(e,t){Ko++,zm[Ko]=e.current,e.current=t}var $i={},Ut=Yi($i),ur=Yi(!1),co=$i;function ws(e,t){var r=e.type.contextTypes;if(!r)return $i;var n=e.stateNode;if(n&&n.__reactInternalMemoizedUnmaskedChildContext===t)return n.__reactInternalMemoizedMaskedChildContext;var i={},o;for(o in r)i[o]=t[o];return n&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=i),i}function dr(e){return e=e.childContextTypes,e!=null}function iu(){Ge(ur),Ge(Ut)}function ly(e,t,r){if(Ut.current!==$i)throw Error(Y(168));Ye(Ut,t),Ye(ur,r)}function Q_(e,t,r){var n=e.stateNode;if(t=t.childContextTypes,typeof n.getChildContext!="function")return r;n=n.getChildContext();for(var i in n)if(!(i in t))throw Error(Y(108,CT(e)||"Unknown",i));return ot({},r,n)}function ou(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||$i,co=Ut.current,Ye(Ut,e),Ye(ur,ur.current),!0}function cy(e,t,r){var n=e.stateNode;if(!n)throw Error(Y(169));r?(e=Q_(e,t,co),n.__reactInternalMemoizedMergedChildContext=e,Ge(ur),Ge(Ut),Ye(Ut,e)):Ge(ur),Ye(ur,r)}var $n=null,qu=!1,Ff=!1;function q_(e){$n===null?$n=[e]:$n.push(e)}function Fj(e){qu=!0,q_(e)}function Fi(){if(!Ff&&$n!==null){Ff=!0;var e=0,t=Ae;try{var r=$n;for(Ae=1;e>=a,i-=a,Hn=1<<32-Xr(t)+i|r<R?($=M,M=null):$=M.sibling;var z=x(y,M,S[R],T);if(z===null){M===null&&(M=$);break}e&&M&&z.alternate===null&&t(y,M),w=o(z,w,R),P===null?O=z:P.sibling=z,P=z,M=$}if(R===S.length)return r(y,M),et&&Ki(y,R),O;if(M===null){for(;RR?($=M,M=null):$=M.sibling;var ee=x(y,M,z.value,T);if(ee===null){M===null&&(M=$);break}e&&M&&ee.alternate===null&&t(y,M),w=o(ee,w,R),P===null?O=ee:P.sibling=ee,P=ee,M=$}if(z.done)return r(y,M),et&&Ki(y,R),O;if(M===null){for(;!z.done;R++,z=S.next())z=v(y,z.value,T),z!==null&&(w=o(z,w,R),P===null?O=z:P.sibling=z,P=z);return et&&Ki(y,R),O}for(M=n(y,M);!z.done;R++,z=S.next())z=b(M,y,R,z.value,T),z!==null&&(e&&z.alternate!==null&&M.delete(z.key===null?R:z.key),w=o(z,w,R),P===null?O=z:P.sibling=z,P=z);return e&&M.forEach(function(te){return t(y,te)}),et&&Ki(y,R),O}function E(y,w,S,T){if(typeof S=="object"&&S!==null&&S.type===Wo&&S.key===null&&(S=S.props.children),typeof S=="object"&&S!==null){switch(S.$$typeof){case Bl:e:{for(var O=S.key,P=w;P!==null;){if(P.key===O){if(O=S.type,O===Wo){if(P.tag===7){r(y,P.sibling),w=i(P,S.props.children),w.return=y,y=w;break e}}else if(P.elementType===O||typeof O=="object"&&O!==null&&O.$$typeof===pi&&gy(O)===P.type){r(y,P.sibling),w=i(P,S.props),w.ref=aa(y,P,S),w.return=y,y=w;break e}r(y,P);break}else t(y,P);P=P.sibling}S.type===Wo?(w=oo(S.props.children,y.mode,T,S.key),w.return=y,y=w):(T=Nc(S.type,S.key,S.props,null,y.mode,T),T.ref=aa(y,w,S),T.return=y,y=T)}return a(y);case Vo:e:{for(P=S.key;w!==null;){if(w.key===P)if(w.tag===4&&w.stateNode.containerInfo===S.containerInfo&&w.stateNode.implementation===S.implementation){r(y,w.sibling),w=i(w,S.children||[]),w.return=y,y=w;break e}else{r(y,w);break}else t(y,w);w=w.sibling}w=Qf(S,y.mode,T),w.return=y,y=w}return a(y);case pi:return P=S._init,E(y,w,P(S._payload),T)}if(va(S))return k(y,w,S,T);if(ra(S))return C(y,w,S,T);nc(y,S)}return typeof S=="string"&&S!==""||typeof S=="number"?(S=""+S,w!==null&&w.tag===6?(r(y,w.sibling),w=i(w,S),w.return=y,y=w):(r(y,w),w=Kf(S,y.mode,T),w.return=y,y=w),a(y)):r(y,w)}return E}var xs=o2(!0),s2=o2(!1),vl={},dn=Yi(vl),Xa=Yi(vl),Ka=Yi(vl);function eo(e){if(e===vl)throw Error(Y(174));return e}function _0(e,t){switch(Ye(Ka,t),Ye(Xa,e),Ye(dn,vl),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:Sm(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=Sm(t,e)}Ge(dn),Ye(dn,t)}function Ss(){Ge(dn),Ge(Xa),Ge(Ka)}function a2(e){eo(Ka.current);var t=eo(dn.current),r=Sm(t,e.type);t!==r&&(Ye(Xa,e),Ye(dn,r))}function x0(e){Xa.current===e&&(Ge(dn),Ge(Xa))}var nt=Yi(0);function du(e){for(var t=e;t!==null;){if(t.tag===13){var r=t.memoizedState;if(r!==null&&(r=r.dehydrated,r===null||r.data==="$?"||r.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Vf=[];function S0(){for(var e=0;er?r:4,e(!0);var n=Wf.transition;Wf.transition={};try{e(!1),t()}finally{Ae=r,Wf.transition=n}}function b2(){return Rr().memoizedState}function Bj(e,t,r){var n=Pi(e);if(r={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null},k2(e))C2(t,r);else if(r=t2(e,t,r,n),r!==null){var i=Zt();Kr(r,e,n,i),D2(r,t,n)}}function Gj(e,t,r){var n=Pi(e),i={lane:n,action:r,hasEagerState:!1,eagerState:null,next:null};if(k2(e))C2(t,i);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var a=t.lastRenderedState,c=o(a,r);if(i.hasEagerState=!0,i.eagerState=c,qr(c,a)){var d=t.interleaved;d===null?(i.next=i,y0(t)):(i.next=d.next,d.next=i),t.interleaved=i;return}}catch{}finally{}r=t2(e,t,i,n),r!==null&&(i=Zt(),Kr(r,e,n,i),D2(r,t,n))}}function k2(e){var t=e.alternate;return e===it||t!==null&&t===it}function C2(e,t){Da=fu=!0;var r=e.pending;r===null?t.next=t:(t.next=r.next,r.next=t),e.pending=t}function D2(e,t,r){if(r&4194240){var n=t.lanes;n&=e.pendingLanes,r|=n,t.lanes=r,i0(e,r)}}var hu={readContext:Pr,useCallback:Ht,useContext:Ht,useEffect:Ht,useImperativeHandle:Ht,useInsertionEffect:Ht,useLayoutEffect:Ht,useMemo:Ht,useReducer:Ht,useRef:Ht,useState:Ht,useDebugValue:Ht,useDeferredValue:Ht,useTransition:Ht,useMutableSource:Ht,useSyncExternalStore:Ht,useId:Ht,unstable_isNewReconciler:!1},Xj={readContext:Pr,useCallback:function(e,t){return an().memoizedState=[e,t===void 0?null:t],e},useContext:Pr,useEffect:yy,useImperativeHandle:function(e,t,r){return r=r!=null?r.concat([e]):null,Mc(4194308,4,y2.bind(null,t,e),r)},useLayoutEffect:function(e,t){return Mc(4194308,4,e,t)},useInsertionEffect:function(e,t){return Mc(4,2,e,t)},useMemo:function(e,t){var r=an();return t=t===void 0?null:t,e=e(),r.memoizedState=[e,t],e},useReducer:function(e,t,r){var n=an();return t=r!==void 0?r(t):t,n.memoizedState=n.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},n.queue=e,e=e.dispatch=Bj.bind(null,it,e),[n.memoizedState,e]},useRef:function(e){var t=an();return e={current:e},t.memoizedState=e},useState:vy,useDebugValue:E0,useDeferredValue:function(e){return an().memoizedState=e},useTransition:function(){var e=vy(!1),t=e[0];return e=Uj.bind(null,e[1]),an().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,r){var n=it,i=an();if(et){if(r===void 0)throw Error(Y(407));r=r()}else{if(r=t(),Mt===null)throw Error(Y(349));fo&30||u2(n,t,r)}i.memoizedState=r;var o={value:r,getSnapshot:t};return i.queue=o,yy(f2.bind(null,n,o,e),[e]),n.flags|=2048,Za(9,d2.bind(null,n,o,r,t),void 0,null),r},useId:function(){var e=an(),t=Mt.identifierPrefix;if(et){var r=Yn,n=Hn;r=(n&~(1<<32-Xr(n)-1)).toString(32)+r,t=":"+t+"R"+r,r=Qa++,0<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=a.createElement(r,{is:n.is}):(e=a.createElement(r),r==="select"&&(a=e,n.multiple?a.multiple=!0:n.size&&(a.size=n.size))):e=a.createElementNS(e,r),e[ln]=t,e[Ga]=n,A2(e,t,!1,!1),t.stateNode=e;e:{switch(a=km(r,n),r){case"dialog":Ue("cancel",e),Ue("close",e),i=n;break;case"iframe":case"object":case"embed":Ue("load",e),i=n;break;case"video":case"audio":for(i=0;iks&&(t.flags|=128,n=!0,la(o,!1),t.lanes=4194304)}else{if(!n)if(e=du(a),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),la(o,!0),o.tail===null&&o.tailMode==="hidden"&&!a.alternate&&!et)return Ht(t),null}else 2*ft()-o.renderingStartTime>ks&&r!==1073741824&&(t.flags|=128,n=!0,la(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(r=o.last,r!==null?r.sibling=a:t.child=a,o.last=a)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=ft(),t.sibling=null,r=nt.current,He(nt,n?r&1|2:r&1),t):(Ht(t),null);case 22:case 23:return M0(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?pr&1073741824&&(Ht(t),t.subtreeFlags&6&&(t.flags|=8192)):Ht(t),null;case 24:return null;case 25:return null}throw Error(H(156,t.tag))}function rO(e,t){switch(h0(t),t.tag){case 1:return dr(t.type)&&iu(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ss(),Ge(ur),Ge(Ut),S0(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return x0(t),null;case 13:if(Ge(nt),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(H(340));_s()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ge(nt),null;case 4:return Ss(),null;case 10:return v0(t.type._context),null;case 22:case 23:return M0(),null;case 24:return null;default:return null}}var oc=!1,Vt=!1,nO=typeof WeakSet=="function"?WeakSet:Set,Z=null;function Jo(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){at(e,t,n)}else r.current=null}function qm(e,t,r){try{r()}catch(n){at(e,t,n)}}var Ey=!1;function iO(e,t){if(Lm=eu,e=H_(),d0(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var i=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{r.nodeType,o.nodeType}catch{r=null;break e}var a=0,c=-1,d=-1,h=0,g=0,v=e,x=null;t:for(;;){for(var b;v!==r||i!==0&&v.nodeType!==3||(c=a+i),v!==o||n!==0&&v.nodeType!==3||(d=a+n),v.nodeType===3&&(a+=v.nodeValue.length),(b=v.firstChild)!==null;)x=v,v=b;for(;;){if(v===e)break t;if(x===r&&++h===i&&(c=a),x===o&&++g===n&&(d=a),(b=v.nextSibling)!==null)break;v=x,x=v.parentNode}v=b}r=c===-1||d===-1?null:{start:c,end:d}}else r=null}r=r||{start:0,end:0}}else r=null;for(Am={focusedElem:e,selectionRange:r},eu=!1,Z=t;Z!==null;)if(t=Z,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Z=e;else for(;Z!==null;){t=Z;try{var k=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var C=k.memoizedProps,E=k.memoizedState,y=t.stateNode,w=y.getSnapshotBeforeUpdate(t.elementType===t.type?C:Fr(t.type,C),E);y.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var S=t.stateNode.containerInfo;S.nodeType===1?S.textContent="":S.nodeType===9&&S.documentElement&&S.removeChild(S.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(H(163))}}catch(j){at(t,t.return,j)}if(e=t.sibling,e!==null){e.return=t.return,Z=e;break}Z=t.return}return k=Ey,Ey=!1,k}function Ea(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var i=n=n.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&qm(t,r,o)}i=i.next}while(i!==n)}}function ed(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function Zm(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function $2(e){var t=e.alternate;t!==null&&(e.alternate=null,$2(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[ln],delete t[Ga],delete t[$m],delete t[YT],delete t[HT])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function z2(e){return e.tag===5||e.tag===3||e.tag===4}function jy(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||z2(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Jm(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=nu));else if(n!==4&&(e=e.child,e!==null))for(Jm(e,t,r),e=e.sibling;e!==null;)Jm(e,t,r),e=e.sibling}function ep(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(ep(e,t,r),e=e.sibling;e!==null;)ep(e,t,r),e=e.sibling}var At=null,Wr=!1;function di(e,t,r){for(r=r.child;r!==null;)Y2(e,t,r),r=r.sibling}function Y2(e,t,r){if(un&&typeof un.onCommitFiberUnmount=="function")try{un.onCommitFiberUnmount(Bu,r)}catch{}switch(r.tag){case 5:Vt||Jo(r,t);case 6:var n=At,i=Wr;At=null,di(e,t,r),At=n,Wr=i,At!==null&&(Wr?(e=At,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):At.removeChild(r.stateNode));break;case 18:At!==null&&(Wr?(e=At,r=r.stateNode,e.nodeType===8?Hf(e.parentNode,r):e.nodeType===1&&Hf(e,r),Fa(e)):Hf(At,r.stateNode));break;case 4:n=At,i=Wr,At=r.stateNode.containerInfo,Wr=!0,di(e,t,r),At=n,Wr=i;break;case 0:case 11:case 14:case 15:if(!Vt&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){i=n=n.next;do{var o=i,a=o.destroy;o=o.tag,a!==void 0&&(o&2||o&4)&&qm(r,t,a),i=i.next}while(i!==n)}di(e,t,r);break;case 1:if(!Vt&&(Jo(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(c){at(r,t,c)}di(e,t,r);break;case 21:di(e,t,r);break;case 22:r.mode&1?(Vt=(n=Vt)||r.memoizedState!==null,di(e,t,r),Vt=n):di(e,t,r);break;default:di(e,t,r)}}function Ty(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new nO),t.forEach(function(n){var i=hO.bind(null,e,n);r.has(n)||(r.add(n),n.then(i,i))})}}function Hr(e,t){var r=t.deletions;if(r!==null)for(var n=0;ni&&(i=a),n&=~o}if(n=i,n=ft()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*sO(n/1960))-n,10e?16:e,Si===null)var n=!1;else{if(e=Si,Si=null,gu=0,Ee&6)throw Error(H(331));var i=Ee;for(Ee|=4,Z=e.current;Z!==null;){var o=Z,a=o.child;if(Z.flags&16){var c=o.deletions;if(c!==null){for(var d=0;dft()-P0?io(e,0):O0|=r),fr(e,t)}function X2(e,t){t===0&&(e.mode&1?(t=Ql,Ql<<=1,!(Ql&130023424)&&(Ql=4194304)):t=1);var r=Zt();e=Kn(e,t),e!==null&&(ml(e,t,r),fr(e,r))}function fO(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),X2(e,r)}function hO(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,i=e.memoizedState;i!==null&&(r=i.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(H(314))}n!==null&&n.delete(t),X2(e,r)}var K2;K2=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||ur.current)cr=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return cr=!1,eO(e,t,r);cr=!!(e.flags&131072)}else cr=!1,et&&t.flags&1048576&&Z_(t,au,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;Lc(e,t),e=t.pendingProps;var i=ws(t,Ut.current);cs(t,r),i=k0(null,t,n,e,i,r);var o=C0();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,dr(n)?(o=!0,ou(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,w0(t),i.updater=Zu,t.stateNode=i,i._reactInternals=t,Wm(t,n,e,r),t=Gm(null,t,n,!0,o,r)):(t.tag=0,et&&o&&f0(t),qt(null,t,i,r),t=t.child),t;case 16:n=t.elementType;e:{switch(Lc(e,t),e=t.pendingProps,i=n._init,n=i(n._payload),t.type=n,i=t.tag=pO(n),e=Fr(n,e),i){case 0:t=Bm(null,t,n,e,r);break e;case 1:t=ky(null,t,n,e,r);break e;case 11:t=Sy(null,t,n,e,r);break e;case 14:t=by(null,t,n,Fr(n.type,e),r);break e}throw Error(H(306,n,""))}return t;case 0:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Fr(n,i),Bm(e,t,n,i,r);case 1:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Fr(n,i),ky(e,t,n,i,r);case 3:e:{if(R2(t),e===null)throw Error(H(387));n=t.pendingProps,o=t.memoizedState,i=o.element,r2(e,t),uu(t,n,null,r);var a=t.memoizedState;if(n=a.element,o.isDehydrated)if(o={element:n,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=bs(Error(H(423)),t),t=Cy(e,t,n,r,i);break e}else if(n!==i){i=bs(Error(H(424)),t),t=Cy(e,t,n,r,i);break e}else for(vr=ji(t.stateNode.containerInfo.firstChild),yr=t,et=!0,Ur=null,r=s2(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(_s(),n===i){t=Qn(e,t,r);break e}qt(e,t,n,r)}t=t.child}return t;case 5:return a2(t),e===null&&Hm(t),n=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,a=i.children,Im(n,i)?a=null:o!==null&&Im(n,o)&&(t.flags|=32),P2(e,t),qt(e,t,a,r),t.child;case 6:return e===null&&Hm(t),null;case 13:return M2(e,t,r);case 4:return _0(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=xs(t,null,n,r):qt(e,t,n,r),t.child;case 11:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Fr(n,i),Sy(e,t,n,i,r);case 7:return qt(e,t,t.pendingProps,r),t.child;case 8:return qt(e,t,t.pendingProps.children,r),t.child;case 12:return qt(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,i=t.pendingProps,o=t.memoizedProps,a=i.value,He(lu,n._currentValue),n._currentValue=a,o!==null)if(qr(o.value,a)){if(o.children===i.children&&!ur.current){t=Qn(e,t,r);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var c=o.dependencies;if(c!==null){a=o.child;for(var d=c.firstContext;d!==null;){if(d.context===n){if(o.tag===1){d=Wn(-1,r&-r),d.tag=2;var h=o.updateQueue;if(h!==null){h=h.shared;var g=h.pending;g===null?d.next=d:(d.next=g.next,g.next=d),h.pending=d}}o.lanes|=r,d=o.alternate,d!==null&&(d.lanes|=r),Fm(o.return,r,t),c.lanes|=r;break}d=d.next}}else if(o.tag===10)a=o.type===t.type?null:o.child;else if(o.tag===18){if(a=o.return,a===null)throw Error(H(341));a.lanes|=r,c=a.alternate,c!==null&&(c.lanes|=r),Fm(a,r,t),a=o.sibling}else a=o.child;if(a!==null)a.return=o;else for(a=o;a!==null;){if(a===t){a=null;break}if(o=a.sibling,o!==null){o.return=a.return,a=o;break}a=a.return}o=a}qt(e,t,i.children,r),t=t.child}return t;case 9:return i=t.type,n=t.pendingProps.children,cs(t,r),i=Pr(i),n=n(i),t.flags|=1,qt(e,t,n,r),t.child;case 14:return n=t.type,i=Fr(n,t.pendingProps),i=Fr(n.type,i),by(e,t,n,i,r);case 15:return T2(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Fr(n,i),Lc(e,t),t.tag=1,dr(n)?(e=!0,ou(t)):e=!1,cs(t,r),i2(t,n,i),Wm(t,n,i,r),Gm(null,t,n,!0,e,r);case 19:return L2(e,t,r);case 22:return O2(e,t,r)}throw Error(H(156,t.tag))};function Q2(e,t){return S_(e,t)}function mO(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Tr(e,t,r,n){return new mO(e,t,r,n)}function A0(e){return e=e.prototype,!(!e||!e.isReactComponent)}function pO(e){if(typeof e=="function")return A0(e)?1:0;if(e!=null){if(e=e.$$typeof,e===e0)return 11;if(e===t0)return 14}return 2}function Ri(e,t){var r=e.alternate;return r===null?(r=Tr(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function Nc(e,t,r,n,i,o){var a=2;if(n=e,typeof e=="function")A0(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Wo:return oo(r.children,i,o,t);case Jp:a=8,i|=8;break;case mm:return e=Tr(12,r,t,i|2),e.elementType=mm,e.lanes=o,e;case pm:return e=Tr(13,r,t,i),e.elementType=pm,e.lanes=o,e;case gm:return e=Tr(19,r,t,i),e.elementType=gm,e.lanes=o,e;case o_:return rd(r,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case n_:a=10;break e;case i_:a=9;break e;case e0:a=11;break e;case t0:a=14;break e;case pi:a=16,n=null;break e}throw Error(H(130,e==null?e:typeof e,""))}return t=Tr(a,r,t,i),t.elementType=e,t.type=n,t.lanes=o,t}function oo(e,t,r,n){return e=Tr(7,e,n,t),e.lanes=r,e}function rd(e,t,r,n){return e=Tr(22,e,n,t),e.elementType=o_,e.lanes=r,e.stateNode={isHidden:!1},e}function Kf(e,t,r){return e=Tr(6,e,null,t),e.lanes=r,e}function Qf(e,t,r){return t=Tr(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function gO(e,t,r,n,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Of(0),this.expirationTimes=Of(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Of(0),this.identifierPrefix=n,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function I0(e,t,r,n,i,o,a,c,d){return e=new gO(e,t,r,c,d),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Tr(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},w0(o),e}function vO(e,t,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}t(),e.exports=xr})(yj);var Ny=Xc;dm.createRoot=Ny.createRoot,dm.hydrateRoot=Ny.hydrateRoot;/** +`+o.stack}return{value:e,source:t,stack:i,digest:null}}function Gf(e,t,r){return{value:e,source:null,stack:r??null,digest:t??null}}function Um(e,t){try{console.error(t.value)}catch(r){setTimeout(function(){throw r})}}var qj=typeof WeakMap=="function"?WeakMap:Map;function E2(e,t,r){r=Wn(-1,r),r.tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){pu||(pu=!0,tp=n),Um(e,t)},r}function T2(e,t,r){r=Wn(-1,r),r.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var i=t.value;r.payload=function(){return n(i)},r.callback=function(){Um(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(r.callback=function(){Um(e,t),typeof n!="function"&&(Oi===null?Oi=new Set([this]):Oi.add(this));var a=t.stack;this.componentDidCatch(t.value,{componentStack:a!==null?a:""})}),r}function wy(e,t,r){var n=e.pingCache;if(n===null){n=e.pingCache=new qj;var i=new Set;n.set(t,i)}else i=n.get(t),i===void 0&&(i=new Set,n.set(t,i));i.has(r)||(i.add(r),e=dO.bind(null,e,t,r),t.then(e,e))}function _y(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function xy(e,t,r,n,i){return e.mode&1?(e.flags|=65536,e.lanes=i,e):(e===t?e.flags|=65536:(e.flags|=128,r.flags|=131072,r.flags&=-52805,r.tag===1&&(r.alternate===null?r.tag=17:(t=Wn(-1,1),t.tag=2,ji(r,t,1))),r.lanes|=1),e)}var Zj=Jn.ReactCurrentOwner,cr=!1;function qt(e,t,r,n){t.child=e===null?s2(t,null,r,n):xs(t,e.child,r,n)}function Sy(e,t,r,n,i){r=r.render;var o=t.ref;return cs(t,i),n=k0(e,t,r,n,o,i),r=C0(),e!==null&&!cr?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~i,Qn(e,t,i)):(et&&r&&f0(t),t.flags|=1,qt(e,t,n,i),t.child)}function by(e,t,r,n,i){if(e===null){var o=r.type;return typeof o=="function"&&!A0(o)&&o.defaultProps===void 0&&r.compare===null&&r.defaultProps===void 0?(t.tag=15,t.type=o,j2(e,t,o,n,i)):(e=Nc(r.type,null,n,t,t.mode,i),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&i)){var a=o.memoizedProps;if(r=r.compare,r=r!==null?r:Wa,r(a,n)&&e.ref===t.ref)return Qn(e,t,i)}return t.flags|=1,e=Ri(o,n),e.ref=t.ref,e.return=t,t.child=e}function j2(e,t,r,n,i){if(e!==null){var o=e.memoizedProps;if(Wa(o,n)&&e.ref===t.ref)if(cr=!1,t.pendingProps=n=o,(e.lanes&i)!==0)e.flags&131072&&(cr=!0);else return t.lanes=e.lanes,Qn(e,t,i)}return Bm(e,t,r,n,i)}function O2(e,t,r){var n=t.pendingProps,i=n.children,o=e!==null?e.memoizedState:null;if(n.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ye(es,pr),pr|=r;else{if(!(r&1073741824))return e=o!==null?o.baseLanes|r:r,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ye(es,pr),pr|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=o!==null?o.baseLanes:r,Ye(es,pr),pr|=n}else o!==null?(n=o.baseLanes|r,t.memoizedState=null):n=r,Ye(es,pr),pr|=n;return qt(e,t,i,r),t.child}function P2(e,t){var r=t.ref;(e===null&&r!==null||e!==null&&e.ref!==r)&&(t.flags|=512,t.flags|=2097152)}function Bm(e,t,r,n,i){var o=dr(r)?co:Ut.current;return o=ws(t,o),cs(t,i),r=k0(e,t,r,n,o,i),n=C0(),e!==null&&!cr?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~i,Qn(e,t,i)):(et&&n&&f0(t),t.flags|=1,qt(e,t,r,i),t.child)}function ky(e,t,r,n,i){if(dr(r)){var o=!0;ou(t)}else o=!1;if(cs(t,i),t.stateNode===null)Lc(e,t),i2(t,r,n),Wm(t,r,n,i),n=!0;else if(e===null){var a=t.stateNode,c=t.memoizedProps;a.props=c;var d=a.context,h=r.contextType;typeof h=="object"&&h!==null?h=Pr(h):(h=dr(r)?co:Ut.current,h=ws(t,h));var g=r.getDerivedStateFromProps,v=typeof g=="function"||typeof a.getSnapshotBeforeUpdate=="function";v||typeof a.UNSAFE_componentWillReceiveProps!="function"&&typeof a.componentWillReceiveProps!="function"||(c!==n||d!==h)&&py(t,a,n,h),gi=!1;var x=t.memoizedState;a.state=x,uu(t,n,a,i),d=t.memoizedState,c!==n||x!==d||ur.current||gi?(typeof g=="function"&&(Vm(t,r,g,n),d=t.memoizedState),(c=gi||my(t,r,c,n,x,d,h))?(v||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount()),typeof a.componentDidMount=="function"&&(t.flags|=4194308)):(typeof a.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=d),a.props=n,a.state=d,a.context=h,n=c):(typeof a.componentDidMount=="function"&&(t.flags|=4194308),n=!1)}else{a=t.stateNode,r2(e,t),c=t.memoizedProps,h=t.type===t.elementType?c:Fr(t.type,c),a.props=h,v=t.pendingProps,x=a.context,d=r.contextType,typeof d=="object"&&d!==null?d=Pr(d):(d=dr(r)?co:Ut.current,d=ws(t,d));var b=r.getDerivedStateFromProps;(g=typeof b=="function"||typeof a.getSnapshotBeforeUpdate=="function")||typeof a.UNSAFE_componentWillReceiveProps!="function"&&typeof a.componentWillReceiveProps!="function"||(c!==v||x!==d)&&py(t,a,n,d),gi=!1,x=t.memoizedState,a.state=x,uu(t,n,a,i);var k=t.memoizedState;c!==v||x!==k||ur.current||gi?(typeof b=="function"&&(Vm(t,r,b,n),k=t.memoizedState),(h=gi||my(t,r,h,n,x,k,d)||!1)?(g||typeof a.UNSAFE_componentWillUpdate!="function"&&typeof a.componentWillUpdate!="function"||(typeof a.componentWillUpdate=="function"&&a.componentWillUpdate(n,k,d),typeof a.UNSAFE_componentWillUpdate=="function"&&a.UNSAFE_componentWillUpdate(n,k,d)),typeof a.componentDidUpdate=="function"&&(t.flags|=4),typeof a.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof a.componentDidUpdate!="function"||c===e.memoizedProps&&x===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!="function"||c===e.memoizedProps&&x===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=k),a.props=n,a.state=k,a.context=d,n=h):(typeof a.componentDidUpdate!="function"||c===e.memoizedProps&&x===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!="function"||c===e.memoizedProps&&x===e.memoizedState||(t.flags|=1024),n=!1)}return Gm(e,t,r,n,o,i)}function Gm(e,t,r,n,i,o){P2(e,t);var a=(t.flags&128)!==0;if(!n&&!a)return i&&cy(t,r,!1),Qn(e,t,o);n=t.stateNode,Zj.current=t;var c=a&&typeof r.getDerivedStateFromError!="function"?null:n.render();return t.flags|=1,e!==null&&a?(t.child=xs(t,e.child,null,o),t.child=xs(t,null,c,o)):qt(e,t,c,o),t.memoizedState=n.state,i&&cy(t,r,!0),t.child}function R2(e){var t=e.stateNode;t.pendingContext?ly(e,t.pendingContext,t.pendingContext!==t.context):t.context&&ly(e,t.context,!1),_0(e,t.containerInfo)}function Cy(e,t,r,n,i){return _s(),m0(i),t.flags|=256,qt(e,t,r,n),t.child}var Xm={dehydrated:null,treeContext:null,retryLane:0};function Km(e){return{baseLanes:e,cachePool:null,transitions:null}}function M2(e,t,r){var n=t.pendingProps,i=nt.current,o=!1,a=(t.flags&128)!==0,c;if((c=a)||(c=e!==null&&e.memoizedState===null?!1:(i&2)!==0),c?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(i|=1),Ye(nt,i&1),e===null)return Ym(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(a=n.children,e=n.fallback,o?(n=t.mode,o=t.child,a={mode:"hidden",children:a},!(n&1)&&o!==null?(o.childLanes=0,o.pendingProps=a):o=rd(a,n,0,null),e=oo(e,n,r,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Km(r),t.memoizedState=Xm,e):T0(t,a));if(i=e.memoizedState,i!==null&&(c=i.dehydrated,c!==null))return Jj(e,t,a,n,c,i,r);if(o){o=n.fallback,a=t.mode,i=e.child,c=i.sibling;var d={mode:"hidden",children:n.children};return!(a&1)&&t.child!==i?(n=t.child,n.childLanes=0,n.pendingProps=d,t.deletions=null):(n=Ri(i,d),n.subtreeFlags=i.subtreeFlags&14680064),c!==null?o=Ri(c,o):(o=oo(o,a,r,null),o.flags|=2),o.return=t,n.return=t,n.sibling=o,t.child=n,n=o,o=t.child,a=e.child.memoizedState,a=a===null?Km(r):{baseLanes:a.baseLanes|r,cachePool:null,transitions:a.transitions},o.memoizedState=a,o.childLanes=e.childLanes&~r,t.memoizedState=Xm,n}return o=e.child,e=o.sibling,n=Ri(o,{mode:"visible",children:n.children}),!(t.mode&1)&&(n.lanes=r),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n}function T0(e,t){return t=rd({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function ic(e,t,r,n){return n!==null&&m0(n),xs(t,e.child,null,r),e=T0(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Jj(e,t,r,n,i,o,a){if(r)return t.flags&256?(t.flags&=-257,n=Gf(Error(Y(422))),ic(e,t,a,n)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=n.fallback,i=t.mode,n=rd({mode:"visible",children:n.children},i,0,null),o=oo(o,i,a,null),o.flags|=2,n.return=t,o.return=t,n.sibling=o,t.child=n,t.mode&1&&xs(t,e.child,null,a),t.child.memoizedState=Km(a),t.memoizedState=Xm,o);if(!(t.mode&1))return ic(e,t,a,null);if(i.data==="$!"){if(n=i.nextSibling&&i.nextSibling.dataset,n)var c=n.dgst;return n=c,o=Error(Y(419)),n=Gf(o,n,void 0),ic(e,t,a,n)}if(c=(a&e.childLanes)!==0,cr||c){if(n=Mt,n!==null){switch(a&-a){case 4:i=2;break;case 16:i=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:i=32;break;case 536870912:i=268435456;break;default:i=0}i=i&(n.suspendedLanes|a)?0:i,i!==0&&i!==o.retryLane&&(o.retryLane=i,Kn(e,i),Kr(n,e,i,-1))}return L0(),n=Gf(Error(Y(421))),ic(e,t,a,n)}return i.data==="$?"?(t.flags|=128,t.child=e.child,t=fO.bind(null,e),i._reactRetry=t,null):(e=o.treeContext,vr=Ti(i.nextSibling),yr=t,et=!0,Ur=null,e!==null&&(Dr[Er++]=Hn,Dr[Er++]=Yn,Dr[Er++]=uo,Hn=e.id,Yn=e.overflow,uo=t),t=T0(t,n.children),t.flags|=4096,t)}function Dy(e,t,r){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),Fm(e.return,t,r)}function Xf(e,t,r,n,i){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:i}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=n,o.tail=r,o.tailMode=i)}function L2(e,t,r){var n=t.pendingProps,i=n.revealOrder,o=n.tail;if(qt(e,t,n.children,r),n=nt.current,n&2)n=n&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&Dy(e,r,t);else if(e.tag===19)Dy(e,r,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(Ye(nt,n),!(t.mode&1))t.memoizedState=null;else switch(i){case"forwards":for(r=t.child,i=null;r!==null;)e=r.alternate,e!==null&&du(e)===null&&(i=r),r=r.sibling;r=i,r===null?(i=t.child,t.child=null):(i=r.sibling,r.sibling=null),Xf(t,!1,i,r,o);break;case"backwards":for(r=null,i=t.child,t.child=null;i!==null;){if(e=i.alternate,e!==null&&du(e)===null){t.child=i;break}e=i.sibling,i.sibling=r,r=i,i=e}Xf(t,!0,r,null,o);break;case"together":Xf(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Lc(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Qn(e,t,r){if(e!==null&&(t.dependencies=e.dependencies),ho|=t.lanes,!(r&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(Y(153));if(t.child!==null){for(e=t.child,r=Ri(e,e.pendingProps),t.child=r,r.return=t;e.sibling!==null;)e=e.sibling,r=r.sibling=Ri(e,e.pendingProps),r.return=t;r.sibling=null}return t.child}function eO(e,t,r){switch(t.tag){case 3:R2(t),_s();break;case 5:a2(t);break;case 1:dr(t.type)&&ou(t);break;case 4:_0(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,i=t.memoizedProps.value;Ye(lu,n._currentValue),n._currentValue=i;break;case 13:if(n=t.memoizedState,n!==null)return n.dehydrated!==null?(Ye(nt,nt.current&1),t.flags|=128,null):r&t.child.childLanes?M2(e,t,r):(Ye(nt,nt.current&1),e=Qn(e,t,r),e!==null?e.sibling:null);Ye(nt,nt.current&1);break;case 19:if(n=(r&t.childLanes)!==0,e.flags&128){if(n)return L2(e,t,r);t.flags|=128}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),Ye(nt,nt.current),n)break;return null;case 22:case 23:return t.lanes=0,O2(e,t,r)}return Qn(e,t,r)}var A2,Qm,I2,N2;A2=function(e,t){for(var r=t.child;r!==null;){if(r.tag===5||r.tag===6)e.appendChild(r.stateNode);else if(r.tag!==4&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}};Qm=function(){};I2=function(e,t,r,n){var i=e.memoizedProps;if(i!==n){e=t.stateNode,eo(dn.current);var o=null;switch(r){case"input":i=ym(e,i),n=ym(e,n),o=[];break;case"select":i=ot({},i,{value:void 0}),n=ot({},n,{value:void 0}),o=[];break;case"textarea":i=xm(e,i),n=xm(e,n),o=[];break;default:typeof i.onClick!="function"&&typeof n.onClick=="function"&&(e.onclick=nu)}bm(r,n);var a;r=null;for(h in i)if(!n.hasOwnProperty(h)&&i.hasOwnProperty(h)&&i[h]!=null)if(h==="style"){var c=i[h];for(a in c)c.hasOwnProperty(a)&&(r||(r={}),r[a]="")}else h!=="dangerouslySetInnerHTML"&&h!=="children"&&h!=="suppressContentEditableWarning"&&h!=="suppressHydrationWarning"&&h!=="autoFocus"&&(Na.hasOwnProperty(h)?o||(o=[]):(o=o||[]).push(h,null));for(h in n){var d=n[h];if(c=i!=null?i[h]:void 0,n.hasOwnProperty(h)&&d!==c&&(d!=null||c!=null))if(h==="style")if(c){for(a in c)!c.hasOwnProperty(a)||d&&d.hasOwnProperty(a)||(r||(r={}),r[a]="");for(a in d)d.hasOwnProperty(a)&&c[a]!==d[a]&&(r||(r={}),r[a]=d[a])}else r||(o||(o=[]),o.push(h,r)),r=d;else h==="dangerouslySetInnerHTML"?(d=d?d.__html:void 0,c=c?c.__html:void 0,d!=null&&c!==d&&(o=o||[]).push(h,d)):h==="children"?typeof d!="string"&&typeof d!="number"||(o=o||[]).push(h,""+d):h!=="suppressContentEditableWarning"&&h!=="suppressHydrationWarning"&&(Na.hasOwnProperty(h)?(d!=null&&h==="onScroll"&&Ue("scroll",e),o||c===d||(o=[])):(o=o||[]).push(h,d))}r&&(o=o||[]).push("style",r);var h=o;(t.updateQueue=h)&&(t.flags|=4)}};N2=function(e,t,r,n){r!==n&&(t.flags|=4)};function la(e,t){if(!et)switch(e.tailMode){case"hidden":t=e.tail;for(var r=null;t!==null;)t.alternate!==null&&(r=t),t=t.sibling;r===null?e.tail=null:r.sibling=null;break;case"collapsed":r=e.tail;for(var n=null;r!==null;)r.alternate!==null&&(n=r),r=r.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function Yt(e){var t=e.alternate!==null&&e.alternate.child===e.child,r=0,n=0;if(t)for(var i=e.child;i!==null;)r|=i.lanes|i.childLanes,n|=i.subtreeFlags&14680064,n|=i.flags&14680064,i.return=e,i=i.sibling;else for(i=e.child;i!==null;)r|=i.lanes|i.childLanes,n|=i.subtreeFlags,n|=i.flags,i.return=e,i=i.sibling;return e.subtreeFlags|=n,e.childLanes=r,t}function tO(e,t,r){var n=t.pendingProps;switch(h0(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Yt(t),null;case 1:return dr(t.type)&&iu(),Yt(t),null;case 3:return n=t.stateNode,Ss(),Ge(ur),Ge(Ut),S0(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(rc(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Ur!==null&&(ip(Ur),Ur=null))),Qm(e,t),Yt(t),null;case 5:x0(t);var i=eo(Ka.current);if(r=t.type,e!==null&&t.stateNode!=null)I2(e,t,r,n,i),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(t.stateNode===null)throw Error(Y(166));return Yt(t),null}if(e=eo(dn.current),rc(t)){n=t.stateNode,r=t.type;var o=t.memoizedProps;switch(n[ln]=t,n[Ga]=o,e=(t.mode&1)!==0,r){case"dialog":Ue("cancel",n),Ue("close",n);break;case"iframe":case"object":case"embed":Ue("load",n);break;case"video":case"audio":for(i=0;i<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=a.createElement(r,{is:n.is}):(e=a.createElement(r),r==="select"&&(a=e,n.multiple?a.multiple=!0:n.size&&(a.size=n.size))):e=a.createElementNS(e,r),e[ln]=t,e[Ga]=n,A2(e,t,!1,!1),t.stateNode=e;e:{switch(a=km(r,n),r){case"dialog":Ue("cancel",e),Ue("close",e),i=n;break;case"iframe":case"object":case"embed":Ue("load",e),i=n;break;case"video":case"audio":for(i=0;iks&&(t.flags|=128,n=!0,la(o,!1),t.lanes=4194304)}else{if(!n)if(e=du(a),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),la(o,!0),o.tail===null&&o.tailMode==="hidden"&&!a.alternate&&!et)return Yt(t),null}else 2*ft()-o.renderingStartTime>ks&&r!==1073741824&&(t.flags|=128,n=!0,la(o,!1),t.lanes=4194304);o.isBackwards?(a.sibling=t.child,t.child=a):(r=o.last,r!==null?r.sibling=a:t.child=a,o.last=a)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=ft(),t.sibling=null,r=nt.current,Ye(nt,n?r&1|2:r&1),t):(Yt(t),null);case 22:case 23:return M0(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&t.mode&1?pr&1073741824&&(Yt(t),t.subtreeFlags&6&&(t.flags|=8192)):Yt(t),null;case 24:return null;case 25:return null}throw Error(Y(156,t.tag))}function rO(e,t){switch(h0(t),t.tag){case 1:return dr(t.type)&&iu(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ss(),Ge(ur),Ge(Ut),S0(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return x0(t),null;case 13:if(Ge(nt),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(Y(340));_s()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Ge(nt),null;case 4:return Ss(),null;case 10:return v0(t.type._context),null;case 22:case 23:return M0(),null;case 24:return null;default:return null}}var oc=!1,Vt=!1,nO=typeof WeakSet=="function"?WeakSet:Set,Z=null;function Jo(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){at(e,t,n)}else r.current=null}function qm(e,t,r){try{r()}catch(n){at(e,t,n)}}var Ey=!1;function iO(e,t){if(Lm=eu,e=Y_(),d0(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var i=n.anchorOffset,o=n.focusNode;n=n.focusOffset;try{r.nodeType,o.nodeType}catch{r=null;break e}var a=0,c=-1,d=-1,h=0,g=0,v=e,x=null;t:for(;;){for(var b;v!==r||i!==0&&v.nodeType!==3||(c=a+i),v!==o||n!==0&&v.nodeType!==3||(d=a+n),v.nodeType===3&&(a+=v.nodeValue.length),(b=v.firstChild)!==null;)x=v,v=b;for(;;){if(v===e)break t;if(x===r&&++h===i&&(c=a),x===o&&++g===n&&(d=a),(b=v.nextSibling)!==null)break;v=x,x=v.parentNode}v=b}r=c===-1||d===-1?null:{start:c,end:d}}else r=null}r=r||{start:0,end:0}}else r=null;for(Am={focusedElem:e,selectionRange:r},eu=!1,Z=t;Z!==null;)if(t=Z,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Z=e;else for(;Z!==null;){t=Z;try{var k=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var C=k.memoizedProps,E=k.memoizedState,y=t.stateNode,w=y.getSnapshotBeforeUpdate(t.elementType===t.type?C:Fr(t.type,C),E);y.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var S=t.stateNode.containerInfo;S.nodeType===1?S.textContent="":S.nodeType===9&&S.documentElement&&S.removeChild(S.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(Y(163))}}catch(T){at(t,t.return,T)}if(e=t.sibling,e!==null){e.return=t.return,Z=e;break}Z=t.return}return k=Ey,Ey=!1,k}function Ea(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var i=n=n.next;do{if((i.tag&e)===e){var o=i.destroy;i.destroy=void 0,o!==void 0&&qm(t,r,o)}i=i.next}while(i!==n)}}function ed(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function Zm(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function $2(e){var t=e.alternate;t!==null&&(e.alternate=null,$2(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[ln],delete t[Ga],delete t[$m],delete t[Hj],delete t[Yj])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function z2(e){return e.tag===5||e.tag===3||e.tag===4}function Ty(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||z2(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Jm(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=nu));else if(n!==4&&(e=e.child,e!==null))for(Jm(e,t,r),e=e.sibling;e!==null;)Jm(e,t,r),e=e.sibling}function ep(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(ep(e,t,r),e=e.sibling;e!==null;)ep(e,t,r),e=e.sibling}var At=null,Wr=!1;function di(e,t,r){for(r=r.child;r!==null;)H2(e,t,r),r=r.sibling}function H2(e,t,r){if(un&&typeof un.onCommitFiberUnmount=="function")try{un.onCommitFiberUnmount(Bu,r)}catch{}switch(r.tag){case 5:Vt||Jo(r,t);case 6:var n=At,i=Wr;At=null,di(e,t,r),At=n,Wr=i,At!==null&&(Wr?(e=At,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):At.removeChild(r.stateNode));break;case 18:At!==null&&(Wr?(e=At,r=r.stateNode,e.nodeType===8?Yf(e.parentNode,r):e.nodeType===1&&Yf(e,r),Fa(e)):Yf(At,r.stateNode));break;case 4:n=At,i=Wr,At=r.stateNode.containerInfo,Wr=!0,di(e,t,r),At=n,Wr=i;break;case 0:case 11:case 14:case 15:if(!Vt&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){i=n=n.next;do{var o=i,a=o.destroy;o=o.tag,a!==void 0&&(o&2||o&4)&&qm(r,t,a),i=i.next}while(i!==n)}di(e,t,r);break;case 1:if(!Vt&&(Jo(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(c){at(r,t,c)}di(e,t,r);break;case 21:di(e,t,r);break;case 22:r.mode&1?(Vt=(n=Vt)||r.memoizedState!==null,di(e,t,r),Vt=n):di(e,t,r);break;default:di(e,t,r)}}function jy(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new nO),t.forEach(function(n){var i=hO.bind(null,e,n);r.has(n)||(r.add(n),n.then(i,i))})}}function Yr(e,t){var r=t.deletions;if(r!==null)for(var n=0;ni&&(i=a),n&=~o}if(n=i,n=ft()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*sO(n/1960))-n,10e?16:e,Si===null)var n=!1;else{if(e=Si,Si=null,gu=0,Ee&6)throw Error(Y(331));var i=Ee;for(Ee|=4,Z=e.current;Z!==null;){var o=Z,a=o.child;if(Z.flags&16){var c=o.deletions;if(c!==null){for(var d=0;dft()-P0?io(e,0):O0|=r),fr(e,t)}function X2(e,t){t===0&&(e.mode&1?(t=Ql,Ql<<=1,!(Ql&130023424)&&(Ql=4194304)):t=1);var r=Zt();e=Kn(e,t),e!==null&&(ml(e,t,r),fr(e,r))}function fO(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),X2(e,r)}function hO(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,i=e.memoizedState;i!==null&&(r=i.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(Y(314))}n!==null&&n.delete(t),X2(e,r)}var K2;K2=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||ur.current)cr=!0;else{if(!(e.lanes&r)&&!(t.flags&128))return cr=!1,eO(e,t,r);cr=!!(e.flags&131072)}else cr=!1,et&&t.flags&1048576&&Z_(t,au,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;Lc(e,t),e=t.pendingProps;var i=ws(t,Ut.current);cs(t,r),i=k0(null,t,n,e,i,r);var o=C0();return t.flags|=1,typeof i=="object"&&i!==null&&typeof i.render=="function"&&i.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,dr(n)?(o=!0,ou(t)):o=!1,t.memoizedState=i.state!==null&&i.state!==void 0?i.state:null,w0(t),i.updater=Zu,t.stateNode=i,i._reactInternals=t,Wm(t,n,e,r),t=Gm(null,t,n,!0,o,r)):(t.tag=0,et&&o&&f0(t),qt(null,t,i,r),t=t.child),t;case 16:n=t.elementType;e:{switch(Lc(e,t),e=t.pendingProps,i=n._init,n=i(n._payload),t.type=n,i=t.tag=pO(n),e=Fr(n,e),i){case 0:t=Bm(null,t,n,e,r);break e;case 1:t=ky(null,t,n,e,r);break e;case 11:t=Sy(null,t,n,e,r);break e;case 14:t=by(null,t,n,Fr(n.type,e),r);break e}throw Error(Y(306,n,""))}return t;case 0:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Fr(n,i),Bm(e,t,n,i,r);case 1:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Fr(n,i),ky(e,t,n,i,r);case 3:e:{if(R2(t),e===null)throw Error(Y(387));n=t.pendingProps,o=t.memoizedState,i=o.element,r2(e,t),uu(t,n,null,r);var a=t.memoizedState;if(n=a.element,o.isDehydrated)if(o={element:n,isDehydrated:!1,cache:a.cache,pendingSuspenseBoundaries:a.pendingSuspenseBoundaries,transitions:a.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){i=bs(Error(Y(423)),t),t=Cy(e,t,n,r,i);break e}else if(n!==i){i=bs(Error(Y(424)),t),t=Cy(e,t,n,r,i);break e}else for(vr=Ti(t.stateNode.containerInfo.firstChild),yr=t,et=!0,Ur=null,r=s2(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(_s(),n===i){t=Qn(e,t,r);break e}qt(e,t,n,r)}t=t.child}return t;case 5:return a2(t),e===null&&Ym(t),n=t.type,i=t.pendingProps,o=e!==null?e.memoizedProps:null,a=i.children,Im(n,i)?a=null:o!==null&&Im(n,o)&&(t.flags|=32),P2(e,t),qt(e,t,a,r),t.child;case 6:return e===null&&Ym(t),null;case 13:return M2(e,t,r);case 4:return _0(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=xs(t,null,n,r):qt(e,t,n,r),t.child;case 11:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Fr(n,i),Sy(e,t,n,i,r);case 7:return qt(e,t,t.pendingProps,r),t.child;case 8:return qt(e,t,t.pendingProps.children,r),t.child;case 12:return qt(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,i=t.pendingProps,o=t.memoizedProps,a=i.value,Ye(lu,n._currentValue),n._currentValue=a,o!==null)if(qr(o.value,a)){if(o.children===i.children&&!ur.current){t=Qn(e,t,r);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var c=o.dependencies;if(c!==null){a=o.child;for(var d=c.firstContext;d!==null;){if(d.context===n){if(o.tag===1){d=Wn(-1,r&-r),d.tag=2;var h=o.updateQueue;if(h!==null){h=h.shared;var g=h.pending;g===null?d.next=d:(d.next=g.next,g.next=d),h.pending=d}}o.lanes|=r,d=o.alternate,d!==null&&(d.lanes|=r),Fm(o.return,r,t),c.lanes|=r;break}d=d.next}}else if(o.tag===10)a=o.type===t.type?null:o.child;else if(o.tag===18){if(a=o.return,a===null)throw Error(Y(341));a.lanes|=r,c=a.alternate,c!==null&&(c.lanes|=r),Fm(a,r,t),a=o.sibling}else a=o.child;if(a!==null)a.return=o;else for(a=o;a!==null;){if(a===t){a=null;break}if(o=a.sibling,o!==null){o.return=a.return,a=o;break}a=a.return}o=a}qt(e,t,i.children,r),t=t.child}return t;case 9:return i=t.type,n=t.pendingProps.children,cs(t,r),i=Pr(i),n=n(i),t.flags|=1,qt(e,t,n,r),t.child;case 14:return n=t.type,i=Fr(n,t.pendingProps),i=Fr(n.type,i),by(e,t,n,i,r);case 15:return j2(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,i=t.pendingProps,i=t.elementType===n?i:Fr(n,i),Lc(e,t),t.tag=1,dr(n)?(e=!0,ou(t)):e=!1,cs(t,r),i2(t,n,i),Wm(t,n,i,r),Gm(null,t,n,!0,e,r);case 19:return L2(e,t,r);case 22:return O2(e,t,r)}throw Error(Y(156,t.tag))};function Q2(e,t){return S_(e,t)}function mO(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function jr(e,t,r,n){return new mO(e,t,r,n)}function A0(e){return e=e.prototype,!(!e||!e.isReactComponent)}function pO(e){if(typeof e=="function")return A0(e)?1:0;if(e!=null){if(e=e.$$typeof,e===e0)return 11;if(e===t0)return 14}return 2}function Ri(e,t){var r=e.alternate;return r===null?(r=jr(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function Nc(e,t,r,n,i,o){var a=2;if(n=e,typeof e=="function")A0(e)&&(a=1);else if(typeof e=="string")a=5;else e:switch(e){case Wo:return oo(r.children,i,o,t);case Jp:a=8,i|=8;break;case mm:return e=jr(12,r,t,i|2),e.elementType=mm,e.lanes=o,e;case pm:return e=jr(13,r,t,i),e.elementType=pm,e.lanes=o,e;case gm:return e=jr(19,r,t,i),e.elementType=gm,e.lanes=o,e;case o_:return rd(r,i,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case n_:a=10;break e;case i_:a=9;break e;case e0:a=11;break e;case t0:a=14;break e;case pi:a=16,n=null;break e}throw Error(Y(130,e==null?e:typeof e,""))}return t=jr(a,r,t,i),t.elementType=e,t.type=n,t.lanes=o,t}function oo(e,t,r,n){return e=jr(7,e,n,t),e.lanes=r,e}function rd(e,t,r,n){return e=jr(22,e,n,t),e.elementType=o_,e.lanes=r,e.stateNode={isHidden:!1},e}function Kf(e,t,r){return e=jr(6,e,null,t),e.lanes=r,e}function Qf(e,t,r){return t=jr(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function gO(e,t,r,n,i){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Of(0),this.expirationTimes=Of(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Of(0),this.identifierPrefix=n,this.onRecoverableError=i,this.mutableSourceEagerHydrationData=null}function I0(e,t,r,n,i,o,a,c,d){return e=new gO(e,t,r,c,d),t===1?(t=1,o===!0&&(t|=8)):t=0,o=jr(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},w0(o),e}function vO(e,t,r){var n=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(r){console.error(r)}}t(),e.exports=xr})(yT);var Ny=Xc;dm.createRoot=Ny.createRoot,dm.hydrateRoot=Ny.hydrateRoot;/** * @remix-run/router v1.6.1 * * Copyright (c) Remix Software Inc. @@ -46,7 +46,7 @@ Error generating stack: `+o.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function Re(){return Re=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function po(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function bO(){return Math.random().toString(36).substr(2,8)}function zy(e,t){return{usr:e.state,key:e.key,idx:t}}function el(e,t,r,n){return r===void 0&&(r=null),Re({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?pn(t):t,{state:r,key:t&&t.key||n||bO()})}function go(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function pn(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function kO(e,t,r,n){n===void 0&&(n={});let{window:i=document.defaultView,v5Compat:o=!1}=n,a=i.history,c=gt.Pop,d=null,h=g();h==null&&(h=0,a.replaceState(Re({},a.state,{idx:h}),""));function g(){return(a.state||{idx:null}).idx}function v(){c=gt.Pop;let E=g(),y=E==null?null:E-h;h=E,d&&d({action:c,location:C.location,delta:y})}function x(E,y){c=gt.Push;let w=el(C.location,E,y);r&&r(w,E),h=g()+1;let S=zy(w,h),j=C.createHref(w);try{a.pushState(S,"",j)}catch{i.location.assign(j)}o&&d&&d({action:c,location:C.location,delta:1})}function b(E,y){c=gt.Replace;let w=el(C.location,E,y);r&&r(w,E),h=g();let S=zy(w,h),j=C.createHref(w);a.replaceState(S,"",j),o&&d&&d({action:c,location:C.location,delta:0})}function k(E){let y=i.location.origin!=="null"?i.location.origin:i.location.href,w=typeof E=="string"?E:go(E);return be(y,"No window.location.(origin|href) available to create URL for href: "+w),new URL(w,y)}let C={get action(){return c},get location(){return e(i,a)},listen(E){if(d)throw new Error("A history only accepts one active listener");return i.addEventListener($y,v),d=E,()=>{i.removeEventListener($y,v),d=null}},createHref(E){return t(i,E)},createURL:k,encodeLocation(E){let y=k(E);return{pathname:y.pathname,search:y.search,hash:y.hash}},push:x,replace:b,go(E){return a.go(E)}};return C}var St;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(St||(St={}));const CO=new Set(["lazy","caseSensitive","path","id","index","children"]);function DO(e){return e.index===!0}function ex(e,t,r,n){return r===void 0&&(r=[]),n===void 0&&(n={}),e.map((i,o)=>{let a=[...r,o],c=typeof i.id=="string"?i.id:a.join("-");if(be(i.index!==!0||!i.children,"Cannot specify children on an index route"),be(!n[c],'Found a route id collision on id "'+c+`". Route id's must be globally unique within Data Router usages`),DO(i)){let d=Re({},i,t(i),{id:c});return n[c]=d,d}else{let d=Re({},i,t(i),{id:c,children:void 0});return n[c]=d,i.children&&(d.children=ex(i.children,t,a,n)),d}})}function ts(e,t,r){r===void 0&&(r="/");let n=typeof t=="string"?pn(t):t,i=Is(n.pathname||"/",r);if(i==null)return null;let o=tx(e);EO(o);let a=null;for(let c=0;a==null&&c{let d={relativePath:c===void 0?o.path||"":c,caseSensitive:o.caseSensitive===!0,childrenIndex:a,route:o};d.relativePath.startsWith("/")&&(be(d.relativePath.startsWith(n),'Absolute route path "'+d.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),d.relativePath=d.relativePath.slice(n.length));let h=Un([n,d.relativePath]),g=r.concat(d);o.children&&o.children.length>0&&(be(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+h+'".')),tx(o.children,t,g,h)),!(o.path==null&&!o.index)&&t.push({path:h,score:LO(h,o.index),routesMeta:g})};return e.forEach((o,a)=>{var c;if(o.path===""||!((c=o.path)!=null&&c.includes("?")))i(o,a);else for(let d of rx(o.path))i(o,a,d)}),t}function rx(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,i=r.endsWith("?"),o=r.replace(/\?$/,"");if(n.length===0)return i?[o,""]:[o];let a=rx(n.join("/")),c=[];return c.push(...a.map(d=>d===""?o:[o,d].join("/"))),i&&c.push(...a),c.map(d=>e.startsWith("/")&&d===""?"/":d)}function EO(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:AO(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const jO=/^:\w+$/,TO=3,OO=2,PO=1,RO=10,MO=-2,Yy=e=>e==="*";function LO(e,t){let r=e.split("/"),n=r.length;return r.some(Yy)&&(n+=MO),t&&(n+=OO),r.filter(i=>!Yy(i)).reduce((i,o)=>i+(jO.test(o)?TO:o===""?PO:RO),n)}function AO(e,t){return e.length===t.length&&e.slice(0,-1).every((n,i)=>n===t[i])?e[e.length-1]-t[t.length-1]:0}function IO(e,t){let{routesMeta:r}=e,n={},i="/",o=[];for(let a=0;a{if(g==="*"){let x=c[v]||"";a=o.slice(0,o.length-x.length).replace(/(.)\/+$/,"$1")}return h[g]=YO(c[v]||"",g),h},{}),pathname:o,pathnameBase:a,pattern:e}}function $O(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),po(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],i="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/\/:(\w+)/g,(a,c)=>(n.push(c),"/([^\\/]+)"));return e.endsWith("*")?(n.push("*"),i+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?i+="\\/*$":e!==""&&e!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,t?void 0:"i"),n]}function zO(e){try{return decodeURI(e)}catch(t){return po(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function YO(e,t){try{return decodeURIComponent(e)}catch(r){return po(!1,'The value for the URL param "'+t+'" will not be decoded because'+(' the string "'+e+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+r+").")),e}}function Is(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function HO(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:i=""}=typeof e=="string"?pn(e):e;return{pathname:r?r.startsWith("/")?r:FO(r,t):t,search:WO(n),hash:UO(i)}}function FO(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(i=>{i===".."?r.length>1&&r.pop():i!=="."&&r.push(i)}),r.length>1?r.join("/"):"/"}function qf(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function ad(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function Y0(e,t,r,n){n===void 0&&(n=!1);let i;typeof e=="string"?i=pn(e):(i=Re({},e),be(!i.pathname||!i.pathname.includes("?"),qf("?","pathname","search",i)),be(!i.pathname||!i.pathname.includes("#"),qf("#","pathname","hash",i)),be(!i.search||!i.search.includes("#"),qf("#","search","hash",i)));let o=e===""||i.pathname==="",a=o?"/":i.pathname,c;if(n||a==null)c=r;else{let v=t.length-1;if(a.startsWith("..")){let x=a.split("/");for(;x[0]==="..";)x.shift(),v-=1;i.pathname=x.join("/")}c=v>=0?t[v]:"/"}let d=HO(i,c),h=a&&a!=="/"&&a.endsWith("/"),g=(o||a===".")&&r.endsWith("/");return!d.pathname.endsWith("/")&&(h||g)&&(d.pathname+="/"),d}const Un=e=>e.join("/").replace(/\/\/+/g,"/"),VO=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),WO=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,UO=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class H0{constructor(t,r,n,i){i===void 0&&(i=!1),this.status=t,this.statusText=r||"",this.internal=i,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}}function nx(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const ix=["post","put","patch","delete"],BO=new Set(ix),GO=["get",...ix],XO=new Set(GO),KO=new Set([301,302,303,307,308]),QO=new Set([307,308]),Zf={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},qO={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},Hy={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},ox=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,sx=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",ZO=!sx,JO=e=>({hasErrorBoundary:!!e.hasErrorBoundary});function eP(e){be(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let t;if(e.mapRouteProperties)t=e.mapRouteProperties;else if(e.detectErrorBoundary){let L=e.detectErrorBoundary;t=I=>({hasErrorBoundary:L(I)})}else t=JO;let r={},n=ex(e.routes,t,void 0,r),i,o=e.basename||"/",a=Re({v7_normalizeFormMethod:!1,v7_prependBasename:!1},e.future),c=null,d=new Set,h=null,g=null,v=null,x=e.hydrationData!=null,b=ts(n,e.history.location,o),k=null;if(b==null){let L=Vr(404,{pathname:e.history.location.pathname}),{matches:I,route:Y}=Xy(n);b=I,k={[Y.id]:L}}let C=!b.some(L=>L.route.lazy)&&(!b.some(L=>L.route.loader)||e.hydrationData!=null),E,y={historyAction:e.history.action,location:e.history.location,matches:b,initialized:C,navigation:Zf,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||k,fetchers:new Map,blockers:new Map},w=gt.Pop,S=!1,j,O=!1,P=!1,M=[],R=[],$=new Map,z=0,ee=-1,te=new Map,G=new Set,lt=new Map,je=new Map,$e=new Map,ht=!1;function W(){return c=e.history.listen(L=>{let{action:I,location:Y,delta:J}=L;if(ht){ht=!1;return}po($e.size===0||J!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let re=Xs({currentLocation:y.location,nextLocation:Y,historyAction:I});if(re&&J!=null){ht=!0,e.history.go(J*-1),si(re,{state:"blocked",location:Y,proceed(){si(re,{state:"proceeding",proceed:void 0,reset:void 0,location:Y}),e.history.go(J)},reset(){Et(re),ue({blockers:new Map(E.state.blockers)})}});return}return X(I,Y)}),y.initialized||X(gt.Pop,y.location),E}function le(){c&&c(),d.clear(),j&&j.abort(),y.fetchers.forEach((L,I)=>Gs(I)),y.blockers.forEach((L,I)=>Et(I))}function Q(L){return d.add(L),()=>d.delete(L)}function ue(L){y=Re({},y,L),d.forEach(I=>I(y))}function he(L,I){var Y,J;let re=y.actionData!=null&&y.navigation.formMethod!=null&&In(y.navigation.formMethod)&&y.navigation.state==="loading"&&((Y=L.state)==null?void 0:Y._isRedirect)!==!0,fe;I.actionData?Object.keys(I.actionData).length>0?fe=I.actionData:fe=null:re?fe=y.actionData:fe=null;let ie=I.loaderData?Gy(y.loaderData,I.loaderData,I.matches||[],I.errors):y.loaderData;for(let[ne]of $e)Et(ne);let ce=S===!0||y.navigation.formMethod!=null&&In(y.navigation.formMethod)&&((J=L.state)==null?void 0:J._isRedirect)!==!0;i&&(n=i,i=void 0),ue(Re({},I,{actionData:fe,loaderData:ie,historyAction:w,location:L,initialized:!0,navigation:Zf,revalidation:"idle",restoreScrollPosition:Xt(L,I.matches||y.matches),preventScrollReset:ce,blockers:new Map(y.blockers)})),O||w===gt.Pop||(w===gt.Push?e.history.push(L,L.state):w===gt.Replace&&e.history.replace(L,L.state)),w=gt.Pop,S=!1,O=!1,P=!1,M=[],R=[]}async function st(L,I){if(typeof L=="number"){e.history.go(L);return}let Y=op(y.location,y.matches,o,a.v7_prependBasename,L,I==null?void 0:I.fromRouteId,I==null?void 0:I.relative),{path:J,submission:re,error:fe}=Fy(a.v7_normalizeFormMethod,!1,Y,I),ie=y.location,ce=el(y.location,J,I&&I.state);ce=Re({},ce,e.history.encodeLocation(ce));let ne=I&&I.replace!=null?I.replace:void 0,_e=gt.Push;ne===!0?_e=gt.Replace:ne===!1||re!=null&&In(re.formMethod)&&re.formAction===y.location.pathname+y.location.search&&(_e=gt.Replace);let ae=I&&"preventScrollReset"in I?I.preventScrollReset===!0:void 0,_t=Xs({currentLocation:ie,nextLocation:ce,historyAction:_e});if(_t){si(_t,{state:"blocked",location:ce,proceed(){si(_t,{state:"proceeding",proceed:void 0,reset:void 0,location:ce}),st(L,I)},reset(){Et(_t),ue({blockers:new Map(y.blockers)})}});return}return await X(_e,ce,{submission:re,pendingError:fe,preventScrollReset:ae,replace:I&&I.replace})}function Fe(){if(Us(),ue({revalidation:"loading"}),y.navigation.state!=="submitting"){if(y.navigation.state==="idle"){X(y.historyAction,y.location,{startUninterruptedRevalidation:!0});return}X(w||y.historyAction,y.navigation.location,{overrideNavigation:y.navigation})}}async function X(L,I,Y){j&&j.abort(),j=null,w=L,O=(Y&&Y.startUninterruptedRevalidation)===!0,Co(y.location,y.matches),S=(Y&&Y.preventScrollReset)===!0;let J=i||n,re=Y&&Y.overrideNavigation,fe=ts(J,I,o);if(!fe){let ct=Vr(404,{pathname:I.pathname}),{matches:tt,route:zt}=Xy(J);mt(),he(I,{matches:tt,loaderData:{},errors:{[zt.id]:ct}});return}if(oP(y.location,I)&&!(Y&&Y.submission&&In(Y.submission.formMethod))){he(I,{matches:fe});return}j=new AbortController;let ie=da(e.history,I,j.signal,Y&&Y.submission),ce,ne;if(Y&&Y.pendingError)ne={[rs(fe).route.id]:Y.pendingError};else if(Y&&Y.submission&&In(Y.submission.formMethod)){let ct=await $t(ie,I,Y.submission,fe,{replace:Y.replace});if(ct.shortCircuited)return;ce=ct.pendingActionData,ne=ct.pendingActionError,re=Re({state:"loading",location:I},Y.submission),ie=new Request(ie.url,{signal:ie.signal})}let{shortCircuited:_e,loaderData:ae,errors:_t}=await tr(ie,I,fe,re,Y&&Y.submission,Y&&Y.fetcherSubmission,Y&&Y.replace,ce,ne);_e||(j=null,he(I,Re({matches:fe},ce?{actionData:ce}:{},{loaderData:ae,errors:_t})))}async function $t(L,I,Y,J,re){Us();let fe=Re({state:"submitting",location:I},Y);ue({navigation:fe});let ie,ce=sp(J,I);if(!ce.route.action&&!ce.route.lazy)ie={type:St.error,error:Vr(405,{method:L.method,pathname:I.pathname,routeId:ce.route.id})};else if(ie=await ua("action",L,ce,J,r,t,o),L.signal.aborted)return{shortCircuited:!0};if(ds(ie)){let ne;return re&&re.replace!=null?ne=re.replace:ne=ie.location===y.location.pathname+y.location.search,await Cr(y,ie,{submission:Y,replace:ne}),{shortCircuited:!0}}if(Oa(ie)){let ne=rs(J,ce.route.id);return(re&&re.replace)!==!0&&(w=gt.Push),{pendingActionData:{},pendingActionError:{[ne.route.id]:ie.error}}}if(to(ie))throw Vr(400,{type:"defer-action"});return{pendingActionData:{[ce.route.id]:ie.data}}}async function tr(L,I,Y,J,re,fe,ie,ce,ne){let _e=J;_e||(_e=Re({state:"loading",location:I,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},re));let ae=re||fe?re||fe:_e.formMethod&&_e.formAction&&_e.formData&&_e.formEncType?{formMethod:_e.formMethod,formAction:_e.formAction,formData:_e.formData,formEncType:_e.formEncType}:void 0,_t=i||n,[ct,tt]=Vy(e.history,y,Y,ae,I,P,M,R,lt,_t,o,ce,ne);if(mt(Ve=>!(Y&&Y.some(rr=>rr.route.id===Ve))||ct&&ct.some(rr=>rr.route.id===Ve)),ct.length===0&&tt.length===0){let Ve=Pl();return he(I,Re({matches:Y,loaderData:{},errors:ne||null},ce?{actionData:ce}:{},Ve?{fetchers:new Map(y.fetchers)}:{})),{shortCircuited:!0}}if(!O){tt.forEach(rr=>{let pt=y.fetchers.get(rr.key),Wi={state:"loading",data:pt&&pt.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(rr.key,Wi)});let Ve=ce||y.actionData;ue(Re({navigation:_e},Ve?Object.keys(Ve).length===0?{actionData:null}:{actionData:Ve}:{},tt.length>0?{fetchers:new Map(y.fetchers)}:{}))}ee=++z,tt.forEach(Ve=>{Ve.controller&&$.set(Ve.key,Ve.controller)});let zt=()=>tt.forEach(Ve=>ii(Ve.key));j&&j.signal.addEventListener("abort",zt);let{results:tn,loaderResults:rn,fetcherResults:xn}=await mr(y.matches,Y,ct,tt,L);if(L.signal.aborted)return{shortCircuited:!0};j&&j.signal.removeEventListener("abort",zt),tt.forEach(Ve=>$.delete(Ve.key));let nn=Ky(tn);if(nn)return await Cr(y,nn,{replace:ie}),{shortCircuited:!0};let{loaderData:Sn,errors:Ks}=By(y,Y,ct,rn,ne,tt,xn,je);je.forEach((Ve,rr)=>{Ve.subscribe(pt=>{(pt||Ve.done)&&je.delete(rr)})});let bn=Pl(),ai=oi(ee),K=bn||ai||tt.length>0;return Re({loaderData:Sn,errors:Ks},K?{fetchers:new Map(y.fetchers)}:{})}function Nr(L){return y.fetchers.get(L)||qO}function $r(L,I,Y,J){if(ZO)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");$.has(L)&&ii(L);let re=i||n,fe=op(y.location,y.matches,o,a.v7_prependBasename,Y,I,J==null?void 0:J.relative),ie=ts(re,fe,o);if(!ie){Bs(L,I,Vr(404,{pathname:fe}));return}let{path:ce,submission:ne}=Fy(a.v7_normalizeFormMethod,!0,fe,J),_e=sp(ie,ce);if(S=(J&&J.preventScrollReset)===!0,ne&&In(ne.formMethod)){hr(L,I,ce,_e,ie,ne);return}lt.set(L,{routeId:I,path:ce}),Vi(L,I,ce,_e,ie,ne)}async function hr(L,I,Y,J,re,fe){if(Us(),lt.delete(L),!J.route.action&&!J.route.lazy){let me=Vr(405,{method:fe.formMethod,pathname:Y,routeId:I});Bs(L,I,me);return}let ie=y.fetchers.get(L),ce=Re({state:"submitting"},fe,{data:ie&&ie.data," _hasFetcherDoneAnything ":!0});y.fetchers.set(L,ce),ue({fetchers:new Map(y.fetchers)});let ne=new AbortController,_e=da(e.history,Y,ne.signal,fe);$.set(L,ne);let ae=await ua("action",_e,J,re,r,t,o);if(_e.signal.aborted){$.get(L)===ne&&$.delete(L);return}if(ds(ae)){$.delete(L),G.add(L);let me=Re({state:"loading"},fe,{data:void 0," _hasFetcherDoneAnything ":!0});return y.fetchers.set(L,me),ue({fetchers:new Map(y.fetchers)}),Cr(y,ae,{submission:fe,isFetchActionRedirect:!0})}if(Oa(ae)){Bs(L,I,ae.error);return}if(to(ae))throw Vr(400,{type:"defer-action"});let _t=y.navigation.location||y.location,ct=da(e.history,_t,ne.signal),tt=i||n,zt=y.navigation.state!=="idle"?ts(tt,y.navigation.location,o):y.matches;be(zt,"Didn't find any matches after fetcher action");let tn=++z;te.set(L,tn);let rn=Re({state:"loading",data:ae.data},fe,{" _hasFetcherDoneAnything ":!0});y.fetchers.set(L,rn);let[xn,nn]=Vy(e.history,y,zt,fe,_t,P,M,R,lt,tt,o,{[J.route.id]:ae.data},void 0);nn.filter(me=>me.key!==L).forEach(me=>{let kn=me.key,Rl=y.fetchers.get(kn),jt={state:"loading",data:Rl&&Rl.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(kn,jt),me.controller&&$.set(kn,me.controller)}),ue({fetchers:new Map(y.fetchers)});let Sn=()=>nn.forEach(me=>ii(me.key));ne.signal.addEventListener("abort",Sn);let{results:Ks,loaderResults:bn,fetcherResults:ai}=await mr(y.matches,zt,xn,nn,ct);if(ne.signal.aborted)return;ne.signal.removeEventListener("abort",Sn),te.delete(L),$.delete(L),nn.forEach(me=>$.delete(me.key));let K=Ky(Ks);if(K)return Cr(y,K);let{loaderData:Ve,errors:rr}=By(y,y.matches,xn,bn,void 0,nn,ai,je),pt={state:"idle",data:ae.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(L,pt);let Wi=oi(tn);y.navigation.state==="loading"&&tn>ee?(be(w,"Expected pending action"),j&&j.abort(),he(y.navigation.location,{matches:zt,loaderData:Ve,errors:rr,fetchers:new Map(y.fetchers)})):(ue(Re({errors:rr,loaderData:Gy(y.loaderData,Ve,zt,rr)},Wi?{fetchers:new Map(y.fetchers)}:{})),P=!1)}async function Vi(L,I,Y,J,re,fe){let ie=y.fetchers.get(L),ce=Re({state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},fe,{data:ie&&ie.data," _hasFetcherDoneAnything ":!0});y.fetchers.set(L,ce),ue({fetchers:new Map(y.fetchers)});let ne=new AbortController,_e=da(e.history,Y,ne.signal);$.set(L,ne);let ae=await ua("loader",_e,J,re,r,t,o);if(to(ae)&&(ae=await ux(ae,_e.signal,!0)||ae),$.get(L)===ne&&$.delete(L),_e.signal.aborted)return;if(ds(ae)){G.add(L),await Cr(y,ae);return}if(Oa(ae)){let ct=rs(y.matches,I);y.fetchers.delete(L),ue({fetchers:new Map(y.fetchers),errors:{[ct.route.id]:ae.error}});return}be(!to(ae),"Unhandled fetcher deferred data");let _t={state:"idle",data:ae.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(L,_t),ue({fetchers:new Map(y.fetchers)})}async function Cr(L,I,Y){var J;let{submission:re,replace:fe,isFetchActionRedirect:ie}=Y===void 0?{}:Y;I.revalidate&&(P=!0);let ce=el(L.location,I.location,Re({_isRedirect:!0},ie?{_isFetchActionRedirect:!0}:{}));if(be(ce,"Expected a location on the redirect navigation"),ox.test(I.location)&&sx&&typeof((J=window)==null?void 0:J.location)<"u"){let tt=e.history.createURL(I.location),zt=Is(tt.pathname,o)==null;if(window.location.origin!==tt.origin||zt){fe?window.location.replace(I.location):window.location.assign(I.location);return}}j=null;let ne=fe===!0?gt.Replace:gt.Push,{formMethod:_e,formAction:ae,formEncType:_t,formData:ct}=L.navigation;!re&&_e&&ae&&ct&&_t&&(re={formMethod:_e,formAction:ae,formEncType:_t,formData:ct}),QO.has(I.status)&&re&&In(re.formMethod)?await X(ne,ce,{submission:Re({},re,{formAction:I.location}),preventScrollReset:S}):ie?await X(ne,ce,{overrideNavigation:{state:"loading",location:ce,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},fetcherSubmission:re,preventScrollReset:S}):await X(ne,ce,{overrideNavigation:{state:"loading",location:ce,formMethod:re?re.formMethod:void 0,formAction:re?re.formAction:void 0,formEncType:re?re.formEncType:void 0,formData:re?re.formData:void 0},preventScrollReset:S})}async function mr(L,I,Y,J,re){let fe=await Promise.all([...Y.map(ne=>ua("loader",re,ne,I,r,t,o)),...J.map(ne=>ne.matches&&ne.match&&ne.controller?ua("loader",da(e.history,ne.path,ne.controller.signal),ne.match,ne.matches,r,t,o):{type:St.error,error:Vr(404,{pathname:ne.path})})]),ie=fe.slice(0,Y.length),ce=fe.slice(Y.length);return await Promise.all([Qy(L,Y,ie,ie.map(()=>re.signal),!1,y.loaderData),Qy(L,J.map(ne=>ne.match),ce,J.map(ne=>ne.controller?ne.controller.signal:null),!0)]),{results:fe,loaderResults:ie,fetcherResults:ce}}function Us(){P=!0,M.push(...mt()),lt.forEach((L,I)=>{$.has(I)&&(R.push(I),ii(I))})}function Bs(L,I,Y){let J=rs(y.matches,I);Gs(L),ue({errors:{[J.route.id]:Y},fetchers:new Map(y.fetchers)})}function Gs(L){$.has(L)&&ii(L),lt.delete(L),te.delete(L),G.delete(L),y.fetchers.delete(L)}function ii(L){let I=$.get(L);be(I,"Expected fetch controller: "+L),I.abort(),$.delete(L)}function Ol(L){for(let I of L){let J={state:"idle",data:Nr(I).data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(I,J)}}function Pl(){let L=[],I=!1;for(let Y of G){let J=y.fetchers.get(Y);be(J,"Expected fetcher: "+Y),J.state==="loading"&&(G.delete(Y),L.push(Y),I=!0)}return Ol(L),I}function oi(L){let I=[];for(let[Y,J]of te)if(J0}function Dt(L,I){let Y=y.blockers.get(L)||Hy;return $e.get(L)!==I&&$e.set(L,I),Y}function Et(L){y.blockers.delete(L),$e.delete(L)}function si(L,I){let Y=y.blockers.get(L)||Hy;be(Y.state==="unblocked"&&I.state==="blocked"||Y.state==="blocked"&&I.state==="blocked"||Y.state==="blocked"&&I.state==="proceeding"||Y.state==="blocked"&&I.state==="unblocked"||Y.state==="proceeding"&&I.state==="unblocked","Invalid blocker state transition: "+Y.state+" -> "+I.state),y.blockers.set(L,I),ue({blockers:new Map(y.blockers)})}function Xs(L){let{currentLocation:I,nextLocation:Y,historyAction:J}=L;if($e.size===0)return;$e.size>1&&po(!1,"A router only supports one blocker at a time");let re=Array.from($e.entries()),[fe,ie]=re[re.length-1],ce=y.blockers.get(fe);if(!(ce&&ce.state==="proceeding")&&ie({currentLocation:I,nextLocation:Y,historyAction:J}))return fe}function mt(L){let I=[];return je.forEach((Y,J)=>{(!L||L(J))&&(Y.cancel(),I.push(J),je.delete(J))}),I}function af(L,I,Y){if(h=L,v=I,g=Y||(J=>J.key),!x&&y.navigation===Zf){x=!0;let J=Xt(y.location,y.matches);J!=null&&ue({restoreScrollPosition:J})}return()=>{h=null,v=null,g=null}}function Co(L,I){if(h&&g&&v){let Y=I.map(re=>qy(re,y.loaderData)),J=g(L,Y)||L.key;h[J]=v()}}function Xt(L,I){if(h&&g&&v){let Y=I.map(fe=>qy(fe,y.loaderData)),J=g(L,Y)||L.key,re=h[J];if(typeof re=="number")return re}return null}function ge(L){i=L}return E={get basename(){return o},get state(){return y},get routes(){return n},initialize:W,subscribe:Q,enableScrollRestoration:af,navigate:st,fetch:$r,revalidate:Fe,createHref:L=>e.history.createHref(L),encodeLocation:L=>e.history.encodeLocation(L),getFetcher:Nr,deleteFetcher:Gs,dispose:le,getBlocker:Dt,deleteBlocker:Et,_internalFetchControllers:$,_internalActiveDeferreds:je,_internalSetRoutes:ge},E}function tP(e){return e!=null&&"formData"in e}function op(e,t,r,n,i,o,a){let c,d;if(o!=null&&a!=="path"){c=[];for(let g of t)if(c.push(g),g.route.id===o){d=g;break}}else c=t,d=t[t.length-1];let h=Y0(i||".",ad(c).map(g=>g.pathnameBase),Is(e.pathname,r)||e.pathname,a==="path");return i==null&&(h.search=e.search,h.hash=e.hash),(i==null||i===""||i===".")&&d&&d.route.index&&!F0(h.search)&&(h.search=h.search?h.search.replace(/^\?/,"?index&"):"?index"),n&&r!=="/"&&(h.pathname=h.pathname==="/"?r:Un([r,h.pathname])),go(h)}function Fy(e,t,r,n){if(!n||!tP(n))return{path:r};if(n.formMethod&&!lP(n.formMethod))return{path:r,error:Vr(405,{method:n.formMethod})};let i;if(n.formData){let c=n.formMethod||"get";if(i={formMethod:e?c.toUpperCase():c.toLowerCase(),formAction:cx(r),formEncType:n&&n.formEncType||"application/x-www-form-urlencoded",formData:n.formData},In(i.formMethod))return{path:r,submission:i}}let o=pn(r),a=lx(n.formData);return t&&o.search&&F0(o.search)&&a.append("index",""),o.search="?"+a,{path:go(o),submission:i}}function rP(e,t){let r=e;if(t){let n=e.findIndex(i=>i.route.id===t);n>=0&&(r=e.slice(0,n))}return r}function Vy(e,t,r,n,i,o,a,c,d,h,g,v,x){let b=x?Object.values(x)[0]:v?Object.values(v)[0]:void 0,k=e.createURL(t.location),C=e.createURL(i),E=x?Object.keys(x)[0]:void 0,w=rP(r,E).filter((j,O)=>{if(j.route.lazy)return!0;if(j.route.loader==null)return!1;if(nP(t.loaderData,t.matches[O],j)||a.some(R=>R===j.route.id))return!0;let P=t.matches[O],M=j;return Wy(j,Re({currentUrl:k,currentParams:P.params,nextUrl:C,nextParams:M.params},n,{actionResult:b,defaultShouldRevalidate:o||k.pathname+k.search===C.pathname+C.search||k.search!==C.search||ax(P,M)}))}),S=[];return d.forEach((j,O)=>{if(!r.some($=>$.route.id===j.routeId))return;let P=ts(h,j.path,g);if(!P){S.push({key:O,routeId:j.routeId,path:j.path,matches:null,match:null,controller:null});return}let M=sp(P,j.path);if(c.includes(O)){S.push({key:O,routeId:j.routeId,path:j.path,matches:P,match:M,controller:new AbortController});return}Wy(M,Re({currentUrl:k,currentParams:t.matches[t.matches.length-1].params,nextUrl:C,nextParams:r[r.length-1].params},n,{actionResult:b,defaultShouldRevalidate:o}))&&S.push({key:O,routeId:j.routeId,path:j.path,matches:P,match:M,controller:new AbortController})}),[w,S]}function nP(e,t,r){let n=!t||r.route.id!==t.route.id,i=e[r.route.id]===void 0;return n||i}function ax(e,t){let r=e.route.path;return e.pathname!==t.pathname||r!=null&&r.endsWith("*")&&e.params["*"]!==t.params["*"]}function Wy(e,t){if(e.route.shouldRevalidate){let r=e.route.shouldRevalidate(t);if(typeof r=="boolean")return r}return t.defaultShouldRevalidate}async function Uy(e,t,r){if(!e.lazy)return;let n=await e.lazy();if(!e.lazy)return;let i=r[e.id];be(i,"No route found in manifest");let o={};for(let a in n){let d=i[a]!==void 0&&a!=="hasErrorBoundary";po(!d,'Route "'+i.id+'" has a static property "'+a+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+a+'" will be ignored.')),!d&&!CO.has(a)&&(o[a]=n[a])}Object.assign(i,o),Object.assign(i,Re({},t(i),{lazy:void 0}))}async function ua(e,t,r,n,i,o,a,c,d,h){c===void 0&&(c=!1),d===void 0&&(d=!1);let g,v,x,b=E=>{let y,w=new Promise((S,j)=>y=j);return x=()=>y(),t.signal.addEventListener("abort",x),Promise.race([E({request:t,params:r.params,context:h}),w])};try{let E=r.route[e];if(r.route.lazy)if(E)v=(await Promise.all([b(E),Uy(r.route,o,i)]))[0];else if(await Uy(r.route,o,i),E=r.route[e],E)v=await b(E);else if(e==="action"){let y=new URL(t.url),w=y.pathname+y.search;throw Vr(405,{method:t.method,pathname:w,routeId:r.route.id})}else return{type:St.data,data:void 0};else if(E)v=await b(E);else{let y=new URL(t.url),w=y.pathname+y.search;throw Vr(404,{pathname:w})}be(v!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+r.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(E){g=St.error,v=E}finally{x&&t.signal.removeEventListener("abort",x)}if(aP(v)){let E=v.status;if(KO.has(E)){let S=v.headers.get("Location");if(be(S,"Redirects returned/thrown from loaders/actions must have a Location header"),!ox.test(S))S=op(new URL(t.url),n.slice(0,n.indexOf(r)+1),a,!0,S);else if(!c){let j=new URL(t.url),O=S.startsWith("//")?new URL(j.protocol+S):new URL(S),P=Is(O.pathname,a)!=null;O.origin===j.origin&&P&&(S=O.pathname+O.search+O.hash)}if(c)throw v.headers.set("Location",S),v;return{type:St.redirect,status:E,location:S,revalidate:v.headers.get("X-Remix-Revalidate")!==null}}if(d)throw{type:g||St.data,response:v};let y,w=v.headers.get("Content-Type");return w&&/\bapplication\/json\b/.test(w)?y=await v.json():y=await v.text(),g===St.error?{type:g,error:new H0(E,v.statusText,y),headers:v.headers}:{type:St.data,data:y,statusCode:v.status,headers:v.headers}}if(g===St.error)return{type:g,error:v};if(sP(v)){var k,C;return{type:St.deferred,deferredData:v,statusCode:(k=v.init)==null?void 0:k.status,headers:((C=v.init)==null?void 0:C.headers)&&new Headers(v.init.headers)}}return{type:St.data,data:v}}function da(e,t,r,n){let i=e.createURL(cx(t)).toString(),o={signal:r};if(n&&In(n.formMethod)){let{formMethod:a,formEncType:c,formData:d}=n;o.method=a.toUpperCase(),o.body=c==="application/x-www-form-urlencoded"?lx(d):d}return new Request(i,o)}function lx(e){let t=new URLSearchParams;for(let[r,n]of e.entries())t.append(r,n instanceof File?n.name:n);return t}function iP(e,t,r,n,i){let o={},a=null,c,d=!1,h={};return r.forEach((g,v)=>{let x=t[v].route.id;if(be(!ds(g),"Cannot handle redirect results in processLoaderData"),Oa(g)){let b=rs(e,x),k=g.error;n&&(k=Object.values(n)[0],n=void 0),a=a||{},a[b.route.id]==null&&(a[b.route.id]=k),o[x]=void 0,d||(d=!0,c=nx(g.error)?g.error.status:500),g.headers&&(h[x]=g.headers)}else to(g)?(i.set(x,g.deferredData),o[x]=g.deferredData.data):o[x]=g.data,g.statusCode!=null&&g.statusCode!==200&&!d&&(c=g.statusCode),g.headers&&(h[x]=g.headers)}),n&&(a=n,o[Object.keys(n)[0]]=void 0),{loaderData:o,errors:a,statusCode:c||200,loaderHeaders:h}}function By(e,t,r,n,i,o,a,c){let{loaderData:d,errors:h}=iP(t,r,n,i,c);for(let g=0;gn.route.id===t)+1):[...e]).reverse().find(n=>n.route.hasErrorBoundary===!0)||e[0]}function Xy(e){let t=e.find(r=>r.index||!r.path||r.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function Vr(e,t){let{pathname:r,routeId:n,method:i,type:o}=t===void 0?{}:t,a="Unknown Server Error",c="Unknown @remix-run/router error";return e===400?(a="Bad Request",i&&r&&n?c="You made a "+i+' request to "'+r+'" but '+('did not provide a `loader` for route "'+n+'", ')+"so there is no way to handle the request.":o==="defer-action"&&(c="defer() is not supported in actions")):e===403?(a="Forbidden",c='Route "'+n+'" does not match URL "'+r+'"'):e===404?(a="Not Found",c='No route matches URL "'+r+'"'):e===405&&(a="Method Not Allowed",i&&r&&n?c="You made a "+i.toUpperCase()+' request to "'+r+'" but '+('did not provide an `action` for route "'+n+'", ')+"so there is no way to handle the request.":i&&(c='Invalid request method "'+i.toUpperCase()+'"')),new H0(e||500,a,new Error(c),!0)}function Ky(e){for(let t=e.length-1;t>=0;t--){let r=e[t];if(ds(r))return r}}function cx(e){let t=typeof e=="string"?pn(e):e;return go(Re({},t,{hash:""}))}function oP(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===""?t.hash!=="":e.hash===t.hash?!0:t.hash!==""}function to(e){return e.type===St.deferred}function Oa(e){return e.type===St.error}function ds(e){return(e&&e.type)===St.redirect}function sP(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}function aP(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function lP(e){return XO.has(e.toLowerCase())}function In(e){return BO.has(e.toLowerCase())}async function Qy(e,t,r,n,i,o){for(let a=0;av.route.id===d.route.id),g=h!=null&&!ax(h,d)&&(o&&o[d.route.id])!==void 0;if(to(c)&&(i||g)){let v=n[a];be(v,"Expected an AbortSignal for revalidating fetcher deferred result"),await ux(c,v,i).then(x=>{x&&(r[a]=x||r[a])})}}}async function ux(e,t,r){if(r===void 0&&(r=!1),!await e.deferredData.resolveData(t)){if(r)try{return{type:St.data,data:e.deferredData.unwrappedData}}catch(i){return{type:St.error,error:i}}return{type:St.data,data:e.deferredData.data}}}function F0(e){return new URLSearchParams(e).getAll("index").some(t=>t==="")}function qy(e,t){let{route:r,pathname:n,params:i}=e;return{id:r.id,pathname:n,params:i,data:t[r.id],handle:r.handle}}function sp(e,t){let r=typeof t=="string"?pn(t).search:t.search;if(e[e.length-1].route.index&&F0(r||""))return e[e.length-1];let n=ad(e);return n[n.length-1]}/** + */function Re(){return Re=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u")throw new Error(t)}function po(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function bO(){return Math.random().toString(36).substr(2,8)}function zy(e,t){return{usr:e.state,key:e.key,idx:t}}function el(e,t,r,n){return r===void 0&&(r=null),Re({pathname:typeof e=="string"?e:e.pathname,search:"",hash:""},typeof t=="string"?pn(t):t,{state:r,key:t&&t.key||n||bO()})}function go(e){let{pathname:t="/",search:r="",hash:n=""}=e;return r&&r!=="?"&&(t+=r.charAt(0)==="?"?r:"?"+r),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function pn(e){let t={};if(e){let r=e.indexOf("#");r>=0&&(t.hash=e.substr(r),e=e.substr(0,r));let n=e.indexOf("?");n>=0&&(t.search=e.substr(n),e=e.substr(0,n)),e&&(t.pathname=e)}return t}function kO(e,t,r,n){n===void 0&&(n={});let{window:i=document.defaultView,v5Compat:o=!1}=n,a=i.history,c=gt.Pop,d=null,h=g();h==null&&(h=0,a.replaceState(Re({},a.state,{idx:h}),""));function g(){return(a.state||{idx:null}).idx}function v(){c=gt.Pop;let E=g(),y=E==null?null:E-h;h=E,d&&d({action:c,location:C.location,delta:y})}function x(E,y){c=gt.Push;let w=el(C.location,E,y);r&&r(w,E),h=g()+1;let S=zy(w,h),T=C.createHref(w);try{a.pushState(S,"",T)}catch{i.location.assign(T)}o&&d&&d({action:c,location:C.location,delta:1})}function b(E,y){c=gt.Replace;let w=el(C.location,E,y);r&&r(w,E),h=g();let S=zy(w,h),T=C.createHref(w);a.replaceState(S,"",T),o&&d&&d({action:c,location:C.location,delta:0})}function k(E){let y=i.location.origin!=="null"?i.location.origin:i.location.href,w=typeof E=="string"?E:go(E);return be(y,"No window.location.(origin|href) available to create URL for href: "+w),new URL(w,y)}let C={get action(){return c},get location(){return e(i,a)},listen(E){if(d)throw new Error("A history only accepts one active listener");return i.addEventListener($y,v),d=E,()=>{i.removeEventListener($y,v),d=null}},createHref(E){return t(i,E)},createURL:k,encodeLocation(E){let y=k(E);return{pathname:y.pathname,search:y.search,hash:y.hash}},push:x,replace:b,go(E){return a.go(E)}};return C}var St;(function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"})(St||(St={}));const CO=new Set(["lazy","caseSensitive","path","id","index","children"]);function DO(e){return e.index===!0}function ex(e,t,r,n){return r===void 0&&(r=[]),n===void 0&&(n={}),e.map((i,o)=>{let a=[...r,o],c=typeof i.id=="string"?i.id:a.join("-");if(be(i.index!==!0||!i.children,"Cannot specify children on an index route"),be(!n[c],'Found a route id collision on id "'+c+`". Route id's must be globally unique within Data Router usages`),DO(i)){let d=Re({},i,t(i),{id:c});return n[c]=d,d}else{let d=Re({},i,t(i),{id:c,children:void 0});return n[c]=d,i.children&&(d.children=ex(i.children,t,a,n)),d}})}function ts(e,t,r){r===void 0&&(r="/");let n=typeof t=="string"?pn(t):t,i=Is(n.pathname||"/",r);if(i==null)return null;let o=tx(e);EO(o);let a=null;for(let c=0;a==null&&c{let d={relativePath:c===void 0?o.path||"":c,caseSensitive:o.caseSensitive===!0,childrenIndex:a,route:o};d.relativePath.startsWith("/")&&(be(d.relativePath.startsWith(n),'Absolute route path "'+d.relativePath+'" nested under path '+('"'+n+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),d.relativePath=d.relativePath.slice(n.length));let h=Un([n,d.relativePath]),g=r.concat(d);o.children&&o.children.length>0&&(be(o.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+h+'".')),tx(o.children,t,g,h)),!(o.path==null&&!o.index)&&t.push({path:h,score:LO(h,o.index),routesMeta:g})};return e.forEach((o,a)=>{var c;if(o.path===""||!((c=o.path)!=null&&c.includes("?")))i(o,a);else for(let d of rx(o.path))i(o,a,d)}),t}function rx(e){let t=e.split("/");if(t.length===0)return[];let[r,...n]=t,i=r.endsWith("?"),o=r.replace(/\?$/,"");if(n.length===0)return i?[o,""]:[o];let a=rx(n.join("/")),c=[];return c.push(...a.map(d=>d===""?o:[o,d].join("/"))),i&&c.push(...a),c.map(d=>e.startsWith("/")&&d===""?"/":d)}function EO(e){e.sort((t,r)=>t.score!==r.score?r.score-t.score:AO(t.routesMeta.map(n=>n.childrenIndex),r.routesMeta.map(n=>n.childrenIndex)))}const TO=/^:\w+$/,jO=3,OO=2,PO=1,RO=10,MO=-2,Hy=e=>e==="*";function LO(e,t){let r=e.split("/"),n=r.length;return r.some(Hy)&&(n+=MO),t&&(n+=OO),r.filter(i=>!Hy(i)).reduce((i,o)=>i+(TO.test(o)?jO:o===""?PO:RO),n)}function AO(e,t){return e.length===t.length&&e.slice(0,-1).every((n,i)=>n===t[i])?e[e.length-1]-t[t.length-1]:0}function IO(e,t){let{routesMeta:r}=e,n={},i="/",o=[];for(let a=0;a{if(g==="*"){let x=c[v]||"";a=o.slice(0,o.length-x.length).replace(/(.)\/+$/,"$1")}return h[g]=HO(c[v]||"",g),h},{}),pathname:o,pathnameBase:a,pattern:e}}function $O(e,t,r){t===void 0&&(t=!1),r===void 0&&(r=!0),po(e==="*"||!e.endsWith("*")||e.endsWith("/*"),'Route path "'+e+'" will be treated as if it were '+('"'+e.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+e.replace(/\*$/,"/*")+'".'));let n=[],i="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^$?{}|()[\]]/g,"\\$&").replace(/\/:(\w+)/g,(a,c)=>(n.push(c),"/([^\\/]+)"));return e.endsWith("*")?(n.push("*"),i+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):r?i+="\\/*$":e!==""&&e!=="/"&&(i+="(?:(?=\\/|$))"),[new RegExp(i,t?void 0:"i"),n]}function zO(e){try{return decodeURI(e)}catch(t){return po(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+t+").")),e}}function HO(e,t){try{return decodeURIComponent(e)}catch(r){return po(!1,'The value for the URL param "'+t+'" will not be decoded because'+(' the string "'+e+'" is a malformed URL segment. This is probably')+(" due to a bad percent encoding ("+r+").")),e}}function Is(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let r=t.endsWith("/")?t.length-1:t.length,n=e.charAt(r);return n&&n!=="/"?null:e.slice(r)||"/"}function YO(e,t){t===void 0&&(t="/");let{pathname:r,search:n="",hash:i=""}=typeof e=="string"?pn(e):e;return{pathname:r?r.startsWith("/")?r:FO(r,t):t,search:WO(n),hash:UO(i)}}function FO(e,t){let r=t.replace(/\/+$/,"").split("/");return e.split("/").forEach(i=>{i===".."?r.length>1&&r.pop():i!=="."&&r.push(i)}),r.length>1?r.join("/"):"/"}function qf(e,t,r,n){return"Cannot include a '"+e+"' character in a manually specified "+("`to."+t+"` field ["+JSON.stringify(n)+"]. Please separate it out to the ")+("`to."+r+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function ad(e){return e.filter((t,r)=>r===0||t.route.path&&t.route.path.length>0)}function H0(e,t,r,n){n===void 0&&(n=!1);let i;typeof e=="string"?i=pn(e):(i=Re({},e),be(!i.pathname||!i.pathname.includes("?"),qf("?","pathname","search",i)),be(!i.pathname||!i.pathname.includes("#"),qf("#","pathname","hash",i)),be(!i.search||!i.search.includes("#"),qf("#","search","hash",i)));let o=e===""||i.pathname==="",a=o?"/":i.pathname,c;if(n||a==null)c=r;else{let v=t.length-1;if(a.startsWith("..")){let x=a.split("/");for(;x[0]==="..";)x.shift(),v-=1;i.pathname=x.join("/")}c=v>=0?t[v]:"/"}let d=YO(i,c),h=a&&a!=="/"&&a.endsWith("/"),g=(o||a===".")&&r.endsWith("/");return!d.pathname.endsWith("/")&&(h||g)&&(d.pathname+="/"),d}const Un=e=>e.join("/").replace(/\/\/+/g,"/"),VO=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),WO=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,UO=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;class Y0{constructor(t,r,n,i){i===void 0&&(i=!1),this.status=t,this.statusText=r||"",this.internal=i,n instanceof Error?(this.data=n.toString(),this.error=n):this.data=n}}function nx(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}const ix=["post","put","patch","delete"],BO=new Set(ix),GO=["get",...ix],XO=new Set(GO),KO=new Set([301,302,303,307,308]),QO=new Set([307,308]),Zf={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},qO={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},Yy={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},ox=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,sx=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",ZO=!sx,JO=e=>({hasErrorBoundary:!!e.hasErrorBoundary});function eP(e){be(e.routes.length>0,"You must provide a non-empty routes array to createRouter");let t;if(e.mapRouteProperties)t=e.mapRouteProperties;else if(e.detectErrorBoundary){let L=e.detectErrorBoundary;t=I=>({hasErrorBoundary:L(I)})}else t=JO;let r={},n=ex(e.routes,t,void 0,r),i,o=e.basename||"/",a=Re({v7_normalizeFormMethod:!1,v7_prependBasename:!1},e.future),c=null,d=new Set,h=null,g=null,v=null,x=e.hydrationData!=null,b=ts(n,e.history.location,o),k=null;if(b==null){let L=Vr(404,{pathname:e.history.location.pathname}),{matches:I,route:H}=Xy(n);b=I,k={[H.id]:L}}let C=!b.some(L=>L.route.lazy)&&(!b.some(L=>L.route.loader)||e.hydrationData!=null),E,y={historyAction:e.history.action,location:e.history.location,matches:b,initialized:C,navigation:Zf,restoreScrollPosition:e.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:e.hydrationData&&e.hydrationData.loaderData||{},actionData:e.hydrationData&&e.hydrationData.actionData||null,errors:e.hydrationData&&e.hydrationData.errors||k,fetchers:new Map,blockers:new Map},w=gt.Pop,S=!1,T,O=!1,P=!1,M=[],R=[],$=new Map,z=0,ee=-1,te=new Map,G=new Set,lt=new Map,Te=new Map,$e=new Map,ht=!1;function W(){return c=e.history.listen(L=>{let{action:I,location:H,delta:J}=L;if(ht){ht=!1;return}po($e.size===0||J!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let re=Xs({currentLocation:y.location,nextLocation:H,historyAction:I});if(re&&J!=null){ht=!0,e.history.go(J*-1),si(re,{state:"blocked",location:H,proceed(){si(re,{state:"proceeding",proceed:void 0,reset:void 0,location:H}),e.history.go(J)},reset(){Et(re),ue({blockers:new Map(E.state.blockers)})}});return}return X(I,H)}),y.initialized||X(gt.Pop,y.location),E}function le(){c&&c(),d.clear(),T&&T.abort(),y.fetchers.forEach((L,I)=>Gs(I)),y.blockers.forEach((L,I)=>Et(I))}function Q(L){return d.add(L),()=>d.delete(L)}function ue(L){y=Re({},y,L),d.forEach(I=>I(y))}function he(L,I){var H,J;let re=y.actionData!=null&&y.navigation.formMethod!=null&&In(y.navigation.formMethod)&&y.navigation.state==="loading"&&((H=L.state)==null?void 0:H._isRedirect)!==!0,fe;I.actionData?Object.keys(I.actionData).length>0?fe=I.actionData:fe=null:re?fe=y.actionData:fe=null;let ie=I.loaderData?Gy(y.loaderData,I.loaderData,I.matches||[],I.errors):y.loaderData;for(let[ne]of $e)Et(ne);let ce=S===!0||y.navigation.formMethod!=null&&In(y.navigation.formMethod)&&((J=L.state)==null?void 0:J._isRedirect)!==!0;i&&(n=i,i=void 0),ue(Re({},I,{actionData:fe,loaderData:ie,historyAction:w,location:L,initialized:!0,navigation:Zf,revalidation:"idle",restoreScrollPosition:Xt(L,I.matches||y.matches),preventScrollReset:ce,blockers:new Map(y.blockers)})),O||w===gt.Pop||(w===gt.Push?e.history.push(L,L.state):w===gt.Replace&&e.history.replace(L,L.state)),w=gt.Pop,S=!1,O=!1,P=!1,M=[],R=[]}async function st(L,I){if(typeof L=="number"){e.history.go(L);return}let H=op(y.location,y.matches,o,a.v7_prependBasename,L,I==null?void 0:I.fromRouteId,I==null?void 0:I.relative),{path:J,submission:re,error:fe}=Fy(a.v7_normalizeFormMethod,!1,H,I),ie=y.location,ce=el(y.location,J,I&&I.state);ce=Re({},ce,e.history.encodeLocation(ce));let ne=I&&I.replace!=null?I.replace:void 0,_e=gt.Push;ne===!0?_e=gt.Replace:ne===!1||re!=null&&In(re.formMethod)&&re.formAction===y.location.pathname+y.location.search&&(_e=gt.Replace);let ae=I&&"preventScrollReset"in I?I.preventScrollReset===!0:void 0,_t=Xs({currentLocation:ie,nextLocation:ce,historyAction:_e});if(_t){si(_t,{state:"blocked",location:ce,proceed(){si(_t,{state:"proceeding",proceed:void 0,reset:void 0,location:ce}),st(L,I)},reset(){Et(_t),ue({blockers:new Map(y.blockers)})}});return}return await X(_e,ce,{submission:re,pendingError:fe,preventScrollReset:ae,replace:I&&I.replace})}function Fe(){if(Us(),ue({revalidation:"loading"}),y.navigation.state!=="submitting"){if(y.navigation.state==="idle"){X(y.historyAction,y.location,{startUninterruptedRevalidation:!0});return}X(w||y.historyAction,y.navigation.location,{overrideNavigation:y.navigation})}}async function X(L,I,H){T&&T.abort(),T=null,w=L,O=(H&&H.startUninterruptedRevalidation)===!0,Co(y.location,y.matches),S=(H&&H.preventScrollReset)===!0;let J=i||n,re=H&&H.overrideNavigation,fe=ts(J,I,o);if(!fe){let ct=Vr(404,{pathname:I.pathname}),{matches:tt,route:zt}=Xy(J);mt(),he(I,{matches:tt,loaderData:{},errors:{[zt.id]:ct}});return}if(oP(y.location,I)&&!(H&&H.submission&&In(H.submission.formMethod))){he(I,{matches:fe});return}T=new AbortController;let ie=da(e.history,I,T.signal,H&&H.submission),ce,ne;if(H&&H.pendingError)ne={[rs(fe).route.id]:H.pendingError};else if(H&&H.submission&&In(H.submission.formMethod)){let ct=await $t(ie,I,H.submission,fe,{replace:H.replace});if(ct.shortCircuited)return;ce=ct.pendingActionData,ne=ct.pendingActionError,re=Re({state:"loading",location:I},H.submission),ie=new Request(ie.url,{signal:ie.signal})}let{shortCircuited:_e,loaderData:ae,errors:_t}=await tr(ie,I,fe,re,H&&H.submission,H&&H.fetcherSubmission,H&&H.replace,ce,ne);_e||(T=null,he(I,Re({matches:fe},ce?{actionData:ce}:{},{loaderData:ae,errors:_t})))}async function $t(L,I,H,J,re){Us();let fe=Re({state:"submitting",location:I},H);ue({navigation:fe});let ie,ce=sp(J,I);if(!ce.route.action&&!ce.route.lazy)ie={type:St.error,error:Vr(405,{method:L.method,pathname:I.pathname,routeId:ce.route.id})};else if(ie=await ua("action",L,ce,J,r,t,o),L.signal.aborted)return{shortCircuited:!0};if(ds(ie)){let ne;return re&&re.replace!=null?ne=re.replace:ne=ie.location===y.location.pathname+y.location.search,await Cr(y,ie,{submission:H,replace:ne}),{shortCircuited:!0}}if(Oa(ie)){let ne=rs(J,ce.route.id);return(re&&re.replace)!==!0&&(w=gt.Push),{pendingActionData:{},pendingActionError:{[ne.route.id]:ie.error}}}if(to(ie))throw Vr(400,{type:"defer-action"});return{pendingActionData:{[ce.route.id]:ie.data}}}async function tr(L,I,H,J,re,fe,ie,ce,ne){let _e=J;_e||(_e=Re({state:"loading",location:I,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},re));let ae=re||fe?re||fe:_e.formMethod&&_e.formAction&&_e.formData&&_e.formEncType?{formMethod:_e.formMethod,formAction:_e.formAction,formData:_e.formData,formEncType:_e.formEncType}:void 0,_t=i||n,[ct,tt]=Vy(e.history,y,H,ae,I,P,M,R,lt,_t,o,ce,ne);if(mt(Ve=>!(H&&H.some(rr=>rr.route.id===Ve))||ct&&ct.some(rr=>rr.route.id===Ve)),ct.length===0&&tt.length===0){let Ve=Pl();return he(I,Re({matches:H,loaderData:{},errors:ne||null},ce?{actionData:ce}:{},Ve?{fetchers:new Map(y.fetchers)}:{})),{shortCircuited:!0}}if(!O){tt.forEach(rr=>{let pt=y.fetchers.get(rr.key),Wi={state:"loading",data:pt&&pt.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(rr.key,Wi)});let Ve=ce||y.actionData;ue(Re({navigation:_e},Ve?Object.keys(Ve).length===0?{actionData:null}:{actionData:Ve}:{},tt.length>0?{fetchers:new Map(y.fetchers)}:{}))}ee=++z,tt.forEach(Ve=>{Ve.controller&&$.set(Ve.key,Ve.controller)});let zt=()=>tt.forEach(Ve=>ii(Ve.key));T&&T.signal.addEventListener("abort",zt);let{results:tn,loaderResults:rn,fetcherResults:xn}=await mr(y.matches,H,ct,tt,L);if(L.signal.aborted)return{shortCircuited:!0};T&&T.signal.removeEventListener("abort",zt),tt.forEach(Ve=>$.delete(Ve.key));let nn=Ky(tn);if(nn)return await Cr(y,nn,{replace:ie}),{shortCircuited:!0};let{loaderData:Sn,errors:Ks}=By(y,H,ct,rn,ne,tt,xn,Te);Te.forEach((Ve,rr)=>{Ve.subscribe(pt=>{(pt||Ve.done)&&Te.delete(rr)})});let bn=Pl(),ai=oi(ee),K=bn||ai||tt.length>0;return Re({loaderData:Sn,errors:Ks},K?{fetchers:new Map(y.fetchers)}:{})}function Nr(L){return y.fetchers.get(L)||qO}function $r(L,I,H,J){if(ZO)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");$.has(L)&&ii(L);let re=i||n,fe=op(y.location,y.matches,o,a.v7_prependBasename,H,I,J==null?void 0:J.relative),ie=ts(re,fe,o);if(!ie){Bs(L,I,Vr(404,{pathname:fe}));return}let{path:ce,submission:ne}=Fy(a.v7_normalizeFormMethod,!0,fe,J),_e=sp(ie,ce);if(S=(J&&J.preventScrollReset)===!0,ne&&In(ne.formMethod)){hr(L,I,ce,_e,ie,ne);return}lt.set(L,{routeId:I,path:ce}),Vi(L,I,ce,_e,ie,ne)}async function hr(L,I,H,J,re,fe){if(Us(),lt.delete(L),!J.route.action&&!J.route.lazy){let me=Vr(405,{method:fe.formMethod,pathname:H,routeId:I});Bs(L,I,me);return}let ie=y.fetchers.get(L),ce=Re({state:"submitting"},fe,{data:ie&&ie.data," _hasFetcherDoneAnything ":!0});y.fetchers.set(L,ce),ue({fetchers:new Map(y.fetchers)});let ne=new AbortController,_e=da(e.history,H,ne.signal,fe);$.set(L,ne);let ae=await ua("action",_e,J,re,r,t,o);if(_e.signal.aborted){$.get(L)===ne&&$.delete(L);return}if(ds(ae)){$.delete(L),G.add(L);let me=Re({state:"loading"},fe,{data:void 0," _hasFetcherDoneAnything ":!0});return y.fetchers.set(L,me),ue({fetchers:new Map(y.fetchers)}),Cr(y,ae,{submission:fe,isFetchActionRedirect:!0})}if(Oa(ae)){Bs(L,I,ae.error);return}if(to(ae))throw Vr(400,{type:"defer-action"});let _t=y.navigation.location||y.location,ct=da(e.history,_t,ne.signal),tt=i||n,zt=y.navigation.state!=="idle"?ts(tt,y.navigation.location,o):y.matches;be(zt,"Didn't find any matches after fetcher action");let tn=++z;te.set(L,tn);let rn=Re({state:"loading",data:ae.data},fe,{" _hasFetcherDoneAnything ":!0});y.fetchers.set(L,rn);let[xn,nn]=Vy(e.history,y,zt,fe,_t,P,M,R,lt,tt,o,{[J.route.id]:ae.data},void 0);nn.filter(me=>me.key!==L).forEach(me=>{let kn=me.key,Rl=y.fetchers.get(kn),Tt={state:"loading",data:Rl&&Rl.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(kn,Tt),me.controller&&$.set(kn,me.controller)}),ue({fetchers:new Map(y.fetchers)});let Sn=()=>nn.forEach(me=>ii(me.key));ne.signal.addEventListener("abort",Sn);let{results:Ks,loaderResults:bn,fetcherResults:ai}=await mr(y.matches,zt,xn,nn,ct);if(ne.signal.aborted)return;ne.signal.removeEventListener("abort",Sn),te.delete(L),$.delete(L),nn.forEach(me=>$.delete(me.key));let K=Ky(Ks);if(K)return Cr(y,K);let{loaderData:Ve,errors:rr}=By(y,y.matches,xn,bn,void 0,nn,ai,Te),pt={state:"idle",data:ae.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(L,pt);let Wi=oi(tn);y.navigation.state==="loading"&&tn>ee?(be(w,"Expected pending action"),T&&T.abort(),he(y.navigation.location,{matches:zt,loaderData:Ve,errors:rr,fetchers:new Map(y.fetchers)})):(ue(Re({errors:rr,loaderData:Gy(y.loaderData,Ve,zt,rr)},Wi?{fetchers:new Map(y.fetchers)}:{})),P=!1)}async function Vi(L,I,H,J,re,fe){let ie=y.fetchers.get(L),ce=Re({state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},fe,{data:ie&&ie.data," _hasFetcherDoneAnything ":!0});y.fetchers.set(L,ce),ue({fetchers:new Map(y.fetchers)});let ne=new AbortController,_e=da(e.history,H,ne.signal);$.set(L,ne);let ae=await ua("loader",_e,J,re,r,t,o);if(to(ae)&&(ae=await ux(ae,_e.signal,!0)||ae),$.get(L)===ne&&$.delete(L),_e.signal.aborted)return;if(ds(ae)){G.add(L),await Cr(y,ae);return}if(Oa(ae)){let ct=rs(y.matches,I);y.fetchers.delete(L),ue({fetchers:new Map(y.fetchers),errors:{[ct.route.id]:ae.error}});return}be(!to(ae),"Unhandled fetcher deferred data");let _t={state:"idle",data:ae.data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(L,_t),ue({fetchers:new Map(y.fetchers)})}async function Cr(L,I,H){var J;let{submission:re,replace:fe,isFetchActionRedirect:ie}=H===void 0?{}:H;I.revalidate&&(P=!0);let ce=el(L.location,I.location,Re({_isRedirect:!0},ie?{_isFetchActionRedirect:!0}:{}));if(be(ce,"Expected a location on the redirect navigation"),ox.test(I.location)&&sx&&typeof((J=window)==null?void 0:J.location)<"u"){let tt=e.history.createURL(I.location),zt=Is(tt.pathname,o)==null;if(window.location.origin!==tt.origin||zt){fe?window.location.replace(I.location):window.location.assign(I.location);return}}T=null;let ne=fe===!0?gt.Replace:gt.Push,{formMethod:_e,formAction:ae,formEncType:_t,formData:ct}=L.navigation;!re&&_e&&ae&&ct&&_t&&(re={formMethod:_e,formAction:ae,formEncType:_t,formData:ct}),QO.has(I.status)&&re&&In(re.formMethod)?await X(ne,ce,{submission:Re({},re,{formAction:I.location}),preventScrollReset:S}):ie?await X(ne,ce,{overrideNavigation:{state:"loading",location:ce,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0},fetcherSubmission:re,preventScrollReset:S}):await X(ne,ce,{overrideNavigation:{state:"loading",location:ce,formMethod:re?re.formMethod:void 0,formAction:re?re.formAction:void 0,formEncType:re?re.formEncType:void 0,formData:re?re.formData:void 0},preventScrollReset:S})}async function mr(L,I,H,J,re){let fe=await Promise.all([...H.map(ne=>ua("loader",re,ne,I,r,t,o)),...J.map(ne=>ne.matches&&ne.match&&ne.controller?ua("loader",da(e.history,ne.path,ne.controller.signal),ne.match,ne.matches,r,t,o):{type:St.error,error:Vr(404,{pathname:ne.path})})]),ie=fe.slice(0,H.length),ce=fe.slice(H.length);return await Promise.all([Qy(L,H,ie,ie.map(()=>re.signal),!1,y.loaderData),Qy(L,J.map(ne=>ne.match),ce,J.map(ne=>ne.controller?ne.controller.signal:null),!0)]),{results:fe,loaderResults:ie,fetcherResults:ce}}function Us(){P=!0,M.push(...mt()),lt.forEach((L,I)=>{$.has(I)&&(R.push(I),ii(I))})}function Bs(L,I,H){let J=rs(y.matches,I);Gs(L),ue({errors:{[J.route.id]:H},fetchers:new Map(y.fetchers)})}function Gs(L){$.has(L)&&ii(L),lt.delete(L),te.delete(L),G.delete(L),y.fetchers.delete(L)}function ii(L){let I=$.get(L);be(I,"Expected fetch controller: "+L),I.abort(),$.delete(L)}function Ol(L){for(let I of L){let J={state:"idle",data:Nr(I).data,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0," _hasFetcherDoneAnything ":!0};y.fetchers.set(I,J)}}function Pl(){let L=[],I=!1;for(let H of G){let J=y.fetchers.get(H);be(J,"Expected fetcher: "+H),J.state==="loading"&&(G.delete(H),L.push(H),I=!0)}return Ol(L),I}function oi(L){let I=[];for(let[H,J]of te)if(J0}function Dt(L,I){let H=y.blockers.get(L)||Yy;return $e.get(L)!==I&&$e.set(L,I),H}function Et(L){y.blockers.delete(L),$e.delete(L)}function si(L,I){let H=y.blockers.get(L)||Yy;be(H.state==="unblocked"&&I.state==="blocked"||H.state==="blocked"&&I.state==="blocked"||H.state==="blocked"&&I.state==="proceeding"||H.state==="blocked"&&I.state==="unblocked"||H.state==="proceeding"&&I.state==="unblocked","Invalid blocker state transition: "+H.state+" -> "+I.state),y.blockers.set(L,I),ue({blockers:new Map(y.blockers)})}function Xs(L){let{currentLocation:I,nextLocation:H,historyAction:J}=L;if($e.size===0)return;$e.size>1&&po(!1,"A router only supports one blocker at a time");let re=Array.from($e.entries()),[fe,ie]=re[re.length-1],ce=y.blockers.get(fe);if(!(ce&&ce.state==="proceeding")&&ie({currentLocation:I,nextLocation:H,historyAction:J}))return fe}function mt(L){let I=[];return Te.forEach((H,J)=>{(!L||L(J))&&(H.cancel(),I.push(J),Te.delete(J))}),I}function af(L,I,H){if(h=L,v=I,g=H||(J=>J.key),!x&&y.navigation===Zf){x=!0;let J=Xt(y.location,y.matches);J!=null&&ue({restoreScrollPosition:J})}return()=>{h=null,v=null,g=null}}function Co(L,I){if(h&&g&&v){let H=I.map(re=>qy(re,y.loaderData)),J=g(L,H)||L.key;h[J]=v()}}function Xt(L,I){if(h&&g&&v){let H=I.map(fe=>qy(fe,y.loaderData)),J=g(L,H)||L.key,re=h[J];if(typeof re=="number")return re}return null}function ge(L){i=L}return E={get basename(){return o},get state(){return y},get routes(){return n},initialize:W,subscribe:Q,enableScrollRestoration:af,navigate:st,fetch:$r,revalidate:Fe,createHref:L=>e.history.createHref(L),encodeLocation:L=>e.history.encodeLocation(L),getFetcher:Nr,deleteFetcher:Gs,dispose:le,getBlocker:Dt,deleteBlocker:Et,_internalFetchControllers:$,_internalActiveDeferreds:Te,_internalSetRoutes:ge},E}function tP(e){return e!=null&&"formData"in e}function op(e,t,r,n,i,o,a){let c,d;if(o!=null&&a!=="path"){c=[];for(let g of t)if(c.push(g),g.route.id===o){d=g;break}}else c=t,d=t[t.length-1];let h=H0(i||".",ad(c).map(g=>g.pathnameBase),Is(e.pathname,r)||e.pathname,a==="path");return i==null&&(h.search=e.search,h.hash=e.hash),(i==null||i===""||i===".")&&d&&d.route.index&&!F0(h.search)&&(h.search=h.search?h.search.replace(/^\?/,"?index&"):"?index"),n&&r!=="/"&&(h.pathname=h.pathname==="/"?r:Un([r,h.pathname])),go(h)}function Fy(e,t,r,n){if(!n||!tP(n))return{path:r};if(n.formMethod&&!lP(n.formMethod))return{path:r,error:Vr(405,{method:n.formMethod})};let i;if(n.formData){let c=n.formMethod||"get";if(i={formMethod:e?c.toUpperCase():c.toLowerCase(),formAction:cx(r),formEncType:n&&n.formEncType||"application/x-www-form-urlencoded",formData:n.formData},In(i.formMethod))return{path:r,submission:i}}let o=pn(r),a=lx(n.formData);return t&&o.search&&F0(o.search)&&a.append("index",""),o.search="?"+a,{path:go(o),submission:i}}function rP(e,t){let r=e;if(t){let n=e.findIndex(i=>i.route.id===t);n>=0&&(r=e.slice(0,n))}return r}function Vy(e,t,r,n,i,o,a,c,d,h,g,v,x){let b=x?Object.values(x)[0]:v?Object.values(v)[0]:void 0,k=e.createURL(t.location),C=e.createURL(i),E=x?Object.keys(x)[0]:void 0,w=rP(r,E).filter((T,O)=>{if(T.route.lazy)return!0;if(T.route.loader==null)return!1;if(nP(t.loaderData,t.matches[O],T)||a.some(R=>R===T.route.id))return!0;let P=t.matches[O],M=T;return Wy(T,Re({currentUrl:k,currentParams:P.params,nextUrl:C,nextParams:M.params},n,{actionResult:b,defaultShouldRevalidate:o||k.pathname+k.search===C.pathname+C.search||k.search!==C.search||ax(P,M)}))}),S=[];return d.forEach((T,O)=>{if(!r.some($=>$.route.id===T.routeId))return;let P=ts(h,T.path,g);if(!P){S.push({key:O,routeId:T.routeId,path:T.path,matches:null,match:null,controller:null});return}let M=sp(P,T.path);if(c.includes(O)){S.push({key:O,routeId:T.routeId,path:T.path,matches:P,match:M,controller:new AbortController});return}Wy(M,Re({currentUrl:k,currentParams:t.matches[t.matches.length-1].params,nextUrl:C,nextParams:r[r.length-1].params},n,{actionResult:b,defaultShouldRevalidate:o}))&&S.push({key:O,routeId:T.routeId,path:T.path,matches:P,match:M,controller:new AbortController})}),[w,S]}function nP(e,t,r){let n=!t||r.route.id!==t.route.id,i=e[r.route.id]===void 0;return n||i}function ax(e,t){let r=e.route.path;return e.pathname!==t.pathname||r!=null&&r.endsWith("*")&&e.params["*"]!==t.params["*"]}function Wy(e,t){if(e.route.shouldRevalidate){let r=e.route.shouldRevalidate(t);if(typeof r=="boolean")return r}return t.defaultShouldRevalidate}async function Uy(e,t,r){if(!e.lazy)return;let n=await e.lazy();if(!e.lazy)return;let i=r[e.id];be(i,"No route found in manifest");let o={};for(let a in n){let d=i[a]!==void 0&&a!=="hasErrorBoundary";po(!d,'Route "'+i.id+'" has a static property "'+a+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+a+'" will be ignored.')),!d&&!CO.has(a)&&(o[a]=n[a])}Object.assign(i,o),Object.assign(i,Re({},t(i),{lazy:void 0}))}async function ua(e,t,r,n,i,o,a,c,d,h){c===void 0&&(c=!1),d===void 0&&(d=!1);let g,v,x,b=E=>{let y,w=new Promise((S,T)=>y=T);return x=()=>y(),t.signal.addEventListener("abort",x),Promise.race([E({request:t,params:r.params,context:h}),w])};try{let E=r.route[e];if(r.route.lazy)if(E)v=(await Promise.all([b(E),Uy(r.route,o,i)]))[0];else if(await Uy(r.route,o,i),E=r.route[e],E)v=await b(E);else if(e==="action"){let y=new URL(t.url),w=y.pathname+y.search;throw Vr(405,{method:t.method,pathname:w,routeId:r.route.id})}else return{type:St.data,data:void 0};else if(E)v=await b(E);else{let y=new URL(t.url),w=y.pathname+y.search;throw Vr(404,{pathname:w})}be(v!==void 0,"You defined "+(e==="action"?"an action":"a loader")+" for route "+('"'+r.route.id+"\" but didn't return anything from your `"+e+"` ")+"function. Please return a value or `null`.")}catch(E){g=St.error,v=E}finally{x&&t.signal.removeEventListener("abort",x)}if(aP(v)){let E=v.status;if(KO.has(E)){let S=v.headers.get("Location");if(be(S,"Redirects returned/thrown from loaders/actions must have a Location header"),!ox.test(S))S=op(new URL(t.url),n.slice(0,n.indexOf(r)+1),a,!0,S);else if(!c){let T=new URL(t.url),O=S.startsWith("//")?new URL(T.protocol+S):new URL(S),P=Is(O.pathname,a)!=null;O.origin===T.origin&&P&&(S=O.pathname+O.search+O.hash)}if(c)throw v.headers.set("Location",S),v;return{type:St.redirect,status:E,location:S,revalidate:v.headers.get("X-Remix-Revalidate")!==null}}if(d)throw{type:g||St.data,response:v};let y,w=v.headers.get("Content-Type");return w&&/\bapplication\/json\b/.test(w)?y=await v.json():y=await v.text(),g===St.error?{type:g,error:new Y0(E,v.statusText,y),headers:v.headers}:{type:St.data,data:y,statusCode:v.status,headers:v.headers}}if(g===St.error)return{type:g,error:v};if(sP(v)){var k,C;return{type:St.deferred,deferredData:v,statusCode:(k=v.init)==null?void 0:k.status,headers:((C=v.init)==null?void 0:C.headers)&&new Headers(v.init.headers)}}return{type:St.data,data:v}}function da(e,t,r,n){let i=e.createURL(cx(t)).toString(),o={signal:r};if(n&&In(n.formMethod)){let{formMethod:a,formEncType:c,formData:d}=n;o.method=a.toUpperCase(),o.body=c==="application/x-www-form-urlencoded"?lx(d):d}return new Request(i,o)}function lx(e){let t=new URLSearchParams;for(let[r,n]of e.entries())t.append(r,n instanceof File?n.name:n);return t}function iP(e,t,r,n,i){let o={},a=null,c,d=!1,h={};return r.forEach((g,v)=>{let x=t[v].route.id;if(be(!ds(g),"Cannot handle redirect results in processLoaderData"),Oa(g)){let b=rs(e,x),k=g.error;n&&(k=Object.values(n)[0],n=void 0),a=a||{},a[b.route.id]==null&&(a[b.route.id]=k),o[x]=void 0,d||(d=!0,c=nx(g.error)?g.error.status:500),g.headers&&(h[x]=g.headers)}else to(g)?(i.set(x,g.deferredData),o[x]=g.deferredData.data):o[x]=g.data,g.statusCode!=null&&g.statusCode!==200&&!d&&(c=g.statusCode),g.headers&&(h[x]=g.headers)}),n&&(a=n,o[Object.keys(n)[0]]=void 0),{loaderData:o,errors:a,statusCode:c||200,loaderHeaders:h}}function By(e,t,r,n,i,o,a,c){let{loaderData:d,errors:h}=iP(t,r,n,i,c);for(let g=0;gn.route.id===t)+1):[...e]).reverse().find(n=>n.route.hasErrorBoundary===!0)||e[0]}function Xy(e){let t=e.find(r=>r.index||!r.path||r.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:t}],route:t}}function Vr(e,t){let{pathname:r,routeId:n,method:i,type:o}=t===void 0?{}:t,a="Unknown Server Error",c="Unknown @remix-run/router error";return e===400?(a="Bad Request",i&&r&&n?c="You made a "+i+' request to "'+r+'" but '+('did not provide a `loader` for route "'+n+'", ')+"so there is no way to handle the request.":o==="defer-action"&&(c="defer() is not supported in actions")):e===403?(a="Forbidden",c='Route "'+n+'" does not match URL "'+r+'"'):e===404?(a="Not Found",c='No route matches URL "'+r+'"'):e===405&&(a="Method Not Allowed",i&&r&&n?c="You made a "+i.toUpperCase()+' request to "'+r+'" but '+('did not provide an `action` for route "'+n+'", ')+"so there is no way to handle the request.":i&&(c='Invalid request method "'+i.toUpperCase()+'"')),new Y0(e||500,a,new Error(c),!0)}function Ky(e){for(let t=e.length-1;t>=0;t--){let r=e[t];if(ds(r))return r}}function cx(e){let t=typeof e=="string"?pn(e):e;return go(Re({},t,{hash:""}))}function oP(e,t){return e.pathname!==t.pathname||e.search!==t.search?!1:e.hash===""?t.hash!=="":e.hash===t.hash?!0:t.hash!==""}function to(e){return e.type===St.deferred}function Oa(e){return e.type===St.error}function ds(e){return(e&&e.type)===St.redirect}function sP(e){let t=e;return t&&typeof t=="object"&&typeof t.data=="object"&&typeof t.subscribe=="function"&&typeof t.cancel=="function"&&typeof t.resolveData=="function"}function aP(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.headers=="object"&&typeof e.body<"u"}function lP(e){return XO.has(e.toLowerCase())}function In(e){return BO.has(e.toLowerCase())}async function Qy(e,t,r,n,i,o){for(let a=0;av.route.id===d.route.id),g=h!=null&&!ax(h,d)&&(o&&o[d.route.id])!==void 0;if(to(c)&&(i||g)){let v=n[a];be(v,"Expected an AbortSignal for revalidating fetcher deferred result"),await ux(c,v,i).then(x=>{x&&(r[a]=x||r[a])})}}}async function ux(e,t,r){if(r===void 0&&(r=!1),!await e.deferredData.resolveData(t)){if(r)try{return{type:St.data,data:e.deferredData.unwrappedData}}catch(i){return{type:St.error,error:i}}return{type:St.data,data:e.deferredData.data}}}function F0(e){return new URLSearchParams(e).getAll("index").some(t=>t==="")}function qy(e,t){let{route:r,pathname:n,params:i}=e;return{id:r.id,pathname:n,params:i,data:t[r.id],handle:r.handle}}function sp(e,t){let r=typeof t=="string"?pn(t).search:t.search;if(e[e.length-1].route.index&&F0(r||""))return e[e.length-1];let n=ad(e);return n[n.length-1]}/** * React Router v6.11.1 * * Copyright (c) Remix Software Inc. @@ -55,7 +55,7 @@ Error generating stack: `+o.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function wu(){return wu=Object.assign?Object.assign.bind():function(e){for(var t=1;tc.pathnameBase)),o=N.useRef(!1);return hx(()=>{o.current=!0}),N.useCallback(function(c,d){if(d===void 0&&(d={}),!o.current)return;if(typeof c=="number"){t.go(c);return}let h=Y0(c,JSON.parse(i),n,d.relative==="path");e!=="/"&&(h.pathname=h.pathname==="/"?e:Un([e,h.pathname])),(d.replace?t.replace:t.push)(h,d.state,d)},[e,t,i,n])}const dP=N.createContext(null);function fP(e){let t=N.useContext(ei).outlet;return t&&N.createElement(dP.Provider,{value:e},t)}function gn(){let{matches:e}=N.useContext(ei),t=e[e.length-1];return t?t.params:{}}function mx(e,t){let{relative:r}=t===void 0?{}:t,{matches:n}=N.useContext(ei),{pathname:i}=ti(),o=JSON.stringify(ad(n).map(a=>a.pathnameBase));return N.useMemo(()=>Y0(e,JSON.parse(o),i,r==="path"),[e,o,i,r])}function hP(e,t,r){yl()||be(!1);let{navigator:n}=N.useContext(Ns),{matches:i}=N.useContext(ei),o=i[i.length-1],a=o?o.params:{};o&&o.pathname;let c=o?o.pathnameBase:"/";o&&o.route;let d=ti(),h;if(t){var g;let C=typeof t=="string"?pn(t):t;c==="/"||(g=C.pathname)!=null&&g.startsWith(c)||be(!1),h=C}else h=d;let v=h.pathname||"/",x=c==="/"?v:v.slice(c.length)||"/",b=ts(e,{pathname:x}),k=yP(b&&b.map(C=>Object.assign({},C,{params:Object.assign({},a,C.params),pathname:Un([c,n.encodeLocation?n.encodeLocation(C.pathname).pathname:C.pathname]),pathnameBase:C.pathnameBase==="/"?c:Un([c,n.encodeLocation?n.encodeLocation(C.pathnameBase).pathname:C.pathnameBase])})),i,r);return t&&k?N.createElement(ld.Provider,{value:{location:wu({pathname:"/",search:"",hash:"",state:null,key:"default"},h),navigationType:gt.Pop}},k):k}function mP(){let e=SP(),t=nx(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,i={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"},o=null;return N.createElement(N.Fragment,null,N.createElement("h2",null,"Unexpected Application Error!"),N.createElement("h3",{style:{fontStyle:"italic"}},t),r?N.createElement("pre",{style:i},r):null,o)}const pP=N.createElement(mP,null);class gP extends N.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error||r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error?N.createElement(ei.Provider,{value:this.props.routeContext},N.createElement(fx.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function vP(e){let{routeContext:t,match:r,children:n}=e,i=N.useContext(V0);return i&&i.static&&i.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=r.route.id),N.createElement(ei.Provider,{value:t},n)}function yP(e,t,r){var n;if(t===void 0&&(t=[]),r===void 0&&(r=null),e==null){var i;if((i=r)!=null&&i.errors)e=r.matches;else return null}let o=e,a=(n=r)==null?void 0:n.errors;if(a!=null){let c=o.findIndex(d=>d.route.id&&(a==null?void 0:a[d.route.id]));c>=0||be(!1),o=o.slice(0,Math.min(o.length,c+1))}return o.reduceRight((c,d,h)=>{let g=d.route.id?a==null?void 0:a[d.route.id]:null,v=null;r&&(v=d.route.errorElement||pP);let x=t.concat(o.slice(0,h+1)),b=()=>{let k;return g?k=v:d.route.Component?k=N.createElement(d.route.Component,null):d.route.element?k=d.route.element:k=c,N.createElement(vP,{match:d,routeContext:{outlet:c,matches:x,isDataRoute:r!=null},children:k})};return r&&(d.route.ErrorBoundary||d.route.errorElement||h===0)?N.createElement(gP,{location:r.location,revalidation:r.revalidation,component:v,error:g,children:b(),routeContext:{outlet:null,matches:x,isDataRoute:!0}}):b()},null)}var ap;(function(e){e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate"})(ap||(ap={}));var tl;(function(e){e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId"})(tl||(tl={}));function wP(e){let t=N.useContext(V0);return t||be(!1),t}function _P(e){let t=N.useContext(dx);return t||be(!1),t}function xP(e){let t=N.useContext(ei);return t||be(!1),t}function px(e){let t=xP(),r=t.matches[t.matches.length-1];return r.route.id||be(!1),r.route.id}function SP(){var e;let t=N.useContext(fx),r=_P(tl.UseRouteError),n=px(tl.UseRouteError);return t||((e=r.errors)==null?void 0:e[n])}function bP(){let{router:e}=wP(ap.UseNavigateStable),t=px(tl.UseNavigateStable),r=N.useRef(!1);return hx(()=>{r.current=!0}),N.useCallback(function(i,o){o===void 0&&(o={}),r.current&&(typeof i=="number"?e.navigate(i):e.navigate(i,wu({fromRouteId:t},o)))},[e,t])}function kP(e){let{fallbackElement:t,router:r}=e,[n,i]=N.useState(r.state);N.useLayoutEffect(()=>r.subscribe(i),[r,i]);let o=N.useMemo(()=>({createHref:r.createHref,encodeLocation:r.encodeLocation,go:d=>r.navigate(d),push:(d,h,g)=>r.navigate(d,{state:h,preventScrollReset:g==null?void 0:g.preventScrollReset}),replace:(d,h,g)=>r.navigate(d,{replace:!0,state:h,preventScrollReset:g==null?void 0:g.preventScrollReset})}),[r]),a=r.basename||"/",c=N.useMemo(()=>({router:r,navigator:o,static:!1,basename:a}),[r,o,a]);return N.createElement(N.Fragment,null,N.createElement(V0.Provider,{value:c},N.createElement(dx.Provider,{value:n},N.createElement(EP,{basename:r.basename,location:r.state.location,navigationType:r.state.historyAction,navigator:o},r.state.initialized?N.createElement(CP,{routes:r.routes,state:n}):t))),null)}function CP(e){let{routes:t,state:r}=e;return hP(t,void 0,r)}function DP(e){return fP(e.context)}function EP(e){let{basename:t="/",children:r=null,location:n,navigationType:i=gt.Pop,navigator:o,static:a=!1}=e;yl()&&be(!1);let c=t.replace(/^\/*/,"/"),d=N.useMemo(()=>({basename:c,navigator:o,static:a}),[c,o,a]);typeof n=="string"&&(n=pn(n));let{pathname:h="/",search:g="",hash:v="",state:x=null,key:b="default"}=n,k=N.useMemo(()=>{let C=Is(h,c);return C==null?null:{location:{pathname:C,search:g,hash:v,state:x,key:b},navigationType:i}},[c,h,g,v,x,b,i]);return k==null?null:N.createElement(Ns.Provider,{value:d},N.createElement(ld.Provider,{children:r,value:k}))}var Zy;(function(e){e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error"})(Zy||(Zy={}));new Promise(()=>{});function jP(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:N.createElement(e.Component),Component:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:N.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}/** + */function wu(){return wu=Object.assign?Object.assign.bind():function(e){for(var t=1;tc.pathnameBase)),o=N.useRef(!1);return hx(()=>{o.current=!0}),N.useCallback(function(c,d){if(d===void 0&&(d={}),!o.current)return;if(typeof c=="number"){t.go(c);return}let h=H0(c,JSON.parse(i),n,d.relative==="path");e!=="/"&&(h.pathname=h.pathname==="/"?e:Un([e,h.pathname])),(d.replace?t.replace:t.push)(h,d.state,d)},[e,t,i,n])}const dP=N.createContext(null);function fP(e){let t=N.useContext(ei).outlet;return t&&N.createElement(dP.Provider,{value:e},t)}function gn(){let{matches:e}=N.useContext(ei),t=e[e.length-1];return t?t.params:{}}function mx(e,t){let{relative:r}=t===void 0?{}:t,{matches:n}=N.useContext(ei),{pathname:i}=ti(),o=JSON.stringify(ad(n).map(a=>a.pathnameBase));return N.useMemo(()=>H0(e,JSON.parse(o),i,r==="path"),[e,o,i,r])}function hP(e,t,r){yl()||be(!1);let{navigator:n}=N.useContext(Ns),{matches:i}=N.useContext(ei),o=i[i.length-1],a=o?o.params:{};o&&o.pathname;let c=o?o.pathnameBase:"/";o&&o.route;let d=ti(),h;if(t){var g;let C=typeof t=="string"?pn(t):t;c==="/"||(g=C.pathname)!=null&&g.startsWith(c)||be(!1),h=C}else h=d;let v=h.pathname||"/",x=c==="/"?v:v.slice(c.length)||"/",b=ts(e,{pathname:x}),k=yP(b&&b.map(C=>Object.assign({},C,{params:Object.assign({},a,C.params),pathname:Un([c,n.encodeLocation?n.encodeLocation(C.pathname).pathname:C.pathname]),pathnameBase:C.pathnameBase==="/"?c:Un([c,n.encodeLocation?n.encodeLocation(C.pathnameBase).pathname:C.pathnameBase])})),i,r);return t&&k?N.createElement(ld.Provider,{value:{location:wu({pathname:"/",search:"",hash:"",state:null,key:"default"},h),navigationType:gt.Pop}},k):k}function mP(){let e=SP(),t=nx(e)?e.status+" "+e.statusText:e instanceof Error?e.message:JSON.stringify(e),r=e instanceof Error?e.stack:null,i={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"},o=null;return N.createElement(N.Fragment,null,N.createElement("h2",null,"Unexpected Application Error!"),N.createElement("h3",{style:{fontStyle:"italic"}},t),r?N.createElement("pre",{style:i},r):null,o)}const pP=N.createElement(mP,null);class gP extends N.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,r){return r.location!==t.location||r.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error||r.error,location:r.location,revalidation:t.revalidation||r.revalidation}}componentDidCatch(t,r){console.error("React Router caught the following error during render",t,r)}render(){return this.state.error?N.createElement(ei.Provider,{value:this.props.routeContext},N.createElement(fx.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function vP(e){let{routeContext:t,match:r,children:n}=e,i=N.useContext(V0);return i&&i.static&&i.staticContext&&(r.route.errorElement||r.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=r.route.id),N.createElement(ei.Provider,{value:t},n)}function yP(e,t,r){var n;if(t===void 0&&(t=[]),r===void 0&&(r=null),e==null){var i;if((i=r)!=null&&i.errors)e=r.matches;else return null}let o=e,a=(n=r)==null?void 0:n.errors;if(a!=null){let c=o.findIndex(d=>d.route.id&&(a==null?void 0:a[d.route.id]));c>=0||be(!1),o=o.slice(0,Math.min(o.length,c+1))}return o.reduceRight((c,d,h)=>{let g=d.route.id?a==null?void 0:a[d.route.id]:null,v=null;r&&(v=d.route.errorElement||pP);let x=t.concat(o.slice(0,h+1)),b=()=>{let k;return g?k=v:d.route.Component?k=N.createElement(d.route.Component,null):d.route.element?k=d.route.element:k=c,N.createElement(vP,{match:d,routeContext:{outlet:c,matches:x,isDataRoute:r!=null},children:k})};return r&&(d.route.ErrorBoundary||d.route.errorElement||h===0)?N.createElement(gP,{location:r.location,revalidation:r.revalidation,component:v,error:g,children:b(),routeContext:{outlet:null,matches:x,isDataRoute:!0}}):b()},null)}var ap;(function(e){e.UseBlocker="useBlocker",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate"})(ap||(ap={}));var tl;(function(e){e.UseBlocker="useBlocker",e.UseLoaderData="useLoaderData",e.UseActionData="useActionData",e.UseRouteError="useRouteError",e.UseNavigation="useNavigation",e.UseRouteLoaderData="useRouteLoaderData",e.UseMatches="useMatches",e.UseRevalidator="useRevalidator",e.UseNavigateStable="useNavigate",e.UseRouteId="useRouteId"})(tl||(tl={}));function wP(e){let t=N.useContext(V0);return t||be(!1),t}function _P(e){let t=N.useContext(dx);return t||be(!1),t}function xP(e){let t=N.useContext(ei);return t||be(!1),t}function px(e){let t=xP(),r=t.matches[t.matches.length-1];return r.route.id||be(!1),r.route.id}function SP(){var e;let t=N.useContext(fx),r=_P(tl.UseRouteError),n=px(tl.UseRouteError);return t||((e=r.errors)==null?void 0:e[n])}function bP(){let{router:e}=wP(ap.UseNavigateStable),t=px(tl.UseNavigateStable),r=N.useRef(!1);return hx(()=>{r.current=!0}),N.useCallback(function(i,o){o===void 0&&(o={}),r.current&&(typeof i=="number"?e.navigate(i):e.navigate(i,wu({fromRouteId:t},o)))},[e,t])}function kP(e){let{fallbackElement:t,router:r}=e,[n,i]=N.useState(r.state);N.useLayoutEffect(()=>r.subscribe(i),[r,i]);let o=N.useMemo(()=>({createHref:r.createHref,encodeLocation:r.encodeLocation,go:d=>r.navigate(d),push:(d,h,g)=>r.navigate(d,{state:h,preventScrollReset:g==null?void 0:g.preventScrollReset}),replace:(d,h,g)=>r.navigate(d,{replace:!0,state:h,preventScrollReset:g==null?void 0:g.preventScrollReset})}),[r]),a=r.basename||"/",c=N.useMemo(()=>({router:r,navigator:o,static:!1,basename:a}),[r,o,a]);return N.createElement(N.Fragment,null,N.createElement(V0.Provider,{value:c},N.createElement(dx.Provider,{value:n},N.createElement(EP,{basename:r.basename,location:r.state.location,navigationType:r.state.historyAction,navigator:o},r.state.initialized?N.createElement(CP,{routes:r.routes,state:n}):t))),null)}function CP(e){let{routes:t,state:r}=e;return hP(t,void 0,r)}function DP(e){return fP(e.context)}function EP(e){let{basename:t="/",children:r=null,location:n,navigationType:i=gt.Pop,navigator:o,static:a=!1}=e;yl()&&be(!1);let c=t.replace(/^\/*/,"/"),d=N.useMemo(()=>({basename:c,navigator:o,static:a}),[c,o,a]);typeof n=="string"&&(n=pn(n));let{pathname:h="/",search:g="",hash:v="",state:x=null,key:b="default"}=n,k=N.useMemo(()=>{let C=Is(h,c);return C==null?null:{location:{pathname:C,search:g,hash:v,state:x,key:b},navigationType:i}},[c,h,g,v,x,b,i]);return k==null?null:N.createElement(Ns.Provider,{value:d},N.createElement(ld.Provider,{children:r,value:k}))}var Zy;(function(e){e[e.pending=0]="pending",e[e.success=1]="success",e[e.error=2]="error"})(Zy||(Zy={}));new Promise(()=>{});function TP(e){let t={hasErrorBoundary:e.ErrorBoundary!=null||e.errorElement!=null};return e.Component&&Object.assign(t,{element:N.createElement(e.Component),Component:void 0}),e.ErrorBoundary&&Object.assign(t,{errorElement:N.createElement(e.ErrorBoundary),ErrorBoundary:void 0}),t}/** * React Router DOM v6.11.1 * * Copyright (c) Remix Software Inc. @@ -64,10 +64,10 @@ Error generating stack: `+o.message+` * LICENSE.md file in the root directory of this source tree. * * @license MIT - */function rl(){return rl=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&(r[i]=e[i]);return r}function OP(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function PP(e,t){return e.button===0&&(!t||t==="_self")&&!OP(e)}const RP=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset"];function MP(e,t){return eP({basename:t==null?void 0:t.basename,future:rl({},t==null?void 0:t.future,{v7_prependBasename:!0}),history:SO({window:t==null?void 0:t.window}),hydrationData:(t==null?void 0:t.hydrationData)||LP(),routes:e,mapRouteProperties:jP}).initialize()}function LP(){var e;let t=(e=window)==null?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=rl({},t,{errors:AP(t.errors)})),t}function AP(e){if(!e)return null;let t=Object.entries(e),r={};for(let[n,i]of t)if(i&&i.__type==="RouteErrorResponse")r[n]=new H0(i.status,i.statusText,i.data,i.internal===!0);else if(i&&i.__type==="Error"){let o=new Error(i.message);o.stack="",r[n]=o}else r[n]=i;return r}const IP=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",NP=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,lc=N.forwardRef(function(t,r){let{onClick:n,relative:i,reloadDocument:o,replace:a,state:c,target:d,to:h,preventScrollReset:g}=t,v=TP(t,RP),{basename:x}=N.useContext(Ns),b,k=!1;if(typeof h=="string"&&NP.test(h)&&(b=h,IP))try{let w=new URL(window.location.href),S=h.startsWith("//")?new URL(w.protocol+h):new URL(h),j=Is(S.pathname,x);S.origin===w.origin&&j!=null?h=j+S.search+S.hash:k=!0}catch{}let C=cP(h,{relative:i}),E=$P(h,{replace:a,state:c,target:d,preventScrollReset:g,relative:i});function y(w){n&&n(w),w.defaultPrevented||E(w)}return N.createElement("a",rl({},v,{href:b||C,onClick:k||o?n:y,ref:r,target:d}))});var Jy;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmitImpl="useSubmitImpl",e.UseFetcher="useFetcher"})(Jy||(Jy={}));var e1;(function(e){e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(e1||(e1={}));function $P(e,t){let{target:r,replace:n,state:i,preventScrollReset:o,relative:a}=t===void 0?{}:t,c=wt(),d=ti(),h=mx(e,{relative:a});return N.useCallback(g=>{if(PP(g,r)){g.preventDefault();let v=n!==void 0?n:go(d)===go(h);c(e,{replace:v,state:i,preventScrollReset:o,relative:a})}},[d,c,h,n,i,r,e,o,a])}var Rt=function(){return Rt=Object.assign||function(t){for(var r,n=1,i=arguments.length;n0?Ot($s,--Mr):0,Ds--,vt===10&&(Ds=1,ud--),vt}function Qr(){return vt=Mr2||lp(vt)>3?"":" "}function QP(e,t){for(;--t&&Qr()&&!(vt<48||vt>102||vt>57&&vt<65||vt>70&&vt<97););return fd(e,zc()+(t<6&&so()==32&&Qr()==32))}function cp(e){for(;Qr();)switch(vt){case e:return Mr;case 34:case 39:e!==34&&e!==39&&cp(vt);break;case 40:e===41&&cp(e);break;case 92:Qr();break}return Mr}function qP(e,t){for(;Qr()&&e+vt!==47+10;)if(e+vt===42+42&&so()===47)break;return"/*"+fd(t,Mr-1)+"*"+U0(e===47?e:Qr())}function ZP(e){for(;!lp(so());)Qr();return fd(e,Mr)}function JP(e){return XP(Yc("",null,null,null,[""],e=GP(e),0,[0],e))}function Yc(e,t,r,n,i,o,a,c,d){for(var h=0,g=0,v=a,x=0,b=0,k=0,C=1,E=1,y=1,w=0,S="",j=i,O=o,P=n,M=S;E;)switch(k=w,w=Qr()){case 40:if(k!=108&&Ot(M,v-1)==58){$c(M+=ye(Jf(w),"&","&\f"),"&\f")!=-1&&(y=-1);break}case 34:case 39:case 91:M+=Jf(w);break;case 9:case 10:case 13:case 32:M+=KP(k);break;case 92:M+=QP(zc()-1,7);continue;case 47:switch(so()){case 42:case 47:cc(eR(qP(Qr(),zc()),t,r),d);break;default:M+="/"}break;case 123*C:c[h++]=zn(M)*y;case 125*C:case 59:case 0:switch(w){case 0:case 125:E=0;case 59+g:y==-1&&(M=ye(M,/\f/g,"")),b>0&&zn(M)-v&&cc(b>32?r1(M+";",n,r,v-1):r1(ye(M," ","")+";",n,r,v-2),d);break;case 59:M+=";";default:if(cc(P=t1(M,t,r,h,g,i,c,S,j=[],O=[],v),o),w===123)if(g===0)Yc(M,t,P,P,j,o,v,c,O);else switch(x===99&&Ot(M,3)===110?100:x){case 100:case 108:case 109:case 115:Yc(e,P,P,n&&cc(t1(e,P,P,0,0,i,c,S,i,j=[],v),O),i,O,v,c,n?j:O);break;default:Yc(M,P,P,P,[""],O,0,c,O)}}h=g=b=0,C=y=1,S=M="",v=a;break;case 58:v=1+zn(M),b=k;default:if(C<1){if(w==123)--C;else if(w==125&&C++==0&&BP()==125)continue}switch(M+=U0(w),w*C){case 38:y=g>0?1:(M+="\f",-1);break;case 44:c[h++]=(zn(M)-1)*y,y=1;break;case 64:so()===45&&(M+=Jf(Qr())),x=so(),g=v=zn(S=M+=ZP(zc())),w++;break;case 45:k===45&&zn(M)==2&&(C=0)}}return o}function t1(e,t,r,n,i,o,a,c,d,h,g){for(var v=i-1,x=i===0?o:[""],b=B0(x),k=0,C=0,E=0;k0?x[y]+" "+w:ye(w,/&\f/g,x[y])))&&(d[E++]=S);return dd(e,t,r,i===0?cd:c,d,h,g)}function eR(e,t,r){return dd(e,t,r,gx,U0(UP()),Cs(e,2,-2),0)}function r1(e,t,r,n){return dd(e,t,r,W0,Cs(e,0,n),Cs(e,n+1,-1),n)}function _x(e,t,r){switch(VP(e,t)){case 5103:return Le+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Le+e+e;case 4789:return Pa+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return Le+e+Pa+e+Be+e+e;case 5936:switch(Ot(e,t+11)){case 114:return Le+e+Be+ye(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Le+e+Be+ye(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Le+e+Be+ye(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return Le+e+Be+e+e;case 6165:return Le+e+Be+"flex-"+e+e;case 5187:return Le+e+ye(e,/(\w+).+(:[^]+)/,Le+"box-$1$2"+Be+"flex-$1$2")+e;case 5443:return Le+e+Be+"flex-item-"+ye(e,/flex-|-self/g,"")+(mi(e,/flex-|baseline/)?"":Be+"grid-row-"+ye(e,/flex-|-self/g,""))+e;case 4675:return Le+e+Be+"flex-line-pack"+ye(e,/align-content|flex-|-self/g,"")+e;case 5548:return Le+e+Be+ye(e,"shrink","negative")+e;case 5292:return Le+e+Be+ye(e,"basis","preferred-size")+e;case 6060:return Le+"box-"+ye(e,"-grow","")+Le+e+Be+ye(e,"grow","positive")+e;case 4554:return Le+ye(e,/([^-])(transform)/g,"$1"+Le+"$2")+e;case 6187:return ye(ye(ye(e,/(zoom-|grab)/,Le+"$1"),/(image-set)/,Le+"$1"),e,"")+e;case 5495:case 3959:return ye(e,/(image-set\([^]*)/,Le+"$1$`$1");case 4968:return ye(ye(e,/(.+:)(flex-)?(.*)/,Le+"box-pack:$3"+Be+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Le+e+e;case 4200:if(!mi(e,/flex-|baseline/))return Be+"grid-column-align"+Cs(e,t)+e;break;case 2592:case 3360:return Be+ye(e,"template-","")+e;case 4384:case 3616:return r&&r.some(function(n,i){return t=i,mi(n.props,/grid-\w+-end/)})?~$c(e+(r=r[t].value),"span")?e:Be+ye(e,"-start","")+e+Be+"grid-row-span:"+(~$c(r,"span")?mi(r,/\d+/):+mi(r,/\d+/)-+mi(e,/\d+/))+";":Be+ye(e,"-start","")+e;case 4896:case 4128:return r&&r.some(function(n){return mi(n.props,/grid-\w+-start/)})?e:Be+ye(ye(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return ye(e,/(.+)-inline(.+)/,Le+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(zn(e)-1-t>6)switch(Ot(e,t+1)){case 109:if(Ot(e,t+4)!==45)break;case 102:return ye(e,/(.+:)(.+)-([^]+)/,"$1"+Le+"$2-$3$1"+Pa+(Ot(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~$c(e,"stretch")?_x(ye(e,"stretch","fill-available"),t,r)+e:e}break;case 5152:case 5920:return ye(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(n,i,o,a,c,d,h){return Be+i+":"+o+h+(a?Be+i+"-span:"+(c?d:+d-+o)+h:"")+e});case 4949:if(Ot(e,t+6)===121)return ye(e,":",":"+Le)+e;break;case 6444:switch(Ot(e,Ot(e,14)===45?18:11)){case 120:return ye(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+Le+(Ot(e,14)===45?"inline-":"")+"box$3$1"+Le+"$2$3$1"+Be+"$2box$3")+e;case 100:return ye(e,":",":"+Be)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return ye(e,"scroll-","scroll-snap-")+e}return e}function Ra(e,t){for(var r="",n=B0(e),i=0;i-1&&!e.return)switch(e.type){case W0:e.return=_x(e.value,e.length,r);return;case vx:return Ra([fa(e,{value:ye(e.value,"@","@"+Le)})],n);case cd:if(e.length)return WP(e.props,function(i){switch(mi(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Ra([fa(e,{props:[ye(i,/:(read-\w+)/,":"+Pa+"$1")]})],n);case"::placeholder":return Ra([fa(e,{props:[ye(i,/:(plac\w+)/,":"+Le+"input-$1")]}),fa(e,{props:[ye(i,/:(plac\w+)/,":"+Pa+"$1")]}),fa(e,{props:[ye(i,/:(plac\w+)/,Be+"input-$1")]})],n)}return""})}}var iR={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},Es=typeof process<"u"&&process.env!==void 0&&({}.REACT_APP_SC_ATTR||{}.SC_ATTR)||"data-styled",G0=typeof window<"u"&&"HTMLElement"in window,oR=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process<"u"&&process.env!==void 0&&{}.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&{}.REACT_APP_SC_DISABLE_SPEEDY!==""?{}.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&{}.REACT_APP_SC_DISABLE_SPEEDY:typeof process<"u"&&process.env!==void 0&&{}.SC_DISABLE_SPEEDY!==void 0&&{}.SC_DISABLE_SPEEDY!==""&&{}.SC_DISABLE_SPEEDY!=="false"&&{}.SC_DISABLE_SPEEDY),sR={},X0=Object.freeze([]),vo=Object.freeze({});function xx(e,t,r){return r===void 0&&(r=vo),e.theme!==r.theme&&e.theme||t||r.theme}var Sx=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),aR=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,lR=/(^-|-$)/g;function n1(e){return e.replace(aR,"-").replace(lR,"")}var cR=/(a)(d)/gi,i1=function(e){return String.fromCharCode(e+(e>25?39:97))};function up(e){var t,r="";for(t=Math.abs(e);t>52;t=t/52|0)r=i1(t%52)+r;return(i1(t%52)+r).replace(cR,"$1-$2")}var eh,ns=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},bx=function(e){return ns(5381,e)};function kx(e){return up(bx(e)>>>0)}function uR(e){return e.displayName||e.name||"Component"}function th(e){return typeof e=="string"&&!0}var Cx=typeof Symbol=="function"&&Symbol.for,Dx=Cx?Symbol.for("react.memo"):60115,dR=Cx?Symbol.for("react.forward_ref"):60112,fR={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},hR={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Ex={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},mR=((eh={})[dR]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},eh[Dx]=Ex,eh);function o1(e){return("type"in(t=e)&&t.type.$$typeof)===Dx?Ex:"$$typeof"in e?mR[e.$$typeof]:fR;var t}var pR=Object.defineProperty,gR=Object.getOwnPropertyNames,s1=Object.getOwnPropertySymbols,vR=Object.getOwnPropertyDescriptor,yR=Object.getPrototypeOf,a1=Object.prototype;function jx(e,t,r){if(typeof t!="string"){if(a1){var n=yR(t);n&&n!==a1&&jx(e,n,r)}var i=gR(t);s1&&(i=i.concat(s1(t)));for(var o=o1(e),a=o1(t),c=0;c0?" Args: ".concat(t.join(", ")):""))}var wR=function(){function e(t){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=t}return e.prototype.indexOfGroup=function(t){for(var r=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,i=n.length,o=i;t>=o;)if((o<<=1)<0)throw wo(16,"".concat(t));this.groupSizes=new Uint32Array(o),this.groupSizes.set(n),this.length=o;for(var a=i;a=this.length||this.groupSizes[t]===0)return r;for(var n=this.groupSizes[t],i=this.indexOfGroup(t),o=i+n,a=i;a=0;h--){var g=d[h];if(g&&g.nodeType===1&&g.hasAttribute(Es))return g}}(r),o=i!==void 0?i.nextSibling:null;n.setAttribute(Es,"active"),n.setAttribute("data-styled-version","6.0.0-rc.1");var a=CR();return a&&n.setAttribute("nonce",a),r.insertBefore(n,o),n},DR=function(){function e(t){this.element=Tx(t),this.element.appendChild(document.createTextNode("")),this.sheet=function(r){if(r.sheet)return r.sheet;for(var n=document.styleSheets,i=0,o=n.length;i=0){var n=document.createTextNode(r);return this.element.insertBefore(n,this.nodes[t]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(t){this.element.removeChild(this.nodes[t]),this.length--},e.prototype.getRule=function(t){return t0&&(x+="".concat(b,","))}),i+="".concat(g).concat(v,'{content:"').concat(x,'"}').concat(`/*!sc*/ -`)},a=0;a0?".".concat(t):x},g=d.slice();a.prefix&&g.unshift(nR),g.push(function(x){x.type===cd&&x.value.includes("&")&&(x.props[0]=x.props[0].replace(OR,r).replace(n,h))},tR);var v=function(x,b,k,C){b===void 0&&(b=""),k===void 0&&(k=""),C===void 0&&(C="&"),t=C,r=b,n=new RegExp("\\".concat(r,"\\b"),"g");var E=x.replace(PR,""),y=JP(k||b?"".concat(k," ").concat(b," { ").concat(E," }"):E);return a.namespace&&(y=Ox(y,a.namespace)),function(w,S){for(var j=[],O=0,P=void 0;O="A"&&e<="Z"};function c1(e){for(var t="",r=0;r>>0);if(!r.hasNameForId(this.componentId,a)){var c=n(o,".".concat(a),void 0,this.componentId);r.insertRules(this.componentId,a,c)}i=ro(i,a),this.staticRulesId=a}else{for(var d=ns(this.baseHash,n.hash),h="",g=0;g>>0);r.hasNameForId(this.componentId,b)||r.insertRules(this.componentId,b,n(h,".".concat(b),void 0,this.componentId)),i=ro(i,b)}}return i},e}(),Q0=Pt.createContext(void 0);Q0.Consumer;function q0(){return N.useContext(Q0)}function $R(e){var t=q0(),r=N.useMemo(function(){return function(n,i){if(!n)throw wo(14);if(yo(n)){var o=n(i);return o}if(Array.isArray(n)||typeof n!="object")throw wo(8);return i?Rt(Rt({},i),n):n}(e.theme,t)},[e.theme,t]);return e.children?Pt.createElement(Q0.Provider,{value:r},e.children):null}var nh={};function zR(e,t,r){var n=K0(e),i=e,o=!th(e),a=t.attrs,c=a===void 0?X0:a,d=t.componentId,h=d===void 0?function(O,P){var M=typeof O!="string"?"sc":n1(O);nh[M]=(nh[M]||0)+1;var R="".concat(M,"-").concat(kx("6.0.0-rc.1"+M+nh[M]));return P?"".concat(P,"-").concat(R):R}(t.displayName,t.parentComponentId):d,g=t.displayName,v=g===void 0?function(O){return th(O)?"styled.".concat(O):"Styled(".concat(uR(O),")")}(e):g,x=t.displayName&&t.componentId?"".concat(n1(t.displayName),"-").concat(t.componentId):t.componentId||h,b=n&&i.attrs?i.attrs.concat(c).filter(Boolean):c,k=t.shouldForwardProp;if(n&&i.shouldForwardProp){var C=i.shouldForwardProp;if(t.shouldForwardProp){var E=t.shouldForwardProp;k=function(O,P){return C(O,P)&&E(O,P)}}else k=C}var y=new NR(r,x,n?i.componentStyle:void 0),w=y.isStatic&&c.length===0;function S(O,P){return function(M,R,$,z){var ee=M.attrs,te=M.componentStyle,G=M.defaultProps,lt=M.foldedComponentIds,je=M.styledComponentId,$e=M.target,ht=q0(),W=mp(),le=M.shouldForwardProp||W.shouldForwardProp,Q=function($t,tr,Nr){for(var $r,hr=Rt(Rt({},tr),{className:void 0,theme:Nr}),Vi=0;Vi<$t.length;Vi+=1){var Cr=yo($r=$t[Vi])?$r(hr):$r;for(var mr in Cr)hr[mr]=mr==="className"?ro(hr[mr],Cr[mr]):mr==="style"?Rt(Rt({},hr[mr]),Cr[mr]):Cr[mr]}return tr.className&&(hr.className=ro(hr.className,tr.className)),hr}(ee,R,xx(R,ht,G)||vo),ue=Q.as||$e,he={};for(var st in Q)Q[st]===void 0||st[0]==="$"||st==="as"||st==="theme"||(st==="forwardedAs"?he.as=Q.forwardedAs:le&&!le(st,ue)||(he[st]=Q[st]));var Fe=function($t,tr,Nr){var $r=mp(),hr=$t.generateAndInjectStyles(tr?vo:Nr,$r.styleSheet,$r.stylis);return hr}(te,z,Q),X=ro(lt,je);return Fe&&(X+=" "+Fe),Q.className&&(X+=" "+Q.className),he[th(ue)&&!Sx.has(ue)?"class":"className"]=X,he.ref=$,N.createElement(ue,he)}(j,O,P,w)}S.displayName=v;var j=Pt.forwardRef(S);return j.attrs=b,j.componentStyle=y,j.displayName=v,j.shouldForwardProp=k,j.foldedComponentIds=n?ro(i.foldedComponentIds,i.styledComponentId):"",j.styledComponentId=x,j.target=n?i.target:e,Object.defineProperty(j,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(O){this._foldedDefaultProps=n?function(P){for(var M=[],R=1;R2&&xu.registerId(this.componentId+t),this.removeStyles(t,n),this.createStyles(t,r,n,i)},e}();function HR(e){for(var t=[],r=1;r=0)&&(r[i]=e[i]);return r}function OP(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function PP(e,t){return e.button===0&&(!t||t==="_self")&&!OP(e)}const RP=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset"];function MP(e,t){return eP({basename:t==null?void 0:t.basename,future:rl({},t==null?void 0:t.future,{v7_prependBasename:!0}),history:SO({window:t==null?void 0:t.window}),hydrationData:(t==null?void 0:t.hydrationData)||LP(),routes:e,mapRouteProperties:TP}).initialize()}function LP(){var e;let t=(e=window)==null?void 0:e.__staticRouterHydrationData;return t&&t.errors&&(t=rl({},t,{errors:AP(t.errors)})),t}function AP(e){if(!e)return null;let t=Object.entries(e),r={};for(let[n,i]of t)if(i&&i.__type==="RouteErrorResponse")r[n]=new Y0(i.status,i.statusText,i.data,i.internal===!0);else if(i&&i.__type==="Error"){let o=new Error(i.message);o.stack="",r[n]=o}else r[n]=i;return r}const IP=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",NP=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,lc=N.forwardRef(function(t,r){let{onClick:n,relative:i,reloadDocument:o,replace:a,state:c,target:d,to:h,preventScrollReset:g}=t,v=jP(t,RP),{basename:x}=N.useContext(Ns),b,k=!1;if(typeof h=="string"&&NP.test(h)&&(b=h,IP))try{let w=new URL(window.location.href),S=h.startsWith("//")?new URL(w.protocol+h):new URL(h),T=Is(S.pathname,x);S.origin===w.origin&&T!=null?h=T+S.search+S.hash:k=!0}catch{}let C=cP(h,{relative:i}),E=$P(h,{replace:a,state:c,target:d,preventScrollReset:g,relative:i});function y(w){n&&n(w),w.defaultPrevented||E(w)}return N.createElement("a",rl({},v,{href:b||C,onClick:k||o?n:y,ref:r,target:d}))});var Jy;(function(e){e.UseScrollRestoration="useScrollRestoration",e.UseSubmitImpl="useSubmitImpl",e.UseFetcher="useFetcher"})(Jy||(Jy={}));var e1;(function(e){e.UseFetchers="useFetchers",e.UseScrollRestoration="useScrollRestoration"})(e1||(e1={}));function $P(e,t){let{target:r,replace:n,state:i,preventScrollReset:o,relative:a}=t===void 0?{}:t,c=wt(),d=ti(),h=mx(e,{relative:a});return N.useCallback(g=>{if(PP(g,r)){g.preventDefault();let v=n!==void 0?n:go(d)===go(h);c(e,{replace:v,state:i,preventScrollReset:o,relative:a})}},[d,c,h,n,i,r,e,o,a])}var Rt=function(){return Rt=Object.assign||function(t){for(var r,n=1,i=arguments.length;n0?Ot($s,--Mr):0,Ds--,vt===10&&(Ds=1,ud--),vt}function Qr(){return vt=Mr2||lp(vt)>3?"":" "}function QP(e,t){for(;--t&&Qr()&&!(vt<48||vt>102||vt>57&&vt<65||vt>70&&vt<97););return fd(e,zc()+(t<6&&so()==32&&Qr()==32))}function cp(e){for(;Qr();)switch(vt){case e:return Mr;case 34:case 39:e!==34&&e!==39&&cp(vt);break;case 40:e===41&&cp(e);break;case 92:Qr();break}return Mr}function qP(e,t){for(;Qr()&&e+vt!==47+10;)if(e+vt===42+42&&so()===47)break;return"/*"+fd(t,Mr-1)+"*"+U0(e===47?e:Qr())}function ZP(e){for(;!lp(so());)Qr();return fd(e,Mr)}function JP(e){return XP(Hc("",null,null,null,[""],e=GP(e),0,[0],e))}function Hc(e,t,r,n,i,o,a,c,d){for(var h=0,g=0,v=a,x=0,b=0,k=0,C=1,E=1,y=1,w=0,S="",T=i,O=o,P=n,M=S;E;)switch(k=w,w=Qr()){case 40:if(k!=108&&Ot(M,v-1)==58){$c(M+=ye(Jf(w),"&","&\f"),"&\f")!=-1&&(y=-1);break}case 34:case 39:case 91:M+=Jf(w);break;case 9:case 10:case 13:case 32:M+=KP(k);break;case 92:M+=QP(zc()-1,7);continue;case 47:switch(so()){case 42:case 47:cc(eR(qP(Qr(),zc()),t,r),d);break;default:M+="/"}break;case 123*C:c[h++]=zn(M)*y;case 125*C:case 59:case 0:switch(w){case 0:case 125:E=0;case 59+g:y==-1&&(M=ye(M,/\f/g,"")),b>0&&zn(M)-v&&cc(b>32?r1(M+";",n,r,v-1):r1(ye(M," ","")+";",n,r,v-2),d);break;case 59:M+=";";default:if(cc(P=t1(M,t,r,h,g,i,c,S,T=[],O=[],v),o),w===123)if(g===0)Hc(M,t,P,P,T,o,v,c,O);else switch(x===99&&Ot(M,3)===110?100:x){case 100:case 108:case 109:case 115:Hc(e,P,P,n&&cc(t1(e,P,P,0,0,i,c,S,i,T=[],v),O),i,O,v,c,n?T:O);break;default:Hc(M,P,P,P,[""],O,0,c,O)}}h=g=b=0,C=y=1,S=M="",v=a;break;case 58:v=1+zn(M),b=k;default:if(C<1){if(w==123)--C;else if(w==125&&C++==0&&BP()==125)continue}switch(M+=U0(w),w*C){case 38:y=g>0?1:(M+="\f",-1);break;case 44:c[h++]=(zn(M)-1)*y,y=1;break;case 64:so()===45&&(M+=Jf(Qr())),x=so(),g=v=zn(S=M+=ZP(zc())),w++;break;case 45:k===45&&zn(M)==2&&(C=0)}}return o}function t1(e,t,r,n,i,o,a,c,d,h,g){for(var v=i-1,x=i===0?o:[""],b=B0(x),k=0,C=0,E=0;k0?x[y]+" "+w:ye(w,/&\f/g,x[y])))&&(d[E++]=S);return dd(e,t,r,i===0?cd:c,d,h,g)}function eR(e,t,r){return dd(e,t,r,gx,U0(UP()),Cs(e,2,-2),0)}function r1(e,t,r,n){return dd(e,t,r,W0,Cs(e,0,n),Cs(e,n+1,-1),n)}function _x(e,t,r){switch(VP(e,t)){case 5103:return Le+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return Le+e+e;case 4789:return Pa+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return Le+e+Pa+e+Be+e+e;case 5936:switch(Ot(e,t+11)){case 114:return Le+e+Be+ye(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return Le+e+Be+ye(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return Le+e+Be+ye(e,/[svh]\w+-[tblr]{2}/,"lr")+e}case 6828:case 4268:case 2903:return Le+e+Be+e+e;case 6165:return Le+e+Be+"flex-"+e+e;case 5187:return Le+e+ye(e,/(\w+).+(:[^]+)/,Le+"box-$1$2"+Be+"flex-$1$2")+e;case 5443:return Le+e+Be+"flex-item-"+ye(e,/flex-|-self/g,"")+(mi(e,/flex-|baseline/)?"":Be+"grid-row-"+ye(e,/flex-|-self/g,""))+e;case 4675:return Le+e+Be+"flex-line-pack"+ye(e,/align-content|flex-|-self/g,"")+e;case 5548:return Le+e+Be+ye(e,"shrink","negative")+e;case 5292:return Le+e+Be+ye(e,"basis","preferred-size")+e;case 6060:return Le+"box-"+ye(e,"-grow","")+Le+e+Be+ye(e,"grow","positive")+e;case 4554:return Le+ye(e,/([^-])(transform)/g,"$1"+Le+"$2")+e;case 6187:return ye(ye(ye(e,/(zoom-|grab)/,Le+"$1"),/(image-set)/,Le+"$1"),e,"")+e;case 5495:case 3959:return ye(e,/(image-set\([^]*)/,Le+"$1$`$1");case 4968:return ye(ye(e,/(.+:)(flex-)?(.*)/,Le+"box-pack:$3"+Be+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+Le+e+e;case 4200:if(!mi(e,/flex-|baseline/))return Be+"grid-column-align"+Cs(e,t)+e;break;case 2592:case 3360:return Be+ye(e,"template-","")+e;case 4384:case 3616:return r&&r.some(function(n,i){return t=i,mi(n.props,/grid-\w+-end/)})?~$c(e+(r=r[t].value),"span")?e:Be+ye(e,"-start","")+e+Be+"grid-row-span:"+(~$c(r,"span")?mi(r,/\d+/):+mi(r,/\d+/)-+mi(e,/\d+/))+";":Be+ye(e,"-start","")+e;case 4896:case 4128:return r&&r.some(function(n){return mi(n.props,/grid-\w+-start/)})?e:Be+ye(ye(e,"-end","-span"),"span ","")+e;case 4095:case 3583:case 4068:case 2532:return ye(e,/(.+)-inline(.+)/,Le+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(zn(e)-1-t>6)switch(Ot(e,t+1)){case 109:if(Ot(e,t+4)!==45)break;case 102:return ye(e,/(.+:)(.+)-([^]+)/,"$1"+Le+"$2-$3$1"+Pa+(Ot(e,t+3)==108?"$3":"$2-$3"))+e;case 115:return~$c(e,"stretch")?_x(ye(e,"stretch","fill-available"),t,r)+e:e}break;case 5152:case 5920:return ye(e,/(.+?):(\d+)(\s*\/\s*(span)?\s*(\d+))?(.*)/,function(n,i,o,a,c,d,h){return Be+i+":"+o+h+(a?Be+i+"-span:"+(c?d:+d-+o)+h:"")+e});case 4949:if(Ot(e,t+6)===121)return ye(e,":",":"+Le)+e;break;case 6444:switch(Ot(e,Ot(e,14)===45?18:11)){case 120:return ye(e,/(.+:)([^;\s!]+)(;|(\s+)?!.+)?/,"$1"+Le+(Ot(e,14)===45?"inline-":"")+"box$3$1"+Le+"$2$3$1"+Be+"$2box$3")+e;case 100:return ye(e,":",":"+Be)+e}break;case 5719:case 2647:case 2135:case 3927:case 2391:return ye(e,"scroll-","scroll-snap-")+e}return e}function Ra(e,t){for(var r="",n=B0(e),i=0;i-1&&!e.return)switch(e.type){case W0:e.return=_x(e.value,e.length,r);return;case vx:return Ra([fa(e,{value:ye(e.value,"@","@"+Le)})],n);case cd:if(e.length)return WP(e.props,function(i){switch(mi(i,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return Ra([fa(e,{props:[ye(i,/:(read-\w+)/,":"+Pa+"$1")]})],n);case"::placeholder":return Ra([fa(e,{props:[ye(i,/:(plac\w+)/,":"+Le+"input-$1")]}),fa(e,{props:[ye(i,/:(plac\w+)/,":"+Pa+"$1")]}),fa(e,{props:[ye(i,/:(plac\w+)/,Be+"input-$1")]})],n)}return""})}}var iR={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},Es=typeof process<"u"&&process.env!==void 0&&({}.REACT_APP_SC_ATTR||{}.SC_ATTR)||"data-styled",G0=typeof window<"u"&&"HTMLElement"in window,oR=!!(typeof SC_DISABLE_SPEEDY=="boolean"?SC_DISABLE_SPEEDY:typeof process<"u"&&process.env!==void 0&&{}.REACT_APP_SC_DISABLE_SPEEDY!==void 0&&{}.REACT_APP_SC_DISABLE_SPEEDY!==""?{}.REACT_APP_SC_DISABLE_SPEEDY!=="false"&&{}.REACT_APP_SC_DISABLE_SPEEDY:typeof process<"u"&&process.env!==void 0&&{}.SC_DISABLE_SPEEDY!==void 0&&{}.SC_DISABLE_SPEEDY!==""&&{}.SC_DISABLE_SPEEDY!=="false"&&{}.SC_DISABLE_SPEEDY),sR={},X0=Object.freeze([]),vo=Object.freeze({});function xx(e,t,r){return r===void 0&&(r=vo),e.theme!==r.theme&&e.theme||t||r.theme}var Sx=new Set(["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","use","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"]),aR=/[!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~-]+/g,lR=/(^-|-$)/g;function n1(e){return e.replace(aR,"-").replace(lR,"")}var cR=/(a)(d)/gi,i1=function(e){return String.fromCharCode(e+(e>25?39:97))};function up(e){var t,r="";for(t=Math.abs(e);t>52;t=t/52|0)r=i1(t%52)+r;return(i1(t%52)+r).replace(cR,"$1-$2")}var eh,ns=function(e,t){for(var r=t.length;r;)e=33*e^t.charCodeAt(--r);return e},bx=function(e){return ns(5381,e)};function kx(e){return up(bx(e)>>>0)}function uR(e){return e.displayName||e.name||"Component"}function th(e){return typeof e=="string"&&!0}var Cx=typeof Symbol=="function"&&Symbol.for,Dx=Cx?Symbol.for("react.memo"):60115,dR=Cx?Symbol.for("react.forward_ref"):60112,fR={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},hR={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Ex={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},mR=((eh={})[dR]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},eh[Dx]=Ex,eh);function o1(e){return("type"in(t=e)&&t.type.$$typeof)===Dx?Ex:"$$typeof"in e?mR[e.$$typeof]:fR;var t}var pR=Object.defineProperty,gR=Object.getOwnPropertyNames,s1=Object.getOwnPropertySymbols,vR=Object.getOwnPropertyDescriptor,yR=Object.getPrototypeOf,a1=Object.prototype;function Tx(e,t,r){if(typeof t!="string"){if(a1){var n=yR(t);n&&n!==a1&&Tx(e,n,r)}var i=gR(t);s1&&(i=i.concat(s1(t)));for(var o=o1(e),a=o1(t),c=0;c0?" Args: ".concat(t.join(", ")):""))}var wR=function(){function e(t){this.groupSizes=new Uint32Array(512),this.length=512,this.tag=t}return e.prototype.indexOfGroup=function(t){for(var r=0,n=0;n=this.groupSizes.length){for(var n=this.groupSizes,i=n.length,o=i;t>=o;)if((o<<=1)<0)throw wo(16,"".concat(t));this.groupSizes=new Uint32Array(o),this.groupSizes.set(n),this.length=o;for(var a=i;a=this.length||this.groupSizes[t]===0)return r;for(var n=this.groupSizes[t],i=this.indexOfGroup(t),o=i+n,a=i;a=0;h--){var g=d[h];if(g&&g.nodeType===1&&g.hasAttribute(Es))return g}}(r),o=i!==void 0?i.nextSibling:null;n.setAttribute(Es,"active"),n.setAttribute("data-styled-version","6.0.0-rc.1");var a=CR();return a&&n.setAttribute("nonce",a),r.insertBefore(n,o),n},DR=function(){function e(t){this.element=jx(t),this.element.appendChild(document.createTextNode("")),this.sheet=function(r){if(r.sheet)return r.sheet;for(var n=document.styleSheets,i=0,o=n.length;i=0){var n=document.createTextNode(r);return this.element.insertBefore(n,this.nodes[t]||null),this.length++,!0}return!1},e.prototype.deleteRule=function(t){this.element.removeChild(this.nodes[t]),this.length--},e.prototype.getRule=function(t){return t0&&(x+="".concat(b,","))}),i+="".concat(g).concat(v,'{content:"').concat(x,'"}').concat(`/*!sc*/ +`)},a=0;a0?".".concat(t):x},g=d.slice();a.prefix&&g.unshift(nR),g.push(function(x){x.type===cd&&x.value.includes("&")&&(x.props[0]=x.props[0].replace(OR,r).replace(n,h))},tR);var v=function(x,b,k,C){b===void 0&&(b=""),k===void 0&&(k=""),C===void 0&&(C="&"),t=C,r=b,n=new RegExp("\\".concat(r,"\\b"),"g");var E=x.replace(PR,""),y=JP(k||b?"".concat(k," ").concat(b," { ").concat(E," }"):E);return a.namespace&&(y=Ox(y,a.namespace)),function(w,S){for(var T=[],O=0,P=void 0;O="A"&&e<="Z"};function c1(e){for(var t="",r=0;r>>0);if(!r.hasNameForId(this.componentId,a)){var c=n(o,".".concat(a),void 0,this.componentId);r.insertRules(this.componentId,a,c)}i=ro(i,a),this.staticRulesId=a}else{for(var d=ns(this.baseHash,n.hash),h="",g=0;g>>0);r.hasNameForId(this.componentId,b)||r.insertRules(this.componentId,b,n(h,".".concat(b),void 0,this.componentId)),i=ro(i,b)}}return i},e}(),Q0=Pt.createContext(void 0);Q0.Consumer;function q0(){return N.useContext(Q0)}function $R(e){var t=q0(),r=N.useMemo(function(){return function(n,i){if(!n)throw wo(14);if(yo(n)){var o=n(i);return o}if(Array.isArray(n)||typeof n!="object")throw wo(8);return i?Rt(Rt({},i),n):n}(e.theme,t)},[e.theme,t]);return e.children?Pt.createElement(Q0.Provider,{value:r},e.children):null}var nh={};function zR(e,t,r){var n=K0(e),i=e,o=!th(e),a=t.attrs,c=a===void 0?X0:a,d=t.componentId,h=d===void 0?function(O,P){var M=typeof O!="string"?"sc":n1(O);nh[M]=(nh[M]||0)+1;var R="".concat(M,"-").concat(kx("6.0.0-rc.1"+M+nh[M]));return P?"".concat(P,"-").concat(R):R}(t.displayName,t.parentComponentId):d,g=t.displayName,v=g===void 0?function(O){return th(O)?"styled.".concat(O):"Styled(".concat(uR(O),")")}(e):g,x=t.displayName&&t.componentId?"".concat(n1(t.displayName),"-").concat(t.componentId):t.componentId||h,b=n&&i.attrs?i.attrs.concat(c).filter(Boolean):c,k=t.shouldForwardProp;if(n&&i.shouldForwardProp){var C=i.shouldForwardProp;if(t.shouldForwardProp){var E=t.shouldForwardProp;k=function(O,P){return C(O,P)&&E(O,P)}}else k=C}var y=new NR(r,x,n?i.componentStyle:void 0),w=y.isStatic&&c.length===0;function S(O,P){return function(M,R,$,z){var ee=M.attrs,te=M.componentStyle,G=M.defaultProps,lt=M.foldedComponentIds,Te=M.styledComponentId,$e=M.target,ht=q0(),W=mp(),le=M.shouldForwardProp||W.shouldForwardProp,Q=function($t,tr,Nr){for(var $r,hr=Rt(Rt({},tr),{className:void 0,theme:Nr}),Vi=0;Vi<$t.length;Vi+=1){var Cr=yo($r=$t[Vi])?$r(hr):$r;for(var mr in Cr)hr[mr]=mr==="className"?ro(hr[mr],Cr[mr]):mr==="style"?Rt(Rt({},hr[mr]),Cr[mr]):Cr[mr]}return tr.className&&(hr.className=ro(hr.className,tr.className)),hr}(ee,R,xx(R,ht,G)||vo),ue=Q.as||$e,he={};for(var st in Q)Q[st]===void 0||st[0]==="$"||st==="as"||st==="theme"||(st==="forwardedAs"?he.as=Q.forwardedAs:le&&!le(st,ue)||(he[st]=Q[st]));var Fe=function($t,tr,Nr){var $r=mp(),hr=$t.generateAndInjectStyles(tr?vo:Nr,$r.styleSheet,$r.stylis);return hr}(te,z,Q),X=ro(lt,Te);return Fe&&(X+=" "+Fe),Q.className&&(X+=" "+Q.className),he[th(ue)&&!Sx.has(ue)?"class":"className"]=X,he.ref=$,N.createElement(ue,he)}(T,O,P,w)}S.displayName=v;var T=Pt.forwardRef(S);return T.attrs=b,T.componentStyle=y,T.displayName=v,T.shouldForwardProp=k,T.foldedComponentIds=n?ro(i.foldedComponentIds,i.styledComponentId):"",T.styledComponentId=x,T.target=n?i.target:e,Object.defineProperty(T,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(O){this._foldedDefaultProps=n?function(P){for(var M=[],R=1;R2&&xu.registerId(this.componentId+t),this.removeStyles(t,n),this.createStyles(t,r,n,i)},e}();function YR(e){for(var t=[],r=1;r"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?QR:KR;Nx.useSyncExternalStore=js.useSyncExternalStore!==void 0?js.useSyncExternalStore:qR;(function(e){e.exports=Nx})(FR);var f1={},ZR={get exports(){return f1},set exports(e){f1=e}},$x={};/** + */var Ts=N;function VR(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var WR=typeof Object.is=="function"?Object.is:VR,UR=Ts.useState,BR=Ts.useEffect,GR=Ts.useLayoutEffect,XR=Ts.useDebugValue;function KR(e,t){var r=t(),n=UR({inst:{value:r,getSnapshot:t}}),i=n[0].inst,o=n[1];return GR(function(){i.value=r,i.getSnapshot=t,ih(i)&&o({inst:i})},[e,r,t]),BR(function(){return ih(i)&&o({inst:i}),e(function(){ih(i)&&o({inst:i})})},[e]),XR(r),r}function ih(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!WR(e,r)}catch{return!0}}function QR(e,t){return t()}var qR=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?QR:KR;Nx.useSyncExternalStore=Ts.useSyncExternalStore!==void 0?Ts.useSyncExternalStore:qR;(function(e){e.exports=Nx})(FR);var f1={},ZR={get exports(){return f1},set exports(e){f1=e}},$x={};/** * @license React * use-sync-external-store-shim/with-selector.production.min.js * @@ -90,7 +90,7 @@ Error generating stack: `+o.message+` * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Lt=typeof Symbol=="function"&&Symbol.for,Z0=Lt?Symbol.for("react.element"):60103,J0=Lt?Symbol.for("react.portal"):60106,md=Lt?Symbol.for("react.fragment"):60107,pd=Lt?Symbol.for("react.strict_mode"):60108,gd=Lt?Symbol.for("react.profiler"):60114,vd=Lt?Symbol.for("react.provider"):60109,yd=Lt?Symbol.for("react.context"):60110,eg=Lt?Symbol.for("react.async_mode"):60111,wd=Lt?Symbol.for("react.concurrent_mode"):60111,_d=Lt?Symbol.for("react.forward_ref"):60112,xd=Lt?Symbol.for("react.suspense"):60113,fM=Lt?Symbol.for("react.suspense_list"):60120,Sd=Lt?Symbol.for("react.memo"):60115,bd=Lt?Symbol.for("react.lazy"):60116,hM=Lt?Symbol.for("react.block"):60121,mM=Lt?Symbol.for("react.fundamental"):60117,pM=Lt?Symbol.for("react.responder"):60118,gM=Lt?Symbol.for("react.scope"):60119;function br(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case Z0:switch(e=e.type,e){case eg:case wd:case md:case gd:case pd:case xd:return e;default:switch(e=e&&e.$$typeof,e){case yd:case _d:case bd:case Sd:case vd:return e;default:return t}}case J0:return t}}}function Yx(e){return br(e)===wd}Ie.AsyncMode=eg;Ie.ConcurrentMode=wd;Ie.ContextConsumer=yd;Ie.ContextProvider=vd;Ie.Element=Z0;Ie.ForwardRef=_d;Ie.Fragment=md;Ie.Lazy=bd;Ie.Memo=Sd;Ie.Portal=J0;Ie.Profiler=gd;Ie.StrictMode=pd;Ie.Suspense=xd;Ie.isAsyncMode=function(e){return Yx(e)||br(e)===eg};Ie.isConcurrentMode=Yx;Ie.isContextConsumer=function(e){return br(e)===yd};Ie.isContextProvider=function(e){return br(e)===vd};Ie.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===Z0};Ie.isForwardRef=function(e){return br(e)===_d};Ie.isFragment=function(e){return br(e)===md};Ie.isLazy=function(e){return br(e)===bd};Ie.isMemo=function(e){return br(e)===Sd};Ie.isPortal=function(e){return br(e)===J0};Ie.isProfiler=function(e){return br(e)===gd};Ie.isStrictMode=function(e){return br(e)===pd};Ie.isSuspense=function(e){return br(e)===xd};Ie.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===md||e===wd||e===gd||e===pd||e===xd||e===fM||typeof e=="object"&&e!==null&&(e.$$typeof===bd||e.$$typeof===Sd||e.$$typeof===vd||e.$$typeof===yd||e.$$typeof===_d||e.$$typeof===mM||e.$$typeof===pM||e.$$typeof===gM||e.$$typeof===hM)};Ie.typeOf=br;(function(e){e.exports=Ie})(dM);var Hx=vp,vM={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},yM={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Fx={};Fx[Hx.ForwardRef]=vM;Fx[Hx.Memo]=yM;var h1={},wM={get exports(){return h1},set exports(e){h1=e}},Ne={};/** + */var Lt=typeof Symbol=="function"&&Symbol.for,Z0=Lt?Symbol.for("react.element"):60103,J0=Lt?Symbol.for("react.portal"):60106,md=Lt?Symbol.for("react.fragment"):60107,pd=Lt?Symbol.for("react.strict_mode"):60108,gd=Lt?Symbol.for("react.profiler"):60114,vd=Lt?Symbol.for("react.provider"):60109,yd=Lt?Symbol.for("react.context"):60110,eg=Lt?Symbol.for("react.async_mode"):60111,wd=Lt?Symbol.for("react.concurrent_mode"):60111,_d=Lt?Symbol.for("react.forward_ref"):60112,xd=Lt?Symbol.for("react.suspense"):60113,fM=Lt?Symbol.for("react.suspense_list"):60120,Sd=Lt?Symbol.for("react.memo"):60115,bd=Lt?Symbol.for("react.lazy"):60116,hM=Lt?Symbol.for("react.block"):60121,mM=Lt?Symbol.for("react.fundamental"):60117,pM=Lt?Symbol.for("react.responder"):60118,gM=Lt?Symbol.for("react.scope"):60119;function br(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case Z0:switch(e=e.type,e){case eg:case wd:case md:case gd:case pd:case xd:return e;default:switch(e=e&&e.$$typeof,e){case yd:case _d:case bd:case Sd:case vd:return e;default:return t}}case J0:return t}}}function Hx(e){return br(e)===wd}Ie.AsyncMode=eg;Ie.ConcurrentMode=wd;Ie.ContextConsumer=yd;Ie.ContextProvider=vd;Ie.Element=Z0;Ie.ForwardRef=_d;Ie.Fragment=md;Ie.Lazy=bd;Ie.Memo=Sd;Ie.Portal=J0;Ie.Profiler=gd;Ie.StrictMode=pd;Ie.Suspense=xd;Ie.isAsyncMode=function(e){return Hx(e)||br(e)===eg};Ie.isConcurrentMode=Hx;Ie.isContextConsumer=function(e){return br(e)===yd};Ie.isContextProvider=function(e){return br(e)===vd};Ie.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===Z0};Ie.isForwardRef=function(e){return br(e)===_d};Ie.isFragment=function(e){return br(e)===md};Ie.isLazy=function(e){return br(e)===bd};Ie.isMemo=function(e){return br(e)===Sd};Ie.isPortal=function(e){return br(e)===J0};Ie.isProfiler=function(e){return br(e)===gd};Ie.isStrictMode=function(e){return br(e)===pd};Ie.isSuspense=function(e){return br(e)===xd};Ie.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===md||e===wd||e===gd||e===pd||e===xd||e===fM||typeof e=="object"&&e!==null&&(e.$$typeof===bd||e.$$typeof===Sd||e.$$typeof===vd||e.$$typeof===yd||e.$$typeof===_d||e.$$typeof===mM||e.$$typeof===pM||e.$$typeof===gM||e.$$typeof===hM)};Ie.typeOf=br;(function(e){e.exports=Ie})(dM);var Yx=vp,vM={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},yM={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},Fx={};Fx[Yx.ForwardRef]=vM;Fx[Yx.Memo]=yM;var h1={},wM={get exports(){return h1},set exports(e){h1=e}},Ne={};/** * @license React * react-is.production.min.js * @@ -98,7 +98,7 @@ Error generating stack: `+o.message+` * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var tg=Symbol.for("react.element"),rg=Symbol.for("react.portal"),kd=Symbol.for("react.fragment"),Cd=Symbol.for("react.strict_mode"),Dd=Symbol.for("react.profiler"),Ed=Symbol.for("react.provider"),jd=Symbol.for("react.context"),_M=Symbol.for("react.server_context"),Td=Symbol.for("react.forward_ref"),Od=Symbol.for("react.suspense"),Pd=Symbol.for("react.suspense_list"),Rd=Symbol.for("react.memo"),Md=Symbol.for("react.lazy"),xM=Symbol.for("react.offscreen"),Vx;Vx=Symbol.for("react.module.reference");function Lr(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case tg:switch(e=e.type,e){case kd:case Dd:case Cd:case Od:case Pd:return e;default:switch(e=e&&e.$$typeof,e){case _M:case jd:case Td:case Md:case Rd:case Ed:return e;default:return t}}case rg:return t}}}Ne.ContextConsumer=jd;Ne.ContextProvider=Ed;Ne.Element=tg;Ne.ForwardRef=Td;Ne.Fragment=kd;Ne.Lazy=Md;Ne.Memo=Rd;Ne.Portal=rg;Ne.Profiler=Dd;Ne.StrictMode=Cd;Ne.Suspense=Od;Ne.SuspenseList=Pd;Ne.isAsyncMode=function(){return!1};Ne.isConcurrentMode=function(){return!1};Ne.isContextConsumer=function(e){return Lr(e)===jd};Ne.isContextProvider=function(e){return Lr(e)===Ed};Ne.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===tg};Ne.isForwardRef=function(e){return Lr(e)===Td};Ne.isFragment=function(e){return Lr(e)===kd};Ne.isLazy=function(e){return Lr(e)===Md};Ne.isMemo=function(e){return Lr(e)===Rd};Ne.isPortal=function(e){return Lr(e)===rg};Ne.isProfiler=function(e){return Lr(e)===Dd};Ne.isStrictMode=function(e){return Lr(e)===Cd};Ne.isSuspense=function(e){return Lr(e)===Od};Ne.isSuspenseList=function(e){return Lr(e)===Pd};Ne.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===kd||e===Dd||e===Cd||e===Od||e===Pd||e===xM||typeof e=="object"&&e!==null&&(e.$$typeof===Md||e.$$typeof===Rd||e.$$typeof===Ed||e.$$typeof===jd||e.$$typeof===Td||e.$$typeof===Vx||e.getModuleId!==void 0)};Ne.typeOf=Lr;(function(e){e.exports=Ne})(wM);function SM(){const e=cM();let t=null,r=null;return{clear(){t=null,r=null},notify(){e(()=>{let n=t;for(;n;)n.callback(),n=n.next})},get(){let n=[],i=t;for(;i;)n.push(i),i=i.next;return n},subscribe(n){let i=!0,o=r={callback:n,next:null,prev:r};return o.prev?o.prev.next=o:t=o,function(){!i||t===null||(i=!1,o.next?o.next.prev=o.prev:r=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}const m1={notify(){},get:()=>[]};function bM(e,t){let r,n=m1;function i(v){return d(),n.subscribe(v)}function o(){n.notify()}function a(){g.onStateChange&&g.onStateChange()}function c(){return!!r}function d(){r||(r=t?t.addNestedSub(a):e.subscribe(a),n=SM())}function h(){r&&(r(),r=void 0,n.clear(),n=m1)}const g={addNestedSub:i,notifyNestedSubs:o,handleChangeWrapper:a,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return g}const kM=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",CM=kM?N.useLayoutEffect:N.useEffect;function DM({store:e,context:t,children:r,serverState:n}){const i=N.useMemo(()=>{const c=bM(e);return{store:e,subscription:c,getServerState:n?()=>n:void 0}},[e,n]),o=N.useMemo(()=>e.getState(),[e]);CM(()=>{const{subscription:c}=i;return c.onStateChange=c.notifyNestedSubs,c.trySubscribe(),o!==e.getState()&&c.notifyNestedSubs(),()=>{c.tryUnsubscribe(),c.onStateChange=void 0}},[i,o]);const a=t||uM;return Pt.createElement(a.Provider,{value:i},r)}lM(Xc.unstable_batchedUpdates);const EM=HR` + */var tg=Symbol.for("react.element"),rg=Symbol.for("react.portal"),kd=Symbol.for("react.fragment"),Cd=Symbol.for("react.strict_mode"),Dd=Symbol.for("react.profiler"),Ed=Symbol.for("react.provider"),Td=Symbol.for("react.context"),_M=Symbol.for("react.server_context"),jd=Symbol.for("react.forward_ref"),Od=Symbol.for("react.suspense"),Pd=Symbol.for("react.suspense_list"),Rd=Symbol.for("react.memo"),Md=Symbol.for("react.lazy"),xM=Symbol.for("react.offscreen"),Vx;Vx=Symbol.for("react.module.reference");function Lr(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case tg:switch(e=e.type,e){case kd:case Dd:case Cd:case Od:case Pd:return e;default:switch(e=e&&e.$$typeof,e){case _M:case Td:case jd:case Md:case Rd:case Ed:return e;default:return t}}case rg:return t}}}Ne.ContextConsumer=Td;Ne.ContextProvider=Ed;Ne.Element=tg;Ne.ForwardRef=jd;Ne.Fragment=kd;Ne.Lazy=Md;Ne.Memo=Rd;Ne.Portal=rg;Ne.Profiler=Dd;Ne.StrictMode=Cd;Ne.Suspense=Od;Ne.SuspenseList=Pd;Ne.isAsyncMode=function(){return!1};Ne.isConcurrentMode=function(){return!1};Ne.isContextConsumer=function(e){return Lr(e)===Td};Ne.isContextProvider=function(e){return Lr(e)===Ed};Ne.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===tg};Ne.isForwardRef=function(e){return Lr(e)===jd};Ne.isFragment=function(e){return Lr(e)===kd};Ne.isLazy=function(e){return Lr(e)===Md};Ne.isMemo=function(e){return Lr(e)===Rd};Ne.isPortal=function(e){return Lr(e)===rg};Ne.isProfiler=function(e){return Lr(e)===Dd};Ne.isStrictMode=function(e){return Lr(e)===Cd};Ne.isSuspense=function(e){return Lr(e)===Od};Ne.isSuspenseList=function(e){return Lr(e)===Pd};Ne.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===kd||e===Dd||e===Cd||e===Od||e===Pd||e===xM||typeof e=="object"&&e!==null&&(e.$$typeof===Md||e.$$typeof===Rd||e.$$typeof===Ed||e.$$typeof===Td||e.$$typeof===jd||e.$$typeof===Vx||e.getModuleId!==void 0)};Ne.typeOf=Lr;(function(e){e.exports=Ne})(wM);function SM(){const e=cM();let t=null,r=null;return{clear(){t=null,r=null},notify(){e(()=>{let n=t;for(;n;)n.callback(),n=n.next})},get(){let n=[],i=t;for(;i;)n.push(i),i=i.next;return n},subscribe(n){let i=!0,o=r={callback:n,next:null,prev:r};return o.prev?o.prev.next=o:t=o,function(){!i||t===null||(i=!1,o.next?o.next.prev=o.prev:r=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}const m1={notify(){},get:()=>[]};function bM(e,t){let r,n=m1;function i(v){return d(),n.subscribe(v)}function o(){n.notify()}function a(){g.onStateChange&&g.onStateChange()}function c(){return!!r}function d(){r||(r=t?t.addNestedSub(a):e.subscribe(a),n=SM())}function h(){r&&(r(),r=void 0,n.clear(),n=m1)}const g={addNestedSub:i,notifyNestedSubs:o,handleChangeWrapper:a,isSubscribed:c,trySubscribe:d,tryUnsubscribe:h,getListeners:()=>n};return g}const kM=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",CM=kM?N.useLayoutEffect:N.useEffect;function DM({store:e,context:t,children:r,serverState:n}){const i=N.useMemo(()=>{const c=bM(e);return{store:e,subscription:c,getServerState:n?()=>n:void 0}},[e,n]),o=N.useMemo(()=>e.getState(),[e]);CM(()=>{const{subscription:c}=i;return c.onStateChange=c.notifyNestedSubs,c.trySubscribe(),o!==e.getState()&&c.notifyNestedSubs(),()=>{c.tryUnsubscribe(),c.onStateChange=void 0}},[i,o]);const a=t||uM;return Pt.createElement(a.Provider,{value:i},r)}lM(Xc.unstable_batchedUpdates);const EM=YR` *{ box-sizing: border-box; } @@ -351,7 +351,7 @@ Error generating stack: `+o.message+` font-weight: 600; font-size: 0.64rem; line-height: 0.72rem; -`,jM=f(vn)``,TM=f(vn)` +`,TM=f(vn)``,jM=f(vn)` font-size: 0.32rem; line-height: 0.352rem; `,OM=f(vn)` @@ -384,10 +384,10 @@ Error generating stack: `+o.message+` `,$M=f(wl)``,zM=f(wl)` font-size: 0.14rem; line-height: 0.2rem; -`,YM=f(wl)` +`,HM=f(wl)` font-size: 0.14rem; line-height: 0.22rem; -`,HM=f(wl)` +`,YM=f(wl)` font-size: 0.12rem; line-height: 0.2rem; `,FM=f.div` @@ -398,7 +398,7 @@ Error generating stack: `+o.message+` `,WM=f.div` width: 0.166rem; background: linear-gradient(90deg, #767ee5, #9966cc); -`,UM=({children:e,extra:t,style:r})=>l.jsxs(FM,{style:r,children:[l.jsx(WM,{}),l.jsx(VM,{children:e}),t]}),Me={Heading:{CNHead1:jM,Heading2:TM,Heading3:OM,CNHead4:PM,Heading6:RM,CNHead5:Ux,CNTitleLarge:MM,TitleLarge:LM,CNTitleMedium:AM,CNHead5S:UM,CNTitleSmall:IM},Paragraph:{CNBodyLarge:NM,CNBodyMedium:$M,CNBodySmall:zM,CNMarkMedium:YM,CNMarkSmall:HM}},{Paragraph:BM}=Me,{CNBodyMedium:GM}=BM,XM=f.ul` +`,UM=({children:e,extra:t,style:r})=>l.jsxs(FM,{style:r,children:[l.jsx(WM,{}),l.jsx(VM,{children:e}),t]}),Me={Heading:{CNHead1:TM,Heading2:jM,Heading3:OM,CNHead4:PM,Heading6:RM,CNHead5:Ux,CNTitleLarge:MM,TitleLarge:LM,CNTitleMedium:AM,CNHead5S:UM,CNTitleSmall:IM},Paragraph:{CNBodyLarge:NM,CNBodyMedium:$M,CNBodySmall:zM,CNMarkMedium:HM,CNMarkSmall:YM}},{Paragraph:BM}=Me,{CNBodyMedium:GM}=BM,XM=f.ul` display: flex; height: 100%; @media screen and (max-width: 425px) { @@ -501,11 +501,11 @@ Error generating stack: `+o.message+` padding-top: 0.14rem; `,w4=()=>{const e=wt();return l.jsx(l.Fragment,{children:l.jsx(c4,{children:l.jsxs(u4,{children:[l.jsxs(v4,{children:[l.jsx(d4,{src:Gx}),l.jsx(f4,{children:Kx.map(({key:t,label:r,children:n})=>l.jsxs(h4,{children:[l.jsx(m4,{children:r}),l.jsx(p4,{children:(n||[]).map(({key:i,label:o,url:a})=>l.jsx(g4,{onClick:()=>{a&&e(a)},children:l.jsx(Qx,{children:o})},i))})]},t))})]}),l.jsx(y4,{style:{textAlign:"center"},children:"北京达坦科技有限公司©2023版权所有"})]})})})},_4=f.div` height: 0.72rem; -`,x4=()=>{const e=ti(),[t,r]=N.useState("down"),[n,i]=N.useState(!1);N.useEffect(()=>{let d=window.scrollY,h=!1;const g=()=>{const x=window.scrollY;if(x>1e3?i(!0):i(!1),Math.abs(x-d)<0){h=!1;return}r(x>d?"down":"up"),d=x>0?x:0,h=!1},v=()=>{h||(window.requestAnimationFrame(g),h=!0)};return window.addEventListener("scroll",v),()=>window.removeEventListener("scroll",v)},[t]);const o=()=>n&&t==="up"?"fixed":"default",a=()=>e.pathname.split("/")[1]==="job-description"||(e.pathname.split("/")[1]==="blogs"||e.pathname.split("/")[1]==="events"||e.pathname.split("/")[1]==="highlights"||e.pathname.split("/")[1]==="news-honor-dynamic")&&e.pathname.split("/")[2]||n&&t==="up"?"dark":"transparent";return l.jsxs(l.Fragment,{children:[l.jsx(a4,{items:Kx,mode:o(),color:a()}),o()==="fixed"&&l.jsx(_4,{}),l.jsx(DP,{}),l.jsx(w4,{})]})};var qx={},Zx={},Ld={},Jx={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0,targetSlide:0},r=t;e.default=r})(Jx);var S4="Expected a function",p1=0/0,b4="[object Symbol]",k4=/^\s+|\s+$/g,C4=/^[-+]0x[0-9a-f]+$/i,D4=/^0b[01]+$/i,E4=/^0o[0-7]+$/i,j4=parseInt,T4=typeof Fo=="object"&&Fo&&Fo.Object===Object&&Fo,O4=typeof self=="object"&&self&&self.Object===Object&&self,P4=T4||O4||Function("return this")(),R4=Object.prototype,M4=R4.toString,L4=Math.max,A4=Math.min,oh=function(){return P4.Date.now()};function I4(e,t,r){var n,i,o,a,c,d,h=0,g=!1,v=!1,x=!0;if(typeof e!="function")throw new TypeError(S4);t=g1(t)||0,yp(r)&&(g=!!r.leading,v="maxWait"in r,o=v?L4(g1(r.maxWait)||0,t):o,x="trailing"in r?!!r.trailing:x);function b(P){var M=n,R=i;return n=i=void 0,h=P,a=e.apply(R,M),a}function k(P){return h=P,c=setTimeout(y,t),g?b(P):a}function C(P){var M=P-d,R=P-h,$=t-M;return v?A4($,o-R):$}function E(P){var M=P-d,R=P-h;return d===void 0||M>=t||M<0||v&&R>=o}function y(){var P=oh();if(E(P))return w(P);c=setTimeout(y,C(P))}function w(P){return c=void 0,x&&n?b(P):(n=i=void 0,a)}function S(){c!==void 0&&clearTimeout(c),h=0,n=d=i=c=void 0}function j(){return c===void 0?a:w(oh())}function O(){var P=oh(),M=E(P);if(n=arguments,i=this,d=P,M){if(c===void 0)return k(d);if(v)return c=setTimeout(y,t),b(d)}return c===void 0&&(c=setTimeout(y,t)),a}return O.cancel=S,O.flush=j,O}function yp(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function N4(e){return!!e&&typeof e=="object"}function $4(e){return typeof e=="symbol"||N4(e)&&M4.call(e)==b4}function g1(e){if(typeof e=="number")return e;if($4(e))return p1;if(yp(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=yp(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(k4,"");var r=D4.test(e);return r||E4.test(e)?j4(e.slice(2),r?2:8):C4.test(e)?p1:+e}var z4=I4,Ts={},Y4={get exports(){return Ts},set exports(e){Ts=e}};/*! +`,x4=()=>{const e=ti(),[t,r]=N.useState("down"),[n,i]=N.useState(!1);N.useEffect(()=>{let d=window.scrollY,h=!1;const g=()=>{const x=window.scrollY;if(x>1e3?i(!0):i(!1),Math.abs(x-d)<0){h=!1;return}r(x>d?"down":"up"),d=x>0?x:0,h=!1},v=()=>{h||(window.requestAnimationFrame(g),h=!0)};return window.addEventListener("scroll",v),()=>window.removeEventListener("scroll",v)},[t]);const o=()=>n&&t==="up"?"fixed":"default",a=()=>e.pathname.split("/")[1]==="job-description"||(e.pathname.split("/")[1]==="blogs"||e.pathname.split("/")[1]==="events"||e.pathname.split("/")[1]==="highlights"||e.pathname.split("/")[1]==="news-honor-dynamic")&&e.pathname.split("/")[2]||n&&t==="up"?"dark":"transparent";return l.jsxs(l.Fragment,{children:[l.jsx(a4,{items:Kx,mode:o(),color:a()}),o()==="fixed"&&l.jsx(_4,{}),l.jsx(DP,{}),l.jsx(w4,{})]})};var qx={},Zx={},Ld={},Jx={};(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t={animating:!1,autoplaying:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,dragging:!1,edgeDragged:!1,initialized:!1,lazyLoadedList:[],listHeight:null,listWidth:null,scrolling:!1,slideCount:null,slideHeight:null,slideWidth:null,swipeLeft:null,swiped:!1,swiping:!1,touchObject:{startX:0,startY:0,curX:0,curY:0},trackStyle:{},trackWidth:0,targetSlide:0},r=t;e.default=r})(Jx);var S4="Expected a function",p1=0/0,b4="[object Symbol]",k4=/^\s+|\s+$/g,C4=/^[-+]0x[0-9a-f]+$/i,D4=/^0b[01]+$/i,E4=/^0o[0-7]+$/i,T4=parseInt,j4=typeof Fo=="object"&&Fo&&Fo.Object===Object&&Fo,O4=typeof self=="object"&&self&&self.Object===Object&&self,P4=j4||O4||Function("return this")(),R4=Object.prototype,M4=R4.toString,L4=Math.max,A4=Math.min,oh=function(){return P4.Date.now()};function I4(e,t,r){var n,i,o,a,c,d,h=0,g=!1,v=!1,x=!0;if(typeof e!="function")throw new TypeError(S4);t=g1(t)||0,yp(r)&&(g=!!r.leading,v="maxWait"in r,o=v?L4(g1(r.maxWait)||0,t):o,x="trailing"in r?!!r.trailing:x);function b(P){var M=n,R=i;return n=i=void 0,h=P,a=e.apply(R,M),a}function k(P){return h=P,c=setTimeout(y,t),g?b(P):a}function C(P){var M=P-d,R=P-h,$=t-M;return v?A4($,o-R):$}function E(P){var M=P-d,R=P-h;return d===void 0||M>=t||M<0||v&&R>=o}function y(){var P=oh();if(E(P))return w(P);c=setTimeout(y,C(P))}function w(P){return c=void 0,x&&n?b(P):(n=i=void 0,a)}function S(){c!==void 0&&clearTimeout(c),h=0,n=d=i=c=void 0}function T(){return c===void 0?a:w(oh())}function O(){var P=oh(),M=E(P);if(n=arguments,i=this,d=P,M){if(c===void 0)return k(d);if(v)return c=setTimeout(y,t),b(d)}return c===void 0&&(c=setTimeout(y,t)),a}return O.cancel=S,O.flush=T,O}function yp(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function N4(e){return!!e&&typeof e=="object"}function $4(e){return typeof e=="symbol"||N4(e)&&M4.call(e)==b4}function g1(e){if(typeof e=="number")return e;if($4(e))return p1;if(yp(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=yp(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(k4,"");var r=D4.test(e);return r||E4.test(e)?T4(e.slice(2),r?2:8):C4.test(e)?p1:+e}var z4=I4,js={},H4={get exports(){return js},set exports(e){js=e}};/*! Copyright (c) 2018 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames -*/(function(e){(function(){var t={}.hasOwnProperty;function r(){for(var n=[],i=0;i0?1:0):0};B.lazySlidesOnLeft=tS;var rS=function(t){return t.centerMode?Math.floor((t.slidesToShow-1)/2)+1+(parseInt(t.centerPadding)>0?1:0):t.slidesToShow};B.lazySlidesOnRight=rS;var Su=function(t){return t&&t.offsetWidth||0};B.getWidth=Su;var sg=function(t){return t&&t.offsetHeight||0};B.getHeight=sg;var ag=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,n,i,o,a;return n=t.startX-t.curX,i=t.startY-t.curY,o=Math.atan2(i,n),a=Math.round(o*180/Math.PI),a<0&&(a=360-Math.abs(a)),a<=45&&a>=0||a<=360&&a>=315?"left":a>=135&&a<=225?"right":r===!0?a>=35&&a<=135?"up":"down":"vertical"};B.getSwipeDirection=ag;var lg=function(t){var r=!0;return t.infinite||(t.centerMode&&t.currentSlide>=t.slideCount-1||t.slideCount<=t.slidesToShow||t.currentSlide>=t.slideCount-t.slidesToShow)&&(r=!1),r};B.canGoNext=lg;var U4=function(t,r){var n={};return r.forEach(function(i){return n[i]=t[i]}),n};B.extractObject=U4;var B4=function(t){var r=H4.default.Children.count(t.children),n=t.listRef,i=Math.ceil(Su(n)),o=t.trackRef&&t.trackRef.node,a=Math.ceil(Su(o)),c;if(t.vertical)c=i;else{var d=t.centerMode&&parseInt(t.centerPadding)*2;typeof t.centerPadding=="string"&&t.centerPadding.slice(-1)==="%"&&(d*=i/100),c=Math.ceil((i-d)/t.slidesToShow)}var h=n&&sg(n.querySelector('[data-index="0"]')),g=h*t.slidesToShow,v=t.currentSlide===void 0?t.initialSlide:t.currentSlide;t.rtl&&t.currentSlide===void 0&&(v=r-1-t.initialSlide);var x=t.lazyLoadedList||[],b=ng(Ze(Ze({},t),{},{currentSlide:v,lazyLoadedList:x}));x=x.concat(b);var k={slideCount:r,slideWidth:c,listWidth:i,trackWidth:a,currentSlide:v,slideHeight:h,listHeight:g,lazyLoadedList:x};return t.autoplaying===null&&t.autoplay&&(k.autoplaying="playing"),k};B.initializedState=B4;var G4=function(t){var r=t.waitForAnimate,n=t.animating,i=t.fade,o=t.infinite,a=t.index,c=t.slideCount,d=t.lazyLoad,h=t.currentSlide,g=t.centerMode,v=t.slidesToScroll,x=t.slidesToShow,b=t.useCSS,k=t.lazyLoadedList;if(r&&n)return{};var C=a,E,y,w,S={},j={},O=o?a:eS(a,0,c-1);if(i){if(!o&&(a<0||a>=c))return{};a<0?C=a+c:a>=c&&(C=a-c),d&&k.indexOf(C)<0&&(k=k.concat(C)),S={animating:!0,currentSlide:C,lazyLoadedList:k,targetSlide:C},j={animating:!1,targetSlide:C}}else E=C,C<0?(E=C+c,o?c%v!==0&&(E=c-c%v):E=0):!lg(t)&&C>h?C=E=h:g&&C>=c?(C=o?c:c-1,E=o?0:c-1):C>=c&&(E=C-c,o?c%v!==0&&(E=0):E=c-x),!o&&C+x>=c&&(E=c-x),y=sl(Ze(Ze({},t),{},{slideIndex:C})),w=sl(Ze(Ze({},t),{},{slideIndex:E})),o||(y===w&&(C=E),y=w),d&&(k=k.concat(ng(Ze(Ze({},t),{},{currentSlide:C})))),b?(S={animating:!0,currentSlide:E,trackStyle:cg(Ze(Ze({},t),{},{left:y})),lazyLoadedList:k,targetSlide:O},j={animating:!1,currentSlide:E,trackStyle:ol(Ze(Ze({},t),{},{left:w})),swipeLeft:null,targetSlide:O}):S={currentSlide:E,trackStyle:ol(Ze(Ze({},t),{},{left:w})),lazyLoadedList:k,targetSlide:O};return{state:S,nextState:j}};B.slideHandler=G4;var X4=function(t,r){var n,i,o,a,c,d=t.slidesToScroll,h=t.slidesToShow,g=t.slideCount,v=t.currentSlide,x=t.targetSlide,b=t.lazyLoad,k=t.infinite;if(a=g%d!==0,n=a?0:(g-v)%d,r.message==="previous")o=n===0?d:h-n,c=v-o,b&&!k&&(i=v-o,c=i===-1?g-1:i),k||(c=x-d);else if(r.message==="next")o=n===0?d:n,c=v+o,b&&!k&&(c=(v+d)%g+n),k||(c=x+d);else if(r.message==="dots")c=r.index*r.slidesToScroll;else if(r.message==="children"){if(c=r.index,k){var C=sS(Ze(Ze({},t),{},{targetSlide:c}));c>r.currentSlide&&C==="left"?c=c-g:c10)return{scrolling:!0};c&&(w.swipeLength=$);var z=(d?-1:1)*(w.curX>w.startX?1:-1);c&&(z=w.curY>w.startY?1:-1);var ee=Math.ceil(C/E),te=ag(r.touchObject,c),G=w.swipeLength;return y||(h===0&&(te==="right"||te==="down")||h+1>=ee&&(te==="left"||te==="up")||!lg(r)&&(te==="left"||te==="up"))&&(G=w.swipeLength*g,v===!1&&x&&(x(te),M.edgeDragged=!0)),!b&&S&&(S(te),M.swiped=!0),o?P=R+G*(j/O)*z:d?P=R-G*z:P=R+G*z,c&&(P=R+G*z),M=Ze(Ze({},M),{},{touchObject:w,swipeLeft:P,trackStyle:ol(Ze(Ze({},r),{},{left:P}))}),Math.abs(w.curX-w.startX)10&&(M.swiping=!0,ao(t)),M}};B.swipeMove=q4;var Z4=function(t,r){var n=r.dragging,i=r.swipe,o=r.touchObject,a=r.listWidth,c=r.touchThreshold,d=r.verticalSwiping,h=r.listHeight,g=r.swipeToSlide,v=r.scrolling,x=r.onSwipe,b=r.targetSlide,k=r.currentSlide,C=r.infinite;if(!n)return i&&ao(t),{};var E=d?h/c:a/c,y=ag(o,d),w={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(v||!o.swipeLength)return w;if(o.swipeLength>E){ao(t),x&&x(y);var S,j,O=C?k:b;switch(y){case"left":case"up":j=O+_p(r),S=g?wp(r,j):j,w.currentDirection=0;break;case"right":case"down":j=O-_p(r),S=g?wp(r,j):j,w.currentDirection=1;break;default:S=O}w.triggerSlideHandler=S}else{var P=sl(r);w.trackStyle=cg(Ze(Ze({},r),{},{left:P}))}return w};B.swipeEnd=Z4;var nS=function(t){for(var r=t.infinite?t.slideCount*2:t.slideCount,n=t.infinite?t.slidesToShow*-1:0,i=t.infinite?t.slidesToShow*-1:0,o=[];nn[n.length-1])r=n[n.length-1];else for(var o in n){if(rt.swipeLeft*-1)return n=d,!1}else if(d.offsetLeft-r+Su(d)/2>t.swipeLeft*-1)return n=d,!1;return!0}),!n)return 0;var a=t.rtl===!0?t.slideCount-t.currentSlide:t.currentSlide,c=Math.abs(n.dataset.index-a)||1;return c}else return t.slidesToScroll};B.getSlideCount=_p;var Ad=function(t,r){return r.reduce(function(n,i){return n&&t.hasOwnProperty(i)},!0)?null:console.error("Keys Missing:",t)};B.checkSpecKeys=Ad;var ol=function(t){Ad(t,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var r,n,i=t.slideCount+2*t.slidesToShow;t.vertical?n=i*t.slideHeight:r=oS(t)*t.slideWidth;var o={opacity:1,transition:"",WebkitTransition:""};if(t.useTransform){var a=t.vertical?"translate3d(0px, "+t.left+"px, 0px)":"translate3d("+t.left+"px, 0px, 0px)",c=t.vertical?"translate3d(0px, "+t.left+"px, 0px)":"translate3d("+t.left+"px, 0px, 0px)",d=t.vertical?"translateY("+t.left+"px)":"translateX("+t.left+"px)";o=Ze(Ze({},o),{},{WebkitTransform:a,transform:c,msTransform:d})}else t.vertical?o.top=t.left:o.left=t.left;return t.fade&&(o={opacity:1}),r&&(o.width=r),n&&(o.height=n),window&&!window.addEventListener&&window.attachEvent&&(t.vertical?o.marginTop=t.left+"px":o.marginLeft=t.left+"px"),o};B.getTrackCSS=ol;var cg=function(t){Ad(t,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var r=ol(t);return t.useTransform?(r.WebkitTransition="-webkit-transform "+t.speed+"ms "+t.cssEase,r.transition="transform "+t.speed+"ms "+t.cssEase):t.vertical?r.transition="top "+t.speed+"ms "+t.cssEase:r.transition="left "+t.speed+"ms "+t.cssEase,r};B.getTrackAnimateCSS=cg;var sl=function(t){if(t.unslick)return 0;Ad(t,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var r=t.slideIndex,n=t.trackRef,i=t.infinite,o=t.centerMode,a=t.slideCount,c=t.slidesToShow,d=t.slidesToScroll,h=t.slideWidth,g=t.listWidth,v=t.variableWidth,x=t.slideHeight,b=t.fade,k=t.vertical,C=0,E,y,w=0;if(b||t.slideCount===1)return 0;var S=0;if(i?(S=-Ma(t),a%d!==0&&r+d>a&&(S=-(r>a?c-(r-a):a%d)),o&&(S+=parseInt(c/2))):(a%d!==0&&r+d>a&&(S=c-a%d),o&&(S=parseInt(c/2))),C=S*h,w=S*x,k?E=r*x*-1+w:E=r*h*-1+C,v===!0){var j,O=n&&n.node;if(j=r+Ma(t),y=O&&O.childNodes[j],E=y?y.offsetLeft*-1:0,o===!0){j=i?r+Ma(t):r,y=O&&O.children[j],E=0;for(var P=0;Pt.currentSlide?t.targetSlide>t.currentSlide+aS(t)?"left":"right":t.targetSlide0&&(a+=1),i&&r%2===0&&(a+=1),a}return i?0:r-1};B.slidesOnRight=aS;var lS=function(t){var r=t.slidesToShow,n=t.centerMode,i=t.rtl,o=t.centerPadding;if(n){var a=(r-1)/2+1;return parseInt(o)>0&&(a+=1),!i&&r%2===0&&(a+=1),a}return i?r-1:0};B.slidesOnLeft=lS;var J4=function(){return!!(typeof window<"u"&&window.document&&window.document.createElement)};B.canUseDOM=J4;var Id={};function xp(e){return xp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xp(e)}Object.defineProperty(Id,"__esModule",{value:!0});Id.Track=void 0;var vi=cS(N),sh=cS(Ts),ah=B;function cS(e){return e&&e.__esModule?e:{default:e}}function Sp(){return Sp=Object.assign||function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bu(e){return bu=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},bu(e)}function w1(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function nr(e){for(var t=1;t=t.slideCount,t.centerMode?(o=Math.floor(t.slidesToShow/2),n=(a-t.currentSlide)%t.slideCount===0,a>t.currentSlide-o-1&&a<=t.currentSlide+o&&(r=!0)):r=t.currentSlide<=a&&a=t.slideCount?c=t.targetSlide-t.slideCount:c=t.targetSlide;var d=a===c;return{"slick-slide":!0,"slick-active":r,"slick-center":n,"slick-cloned":i,"slick-current":d}},sL=function(t){var r={};return(t.variableWidth===void 0||t.variableWidth===!1)&&(r.width=t.slideWidth),t.fade&&(r.position="relative",t.vertical?r.top=-t.index*parseInt(t.slideHeight):r.left=-t.index*parseInt(t.slideWidth),r.opacity=t.currentSlide===t.index?1:0,t.useCSS&&(r.transition="opacity "+t.speed+"ms "+t.cssEase+", visibility "+t.speed+"ms "+t.cssEase)),r},ch=function(t,r){return t.key||r},aL=function(t){var r,n=[],i=[],o=[],a=vi.default.Children.count(t.children),c=(0,ah.lazyStartIndex)(t),d=(0,ah.lazyEndIndex)(t);return vi.default.Children.forEach(t.children,function(h,g){var v,x={message:"children",index:g,slidesToScroll:t.slidesToScroll,currentSlide:t.currentSlide};!t.lazyLoad||t.lazyLoad&&t.lazyLoadedList.indexOf(g)>=0?v=h:v=vi.default.createElement("div",null);var b=sL(nr(nr({},t),{},{index:g})),k=v.props.className||"",C=lh(nr(nr({},t),{},{index:g}));if(n.push(vi.default.cloneElement(v,{key:"original"+ch(v,g),"data-index":g,className:(0,sh.default)(C,k),tabIndex:"-1","aria-hidden":!C["slick-active"],style:nr(nr({outline:"none"},v.props.style||{}),b),onClick:function(w){v.props&&v.props.onClick&&v.props.onClick(w),t.focusOnSelect&&t.focusOnSelect(x)}})),t.infinite&&t.fade===!1){var E=a-g;E<=(0,ah.getPreClones)(t)&&a!==t.slidesToShow&&(r=-E,r>=c&&(v=h),C=lh(nr(nr({},t),{},{index:r})),i.push(vi.default.cloneElement(v,{key:"precloned"+ch(v,r),"data-index":r,tabIndex:"-1",className:(0,sh.default)(C,k),"aria-hidden":!C["slick-active"],style:nr(nr({},v.props.style||{}),b),onClick:function(w){v.props&&v.props.onClick&&v.props.onClick(w),t.focusOnSelect&&t.focusOnSelect(x)}}))),a!==t.slidesToShow&&(r=a+g,r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ku(e){return ku=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},ku(e)}var wL=function(t){var r;return t.infinite?r=Math.ceil(t.slideCount/t.slidesToScroll):r=Math.ceil((t.slideCount-t.slidesToShow)/t.slidesToScroll)+1,r},_L=function(e){mL(r,e);var t=pL(r);function r(){return fL(this,r),t.apply(this,arguments)}return hL(r,[{key:"clickHandler",value:function(i,o){o.preventDefault(),this.props.clickHandler(i)}},{key:"render",value:function(){for(var i=this.props,o=i.onMouseEnter,a=i.onMouseOver,c=i.onMouseLeave,d=i.infinite,h=i.slidesToScroll,g=i.slidesToShow,v=i.slideCount,x=i.currentSlide,b=wL({slideCount:v,slidesToScroll:h,slidesToShow:g,infinite:d}),k={onMouseEnter:o,onMouseOver:a,onMouseLeave:c},C=[],E=0;E=j&&x<=w:x===j}),P={message:"dots",index:E,slidesToScroll:h,currentSlide:x},M=this.clickHandler.bind(this,P);C=C.concat(dc.default.createElement("li",{key:E,className:O},dc.default.cloneElement(this.props.customPaging(E),{onClick:M})))}return dc.default.cloneElement(this.props.appendDots(C),uL({className:this.props.dotsClass},k))}}]),r}(dc.default.PureComponent);Nd.Dots=_L;var Os={};function jp(e){return jp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jp(e)}Object.defineProperty(Os,"__esModule",{value:!0});Os.PrevArrow=Os.NextArrow=void 0;var fs=fS(N),dS=fS(Ts),xL=B;function fS(e){return e&&e.__esModule?e:{default:e}}function Cu(){return Cu=Object.assign||function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Eu(e){return Eu=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},Eu(e)}var DL=function(e){pS(r,e);var t=gS(r);function r(){return hS(this,r),t.apply(this,arguments)}return mS(r,[{key:"clickHandler",value:function(i,o){o&&o.preventDefault(),this.props.clickHandler(i,o)}},{key:"render",value:function(){var i={"slick-arrow":!0,"slick-prev":!0},o=this.clickHandler.bind(this,{message:"previous"});!this.props.infinite&&(this.props.currentSlide===0||this.props.slideCount<=this.props.slidesToShow)&&(i["slick-disabled"]=!0,o=null);var a={key:"0","data-role":"none",className:(0,dS.default)(i),style:{display:"block"},onClick:o},c={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount},d;return this.props.prevArrow?d=fs.default.cloneElement(this.props.prevArrow,Du(Du({},a),c)):d=fs.default.createElement("button",Cu({key:"0",type:"button"},a)," ","Previous"),d}}]),r}(fs.default.PureComponent);Os.PrevArrow=DL;var EL=function(e){pS(r,e);var t=gS(r);function r(){return hS(this,r),t.apply(this,arguments)}return mS(r,[{key:"clickHandler",value:function(i,o){o&&o.preventDefault(),this.props.clickHandler(i,o)}},{key:"render",value:function(){var i={"slick-arrow":!0,"slick-next":!0},o=this.clickHandler.bind(this,{message:"next"});(0,xL.canGoNext)(this.props)||(i["slick-disabled"]=!0,o=null);var a={key:"1","data-role":"none",className:(0,dS.default)(i),style:{display:"block"},onClick:o},c={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount},d;return this.props.nextArrow?d=fs.default.cloneElement(this.props.nextArrow,Du(Du({},a),c)):d=fs.default.createElement("button",Cu({key:"1",type:"button"},a)," ","Next"),d}}]),r}(fs.default.PureComponent);Os.NextArrow=EL;var vS=function(){if(typeof Map<"u")return Map;function e(t,r){var n=-1;return t.some(function(i,o){return i[0]===r?(n=o,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),i=this.__entries__[n];return i&&i[1]},t.prototype.set=function(r,n){var i=e(this.__entries__,r);~i?this.__entries__[i][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,i=e(n,r);~i&&n.splice(i,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var i=0,o=this.__entries__;i0},e.prototype.connect_=function(){!Op||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ML?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Op||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,i=RL.some(function(o){return!!~n.indexOf(o)});i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),yS=function(e,t){for(var r=0,n=Object.keys(t);r"u"||!(Element instanceof Object))){if(!(t instanceof Ps(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var r=this.observations_;r.has(t)||(r.set(t,new FL(t)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof Ps(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var r=this.observations_;r.has(t)&&(r.delete(t),r.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(r){r.isActive()&&t.activeObservations_.push(r)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,r=this.activeObservations_.map(function(n){return new VL(n.target,n.broadcastRect())});this.callback_.call(t,r,t),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),_S=typeof WeakMap<"u"?new WeakMap:new vS,xS=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=LL.getInstance(),n=new WL(t,r,this);_S.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){xS.prototype[e]=function(){var t;return(t=_S.get(this))[e].apply(t,arguments)}});var UL=function(){return typeof ju.ResizeObserver<"u"?ju.ResizeObserver:xS}();const BL=Object.freeze(Object.defineProperty({__proto__:null,default:UL},Symbol.toStringTag,{value:"Module"})),GL=XE(BL);Object.defineProperty(Ld,"__esModule",{value:!0});Ld.InnerSlider=void 0;var Qt=_l(N),XL=_l(Jx),KL=_l(z4),QL=_l(Ts),rt=B,qL=Id,ZL=Nd,D1=Os,JL=_l(GL);function _l(e){return e&&e.__esModule?e:{default:e}}function Ou(e){return Ou=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ou(e)}function Pu(){return Pu=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function t3(e,t){if(e==null)return{};var r={},n=Object.keys(e),i,o;for(o=0;o=0)&&(r[i]=e[i]);return r}function E1(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function de(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ru(e){return Ru=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},Ru(e)}function Se(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var l3=function(e){i3(r,e);var t=o3(r);function r(n){var i;r3(this,r),i=t.call(this,n),Se(xe(i),"listRefHandler",function(a){return i.list=a}),Se(xe(i),"trackRefHandler",function(a){return i.track=a}),Se(xe(i),"adaptHeight",function(){if(i.props.adaptiveHeight&&i.list){var a=i.list.querySelector('[data-index="'.concat(i.state.currentSlide,'"]'));i.list.style.height=(0,rt.getHeight)(a)+"px"}}),Se(xe(i),"componentDidMount",function(){if(i.props.onInit&&i.props.onInit(),i.props.lazyLoad){var a=(0,rt.getOnDemandLazySlides)(de(de({},i.props),i.state));a.length>0&&(i.setState(function(d){return{lazyLoadedList:d.lazyLoadedList.concat(a)}}),i.props.onLazyLoad&&i.props.onLazyLoad(a))}var c=de({listRef:i.list,trackRef:i.track},i.props);i.updateState(c,!0,function(){i.adaptHeight(),i.props.autoplay&&i.autoPlay("update")}),i.props.lazyLoad==="progressive"&&(i.lazyLoadTimer=setInterval(i.progressiveLazyLoad,1e3)),i.ro=new JL.default(function(){i.state.animating?(i.onWindowResized(!1),i.callbackTimers.push(setTimeout(function(){return i.onWindowResized()},i.props.speed))):i.onWindowResized()}),i.ro.observe(i.list),document.querySelectorAll&&Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),function(d){d.onfocus=i.props.pauseOnFocus?i.onSlideFocus:null,d.onblur=i.props.pauseOnFocus?i.onSlideBlur:null}),window.addEventListener?window.addEventListener("resize",i.onWindowResized):window.attachEvent("onresize",i.onWindowResized)}),Se(xe(i),"componentWillUnmount",function(){i.animationEndCallback&&clearTimeout(i.animationEndCallback),i.lazyLoadTimer&&clearInterval(i.lazyLoadTimer),i.callbackTimers.length&&(i.callbackTimers.forEach(function(a){return clearTimeout(a)}),i.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",i.onWindowResized):window.detachEvent("onresize",i.onWindowResized),i.autoplayTimer&&clearInterval(i.autoplayTimer),i.ro.disconnect()}),Se(xe(i),"componentDidUpdate",function(a){if(i.checkImagesLoad(),i.props.onReInit&&i.props.onReInit(),i.props.lazyLoad){var c=(0,rt.getOnDemandLazySlides)(de(de({},i.props),i.state));c.length>0&&(i.setState(function(g){return{lazyLoadedList:g.lazyLoadedList.concat(c)}}),i.props.onLazyLoad&&i.props.onLazyLoad(c))}i.adaptHeight();var d=de(de({listRef:i.list,trackRef:i.track},i.props),i.state),h=i.didPropsChange(a);h&&i.updateState(d,h,function(){i.state.currentSlide>=Qt.default.Children.count(i.props.children)&&i.changeSlide({message:"index",index:Qt.default.Children.count(i.props.children)-i.props.slidesToShow,currentSlide:i.state.currentSlide}),i.props.autoplay?i.autoPlay("update"):i.pause("paused")})}),Se(xe(i),"onWindowResized",function(a){i.debouncedResize&&i.debouncedResize.cancel(),i.debouncedResize=(0,KL.default)(function(){return i.resizeWindow(a)},50),i.debouncedResize()}),Se(xe(i),"resizeWindow",function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,c=!!(i.track&&i.track.node);if(c){var d=de(de({listRef:i.list,trackRef:i.track},i.props),i.state);i.updateState(d,a,function(){i.props.autoplay?i.autoPlay("update"):i.pause("paused")}),i.setState({animating:!1}),clearTimeout(i.animationEndCallback),delete i.animationEndCallback}}),Se(xe(i),"updateState",function(a,c,d){var h=(0,rt.initializedState)(a);a=de(de(de({},a),h),{},{slideIndex:h.currentSlide});var g=(0,rt.getTrackLeft)(a);a=de(de({},a),{},{left:g});var v=(0,rt.getTrackCSS)(a);(c||Qt.default.Children.count(i.props.children)!==Qt.default.Children.count(a.children))&&(h.trackStyle=v),i.setState(h,d)}),Se(xe(i),"ssrInit",function(){if(i.props.variableWidth){var a=0,c=0,d=[],h=(0,rt.getPreClones)(de(de(de({},i.props),i.state),{},{slideCount:i.props.children.length})),g=(0,rt.getPostClones)(de(de(de({},i.props),i.state),{},{slideCount:i.props.children.length}));i.props.children.forEach(function(M){d.push(M.props.style.width),a+=M.props.style.width});for(var v=0;v=c&&i.onWindowResized()};if(!h.onclick)h.onclick=function(){return h.parentNode.focus()};else{var v=h.onclick;h.onclick=function(){v(),h.parentNode.focus()}}h.onload||(i.props.lazyLoad?h.onload=function(){i.adaptHeight(),i.callbackTimers.push(setTimeout(i.onWindowResized,i.props.speed))}:(h.onload=g,h.onerror=function(){g(),i.props.onLazyLoadError&&i.props.onLazyLoadError()}))})}),Se(xe(i),"progressiveLazyLoad",function(){for(var a=[],c=de(de({},i.props),i.state),d=i.state.currentSlide;d=-(0,rt.getPreClones)(c);h--)if(i.state.lazyLoadedList.indexOf(h)<0){a.push(h);break}a.length>0?(i.setState(function(g){return{lazyLoadedList:g.lazyLoadedList.concat(a)}}),i.props.onLazyLoad&&i.props.onLazyLoad(a)):i.lazyLoadTimer&&(clearInterval(i.lazyLoadTimer),delete i.lazyLoadTimer)}),Se(xe(i),"slideHandler",function(a){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,d=i.props,h=d.asNavFor,g=d.beforeChange,v=d.onLazyLoad,x=d.speed,b=d.afterChange,k=i.state.currentSlide,C=(0,rt.slideHandler)(de(de(de({index:a},i.props),i.state),{},{trackRef:i.track,useCSS:i.props.useCSS&&!c})),E=C.state,y=C.nextState;if(E){g&&g(k,E.currentSlide);var w=E.lazyLoadedList.filter(function(S){return i.state.lazyLoadedList.indexOf(S)<0});v&&w.length>0&&v(w),!i.props.waitForAnimate&&i.animationEndCallback&&(clearTimeout(i.animationEndCallback),b&&b(k),delete i.animationEndCallback),i.setState(E,function(){h&&i.asNavForIndex!==a&&(i.asNavForIndex=a,h.innerSlider.slideHandler(a)),y&&(i.animationEndCallback=setTimeout(function(){var S=y.animating,j=e3(y,["animating"]);i.setState(j,function(){i.callbackTimers.push(setTimeout(function(){return i.setState({animating:S})},10)),b&&b(E.currentSlide),delete i.animationEndCallback})},x))})}}),Se(xe(i),"changeSlide",function(a){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,d=de(de({},i.props),i.state),h=(0,rt.changeSlide)(d,a);if(!(h!==0&&!h)&&(c===!0?i.slideHandler(h,c):i.slideHandler(h),i.props.autoplay&&i.autoPlay("update"),i.props.focusOnSelect)){var g=i.list.querySelectorAll(".slick-current");g[0]&&g[0].focus()}}),Se(xe(i),"clickHandler",function(a){i.clickable===!1&&(a.stopPropagation(),a.preventDefault()),i.clickable=!0}),Se(xe(i),"keyHandler",function(a){var c=(0,rt.keyHandler)(a,i.props.accessibility,i.props.rtl);c!==""&&i.changeSlide({message:c})}),Se(xe(i),"selectHandler",function(a){i.changeSlide(a)}),Se(xe(i),"disableBodyScroll",function(){var a=function(d){d=d||window.event,d.preventDefault&&d.preventDefault(),d.returnValue=!1};window.ontouchmove=a}),Se(xe(i),"enableBodyScroll",function(){window.ontouchmove=null}),Se(xe(i),"swipeStart",function(a){i.props.verticalSwiping&&i.disableBodyScroll();var c=(0,rt.swipeStart)(a,i.props.swipe,i.props.draggable);c!==""&&i.setState(c)}),Se(xe(i),"swipeMove",function(a){var c=(0,rt.swipeMove)(a,de(de(de({},i.props),i.state),{},{trackRef:i.track,listRef:i.list,slideIndex:i.state.currentSlide}));c&&(c.swiping&&(i.clickable=!1),i.setState(c))}),Se(xe(i),"swipeEnd",function(a){var c=(0,rt.swipeEnd)(a,de(de(de({},i.props),i.state),{},{trackRef:i.track,listRef:i.list,slideIndex:i.state.currentSlide}));if(c){var d=c.triggerSlideHandler;delete c.triggerSlideHandler,i.setState(c),d!==void 0&&(i.slideHandler(d),i.props.verticalSwiping&&i.enableBodyScroll())}}),Se(xe(i),"touchEnd",function(a){i.swipeEnd(a),i.clickable=!0}),Se(xe(i),"slickPrev",function(){i.callbackTimers.push(setTimeout(function(){return i.changeSlide({message:"previous"})},0))}),Se(xe(i),"slickNext",function(){i.callbackTimers.push(setTimeout(function(){return i.changeSlide({message:"next"})},0))}),Se(xe(i),"slickGoTo",function(a){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(a=Number(a),isNaN(a))return"";i.callbackTimers.push(setTimeout(function(){return i.changeSlide({message:"index",index:a,currentSlide:i.state.currentSlide},c)},0))}),Se(xe(i),"play",function(){var a;if(i.props.rtl)a=i.state.currentSlide-i.props.slidesToScroll;else if((0,rt.canGoNext)(de(de({},i.props),i.state)))a=i.state.currentSlide+i.props.slidesToScroll;else return!1;i.slideHandler(a)}),Se(xe(i),"autoPlay",function(a){i.autoplayTimer&&clearInterval(i.autoplayTimer);var c=i.state.autoplaying;if(a==="update"){if(c==="hovered"||c==="focused"||c==="paused")return}else if(a==="leave"){if(c==="paused"||c==="focused")return}else if(a==="blur"&&(c==="paused"||c==="hovered"))return;i.autoplayTimer=setInterval(i.play,i.props.autoplaySpeed+50),i.setState({autoplaying:"playing"})}),Se(xe(i),"pause",function(a){i.autoplayTimer&&(clearInterval(i.autoplayTimer),i.autoplayTimer=null);var c=i.state.autoplaying;a==="paused"?i.setState({autoplaying:"paused"}):a==="focused"?(c==="hovered"||c==="playing")&&i.setState({autoplaying:"focused"}):c==="playing"&&i.setState({autoplaying:"hovered"})}),Se(xe(i),"onDotsOver",function(){return i.props.autoplay&&i.pause("hovered")}),Se(xe(i),"onDotsLeave",function(){return i.props.autoplay&&i.state.autoplaying==="hovered"&&i.autoPlay("leave")}),Se(xe(i),"onTrackOver",function(){return i.props.autoplay&&i.pause("hovered")}),Se(xe(i),"onTrackLeave",function(){return i.props.autoplay&&i.state.autoplaying==="hovered"&&i.autoPlay("leave")}),Se(xe(i),"onSlideFocus",function(){return i.props.autoplay&&i.pause("focused")}),Se(xe(i),"onSlideBlur",function(){return i.props.autoplay&&i.state.autoplaying==="focused"&&i.autoPlay("blur")}),Se(xe(i),"render",function(){var a=(0,QL.default)("slick-slider",i.props.className,{"slick-vertical":i.props.vertical,"slick-initialized":!0}),c=de(de({},i.props),i.state),d=(0,rt.extractObject)(c,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),h=i.props.pauseOnHover;d=de(de({},d),{},{onMouseEnter:h?i.onTrackOver:null,onMouseLeave:h?i.onTrackLeave:null,onMouseOver:h?i.onTrackOver:null,focusOnSelect:i.props.focusOnSelect&&i.clickable?i.selectHandler:null});var g;if(i.props.dots===!0&&i.state.slideCount>=i.props.slidesToShow){var v=(0,rt.extractObject)(c,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),x=i.props.pauseOnDotsHover;v=de(de({},v),{},{clickHandler:i.changeSlide,onMouseEnter:x?i.onDotsLeave:null,onMouseOver:x?i.onDotsOver:null,onMouseLeave:x?i.onDotsLeave:null}),g=Qt.default.createElement(ZL.Dots,v)}var b,k,C=(0,rt.extractObject)(c,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);C.clickHandler=i.changeSlide,i.props.arrows&&(b=Qt.default.createElement(D1.PrevArrow,C),k=Qt.default.createElement(D1.NextArrow,C));var E=null;i.props.vertical&&(E={height:i.state.listHeight});var y=null;i.props.vertical===!1?i.props.centerMode===!0&&(y={padding:"0px "+i.props.centerPadding}):i.props.centerMode===!0&&(y={padding:i.props.centerPadding+" 0px"});var w=de(de({},E),y),S=i.props.touchMove,j={className:"slick-list",style:w,onClick:i.clickHandler,onMouseDown:S?i.swipeStart:null,onMouseMove:i.state.dragging&&S?i.swipeMove:null,onMouseUp:S?i.swipeEnd:null,onMouseLeave:i.state.dragging&&S?i.swipeEnd:null,onTouchStart:S?i.swipeStart:null,onTouchMove:i.state.dragging&&S?i.swipeMove:null,onTouchEnd:S?i.touchEnd:null,onTouchCancel:i.state.dragging&&S?i.swipeEnd:null,onKeyDown:i.props.accessibility?i.keyHandler:null},O={className:a,dir:"ltr",style:i.props.style};return i.props.unslick&&(j={className:"slick-list"},O={className:a}),Qt.default.createElement("div",O,i.props.unslick?"":b,Qt.default.createElement("div",Pu({ref:i.listRefHandler},j),Qt.default.createElement(qL.Track,Pu({ref:i.trackRefHandler},d),i.props.children)),i.props.unslick?"":k,i.props.unslick?"":g)}),i.list=null,i.track=null,i.state=de(de({},XL.default),{},{currentSlide:i.props.initialSlide,slideCount:Qt.default.Children.count(i.props.children)}),i.callbackTimers=[],i.clickable=!0,i.debouncedResize=null;var o=i.ssrInit();return i.state=de(de({},i.state),o),i}return n3(r,[{key:"didPropsChange",value:function(i){for(var o=!1,a=0,c=Object.keys(this.props);a"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function j(R){return j=Object.setPrototypeOf?Object.getPrototypeOf:function(z){return z.__proto__||Object.getPrototypeOf(z)},j(R)}function O(R,$,z){return $ in R?Object.defineProperty(R,$,{value:z,enumerable:!0,configurable:!0,writable:!0}):R[$]=z,R}var P=(0,a.canUseDOM)()&&y3(),M=function(R){k(z,R);var $=E(z);function z(ee){var te;return v(this,z),te=$.call(this,ee),O(w(te),"innerSliderRefHandler",function(G){return te.innerSlider=G}),O(w(te),"slickPrev",function(){return te.innerSlider.slickPrev()}),O(w(te),"slickNext",function(){return te.innerSlider.slickNext()}),O(w(te),"slickGoTo",function(G){var lt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return te.innerSlider.slickGoTo(G,lt)}),O(w(te),"slickPause",function(){return te.innerSlider.pause("paused")}),O(w(te),"slickPlay",function(){return te.innerSlider.autoPlay("play")}),te.state={breakpoint:null},te._responsiveMediaHandlers=[],te}return b(z,[{key:"media",value:function(te,G){P.register(te,G),this._responsiveMediaHandlers.push({query:te,handler:G})}},{key:"componentDidMount",value:function(){var te=this;if(this.props.responsive){var G=this.props.responsive.map(function(je){return je.breakpoint});G.sort(function(je,$e){return je-$e}),G.forEach(function(je,$e){var ht;$e===0?ht=(0,i.default)({minWidth:0,maxWidth:je}):ht=(0,i.default)({minWidth:G[$e-1]+1,maxWidth:je}),(0,a.canUseDOM)()&&te.media(ht,function(){te.setState({breakpoint:je})})});var lt=(0,i.default)({minWidth:G.slice(-1)[0]});(0,a.canUseDOM)()&&this.media(lt,function(){te.setState({breakpoint:null})})}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach(function(te){P.unregister(te.query,te.handler)})}},{key:"render",value:function(){var te=this,G,lt;this.state.breakpoint?(lt=this.props.responsive.filter(function(Fe){return Fe.breakpoint===te.state.breakpoint}),G=lt[0].settings==="unslick"?"unslick":g(g(g({},o.default),this.props),lt[0].settings)):G=g(g({},o.default),this.props),G.centerMode&&(G.slidesToScroll>1,G.slidesToScroll=1),G.fade&&(G.slidesToShow>1,G.slidesToScroll>1,G.slidesToShow=1,G.slidesToScroll=1);var je=r.default.Children.toArray(this.props.children);je=je.filter(function(Fe){return typeof Fe=="string"?!!Fe.trim():!!Fe}),G.variableWidth&&(G.rows>1||G.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),G.variableWidth=!1);for(var $e=[],ht=null,W=0;W=je.length));he+=1)ue.push(r.default.cloneElement(je[he],{key:100*W+10*Q+he,tabIndex:-1,style:{width:"".concat(100/G.slidesPerRow,"%"),display:"inline-block"}}));le.push(r.default.createElement("div",{key:10*W+Q},ue))}G.variableWidth?$e.push(r.default.createElement("div",{key:W,style:{width:ht}},le)):$e.push(r.default.createElement("div",{key:W},le))}if(G==="unslick"){var st="regular slider "+(this.props.className||"");return r.default.createElement("div",{className:st},je)}else $e.length<=G.slidesToShow&&(G.unslick=!0);return r.default.createElement(n.InnerSlider,d({style:this.props.style,ref:this.innerSliderRefHandler},G),$e)}}]),z}(r.default.Component);e.default=M})(Zx);(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(Zx);function r(i){return i&&i.__esModule?i:{default:i}}var n=t.default;e.default=n})(qx);const w3=Uw(qx),fn=f.button` +*/(function(e){(function(){var t={}.hasOwnProperty;function r(){for(var n=[],i=0;i0?1:0):0};B.lazySlidesOnLeft=tS;var rS=function(t){return t.centerMode?Math.floor((t.slidesToShow-1)/2)+1+(parseInt(t.centerPadding)>0?1:0):t.slidesToShow};B.lazySlidesOnRight=rS;var Su=function(t){return t&&t.offsetWidth||0};B.getWidth=Su;var sg=function(t){return t&&t.offsetHeight||0};B.getHeight=sg;var ag=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,n,i,o,a;return n=t.startX-t.curX,i=t.startY-t.curY,o=Math.atan2(i,n),a=Math.round(o*180/Math.PI),a<0&&(a=360-Math.abs(a)),a<=45&&a>=0||a<=360&&a>=315?"left":a>=135&&a<=225?"right":r===!0?a>=35&&a<=135?"up":"down":"vertical"};B.getSwipeDirection=ag;var lg=function(t){var r=!0;return t.infinite||(t.centerMode&&t.currentSlide>=t.slideCount-1||t.slideCount<=t.slidesToShow||t.currentSlide>=t.slideCount-t.slidesToShow)&&(r=!1),r};B.canGoNext=lg;var U4=function(t,r){var n={};return r.forEach(function(i){return n[i]=t[i]}),n};B.extractObject=U4;var B4=function(t){var r=Y4.default.Children.count(t.children),n=t.listRef,i=Math.ceil(Su(n)),o=t.trackRef&&t.trackRef.node,a=Math.ceil(Su(o)),c;if(t.vertical)c=i;else{var d=t.centerMode&&parseInt(t.centerPadding)*2;typeof t.centerPadding=="string"&&t.centerPadding.slice(-1)==="%"&&(d*=i/100),c=Math.ceil((i-d)/t.slidesToShow)}var h=n&&sg(n.querySelector('[data-index="0"]')),g=h*t.slidesToShow,v=t.currentSlide===void 0?t.initialSlide:t.currentSlide;t.rtl&&t.currentSlide===void 0&&(v=r-1-t.initialSlide);var x=t.lazyLoadedList||[],b=ng(Ze(Ze({},t),{},{currentSlide:v,lazyLoadedList:x}));x=x.concat(b);var k={slideCount:r,slideWidth:c,listWidth:i,trackWidth:a,currentSlide:v,slideHeight:h,listHeight:g,lazyLoadedList:x};return t.autoplaying===null&&t.autoplay&&(k.autoplaying="playing"),k};B.initializedState=B4;var G4=function(t){var r=t.waitForAnimate,n=t.animating,i=t.fade,o=t.infinite,a=t.index,c=t.slideCount,d=t.lazyLoad,h=t.currentSlide,g=t.centerMode,v=t.slidesToScroll,x=t.slidesToShow,b=t.useCSS,k=t.lazyLoadedList;if(r&&n)return{};var C=a,E,y,w,S={},T={},O=o?a:eS(a,0,c-1);if(i){if(!o&&(a<0||a>=c))return{};a<0?C=a+c:a>=c&&(C=a-c),d&&k.indexOf(C)<0&&(k=k.concat(C)),S={animating:!0,currentSlide:C,lazyLoadedList:k,targetSlide:C},T={animating:!1,targetSlide:C}}else E=C,C<0?(E=C+c,o?c%v!==0&&(E=c-c%v):E=0):!lg(t)&&C>h?C=E=h:g&&C>=c?(C=o?c:c-1,E=o?0:c-1):C>=c&&(E=C-c,o?c%v!==0&&(E=0):E=c-x),!o&&C+x>=c&&(E=c-x),y=sl(Ze(Ze({},t),{},{slideIndex:C})),w=sl(Ze(Ze({},t),{},{slideIndex:E})),o||(y===w&&(C=E),y=w),d&&(k=k.concat(ng(Ze(Ze({},t),{},{currentSlide:C})))),b?(S={animating:!0,currentSlide:E,trackStyle:cg(Ze(Ze({},t),{},{left:y})),lazyLoadedList:k,targetSlide:O},T={animating:!1,currentSlide:E,trackStyle:ol(Ze(Ze({},t),{},{left:w})),swipeLeft:null,targetSlide:O}):S={currentSlide:E,trackStyle:ol(Ze(Ze({},t),{},{left:w})),lazyLoadedList:k,targetSlide:O};return{state:S,nextState:T}};B.slideHandler=G4;var X4=function(t,r){var n,i,o,a,c,d=t.slidesToScroll,h=t.slidesToShow,g=t.slideCount,v=t.currentSlide,x=t.targetSlide,b=t.lazyLoad,k=t.infinite;if(a=g%d!==0,n=a?0:(g-v)%d,r.message==="previous")o=n===0?d:h-n,c=v-o,b&&!k&&(i=v-o,c=i===-1?g-1:i),k||(c=x-d);else if(r.message==="next")o=n===0?d:n,c=v+o,b&&!k&&(c=(v+d)%g+n),k||(c=x+d);else if(r.message==="dots")c=r.index*r.slidesToScroll;else if(r.message==="children"){if(c=r.index,k){var C=sS(Ze(Ze({},t),{},{targetSlide:c}));c>r.currentSlide&&C==="left"?c=c-g:c10)return{scrolling:!0};c&&(w.swipeLength=$);var z=(d?-1:1)*(w.curX>w.startX?1:-1);c&&(z=w.curY>w.startY?1:-1);var ee=Math.ceil(C/E),te=ag(r.touchObject,c),G=w.swipeLength;return y||(h===0&&(te==="right"||te==="down")||h+1>=ee&&(te==="left"||te==="up")||!lg(r)&&(te==="left"||te==="up"))&&(G=w.swipeLength*g,v===!1&&x&&(x(te),M.edgeDragged=!0)),!b&&S&&(S(te),M.swiped=!0),o?P=R+G*(T/O)*z:d?P=R-G*z:P=R+G*z,c&&(P=R+G*z),M=Ze(Ze({},M),{},{touchObject:w,swipeLeft:P,trackStyle:ol(Ze(Ze({},r),{},{left:P}))}),Math.abs(w.curX-w.startX)10&&(M.swiping=!0,ao(t)),M}};B.swipeMove=q4;var Z4=function(t,r){var n=r.dragging,i=r.swipe,o=r.touchObject,a=r.listWidth,c=r.touchThreshold,d=r.verticalSwiping,h=r.listHeight,g=r.swipeToSlide,v=r.scrolling,x=r.onSwipe,b=r.targetSlide,k=r.currentSlide,C=r.infinite;if(!n)return i&&ao(t),{};var E=d?h/c:a/c,y=ag(o,d),w={dragging:!1,edgeDragged:!1,scrolling:!1,swiping:!1,swiped:!1,swipeLeft:null,touchObject:{}};if(v||!o.swipeLength)return w;if(o.swipeLength>E){ao(t),x&&x(y);var S,T,O=C?k:b;switch(y){case"left":case"up":T=O+_p(r),S=g?wp(r,T):T,w.currentDirection=0;break;case"right":case"down":T=O-_p(r),S=g?wp(r,T):T,w.currentDirection=1;break;default:S=O}w.triggerSlideHandler=S}else{var P=sl(r);w.trackStyle=cg(Ze(Ze({},r),{},{left:P}))}return w};B.swipeEnd=Z4;var nS=function(t){for(var r=t.infinite?t.slideCount*2:t.slideCount,n=t.infinite?t.slidesToShow*-1:0,i=t.infinite?t.slidesToShow*-1:0,o=[];nn[n.length-1])r=n[n.length-1];else for(var o in n){if(rt.swipeLeft*-1)return n=d,!1}else if(d.offsetLeft-r+Su(d)/2>t.swipeLeft*-1)return n=d,!1;return!0}),!n)return 0;var a=t.rtl===!0?t.slideCount-t.currentSlide:t.currentSlide,c=Math.abs(n.dataset.index-a)||1;return c}else return t.slidesToScroll};B.getSlideCount=_p;var Ad=function(t,r){return r.reduce(function(n,i){return n&&t.hasOwnProperty(i)},!0)?null:console.error("Keys Missing:",t)};B.checkSpecKeys=Ad;var ol=function(t){Ad(t,["left","variableWidth","slideCount","slidesToShow","slideWidth"]);var r,n,i=t.slideCount+2*t.slidesToShow;t.vertical?n=i*t.slideHeight:r=oS(t)*t.slideWidth;var o={opacity:1,transition:"",WebkitTransition:""};if(t.useTransform){var a=t.vertical?"translate3d(0px, "+t.left+"px, 0px)":"translate3d("+t.left+"px, 0px, 0px)",c=t.vertical?"translate3d(0px, "+t.left+"px, 0px)":"translate3d("+t.left+"px, 0px, 0px)",d=t.vertical?"translateY("+t.left+"px)":"translateX("+t.left+"px)";o=Ze(Ze({},o),{},{WebkitTransform:a,transform:c,msTransform:d})}else t.vertical?o.top=t.left:o.left=t.left;return t.fade&&(o={opacity:1}),r&&(o.width=r),n&&(o.height=n),window&&!window.addEventListener&&window.attachEvent&&(t.vertical?o.marginTop=t.left+"px":o.marginLeft=t.left+"px"),o};B.getTrackCSS=ol;var cg=function(t){Ad(t,["left","variableWidth","slideCount","slidesToShow","slideWidth","speed","cssEase"]);var r=ol(t);return t.useTransform?(r.WebkitTransition="-webkit-transform "+t.speed+"ms "+t.cssEase,r.transition="transform "+t.speed+"ms "+t.cssEase):t.vertical?r.transition="top "+t.speed+"ms "+t.cssEase:r.transition="left "+t.speed+"ms "+t.cssEase,r};B.getTrackAnimateCSS=cg;var sl=function(t){if(t.unslick)return 0;Ad(t,["slideIndex","trackRef","infinite","centerMode","slideCount","slidesToShow","slidesToScroll","slideWidth","listWidth","variableWidth","slideHeight"]);var r=t.slideIndex,n=t.trackRef,i=t.infinite,o=t.centerMode,a=t.slideCount,c=t.slidesToShow,d=t.slidesToScroll,h=t.slideWidth,g=t.listWidth,v=t.variableWidth,x=t.slideHeight,b=t.fade,k=t.vertical,C=0,E,y,w=0;if(b||t.slideCount===1)return 0;var S=0;if(i?(S=-Ma(t),a%d!==0&&r+d>a&&(S=-(r>a?c-(r-a):a%d)),o&&(S+=parseInt(c/2))):(a%d!==0&&r+d>a&&(S=c-a%d),o&&(S=parseInt(c/2))),C=S*h,w=S*x,k?E=r*x*-1+w:E=r*h*-1+C,v===!0){var T,O=n&&n.node;if(T=r+Ma(t),y=O&&O.childNodes[T],E=y?y.offsetLeft*-1:0,o===!0){T=i?r+Ma(t):r,y=O&&O.children[T],E=0;for(var P=0;Pt.currentSlide?t.targetSlide>t.currentSlide+aS(t)?"left":"right":t.targetSlide0&&(a+=1),i&&r%2===0&&(a+=1),a}return i?0:r-1};B.slidesOnRight=aS;var lS=function(t){var r=t.slidesToShow,n=t.centerMode,i=t.rtl,o=t.centerPadding;if(n){var a=(r-1)/2+1;return parseInt(o)>0&&(a+=1),!i&&r%2===0&&(a+=1),a}return i?r-1:0};B.slidesOnLeft=lS;var J4=function(){return!!(typeof window<"u"&&window.document&&window.document.createElement)};B.canUseDOM=J4;var Id={};function xp(e){return xp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xp(e)}Object.defineProperty(Id,"__esModule",{value:!0});Id.Track=void 0;var vi=cS(N),sh=cS(js),ah=B;function cS(e){return e&&e.__esModule?e:{default:e}}function Sp(){return Sp=Object.assign||function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function bu(e){return bu=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},bu(e)}function w1(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function nr(e){for(var t=1;t=t.slideCount,t.centerMode?(o=Math.floor(t.slidesToShow/2),n=(a-t.currentSlide)%t.slideCount===0,a>t.currentSlide-o-1&&a<=t.currentSlide+o&&(r=!0)):r=t.currentSlide<=a&&a=t.slideCount?c=t.targetSlide-t.slideCount:c=t.targetSlide;var d=a===c;return{"slick-slide":!0,"slick-active":r,"slick-center":n,"slick-cloned":i,"slick-current":d}},sL=function(t){var r={};return(t.variableWidth===void 0||t.variableWidth===!1)&&(r.width=t.slideWidth),t.fade&&(r.position="relative",t.vertical?r.top=-t.index*parseInt(t.slideHeight):r.left=-t.index*parseInt(t.slideWidth),r.opacity=t.currentSlide===t.index?1:0,t.useCSS&&(r.transition="opacity "+t.speed+"ms "+t.cssEase+", visibility "+t.speed+"ms "+t.cssEase)),r},ch=function(t,r){return t.key||r},aL=function(t){var r,n=[],i=[],o=[],a=vi.default.Children.count(t.children),c=(0,ah.lazyStartIndex)(t),d=(0,ah.lazyEndIndex)(t);return vi.default.Children.forEach(t.children,function(h,g){var v,x={message:"children",index:g,slidesToScroll:t.slidesToScroll,currentSlide:t.currentSlide};!t.lazyLoad||t.lazyLoad&&t.lazyLoadedList.indexOf(g)>=0?v=h:v=vi.default.createElement("div",null);var b=sL(nr(nr({},t),{},{index:g})),k=v.props.className||"",C=lh(nr(nr({},t),{},{index:g}));if(n.push(vi.default.cloneElement(v,{key:"original"+ch(v,g),"data-index":g,className:(0,sh.default)(C,k),tabIndex:"-1","aria-hidden":!C["slick-active"],style:nr(nr({outline:"none"},v.props.style||{}),b),onClick:function(w){v.props&&v.props.onClick&&v.props.onClick(w),t.focusOnSelect&&t.focusOnSelect(x)}})),t.infinite&&t.fade===!1){var E=a-g;E<=(0,ah.getPreClones)(t)&&a!==t.slidesToShow&&(r=-E,r>=c&&(v=h),C=lh(nr(nr({},t),{},{index:r})),i.push(vi.default.cloneElement(v,{key:"precloned"+ch(v,r),"data-index":r,tabIndex:"-1",className:(0,sh.default)(C,k),"aria-hidden":!C["slick-active"],style:nr(nr({},v.props.style||{}),b),onClick:function(w){v.props&&v.props.onClick&&v.props.onClick(w),t.focusOnSelect&&t.focusOnSelect(x)}}))),a!==t.slidesToShow&&(r=a+g,r"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function ku(e){return ku=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},ku(e)}var wL=function(t){var r;return t.infinite?r=Math.ceil(t.slideCount/t.slidesToScroll):r=Math.ceil((t.slideCount-t.slidesToShow)/t.slidesToScroll)+1,r},_L=function(e){mL(r,e);var t=pL(r);function r(){return fL(this,r),t.apply(this,arguments)}return hL(r,[{key:"clickHandler",value:function(i,o){o.preventDefault(),this.props.clickHandler(i)}},{key:"render",value:function(){for(var i=this.props,o=i.onMouseEnter,a=i.onMouseOver,c=i.onMouseLeave,d=i.infinite,h=i.slidesToScroll,g=i.slidesToShow,v=i.slideCount,x=i.currentSlide,b=wL({slideCount:v,slidesToScroll:h,slidesToShow:g,infinite:d}),k={onMouseEnter:o,onMouseOver:a,onMouseLeave:c},C=[],E=0;E=T&&x<=w:x===T}),P={message:"dots",index:E,slidesToScroll:h,currentSlide:x},M=this.clickHandler.bind(this,P);C=C.concat(dc.default.createElement("li",{key:E,className:O},dc.default.cloneElement(this.props.customPaging(E),{onClick:M})))}return dc.default.cloneElement(this.props.appendDots(C),uL({className:this.props.dotsClass},k))}}]),r}(dc.default.PureComponent);Nd.Dots=_L;var Os={};function Tp(e){return Tp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tp(e)}Object.defineProperty(Os,"__esModule",{value:!0});Os.PrevArrow=Os.NextArrow=void 0;var fs=fS(N),dS=fS(js),xL=B;function fS(e){return e&&e.__esModule?e:{default:e}}function Cu(){return Cu=Object.assign||function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Eu(e){return Eu=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},Eu(e)}var DL=function(e){pS(r,e);var t=gS(r);function r(){return hS(this,r),t.apply(this,arguments)}return mS(r,[{key:"clickHandler",value:function(i,o){o&&o.preventDefault(),this.props.clickHandler(i,o)}},{key:"render",value:function(){var i={"slick-arrow":!0,"slick-prev":!0},o=this.clickHandler.bind(this,{message:"previous"});!this.props.infinite&&(this.props.currentSlide===0||this.props.slideCount<=this.props.slidesToShow)&&(i["slick-disabled"]=!0,o=null);var a={key:"0","data-role":"none",className:(0,dS.default)(i),style:{display:"block"},onClick:o},c={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount},d;return this.props.prevArrow?d=fs.default.cloneElement(this.props.prevArrow,Du(Du({},a),c)):d=fs.default.createElement("button",Cu({key:"0",type:"button"},a)," ","Previous"),d}}]),r}(fs.default.PureComponent);Os.PrevArrow=DL;var EL=function(e){pS(r,e);var t=gS(r);function r(){return hS(this,r),t.apply(this,arguments)}return mS(r,[{key:"clickHandler",value:function(i,o){o&&o.preventDefault(),this.props.clickHandler(i,o)}},{key:"render",value:function(){var i={"slick-arrow":!0,"slick-next":!0},o=this.clickHandler.bind(this,{message:"next"});(0,xL.canGoNext)(this.props)||(i["slick-disabled"]=!0,o=null);var a={key:"1","data-role":"none",className:(0,dS.default)(i),style:{display:"block"},onClick:o},c={currentSlide:this.props.currentSlide,slideCount:this.props.slideCount},d;return this.props.nextArrow?d=fs.default.cloneElement(this.props.nextArrow,Du(Du({},a),c)):d=fs.default.createElement("button",Cu({key:"1",type:"button"},a)," ","Next"),d}}]),r}(fs.default.PureComponent);Os.NextArrow=EL;var vS=function(){if(typeof Map<"u")return Map;function e(t,r){var n=-1;return t.some(function(i,o){return i[0]===r?(n=o,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),i=this.__entries__[n];return i&&i[1]},t.prototype.set=function(r,n){var i=e(this.__entries__,r);~i?this.__entries__[i][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,i=e(n,r);~i&&n.splice(i,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var i=0,o=this.__entries__;i0},e.prototype.connect_=function(){!Op||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ML?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Op||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,i=RL.some(function(o){return!!~n.indexOf(o)});i&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),yS=function(e,t){for(var r=0,n=Object.keys(t);r"u"||!(Element instanceof Object))){if(!(t instanceof Ps(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var r=this.observations_;r.has(t)||(r.set(t,new FL(t)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(t instanceof Ps(t).Element))throw new TypeError('parameter 1 is not of type "Element".');var r=this.observations_;r.has(t)&&(r.delete(t),r.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach(function(r){r.isActive()&&t.activeObservations_.push(r)})},e.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,r=this.activeObservations_.map(function(n){return new VL(n.target,n.broadcastRect())});this.callback_.call(t,r,t),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),_S=typeof WeakMap<"u"?new WeakMap:new vS,xS=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=LL.getInstance(),n=new WL(t,r,this);_S.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){xS.prototype[e]=function(){var t;return(t=_S.get(this))[e].apply(t,arguments)}});var UL=function(){return typeof Tu.ResizeObserver<"u"?Tu.ResizeObserver:xS}();const BL=Object.freeze(Object.defineProperty({__proto__:null,default:UL},Symbol.toStringTag,{value:"Module"})),GL=XE(BL);Object.defineProperty(Ld,"__esModule",{value:!0});Ld.InnerSlider=void 0;var Qt=_l(N),XL=_l(Jx),KL=_l(z4),QL=_l(js),rt=B,qL=Id,ZL=Nd,D1=Os,JL=_l(GL);function _l(e){return e&&e.__esModule?e:{default:e}}function Ou(e){return Ou=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ou(e)}function Pu(){return Pu=Object.assign||function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}function t3(e,t){if(e==null)return{};var r={},n=Object.keys(e),i,o;for(o=0;o=0)&&(r[i]=e[i]);return r}function E1(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function de(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Ru(e){return Ru=Object.setPrototypeOf?Object.getPrototypeOf:function(r){return r.__proto__||Object.getPrototypeOf(r)},Ru(e)}function Se(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var l3=function(e){i3(r,e);var t=o3(r);function r(n){var i;r3(this,r),i=t.call(this,n),Se(xe(i),"listRefHandler",function(a){return i.list=a}),Se(xe(i),"trackRefHandler",function(a){return i.track=a}),Se(xe(i),"adaptHeight",function(){if(i.props.adaptiveHeight&&i.list){var a=i.list.querySelector('[data-index="'.concat(i.state.currentSlide,'"]'));i.list.style.height=(0,rt.getHeight)(a)+"px"}}),Se(xe(i),"componentDidMount",function(){if(i.props.onInit&&i.props.onInit(),i.props.lazyLoad){var a=(0,rt.getOnDemandLazySlides)(de(de({},i.props),i.state));a.length>0&&(i.setState(function(d){return{lazyLoadedList:d.lazyLoadedList.concat(a)}}),i.props.onLazyLoad&&i.props.onLazyLoad(a))}var c=de({listRef:i.list,trackRef:i.track},i.props);i.updateState(c,!0,function(){i.adaptHeight(),i.props.autoplay&&i.autoPlay("update")}),i.props.lazyLoad==="progressive"&&(i.lazyLoadTimer=setInterval(i.progressiveLazyLoad,1e3)),i.ro=new JL.default(function(){i.state.animating?(i.onWindowResized(!1),i.callbackTimers.push(setTimeout(function(){return i.onWindowResized()},i.props.speed))):i.onWindowResized()}),i.ro.observe(i.list),document.querySelectorAll&&Array.prototype.forEach.call(document.querySelectorAll(".slick-slide"),function(d){d.onfocus=i.props.pauseOnFocus?i.onSlideFocus:null,d.onblur=i.props.pauseOnFocus?i.onSlideBlur:null}),window.addEventListener?window.addEventListener("resize",i.onWindowResized):window.attachEvent("onresize",i.onWindowResized)}),Se(xe(i),"componentWillUnmount",function(){i.animationEndCallback&&clearTimeout(i.animationEndCallback),i.lazyLoadTimer&&clearInterval(i.lazyLoadTimer),i.callbackTimers.length&&(i.callbackTimers.forEach(function(a){return clearTimeout(a)}),i.callbackTimers=[]),window.addEventListener?window.removeEventListener("resize",i.onWindowResized):window.detachEvent("onresize",i.onWindowResized),i.autoplayTimer&&clearInterval(i.autoplayTimer),i.ro.disconnect()}),Se(xe(i),"componentDidUpdate",function(a){if(i.checkImagesLoad(),i.props.onReInit&&i.props.onReInit(),i.props.lazyLoad){var c=(0,rt.getOnDemandLazySlides)(de(de({},i.props),i.state));c.length>0&&(i.setState(function(g){return{lazyLoadedList:g.lazyLoadedList.concat(c)}}),i.props.onLazyLoad&&i.props.onLazyLoad(c))}i.adaptHeight();var d=de(de({listRef:i.list,trackRef:i.track},i.props),i.state),h=i.didPropsChange(a);h&&i.updateState(d,h,function(){i.state.currentSlide>=Qt.default.Children.count(i.props.children)&&i.changeSlide({message:"index",index:Qt.default.Children.count(i.props.children)-i.props.slidesToShow,currentSlide:i.state.currentSlide}),i.props.autoplay?i.autoPlay("update"):i.pause("paused")})}),Se(xe(i),"onWindowResized",function(a){i.debouncedResize&&i.debouncedResize.cancel(),i.debouncedResize=(0,KL.default)(function(){return i.resizeWindow(a)},50),i.debouncedResize()}),Se(xe(i),"resizeWindow",function(){var a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!0,c=!!(i.track&&i.track.node);if(c){var d=de(de({listRef:i.list,trackRef:i.track},i.props),i.state);i.updateState(d,a,function(){i.props.autoplay?i.autoPlay("update"):i.pause("paused")}),i.setState({animating:!1}),clearTimeout(i.animationEndCallback),delete i.animationEndCallback}}),Se(xe(i),"updateState",function(a,c,d){var h=(0,rt.initializedState)(a);a=de(de(de({},a),h),{},{slideIndex:h.currentSlide});var g=(0,rt.getTrackLeft)(a);a=de(de({},a),{},{left:g});var v=(0,rt.getTrackCSS)(a);(c||Qt.default.Children.count(i.props.children)!==Qt.default.Children.count(a.children))&&(h.trackStyle=v),i.setState(h,d)}),Se(xe(i),"ssrInit",function(){if(i.props.variableWidth){var a=0,c=0,d=[],h=(0,rt.getPreClones)(de(de(de({},i.props),i.state),{},{slideCount:i.props.children.length})),g=(0,rt.getPostClones)(de(de(de({},i.props),i.state),{},{slideCount:i.props.children.length}));i.props.children.forEach(function(M){d.push(M.props.style.width),a+=M.props.style.width});for(var v=0;v=c&&i.onWindowResized()};if(!h.onclick)h.onclick=function(){return h.parentNode.focus()};else{var v=h.onclick;h.onclick=function(){v(),h.parentNode.focus()}}h.onload||(i.props.lazyLoad?h.onload=function(){i.adaptHeight(),i.callbackTimers.push(setTimeout(i.onWindowResized,i.props.speed))}:(h.onload=g,h.onerror=function(){g(),i.props.onLazyLoadError&&i.props.onLazyLoadError()}))})}),Se(xe(i),"progressiveLazyLoad",function(){for(var a=[],c=de(de({},i.props),i.state),d=i.state.currentSlide;d=-(0,rt.getPreClones)(c);h--)if(i.state.lazyLoadedList.indexOf(h)<0){a.push(h);break}a.length>0?(i.setState(function(g){return{lazyLoadedList:g.lazyLoadedList.concat(a)}}),i.props.onLazyLoad&&i.props.onLazyLoad(a)):i.lazyLoadTimer&&(clearInterval(i.lazyLoadTimer),delete i.lazyLoadTimer)}),Se(xe(i),"slideHandler",function(a){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,d=i.props,h=d.asNavFor,g=d.beforeChange,v=d.onLazyLoad,x=d.speed,b=d.afterChange,k=i.state.currentSlide,C=(0,rt.slideHandler)(de(de(de({index:a},i.props),i.state),{},{trackRef:i.track,useCSS:i.props.useCSS&&!c})),E=C.state,y=C.nextState;if(E){g&&g(k,E.currentSlide);var w=E.lazyLoadedList.filter(function(S){return i.state.lazyLoadedList.indexOf(S)<0});v&&w.length>0&&v(w),!i.props.waitForAnimate&&i.animationEndCallback&&(clearTimeout(i.animationEndCallback),b&&b(k),delete i.animationEndCallback),i.setState(E,function(){h&&i.asNavForIndex!==a&&(i.asNavForIndex=a,h.innerSlider.slideHandler(a)),y&&(i.animationEndCallback=setTimeout(function(){var S=y.animating,T=e3(y,["animating"]);i.setState(T,function(){i.callbackTimers.push(setTimeout(function(){return i.setState({animating:S})},10)),b&&b(E.currentSlide),delete i.animationEndCallback})},x))})}}),Se(xe(i),"changeSlide",function(a){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,d=de(de({},i.props),i.state),h=(0,rt.changeSlide)(d,a);if(!(h!==0&&!h)&&(c===!0?i.slideHandler(h,c):i.slideHandler(h),i.props.autoplay&&i.autoPlay("update"),i.props.focusOnSelect)){var g=i.list.querySelectorAll(".slick-current");g[0]&&g[0].focus()}}),Se(xe(i),"clickHandler",function(a){i.clickable===!1&&(a.stopPropagation(),a.preventDefault()),i.clickable=!0}),Se(xe(i),"keyHandler",function(a){var c=(0,rt.keyHandler)(a,i.props.accessibility,i.props.rtl);c!==""&&i.changeSlide({message:c})}),Se(xe(i),"selectHandler",function(a){i.changeSlide(a)}),Se(xe(i),"disableBodyScroll",function(){var a=function(d){d=d||window.event,d.preventDefault&&d.preventDefault(),d.returnValue=!1};window.ontouchmove=a}),Se(xe(i),"enableBodyScroll",function(){window.ontouchmove=null}),Se(xe(i),"swipeStart",function(a){i.props.verticalSwiping&&i.disableBodyScroll();var c=(0,rt.swipeStart)(a,i.props.swipe,i.props.draggable);c!==""&&i.setState(c)}),Se(xe(i),"swipeMove",function(a){var c=(0,rt.swipeMove)(a,de(de(de({},i.props),i.state),{},{trackRef:i.track,listRef:i.list,slideIndex:i.state.currentSlide}));c&&(c.swiping&&(i.clickable=!1),i.setState(c))}),Se(xe(i),"swipeEnd",function(a){var c=(0,rt.swipeEnd)(a,de(de(de({},i.props),i.state),{},{trackRef:i.track,listRef:i.list,slideIndex:i.state.currentSlide}));if(c){var d=c.triggerSlideHandler;delete c.triggerSlideHandler,i.setState(c),d!==void 0&&(i.slideHandler(d),i.props.verticalSwiping&&i.enableBodyScroll())}}),Se(xe(i),"touchEnd",function(a){i.swipeEnd(a),i.clickable=!0}),Se(xe(i),"slickPrev",function(){i.callbackTimers.push(setTimeout(function(){return i.changeSlide({message:"previous"})},0))}),Se(xe(i),"slickNext",function(){i.callbackTimers.push(setTimeout(function(){return i.changeSlide({message:"next"})},0))}),Se(xe(i),"slickGoTo",function(a){var c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(a=Number(a),isNaN(a))return"";i.callbackTimers.push(setTimeout(function(){return i.changeSlide({message:"index",index:a,currentSlide:i.state.currentSlide},c)},0))}),Se(xe(i),"play",function(){var a;if(i.props.rtl)a=i.state.currentSlide-i.props.slidesToScroll;else if((0,rt.canGoNext)(de(de({},i.props),i.state)))a=i.state.currentSlide+i.props.slidesToScroll;else return!1;i.slideHandler(a)}),Se(xe(i),"autoPlay",function(a){i.autoplayTimer&&clearInterval(i.autoplayTimer);var c=i.state.autoplaying;if(a==="update"){if(c==="hovered"||c==="focused"||c==="paused")return}else if(a==="leave"){if(c==="paused"||c==="focused")return}else if(a==="blur"&&(c==="paused"||c==="hovered"))return;i.autoplayTimer=setInterval(i.play,i.props.autoplaySpeed+50),i.setState({autoplaying:"playing"})}),Se(xe(i),"pause",function(a){i.autoplayTimer&&(clearInterval(i.autoplayTimer),i.autoplayTimer=null);var c=i.state.autoplaying;a==="paused"?i.setState({autoplaying:"paused"}):a==="focused"?(c==="hovered"||c==="playing")&&i.setState({autoplaying:"focused"}):c==="playing"&&i.setState({autoplaying:"hovered"})}),Se(xe(i),"onDotsOver",function(){return i.props.autoplay&&i.pause("hovered")}),Se(xe(i),"onDotsLeave",function(){return i.props.autoplay&&i.state.autoplaying==="hovered"&&i.autoPlay("leave")}),Se(xe(i),"onTrackOver",function(){return i.props.autoplay&&i.pause("hovered")}),Se(xe(i),"onTrackLeave",function(){return i.props.autoplay&&i.state.autoplaying==="hovered"&&i.autoPlay("leave")}),Se(xe(i),"onSlideFocus",function(){return i.props.autoplay&&i.pause("focused")}),Se(xe(i),"onSlideBlur",function(){return i.props.autoplay&&i.state.autoplaying==="focused"&&i.autoPlay("blur")}),Se(xe(i),"render",function(){var a=(0,QL.default)("slick-slider",i.props.className,{"slick-vertical":i.props.vertical,"slick-initialized":!0}),c=de(de({},i.props),i.state),d=(0,rt.extractObject)(c,["fade","cssEase","speed","infinite","centerMode","focusOnSelect","currentSlide","lazyLoad","lazyLoadedList","rtl","slideWidth","slideHeight","listHeight","vertical","slidesToShow","slidesToScroll","slideCount","trackStyle","variableWidth","unslick","centerPadding","targetSlide","useCSS"]),h=i.props.pauseOnHover;d=de(de({},d),{},{onMouseEnter:h?i.onTrackOver:null,onMouseLeave:h?i.onTrackLeave:null,onMouseOver:h?i.onTrackOver:null,focusOnSelect:i.props.focusOnSelect&&i.clickable?i.selectHandler:null});var g;if(i.props.dots===!0&&i.state.slideCount>=i.props.slidesToShow){var v=(0,rt.extractObject)(c,["dotsClass","slideCount","slidesToShow","currentSlide","slidesToScroll","clickHandler","children","customPaging","infinite","appendDots"]),x=i.props.pauseOnDotsHover;v=de(de({},v),{},{clickHandler:i.changeSlide,onMouseEnter:x?i.onDotsLeave:null,onMouseOver:x?i.onDotsOver:null,onMouseLeave:x?i.onDotsLeave:null}),g=Qt.default.createElement(ZL.Dots,v)}var b,k,C=(0,rt.extractObject)(c,["infinite","centerMode","currentSlide","slideCount","slidesToShow","prevArrow","nextArrow"]);C.clickHandler=i.changeSlide,i.props.arrows&&(b=Qt.default.createElement(D1.PrevArrow,C),k=Qt.default.createElement(D1.NextArrow,C));var E=null;i.props.vertical&&(E={height:i.state.listHeight});var y=null;i.props.vertical===!1?i.props.centerMode===!0&&(y={padding:"0px "+i.props.centerPadding}):i.props.centerMode===!0&&(y={padding:i.props.centerPadding+" 0px"});var w=de(de({},E),y),S=i.props.touchMove,T={className:"slick-list",style:w,onClick:i.clickHandler,onMouseDown:S?i.swipeStart:null,onMouseMove:i.state.dragging&&S?i.swipeMove:null,onMouseUp:S?i.swipeEnd:null,onMouseLeave:i.state.dragging&&S?i.swipeEnd:null,onTouchStart:S?i.swipeStart:null,onTouchMove:i.state.dragging&&S?i.swipeMove:null,onTouchEnd:S?i.touchEnd:null,onTouchCancel:i.state.dragging&&S?i.swipeEnd:null,onKeyDown:i.props.accessibility?i.keyHandler:null},O={className:a,dir:"ltr",style:i.props.style};return i.props.unslick&&(T={className:"slick-list"},O={className:a}),Qt.default.createElement("div",O,i.props.unslick?"":b,Qt.default.createElement("div",Pu({ref:i.listRefHandler},T),Qt.default.createElement(qL.Track,Pu({ref:i.trackRefHandler},d),i.props.children)),i.props.unslick?"":k,i.props.unslick?"":g)}),i.list=null,i.track=null,i.state=de(de({},XL.default),{},{currentSlide:i.props.initialSlide,slideCount:Qt.default.Children.count(i.props.children)}),i.callbackTimers=[],i.clickable=!0,i.debouncedResize=null;var o=i.ssrInit();return i.state=de(de({},i.state),o),i}return n3(r,[{key:"didPropsChange",value:function(i){for(var o=!1,a=0,c=Object.keys(this.props);a"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function T(R){return T=Object.setPrototypeOf?Object.getPrototypeOf:function(z){return z.__proto__||Object.getPrototypeOf(z)},T(R)}function O(R,$,z){return $ in R?Object.defineProperty(R,$,{value:z,enumerable:!0,configurable:!0,writable:!0}):R[$]=z,R}var P=(0,a.canUseDOM)()&&y3(),M=function(R){k(z,R);var $=E(z);function z(ee){var te;return v(this,z),te=$.call(this,ee),O(w(te),"innerSliderRefHandler",function(G){return te.innerSlider=G}),O(w(te),"slickPrev",function(){return te.innerSlider.slickPrev()}),O(w(te),"slickNext",function(){return te.innerSlider.slickNext()}),O(w(te),"slickGoTo",function(G){var lt=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;return te.innerSlider.slickGoTo(G,lt)}),O(w(te),"slickPause",function(){return te.innerSlider.pause("paused")}),O(w(te),"slickPlay",function(){return te.innerSlider.autoPlay("play")}),te.state={breakpoint:null},te._responsiveMediaHandlers=[],te}return b(z,[{key:"media",value:function(te,G){P.register(te,G),this._responsiveMediaHandlers.push({query:te,handler:G})}},{key:"componentDidMount",value:function(){var te=this;if(this.props.responsive){var G=this.props.responsive.map(function(Te){return Te.breakpoint});G.sort(function(Te,$e){return Te-$e}),G.forEach(function(Te,$e){var ht;$e===0?ht=(0,i.default)({minWidth:0,maxWidth:Te}):ht=(0,i.default)({minWidth:G[$e-1]+1,maxWidth:Te}),(0,a.canUseDOM)()&&te.media(ht,function(){te.setState({breakpoint:Te})})});var lt=(0,i.default)({minWidth:G.slice(-1)[0]});(0,a.canUseDOM)()&&this.media(lt,function(){te.setState({breakpoint:null})})}}},{key:"componentWillUnmount",value:function(){this._responsiveMediaHandlers.forEach(function(te){P.unregister(te.query,te.handler)})}},{key:"render",value:function(){var te=this,G,lt;this.state.breakpoint?(lt=this.props.responsive.filter(function(Fe){return Fe.breakpoint===te.state.breakpoint}),G=lt[0].settings==="unslick"?"unslick":g(g(g({},o.default),this.props),lt[0].settings)):G=g(g({},o.default),this.props),G.centerMode&&(G.slidesToScroll>1,G.slidesToScroll=1),G.fade&&(G.slidesToShow>1,G.slidesToScroll>1,G.slidesToShow=1,G.slidesToScroll=1);var Te=r.default.Children.toArray(this.props.children);Te=Te.filter(function(Fe){return typeof Fe=="string"?!!Fe.trim():!!Fe}),G.variableWidth&&(G.rows>1||G.slidesPerRow>1)&&(console.warn("variableWidth is not supported in case of rows > 1 or slidesPerRow > 1"),G.variableWidth=!1);for(var $e=[],ht=null,W=0;W=Te.length));he+=1)ue.push(r.default.cloneElement(Te[he],{key:100*W+10*Q+he,tabIndex:-1,style:{width:"".concat(100/G.slidesPerRow,"%"),display:"inline-block"}}));le.push(r.default.createElement("div",{key:10*W+Q},ue))}G.variableWidth?$e.push(r.default.createElement("div",{key:W,style:{width:ht}},le)):$e.push(r.default.createElement("div",{key:W},le))}if(G==="unslick"){var st="regular slider "+(this.props.className||"");return r.default.createElement("div",{className:st},Te)}else $e.length<=G.slidesToShow&&(G.unslick=!0);return r.default.createElement(n.InnerSlider,d({style:this.props.style,ref:this.innerSliderRefHandler},G),$e)}}]),z}(r.default.Component);e.default=M})(Zx);(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(Zx);function r(i){return i&&i.__esModule?i:{default:i}}var n=t.default;e.default=n})(qx);const w3=Uw(qx),fn=f.button` padding-block: 0.12rem; padding-inline: 0.34rem; color: inherit; @@ -515,7 +515,7 @@ Error generating stack: `+o.message+` font-size: 0.18rem; line-height: 0.32rem; cursor: pointer; -`,A1="/zh-cn/assets/distributed-storage-bg-0c137d00.png",_3="/zh-cn/assets/data-access-bg-16d9313d.png",x3="/zh-cn/assets/metadata-management-bg-208ca887.png",S3="/zh-cn/assets/hardware-acceleration-bg-0f801c4e.png",b3="/zh-cn/assets/open-source-bg-83537308.png",k3="/zh-cn/assets/fox-icon-09b1199e.svg",C3="/zh-cn/assets/right-arrow-2ae8803b.svg",D3=[{key:"new-honors",label:"新闻/荣誉",url:"/news-honor-dynamic",content:{type:"text",content:"达坦科技所获荣誉及相关新闻"}},{key:"event-preview",label:"活动预告",url:"/events",content:{type:"text",content:"Virtual Meetings & Meetups 线上会议及分享的预告"}},{key:"highlight-review",label:"精彩回顾",url:"/highlights",content:{type:"text",content:"直播分享或Meetups精彩回顾"}}],{Heading:E3,Paragraph:j3}=Me,{CNHead1:T3}=E3,{CNBodyLarge:O3}=j3,P3=e=>{switch(e){case"distributed-storage":return A1;case"data-access":return _3;case"metadata-management":return x3;case"hardware-acceleration":return S3;case"open-source":return b3;default:return A1}},R3=f.div` +`,A1="/zh-cn/assets/distributed-storage-bg-0c137d00.png",_3="/zh-cn/assets/data-access-bg-16d9313d.png",x3="/zh-cn/assets/metadata-management-bg-208ca887.png",S3="/zh-cn/assets/hardware-acceleration-bg-0f801c4e.png",b3="/zh-cn/assets/open-source-bg-83537308.png",k3="/zh-cn/assets/fox-icon-09b1199e.svg",C3="/zh-cn/assets/right-arrow-2ae8803b.svg",D3=[{key:"new-honors",label:"新闻/荣誉",url:"/news-honor-dynamic",content:{type:"text",content:"达坦科技所获荣誉及相关新闻"}},{key:"event-preview",label:"活动预告",url:"/events",content:{type:"text",content:"Virtual Meetings & Meetups 线上会议及分享的预告"}},{key:"highlight-review",label:"精彩回顾",url:"/highlights",content:{type:"text",content:"直播分享或Meetups精彩回顾"}}],{Heading:E3,Paragraph:T3}=Me,{CNHead1:j3}=E3,{CNBodyLarge:O3}=T3,P3=e=>{switch(e){case"distributed-storage":return A1;case"data-access":return _3;case"metadata-management":return x3;case"hardware-acceleration":return S3;case"open-source":return b3;default:return A1}},R3=f.div` color: #fff; background-size: cover; padding-top: 0.72rem; @@ -565,21 +565,21 @@ Error generating stack: `+o.message+` `,z3=f.img` height: 0.3rem; margin-right: 0.27rem; -`,Y3=f.p` +`,H3=f.p` margin-right: 0.1rem; font-size: 0.14rem; line-height: 0.26rem; color: ${e=>e.theme.secondary08}; cursor: pointer; -`,H3=f.img` +`,Y3=f.img` width: 0.14rem; cursor: pointer; `,F3=f.p` font-size: 0.16rem; line-height: 0.3rem; -`,V3=new Map([["distributed-storage","company1"],["data-access","/solutions/data-access"],["metadata-management","/solutions/metadata-management"],["hardware-acceleration","/solutions"],["open-source","/resources1"]]),W3=()=>{const e=wt();return l.jsx(L3,{children:D3.map(({key:t,label:r,content:n,url:i})=>l.jsx(A3,{children:l.jsxs(I3,{children:[l.jsxs(N3,{children:[l.jsx($3,{children:r}),l.jsx(z3,{src:k3}),l.jsx(Y3,{onClick:()=>{e(i)},children:"更多"}),l.jsx(H3,{src:C3})]}),n.type==="ul"?null:l.jsx(F3,{children:n.content})]})},t))})},U3=({items:e})=>{const t=wt(),{key:r,title:n,description:i}=e;return l.jsx(R3,{bg:r,children:l.jsxs(M3,{children:[l.jsx(T3,{style:{marginBottom:"0.32rem"},children:n}),l.jsx(O3,{style:{maxWidth:"6.12rem",textAlign:"center",marginBottom:"0.7rem"},children:i}),l.jsx(fn,{style:{marginBottom:"1.49rem"},onClick:()=>{t(V3.get(r))},children:"了解更多"}),l.jsx(W3,{})]})})},B3=f.div` +`,V3=new Map([["distributed-storage","company1"],["data-access","/solutions/data-access"],["metadata-management","/solutions/metadata-management"],["hardware-acceleration","/solutions"],["open-source","/resources1"]]),W3=()=>{const e=wt();return l.jsx(L3,{children:D3.map(({key:t,label:r,content:n,url:i})=>l.jsx(A3,{children:l.jsxs(I3,{children:[l.jsxs(N3,{children:[l.jsx($3,{children:r}),l.jsx(z3,{src:k3}),l.jsx(H3,{onClick:()=>{e(i)},children:"更多"}),l.jsx(Y3,{src:C3})]}),n.type==="ul"?null:l.jsx(F3,{children:n.content})]})},t))})},U3=({items:e})=>{const t=wt(),{key:r,title:n,description:i}=e;return l.jsx(R3,{bg:r,children:l.jsxs(M3,{children:[l.jsx(j3,{style:{marginBottom:"0.32rem"},children:n}),l.jsx(O3,{style:{maxWidth:"6.12rem",textAlign:"center",marginBottom:"0.7rem"},children:i}),l.jsx(fn,{style:{marginBottom:"1.49rem"},onClick:()=>{t(V3.get(r))},children:"了解更多"}),l.jsx(W3,{})]})})},B3=f.div` background-color: #000; -`,G3={dots:!0,infinite:!0,speed:1e3,slidesToShow:1,slidesToScroll:1,arrows:!1,fade:!0,autoplay:!0,autoplaySpeed:6e3,pauseOnFocus:!0},X3=({items:e})=>l.jsx(B3,{children:l.jsx(w3,{...G3,children:e.map(t=>l.jsx(U3,{items:t},t.key))})}),K3="/zh-cn/assets/logo-dark-027b6609.svg",Q3="/zh-cn/assets/xline-logo-126dc1a3.svg",I1="/zh-cn/assets/cone-62ca8bad.png",{Heading:q3,Paragraph:Z3}=Me,{CNHead4:zd,CNTitleLarge:J3}=q3,{CNBodyLarge:Yd}=Z3,eA=f.section` +`,G3={dots:!0,infinite:!0,speed:1e3,slidesToShow:1,slidesToScroll:1,arrows:!1,fade:!0,autoplay:!0,autoplaySpeed:6e3,pauseOnFocus:!0},X3=({items:e})=>l.jsx(B3,{children:l.jsx(w3,{...G3,children:e.map(t=>l.jsx(U3,{items:t},t.key))})}),K3="/zh-cn/assets/logo-dark-027b6609.svg",Q3="/zh-cn/assets/xline-logo-126dc1a3.svg",I1="/zh-cn/assets/cone-62ca8bad.png",{Heading:q3,Paragraph:Z3}=Me,{CNHead4:zd,CNTitleLarge:J3}=q3,{CNBodyLarge:Hd}=Z3,eA=f.section` background: #ededf6; `,tA=f.div` display: flex; @@ -632,13 +632,13 @@ Error generating stack: `+o.message+` align-self: flex-end; `,uA=f(zd)` color: #000; -`,dA=f(Yd)` +`,dA=f(Hd)` width: 90%; padding-bottom: 0.14rem; `,fA=f(zd)` color: #000; padding-bottom: 0.14rem; -`,hA=f(Yd)` +`,hA=f(Hd)` width: 70%; text-align: right; padding-bottom: 0.14rem; @@ -666,38 +666,38 @@ Error generating stack: `+o.message+` transform: rotate(80deg); `,yA=f(zd)` color: #000; -`,wA=f(Yd)` +`,wA=f(Hd)` padding-bottom: 0.35rem; `,_A=f.ul` padding-bottom: 0.3rem; color: #7680dd; `,ph=f(J3)` padding-bottom: 0.05rem; -`,gh=f(Yd)` +`,gh=f(Hd)` padding-bottom: 0.05rem; color: ${e=>e.theme.themeDark}; -`,vh=f.div``,Hd=f.div` +`,vh=f.div``,Yd=f.div` position: absolute; width: 0.36rem; height: 0.36rem; background-color: transparent; border-radius: 0.18rem; -`,N1=f(Hd)` +`,N1=f(Yd)` top: -0.02rem; left: -0.02rem; border-left: 0.03rem solid #767ee5; transform: rotate(45deg); -`,$1=f(Hd)` +`,$1=f(Yd)` bottom: -0.02rem; left: -0.02rem; border-left: 0.03rem solid #767ee5; transform: rotate(-45deg); -`,xA=f(Hd)` +`,xA=f(Yd)` top: -0.02rem; right: -0.02rem; border-right: 0.03rem solid #767ee5; transform: rotate(-45deg); -`,SA=f(Hd)` +`,SA=f(Yd)` bottom: -0.02rem; right: -0.02rem; border-right: 0.03rem solid #767ee5; @@ -730,37 +730,37 @@ Error generating stack: `+o.message+` right: 0.13rem; width: 90%; background: linear-gradient(90deg, #9966cc, #767ee5); -`,jA=f(zs)` +`,TA=f(zs)` bottom: -0.03rem; left: 0.13rem; width: 100%; background: linear-gradient(90deg, #9966cc, #767ee5); -`,Ys=f.div` +`,Hs=f.div` position: absolute; width: 0.16rem; height: 0.16rem; border-radius: 50%; -`,TA=f(Ys)` +`,jA=f(Hs)` top: calc(-0.08rem - 0.02rem); right: 5%; background: #9966cc; -`,OA=f(Ys)` +`,OA=f(Hs)` bottom: calc(-0.08rem - 0.02rem); right: 28%; background: #9966cc; -`,PA=f(Ys)` +`,PA=f(Hs)` top: calc(-0.08rem - 0.01rem); right: 10%; background: #767ee5; -`,RA=f(Ys)` +`,RA=f(Hs)` bottom: calc(-0.08rem - 0.01rem); left: 8%; background: #9966cc; -`,MA=f(Ys)` +`,MA=f(Hs)` top: calc(-0.08rem - 0.02rem); left: 10%; background: #767ee5; -`,LA=f(Ys)` +`,LA=f(Hs)` bottom: calc(-0.08rem - 0.01rem); right: -2%; background: #767ee5; @@ -783,7 +783,7 @@ Error generating stack: `+o.message+` height: 0.22rem; background: #7680dd; border-radius: 50%; -`,kS=()=>{const e=wt();return l.jsx(eA,{children:l.jsxs(tA,{children:[l.jsx(rA,{children:"开源产品"}),l.jsxs(nA,{id:"datenlord",children:[l.jsxs(sA,{children:[l.jsx(cA,{src:K3}),l.jsx(uA,{children:"DatenLord"}),l.jsxs(dA,{children:["DatenLord 是一套",l.jsx("span",{style:{color:"#7680DD"},children:"跨云跨数据中心的存储解决方案"}),",帮助企业实现高效的跨云跨数据中心的存储访问。该方案为用户提供了丰富的系统结构,包括 Posix 文件接口, KV接口和面向对象存储接口等,用户可以根据需求选择适合自己的方式。DatenLord 使用了软硬件融合的方式,充分发挥软硬件的性能潜力,实现了极致的数据传输和读写性能。"]}),l.jsx(fn,{style:{width:"max-content",color:"#fff"},onClick:()=>window.location.href="https://github.com/datenlord/datenlord",children:"了解更多"})]}),l.jsxs(vh,{children:[l.jsx(bA,{}),l.jsx(DA,{}),l.jsx(N1,{}),l.jsx($1,{}),l.jsx(TA,{}),l.jsx(OA,{})]})]}),l.jsxs(iA,{id:"xline",children:[l.jsxs(aA,{children:[l.jsx(mA,{src:Q3}),l.jsxs(pA,{children:[l.jsx(fA,{children:"Xline开源分布式KV存储系统"}),l.jsx(hA,{children:"保证数据在跨数据中心,跨云访问时的一致性, 方便业务系统实现多地多中心多活部署。"}),l.jsx(fn,{style:{width:"max-content",color:"#fff"},onClick:()=>window.location.href="https://xline.cloud/",children:"了解更多"})]}),l.jsxs(AA,{children:[l.jsx(z1,{}),l.jsx(IA,{}),l.jsx(z1,{})]})]}),l.jsxs(vh,{children:[l.jsx(kA,{}),l.jsx(EA,{}),l.jsx(xA,{}),l.jsx(SA,{}),l.jsx(PA,{}),l.jsx(RA,{}),l.jsx(gA,{src:I1}),l.jsx(vA,{src:I1})]})]}),l.jsxs(oA,{id:"rdma",children:[l.jsxs(lA,{children:[l.jsx(yA,{children:"RDMA"}),l.jsx(wA,{children:"跨云场景下,网络对数据访问的性能影响最为突出,DatenLord采用高性能网络RDMA来降低延迟并提高带宽。RDMA方面我们有多个相关的开源项目:"}),l.jsxs(_A,{children:[l.jsx(ph,{as:"li",children:"async-rdma"}),l.jsx(gh,{children:"是用Rust封装的RDMA异步API库,它为编写RDMA应用程序提供高级抽象和异步API接口。"}),l.jsx(ph,{as:"li",children:"open-rdma"}),l.jsx(gh,{children:"是RDMA协议的开源硬件实现,采用Bluespec和SpinalHDL实现,目前主要实现了RoCEv2协议,此外,我们还进行一些特定功能的拓展来提升RDMA的传输效率。"}),l.jsx(ph,{as:"li",children:"roce-sim"}),l.jsx(gh,{children:"是一套验证RDMA协议的软件框架,方便测试RDMA硬件的正确性,即是否符合RoCEv2协议的要求。"})]}),l.jsx(fn,{style:{width:"max-content",color:"#fff"},onClick:()=>{e("/rdma")},children:"了解更多"})]}),l.jsxs(vh,{children:[l.jsx(CA,{}),l.jsx(jA,{}),l.jsx(N1,{}),l.jsx($1,{}),l.jsx(MA,{}),l.jsx(LA,{})]})]})]})})},CS="/zh-cn/assets/icon-cpu-f816a729.svg",DS="/zh-cn/assets/icon-inbox-c658ae9a.svg",{Heading:NA,Paragraph:$A}=Me,{CNHead4:ES}=NA,{CNBodyLarge:zA,CNMarkSmall:YA}=$A,HA=f.section` +`,kS=()=>{const e=wt();return l.jsx(eA,{children:l.jsxs(tA,{children:[l.jsx(rA,{children:"开源产品"}),l.jsxs(nA,{id:"datenlord",children:[l.jsxs(sA,{children:[l.jsx(cA,{src:K3}),l.jsx(uA,{children:"DatenLord"}),l.jsxs(dA,{children:["DatenLord 是一套",l.jsx("span",{style:{color:"#7680DD"},children:"跨云跨数据中心的存储解决方案"}),",帮助企业实现高效的跨云跨数据中心的存储访问。该方案为用户提供了丰富的系统结构,包括 Posix 文件接口, KV接口和面向对象存储接口等,用户可以根据需求选择适合自己的方式。DatenLord 使用了软硬件融合的方式,充分发挥软硬件的性能潜力,实现了极致的数据传输和读写性能。"]}),l.jsx(fn,{style:{width:"max-content",color:"#fff"},onClick:()=>window.location.href="https://github.com/datenlord/datenlord",children:"了解更多"})]}),l.jsxs(vh,{children:[l.jsx(bA,{}),l.jsx(DA,{}),l.jsx(N1,{}),l.jsx($1,{}),l.jsx(jA,{}),l.jsx(OA,{})]})]}),l.jsxs(iA,{id:"xline",children:[l.jsxs(aA,{children:[l.jsx(mA,{src:Q3}),l.jsxs(pA,{children:[l.jsx(fA,{children:"Xline开源分布式KV存储系统"}),l.jsx(hA,{children:"保证数据在跨数据中心,跨云访问时的一致性, 方便业务系统实现多地多中心多活部署。"}),l.jsx(fn,{style:{width:"max-content",color:"#fff"},onClick:()=>window.location.href="https://xline.cloud/",children:"了解更多"})]}),l.jsxs(AA,{children:[l.jsx(z1,{}),l.jsx(IA,{}),l.jsx(z1,{})]})]}),l.jsxs(vh,{children:[l.jsx(kA,{}),l.jsx(EA,{}),l.jsx(xA,{}),l.jsx(SA,{}),l.jsx(PA,{}),l.jsx(RA,{}),l.jsx(gA,{src:I1}),l.jsx(vA,{src:I1})]})]}),l.jsxs(oA,{id:"rdma",children:[l.jsxs(lA,{children:[l.jsx(yA,{children:"RDMA"}),l.jsx(wA,{children:"跨云场景下,网络对数据访问的性能影响最为突出,DatenLord采用高性能网络RDMA来降低延迟并提高带宽。RDMA方面我们有多个相关的开源项目:"}),l.jsxs(_A,{children:[l.jsx(ph,{as:"li",children:"async-rdma"}),l.jsx(gh,{children:"是用Rust封装的RDMA异步API库,它为编写RDMA应用程序提供高级抽象和异步API接口。"}),l.jsx(ph,{as:"li",children:"open-rdma"}),l.jsx(gh,{children:"是RDMA协议的开源硬件实现,采用Bluespec和SpinalHDL实现,目前主要实现了RoCEv2协议,此外,我们还进行一些特定功能的拓展来提升RDMA的传输效率。"}),l.jsx(ph,{as:"li",children:"roce-sim"}),l.jsx(gh,{children:"是一套验证RDMA协议的软件框架,方便测试RDMA硬件的正确性,即是否符合RoCEv2协议的要求。"})]}),l.jsx(fn,{style:{width:"max-content",color:"#fff"},onClick:()=>{e("/rdma")},children:"了解更多"})]}),l.jsxs(vh,{children:[l.jsx(CA,{}),l.jsx(TA,{}),l.jsx(N1,{}),l.jsx($1,{}),l.jsx(MA,{}),l.jsx(LA,{})]})]})]})})},CS="/zh-cn/assets/icon-cpu-f816a729.svg",DS="/zh-cn/assets/icon-inbox-c658ae9a.svg",{Heading:NA,Paragraph:$A}=Me,{CNHead4:ES}=NA,{CNBodyLarge:zA,CNMarkSmall:HA}=$A,YA=f.section` background: #fff; `,FA=f.div` max-width: 1440px; @@ -814,7 +814,7 @@ Error generating stack: `+o.message+` border: 0.01rem solid ${e=>e.theme.secondary01} } -`,BA=f(YA)` +`,BA=f(HA)` color: ${e=>e.theme.secondary01}; `,GA=f(ES)` width: 90%; @@ -864,7 +864,7 @@ Error generating stack: `+o.message+` height: 90%; `,tI=f.ul` padding-left: 0.18rem; -`,rI=f(zA)``,nI=[{key:"open-source-diploma-internship",icon:CS,iconBg:"#FDCB6E",label_en:"Open Source Project Internship",label_zh:"开源毕业设计实习",url:"",content:[{key:"first",label:"体验透明开源和知识共享带来的乐趣,并在社区的反馈中获得技术成长。"},{key:"second",label:"弥合学校和工业界实践的脱节和差距,系统梳理学校的知识结构,并运用到具有影响力的时间项目中。"},{key:"third",label:"手把手获得行业内专家、教授、学者的点评以及前沿科研项目的合作机会。"},{key:"forth",label:"在硬核的开源技术社区自我展示的机会是同学升学以及就业最佳、最强有力的背书。"}]},{key:"hardware-design-learning-community",icon:DS,iconBg:"#7680DD",label_en:"Hardware Design Learning Community",label_zh:"硬件设计学习社区",url:"mit",content:[{key:"first",label:"理解数字芯片设计的精髓,提升设计能力,是能否胜任数字芯片设计工作的关键。"},{key:"second",label:"系统学习计算机体系结构相关知识,为将来走上数字芯片设计岗位打下坚实的基础。"},{key:"third",label:"学习社区的课程考核以Lab实践的完成度作为标准,要求所有Lab和Project实现既定功能并通过仿真验证。"},{key:"forth",label:"通过动手项目来验证学习的成果,培养出兼具理论和实操能力的数字芯片设计人才。"}]}],iI=()=>{const e=wt();return l.jsx(HA,{children:l.jsxs(FA,{children:[l.jsx(VA,{children:"学习社区"}),l.jsx(WA,{children:nI.map(({key:t,icon:r,iconBg:n,label_en:i,label_zh:o,url:a,content:c})=>l.jsxs(UA,{children:[l.jsxs(XA,{children:[l.jsx(JA,{bg:n,children:l.jsx(eI,{src:r})}),l.jsxs(KA,{children:[l.jsx(Fd,{bg:n}),l.jsx(QA,{bg:n}),l.jsx(qA,{bg:n}),l.jsx(ZA,{bg:n})]})]}),l.jsx(BA,{children:i}),l.jsx(GA,{onClick:()=>e(a),children:o}),l.jsx(tI,{children:c.map(({key:d,label:h})=>l.jsx(rI,{as:"li",children:h},d))})]},t))})]})})},oI="/zh-cn/assets/andreas-0ee099e2.png",sI="/zh-cn/assets/bruno-thethe-4458e86e.png",aI="/zh-cn/assets/mahdi-bafande-9bcc200e.png",{Heading:lI,Paragraph:cI}=Me,{Heading3:uI,CNHead4:dI}=lI,{CNBodyLarge:fI}=cI,hI=f.section` +`,rI=f(zA)``,nI=[{key:"open-source-diploma-internship",icon:CS,iconBg:"#FDCB6E",label_en:"Open Source Project Internship",label_zh:"开源毕业设计实习",url:"",content:[{key:"first",label:"体验透明开源和知识共享带来的乐趣,并在社区的反馈中获得技术成长。"},{key:"second",label:"弥合学校和工业界实践的脱节和差距,系统梳理学校的知识结构,并运用到具有影响力的时间项目中。"},{key:"third",label:"手把手获得行业内专家、教授、学者的点评以及前沿科研项目的合作机会。"},{key:"forth",label:"在硬核的开源技术社区自我展示的机会是同学升学以及就业最佳、最强有力的背书。"}]},{key:"hardware-design-learning-community",icon:DS,iconBg:"#7680DD",label_en:"Hardware Design Learning Community",label_zh:"硬件设计学习社区",url:"mit",content:[{key:"first",label:"理解数字芯片设计的精髓,提升设计能力,是能否胜任数字芯片设计工作的关键。"},{key:"second",label:"系统学习计算机体系结构相关知识,为将来走上数字芯片设计岗位打下坚实的基础。"},{key:"third",label:"学习社区的课程考核以Lab实践的完成度作为标准,要求所有Lab和Project实现既定功能并通过仿真验证。"},{key:"forth",label:"通过动手项目来验证学习的成果,培养出兼具理论和实操能力的数字芯片设计人才。"}]}],iI=()=>{const e=wt();return l.jsx(YA,{children:l.jsxs(FA,{children:[l.jsx(VA,{children:"学习社区"}),l.jsx(WA,{children:nI.map(({key:t,icon:r,iconBg:n,label_en:i,label_zh:o,url:a,content:c})=>l.jsxs(UA,{children:[l.jsxs(XA,{children:[l.jsx(JA,{bg:n,children:l.jsx(eI,{src:r})}),l.jsxs(KA,{children:[l.jsx(Fd,{bg:n}),l.jsx(QA,{bg:n}),l.jsx(qA,{bg:n}),l.jsx(ZA,{bg:n})]})]}),l.jsx(BA,{children:i}),l.jsx(GA,{onClick:()=>e(a),children:o}),l.jsx(tI,{children:c.map(({key:d,label:h})=>l.jsx(rI,{as:"li",children:h},d))})]},t))})]})})},oI="/zh-cn/assets/andreas-0ee099e2.png",sI="/zh-cn/assets/bruno-thethe-4458e86e.png",aI="/zh-cn/assets/mahdi-bafande-9bcc200e.png",{Heading:lI,Paragraph:cI}=Me,{Heading3:uI,CNHead4:dI}=lI,{CNBodyLarge:fI}=cI,hI=f.section` background: #f7f7f9; `,mI=f.div` max-width: 1440px; @@ -902,7 +902,7 @@ Error generating stack: `+o.message+` color: #fff; `,wh=f(fI)` color: #d9dbef; -`,jS=()=>l.jsx(hI,{id:"usage-scenarios",children:l.jsxs(mI,{children:[l.jsx(pI,{children:"使用场景"}),l.jsxs(gI,{children:[l.jsxs(vI,{children:[l.jsx(yh,{children:"跨云数据实时备份"}),l.jsx(wh,{children:"尤其针对关键业务应用场景,如数据库。"})]}),l.jsxs(yI,{children:[l.jsx(yh,{children:"跨云数据加载"}),l.jsx(wh,{children:"特别针对人工智能、大数据训练场景。"})]}),l.jsxs(wI,{children:[l.jsx(yh,{children:"跨云应用迁移"}),l.jsx(wh,{children:"尤其针对具有高并发性和业务弹性要求高的场景的应用,如中国的双十一促销活动。"})]})]})]})}),_I="/zh-cn/assets/bg-explore-0e46a645.png",xI="/zh-cn/assets/icon-arrow-right-black-87133825.svg",SI="/zh-cn/assets/icon-arrow-right-white-84c4ff12.svg",{Heading:bI}=Me,{CNHead4:TS}=bI,kI=[{key:"first",content:"我们致力于探索前沿科技,拥抱创新与改变,并做持续的技术分享与思考。",url:"/tech-talk"},{key:"second",content:"我们一直深耕科学前沿技术的研究和软硬件融合创新的实践,并对外持续输出我们的创新观察。",url:"/blogs"}],CI=f.section` +`,TS=()=>l.jsx(hI,{id:"usage-scenarios",children:l.jsxs(mI,{children:[l.jsx(pI,{children:"使用场景"}),l.jsxs(gI,{children:[l.jsxs(vI,{children:[l.jsx(yh,{children:"跨云数据实时备份"}),l.jsx(wh,{children:"尤其针对关键业务应用场景,如数据库。"})]}),l.jsxs(yI,{children:[l.jsx(yh,{children:"跨云数据加载"}),l.jsx(wh,{children:"特别针对人工智能、大数据训练场景。"})]}),l.jsxs(wI,{children:[l.jsx(yh,{children:"跨云应用迁移"}),l.jsx(wh,{children:"尤其针对具有高并发性和业务弹性要求高的场景的应用,如中国的双十一促销活动。"})]})]})]})}),_I="/zh-cn/assets/bg-explore-0e46a645.png",xI="/zh-cn/assets/icon-arrow-right-black-87133825.svg",SI="/zh-cn/assets/icon-arrow-right-white-84c4ff12.svg",{Heading:bI}=Me,{CNHead4:jS}=bI,kI=[{key:"first",content:"我们致力于探索前沿科技,拥抱创新与改变,并做持续的技术分享与思考。",url:"/tech-talk"},{key:"second",content:"我们一直深耕科学前沿技术的研究和软硬件融合创新的实践,并对外持续输出我们的创新观察。",url:"/blogs"}],CI=f.section` background: ${e=>e.theme.themeDark}; background-image: url(${_I}); background-size: cover; @@ -912,11 +912,11 @@ Error generating stack: `+o.message+` padding-top: 1rem; padding-bottom: 1.33rem; padding-inline: 2.28rem; -`,EI=f(TS)` +`,EI=f(jS)` padding-bottom: 1.67rem; color: ${e=>e.theme.secondary02}; text-align: center; -`,jI=f.div` +`,TI=f.div` display: flex; align-items: center; justify-content: space-between; @@ -935,7 +935,7 @@ Error generating stack: `+o.message+` &:last-child { margin-bottom: 0; } -`,TI=f(TS)` +`,jI=f(jS)` max-width: 80%; color: #fff; `,OS=f.div` @@ -949,14 +949,14 @@ Error generating stack: `+o.message+` cursor: pointer; `,OI=f(OS)` background: ${e=>e.theme.secondary08}; -`,Y1=f.img` +`,H1=f.img` width: 0.42rem; height: 0.42rem; -`,PI=({item:e})=>{const t=wt(),[r,n]=N.useState(!1),i=o=>{t(o)};return l.jsxs(jI,{onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),children:[l.jsx(TI,{children:e.content}),r?l.jsx(OI,{onClick:()=>i(e.url),children:l.jsx(Y1,{src:SI})}):l.jsx(OS,{onClick:()=>i(e.url),children:l.jsx(Y1,{src:xI})})]})},RI=()=>l.jsx(CI,{children:l.jsxs(DI,{children:[l.jsx(EI,{children:"前沿探索"}),kI.map(e=>l.jsx(PI,{item:e},e.key))]})}),{Heading:MI,Paragraph:LI}=Me,{Heading6:AI}=MI,{CNBodyMedium:II}=LI,NI=[{key:"distributed-storage",title:"高性能跨云分布式存储",description:"DatenLord旨在通过软硬件深度融合,建立一个统一的存储访问层,为跨云的应用提供高性能和高安全性的存储支持,从而打破跨云之间的隔阂。",url:""},{key:"data-access",title:"统一的高性能多云数据访问",description:"在高性能缓存和高效网络技术的协助下,提供跨云的统一数据访问服务。",url:""},{key:"metadata-management",title:"跨云分布式元数据管理",description:"第一个产业界跨云分布式元数据保证了广域网场景下的高速和强一致性。",url:""},{key:"hardware-acceleration",title:"储存网络的硬件加速",description:"采用RDMA和DPDK来构建高性能网络。",url:""},{key:"open-source",title:"相信开源的力量",description:"吸引分布式系统、Linux内核、开源硬件等相关的,来自开源社区的全球人才。 ",url:""}],$I=f.div` +`,PI=({item:e})=>{const t=wt(),[r,n]=N.useState(!1),i=o=>{t(o)};return l.jsxs(TI,{onMouseEnter:()=>n(!0),onMouseLeave:()=>n(!1),children:[l.jsx(jI,{children:e.content}),r?l.jsx(OI,{onClick:()=>i(e.url),children:l.jsx(H1,{src:SI})}):l.jsx(OS,{onClick:()=>i(e.url),children:l.jsx(H1,{src:xI})})]})},RI=()=>l.jsx(CI,{children:l.jsxs(DI,{children:[l.jsx(EI,{children:"前沿探索"}),kI.map(e=>l.jsx(PI,{item:e},e.key))]})}),{Heading:MI,Paragraph:LI}=Me,{Heading6:AI}=MI,{CNBodyMedium:II}=LI,NI=[{key:"distributed-storage",title:"高性能跨云分布式存储",description:"DatenLord旨在通过软硬件深度融合,建立一个统一的存储访问层,为跨云的应用提供高性能和高安全性的存储支持,从而打破跨云之间的隔阂。",url:""},{key:"data-access",title:"统一的高性能多云数据访问",description:"在高性能缓存和高效网络技术的协助下,提供跨云的统一数据访问服务。",url:""},{key:"metadata-management",title:"跨云分布式元数据管理",description:"第一个产业界跨云分布式元数据保证了广域网场景下的高速和强一致性。",url:""},{key:"hardware-acceleration",title:"储存网络的硬件加速",description:"采用RDMA和DPDK来构建高性能网络。",url:""},{key:"open-source",title:"相信开源的力量",description:"吸引分布式系统、Linux内核、开源硬件等相关的,来自开源社区的全球人才。 ",url:""}],$I=f.div` margin-top: -72px; `,zI=f.section` background: ${e=>e.theme.secondary02}; -`,YI=f.div` +`,HI=f.div` display: flex; justify-content: space-between; align-items: center; @@ -965,7 +965,7 @@ Error generating stack: `+o.message+` padding-top: 0.64rem; padding-bottom: 0.56rem; padding-inline: 1.4rem; -`,HI=f(AI)` +`,YI=f(AI)` width: 50%; `,FI=f.div` margin-right: 0.18rem; @@ -981,7 +981,7 @@ Error generating stack: `+o.message+` `,WI=f.div` display: flex; align-items: center; -`,UI=()=>{const e=wt();return l.jsx(zI,{children:l.jsxs(YI,{children:[l.jsx(HI,{children:"通过软硬件深度融合的方式,满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。"}),l.jsxs(WI,{children:[l.jsx(FI,{children:l.jsx(VI,{children:"立即体验"})}),l.jsx(fn,{style:{color:"#fff",height:"0.52rem"},onClick:()=>e("company2/contact-us"),children:"联系我们"})]})]})})},BI=()=>(N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsxs($I,{children:[l.jsx(X3,{items:NI}),l.jsx(kS,{}),l.jsx(iI,{}),l.jsx(jS,{}),l.jsx(RI,{}),l.jsx(UI,{})]})),{Heading:GI}=Me,{CNHead1:XI,CNTitleLarge:KI}=GI,QI=f.section` +`,UI=()=>{const e=wt();return l.jsx(zI,{children:l.jsxs(HI,{children:[l.jsx(YI,{children:"通过软硬件深度融合的方式,满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。"}),l.jsxs(WI,{children:[l.jsx(FI,{children:l.jsx(VI,{children:"立即体验"})}),l.jsx(fn,{style:{color:"#fff",height:"0.52rem"},onClick:()=>e("company2/contact-us"),children:"联系我们"})]})]})})},BI=()=>(N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsxs($I,{children:[l.jsx(X3,{items:NI}),l.jsx(kS,{}),l.jsx(iI,{}),l.jsx(TS,{}),l.jsx(RI,{}),l.jsx(UI,{})]})),{Heading:GI}=Me,{CNHead1:XI,CNTitleLarge:KI}=GI,QI=f.section` display: flex; flex-direction: column; justify-content: center; @@ -1000,7 +1000,7 @@ Error generating stack: `+o.message+` font-weight: 400; color: #fff; text-align: center; -`,yn=({cover:e,children:t,subTitle:r})=>l.jsxs(QI,{cover:e,children:[l.jsx(qI,{children:t}),r&&l.jsx(ZI,{children:r})]}),JI="/zh-cn/assets/cover-51a016b7.png",H1=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?(t==null||t.scrollIntoView(),window.scrollBy(0,-32)):window.scrollTo(0,0)},[e]),l.jsxs(l.Fragment,{children:[l.jsx(yn,{cover:JI,children:"开源产品"}),l.jsx(kS,{})]})},eN="/zh-cn/assets/cover-2bac0ff4.png",tN="/zh-cn/assets/image1-6c5a6b4b.png",{Heading:rN,Paragraph:nN}=Me,{CNHead4:iN,CNHead5S:oN}=rN,{CNBodyLarge:PS}=nN,sN=f.div` +`,yn=({cover:e,children:t,subTitle:r})=>l.jsxs(QI,{cover:e,children:[l.jsx(qI,{children:t}),r&&l.jsx(ZI,{children:r})]}),JI="/zh-cn/assets/cover-51a016b7.png",Y1=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?(t==null||t.scrollIntoView(),window.scrollBy(0,-32)):window.scrollTo(0,0)},[e]),l.jsxs(l.Fragment,{children:[l.jsx(yn,{cover:JI,children:"开源产品"}),l.jsx(kS,{})]})},eN="/zh-cn/assets/cover-2bac0ff4.png",tN="/zh-cn/assets/image1-6c5a6b4b.png",{Heading:rN,Paragraph:nN}=Me,{CNHead4:iN,CNHead5S:oN}=rN,{CNBodyLarge:PS}=nN,sN=f.div` background: #f7f7f9; `,aN=f.div` max-width: 1440px; @@ -1037,9 +1037,9 @@ Error generating stack: `+o.message+` padding-bottom: 0.58rem; width: 4.18rem; float: right; -`,yN=[{key:"Async-RDMA",title:"Async-RDMA",subTitle:"Async-RDMA是一个框架,为编写远程Remote Direct Memory Access(RDMA)应用程序提供高级抽象和异步API。",main:[{key:1,type:"text",content:"RDMA可以实现从一台机器到另一台机器对内存的直接访问。这可以提高需要低延迟和高吞吐量的应用程序的性能。RDMA支持内核旁路和零拷贝,无需CPU的参与。然而,用低级别的C语言库编写RDMA应用程序往往很困难,而且容易出错。为了让事情变得更简单,我们开发了Async-RDMA,它提供了易于使用的API,隐藏了底层RDMA操作的复杂性。有了Async-RDMA,大多数RDMA操作只需一行代码就能完成。它提供了以下几点主要的功能:"},{key:2,type:"list",items:[{key:1,text:"作为与RDMA端点建立连接的工具。"},{key:2,text:"作为在端点之间传输数据的高级异步API。"},{key:3,text:"作为管理RDMA内存区域的高级API。"},{key:4,text:"作为一个在幕后工作的框架来管理内存区域并异步执行RDMA请求。"}]}],url:"https://github.com/datenlord/async-rdma"},{key:"RoCE-Sim",title:"RoCE-Sim",subTitle:"RoCE-Sim是RoCE v2模拟器,一个用python编写的模拟RoCE v2协议行为的软件。",main:[{key:1,type:"text",content:"RoCE v2(RDMA over Converged Ethernet version 2)是一个网络协议来在以太网上实现远程直接内存访问(RDMA)。它是对于原始RoCE标准的改进,为在以太网上执行RDMA提供了一种更有效且可扩展的方式。"},{key:2,type:"text",content:"RoCE-Sim模拟了RoCE v2协议的数据处理流程,可用于支持RoCE v2协议的设备的端到端验证。模拟器可以灵活地模拟各种正确和错误的RDMA请求和响应数据包,同时通过分析设备的响应数据来决定其是否符合协议要求。"},{key:3,type:"text",content:"该模拟器集成了一个测试框架,开发人员只需编写配置文件来控制模拟器生成、发送、接收和检查数据包,从而有效地完成端端验证工作。"}],url:"https://github.com/datenlord/roce-sim",img:tN},{key:"Open-RDMA",title:"Open-RDMA",subTitle:"Open-RDMA是一个使用Spinal HDL的RoCE v2硬件实现。",main:[{key:1,type:"text",content:"RoCE v2(RDMA over Converged Ethernet version 2)是一个网络协议来在以太网上实现远程直接内存访问(RDMA)。它是对于原始RoCE标准的改进,为在以太网上执行RDMA提供了一种更有效且可扩展的方式。"},{key:2,type:"text",content:"Open-RDMA是RoCEv2的一个开源实现,它利用了敏捷开发和验证方法,以及软硬件协同设计的方法。我们使用Spinal HDL和Bluespec SystemVerilog来实现RoCEv2,利用它们的高级抽象的优势来提高开发效率和减少错误率。我们还使用Cocotb(一种Python验证框架)来进行有效的验证。"},{key:3,type:"text",content:"目前,我们已经实现了该协议的基本框架,并计划实现一些增强功能,如优先级流量控制、拥堵控制以及对组播流量的支持,使其更适合大规模数据中心环境。此外,我们正在探索如何使用形式化方法来对我们的实现进行验证。"}],url:"https://github.com/datenlord/open-rdma"}],wN=({item:e})=>{const{title:t,subTitle:r,img:n,main:i,url:o}=e;return l.jsxs(lN,{children:[l.jsxs(cN,{children:[l.jsx(uN,{}),l.jsx(fN,{children:t}),l.jsx(dN,{})]}),l.jsx(hN,{style:{paddingBottom:"0.41rem",color:"#000"},children:r}),n&&l.jsx(vN,{src:n}),i.map(({key:a,type:c,content:d,items:h})=>c==="text"?l.jsx(mN,{children:d},a):c==="list"?l.jsx(pN,{children:h==null?void 0:h.map(({key:g,text:v})=>l.jsx(gN,{as:"li",children:v},g))},a):null),l.jsx(fn,{style:{color:"#fff",display:"block"},onClick:()=>{window.location.href=`${o}`},children:"了解更多"})]})},_N=()=>(N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsxs(l.Fragment,{children:[l.jsx(yn,{cover:eN,children:"RDMA"}),l.jsx(sN,{children:l.jsx(aN,{children:yN.map(e=>l.jsx(wN,{item:e},e.key))})})]})),xN="/zh-cn/assets/cover-e1b3c9e5.png",SN="/zh-cn/assets/image-4b1d6d29.png",bN=[{key:"data-access",title:"统一的高性能跨云数据访问/解决方案",section1:"云之间的隔阂导致数据隔离和数据碎片化。数据往往被绑定在一个特定的云计算中,无法自由访问。当业务规模较小时,云之间的隔离可能不会构成问题。然而,随着业务的发展,需要经常访问全球多个云和多个数据中心,云障碍导致的数据隔离和数据碎片化成为了业务增长的障碍。",section2:"无论数据存储在哪里,DatenLord都可以通过利用存储器来缓存热数据,从而加速跨云的数据访问,并提供统一的数据管理来实现数据的自动迁移和备份。"},{key:"metadata-management",title:"跨云分布式元数据管理/解决方案",section1:"跨云分布式存储的高延迟性和不一致性:现在的分布式共识协议只限于在单个数据中心使用,跨云分布式共识协议只限于理论研究。在跨云访问数据时,访问速度和一致性将会受到影响。",section2:"第一个产业界的基于共识协议的跨云分布式元数据管理。DatenLord利用异步编程架构,绕过了Linux内核,完全实现了独立内核、自动调度和存储IO的管理。该协议确保了跨数据节点的数据一致性。低延迟的跨云分布式共识协议保证了广域网场景下的高速和强一致性,同时保证系统中没有单点瓶颈。"},{key:"hardware-acceleration",title:"存储网络的硬件加速/解决方案",section1:"基于软件的解决方案的性能瓶颈。跨云通信需要可靠的高速网络和快速的缓存机制。目前在大量的数据已经散布在不同的云供应商和跨云分布的数据中心的情况下,基于软件的的解决方案已经到达性能瓶颈,并且不能再满足该需求。",section2:"硬件加速器。采用硬件敏捷的开发方法来打造定制的硬件;采用RDMA和DPDK建立高性能网络;硬件实现RDMA协议、加密、压缩和编码以及超快速存储证明。"}],{Heading:kN,Paragraph:CN}=Me,{CNHead4:hg,Heading2:DN}=kN,{CNBodyLarge:EN}=CN,jN=f.main` +`,yN=[{key:"Async-RDMA",title:"Async-RDMA",subTitle:"Async-RDMA是一个框架,为编写远程Remote Direct Memory Access(RDMA)应用程序提供高级抽象和异步API。",main:[{key:1,type:"text",content:"RDMA可以实现从一台机器到另一台机器对内存的直接访问。这可以提高需要低延迟和高吞吐量的应用程序的性能。RDMA支持内核旁路和零拷贝,无需CPU的参与。然而,用低级别的C语言库编写RDMA应用程序往往很困难,而且容易出错。为了让事情变得更简单,我们开发了Async-RDMA,它提供了易于使用的API,隐藏了底层RDMA操作的复杂性。有了Async-RDMA,大多数RDMA操作只需一行代码就能完成。它提供了以下几点主要的功能:"},{key:2,type:"list",items:[{key:1,text:"作为与RDMA端点建立连接的工具。"},{key:2,text:"作为在端点之间传输数据的高级异步API。"},{key:3,text:"作为管理RDMA内存区域的高级API。"},{key:4,text:"作为一个在幕后工作的框架来管理内存区域并异步执行RDMA请求。"}]}],url:"https://github.com/datenlord/async-rdma"},{key:"RoCE-Sim",title:"RoCE-Sim",subTitle:"RoCE-Sim是RoCE v2模拟器,一个用python编写的模拟RoCE v2协议行为的软件。",main:[{key:1,type:"text",content:"RoCE v2(RDMA over Converged Ethernet version 2)是一个网络协议来在以太网上实现远程直接内存访问(RDMA)。它是对于原始RoCE标准的改进,为在以太网上执行RDMA提供了一种更有效且可扩展的方式。"},{key:2,type:"text",content:"RoCE-Sim模拟了RoCE v2协议的数据处理流程,可用于支持RoCE v2协议的设备的端到端验证。模拟器可以灵活地模拟各种正确和错误的RDMA请求和响应数据包,同时通过分析设备的响应数据来决定其是否符合协议要求。"},{key:3,type:"text",content:"该模拟器集成了一个测试框架,开发人员只需编写配置文件来控制模拟器生成、发送、接收和检查数据包,从而有效地完成端端验证工作。"}],url:"https://github.com/datenlord/roce-sim",img:tN},{key:"Open-RDMA",title:"Open-RDMA",subTitle:"Open-RDMA是一个使用Spinal HDL的RoCE v2硬件实现。",main:[{key:1,type:"text",content:"RoCE v2(RDMA over Converged Ethernet version 2)是一个网络协议来在以太网上实现远程直接内存访问(RDMA)。它是对于原始RoCE标准的改进,为在以太网上执行RDMA提供了一种更有效且可扩展的方式。"},{key:2,type:"text",content:"Open-RDMA是RoCEv2的一个开源实现,它利用了敏捷开发和验证方法,以及软硬件协同设计的方法。我们使用Spinal HDL和Bluespec SystemVerilog来实现RoCEv2,利用它们的高级抽象的优势来提高开发效率和减少错误率。我们还使用Cocotb(一种Python验证框架)来进行有效的验证。"},{key:3,type:"text",content:"目前,我们已经实现了该协议的基本框架,并计划实现一些增强功能,如优先级流量控制、拥堵控制以及对组播流量的支持,使其更适合大规模数据中心环境。此外,我们正在探索如何使用形式化方法来对我们的实现进行验证。"}],url:"https://github.com/datenlord/open-rdma"}],wN=({item:e})=>{const{title:t,subTitle:r,img:n,main:i,url:o}=e;return l.jsxs(lN,{children:[l.jsxs(cN,{children:[l.jsx(uN,{}),l.jsx(fN,{children:t}),l.jsx(dN,{})]}),l.jsx(hN,{style:{paddingBottom:"0.41rem",color:"#000"},children:r}),n&&l.jsx(vN,{src:n}),i.map(({key:a,type:c,content:d,items:h})=>c==="text"?l.jsx(mN,{children:d},a):c==="list"?l.jsx(pN,{children:h==null?void 0:h.map(({key:g,text:v})=>l.jsx(gN,{as:"li",children:v},g))},a):null),l.jsx(fn,{style:{color:"#fff",display:"block"},onClick:()=>{window.location.href=`${o}`},children:"了解更多"})]})},_N=()=>(N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsxs(l.Fragment,{children:[l.jsx(yn,{cover:eN,children:"RDMA"}),l.jsx(sN,{children:l.jsx(aN,{children:yN.map(e=>l.jsx(wN,{item:e},e.key))})})]})),xN="/zh-cn/assets/cover-e1b3c9e5.png",SN="/zh-cn/assets/image-4b1d6d29.png",bN=[{key:"data-access",title:"统一的高性能跨云数据访问/解决方案",section1:"云之间的隔阂导致数据隔离和数据碎片化。数据往往被绑定在一个特定的云计算中,无法自由访问。当业务规模较小时,云之间的隔离可能不会构成问题。然而,随着业务的发展,需要经常访问全球多个云和多个数据中心,云障碍导致的数据隔离和数据碎片化成为了业务增长的障碍。",section2:"无论数据存储在哪里,DatenLord都可以通过利用存储器来缓存热数据,从而加速跨云的数据访问,并提供统一的数据管理来实现数据的自动迁移和备份。"},{key:"metadata-management",title:"跨云分布式元数据管理/解决方案",section1:"跨云分布式存储的高延迟性和不一致性:现在的分布式共识协议只限于在单个数据中心使用,跨云分布式共识协议只限于理论研究。在跨云访问数据时,访问速度和一致性将会受到影响。",section2:"第一个产业界的基于共识协议的跨云分布式元数据管理。DatenLord利用异步编程架构,绕过了Linux内核,完全实现了独立内核、自动调度和存储IO的管理。该协议确保了跨数据节点的数据一致性。低延迟的跨云分布式共识协议保证了广域网场景下的高速和强一致性,同时保证系统中没有单点瓶颈。"},{key:"hardware-acceleration",title:"存储网络的硬件加速/解决方案",section1:"基于软件的解决方案的性能瓶颈。跨云通信需要可靠的高速网络和快速的缓存机制。目前在大量的数据已经散布在不同的云供应商和跨云分布的数据中心的情况下,基于软件的的解决方案已经到达性能瓶颈,并且不能再满足该需求。",section2:"硬件加速器。采用硬件敏捷的开发方法来打造定制的硬件;采用RDMA和DPDK建立高性能网络;硬件实现RDMA协议、加密、压缩和编码以及超快速存储证明。"}],{Heading:kN,Paragraph:CN}=Me,{CNHead4:hg,Heading2:DN}=kN,{CNBodyLarge:EN}=CN,TN=f.main` background: ${e=>e.theme.secondary02}; -`,TN=f.div` +`,jN=f.div` max-width: 1440px; margin-inline: auto; padding-top: 1rem; @@ -1108,16 +1108,16 @@ Error generating stack: `+o.message+` padding-block: 0.48rem; color: ${e=>e.theme.secondary02}; background: linear-gradient(90deg, #767ee5, #9966cc); -`,YN=f(DN)` +`,HN=f(DN)` padding-bottom: 0.06rem; -`,HN=f(hg)` +`,YN=f(hg)` padding-bottom: 0.4rem; `,FN=f.img` display: block; width: 5.36rem; margin-inline: auto; margin-bottom: 0.58rem; -`,VN=({items:e})=>{const{key:t,title:r,section1:n,section2:i}=e;return l.jsxs(PN,{id:t,children:[l.jsxs(RN,{children:[l.jsx(MN,{}),l.jsx(AN,{children:r}),l.jsx(LN,{})]}),l.jsxs(IN,{children:[l.jsx(F1,{children:n}),l.jsx(NN,{})]}),l.jsx($N,{children:l.jsx(F1,{children:i})})]})},V1=()=>{const e=wt(),{sectionId:t}=gn();return N.useEffect(()=>{const r=document.querySelector(`#${t}`);r?(r==null||r.scrollIntoView(),window.scrollBy(0,-32)):window.scrollTo(0,0)},[t]),l.jsxs(l.Fragment,{children:[l.jsx(yn,{cover:xN,children:"解决方案"}),l.jsxs(jN,{children:[l.jsxs(TN,{children:[l.jsx(ON,{children:"解决方案"}),l.jsx(FN,{src:SN}),bN.map(r=>l.jsx(VN,{items:r},r.key))]}),l.jsxs(zN,{id:"related-resource",children:[l.jsx(YN,{children:"· Related Resources ·"}),l.jsx(HN,{children:"相关资源"}),l.jsx(fn,{style:{background:"#FDCB6E",color:"#fff"},onClick:()=>e("/resources2"),children:"查看资源合集"})]})]})]})},AS="/zh-cn/assets/github-icon-35dda863.svg",WN="/zh-cn/assets/discord-icon-5c46a64b.svg",UN="/zh-cn/assets/illustration-a72d48ba.png",{Heading:BN,Paragraph:GN}=Me,{Heading3:XN,CNHead5S:IS}=BN,{CNBodyLarge:mg,CNBodySmall:KN}=GN,QN=[{key:1,title:"社区—贡献意味着思考和学习",text:"开源不仅仅是在Github上贡献代码。在DatenLord,我们相信:贡献代码(给予)同样是一个思考和学习的过程。在不断收到开源社区反馈的过程中,我们能够构建彼此的信任与合作。我们也想借助于开源的社区平台吸引更多优秀的开发者参与到项目中来。"},{key:2,title:"在Discord上与我们对话",text:"加入我们的开发者社区,构建下一代云原生、跨云的存储系统。",link:{icon:WN,text:"Discord",url:"https://discord.gg/Et7eSBgZ"}},{key:3,title:"在Github中成为贡献者",text:"你在寻找源代码吗,或有一个精彩的想法想要贡献?加入我们在GitHub上的开源项目。",link:{icon:AS,text:"GitHub",url:"https://github.com/datenlord"}}],qN=[{key:1,text:"王恒宇是一名主修计算机科学的研究生。基于在软硬件融合方面的学术兴趣,他加入了async-rdma项目。在社区导师的指导下,他也随着项目的发展而逐步成长,并被邀请在一些实践研讨会上分享他使用Rust开发RDMA的实践经验。",quote:"“我在Async-rdma项目中收获了一段难忘的经历。DatenLord社区氛围很友好,我的导师是一位经验丰富的工程师,他鼓励我在验证我对项目的想法和假设的同时也要关注工程规范。这让我的视角从一个只关注实现产品原型的学生转变为一个同时也关注产品的可维护性和稳定性的专业工程师。”",link_text:"GitHub ID: GTwhy",url:"https://github.com/GTwhy"},{key:2,text:"李弘宇热衷于参与开源社区和Rust相关项目,所以参加了DatenLord的特别项目,想为Rust并入Linux内核添砖加瓦。在社区导师的指导下,他在贡献代码、编写文档和回复上游意见的过程中磨练了自己的Rust技能。",quote:"“在DatenLord中参与Rust for Linux项目的工作很有意义。这是一个友好互助的社区。即使在修改一个很小的bug时,我的导师也鼓励我认真权衡不同的选择。教导我不仅仅是要能够写出代码,更重要的是写出优雅的代码。我在社区中收获到的不仅是理论上的,更是极具实操价值的。”",link_text:"GitHub ID: Richardhongyu",url:"https://github.com/Richardhongyu"}],ZN=f.section` +`,VN=({items:e})=>{const{key:t,title:r,section1:n,section2:i}=e;return l.jsxs(PN,{id:t,children:[l.jsxs(RN,{children:[l.jsx(MN,{}),l.jsx(AN,{children:r}),l.jsx(LN,{})]}),l.jsxs(IN,{children:[l.jsx(F1,{children:n}),l.jsx(NN,{})]}),l.jsx($N,{children:l.jsx(F1,{children:i})})]})},V1=()=>{const e=wt(),{sectionId:t}=gn();return N.useEffect(()=>{const r=document.querySelector(`#${t}`);r?(r==null||r.scrollIntoView(),window.scrollBy(0,-32)):window.scrollTo(0,0)},[t]),l.jsxs(l.Fragment,{children:[l.jsx(yn,{cover:xN,children:"解决方案"}),l.jsxs(TN,{children:[l.jsxs(jN,{children:[l.jsx(ON,{children:"解决方案"}),l.jsx(FN,{src:SN}),bN.map(r=>l.jsx(VN,{items:r},r.key))]}),l.jsxs(zN,{id:"related-resource",children:[l.jsx(HN,{children:"· Related Resources ·"}),l.jsx(YN,{children:"相关资源"}),l.jsx(fn,{style:{background:"#FDCB6E",color:"#fff"},onClick:()=>e("/resources2"),children:"查看资源合集"})]})]})]})},AS="/zh-cn/assets/github-icon-35dda863.svg",WN="/zh-cn/assets/discord-icon-5c46a64b.svg",UN="/zh-cn/assets/illustration-a72d48ba.png",{Heading:BN,Paragraph:GN}=Me,{Heading3:XN,CNHead5S:IS}=BN,{CNBodyLarge:mg,CNBodySmall:KN}=GN,QN=[{key:1,title:"社区—贡献意味着思考和学习",text:"开源不仅仅是在Github上贡献代码。在DatenLord,我们相信:贡献代码(给予)同样是一个思考和学习的过程。在不断收到开源社区反馈的过程中,我们能够构建彼此的信任与合作。我们也想借助于开源的社区平台吸引更多优秀的开发者参与到项目中来。"},{key:2,title:"在Discord上与我们对话",text:"加入我们的开发者社区,构建下一代云原生、跨云的存储系统。",link:{icon:WN,text:"Discord",url:"https://discord.gg/Et7eSBgZ"}},{key:3,title:"在Github中成为贡献者",text:"你在寻找源代码吗,或有一个精彩的想法想要贡献?加入我们在GitHub上的开源项目。",link:{icon:AS,text:"GitHub",url:"https://github.com/datenlord"}}],qN=[{key:1,text:"王恒宇是一名主修计算机科学的研究生。基于在软硬件融合方面的学术兴趣,他加入了async-rdma项目。在社区导师的指导下,他也随着项目的发展而逐步成长,并被邀请在一些实践研讨会上分享他使用Rust开发RDMA的实践经验。",quote:"“我在Async-rdma项目中收获了一段难忘的经历。DatenLord社区氛围很友好,我的导师是一位经验丰富的工程师,他鼓励我在验证我对项目的想法和假设的同时也要关注工程规范。这让我的视角从一个只关注实现产品原型的学生转变为一个同时也关注产品的可维护性和稳定性的专业工程师。”",link_text:"GitHub ID: GTwhy",url:"https://github.com/GTwhy"},{key:2,text:"李弘宇热衷于参与开源社区和Rust相关项目,所以参加了DatenLord的特别项目,想为Rust并入Linux内核添砖加瓦。在社区导师的指导下,他在贡献代码、编写文档和回复上游意见的过程中磨练了自己的Rust技能。",quote:"“在DatenLord中参与Rust for Linux项目的工作很有意义。这是一个友好互助的社区。即使在修改一个很小的bug时,我的导师也鼓励我认真权衡不同的选择。教导我不仅仅是要能够写出代码,更重要的是写出优雅的代码。我在社区中收获到的不仅是理论上的,更是极具实操价值的。”",link_text:"GitHub ID: Richardhongyu",url:"https://github.com/Richardhongyu"}],ZN=f.section` padding-bottom: 1.29rem; `,JN=f.div` color: ${e=>e.theme.secondary02}; @@ -1188,7 +1188,7 @@ Error generating stack: `+o.message+` `,v6=f.img` width: 0.32rem; height: 0.32rem; -`,y6=()=>l.jsxs(ZN,{children:[l.jsx(JN,{children:"Open Source Community"}),l.jsx(e6,{children:"开源社区"}),l.jsxs(t6,{children:[l.jsx(o6,{src:UN}),QN.map(({key:e,title:t,text:r,link:n})=>l.jsxs(r6,{children:[l.jsx(n6,{style:{paddingBottom:"0.23rem"},extra:n&&l.jsxs(s6,{as:"a",href:n.url,children:[l.jsx(a6,{src:n.icon}),l.jsx(l6,{children:n.text})]}),children:t}),l.jsx(i6,{children:r})]},e))]}),l.jsxs(c6,{children:[l.jsx(u6,{style:{paddingBottom:"0.39rem"},children:"社区高光时刻"}),l.jsx(d6,{children:qN.map(({key:e,text:t,quote:r,link_text:n,url:i})=>l.jsxs(f6,{children:[l.jsx(h6,{children:t}),l.jsx(m6,{children:r}),l.jsxs(p6,{children:[l.jsx(g6,{as:"a",href:i,children:n}),l.jsx(v6,{src:AS})]})]},e))})]})]}),w6="/zh-cn/assets/avatar-783be77c.png",{Heading:_6,Paragraph:x6}=Me,{Heading3:NS,CNHead4:S6,CNHead5S:b6,CNHead5:k6}=_6,{CNBodyLarge:C6,CNMarkSmall:D6,CNBodyMedium:E6}=x6,j6=[{key:"open-source-diploma-internship",icon:CS,iconBg:"#FDCB6E",label_en:"Open Source Diploma Internship",label_zh:"开源毕业设计实习",content:[{key:"first",label:"体验透明开源和知识共享带来的乐趣,并在社区的反馈中获得技术成长。"},{key:"second",label:"弥合学校和工业界实践的脱节和差距,系统梳理学校的知识结构,并运用到具有影响力的时间项目中。"},{key:"third",label:"手把手获得行业内专家、教授、学者的点评以及前沿科研项目的合作机会。"},{key:"forth",label:"在硬核的开源技术社区自我展示的机会是同学升学以及就业最佳、最强有力的背书。"}]},{key:"hardware-design-learning-community",icon:DS,iconBg:"#7680DD",label_en:"Hardware Design Learning Community",label_zh:"硬件设计学习社区",content:[{key:"first",label:"理解数字芯片设计的精髓,提升设计能力,是能否胜任数字芯片设计工作的关键。"},{key:"second",label:"系统学习计算机体系结构相关知识,为将来走上数字芯片设计岗位打下坚实的基础。"},{key:"third",label:"学习社区的课程考核以Lab实践的完成度作为标准,要求所有Lab和Project实现既定功能并通过仿真验证。"},{key:"forth",label:"通过动手项目来验证学习的成果,培养出兼具理论和实操能力的数字芯片设计人才。"}]}],T6=[{key:1,text:"参加开源毕设项目是我人生中一段难忘的经历。在这里,我不仅提升了自己的技能,学会与团队成员协同合作,而且有机会投身于实际项目中,亲身体验如何解决实际问题,感受开源精神的力量,并且深入开源社区,与志同道合的同伴们共同探讨世界上最前沿、最具挑战性的工程问题。"},{key:2,text:"参加开源项目的过程中,我有机会在GitHub上积累宝贵的贡献记录。每一次提交代码、每一个解决的问题都会在我的GitHub主页上清晰地呈现出来,成为我技术实力的有力证明。这不仅有助于建立我的个人品牌,还能让潜在雇主一目了然地了解我的能力和成就。"},{key:3,text:"我还结识了我所热爱的行业的专家,拓展人脉资源,为未来的职业发展创造更多机会。我相信,在我的简历上出现丰富的开源项目经验,必将成为我未来求职过程中的一大亮点。欢迎更多的学生朋友和我一起加入开源毕设项目,让我们共同成长,开启一段精彩的技术之旅!"}],O6=f.section` +`,y6=()=>l.jsxs(ZN,{children:[l.jsx(JN,{children:"Open Source Community"}),l.jsx(e6,{children:"开源社区"}),l.jsxs(t6,{children:[l.jsx(o6,{src:UN}),QN.map(({key:e,title:t,text:r,link:n})=>l.jsxs(r6,{children:[l.jsx(n6,{style:{paddingBottom:"0.23rem"},extra:n&&l.jsxs(s6,{as:"a",href:n.url,children:[l.jsx(a6,{src:n.icon}),l.jsx(l6,{children:n.text})]}),children:t}),l.jsx(i6,{children:r})]},e))]}),l.jsxs(c6,{children:[l.jsx(u6,{style:{paddingBottom:"0.39rem"},children:"社区高光时刻"}),l.jsx(d6,{children:qN.map(({key:e,text:t,quote:r,link_text:n,url:i})=>l.jsxs(f6,{children:[l.jsx(h6,{children:t}),l.jsx(m6,{children:r}),l.jsxs(p6,{children:[l.jsx(g6,{as:"a",href:i,children:n}),l.jsx(v6,{src:AS})]})]},e))})]})]}),w6="/zh-cn/assets/avatar-783be77c.png",{Heading:_6,Paragraph:x6}=Me,{Heading3:NS,CNHead4:S6,CNHead5S:b6,CNHead5:k6}=_6,{CNBodyLarge:C6,CNMarkSmall:D6,CNBodyMedium:E6}=x6,T6=[{key:"open-source-diploma-internship",icon:CS,iconBg:"#FDCB6E",label_en:"Open Source Diploma Internship",label_zh:"开源毕业设计实习",content:[{key:"first",label:"体验透明开源和知识共享带来的乐趣,并在社区的反馈中获得技术成长。"},{key:"second",label:"弥合学校和工业界实践的脱节和差距,系统梳理学校的知识结构,并运用到具有影响力的时间项目中。"},{key:"third",label:"手把手获得行业内专家、教授、学者的点评以及前沿科研项目的合作机会。"},{key:"forth",label:"在硬核的开源技术社区自我展示的机会是同学升学以及就业最佳、最强有力的背书。"}]},{key:"hardware-design-learning-community",icon:DS,iconBg:"#7680DD",label_en:"Hardware Design Learning Community",label_zh:"硬件设计学习社区",content:[{key:"first",label:"理解数字芯片设计的精髓,提升设计能力,是能否胜任数字芯片设计工作的关键。"},{key:"second",label:"系统学习计算机体系结构相关知识,为将来走上数字芯片设计岗位打下坚实的基础。"},{key:"third",label:"学习社区的课程考核以Lab实践的完成度作为标准,要求所有Lab和Project实现既定功能并通过仿真验证。"},{key:"forth",label:"通过动手项目来验证学习的成果,培养出兼具理论和实操能力的数字芯片设计人才。"}]}],j6=[{key:1,text:"参加开源毕设项目是我人生中一段难忘的经历。在这里,我不仅提升了自己的技能,学会与团队成员协同合作,而且有机会投身于实际项目中,亲身体验如何解决实际问题,感受开源精神的力量,并且深入开源社区,与志同道合的同伴们共同探讨世界上最前沿、最具挑战性的工程问题。"},{key:2,text:"参加开源项目的过程中,我有机会在GitHub上积累宝贵的贡献记录。每一次提交代码、每一个解决的问题都会在我的GitHub主页上清晰地呈现出来,成为我技术实力的有力证明。这不仅有助于建立我的个人品牌,还能让潜在雇主一目了然地了解我的能力和成就。"},{key:3,text:"我还结识了我所热爱的行业的专家,拓展人脉资源,为未来的职业发展创造更多机会。我相信,在我的简历上出现丰富的开源项目经验,必将成为我未来求职过程中的一大亮点。欢迎更多的学生朋友和我一起加入开源毕设项目,让我们共同成长,开启一段精彩的技术之旅!"}],O6=f.section` `,P6=f.div` color: ${e=>e.theme.secondary02}; font-weight: 400; @@ -1254,9 +1254,9 @@ Error generating stack: `+o.message+` animation: opac 4s infinite; `,z6=f(Vd)` animation-delay: 1s; -`,Y6=f(Vd)` - animation-delay: 2s; `,H6=f(Vd)` + animation-delay: 2s; +`,Y6=f(Vd)` animation-delay: 3s; `,F6=f.div` z-index: 1; @@ -1292,7 +1292,7 @@ Error generating stack: `+o.message+` &:last-child { padding-bottom: 0; } -`,t5=()=>l.jsxs(O6,{children:[l.jsx(P6,{children:"Learning Community"}),l.jsx(R6,{children:"学习社区"}),l.jsx(M6,{children:j6.map(({key:e,icon:t,iconBg:r,label_en:n,label_zh:i,content:o})=>l.jsxs(L6,{children:[l.jsxs(N6,{children:[l.jsx(F6,{bg:r,children:l.jsx(V6,{src:t})}),l.jsxs($6,{children:[l.jsx(Vd,{bg:r}),l.jsx(z6,{bg:r}),l.jsx(Y6,{bg:r}),l.jsx(H6,{bg:r})]})]}),l.jsx(A6,{children:n}),l.jsx(I6,{children:i}),l.jsx(W6,{children:o.map(({key:a,label:c})=>l.jsx(U6,{as:"li",children:c},a))})]},e))}),l.jsx(B6,{style:{paddingBottom:"1.42rem"},children:"学生故事"}),l.jsxs(G6,{children:[l.jsxs(X6,{children:[l.jsx(Q6,{src:w6}),l.jsx(q6,{children:"郑昱笙"}),l.jsx(Z6,{children:"浙江大学"})]}),l.jsx(K6,{children:l.jsx(J6,{children:T6.map(({key:e,text:t})=>l.jsx(e5,{as:"li",children:t},e))})})]})]}),$S="/zh-cn/assets/cover-53180b58.png",r5="/zh-cn/assets/cloud-757dcd86.png",{Heading:n5}=Me,{CNHead4:i5}=n5,o5=f.div` +`,t5=()=>l.jsxs(O6,{children:[l.jsx(P6,{children:"Learning Community"}),l.jsx(R6,{children:"学习社区"}),l.jsx(M6,{children:T6.map(({key:e,icon:t,iconBg:r,label_en:n,label_zh:i,content:o})=>l.jsxs(L6,{children:[l.jsxs(N6,{children:[l.jsx(F6,{bg:r,children:l.jsx(V6,{src:t})}),l.jsxs($6,{children:[l.jsx(Vd,{bg:r}),l.jsx(z6,{bg:r}),l.jsx(H6,{bg:r}),l.jsx(Y6,{bg:r})]})]}),l.jsx(A6,{children:n}),l.jsx(I6,{children:i}),l.jsx(W6,{children:o.map(({key:a,label:c})=>l.jsx(U6,{as:"li",children:c},a))})]},e))}),l.jsx(B6,{style:{paddingBottom:"1.42rem"},children:"学生故事"}),l.jsxs(G6,{children:[l.jsxs(X6,{children:[l.jsx(Q6,{src:w6}),l.jsx(q6,{children:"郑昱笙"}),l.jsx(Z6,{children:"浙江大学"})]}),l.jsx(K6,{children:l.jsx(J6,{children:j6.map(({key:e,text:t})=>l.jsx(e5,{as:"li",children:t},e))})})]})]}),$S="/zh-cn/assets/cover-53180b58.png",r5="/zh-cn/assets/cloud-757dcd86.png",{Heading:n5}=Me,{CNHead4:i5}=n5,o5=f.div` z-index: 1; position: relative; background: #ededf6; @@ -1356,7 +1356,7 @@ Error generating stack: `+o.message+` font-size: 0.145rem; line-height: 0.258rem; color: ${e=>e.theme.secondary02}; -`,D5=()=>{const e=wt();return l.jsx(g5,{id:"tech-share",children:l.jsxs(v5,{children:[l.jsx(y5,{children:"技术分享"}),l.jsx(w5,{children:h5.map(({key:t,cover:r,title:n,text:i,url:o})=>l.jsx(_5,{children:l.jsxs(x5,{onClick:()=>{e(o)},children:[l.jsx(S5,{src:r}),l.jsxs(b5,{children:[l.jsx(k5,{children:n}),l.jsx(C5,{children:i})]})]})},t))})]})})},E5="modulepreload",j5=function(e){return"/zh-cn/"+e},U1={},D=function(t,r,n){if(!r||r.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(r.map(o=>{if(o=j5(o),o in U1)return;U1[o]=!0;const a=o.endsWith(".css"),c=a?'[rel="stylesheet"]':"";if(!!n)for(let g=i.length-1;g>=0;g--){const v=i[g];if(v.href===o&&(!a||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${c}`))return;const h=document.createElement("link");if(h.rel=a?"stylesheet":E5,a||(h.as="script",h.crossOrigin=""),h.href=o,document.head.appendChild(h),a)return new Promise((g,v)=>{h.addEventListener("load",g),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t())},B1="/zh-cn/assets/right-arrow-98730871.svg",G1="/zh-cn/assets/dynamics-test-image-29ac43b9.png",{Heading:T5,Paragraph:O5}=Me,{CNHead4:P5,CNTitleLarge:R5,CNTitleMedium:M5}=T5,{CNBodySmall:zS,CNMarkSmall:L5}=O5,A5=f.section` +`,D5=()=>{const e=wt();return l.jsx(g5,{id:"tech-share",children:l.jsxs(v5,{children:[l.jsx(y5,{children:"技术分享"}),l.jsx(w5,{children:h5.map(({key:t,cover:r,title:n,text:i,url:o})=>l.jsx(_5,{children:l.jsxs(x5,{onClick:()=>{e(o)},children:[l.jsx(S5,{src:r}),l.jsxs(b5,{children:[l.jsx(k5,{children:n}),l.jsx(C5,{children:i})]})]})},t))})]})})},E5="modulepreload",T5=function(e){return"/zh-cn/"+e},U1={},D=function(t,r,n){if(!r||r.length===0)return t();const i=document.getElementsByTagName("link");return Promise.all(r.map(o=>{if(o=T5(o),o in U1)return;U1[o]=!0;const a=o.endsWith(".css"),c=a?'[rel="stylesheet"]':"";if(!!n)for(let g=i.length-1;g>=0;g--){const v=i[g];if(v.href===o&&(!a||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${o}"]${c}`))return;const h=document.createElement("link");if(h.rel=a?"stylesheet":E5,a||(h.as="script",h.crossOrigin=""),h.href=o,document.head.appendChild(h),a)return new Promise((g,v)=>{h.addEventListener("load",g),h.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${o}`)))})})).then(()=>t())},B1="/zh-cn/assets/right-arrow-98730871.svg",G1="/zh-cn/assets/dynamics-test-image-29ac43b9.png",{Heading:j5,Paragraph:O5}=Me,{CNHead4:P5,CNTitleLarge:R5,CNTitleMedium:M5}=j5,{CNBodySmall:zS,CNMarkSmall:L5}=O5,A5=f.section` background: ${e=>e.theme.white00}; `,I5=f.div` max-width: 1440px; @@ -1373,24 +1373,24 @@ Error generating stack: `+o.message+` grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(2, 1fr); grid-gap: 0.21rem 0.32rem; -`,YS=f.div` +`,HS=f.div` position: relative; background: ${e=>e.theme.white00}; overflow: hidden; cursor: pointer; -`,z5=f(YS)` +`,z5=f(HS)` grid-area: 1 / 1 / 3 / 3; border-radius: 0.156rem; box-shadow: 0.234rem 0.156rem 0.781rem rgba(0, 0, 0, 0.1); -`,Y5=f(YS)` +`,H5=f(HS)` border-radius: 0.081rem; box-shadow: 0.121rem 0.08rem 0.403rem rgba(0, 0, 0, 0.1); -`,HS=f.img` +`,YS=f.img` display: block; width: 100%; -`,H5=f(HS)` +`,Y5=f(YS)` /* height: 4.14rem; */ -`,F5=f(HS)` +`,F5=f(YS)` /* height: 1.4rem; */ `,FS=f.div``,V5=f(FS)` padding: 0.24rem 0.28rem 0.33rem; @@ -1445,7 +1445,7 @@ Error generating stack: `+o.message+` display: block; margin-inline: auto; color: #fff; -`,Q1=Object.assign({"/src/articles/events/2022-05-17-RDMA-Software-Interface-High-Level-Package/index.md":()=>D(()=>import("./index-fc5f1793.js"),[]),"/src/articles/events/2022-08-04-When-RDMA-meets-Rust/index.md":()=>D(()=>import("./index-1f6cee43.js"),[]),"/src/articles/events/2022-08-23-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-047539e4.js"),[]),"/src/articles/events/2022-10-11-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-a179aa93.js"),[]),"/src/articles/events/2022-11-11-Datan-Technology-invites-you-who-love-challenges-to-participate-in-Rust-China-Hackathon-2022/index.md":()=>D(()=>import("./index-b9cc4e07.js"),[]),"/src/articles/events/2022-11-24-The-Rust-China-Hackathon-2022-Datan-Technology-Group-Air-Presentation-is-here/index.md":()=>D(()=>import("./index-cf17c7a4.js"),[]),"/src/articles/events/2022-12-08-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-7df3558a.js"),[]),"/src/articles/events/2022-12-08-Welcome-to-sign-up-for-the-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-e197de7f.js"),[]),"/src/articles/events/2023-01-06-Datan-Technology-2023-Open-Source-Graduation-Design-Internship-Recruitment/index.md":()=>D(()=>import("./index-7b1bdbd4.js"),[]),"/src/articles/events/2023-01-12-Welcome-to-join-Datan-Technology-hardware-design-learning-community/index.md":()=>D(()=>import("./index-4e03f569.js"),[]),"/src/articles/events/2023-02-01-Consensus-Algorithms-and-Metadata-Management-for-Cross-Data-Center-Consistency/index.md":()=>D(()=>import("./index-8bcfd31b.js"),[]),"/src/articles/events/2023-03-31-4.8-Beijing-Rust-Meetup-|-Call-For-Presenters/index.md":()=>D(()=>import("./index-faf3ce4f.js"),[]),"/src/articles/events/2023-04-05-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-d2a8186a.js"),[]),"/src/articles/events/2023-05-04-Meet-this-summer|Datan-Technology-invites-you-to-participate-in-the-2023-Open-Source-Summer/index.md":()=>D(()=>import("./index-3dea6c6a.js"),[]),"/src/articles/events/2023-06-11-Countdown-to-Rust-X-DatenLord-l-Rust-China-Conf-2023/index.md":()=>D(()=>import("./index-0c25eea3.js"),[]),"/src/articles/events/2023-07-03-SpinalHDL-usage-and-development-experience-workshop/index.md":()=>D(()=>import("./index-65845b47.js"),[]),"/src/articles/events/2023-08-01-Countdown-to-6-days-l-Opportunities-and-Challenges-The-Development-Trend-of-Generative-AI-and-its-Application-on-the-Ground/index.md":()=>D(()=>import("./index-16f06676.js"),[]),"/src/articles/events/2023-08-15-DatenLord-X-Segmentfault-Live-Stream-Preview-l-CURP-Protocol-in-Industrial-Practice/index.md":()=>D(()=>import("./index-58491811.js"),[]),"/src/articles/events/2023-08-20-Upcoming-Events-l-2nd-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-6a3ed4c3.js"),[]),"/src/articles/events/2023-09-07-The-2nd-Hardware-Agile-Development-and-Methodology-Workshop-l-2023-RISC-V-China-Summit-Concurrent-Events-Successfully-Held/index.md":()=>D(()=>import("./index-a154d453.js"),[]),"/src/articles/events/2023-09-19-MIT-Coursework-Orientation-for-Newcomers/index.md":()=>D(()=>import("./index-5fa4b651.js"),[]),"/src/articles/events/2023-11-09-Exploring-the-Future-of-SpinalHDL-Applications-in-2023-Online-Workshop/index.md":()=>D(()=>import("./index-dfd283a0.js"),[]),"/src/articles/events/2023-11-17-Ding!-You've-received-a-Hackthon-invitation-from-Dartan-Technologies!/index.md":()=>D(()=>import("./index-69ce89cf.js"),[]),"/src/articles/events/2023-12-05-Countdown-to-5-days:-SpinalHDL-application-prospect-exploration-online-seminar/index.md":()=>D(()=>import("./index-24fab036.js"),[]),"/src/articles/events/2023-12-05-Ding!-2023-hackathon-tips-fresh-from-the-oven!-Last-week-to-sign-up-before-it's-too-late!/index.md":()=>D(()=>import("./index-b8dbda9f.js"),[]),"/src/articles/events/2023-12-14-MIT-Architecture-Open-Course-Learning-Community-Version-2.0-is-officially-launched~/index.md":()=>D(()=>import("./index-50ad21f0.js"),[])}),Z5=()=>{const e=wt(),[t,r]=N.useState([]),n=async()=>{const i=await Promise.all(Object.keys(Q1).map(o=>Q1[o]()));r(i.reverse())};return N.useEffect(()=>{n()},[]),l.jsx(A5,{id:"dynamics",children:l.jsxs(I5,{children:[l.jsx(N5,{children:"达坦动态"}),l.jsx($5,{children:t.map(({metadata:i,assetURLs:o},a)=>{const{title:c,date:d,cover:h,label:g,description:v}=i;if(a===0)return l.jsxs(z5,{children:[l.jsx(H5,{src:h?o[0]:G1}),l.jsxs(V5,{children:[l.jsx(U5,{children:g}),l.jsx(G5,{children:v})]}),l.jsxs(K5,{onClick:()=>{e(`/events/${d}-${c.split(" ").join("-")}`)},children:[l.jsx(X1,{children:"详情"}),l.jsx(K1,{src:B1})]})]},c);if(a<5)return l.jsxs(Y5,{children:[l.jsx(F5,{src:h?o[0]:G1}),l.jsxs(W5,{children:[l.jsx(B5,{children:g}),l.jsx(X5,{children:v})]}),l.jsxs(Q5,{onClick:()=>{e(`/events/${d}-${c.split(" ").join("-")}`)},children:[l.jsx(X1,{children:"详情"}),l.jsx(K1,{src:B1})]})]},c)})}),l.jsx(q5,{onClick:()=>e("/events"),children:"了解更多"})]})})},J5="/zh-cn/assets/blog-test-image-c63d058c.png",e7="/zh-cn/assets/blog-cover-3d82a30d.png",{Heading:t7,Paragraph:r7}=Me,{CNHead4:n7,TitleLarge:i7}=t7,{CNBodyMedium:WS}=r7,o7=f.section` +`,Q1=Object.assign({"/src/articles/events/2022-05-17-RDMA-Software-Interface-High-Level-Package/index.md":()=>D(()=>import("./index-a84bdbd8.js"),[]),"/src/articles/events/2022-08-04-When-RDMA-meets-Rust/index.md":()=>D(()=>import("./index-c832920a.js"),[]),"/src/articles/events/2022-08-23-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5968a39d.js"),[]),"/src/articles/events/2022-10-11-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-a179aa93.js"),[]),"/src/articles/events/2022-11-11-Datan-Technology-invites-you-who-love-challenges-to-participate-in-Rust-China-Hackathon-2022/index.md":()=>D(()=>import("./index-b9cc4e07.js"),[]),"/src/articles/events/2022-11-24-The-Rust-China-Hackathon-2022-Datan-Technology-Group-Air-Presentation-is-here/index.md":()=>D(()=>import("./index-cf17c7a4.js"),[]),"/src/articles/events/2022-12-08-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-7df3558a.js"),[]),"/src/articles/events/2022-12-08-Welcome-to-sign-up-for-the-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-4b956329.js"),[]),"/src/articles/events/2023-01-06-Datan-Technology-2023-Open-Source-Graduation-Design-Internship-Recruitment/index.md":()=>D(()=>import("./index-b2f220f4.js"),[]),"/src/articles/events/2023-01-12-Welcome-to-join-Datan-Technology-hardware-design-learning-community/index.md":()=>D(()=>import("./index-1179d885.js"),[]),"/src/articles/events/2023-02-01-Consensus-Algorithms-and-Metadata-Management-for-Cross-Data-Center-Consistency/index.md":()=>D(()=>import("./index-5689e7f4.js"),[]),"/src/articles/events/2023-03-31-4.8-Beijing-Rust-Meetup-|-Call-For-Presenters/index.md":()=>D(()=>import("./index-ffd93bc8.js"),[]),"/src/articles/events/2023-04-05-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-d2a8186a.js"),[]),"/src/articles/events/2023-05-04-Meet-this-summer|Datan-Technology-invites-you-to-participate-in-the-2023-Open-Source-Summer/index.md":()=>D(()=>import("./index-3dea6c6a.js"),[]),"/src/articles/events/2023-06-11-Countdown-to-Rust-X-DatenLord-l-Rust-China-Conf-2023/index.md":()=>D(()=>import("./index-0c25eea3.js"),[]),"/src/articles/events/2023-07-03-SpinalHDL-usage-and-development-experience-workshop/index.md":()=>D(()=>import("./index-0b4fd2ad.js"),[]),"/src/articles/events/2023-08-01-Countdown-to-6-days-l-Opportunities-and-Challenges-The-Development-Trend-of-Generative-AI-and-its-Application-on-the-Ground/index.md":()=>D(()=>import("./index-16f06676.js"),[]),"/src/articles/events/2023-08-15-DatenLord-X-Segmentfault-Live-Stream-Preview-l-CURP-Protocol-in-Industrial-Practice/index.md":()=>D(()=>import("./index-b9ee750d.js"),[]),"/src/articles/events/2023-08-20-Upcoming-Events-l-2nd-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5f61d62d.js"),[]),"/src/articles/events/2023-09-07-The-2nd-Hardware-Agile-Development-and-Methodology-Workshop-l-2023-RISC-V-China-Summit-Concurrent-Events-Successfully-Held/index.md":()=>D(()=>import("./index-a154d453.js"),[]),"/src/articles/events/2023-09-19-MIT-Coursework-Orientation-for-Newcomers/index.md":()=>D(()=>import("./index-65e0a878.js"),[]),"/src/articles/events/2023-11-09-Exploring-the-Future-of-SpinalHDL-Applications-in-2023-Online-Workshop/index.md":()=>D(()=>import("./index-2530d06d.js"),[]),"/src/articles/events/2023-11-17-Ding!-You've-received-a-Hackthon-invitation-from-Dartan-Technologies!/index.md":()=>D(()=>import("./index-28dd2373.js"),[]),"/src/articles/events/2023-12-05-Countdown-to-5-days:-SpinalHDL-application-prospect-exploration-online-seminar/index.md":()=>D(()=>import("./index-1c57aced.js"),[]),"/src/articles/events/2023-12-05-Ding!-2023-hackathon-tips-fresh-from-the-oven!-Last-week-to-sign-up-before-it's-too-late!/index.md":()=>D(()=>import("./index-b8dbda9f.js"),[]),"/src/articles/events/2023-12-14-MIT-Architecture-Open-Course-Learning-Community-Version-2.0-is-officially-launched~/index.md":()=>D(()=>import("./index-50ad21f0.js"),[]),"/src/articles/events/2024-01-02-Highlights-I-DatenLord-Hackathon-2023-came-to-a-successful-conclusion!/index.md":()=>D(()=>import("./index-1c51c928.js"),[])}),Z5=()=>{const e=wt(),[t,r]=N.useState([]),n=async()=>{const i=await Promise.all(Object.keys(Q1).map(o=>Q1[o]()));r(i.reverse())};return N.useEffect(()=>{n()},[]),l.jsx(A5,{id:"dynamics",children:l.jsxs(I5,{children:[l.jsx(N5,{children:"达坦动态"}),l.jsx($5,{children:t.map(({metadata:i,assetURLs:o},a)=>{const{title:c,date:d,cover:h,label:g,description:v}=i;if(a===0)return l.jsxs(z5,{children:[l.jsx(Y5,{src:h?o[0]:G1}),l.jsxs(V5,{children:[l.jsx(U5,{children:g}),l.jsx(G5,{children:v})]}),l.jsxs(K5,{onClick:()=>{e(`/events/${d}-${c.split(" ").join("-")}`)},children:[l.jsx(X1,{children:"详情"}),l.jsx(K1,{src:B1})]})]},c);if(a<5)return l.jsxs(H5,{children:[l.jsx(F5,{src:h?o[0]:G1}),l.jsxs(W5,{children:[l.jsx(B5,{children:g}),l.jsx(X5,{children:v})]}),l.jsxs(Q5,{onClick:()=>{e(`/events/${d}-${c.split(" ").join("-")}`)},children:[l.jsx(X1,{children:"详情"}),l.jsx(K1,{src:B1})]})]},c)})}),l.jsx(q5,{onClick:()=>e("/events"),children:"了解更多"})]})})},J5="/zh-cn/assets/blog-test-image-c63d058c.png",e7="/zh-cn/assets/blog-cover-3d82a30d.png",{Heading:t7,Paragraph:r7}=Me,{CNHead4:n7,TitleLarge:i7}=t7,{CNBodyMedium:WS}=r7,o7=f.section` background: #f7f7f9; `,s7=f.div` max-width: 1440px; @@ -1509,16 +1509,16 @@ Error generating stack: `+o.message+` border-radius: 0.5rem; border: none; cursor: pointer; -`,q1=Object.assign({"/src/articles/blogs/2022-05-17-Rust-Implementation-of-RDMA/index.md":()=>D(()=>import("./index-8702c933.js"),[]),"/src/articles/blogs/2022-05-27-Crossbeam-Epoch-Algorithm-for-Lock-Free-Programming-in-Rust/index.md":()=>D(()=>import("./index-28c4b418.js"),[]),"/src/articles/blogs/2022-05-27-Managing-RDMA-Memory-in-Rust/index.md":()=>D(()=>import("./index-de3329ad.js"),[]),"/src/articles/blogs/2022-05-27-Memory-Management-for-Lock-Free-Data-Structures-in-the-Rust-Language/index.md":()=>D(()=>import("./index-fe9ae8f0.js"),[]),"/src/articles/blogs/2022-05-27-Rethinking-How-Rust-Async-Enables-High-Performance-IO/index.md":()=>D(()=>import("./index-d81ed83c.js"),[]),"/src/articles/blogs/2022-05-27-Rust-Implementation-of-K8S-Scheduling-Extensions/index.md":()=>D(()=>import("./index-9d5e23a7.js"),[]),"/src/articles/blogs/2022-05-27-Rust-implementation-of-RDMA-asynchronous-programming-(I):-epoll-based-implementation-of-RDMA-asynchronous-operation/index.md":()=>D(()=>import("./index-fd018bec.js"),[]),"/src/articles/blogs/2022-05-27-async-Rust-wraps-UCX-communication-library/index.md":()=>D(()=>import("./index-8c82e7c7.js"),[]),"/src/articles/blogs/2022-05-27-io_uring-Rust-Asynchronous-Library-Implementation/index.md":()=>D(()=>import("./index-e7093119.js"),[]),"/src/articles/blogs/2022-06-11-Computer-Architecture-l-MIT-Training-Q&A-and-Tips/index.md":()=>D(()=>import("./index-29c0b7ce.js"),[]),"/src/articles/blogs/2022-06-15-Etcd-client-cache-practice/index.md":()=>D(()=>import("./index-bfe04780.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-and-lock-free-programming-(1)/index.md":()=>D(()=>import("./index-147df4a9.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-in-lock-free-programming-scenarios-(2)/index.md":()=>D(()=>import("./index-b51a8ea2.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(1)/index.md":()=>D(()=>import("./index-5dd90a8c.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(2)/index.md":()=>D(()=>import("./index-426f092b.js"),[]),"/src/articles/blogs/2022-06-15-Using-BPF-to-implement-user-mode-tracing/index.md":()=>D(()=>import("./index-06215d3e.js"),[]),"/src/articles/blogs/2022-06-24-Why-should-a-startup-choose-Rust-for-an-RDMA-library/index.md":()=>D(()=>import("./index-1bdc26aa.js"),[]),"/src/articles/blogs/2022-06-30-Ten-thousand-words-long-article,-detailing-the-hardware-acceleration-and-implementation-of-TRIDENT:-Poseidon-hash-algorithm!/index.md":()=>D(()=>import("./index-2c990cf9.js"),[]),"/src/articles/blogs/2022-07-07-Rethinking-of-the-Curp-Consensus-Protocol/index.md":()=>D(()=>import("./index-f6eeef5e.js"),[]),"/src/articles/blogs/2022-08-11-DatenLord-|-Xline-Geo-distributed-KV-Storage/index.md":()=>D(()=>import("./index-9cd4971b.js"),[]),"/src/articles/blogs/2022-10-11-Rust-Chat-Room:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-bb28ce04.js"),[]),"/src/articles/blogs/2022-10-20-Wonderful-review-l-Rust-chat-room:-Xline-cross-data-center-consistency-management/index.md":()=>D(()=>import("./index-fa30bf44.js"),[]),"/src/articles/blogs/2022-12-15-Distributed-state-machine-consensus-protocol-Copilot/index.md":()=>D(()=>import("./index-24694c1f.js"),[]),"/src/articles/blogs/2023-01-19-From-Cloud-Computing-to-Sky-Computing-(1)/index.md":()=>D(()=>import("./index-4b85dcd8.js"),[]),"/src/articles/blogs/2023-02-01-Distributed-laboratory-live-broadcast-l-Consensus-algorithm-and-consistent-metadata-management-across-data-centers/index.md":()=>D(()=>import("./index-4270ced0.js"),[]),"/src/articles/blogs/2023-02-16-Database-isolation-level-and-MVCC/index.md":()=>D(()=>import("./index-8c16a843.js"),[]),"/src/articles/blogs/2023-02-16-Xline-v0.2.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-9cbd4195.js"),[]),"/src/articles/blogs/2023-03-02-Thinking-about-programs-mathematically-and-verifying-correctness/index.md":()=>D(()=>import("./index-f82a02e0.js"),[]),"/src/articles/blogs/2023-03-23-Xline-v0.3.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-72b88898.js"),[]),"/src/articles/blogs/2023-04-20-How-to-elegantly-organize-asynchronous-code-in-a-Rust-project/index.md":()=>D(()=>import("./index-7582b288.js"),[]),"/src/articles/blogs/2023-04-24-DatenLord-open-source-product-technology-sharing-l-Xline-source-code-interpretation/index.md":()=>D(()=>import("./index-25ae7126.js"),[]),"/src/articles/blogs/2023-05-11-Xline-v0.4.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-494dac65.js"),[]),"/src/articles/blogs/2023-05-17-Computer-Architecture|MIT6.175-and-MIT6.375-Study-Notes/index.md":()=>D(()=>import("./index-073c84f3.js"),[]),"/src/articles/blogs/2023-05-25-Xline-Persistent-Storage-Design-and-Implementation/index.md":()=>D(()=>import("./index-86e42443.js"),[]),"/src/articles/blogs/2023-06-01-From-Cloud-Computing-to-Sky-Computing-(2)/index.md":()=>D(()=>import("./index-7a966399.js"),[]),"/src/articles/blogs/2023-06-21-The-first-cross-cloud-metadata-KV-storage-Xline-officially-entered-the-CNCF-sandbox/index.md":()=>D(()=>import("./index-a8e1cc23.js"),[]),"/src/articles/blogs/2023-06-21-Xline-v0.4.1:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-93097ad1.js"),[]),"/src/articles/blogs/2023-07-13-Interpretation-of-Xline-source-code-(1)——Introduction-to-CURP-protocol/index.md":()=>D(()=>import("./index-b77795ad.js"),[]),"/src/articles/blogs/2023-07-20-Xline-Source-Code-Interpretation-(II)-Lease-Mechanism-and-Implementation/index.md":()=>D(()=>import("./index-0074c42d.js"),[]),"/src/articles/blogs/2023-07-27-BSV-based-high-performance-parallel-CRC-hardware-circuit-generator/index.md":()=>D(()=>import("./index-2bfed728.js"),[]),"/src/articles/blogs/2023-08-15-Xline-v0.5.0-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-7a7fbe77.js"),[]),"/src/articles/blogs/2023-08-31-Fountain-Code/index.md":()=>D(()=>import("./index-0850e6f5.js"),[]),"/src/articles/blogs/2023-09-14-Xline-Source-Code-Interpretation-(III)--CURP-Server-Implementation/index.md":()=>D(()=>import("./index-277ae463.js"),[]),"/src/articles/blogs/2023-09-28-Bluespec-SytemVerilog-Handshake-Protocol-Interface-Conversion/index.md":()=>D(()=>import("./index-3139538f.js"),[]),"/src/articles/blogs/2023-10-12-Software-and-hardware-co-simulation-l-Overview-of-principles-and-main-components/index.md":()=>D(()=>import("./index-1ec93936.js"),[]),"/src/articles/blogs/2023-10-19-Xline-Source-Code-Interpretation-(IV)-CURP-state-machine-engine/index.md":()=>D(()=>import("./index-6618c0b5.js"),[]),"/src/articles/blogs/2023-10-26-Application-of-data-flow-programming-in-hardware-design/index.md":()=>D(()=>import("./index-9edebc8f.js"),[]),"/src/articles/blogs/2023-11-02-blue-ethernet-High-Performance-FPGA-Network-Packet-Processing-Project-Details/index.md":()=>D(()=>import("./index-8a16857f.js"),[]),"/src/articles/blogs/2023-11-23-Xline-v0.6.0:-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-b73b42f4.js"),[])}),p7=()=>{const e=wt(),[t,r]=N.useState([]),[n,i]=N.useState(""),o=async()=>{const a=await Promise.all(Object.keys(q1).map(c=>q1[c]()));r(a.reverse())};return N.useEffect(()=>{o()},[]),N.useEffect(()=>{var a;i(((a=t[0])==null?void 0:a.assetURLs[0])||J5)},[t]),l.jsx(o7,{id:"blog",children:l.jsxs(s7,{children:[l.jsx(a7,{children:"技术博客"}),l.jsxs(l7,{children:[l.jsxs(c7,{children:[l.jsx(u7,{src:e7}),t.map(({metadata:a},c)=>{const{title:d,date:h,label:g,description:v}=a;return c<4&&l.jsxs(d7,{children:[l.jsx(f7,{onClick:()=>{e(`/blogs/${h}-${d.split(" ").join("-")}`)},children:g}),l.jsx(h7,{children:v})]},d)})]}),l.jsx(m7,{onClick:()=>e("/blogs"),children:"了解更多"})]})]})})},Z1=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:$S,children:"资源"}),l.jsx(D5,{}),l.jsx(Z5,{}),l.jsx(p7,{})]})},g7="/zh-cn/assets/cover-2eaea155.png",v7="/zh-cn/assets/SJTU-logo-a938b527.png",y7="/zh-cn/assets/BUPT-logo-4d861e45.png",w7="/zh-cn/assets/HNU-logo-a704fb8b.png",_7="/zh-cn/assets/SCUT-logo-aa4c3285.png",x7="/zh-cn/assets/SBU-logo-a0084f17.png",S7="/zh-cn/assets/image-cd6390ff.png",{Heading:b7,Paragraph:k7}=Me,{CNHead4:C7,CNHead5:D7}=b7,{CNBodyLarge:US}=k7,E7=f.section` +`,q1=Object.assign({"/src/articles/blogs/2022-05-17-Rust-Implementation-of-RDMA/index.md":()=>D(()=>import("./index-8702c933.js"),[]),"/src/articles/blogs/2022-05-27-Crossbeam-Epoch-Algorithm-for-Lock-Free-Programming-in-Rust/index.md":()=>D(()=>import("./index-28c4b418.js"),[]),"/src/articles/blogs/2022-05-27-Managing-RDMA-Memory-in-Rust/index.md":()=>D(()=>import("./index-de3329ad.js"),[]),"/src/articles/blogs/2022-05-27-Memory-Management-for-Lock-Free-Data-Structures-in-the-Rust-Language/index.md":()=>D(()=>import("./index-fe9ae8f0.js"),[]),"/src/articles/blogs/2022-05-27-Rethinking-How-Rust-Async-Enables-High-Performance-IO/index.md":()=>D(()=>import("./index-d81ed83c.js"),[]),"/src/articles/blogs/2022-05-27-Rust-Implementation-of-K8S-Scheduling-Extensions/index.md":()=>D(()=>import("./index-9d5e23a7.js"),[]),"/src/articles/blogs/2022-05-27-Rust-implementation-of-RDMA-asynchronous-programming-(I):-epoll-based-implementation-of-RDMA-asynchronous-operation/index.md":()=>D(()=>import("./index-fd018bec.js"),[]),"/src/articles/blogs/2022-05-27-async-Rust-wraps-UCX-communication-library/index.md":()=>D(()=>import("./index-8c82e7c7.js"),[]),"/src/articles/blogs/2022-05-27-io_uring-Rust-Asynchronous-Library-Implementation/index.md":()=>D(()=>import("./index-e7093119.js"),[]),"/src/articles/blogs/2022-06-11-Computer-Architecture-l-MIT-Training-Q&A-and-Tips/index.md":()=>D(()=>import("./index-29c0b7ce.js"),[]),"/src/articles/blogs/2022-06-15-Etcd-client-cache-practice/index.md":()=>D(()=>import("./index-bfe04780.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-and-lock-free-programming-(1)/index.md":()=>D(()=>import("./index-147df4a9.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-in-lock-free-programming-scenarios-(2)/index.md":()=>D(()=>import("./index-b51a8ea2.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(1)/index.md":()=>D(()=>import("./index-5dd90a8c.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(2)/index.md":()=>D(()=>import("./index-426f092b.js"),[]),"/src/articles/blogs/2022-06-15-Using-BPF-to-implement-user-mode-tracing/index.md":()=>D(()=>import("./index-06215d3e.js"),[]),"/src/articles/blogs/2022-06-24-Why-should-a-startup-choose-Rust-for-an-RDMA-library/index.md":()=>D(()=>import("./index-1bdc26aa.js"),[]),"/src/articles/blogs/2022-06-30-Ten-thousand-words-long-article,-detailing-the-hardware-acceleration-and-implementation-of-TRIDENT:-Poseidon-hash-algorithm!/index.md":()=>D(()=>import("./index-2ee8a4ba.js"),[]),"/src/articles/blogs/2022-07-07-Rethinking-of-the-Curp-Consensus-Protocol/index.md":()=>D(()=>import("./index-f6eeef5e.js"),[]),"/src/articles/blogs/2022-08-11-DatenLord-|-Xline-Geo-distributed-KV-Storage/index.md":()=>D(()=>import("./index-9cd4971b.js"),[]),"/src/articles/blogs/2022-10-11-Rust-Chat-Room:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-0bd243e2.js"),[]),"/src/articles/blogs/2022-10-20-Wonderful-review-l-Rust-chat-room:-Xline-cross-data-center-consistency-management/index.md":()=>D(()=>import("./index-fa30bf44.js"),[]),"/src/articles/blogs/2022-12-15-Distributed-state-machine-consensus-protocol-Copilot/index.md":()=>D(()=>import("./index-24694c1f.js"),[]),"/src/articles/blogs/2023-01-19-From-Cloud-Computing-to-Sky-Computing-(1)/index.md":()=>D(()=>import("./index-4b85dcd8.js"),[]),"/src/articles/blogs/2023-02-01-Distributed-laboratory-live-broadcast-l-Consensus-algorithm-and-consistent-metadata-management-across-data-centers/index.md":()=>D(()=>import("./index-39390118.js"),[]),"/src/articles/blogs/2023-02-16-Database-isolation-level-and-MVCC/index.md":()=>D(()=>import("./index-1dde53bb.js"),[]),"/src/articles/blogs/2023-02-16-Xline-v0.2.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-6f20c5b7.js"),[]),"/src/articles/blogs/2023-03-02-Thinking-about-programs-mathematically-and-verifying-correctness/index.md":()=>D(()=>import("./index-82a24597.js"),[]),"/src/articles/blogs/2023-03-23-Xline-v0.3.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-72b88898.js"),[]),"/src/articles/blogs/2023-04-20-How-to-elegantly-organize-asynchronous-code-in-a-Rust-project/index.md":()=>D(()=>import("./index-7582b288.js"),[]),"/src/articles/blogs/2023-04-24-DatenLord-open-source-product-technology-sharing-l-Xline-source-code-interpretation/index.md":()=>D(()=>import("./index-015cf939.js"),[]),"/src/articles/blogs/2023-05-11-Xline-v0.4.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-1e192479.js"),[]),"/src/articles/blogs/2023-05-17-Computer-Architecture|MIT6.175-and-MIT6.375-Study-Notes/index.md":()=>D(()=>import("./index-e6f44fee.js"),[]),"/src/articles/blogs/2023-05-25-Xline-Persistent-Storage-Design-and-Implementation/index.md":()=>D(()=>import("./index-90593fbc.js"),[]),"/src/articles/blogs/2023-06-01-From-Cloud-Computing-to-Sky-Computing-(2)/index.md":()=>D(()=>import("./index-7a966399.js"),[]),"/src/articles/blogs/2023-06-21-The-first-cross-cloud-metadata-KV-storage-Xline-officially-entered-the-CNCF-sandbox/index.md":()=>D(()=>import("./index-a8e1cc23.js"),[]),"/src/articles/blogs/2023-06-21-Xline-v0.4.1:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-148365b0.js"),[]),"/src/articles/blogs/2023-07-13-Interpretation-of-Xline-source-code-(1)——Introduction-to-CURP-protocol/index.md":()=>D(()=>import("./index-5076d4ea.js"),[]),"/src/articles/blogs/2023-07-20-Xline-Source-Code-Interpretation-(II)-Lease-Mechanism-and-Implementation/index.md":()=>D(()=>import("./index-0074c42d.js"),[]),"/src/articles/blogs/2023-07-27-BSV-based-high-performance-parallel-CRC-hardware-circuit-generator/index.md":()=>D(()=>import("./index-dcc07e36.js"),[]),"/src/articles/blogs/2023-08-15-Xline-v0.5.0-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-7a7fbe77.js"),[]),"/src/articles/blogs/2023-08-31-Fountain-Code/index.md":()=>D(()=>import("./index-0850e6f5.js"),[]),"/src/articles/blogs/2023-09-14-Xline-Source-Code-Interpretation-(III)--CURP-Server-Implementation/index.md":()=>D(()=>import("./index-277ae463.js"),[]),"/src/articles/blogs/2023-09-28-Bluespec-SytemVerilog-Handshake-Protocol-Interface-Conversion/index.md":()=>D(()=>import("./index-3139538f.js"),[]),"/src/articles/blogs/2023-10-12-Software-and-hardware-co-simulation-l-Overview-of-principles-and-main-components/index.md":()=>D(()=>import("./index-1ec93936.js"),[]),"/src/articles/blogs/2023-10-19-Xline-Source-Code-Interpretation-(IV)-CURP-state-machine-engine/index.md":()=>D(()=>import("./index-6618c0b5.js"),[]),"/src/articles/blogs/2023-10-26-Application-of-data-flow-programming-in-hardware-design/index.md":()=>D(()=>import("./index-a27a1569.js"),[]),"/src/articles/blogs/2023-11-02-blue-ethernet-High-Performance-FPGA-Network-Packet-Processing-Project-Details/index.md":()=>D(()=>import("./index-0c28844a.js"),[]),"/src/articles/blogs/2023-11-23-Xline-v0.6.0:-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-b73b42f4.js"),[])}),p7=()=>{const e=wt(),[t,r]=N.useState([]),[n,i]=N.useState(""),o=async()=>{const a=await Promise.all(Object.keys(q1).map(c=>q1[c]()));r(a.reverse())};return N.useEffect(()=>{o()},[]),N.useEffect(()=>{var a;i(((a=t[0])==null?void 0:a.assetURLs[0])||J5)},[t]),l.jsx(o7,{id:"blog",children:l.jsxs(s7,{children:[l.jsx(a7,{children:"技术博客"}),l.jsxs(l7,{children:[l.jsxs(c7,{children:[l.jsx(u7,{src:e7}),t.map(({metadata:a},c)=>{const{title:d,date:h,label:g,description:v}=a;return c<4&&l.jsxs(d7,{children:[l.jsx(f7,{onClick:()=>{e(`/blogs/${h}-${d.split(" ").join("-")}`)},children:g}),l.jsx(h7,{children:v})]},d)})]}),l.jsx(m7,{onClick:()=>e("/blogs"),children:"了解更多"})]})]})})},Z1=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:$S,children:"资源"}),l.jsx(D5,{}),l.jsx(Z5,{}),l.jsx(p7,{})]})},g7="/zh-cn/assets/cover-2eaea155.png",v7="/zh-cn/assets/SJTU-logo-a938b527.png",y7="/zh-cn/assets/BUPT-logo-4d861e45.png",w7="/zh-cn/assets/HNU-logo-a704fb8b.png",_7="/zh-cn/assets/SCUT-logo-aa4c3285.png",x7="/zh-cn/assets/SBU-logo-a0084f17.png",S7="/zh-cn/assets/image-cd6390ff.png",{Heading:b7,Paragraph:k7}=Me,{CNHead4:C7,CNHead5:D7}=b7,{CNBodyLarge:US}=k7,E7=f.section` background: ${e=>e.theme.white00}; background: linear-gradient(180deg, #BFC5FB, #BFC5FB00 50%); -`,j7=f.div` +`,T7=f.div` padding-top: 1.48rem; max-width: 1440px; margin-inline: auto; padding-bottom: 0.79rem; padding-inline: 2.03rem; -`,T7=f(C7)` +`,j7=f(C7)` padding-bottom: 0.5rem; text-align: center; `,O7=f(US)` @@ -1561,13 +1561,13 @@ Error generating stack: `+o.message+` &:last-child { padding-bottom: 0; } -`,Y7=f(D7)` +`,H7=f(D7)` padding-bottom: 0.16rem; color: ${e=>e.theme.secondary01}; -`,H7=f(US)``,F7=f.img` +`,Y7=f(US)``,F7=f.img` width: 100%; padding-bottom: 1.18rem; -`,V7=[{title:"高性能跨云SaaS服务基础",content:[{text:"上海交通大学"},{text:" 合作项目:利用RDMA加速serverless的性能"}]},{title:"高性能跨云网络基础",content:[{text:"北京邮电大学 合作项目:RDMA的流量控制"},{text:"湖南大学 合作项目:RDMA QoS"}]},{title:"高性能网络硬件支持",content:[{text:"华南理工大学"},{text:"合作项目:硬件敏捷开发和验证"}]},{title:"高性能跨云一致性算法",content:[{text:"美国石溪大学"},{text:"合作项目:分布式一致性"}]}],J1=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t==null||t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:g7,subTitle:"通过实现跨云、跨数据中心的数据高速访问,DatenLord将大大提升存储系统的可扩展性,同时大大降低企业级IT业务系统在实现高可用性、多活方面的复杂性。随着多云、多数据中心成为企业级IT的主流架构,跨云分布式存储将在互联网、金融、电信、能源等不同行业得到广泛应用。",children:"客 户"}),l.jsx(jS,{}),l.jsx(E7,{id:"project-cooperation",children:l.jsxs(j7,{children:[l.jsx(F7,{src:S7}),l.jsx(T7,{children:"产学研项目合作"}),l.jsx(O7,{children:"DatenLord积极推动产学研合作,与国内外各大高校的顶尖实验室合作,在高性能跨云SaaS服务基础、高性能跨云网络基础、高性能网络硬件支持和高性能跨云网络一致性算法领域共同进行深入的前瞻研究和实践落地。"}),l.jsxs(P7,{children:[l.jsxs(R7,{children:[l.jsx(L7,{src:v7}),l.jsx(A7,{src:y7}),l.jsx(I7,{src:w7}),l.jsx(N7,{src:_7}),l.jsx($7,{src:x7})]}),l.jsx(M7,{children:V7.map(({title:t,content:r},n)=>l.jsxs(z7,{children:[l.jsx(Y7,{children:t}),r.map(({text:i},o)=>l.jsx(H7,{children:i},o))]},n))})]})]})})]})},W7="/zh-cn/assets/logo-theme-dark-9478769d.svg",U7="/zh-cn/assets/founding-image-1a5d82c0.png",Fc="/zh-cn/assets/shi-jicheng-avatar-b016e3a2.png",Vc="/zh-cn/assets/wang-pu-avatar-5d318600.png",{Heading:B7,Paragraph:G7}=Me,{CNHead4:X7,CNHead5S:K7,CNHead5:Q7}=B7,{CNBodyLarge:Wd,CNBodySmall:BS}=G7,q7=[{key:"wang-pu",avatar:Vc,name:"王璞",position:"达坦科技创始人兼CEO",text:"达坦科技创始人兼CEO,美国George Mason大学计算机博士、北大硕士、北航本科,拥有多年云计算和大数据领域的经验和积累,擅长分布式系统研发、海量数据处理、云计算产品设计及大规模机器学习等。2014年回国创业,创立数人云科技公司,专注容器技术在国内的落地和推广,2018年被上市公司收购。曾发表十余篇论文,共计被引用上千次,拥有多项云计算专利、软著,并于2020年被评选为腾讯云TVP(最有价值专家)。",quote:"“我读大学的时候玩乐队,弹奏最多的就是Guns N' Roses(枪花)乐队的歌曲。枪花1987年发行的第一张专辑叫《Appetite for Destruction》。虽然我不至于有毁灭欲,但都说创新的本质其实是‘创造性地破坏’,创业亦然。离开大公司后我连续投身科技创业,想要静心做底层技术的颠覆性创新。想来也算是年轻时追求的摇滚精神跨时空的延续”。",inscription:"——王璞 达坦科技创始人兼CEO"},{key:"shi-ji-cheng",avatar:Fc,name:"施继成",position:"达坦科技联合创始人兼 CTO",text:"DatenLord 联合创始人兼 CTO,复旦大学软件工程本硕,师从华为基础软件首席科学家、鸿蒙实验室主任陈海波教授。擅长操作系统内核开发、分布式系统、嵌入式系统,对分布式数据一致性有钻深的研究,发表多篇操作系统内核相关论文,累计数百次引用。毕业后曾在谷歌中国、微软亚太和阿里巴巴等公司从事分布式计算和存储等相关工作。入选2022年度36氪S级创业者名册,荣获中国“企业工具与底层软件”领域 “36位36岁以下创业者“称号。",quote:"“魂系游戏和创业很相似,前者大量的离散叙事遍布于各个物件和NPC上,寻找主线剧情就好比创业时把客户的需求、公司的技术优势、VUCA时代瞬息万变的市场变化和趋势等都链接起来,形成完整的产品叙事并落地。两者的难度系数都很高,创业中的踩坑、犯错对应的是游戏中的“死亡”,所以,‘不死精神’或者说‘Grit’(坚毅)是魂系游戏和投身创业企业玩家的必备素质。”",inscription:"——施继成 达坦科技联合创始人兼CTO"}],Z7=f.section` +`,V7=[{title:"高性能跨云SaaS服务基础",content:[{text:"上海交通大学"},{text:" 合作项目:利用RDMA加速serverless的性能"}]},{title:"高性能跨云网络基础",content:[{text:"北京邮电大学 合作项目:RDMA的流量控制"},{text:"湖南大学 合作项目:RDMA QoS"}]},{title:"高性能网络硬件支持",content:[{text:"华南理工大学"},{text:"合作项目:硬件敏捷开发和验证"}]},{title:"高性能跨云一致性算法",content:[{text:"美国石溪大学"},{text:"合作项目:分布式一致性"}]}],J1=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t==null||t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:g7,subTitle:"通过实现跨云、跨数据中心的数据高速访问,DatenLord将大大提升存储系统的可扩展性,同时大大降低企业级IT业务系统在实现高可用性、多活方面的复杂性。随着多云、多数据中心成为企业级IT的主流架构,跨云分布式存储将在互联网、金融、电信、能源等不同行业得到广泛应用。",children:"客 户"}),l.jsx(TS,{}),l.jsx(E7,{id:"project-cooperation",children:l.jsxs(T7,{children:[l.jsx(F7,{src:S7}),l.jsx(j7,{children:"产学研项目合作"}),l.jsx(O7,{children:"DatenLord积极推动产学研合作,与国内外各大高校的顶尖实验室合作,在高性能跨云SaaS服务基础、高性能跨云网络基础、高性能网络硬件支持和高性能跨云网络一致性算法领域共同进行深入的前瞻研究和实践落地。"}),l.jsxs(P7,{children:[l.jsxs(R7,{children:[l.jsx(L7,{src:v7}),l.jsx(A7,{src:y7}),l.jsx(I7,{src:w7}),l.jsx(N7,{src:_7}),l.jsx($7,{src:x7})]}),l.jsx(M7,{children:V7.map(({title:t,content:r},n)=>l.jsxs(z7,{children:[l.jsx(H7,{children:t}),r.map(({text:i},o)=>l.jsx(Y7,{children:i},o))]},n))})]})]})})]})},W7="/zh-cn/assets/logo-theme-dark-9478769d.svg",U7="/zh-cn/assets/founding-image-1a5d82c0.png",Fc="/zh-cn/assets/shi-jicheng-avatar-b016e3a2.png",Vc="/zh-cn/assets/wang-pu-avatar-5d318600.png",{Heading:B7,Paragraph:G7}=Me,{CNHead4:X7,CNHead5S:K7,CNHead5:Q7}=B7,{CNBodyLarge:Wd,CNBodySmall:BS}=G7,q7=[{key:"wang-pu",avatar:Vc,name:"王璞",position:"达坦科技创始人兼CEO",text:"达坦科技创始人兼CEO,美国George Mason大学计算机博士、北大硕士、北航本科,拥有多年云计算和大数据领域的经验和积累,擅长分布式系统研发、海量数据处理、云计算产品设计及大规模机器学习等。2014年回国创业,创立数人云科技公司,专注容器技术在国内的落地和推广,2018年被上市公司收购。曾发表十余篇论文,共计被引用上千次,拥有多项云计算专利、软著,并于2020年被评选为腾讯云TVP(最有价值专家)。",quote:"“我读大学的时候玩乐队,弹奏最多的就是Guns N' Roses(枪花)乐队的歌曲。枪花1987年发行的第一张专辑叫《Appetite for Destruction》。虽然我不至于有毁灭欲,但都说创新的本质其实是‘创造性地破坏’,创业亦然。离开大公司后我连续投身科技创业,想要静心做底层技术的颠覆性创新。想来也算是年轻时追求的摇滚精神跨时空的延续”。",inscription:"——王璞 达坦科技创始人兼CEO"},{key:"shi-ji-cheng",avatar:Fc,name:"施继成",position:"达坦科技联合创始人兼 CTO",text:"DatenLord 联合创始人兼 CTO,复旦大学软件工程本硕,师从华为基础软件首席科学家、鸿蒙实验室主任陈海波教授。擅长操作系统内核开发、分布式系统、嵌入式系统,对分布式数据一致性有钻深的研究,发表多篇操作系统内核相关论文,累计数百次引用。毕业后曾在谷歌中国、微软亚太和阿里巴巴等公司从事分布式计算和存储等相关工作。入选2022年度36氪S级创业者名册,荣获中国“企业工具与底层软件”领域 “36位36岁以下创业者“称号。",quote:"“魂系游戏和创业很相似,前者大量的离散叙事遍布于各个物件和NPC上,寻找主线剧情就好比创业时把客户的需求、公司的技术优势、VUCA时代瞬息万变的市场变化和趋势等都链接起来,形成完整的产品叙事并落地。两者的难度系数都很高,创业中的踩坑、犯错对应的是游戏中的“死亡”,所以,‘不死精神’或者说‘Grit’(坚毅)是魂系游戏和投身创业企业玩家的必备素质。”",inscription:"——施继成 达坦科技联合创始人兼CTO"}],Z7=f.section` background: #f7f7f9; `,J7=f.section` max-width: 1440px; @@ -1654,7 +1654,7 @@ Error generating stack: `+o.message+` padding-top: 0.59rem; padding-bottom: 1.49rem; padding-inline: 1.58rem; -`,E$=f(S$)``,j$=f.div` +`,E$=f(S$)``,T$=f.div` margin-bottom: 0.36rem; padding-top: 0.48rem; padding-bottom: 0.77rem; @@ -1664,7 +1664,7 @@ Error generating stack: `+o.message+` &:last-child { margin-bottom: 0; } -`,T$=f(b$)` +`,j$=f(b$)` padding-bottom: 0.39rem; `,O$=f.div` display: flex; @@ -1705,7 +1705,7 @@ Error generating stack: `+o.message+` border-top: 0.08rem solid ${e=>e.index%2===0?"#9797971A":t=>t.theme.secondary02}; border-left: 0.08rem solid transparent; -`,N$=()=>l.jsx(C$,{children:l.jsxs(D$,{children:[l.jsx(E$,{style:{paddingBottom:"0.82rem",paddingLeft:"0.16rem"},children:"创立达坦科技的快问快答"}),k$.map(({title:e,content:t},r)=>l.jsxs(j$,{children:[l.jsx(T$,{children:e}),t.map(({name:n,avatar:i,text:o},a)=>l.jsxs(O$,{children:[l.jsxs(P$,{children:[l.jsx(R$,{src:i}),l.jsx(M$,{children:n})]}),l.jsxs(L$,{index:a,children:[l.jsx(I$,{index:a}),o.map((c,d)=>l.jsx(A$,{children:c},d))]})]},a))]},r))]})}),$$="/zh-cn/assets/VMV-section-bg-fde7914e.png",z$="/zh-cn/assets/book-9274cf2e.svg",Y$="/zh-cn/assets/bulb-e5b82e48.svg",H$="/zh-cn/assets/target-c78d4e77.svg",F$="/zh-cn/assets/HollowSphere4-3d92727b.png",V$="/zh-cn/assets/HollowSphere5-971b228b.png",ew="/zh-cn/assets/Pipe4-0ba2713b.png",{Heading:W$,Paragraph:U$}=Me,{CNHead4:pg}=W$,{CNBodyLarge:gg,CNBodyMedium:B$}=U$,G$=f.section` +`,N$=()=>l.jsx(C$,{children:l.jsxs(D$,{children:[l.jsx(E$,{style:{paddingBottom:"0.82rem",paddingLeft:"0.16rem"},children:"创立达坦科技的快问快答"}),k$.map(({title:e,content:t},r)=>l.jsxs(T$,{children:[l.jsx(j$,{children:e}),t.map(({name:n,avatar:i,text:o},a)=>l.jsxs(O$,{children:[l.jsxs(P$,{children:[l.jsx(R$,{src:i}),l.jsx(M$,{children:n})]}),l.jsxs(L$,{index:a,children:[l.jsx(I$,{index:a}),o.map((c,d)=>l.jsx(A$,{children:c},d))]})]},a))]},r))]})}),$$="/zh-cn/assets/VMV-section-bg-fde7914e.png",z$="/zh-cn/assets/book-9274cf2e.svg",H$="/zh-cn/assets/bulb-e5b82e48.svg",Y$="/zh-cn/assets/target-c78d4e77.svg",F$="/zh-cn/assets/HollowSphere4-3d92727b.png",V$="/zh-cn/assets/HollowSphere5-971b228b.png",ew="/zh-cn/assets/Pipe4-0ba2713b.png",{Heading:W$,Paragraph:U$}=Me,{CNHead4:pg}=W$,{CNBodyLarge:gg,CNBodyMedium:B$}=U$,G$=f.section` color: ${e=>e.theme.secondary02}; background: ${e=>e.theme.themeDark}; background-image: url(${$$}); @@ -1797,7 +1797,7 @@ Error generating stack: `+o.message+` right: 0; bottom: 0.2rem; width: 3.5rem; -`,a8=()=>l.jsx(G$,{children:l.jsxs(X$,{children:[l.jsx(K$,{children:"愿景/使命/价值观"}),l.jsxs(Q$,{children:[l.jsx(q$,{children:l.jsxs(La,{children:[l.jsx(xh,{children:"愿景"}),l.jsx(Ro,{children:"使企业能够以高性能和高安全性的方式在全球多个云中读、写和提取数据。"})]})}),l.jsxs(Z$,{children:[l.jsxs(La,{children:[l.jsx(xh,{children:"使命"}),l.jsx(Ro,{children:"通过使用DatenLord 跨云分布式的存储系统,打破跨云之间的隔阂。"})]}),l.jsxs(La,{children:[l.jsx(xh,{children:"价值"}),l.jsx(fc,{children:"开放和透明"}),l.jsx(Ro,{children:"我们努力保证信息和决策过程的透明度,从而创造一个包容性的社区,让每个成员都感到安全和自信,可以贡献不同的意见和多元化的视角。我们相信建设性的冲突可以带来反思和改进。"})]})]}),l.jsxs(J$,{children:[l.jsxs(_h,{children:[l.jsx(fc,{children:"敢于成为先锋"}),l.jsx(Ro,{children:"我们是一群具有成长型思维模式的人,我们不走捷径并且相信慢就是快。我们的目标是成为先锋,敢于标新立异,制定自己的模式,因此我们允许犯错,但更相信我们能够快速、持续地调整和完善。"})]}),l.jsxs(_h,{children:[l.jsx(fc,{children:"坚持交付卓越"}),l.jsx(Ro,{children:"我们相信结果与过程同样重要。我们以目标为导向,设定高标准,并发挥我们的聪明才智和努力拼搏的精神来实现它们。我们致力于通过关注自身的行动和外部的变化来获得想要的结果。"})]}),l.jsxs(_h,{children:[l.jsx(fc,{children:"专注于小而可控的步骤"}),l.jsx(Ro,{children:"大的里程碑固然值得庆祝,而每一跬步也很重要。我们相信在正确的方向上迈出的每一小步可以跨越难以想象的距离。我们相信不积跬步,无以至千里;不积小流,无以成江海。"})]})]})]}),l.jsxs(e8,{children:[l.jsx(t8,{children:"公司文化"}),l.jsxs(r8,{children:[l.jsxs(Sh,{children:[l.jsx(bh,{src:z$}),l.jsxs(kh,{children:[l.jsx(Ch,{children:"持续学习"}),l.jsx(Dh,{children:"持之以恒的自驱学习,求真求致;"})]})]}),l.jsxs(Sh,{children:[l.jsx(bh,{src:Y$}),l.jsxs(kh,{children:[l.jsx(Ch,{children:"精益求精"}),l.jsx(Dh,{children:"对自己高标准严要求,勇于挑战自我,对创新有极致追求;"})]})]}),l.jsxs(Sh,{children:[l.jsx(bh,{src:H$}),l.jsxs(kh,{children:[l.jsx(Ch,{children:"积极主动"}),l.jsx(Dh,{children:"遇到问题主动踏出第一步,做先行者而不是追随者。"})]})]})]})]}),l.jsx(n8,{src:V$}),l.jsx(i8,{src:ew}),l.jsx(o8,{src:ew}),l.jsx(s8,{src:F$})]})}),KS="/zh-cn/assets/cover-ab5c0f66.png",tw=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t==null||t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:KS,subTitle:"通过实现跨云、跨数据中心的数据高速访问,DatenLord将大大提升存储系统的可扩展性,同时大大降低企业级IT业务系统在实现高可用性、多活方面的复杂性。随着多云、多数据中心成为企业级IT的主流架构,跨云分布式存储将在互联网、金融、电信、能源等不同行业得到广泛应用。",children:"公司"}),l.jsx(w$,{}),l.jsx(N$,{}),l.jsx(a8,{})]})},l8="/zh-cn/assets/card-bg1-242750c8.png",c8="/zh-cn/assets/card-bg2-603ed811.png",u8="/zh-cn/assets/card-bg3-14a8311e.png",{Heading:d8,Paragraph:f8}=Me,{CNHead5S:h8,CNHead4:m8}=d8,{CNBodyLarge:p8}=f8,g8=f.section` +`,a8=()=>l.jsx(G$,{children:l.jsxs(X$,{children:[l.jsx(K$,{children:"愿景/使命/价值观"}),l.jsxs(Q$,{children:[l.jsx(q$,{children:l.jsxs(La,{children:[l.jsx(xh,{children:"愿景"}),l.jsx(Ro,{children:"使企业能够以高性能和高安全性的方式在全球多个云中读、写和提取数据。"})]})}),l.jsxs(Z$,{children:[l.jsxs(La,{children:[l.jsx(xh,{children:"使命"}),l.jsx(Ro,{children:"通过使用DatenLord 跨云分布式的存储系统,打破跨云之间的隔阂。"})]}),l.jsxs(La,{children:[l.jsx(xh,{children:"价值"}),l.jsx(fc,{children:"开放和透明"}),l.jsx(Ro,{children:"我们努力保证信息和决策过程的透明度,从而创造一个包容性的社区,让每个成员都感到安全和自信,可以贡献不同的意见和多元化的视角。我们相信建设性的冲突可以带来反思和改进。"})]})]}),l.jsxs(J$,{children:[l.jsxs(_h,{children:[l.jsx(fc,{children:"敢于成为先锋"}),l.jsx(Ro,{children:"我们是一群具有成长型思维模式的人,我们不走捷径并且相信慢就是快。我们的目标是成为先锋,敢于标新立异,制定自己的模式,因此我们允许犯错,但更相信我们能够快速、持续地调整和完善。"})]}),l.jsxs(_h,{children:[l.jsx(fc,{children:"坚持交付卓越"}),l.jsx(Ro,{children:"我们相信结果与过程同样重要。我们以目标为导向,设定高标准,并发挥我们的聪明才智和努力拼搏的精神来实现它们。我们致力于通过关注自身的行动和外部的变化来获得想要的结果。"})]}),l.jsxs(_h,{children:[l.jsx(fc,{children:"专注于小而可控的步骤"}),l.jsx(Ro,{children:"大的里程碑固然值得庆祝,而每一跬步也很重要。我们相信在正确的方向上迈出的每一小步可以跨越难以想象的距离。我们相信不积跬步,无以至千里;不积小流,无以成江海。"})]})]})]}),l.jsxs(e8,{children:[l.jsx(t8,{children:"公司文化"}),l.jsxs(r8,{children:[l.jsxs(Sh,{children:[l.jsx(bh,{src:z$}),l.jsxs(kh,{children:[l.jsx(Ch,{children:"持续学习"}),l.jsx(Dh,{children:"持之以恒的自驱学习,求真求致;"})]})]}),l.jsxs(Sh,{children:[l.jsx(bh,{src:H$}),l.jsxs(kh,{children:[l.jsx(Ch,{children:"精益求精"}),l.jsx(Dh,{children:"对自己高标准严要求,勇于挑战自我,对创新有极致追求;"})]})]}),l.jsxs(Sh,{children:[l.jsx(bh,{src:Y$}),l.jsxs(kh,{children:[l.jsx(Ch,{children:"积极主动"}),l.jsx(Dh,{children:"遇到问题主动踏出第一步,做先行者而不是追随者。"})]})]})]})]}),l.jsx(n8,{src:V$}),l.jsx(i8,{src:ew}),l.jsx(o8,{src:ew}),l.jsx(s8,{src:F$})]})}),KS="/zh-cn/assets/cover-ab5c0f66.png",tw=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t==null||t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:KS,subTitle:"通过实现跨云、跨数据中心的数据高速访问,DatenLord将大大提升存储系统的可扩展性,同时大大降低企业级IT业务系统在实现高可用性、多活方面的复杂性。随着多云、多数据中心成为企业级IT的主流架构,跨云分布式存储将在互联网、金融、电信、能源等不同行业得到广泛应用。",children:"公司"}),l.jsx(w$,{}),l.jsx(N$,{}),l.jsx(a8,{})]})},l8="/zh-cn/assets/card-bg1-242750c8.png",c8="/zh-cn/assets/card-bg2-603ed811.png",u8="/zh-cn/assets/card-bg3-14a8311e.png",{Heading:d8,Paragraph:f8}=Me,{CNHead5S:h8,CNHead4:m8}=d8,{CNBodyLarge:p8}=f8,g8=f.section` padding-bottom: 0.63rem; `,v8=f(h8)``,y8=f.div` display: grid; @@ -1816,9 +1816,9 @@ Error generating stack: `+o.message+` background-size: cover; `,_8=f(m8)` padding-bottom: 0.51rem; -`,x8=f(p8)``,S8=[{title:"创造性工作",text:"在DatenLord,你将有机会与一群才华横溢、积极进取的人一起创造性且高效率地工作。",bg:l8},{title:"归属感",text:"DatenLord重视社区文化不仅仅局限于开源社区,我们也希望我们的员工在这里有一种包容感和归属感。",bg:c8},{title:"远程工作",text:"DatenLord专注于研究和开发分布式存储系统,我们是一个分布式的团队,大多数成员都可以远程工作。",bg:u8}],b8=()=>l.jsxs(g8,{children:[l.jsx(v8,{style:{paddingBottom:".63rem"},children:"为什么选择达坦科技?"}),l.jsx(y8,{children:S8.map(({title:e,text:t,bg:r},n)=>l.jsxs(w8,{bg:r,children:[l.jsx(_8,{children:e}),l.jsx(x8,{children:t})]},n))})]}),{Heading:k8,Paragraph:C8}=Me,{CNHead5S:D8}=k8,{CNBodyLarge:E8}=C8,j8=f.section` +`,x8=f(p8)``,S8=[{title:"创造性工作",text:"在DatenLord,你将有机会与一群才华横溢、积极进取的人一起创造性且高效率地工作。",bg:l8},{title:"归属感",text:"DatenLord重视社区文化不仅仅局限于开源社区,我们也希望我们的员工在这里有一种包容感和归属感。",bg:c8},{title:"远程工作",text:"DatenLord专注于研究和开发分布式存储系统,我们是一个分布式的团队,大多数成员都可以远程工作。",bg:u8}],b8=()=>l.jsxs(g8,{children:[l.jsx(v8,{style:{paddingBottom:".63rem"},children:"为什么选择达坦科技?"}),l.jsx(y8,{children:S8.map(({title:e,text:t,bg:r},n)=>l.jsxs(w8,{bg:r,children:[l.jsx(_8,{children:e}),l.jsx(x8,{children:t})]},n))})]}),{Heading:k8,Paragraph:C8}=Me,{CNHead5S:D8}=k8,{CNBodyLarge:E8}=C8,T8=f.section` padding-bottom: 0.63rem; -`,T8=f(D8)``,O8=f.div` +`,j8=f(D8)``,O8=f.div` display: flex; flex-direction: column; padding-top: 0.94rem; @@ -1864,7 +1864,7 @@ Error generating stack: `+o.message+` transform: translate(3.31rem, calc(-0.43rem + 0.13rem)); `,z8=f(QS)` transform: translateX(calc(6.56rem - 2.03rem)); -`,Y8=()=>l.jsxs(j8,{children:[l.jsx(T8,{children:"我们在寻找什么样的人才?"}),l.jsxs(O8,{children:[l.jsx(ha,{children:l.jsx(M8,{children:"对行业内的最新技术发展保持敏锐的洞察力"})}),l.jsxs(ha,{style:{paddingBottom:"0.27rem"},children:[l.jsx(L8,{children:"对于以创新的方式做有意义的事情饱含热情"}),l.jsx(A8,{children:"具有好奇心,养成良好的学习习惯和方法"})]}),l.jsx(ha,{style:{paddingBottom:"0.43rem"},children:l.jsx(I8,{children:"对于以创新的方式做有意义的事情饱含热情"})}),l.jsxs(ha,{style:{paddingBottom:"0.14rem"},children:[l.jsx(N8,{children:"始终以终为始"}),l.jsx($8,{children:"热衷于开放且有意识地分享知识"})]}),l.jsx(ha,{children:l.jsx(z8,{children:"坦率而直接地进行沟通"})})]})]}),H8="/zh-cn/assets/react-718251fb.svg",{Heading:F8}=Me,{CNHead5S:V8,CNTitleLarge:W8}=F8,U8=f.section` +`,H8=()=>l.jsxs(T8,{children:[l.jsx(j8,{children:"我们在寻找什么样的人才?"}),l.jsxs(O8,{children:[l.jsx(ha,{children:l.jsx(M8,{children:"对行业内的最新技术发展保持敏锐的洞察力"})}),l.jsxs(ha,{style:{paddingBottom:"0.27rem"},children:[l.jsx(L8,{children:"对于以创新的方式做有意义的事情饱含热情"}),l.jsx(A8,{children:"具有好奇心,养成良好的学习习惯和方法"})]}),l.jsx(ha,{style:{paddingBottom:"0.43rem"},children:l.jsx(I8,{children:"对于以创新的方式做有意义的事情饱含热情"})}),l.jsxs(ha,{style:{paddingBottom:"0.14rem"},children:[l.jsx(N8,{children:"始终以终为始"}),l.jsx($8,{children:"热衷于开放且有意识地分享知识"})]}),l.jsx(ha,{children:l.jsx(z8,{children:"坦率而直接地进行沟通"})})]})]}),Y8="/zh-cn/assets/react-718251fb.svg",{Heading:F8}=Me,{CNHead5S:V8,CNTitleLarge:W8}=F8,U8=f.section` padding-bottom: 1.83rem; `,B8=f(V8)``,G8=f.div` display: flex; @@ -1883,7 +1883,7 @@ Error generating stack: `+o.message+` `,X8=f.img` padding-inline: 0.24rem; width: 4.55rem; -`,K8=()=>l.jsxs(U8,{children:[l.jsx(B8,{children:"我们能提供什么?"}),l.jsxs(G8,{children:[l.jsxs(rw,{children:[l.jsx(nw,{style:{marginTop:"0.64rem"},children:"灵活的工作内容,艰巨挑战,激发创新"}),l.jsx(iw,{style:{marginTop:"1.28rem"},children:"每年可申请长达2周的学习假期,自由选择充电课题"})]}),l.jsx(X8,{src:H8}),l.jsxs(rw,{children:[l.jsx(iw,{style:{marginTop:"0.64rem"},children:"丰富的软性素质及专业技能培训"}),l.jsx(nw,{style:{marginTop:"1.28rem"},children:"诸多行业交流和展现自我的机会"})]})]})]}),ZS="/zh-cn/assets/avatar-icon-b12a4de6.svg",Q8="/zh-cn/assets/image-534e9e5c.png",{Heading:q8,Paragraph:Z8}=Me,{CNHead5S:J8,CNTitleLarge:JS,CNTitleMedium:ez}=q8,{CNBodyMedium:Sl,CNMarkMedium:tz}=Z8,rz=[{title:"分布式存储软件开发资深工程师(全职,急招)",avatar:"",items:["参与开源分布式存储项目DatenLord的开发和维护;","完善DatenLord的测试,构建新的DatenLord测试框架;","提高DatenLord分布式性能表现。"],url:"/job-description/distributed-storage-software-development-senior-engineer"},{title:"Rust分布式存储开发(实习,即将招满)",avatar:"",text:"参与高性能分布式存储系统研发,涉及的开发内容包括但不限于:",items:["分布式存储系统开发;","分布式数据一致性协议研究和开发;","分布式缓存、数据管理服务..."],url:"/job-description/rust-distributed-storage-development"},{title:"FPGA开发(实习)",avatar:"",items:["负责基于FPGA实现网络IO加速,以及加密、压缩、编码等算法加速的设计与RTL实现;","实现常用外设接口IP的RTL设计、集成和验证;","配合上层软件实现软硬件联调。"],url:"/job-description/fpga-development"},{title:"软硬件联合研发实习生(实习)",avatar:"",text:"参与高性能存储SoC芯片的软硬件开发:",items:["负责网络IO加速的RTL实现;","负责加密、压缩、编码等算法加速的设计与RTL实现;","负责SoC芯片的Linux驱动开发;","负责实现软硬件联合调试与自动化测..."],url:"/job-description/the-joint-hardware-and-software-research-and-development-internship"}],nz=f.section``,iz=f(J8)``,oz=f.div` +`,K8=()=>l.jsxs(U8,{children:[l.jsx(B8,{children:"我们能提供什么?"}),l.jsxs(G8,{children:[l.jsxs(rw,{children:[l.jsx(nw,{style:{marginTop:"0.64rem"},children:"灵活的工作内容,艰巨挑战,激发创新"}),l.jsx(iw,{style:{marginTop:"1.28rem"},children:"每年可申请长达2周的学习假期,自由选择充电课题"})]}),l.jsx(X8,{src:Y8}),l.jsxs(rw,{children:[l.jsx(iw,{style:{marginTop:"0.64rem"},children:"丰富的软性素质及专业技能培训"}),l.jsx(nw,{style:{marginTop:"1.28rem"},children:"诸多行业交流和展现自我的机会"})]})]})]}),ZS="/zh-cn/assets/avatar-icon-b12a4de6.svg",Q8="/zh-cn/assets/image-534e9e5c.png",{Heading:q8,Paragraph:Z8}=Me,{CNHead5S:J8,CNTitleLarge:JS,CNTitleMedium:ez}=q8,{CNBodyMedium:Sl,CNMarkMedium:tz}=Z8,rz=[{title:"分布式存储软件开发资深工程师(全职,急招)",avatar:"",items:["参与开源分布式存储项目DatenLord的开发和维护;","完善DatenLord的测试,构建新的DatenLord测试框架;","提高DatenLord分布式性能表现。"],url:"/job-description/distributed-storage-software-development-senior-engineer"},{title:"Rust分布式存储开发(实习,即将招满)",avatar:"",text:"参与高性能分布式存储系统研发,涉及的开发内容包括但不限于:",items:["分布式存储系统开发;","分布式数据一致性协议研究和开发;","分布式缓存、数据管理服务..."],url:"/job-description/rust-distributed-storage-development"},{title:"FPGA开发(实习)",avatar:"",items:["负责基于FPGA实现网络IO加速,以及加密、压缩、编码等算法加速的设计与RTL实现;","实现常用外设接口IP的RTL设计、集成和验证;","配合上层软件实现软硬件联调。"],url:"/job-description/fpga-development"},{title:"软硬件联合研发实习生(实习)",avatar:"",text:"参与高性能存储SoC芯片的软硬件开发:",items:["负责网络IO加速的RTL实现;","负责加密、压缩、编码等算法加速的设计与RTL实现;","负责SoC芯片的Linux驱动开发;","负责实现软硬件联合调试与自动化测..."],url:"/job-description/the-joint-hardware-and-software-research-and-development-internship"}],nz=f.section``,iz=f(J8)``,oz=f.div` display: grid; grid-template-rows: repeat(2, 1fr); grid-template-columns: repeat(3, 1fr); @@ -1972,7 +1972,7 @@ Error generating stack: `+o.message+` padding-bottom: 0.16rem; `,yz=f(fn)` color: #fff; -`,wz=()=>{const e=wt();return l.jsxs(nz,{children:[l.jsx(iz,{children:"公开招聘"}),l.jsxs(oz,{children:[rz.map(({title:t,text:r,items:n,url:i},o)=>l.jsxs(sz,{children:[l.jsxs(az,{children:[l.jsx(lz,{children:l.jsx(cz,{src:ZS})}),l.jsx(uz,{onClick:()=>e(i),children:"岗位详情"})]}),l.jsx(dz,{children:t}),l.jsx(fz,{children:"【岗位职责】"}),r&&l.jsx(hz,{children:r}),l.jsx(mz,{children:n.map((a,c)=>l.jsx(pz,{as:"li",children:a},c))})]},o)),l.jsxs(gz,{children:[l.jsx(vz,{src:Q8}),l.jsx(yz,{onClick:()=>e("/job-description"),children:"进入招聘岗位详情"})]})]})]})},_z="/zh-cn/assets/public-ebe954c4.svg",xz="/zh-cn/assets/mail-63c82f9f.svg",Sz="/zh-cn/assets/wechat-c8587d4a.svg",bz="/zh-cn/assets/bilibili-b4f04177.svg",kz="/zh-cn/assets/zhihu-6dedfed7.svg",Cz="/zh-cn/assets/wechat-public-qrcode1-2f1a7fe8.png",Dz="/zh-cn/assets/email-qrcode1-86dcc594.png",Ez="/zh-cn/assets/wechat-qrcode1-72234ee7.png",jz="/zh-cn/assets/bilibili-qrcode1-27289e6d.png",Tz="/zh-cn/assets/zhihu-qrcode1-6f12e2dc.png",{Heading:Oz,Paragraph:Pz}=Me,{CNHead4:Rz,CNTitleMedium:Mz}=Oz,{CNBodySmall:Lz}=Pz,Az=f.section` +`,wz=()=>{const e=wt();return l.jsxs(nz,{children:[l.jsx(iz,{children:"公开招聘"}),l.jsxs(oz,{children:[rz.map(({title:t,text:r,items:n,url:i},o)=>l.jsxs(sz,{children:[l.jsxs(az,{children:[l.jsx(lz,{children:l.jsx(cz,{src:ZS})}),l.jsx(uz,{onClick:()=>e(i),children:"岗位详情"})]}),l.jsx(dz,{children:t}),l.jsx(fz,{children:"【岗位职责】"}),r&&l.jsx(hz,{children:r}),l.jsx(mz,{children:n.map((a,c)=>l.jsx(pz,{as:"li",children:a},c))})]},o)),l.jsxs(gz,{children:[l.jsx(vz,{src:Q8}),l.jsx(yz,{onClick:()=>e("/job-description"),children:"进入招聘岗位详情"})]})]})]})},_z="/zh-cn/assets/public-ebe954c4.svg",xz="/zh-cn/assets/mail-63c82f9f.svg",Sz="/zh-cn/assets/wechat-c8587d4a.svg",bz="/zh-cn/assets/bilibili-b4f04177.svg",kz="/zh-cn/assets/zhihu-6dedfed7.svg",Cz="/zh-cn/assets/wechat-public-qrcode1-2f1a7fe8.png",Dz="/zh-cn/assets/email-qrcode1-86dcc594.png",Ez="/zh-cn/assets/wechat-qrcode1-72234ee7.png",Tz="/zh-cn/assets/bilibili-qrcode1-27289e6d.png",jz="/zh-cn/assets/zhihu-qrcode1-6f12e2dc.png",{Heading:Oz,Paragraph:Pz}=Me,{CNHead4:Rz,CNTitleMedium:Mz}=Oz,{CNBodySmall:Lz}=Pz,Az=f.section` background: #f7f7f9; `,Iz=f.div` max-width: 1440px; @@ -1992,7 +1992,7 @@ Error generating stack: `+o.message+` flex-direction: column; align-items: center; width: 100%; -`,Yz=f.div` +`,Hz=f.div` width: 100%; margin-bottom: 0.31rem; padding-top: calc(1.63rem - 1.54rem); @@ -2001,7 +2001,7 @@ Error generating stack: `+o.message+` &.icon:last-of-type { border: none; } -`,Hz=f.img` +`,Yz=f.img` display: block; margin-inline: auto; margin-bottom: 0.13rem; @@ -2013,7 +2013,7 @@ Error generating stack: `+o.message+` width: 1.6rem; padding-bottom: 0.16rem; display: block; -`,Wz=f(Lz)``,Uz=[{title:"公众号",icon:_z,qrCode:Cz,text:"达坦科技DatenLord"},{title:"邮箱",icon:xz,qrCode:Dz,text:"info@datenlord.com"},{title:"微信",icon:Sz,qrCode:Ez,text:"DatenLord小助手"},{title:"B站",icon:bz,qrCode:jz,text:"达坦科技DatenLord"},{title:"知乎",icon:kz,qrCode:Tz,text:"达坦科技DatenLord"}],Bz=()=>l.jsx(Az,{id:"contact-us",children:l.jsxs(Iz,{children:[l.jsx(Nz,{children:"联系我们"}),l.jsx($z,{children:Uz.map(({title:e,icon:t,qrCode:r,text:n},i)=>l.jsxs(zz,{children:[l.jsxs(Yz,{className:"icon",children:[l.jsx(Hz,{src:t}),l.jsx(Fz,{children:e})]}),r&&l.jsx(Vz,{src:r}),l.jsx(Wz,{children:n})]},i))})]})}),{Heading:Gz}=Me,{CNHead4:Xz}=Gz,Kz=f.section` +`,Wz=f(Lz)``,Uz=[{title:"公众号",icon:_z,qrCode:Cz,text:"达坦科技DatenLord"},{title:"邮箱",icon:xz,qrCode:Dz,text:"info@datenlord.com"},{title:"微信",icon:Sz,qrCode:Ez,text:"DatenLord小助手"},{title:"B站",icon:bz,qrCode:Tz,text:"达坦科技DatenLord"},{title:"知乎",icon:kz,qrCode:jz,text:"达坦科技DatenLord"}],Bz=()=>l.jsx(Az,{id:"contact-us",children:l.jsxs(Iz,{children:[l.jsx(Nz,{children:"联系我们"}),l.jsx($z,{children:Uz.map(({title:e,icon:t,qrCode:r,text:n},i)=>l.jsxs(zz,{children:[l.jsxs(Hz,{className:"icon",children:[l.jsx(Yz,{src:t}),l.jsx(Fz,{children:e})]}),r&&l.jsx(Vz,{src:r}),l.jsx(Wz,{children:n})]},i))})]})}),{Heading:Gz}=Me,{CNHead4:Xz}=Gz,Kz=f.section` background: #fff; `,Qz=f.div` max-width: 1440px; @@ -2024,7 +2024,7 @@ Error generating stack: `+o.message+` `,qz=f(Xz)` padding-bottom: 1.23rem; text-align: center; -`,ow=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t==null||t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:KS,subTitle:"通过实现跨云、跨数据中心的数据高速访问,DatenLord将大大提升存储系统的可扩展性,同时大大降低企业级IT业务系统在实现高可用性、多活方面的复杂性。随着多云、多数据中心成为企业级IT的主流架构,跨云分布式存储将在互联网、金融、电信、能源等不同行业得到广泛应用。",children:"公司"}),l.jsx(Kz,{id:"join-us",children:l.jsxs(Qz,{children:[l.jsx(qz,{children:"加入我们"}),l.jsx(b8,{}),l.jsx(Y8,{}),l.jsx(K8,{}),l.jsx(wz,{})]})}),l.jsx(Bz,{})]})},Zz="/zh-cn/assets/video-demo-cover-6531bf08.png",hc="/zh-cn/assets/arrow-up-right-f6ca128c.svg",Jz="/zh-cn/assets/cover1-0f766121.jpg",eY="/zh-cn/assets/cover2-6c924915.jpg",tY="/zh-cn/assets/cover3-a8cadd7b.jpg",rY="/zh-cn/assets/cover4-da59baaf.jpg",nY="/zh-cn/assets/cover5-55104208.jpg",iY="/zh-cn/assets/cover6-bf6d56c4.jpg",oY="/zh-cn/assets/cover7-461ad08e.jpg",sY="/zh-cn/assets/cover8-18bb5252.jpg",aY="/zh-cn/assets/cover9-0cfe7433.jpg",lY="/zh-cn/assets/cover10-7707f5f7.jpg",cY="/zh-cn/assets/cover11-18bf7e52.jpg",uY="/zh-cn/assets/cover12-2ec52bb9.jpg",dY="/zh-cn/assets/cover13-20980f41.jpg",fY="/zh-cn/assets/cover14-6dff9a13.jpg",hY="/zh-cn/assets/cover15-f2819b4b.jpg",mY="/zh-cn/assets/cover16-6b3eea77.jpg",pY="/zh-cn/assets/cover17-2d99b802.jpg",gY="/zh-cn/assets/cover19-9503f8ee.jpg",vY="/zh-cn/assets/cover20-a198bfe8.jpg",yY="/zh-cn/assets/cover21-c1808615.jpg",wY="/zh-cn/assets/cover22-a24d3264.jpg",_Y="/zh-cn/assets/cover23-91837162.jpg",xY="/zh-cn/assets/cover24-f34d429f.jpg",SY="/zh-cn/assets/cover25-11f1a4dd.jpg",bY="/zh-cn/assets/cover26-574c835d.jpg",kY="/zh-cn/assets/cover27-cab7b800.jpg",CY="/zh-cn/assets/cover28-61988539.jpg",DY="/zh-cn/assets/cover29-cfa296fc.jpg",EY="/zh-cn/assets/cover30-6bc9e17a.jpg",jY="/zh-cn/assets/cover31-de17416a.jpg",TY="/zh-cn/assets/cover32-64d8c4cf.jpg",OY="/zh-cn/assets/cover33-747e46a5.jpg",PY="/zh-cn/assets/cover34-b47433e8.jpg",RY="/zh-cn/assets/cover35-474e265e.jpg",MY="/zh-cn/assets/cover40-e2bf253f.jpg",LY="/zh-cn/assets/cover41-56007738.jpg",AY="/zh-cn/assets/cover42-075bcf74.jpg",IY="/zh-cn/assets/cover43-d1896502.jpg",NY="/zh-cn/assets/cover50-2dc33471.jpg",$Y="/zh-cn/assets/cover51-235c2ee6.jpg",zY="/zh-cn/assets/cover52-06cc8093.jpg",YY="/zh-cn/assets/cover53-11208fe4.jpg",HY="/zh-cn/assets/cover54-00d520f8.jpg",FY=[{key:1,image:Jz,title:"Virtio-net相关知识介绍与Rust-for-Linux基本知识",text:"本场workshop由达坦科技李弘宇进行内容分享,主要介绍了Virtio-net相关知识介绍与Rust-for-Linux基本知识。欢迎参加达坦科技DatenLord相关开源项目:https://github.com/datenlord/linux/tree/rust_virtio",date:"2022.08.17",url:"https://www.bilibili.com/video/BV17G4y1a7Bv/"},{key:2,image:eY,title:"roce-sim Workshop分享",text:"本场workshop由达坦科技王恒宇进行内容分享,主要介绍了roce-sim相关知识分享,如果您对这方面有兴趣,欢迎参与达坦科技开源项目:Github链接:https://github.com/datenlord/roce-sim",date:"2022.08.25",url:"https://www.bilibili.com/video/BV1UB4y137Tn/"},{key:3,image:tY,title:"Cocotb Workshop分享",text:"本场workshop由达坦科技DatenLord 翁万正进行内容分享,主要进行了cocotb相关知识介绍。",date:"2022.09.23",url:"https://www.bilibili.com/video/BV19e4y1k7EE/"},{key:4,image:rY,title:"使用Copilot在分布式系统中容忍暂时变慢的节点",text:"本场workshop由达坦科技DatenLord 田野进行内容分享,主要进行了“使用Copilot在分布式系统中容忍暂时变慢的节点“相关知识介绍。",date:"2022.09.30",url:"https://www.bilibili.com/video/BV15e411T7pX/"},{key:5,image:nY,title:"硬件设计的集合方法",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了“硬件设计的集合方法”相关知识介绍。",date:"2022.10.09",url:"https://www.bilibili.com/video/BV1FK411Q7JV/"},{key:6,image:iY,title:"VLSI Sharing",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了VLSI相关知识介绍。",date:"2022.10.15",url:"https://www.bilibili.com/video/BV1bK411Q7GB/"},{key:7,image:oY,title:"Corumdum介绍",text:"本场workshop由西安电子科技大学 ISN网络与交换团队 硕士研究生李钊进行内容分享,主要进行了Corumdum相关知识介绍。",date:"2022.10.16",url:"https://www.bilibili.com/video/BV1qG41177Pq/"},{key:8,image:sY,title:"可编程交换机:原理与使用",text:"本场workshop由上海交通大学IPADS实验室博士二年级 张汉泽进行内容分享,主要进行了“可编程交换机:原理与使用”相关知识分享。可编程交换机由安装包处理规则的控制面与负责高速包处理的数据面构成,两者由一根PCIe总线相连。控制面支持高级语言编程,而数据面逻辑需要用P4语言编写。在可编程交换机上设计系统主要面临数据面内存有限与P4编程模型受限两大挑战。",date:"2022.10.23",url:"https://www.bilibili.com/video/BV1jm4y1w7w3/"},{key:9,image:aY,title:"形式化验证入门",text:"本场workshop由达坦科技DatenLord王璞进行内容分享,主要进行了形式化验证入门相关知识介绍。",date:"2022.10.26",url:"https://www.bilibili.com/video/BV1DG411L78p/"},{key:10,image:lY,title:"利用RDMA加速FaaS服务",text:"本场workshop由达坦科技DatenLord李弘宇进行内容分享,主要进行了“利用RDMA加速FaaS服务”相关知识介绍。",date:"2022.11.06",url:"https://www.bilibili.com/video/BV1et4y1K7Sw/"},{key:11,image:cY,title:"Rust for Linux",text:"本场workshop由苏宇恒进行内容分享,主要进行了“Rust for Linux”相关知识介绍。",date:"2022.11.08",url:"https://www.bilibili.com/video/BV1G8411a7CE/"},{key:12,image:uY,title:"Intel用户态中断",text:"本场workshop由韩明聪进行内容分享,主要进行了“Intel用户态中断”相关知识介绍。",date:"2022.11.08",url:"https://www.bilibili.com/video/BV1tG4y1t7Lg/"},{key:13,image:dY,title:"VLSI DSP Sharing",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了“VLSI DSP Intro”相关知识介绍。",date:"2022.11.11",url:"https://www.bilibili.com/video/BV18P4y1y7iP/"},{key:14,image:fY,title:"DSP Sharing Part2",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要就DSP相关知识进行第二次workshop分享",date:"2022.11.12",url:"https://www.bilibili.com/video/BV1bM411k7YP/"},{key:15,image:hY,title:"eunomia-bpf: 结合 wasm 的 ebpf 轻量级开发框架",text:"本场workshop由浙江大学学生/eunomia-bpf 开发者 郑昱笙进行内容分享,主要内容围绕“eunomia-bpf: 结合 wasm 的 ebpf 轻量级开发框架”相关知识。",date:"2022.11.20",url:"https://www.bilibili.com/video/BV1u84y1C7pQ/"},{key:16,image:mY,title:"RDMA网络拥塞管理架构",text:"本场workshop由北京邮电大学网络与交换国家重点实验室、计算机学院,副研究员、博导:张乙然进行内容分享,主要内容围绕“RDMA网络拥塞管理架构”进行知识介绍。",date:"2022.11.27",url:"https://www.bilibili.com/video/BV1Ve4y1g7gx/"},{key:17,image:pY,title:"使用RDMA加速服务器无感知计算容器启动",text:"本场workshop由上海交通大学助理教授魏星达进行分享,主要内容围绕“使用RDMA加速服务器无感知计算容器启动”进行知识介绍。",date:"2022.12.04",url:"https://www.bilibili.com/video/BV1qG4y1G784/"},{key:19,image:gY,title:"基于智能网卡的数据处理系统",text:"本场workshop由浙江大学百人计划研究员 王则可进行分享,主要内容为“基于智能网卡的数据处理系统”介绍。",date:"2022.12.18",url:"https://www.bilibili.com/video/BV1Eg411J7fJ/"},{key:20,image:vY,title:"异步事件驱动的电路机制 & 基于RISC-V的全异步超标量CPU体系结构",text:"本场workshop由何安平副教授进行分享,主要内容为“异步事件驱动的电路机制 & 基于RISC-V的全异步超标量CPU体系结构”介绍。",date:"2022.12.25",url:"https://www.bilibili.com/video/BV1sA411D7on/"},{key:21,image:yY,title:"使用 TLA+ 为分布式算法验证正确性",text:"本场workshop由达坦科技DatenLord田野进行分享,主要内容为“使用 TLA+ 为分布式算法验证正确性”介绍。",date:"2023.01.09",url:"https://www.bilibili.com/video/BV1pG4y1y7an/"},{key:22,image:wY,title:"喷泉码技术简介",text:"本场workshop由兰州大学信息科学与工程学院副教授、通信工程专业系主任袁磊 进行分享,主要内容为“喷泉码技术简介”介绍。",date:"2023.01.15",url:"https://www.bilibili.com/video/BV1SM411b77k/"},{key:23,image:_Y,title:"数据库隔离级别及MVCC",text:"本场workshop由达坦科技DatenLord施继成进行分享,主要内容为“数据库隔离级别及MVCC”介绍。",date:"2023.01.29",url:"https://www.bilibili.com/video/BV1sR4y1b7Cu/"},{key:24,image:xY,title:"互联网传输协议优化研究",text:"本场workshop由中国人民大学副教授李彤教授进行分享,主要内容为“互联网传输协议优化研究”介绍。",date:"2023.02.06",url:"https://www.bilibili.com/video/BV1X84y157vL/"},{key:25,image:SY,title:"高性能RDMA网络协议栈",text:"高性能RDMA网络协议栈是RDMA高性能网络的核心组成部分之一,它提供了支持RDMA技术的网络协议和驱动程序。在本周的前沿科技分享中,我们邀请到了湖南大学信息科学与工程学院的陈果教授来给我们分享高性能RDMA网络协议栈的话题。",date:"2023.02.28",url:"https://www.bilibili.com/video/BV1Y24y1n7Dk/"},{key:26,image:bY,title:"GPU抢占式任务调度",text:"GPU编程可以大幅提升计算速度和效率,从而使得许多计算任务得以在合理时间内完成。随着GPU硬件技术的发展和大规模数据处理需求的增加,GPU编程的应用范围不断扩大。在本周的前沿科技分享中,我们邀请到了上海交通大学并行与分布式研究所的韩明聪博士来给我们分享GPU抢占式任务调度。",date:"2023.03.05",url:"https://www.bilibili.com/video/BV1cY4y1y7ND/"},{key:27,image:kY,title:"聊聊RaptorQ纠错码",text:"喷泉码具有极高的纠错能力,且具有低延迟、地复杂度、高效率等优点,使其在冷存储、分布式存储、无线通信等领域得到广泛应用。达坦科技致力于软硬件融合的解决方案,喷泉码的高效实现在硬件上,作为公司长期的技术储备,在本周的前沿科技分享中,达坦科技的联合创始人兼CTO施继成将为大家分享聊聊 RaptorQ 纠错码 。",date:"2023.03.15",url:"https://www.bilibili.com/video/BV1wL411C7DL/"},{key:28,image:CY,title:"Buddy Compiler 简介和愿景",text:"在本次分享中,中国科学院软件研究所博士生张洪滨将介绍Buddy Compiler 编译流程、协同设计、硬件支持。Buddy Compiler 是领域特定的编译器框架,致力于打造基于 MLIR 和 RISC-V 的软硬件协同设计生态。其目标是实现从 DSL 到 DSA 的编译流程和协同设计,愿景是让领域特定的协同设计不再困难。",date:"2023.03.21",url:"https://www.bilibili.com/video/BV1YT41167GB/"},{key:29,image:DY,title:"新一代计算架构:超异构计算",text:"AGI带来的变化之一是算力将进一步从CPU转到GPU,在本周的前沿技术分享中,我们邀请到了上海矩向科技创始人兼CEO黄朝波为大家分享新一代计算架构:超异构计算。",date:"2023.04.04",url:"https://www.bilibili.com/video/BV1Rm4y1q7Dx/"},{key:30,image:EY,title:"通过Chainsaw设计DSP电路",text:"DSP在数据压缩、编码和加密方面都发挥了重要的作用;SpinalHDL具有更高的抽象层次和更强的表达能力,可以大大简化DSP电路设计的复杂度和提高开发效率;而Chainsaw框架可以在不同的FPGA平台上运行,提高了设计的灵活性和可移植性。在本周的前沿技术分享中,我们邀请到了中山大学在读博士李天瑞为大家分享通过Chainsaw设计DSP电路。",date:"2023.04.18",url:"https://www.bilibili.com/video/BV14o4y1j7bH/"},{key:31,image:jY,title:"Something About Cache Security",text:"在本周的前沿技术分享中,我们邀请到了浙江大学在读硕士研究生缪晨露为大家分享她在MICRO和HPCA上发表的两篇论文的精华,演讲主题是Something About Cache Security。",date:"2023.04.25",url:"https://www.bilibili.com/video/BV1p24y1F7fN/"},{key:32,image:TY,title:"Rust嵌入式开发生态介绍及入门",text:"在本周的前沿技术分享中,我们邀请到了一位爱好硬件的软件工程师米明恒,来为大家分享Rust嵌入式开发生态介绍及入门。",date:"2023.05.04",url:"https://www.bilibili.com/video/BV1J24y1T7EH/"},{key:33,image:OY,title:"RDMA赋能数据中心/超算中心间远程互联",text:"在本周的前沿技术分享中,我们邀请到了南京大学田臣教授,来为大家分享RDMA赋能数据中心/超算中心间远程互联。",date:"2023.06.04",url:"https://www.bilibili.com/video/BV1cz4y1B7cx/"},{key:34,image:PY,title:"Paper Reading: DPU任务卸载",text:"达坦科技一直在探索用硬件加速做分布式跨云存储,在本周的前沿技术分享中,我们邀请到了中南大学在读博士生卢军,来为大家分享DPU任务卸载的相关研究。",date:"2023.06.17",url:"https://www.bilibili.com/video/BV1R14y1S79T/"},{key:35,image:RY,title:"Rust在物理引擎研发中的应用",text:"在本周的前沿技术分享中,我们邀请到了Motphys CEO崔汉青,来为大家分享Rust在物理引擎研发中的应用。",date:"2023.06.27",url:"https://b23.tv/BZuSvyW"},{key:40,image:MY,title:"基于BSV的RTL仿真加速设计研究",text:"BSV的仿真加速可以提升硬件开发调试的效率。在本周的前沿技术分享中,我们邀请到了梁之杰,来为大家分享基于BSV的RTL仿真加速设计研究。",date:"2023.07.09",url:"https://www.bilibili.com/video/BV1ou411L7Yy/"},{key:41,image:LY,title:"RDMA网络的系统测试方案",text:"在本周的前沿技术分享中,我们邀请到了孔心皓,来为大家分享RDMA 网络的系统测试方案。",date:"2023.07.16",url:"https://www.bilibili.com/video/BV1tz4y147rw/"},{key:42,image:AY,title:"RapidWright技术分享会",text:"在本周的前沿技术分享中,我们邀请到了西南交通大学邸志雄副教授和他的学生向瀚章,来为大家分享开源FPGA设计工具RapidWright技术。",date:"2023.07.28",url:"https://www.bilibili.com/video/BV14z4y1x7a8/"},{key:43,image:IY,title:"基于Karmada实现Kubernetes应用跨集群故障转移",text:"在本周的前沿技术分享中,我们邀请到了开源爱好者,云兴科技软件研发工程师梁远鹏,来为大家分享基于Karmada实现Kubernetes应用跨集群故障转移。",date:"2023.08.01",url:"https://www.bilibili.com/video/BV1rN411Y7aZ/"},{key:50,image:NY,title:"大模型训练和基础设施",text:"在本周的前沿技术分享中,我们邀请到了范一呈,来为大家分享大模型训练和基础设施。",date:"2023.09.01",url:"https://www.bilibili.com/video/BV1ZN4y1R7HP/"},{key:51,image:$Y,title:"RustBelt与Rust形式化方法",text:"在本周的前沿技术分享中,我们邀请到了王俊吉,来为大家分享RustBelt与Rust形式化方法。",date:"2023.09.04",url:"https://www.bilibili.com/video/BV1Vw411D7rT/"},{key:52,image:zY,title:"网络的智能该放在哪里:网卡、交换机还是xPU",text:"在本周的前沿技术分享中,我们邀请到了Logenic AI联合创始人、前华为天才少年李博杰,来为大家分享网络的智能该放在哪里:网卡、交换机还是xPU。",date:"2023.09.25",url:"https://www.bilibili.com/video/BV1Kw411Y7Cj/"},{key:53,image:YY,title:"以ARM为镜的RISC-V",text:"在本周的前沿技术分享中,我们邀请到了Logenic AI联合创始人、前华为天才少年李博杰,来为大家分享网络的智能该放在哪里:网卡、交换机还是xPU。",date:"2023.09.25",url:"https://www.bilibili.com/video/BV1Kw411Y7Cj/"},{key:54,image:HY,title:"面向网络测量的可编程交换机优化技术",text:"在本周的前沿技术分享中,我们邀请到了北京大学计算机学院黄群助理教授,来为大家分享面向网络测量的可编程交换机优化技术。",date:"2023.10.20",url:"https://www.bilibili.com/video/BV1i84y1974F/"}],VY="/zh-cn/assets/cover1-42e6189a.jpg",WY="/zh-cn/assets/cover2-af26ed46.jpg",UY="/zh-cn/assets/cover3-9c9d21fa.jpg",BY=[{key:1,image:VY,title:"Xline-跨数据中心一致性的元数据管理",text:"天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline是一款开源分布式KV存储系统,基于Curp共识算法实现,旨在提供跨云元数据管理的功能。相比于传统共识协议Raft或Paxos,Curp在天空计算的场景中有着更好的性能表现。本次分享将聚焦于共识算法,从天空计算的背景和挑战出发,介绍Curp共识算法,以及Revision机制与Curp无序性语义之间的冲突,最后,简述下Xline未来的优化方向。欢迎了解更多关于Xline的信息:Https://github.com/datenlord/Xline",date:"2023.02.09",url:"https://www.bilibili.com/video/BV1XY411q7X8/"},{key:2,image:WY,title:"源码解读:Xline Curp共识协议的设计与实现",text:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。",date:"2023.04.30",url:"https://www.bilibili.com/video/BV1dL411h7YK/"},{key:3,image:UY,title:"Xline的Lease机制与实现",text:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。",date:"2023.06.09",url:"https://www.bilibili.com/video/BV1FX4y1h7X5/"}],GY="/zh-cn/assets/cover1-a1358db9.jpg",XY="/zh-cn/assets/cover2-b899ea12.jpg",KY="/zh-cn/assets/cover3-e0bf4798.jpg",QY="/zh-cn/assets/cover4-15b0b4f1.jpg",qY="/zh-cn/assets/cover5-7c4c2482.jpg",ZY="/zh-cn/assets/cover6-1c4d5c5f.jpg",JY="/zh-cn/assets/cover7-4f7454c0.jpg",eH="/zh-cn/assets/cover8-7e30c0fc.jpg",tH="/zh-cn/assets/cover9-e8c86c60.jpg",rH="/zh-cn/assets/cover10-bb13b118.jpg",nH="/zh-cn/assets/cover11-c29e9692.jpg",iH="/zh-cn/assets/cover12-6877e246.jpg",oH="/zh-cn/assets/cover13-5a4d97b0.jpg",sH=[{key:7,image:JY,title:"2022年Rust开发者大会Workshop One:用Rust实现RDMA高性能编程",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题workshop。这是本场workshop的第一部分,将为大家介绍如何用Rust实现RDMA高性能编程。",date:"2022.08.03",url:"https://www.bilibili.com/video/BV13e4y1D7Ch/"},{key:8,image:eH,title:"2022年Rust开发者大会Workshop Two:Async RDMA",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题workshop。这是第二部分workshop,将为大家介绍Async RDMA。",date:"2022.08.04",url:"https://www.bilibili.com/video/BV1Rh411M7EP/"},{key:9,image:tH,title:"2022年Rust开发者大会Workshop Three:Workshop动手实验环节",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题Workshop。这是本场Worshop的第三个部分:workshop动手环节 方便大家体验用Rust构建RDMA应用。",date:"2022.08.04",url:"https://www.bilibili.com/video/BV1oN4y1V7Hn/"},{key:1,image:GY,title:"Rust China Hackathon2022空中路演",text:"由Rust中文社区举办的题为「Rust For Fun」的首届Rust China Hackathon已经顺利完赛。达坦科技作为本届Hackathon的协办方,赞助参与本次企业组赛道。最终获得优胜奖的两支队伍在线上了举办一场空中路演。分享了:他们是如何思考拆解赛题的?在着手设计时碰到哪些难点和挑战?以及最终提交的代码设计思路和亮点。欢迎对Concurrent Indexing感兴趣的伙伴观看本条视频。",date:"2023.01.15",url:"https://www.bilibili.com/video/BV1xY41197Za/"},{key:2,image:XY,title:"4.8 Beijing Rust Meetup|张汉东《理解 Unsafe Rust》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由《Rust 编程之道》作者、Rust 中文社区布道者张汉东老师进行,主题为《理解 Unsafe Rust》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1c24y1A7aK/"},{key:3,image:KY,title:"4.8 Beijing Rust Meetup|冯洋《RUFES》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场由南京大学计算机科学与技术系助理研究员冯洋老师进行《基于实际场景应用分析的Rust库模糊测试技术报告》的演讲分享。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Qo4y1n7tS/"},{key:4,image:QY,title:"4.8 Beijing Rust Meetup|施继成《Rust for Linux 6.2》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Bs4y117Ze/"},{key:5,image:qY,title:"4.8 Beijing Rust Meetup|叶天星《用Rust实现Git传输协议、Git对象解析和数据库存储》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Bs4y117Ze/"},{key:6,image:ZY,title:"4.8 Beijing Rust Meetup|茌海《Monoio:一个基于 io-uring 的 Rust Runtime》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Rh411M7EP/"},{key:10,image:rH,title:"如何用Rust写分布式系统",text:"分享会介绍分布式KV Store (Xline) 整体的组成,以及不同组件之间如何去交互。在广域网下的分布式系统如何高效地达成共识,以及分布式系统如何实现容错。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV1Hs4y1r7dD/"},{key:11,image:nH,title:"Building microsecond-scale system with modern networking in Rust",text:"随着新型网络技术,如RDMA的普及,现代分布式应用的延迟降到了毫秒甚至微秒级别。这为构建系统软件带来了新的挑战。Rust的zero-cost抽象及内存管理能力能够为构建新型分布式应用带来新的机遇。我将分享利用Rust在用户态及内核态构建新型系统软件的相关经验,包括如何利用Rust抽象RDMA硬件的底层抽象及如何在内核构建一个毫秒级的容器启动机制。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV1Zo4y1P7Sg/"},{key:12,image:iH,title:"30分钟体验Rust for Linux内核模块开发",text:"本主题会提供构建好的docker开发环境,在30分钟内演示如何使用r4l开发一个简易内核模块,并介绍目前r4l的发展现状。可以自备好电脑现场体验。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV12j411U78o/"},{key:13,image:oH,title:"DatenLord 2023 Hackathon赛题宣讲会",text:"达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛主题为 Explore the Possibilities 赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来吧!",date:"2023.11.25",url:"https://www.bilibili.com/video/BV1su4y157iB/"}],aH="/zh-cn/assets/cover1-b9371555.jpg",lH="/zh-cn/assets/cover2-41a903e3.jpg",cH="/zh-cn/assets/cover2-41a903e3.jpg",uH="/zh-cn/assets/cover2-41a903e3.jpg",dH="/zh-cn/assets/cover2-41a903e3.jpg",fH="/zh-cn/assets/cover2-41a903e3.jpg",hH="/zh-cn/assets/cover2-41a903e3.jpg",mH="/zh-cn/assets/cover2-41a903e3.jpg",pH="/zh-cn/assets/cover2-41a903e3.jpg",gH="/zh-cn/assets/cover13-a69a12b0.jpg",vH="/zh-cn/assets/cover14-3a97e013.jpg",yH="/zh-cn/assets/cover14-3a97e013.jpg",wH="/zh-cn/assets/cover14-3a97e013.jpg",_H="/zh-cn/assets/cover14-3a97e013.jpg",xH="/zh-cn/assets/cover14-3a97e013.jpg",SH="/zh-cn/assets/cover14-3a97e013.jpg",bH="/zh-cn/assets/cover20-c97bc11b.jpg",kH="/zh-cn/assets/cover21-9f52ba13.jpg",CH="/zh-cn/assets/cover22-187b655a.jpg",DH="/zh-cn/assets/cover23-1e515665.jpg",EH="/zh-cn/assets/cover24-020d0c34.jpg",jH="/zh-cn/assets/cover25-cb84d871.jpg",TH="/zh-cn/assets/cover26-7a726e97.jpg",OH="/zh-cn/assets/cover27-401eea81.jpg",PH="/zh-cn/assets/cover28-6ddc6bee.jpg",RH="/zh-cn/assets/cover29-0d2deb11.jpg",MH=[{key:1,image:aH,title:"Utilizing SpinalHDL for Large-scale Datapath Design",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的一个workshop:Utilizing SpinalHDL for Large-scale Datapath Design,由李天瑞进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1PM411m7DB/"},{key:2,image:lH,title:"A Network Attached Deep Learning Accelerator for FPGA Clusters",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的三个workshop:A Network Attached Deep Learning Accelerator for FPGA Clusters,由Philipp Kreowsky Justin Knapheide进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1HM411m7mS/"},{key:3,image:cH,title:"Coding a microprogrammed protocol receiver in SpinalHDL",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的五个workshop:Coding a microprogrammed protocol receiver in SpinalHDL,由Michael Meier进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1oK411z7VD/"},{key:4,image:uH,title:"Utilizing SpinalHDL to Accelerate Neuroscience",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的二个workshop:Utilizing SpinalHDL to Accelerate Neuroscience,由Jeff-Ciesielski进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1GG4y1J7gU/"},{key:5,image:dH,title:"SpinalHDL in Computer Architecture Research",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的四个workshop:SpinalHDL in Computer Architecture Research,由Sallar Ahmadi-Pour ( saahm)进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1gA411X7f8/"},{key:6,image:fH,title:"NaxRiscv: A Pipeline/Plugins/SpinalHDL/Scala mix",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第六个workshop:NaxRiscv: A Pipeline/Plugins/SpinalHDL/Scala mix,由Dolu1990进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV13K41167q5/"},{key:7,image:hH,title:"Recent progress on formal verification support on SpinalHDL",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第七个workshop:Recent progress on formal verification support on SpinalHDL,由Xiao Yindong (Readon)进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV1bG411N7fk/"},{key:8,image:mH,title:"SpinalHDL for ASIC",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第八个workshop:SpinalHDL for ASIC,由Sebastien-riou进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV16e4y1L7dV/"},{key:9,image:pH,title:"From Peripheral Plugins to Product documentation",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第九个workshop:From Peripheral Plugins to Product documentation,由Andreas Wallner进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV12v4y1Q7cg/"},{key:13,image:gH,title:"Coroutines Applied to a Tilelink Interconnect Elaboration",text:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第一部分,由Charles Popen进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1Vz4y1J7ck/"},{key:14,image:vH,title:"RISC-V敏捷硬件开发-软件定义芯片",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第一个分享《RISC-V敏捷硬件开发-软件定义芯片》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Qh4y1K7pH/"},{key:15,image:yH,title:"香山处理器与敏捷开发工具链的最新进展",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第二个分享《香山处理器与敏捷开发工具链的最新进展》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Dz4y1T7V6/"},{key:16,image:wH,title:"数据流式编程在硬件设计中的应用",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第三个分享《数据流式编程在硬件设计中的应用》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV12N411B7TN/"},{key:17,image:_H,title:"EDA创新推动敏捷芯片设计",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第四个分享《EDA创新推动敏捷芯片设计》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Tz4y1M7vt/"},{key:18,image:xH,title:"Automated CPU design with AI",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第五个分享《Automated CPU design with AI》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV13w411Q7zi/"},{key:19,image:SH,title:"MetaHVL硬件敏捷验证与协同仿真",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第六个分享《MetaHVL硬件敏捷验证与协同仿》。",date:"2023.08.26",url:"https://www.bilibili.com/video/BV1DN4y197Pm/"},{key:20,image:bH,title:"计算机体系结构MIT课程学习社区经验分享",text:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。本场分享主题为【计算机体系结构MIT课程学习社区经验分享】,旨在了解学习社区各位同学学习的状态和面临的挑战,邀请已完成课程的学员分享学习和动手操作LAB的经验和教训,以此更好地辅助大家完成课程。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1cs4y1r7T3/"},{key:21,image:kH,title:"计算机体系结构 l MIT课程学习新手上路宣讲",text:"达坦科技在2023年始,发起成立计算机体系结构- MIT课程学习社区,号召感兴趣的工程师和同学系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。为此,达坦科技软硬件联合开发工程师米明恒在2023年9月23日(周六)上午10:30为大家带来了一场计算机体系结构 l MIT课程学习新手上路宣讲。",date:"2023.09.24",url:"https://www.bilibili.com/video/BV1u8411i7Qw/"},{key:22,image:CH,title:"Stream Transaction Extender设计与验证",text:"达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第二部分,由电子科技大学副教授肖寅东(Readon)进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1pM4y1j7Lm/"},{key:23,image:DH,title:"面向Multi-Die FPGA的设计与部署自动化方法探索",text:"达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第三部分,由西安交通大学副教授邸志雄进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1og4y1c7RS/"},{key:24,image:EH,title:"Get Started with SpinalHDL with a Simplified Setup",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办了 《2023 SpinalHDL应用前景探索》的线上研讨会,这是研讨会第一个视频,Get Started with SpinalHDL with a Simplified Setup",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1TW4y1F7uQ/"},{key:25,image:jH,title:"Some Tips on Using Memory Black Box in SpinalHDL",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第二个视频,由yportne13带来“Some Tips on Using Memory Black Box in SpinalHDL”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1LC4y1g7c7/"},{key:26,image:TH,title:"Pipelining API Introduction",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第三个视频,由Charles Papon带来“Pipelining API Introduction”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Zj411n7SC/"},{key:27,image:OH,title:"SpinalHDL Intro for New Users",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第四个视频,由Andreas Wallner带来“SpinalHDL Intro for New Users”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Mw41147aS/"},{key:28,image:PH,title:"Pcie Brief Introduction",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第五个视频,由Chenbo带来“Pcie Brief Introduction”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Mw41147aS/"},{key:29,image:RH,title:"The J1Sc Family",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第六个视频,由Christopher Lozinsk带来“The J1Sc Family”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Jc411o7A6/"}],{Heading:LH,Paragraph:AH}=Me,{CNHead4:IH,CNTitleLarge:NH}=LH,{CNMarkSmall:$H,CNBodySmall:zH}=AH,mc=new Map([["tech-talk",{label:"前沿科技分享",description:"探索前沿技术,拥抱创新与改变",list:FY,recommend:27}],["oss-showcase",{label:"开源产品分享",description:"软硬件融合创新实践的观察与输出",list:BY,recommend:2}],["rust-showcase",{label:"Rust语言应用及案例分享",description:"Rust编程语言的应用、实践与探索",list:sH,recommend:12}],["hardware-acceleration",{label:"硬件加速",description:"硬件加速领域的实践、经验与挑战",list:MH,recommend:21}]]),YH=f.main``,HH=f.div` +`,ow=()=>{const{sectionId:e}=gn();return N.useEffect(()=>{const t=document.querySelector(`#${e}`);t?t==null||t.scrollIntoView():window.scrollTo(0,0)},[e]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:KS,subTitle:"通过实现跨云、跨数据中心的数据高速访问,DatenLord将大大提升存储系统的可扩展性,同时大大降低企业级IT业务系统在实现高可用性、多活方面的复杂性。随着多云、多数据中心成为企业级IT的主流架构,跨云分布式存储将在互联网、金融、电信、能源等不同行业得到广泛应用。",children:"公司"}),l.jsx(Kz,{id:"join-us",children:l.jsxs(Qz,{children:[l.jsx(qz,{children:"加入我们"}),l.jsx(b8,{}),l.jsx(H8,{}),l.jsx(K8,{}),l.jsx(wz,{})]})}),l.jsx(Bz,{})]})},Zz="/zh-cn/assets/video-demo-cover-6531bf08.png",hc="/zh-cn/assets/arrow-up-right-f6ca128c.svg",Jz="/zh-cn/assets/cover1-0f766121.jpg",eH="/zh-cn/assets/cover2-6c924915.jpg",tH="/zh-cn/assets/cover3-a8cadd7b.jpg",rH="/zh-cn/assets/cover4-da59baaf.jpg",nH="/zh-cn/assets/cover5-55104208.jpg",iH="/zh-cn/assets/cover6-bf6d56c4.jpg",oH="/zh-cn/assets/cover7-461ad08e.jpg",sH="/zh-cn/assets/cover8-18bb5252.jpg",aH="/zh-cn/assets/cover9-0cfe7433.jpg",lH="/zh-cn/assets/cover10-7707f5f7.jpg",cH="/zh-cn/assets/cover11-18bf7e52.jpg",uH="/zh-cn/assets/cover12-2ec52bb9.jpg",dH="/zh-cn/assets/cover13-20980f41.jpg",fH="/zh-cn/assets/cover14-6dff9a13.jpg",hH="/zh-cn/assets/cover15-f2819b4b.jpg",mH="/zh-cn/assets/cover16-6b3eea77.jpg",pH="/zh-cn/assets/cover17-2d99b802.jpg",gH="/zh-cn/assets/cover19-9503f8ee.jpg",vH="/zh-cn/assets/cover20-a198bfe8.jpg",yH="/zh-cn/assets/cover21-c1808615.jpg",wH="/zh-cn/assets/cover22-a24d3264.jpg",_H="/zh-cn/assets/cover23-91837162.jpg",xH="/zh-cn/assets/cover24-f34d429f.jpg",SH="/zh-cn/assets/cover25-11f1a4dd.jpg",bH="/zh-cn/assets/cover26-574c835d.jpg",kH="/zh-cn/assets/cover27-cab7b800.jpg",CH="/zh-cn/assets/cover28-61988539.jpg",DH="/zh-cn/assets/cover29-cfa296fc.jpg",EH="/zh-cn/assets/cover30-6bc9e17a.jpg",TH="/zh-cn/assets/cover31-de17416a.jpg",jH="/zh-cn/assets/cover32-64d8c4cf.jpg",OH="/zh-cn/assets/cover33-747e46a5.jpg",PH="/zh-cn/assets/cover34-b47433e8.jpg",RH="/zh-cn/assets/cover35-474e265e.jpg",MH="/zh-cn/assets/cover40-e2bf253f.jpg",LH="/zh-cn/assets/cover41-56007738.jpg",AH="/zh-cn/assets/cover42-075bcf74.jpg",IH="/zh-cn/assets/cover43-d1896502.jpg",NH="/zh-cn/assets/cover50-2dc33471.jpg",$H="/zh-cn/assets/cover51-235c2ee6.jpg",zH="/zh-cn/assets/cover52-06cc8093.jpg",HH="/zh-cn/assets/cover53-11208fe4.jpg",YH="/zh-cn/assets/cover54-00d520f8.jpg",FH=[{key:1,image:Jz,title:"Virtio-net相关知识介绍与Rust-for-Linux基本知识",text:"本场workshop由达坦科技李弘宇进行内容分享,主要介绍了Virtio-net相关知识介绍与Rust-for-Linux基本知识。欢迎参加达坦科技DatenLord相关开源项目:https://github.com/datenlord/linux/tree/rust_virtio",date:"2022.08.17",url:"https://www.bilibili.com/video/BV17G4y1a7Bv/"},{key:2,image:eH,title:"roce-sim Workshop分享",text:"本场workshop由达坦科技王恒宇进行内容分享,主要介绍了roce-sim相关知识分享,如果您对这方面有兴趣,欢迎参与达坦科技开源项目:Github链接:https://github.com/datenlord/roce-sim",date:"2022.08.25",url:"https://www.bilibili.com/video/BV1UB4y137Tn/"},{key:3,image:tH,title:"Cocotb Workshop分享",text:"本场workshop由达坦科技DatenLord 翁万正进行内容分享,主要进行了cocotb相关知识介绍。",date:"2022.09.23",url:"https://www.bilibili.com/video/BV19e4y1k7EE/"},{key:4,image:rH,title:"使用Copilot在分布式系统中容忍暂时变慢的节点",text:"本场workshop由达坦科技DatenLord 田野进行内容分享,主要进行了“使用Copilot在分布式系统中容忍暂时变慢的节点“相关知识介绍。",date:"2022.09.30",url:"https://www.bilibili.com/video/BV15e411T7pX/"},{key:5,image:nH,title:"硬件设计的集合方法",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了“硬件设计的集合方法”相关知识介绍。",date:"2022.10.09",url:"https://www.bilibili.com/video/BV1FK411Q7JV/"},{key:6,image:iH,title:"VLSI Sharing",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了VLSI相关知识介绍。",date:"2022.10.15",url:"https://www.bilibili.com/video/BV1bK411Q7GB/"},{key:7,image:oH,title:"Corumdum介绍",text:"本场workshop由西安电子科技大学 ISN网络与交换团队 硕士研究生李钊进行内容分享,主要进行了Corumdum相关知识介绍。",date:"2022.10.16",url:"https://www.bilibili.com/video/BV1qG41177Pq/"},{key:8,image:sH,title:"可编程交换机:原理与使用",text:"本场workshop由上海交通大学IPADS实验室博士二年级 张汉泽进行内容分享,主要进行了“可编程交换机:原理与使用”相关知识分享。可编程交换机由安装包处理规则的控制面与负责高速包处理的数据面构成,两者由一根PCIe总线相连。控制面支持高级语言编程,而数据面逻辑需要用P4语言编写。在可编程交换机上设计系统主要面临数据面内存有限与P4编程模型受限两大挑战。",date:"2022.10.23",url:"https://www.bilibili.com/video/BV1jm4y1w7w3/"},{key:9,image:aH,title:"形式化验证入门",text:"本场workshop由达坦科技DatenLord王璞进行内容分享,主要进行了形式化验证入门相关知识介绍。",date:"2022.10.26",url:"https://www.bilibili.com/video/BV1DG411L78p/"},{key:10,image:lH,title:"利用RDMA加速FaaS服务",text:"本场workshop由达坦科技DatenLord李弘宇进行内容分享,主要进行了“利用RDMA加速FaaS服务”相关知识介绍。",date:"2022.11.06",url:"https://www.bilibili.com/video/BV1et4y1K7Sw/"},{key:11,image:cH,title:"Rust for Linux",text:"本场workshop由苏宇恒进行内容分享,主要进行了“Rust for Linux”相关知识介绍。",date:"2022.11.08",url:"https://www.bilibili.com/video/BV1G8411a7CE/"},{key:12,image:uH,title:"Intel用户态中断",text:"本场workshop由韩明聪进行内容分享,主要进行了“Intel用户态中断”相关知识介绍。",date:"2022.11.08",url:"https://www.bilibili.com/video/BV1tG4y1t7Lg/"},{key:13,image:dH,title:"VLSI DSP Sharing",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要进行了“VLSI DSP Intro”相关知识介绍。",date:"2022.11.11",url:"https://www.bilibili.com/video/BV18P4y1y7iP/"},{key:14,image:fH,title:"DSP Sharing Part2",text:"本场workshop由达坦科技DatenLord李天瑞进行内容分享,主要就DSP相关知识进行第二次workshop分享",date:"2022.11.12",url:"https://www.bilibili.com/video/BV1bM411k7YP/"},{key:15,image:hH,title:"eunomia-bpf: 结合 wasm 的 ebpf 轻量级开发框架",text:"本场workshop由浙江大学学生/eunomia-bpf 开发者 郑昱笙进行内容分享,主要内容围绕“eunomia-bpf: 结合 wasm 的 ebpf 轻量级开发框架”相关知识。",date:"2022.11.20",url:"https://www.bilibili.com/video/BV1u84y1C7pQ/"},{key:16,image:mH,title:"RDMA网络拥塞管理架构",text:"本场workshop由北京邮电大学网络与交换国家重点实验室、计算机学院,副研究员、博导:张乙然进行内容分享,主要内容围绕“RDMA网络拥塞管理架构”进行知识介绍。",date:"2022.11.27",url:"https://www.bilibili.com/video/BV1Ve4y1g7gx/"},{key:17,image:pH,title:"使用RDMA加速服务器无感知计算容器启动",text:"本场workshop由上海交通大学助理教授魏星达进行分享,主要内容围绕“使用RDMA加速服务器无感知计算容器启动”进行知识介绍。",date:"2022.12.04",url:"https://www.bilibili.com/video/BV1qG4y1G784/"},{key:19,image:gH,title:"基于智能网卡的数据处理系统",text:"本场workshop由浙江大学百人计划研究员 王则可进行分享,主要内容为“基于智能网卡的数据处理系统”介绍。",date:"2022.12.18",url:"https://www.bilibili.com/video/BV1Eg411J7fJ/"},{key:20,image:vH,title:"异步事件驱动的电路机制 & 基于RISC-V的全异步超标量CPU体系结构",text:"本场workshop由何安平副教授进行分享,主要内容为“异步事件驱动的电路机制 & 基于RISC-V的全异步超标量CPU体系结构”介绍。",date:"2022.12.25",url:"https://www.bilibili.com/video/BV1sA411D7on/"},{key:21,image:yH,title:"使用 TLA+ 为分布式算法验证正确性",text:"本场workshop由达坦科技DatenLord田野进行分享,主要内容为“使用 TLA+ 为分布式算法验证正确性”介绍。",date:"2023.01.09",url:"https://www.bilibili.com/video/BV1pG4y1y7an/"},{key:22,image:wH,title:"喷泉码技术简介",text:"本场workshop由兰州大学信息科学与工程学院副教授、通信工程专业系主任袁磊 进行分享,主要内容为“喷泉码技术简介”介绍。",date:"2023.01.15",url:"https://www.bilibili.com/video/BV1SM411b77k/"},{key:23,image:_H,title:"数据库隔离级别及MVCC",text:"本场workshop由达坦科技DatenLord施继成进行分享,主要内容为“数据库隔离级别及MVCC”介绍。",date:"2023.01.29",url:"https://www.bilibili.com/video/BV1sR4y1b7Cu/"},{key:24,image:xH,title:"互联网传输协议优化研究",text:"本场workshop由中国人民大学副教授李彤教授进行分享,主要内容为“互联网传输协议优化研究”介绍。",date:"2023.02.06",url:"https://www.bilibili.com/video/BV1X84y157vL/"},{key:25,image:SH,title:"高性能RDMA网络协议栈",text:"高性能RDMA网络协议栈是RDMA高性能网络的核心组成部分之一,它提供了支持RDMA技术的网络协议和驱动程序。在本周的前沿科技分享中,我们邀请到了湖南大学信息科学与工程学院的陈果教授来给我们分享高性能RDMA网络协议栈的话题。",date:"2023.02.28",url:"https://www.bilibili.com/video/BV1Y24y1n7Dk/"},{key:26,image:bH,title:"GPU抢占式任务调度",text:"GPU编程可以大幅提升计算速度和效率,从而使得许多计算任务得以在合理时间内完成。随着GPU硬件技术的发展和大规模数据处理需求的增加,GPU编程的应用范围不断扩大。在本周的前沿科技分享中,我们邀请到了上海交通大学并行与分布式研究所的韩明聪博士来给我们分享GPU抢占式任务调度。",date:"2023.03.05",url:"https://www.bilibili.com/video/BV1cY4y1y7ND/"},{key:27,image:kH,title:"聊聊RaptorQ纠错码",text:"喷泉码具有极高的纠错能力,且具有低延迟、地复杂度、高效率等优点,使其在冷存储、分布式存储、无线通信等领域得到广泛应用。达坦科技致力于软硬件融合的解决方案,喷泉码的高效实现在硬件上,作为公司长期的技术储备,在本周的前沿科技分享中,达坦科技的联合创始人兼CTO施继成将为大家分享聊聊 RaptorQ 纠错码 。",date:"2023.03.15",url:"https://www.bilibili.com/video/BV1wL411C7DL/"},{key:28,image:CH,title:"Buddy Compiler 简介和愿景",text:"在本次分享中,中国科学院软件研究所博士生张洪滨将介绍Buddy Compiler 编译流程、协同设计、硬件支持。Buddy Compiler 是领域特定的编译器框架,致力于打造基于 MLIR 和 RISC-V 的软硬件协同设计生态。其目标是实现从 DSL 到 DSA 的编译流程和协同设计,愿景是让领域特定的协同设计不再困难。",date:"2023.03.21",url:"https://www.bilibili.com/video/BV1YT41167GB/"},{key:29,image:DH,title:"新一代计算架构:超异构计算",text:"AGI带来的变化之一是算力将进一步从CPU转到GPU,在本周的前沿技术分享中,我们邀请到了上海矩向科技创始人兼CEO黄朝波为大家分享新一代计算架构:超异构计算。",date:"2023.04.04",url:"https://www.bilibili.com/video/BV1Rm4y1q7Dx/"},{key:30,image:EH,title:"通过Chainsaw设计DSP电路",text:"DSP在数据压缩、编码和加密方面都发挥了重要的作用;SpinalHDL具有更高的抽象层次和更强的表达能力,可以大大简化DSP电路设计的复杂度和提高开发效率;而Chainsaw框架可以在不同的FPGA平台上运行,提高了设计的灵活性和可移植性。在本周的前沿技术分享中,我们邀请到了中山大学在读博士李天瑞为大家分享通过Chainsaw设计DSP电路。",date:"2023.04.18",url:"https://www.bilibili.com/video/BV14o4y1j7bH/"},{key:31,image:TH,title:"Something About Cache Security",text:"在本周的前沿技术分享中,我们邀请到了浙江大学在读硕士研究生缪晨露为大家分享她在MICRO和HPCA上发表的两篇论文的精华,演讲主题是Something About Cache Security。",date:"2023.04.25",url:"https://www.bilibili.com/video/BV1p24y1F7fN/"},{key:32,image:jH,title:"Rust嵌入式开发生态介绍及入门",text:"在本周的前沿技术分享中,我们邀请到了一位爱好硬件的软件工程师米明恒,来为大家分享Rust嵌入式开发生态介绍及入门。",date:"2023.05.04",url:"https://www.bilibili.com/video/BV1J24y1T7EH/"},{key:33,image:OH,title:"RDMA赋能数据中心/超算中心间远程互联",text:"在本周的前沿技术分享中,我们邀请到了南京大学田臣教授,来为大家分享RDMA赋能数据中心/超算中心间远程互联。",date:"2023.06.04",url:"https://www.bilibili.com/video/BV1cz4y1B7cx/"},{key:34,image:PH,title:"Paper Reading: DPU任务卸载",text:"达坦科技一直在探索用硬件加速做分布式跨云存储,在本周的前沿技术分享中,我们邀请到了中南大学在读博士生卢军,来为大家分享DPU任务卸载的相关研究。",date:"2023.06.17",url:"https://www.bilibili.com/video/BV1R14y1S79T/"},{key:35,image:RH,title:"Rust在物理引擎研发中的应用",text:"在本周的前沿技术分享中,我们邀请到了Motphys CEO崔汉青,来为大家分享Rust在物理引擎研发中的应用。",date:"2023.06.27",url:"https://b23.tv/BZuSvyW"},{key:40,image:MH,title:"基于BSV的RTL仿真加速设计研究",text:"BSV的仿真加速可以提升硬件开发调试的效率。在本周的前沿技术分享中,我们邀请到了梁之杰,来为大家分享基于BSV的RTL仿真加速设计研究。",date:"2023.07.09",url:"https://www.bilibili.com/video/BV1ou411L7Yy/"},{key:41,image:LH,title:"RDMA网络的系统测试方案",text:"在本周的前沿技术分享中,我们邀请到了孔心皓,来为大家分享RDMA 网络的系统测试方案。",date:"2023.07.16",url:"https://www.bilibili.com/video/BV1tz4y147rw/"},{key:42,image:AH,title:"RapidWright技术分享会",text:"在本周的前沿技术分享中,我们邀请到了西南交通大学邸志雄副教授和他的学生向瀚章,来为大家分享开源FPGA设计工具RapidWright技术。",date:"2023.07.28",url:"https://www.bilibili.com/video/BV14z4y1x7a8/"},{key:43,image:IH,title:"基于Karmada实现Kubernetes应用跨集群故障转移",text:"在本周的前沿技术分享中,我们邀请到了开源爱好者,云兴科技软件研发工程师梁远鹏,来为大家分享基于Karmada实现Kubernetes应用跨集群故障转移。",date:"2023.08.01",url:"https://www.bilibili.com/video/BV1rN411Y7aZ/"},{key:50,image:NH,title:"大模型训练和基础设施",text:"在本周的前沿技术分享中,我们邀请到了范一呈,来为大家分享大模型训练和基础设施。",date:"2023.09.01",url:"https://www.bilibili.com/video/BV1ZN4y1R7HP/"},{key:51,image:$H,title:"RustBelt与Rust形式化方法",text:"在本周的前沿技术分享中,我们邀请到了王俊吉,来为大家分享RustBelt与Rust形式化方法。",date:"2023.09.04",url:"https://www.bilibili.com/video/BV1Vw411D7rT/"},{key:52,image:zH,title:"网络的智能该放在哪里:网卡、交换机还是xPU",text:"在本周的前沿技术分享中,我们邀请到了Logenic AI联合创始人、前华为天才少年李博杰,来为大家分享网络的智能该放在哪里:网卡、交换机还是xPU。",date:"2023.09.25",url:"https://www.bilibili.com/video/BV1Kw411Y7Cj/"},{key:53,image:HH,title:"以ARM为镜的RISC-V",text:"在本周的前沿技术分享中,我们邀请到了Logenic AI联合创始人、前华为天才少年李博杰,来为大家分享网络的智能该放在哪里:网卡、交换机还是xPU。",date:"2023.09.25",url:"https://www.bilibili.com/video/BV1Kw411Y7Cj/"},{key:54,image:YH,title:"面向网络测量的可编程交换机优化技术",text:"在本周的前沿技术分享中,我们邀请到了北京大学计算机学院黄群助理教授,来为大家分享面向网络测量的可编程交换机优化技术。",date:"2023.10.20",url:"https://www.bilibili.com/video/BV1i84y1974F/"}],VH="/zh-cn/assets/cover1-42e6189a.jpg",WH="/zh-cn/assets/cover2-af26ed46.jpg",UH="/zh-cn/assets/cover3-9c9d21fa.jpg",BH=[{key:1,image:VH,title:"Xline-跨数据中心一致性的元数据管理",text:"天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline是一款开源分布式KV存储系统,基于Curp共识算法实现,旨在提供跨云元数据管理的功能。相比于传统共识协议Raft或Paxos,Curp在天空计算的场景中有着更好的性能表现。本次分享将聚焦于共识算法,从天空计算的背景和挑战出发,介绍Curp共识算法,以及Revision机制与Curp无序性语义之间的冲突,最后,简述下Xline未来的优化方向。欢迎了解更多关于Xline的信息:Https://github.com/datenlord/Xline",date:"2023.02.09",url:"https://www.bilibili.com/video/BV1XY411q7X8/"},{key:2,image:WH,title:"源码解读:Xline Curp共识协议的设计与实现",text:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。",date:"2023.04.30",url:"https://www.bilibili.com/video/BV1dL411h7YK/"},{key:3,image:UH,title:"Xline的Lease机制与实现",text:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源分布式KV存储Xline,针对多数据中心场景,可以实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性。",date:"2023.06.09",url:"https://www.bilibili.com/video/BV1FX4y1h7X5/"}],GH="/zh-cn/assets/cover1-a1358db9.jpg",XH="/zh-cn/assets/cover2-b899ea12.jpg",KH="/zh-cn/assets/cover3-e0bf4798.jpg",QH="/zh-cn/assets/cover4-15b0b4f1.jpg",qH="/zh-cn/assets/cover5-7c4c2482.jpg",ZH="/zh-cn/assets/cover6-1c4d5c5f.jpg",JH="/zh-cn/assets/cover7-4f7454c0.jpg",eY="/zh-cn/assets/cover8-7e30c0fc.jpg",tY="/zh-cn/assets/cover9-e8c86c60.jpg",rY="/zh-cn/assets/cover10-bb13b118.jpg",nY="/zh-cn/assets/cover11-c29e9692.jpg",iY="/zh-cn/assets/cover12-6877e246.jpg",oY="/zh-cn/assets/cover13-5a4d97b0.jpg",sY=[{key:7,image:JH,title:"2022年Rust开发者大会Workshop One:用Rust实现RDMA高性能编程",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题workshop。这是本场workshop的第一部分,将为大家介绍如何用Rust实现RDMA高性能编程。",date:"2022.08.03",url:"https://www.bilibili.com/video/BV13e4y1D7Ch/"},{key:8,image:eY,title:"2022年Rust开发者大会Workshop Two:Async RDMA",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题workshop。这是第二部分workshop,将为大家介绍Async RDMA。",date:"2022.08.04",url:"https://www.bilibili.com/video/BV1Rh411M7EP/"},{key:9,image:tY,title:"2022年Rust开发者大会Workshop Three:Workshop动手实验环节",text:"2022年7月31日,北京达坦科技有限公司获邀参加Rust China大会,并做公司专题Workshop。这是本场Worshop的第三个部分:workshop动手环节 方便大家体验用Rust构建RDMA应用。",date:"2022.08.04",url:"https://www.bilibili.com/video/BV1oN4y1V7Hn/"},{key:1,image:GH,title:"Rust China Hackathon2022空中路演",text:"由Rust中文社区举办的题为「Rust For Fun」的首届Rust China Hackathon已经顺利完赛。达坦科技作为本届Hackathon的协办方,赞助参与本次企业组赛道。最终获得优胜奖的两支队伍在线上了举办一场空中路演。分享了:他们是如何思考拆解赛题的?在着手设计时碰到哪些难点和挑战?以及最终提交的代码设计思路和亮点。欢迎对Concurrent Indexing感兴趣的伙伴观看本条视频。",date:"2023.01.15",url:"https://www.bilibili.com/video/BV1xY41197Za/"},{key:2,image:XH,title:"4.8 Beijing Rust Meetup|张汉东《理解 Unsafe Rust》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由《Rust 编程之道》作者、Rust 中文社区布道者张汉东老师进行,主题为《理解 Unsafe Rust》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1c24y1A7aK/"},{key:3,image:KH,title:"4.8 Beijing Rust Meetup|冯洋《RUFES》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场由南京大学计算机科学与技术系助理研究员冯洋老师进行《基于实际场景应用分析的Rust库模糊测试技术报告》的演讲分享。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Qo4y1n7tS/"},{key:4,image:QH,title:"4.8 Beijing Rust Meetup|施继成《Rust for Linux 6.2》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Bs4y117Ze/"},{key:5,image:qH,title:"4.8 Beijing Rust Meetup|叶天星《用Rust实现Git传输协议、Git对象解析和数据库存储》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Bs4y117Ze/"},{key:6,image:ZH,title:"4.8 Beijing Rust Meetup|茌海《Monoio:一个基于 io-uring 的 Rust Runtime》",text:"2023年4月8日,达坦科技联合南京大学、CloudWeGo、华为等技术专家成功举办了题为Rust 💡X的meetup。本场分享由达坦科技联合创始人兼CTO施继成进行,演讲主题是《Rust for Linux 6.2》。",date:"2023.04.12",url:"https://www.bilibili.com/video/BV1Rh411M7EP/"},{key:10,image:rY,title:"如何用Rust写分布式系统",text:"分享会介绍分布式KV Store (Xline) 整体的组成,以及不同组件之间如何去交互。在广域网下的分布式系统如何高效地达成共识,以及分布式系统如何实现容错。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV1Hs4y1r7dD/"},{key:11,image:nY,title:"Building microsecond-scale system with modern networking in Rust",text:"随着新型网络技术,如RDMA的普及,现代分布式应用的延迟降到了毫秒甚至微秒级别。这为构建系统软件带来了新的挑战。Rust的zero-cost抽象及内存管理能力能够为构建新型分布式应用带来新的机遇。我将分享利用Rust在用户态及内核态构建新型系统软件的相关经验,包括如何利用Rust抽象RDMA硬件的底层抽象及如何在内核构建一个毫秒级的容器启动机制。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV1Zo4y1P7Sg/"},{key:12,image:iY,title:"30分钟体验Rust for Linux内核模块开发",text:"本主题会提供构建好的docker开发环境,在30分钟内演示如何使用r4l开发一个简易内核模块,并介绍目前r4l的发展现状。可以自备好电脑现场体验。",date:"2023.06.24",url:"https://www.bilibili.com/video/BV12j411U78o/"},{key:13,image:oY,title:"DatenLord 2023 Hackathon赛题宣讲会",text:"达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛主题为 Explore the Possibilities 赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来吧!",date:"2023.11.25",url:"https://www.bilibili.com/video/BV1su4y157iB/"}],aY="/zh-cn/assets/cover1-b9371555.jpg",lY="/zh-cn/assets/cover2-41a903e3.jpg",cY="/zh-cn/assets/cover2-41a903e3.jpg",uY="/zh-cn/assets/cover2-41a903e3.jpg",dY="/zh-cn/assets/cover2-41a903e3.jpg",fY="/zh-cn/assets/cover2-41a903e3.jpg",hY="/zh-cn/assets/cover2-41a903e3.jpg",mY="/zh-cn/assets/cover2-41a903e3.jpg",pY="/zh-cn/assets/cover2-41a903e3.jpg",gY="/zh-cn/assets/cover13-a69a12b0.jpg",vY="/zh-cn/assets/cover14-3a97e013.jpg",yY="/zh-cn/assets/cover14-3a97e013.jpg",wY="/zh-cn/assets/cover14-3a97e013.jpg",_Y="/zh-cn/assets/cover14-3a97e013.jpg",xY="/zh-cn/assets/cover14-3a97e013.jpg",SY="/zh-cn/assets/cover14-3a97e013.jpg",bY="/zh-cn/assets/cover20-c97bc11b.jpg",kY="/zh-cn/assets/cover21-9f52ba13.jpg",CY="/zh-cn/assets/cover22-187b655a.jpg",DY="/zh-cn/assets/cover23-1e515665.jpg",EY="/zh-cn/assets/cover24-020d0c34.jpg",TY="/zh-cn/assets/cover25-cb84d871.jpg",jY="/zh-cn/assets/cover26-7a726e97.jpg",OY="/zh-cn/assets/cover27-401eea81.jpg",PY="/zh-cn/assets/cover28-6ddc6bee.jpg",RY="/zh-cn/assets/cover29-0d2deb11.jpg",MY=[{key:1,image:aY,title:"Utilizing SpinalHDL for Large-scale Datapath Design",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的一个workshop:Utilizing SpinalHDL for Large-scale Datapath Design,由李天瑞进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1PM411m7DB/"},{key:2,image:lY,title:"A Network Attached Deep Learning Accelerator for FPGA Clusters",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的三个workshop:A Network Attached Deep Learning Accelerator for FPGA Clusters,由Philipp Kreowsky Justin Knapheide进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1HM411m7mS/"},{key:3,image:cY,title:"Coding a microprogrammed protocol receiver in SpinalHDL",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的五个workshop:Coding a microprogrammed protocol receiver in SpinalHDL,由Michael Meier进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1oK411z7VD/"},{key:4,image:uY,title:"Utilizing SpinalHDL to Accelerate Neuroscience",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的二个workshop:Utilizing SpinalHDL to Accelerate Neuroscience,由Jeff-Ciesielski进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1GG4y1J7gU/"},{key:5,image:dY,title:"SpinalHDL in Computer Architecture Research",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的四个workshop:SpinalHDL in Computer Architecture Research,由Sallar Ahmadi-Pour ( saahm)进行分享。",date:"2022.12.20",url:"https://www.bilibili.com/video/BV1gA411X7f8/"},{key:6,image:fY,title:"NaxRiscv: A Pipeline/Plugins/SpinalHDL/Scala mix",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第六个workshop:NaxRiscv: A Pipeline/Plugins/SpinalHDL/Scala mix,由Dolu1990进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV13K41167q5/"},{key:7,image:hY,title:"Recent progress on formal verification support on SpinalHDL",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第七个workshop:Recent progress on formal verification support on SpinalHDL,由Xiao Yindong (Readon)进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV1bG411N7fk/"},{key:8,image:mY,title:"SpinalHDL for ASIC",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第八个workshop:SpinalHDL for ASIC,由Sebastien-riou进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV16e4y1L7dV/"},{key:9,image:pY,title:"From Peripheral Plugins to Product documentation",text:"为了让对开源硬件感兴趣的朋友进一步了解SpinalHDL,达坦科技联合SpinalHDL社区举办一场题为《SpinalHDL应用前景探索》的线上研讨会(Webinar)。本研讨会分三个讨论分主题,分别为:数据通路加速(Datapath/Accelerations)、复杂系统设计案例(Design)、硬件设计流程(Flow)。这是本场研讨会的第九个workshop:From Peripheral Plugins to Product documentation,由Andreas Wallner进行分享。",date:"2022.12.21",url:"https://www.bilibili.com/video/BV12v4y1Q7cg/"},{key:13,image:gY,title:"Coroutines Applied to a Tilelink Interconnect Elaboration",text:"SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第一部分,由Charles Popen进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1Vz4y1J7ck/"},{key:14,image:vY,title:"RISC-V敏捷硬件开发-软件定义芯片",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第一个分享《RISC-V敏捷硬件开发-软件定义芯片》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Qh4y1K7pH/"},{key:15,image:yY,title:"香山处理器与敏捷开发工具链的最新进展",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第二个分享《香山处理器与敏捷开发工具链的最新进展》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Dz4y1T7V6/"},{key:16,image:wY,title:"数据流式编程在硬件设计中的应用",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第三个分享《数据流式编程在硬件设计中的应用》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV12N411B7TN/"},{key:17,image:_Y,title:"EDA创新推动敏捷芯片设计",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第四个分享《EDA创新推动敏捷芯片设计》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV1Tz4y1M7vt/"},{key:18,image:xY,title:"Automated CPU design with AI",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第五个分享《Automated CPU design with AI》。",date:"2023.08.25",url:"https://www.bilibili.com/video/BV13w411Q7zi/"},{key:19,image:SY,title:"MetaHVL硬件敏捷验证与协同仿真",text:"2023年8月23日至25日, 2023 RISC-V中国峰会在北京香格里拉饭店举办。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技在线上举办了第二届硬件敏捷开发与验证方法学研讨会。本次研讨会邀请了业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。这是本场研讨会的第六个分享《MetaHVL硬件敏捷验证与协同仿》。",date:"2023.08.26",url:"https://www.bilibili.com/video/BV1DN4y197Pm/"},{key:20,image:bY,title:"计算机体系结构MIT课程学习社区经验分享",text:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。本场分享主题为【计算机体系结构MIT课程学习社区经验分享】,旨在了解学习社区各位同学学习的状态和面临的挑战,邀请已完成课程的学员分享学习和动手操作LAB的经验和教训,以此更好地辅助大家完成课程。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1cs4y1r7T3/"},{key:21,image:kY,title:"计算机体系结构 l MIT课程学习新手上路宣讲",text:"达坦科技在2023年始,发起成立计算机体系结构- MIT课程学习社区,号召感兴趣的工程师和同学系统地学习计算机体系结构相关知识,并且通过动手项目来验证学习的成果。为此,达坦科技软硬件联合开发工程师米明恒在2023年9月23日(周六)上午10:30为大家带来了一场计算机体系结构 l MIT课程学习新手上路宣讲。",date:"2023.09.24",url:"https://www.bilibili.com/video/BV1u8411i7Qw/"},{key:22,image:CY,title:"Stream Transaction Extender设计与验证",text:"达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第二部分,由电子科技大学副教授肖寅东(Readon)进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1pM4y1j7Lm/"},{key:23,image:DY,title:"面向Multi-Die FPGA的设计与部署自动化方法探索",text:"达坦科技联合了SpinalHDL社区,以及四川芯测电子技术有限公司举办了一场题为SpinalHDL的使用和开发经验研讨会,旨在和大家分享SpinalHDL最新的实践、挑战和经验的分享。本视频为Workshop的第三部分,由西安交通大学副教授邸志雄进行分享。",date:"2023.07.08",url:"https://www.bilibili.com/video/BV1og4y1c7RS/"},{key:24,image:EY,title:"Get Started with SpinalHDL with a Simplified Setup",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办了 《2023 SpinalHDL应用前景探索》的线上研讨会,这是研讨会第一个视频,Get Started with SpinalHDL with a Simplified Setup",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1TW4y1F7uQ/"},{key:25,image:TY,title:"Some Tips on Using Memory Black Box in SpinalHDL",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第二个视频,由yportne13带来“Some Tips on Using Memory Black Box in SpinalHDL”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1LC4y1g7c7/"},{key:26,image:jY,title:"Pipelining API Introduction",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第三个视频,由Charles Papon带来“Pipelining API Introduction”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Zj411n7SC/"},{key:27,image:OY,title:"SpinalHDL Intro for New Users",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第四个视频,由Andreas Wallner带来“SpinalHDL Intro for New Users”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Mw41147aS/"},{key:28,image:PY,title:"Pcie Brief Introduction",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第五个视频,由Chenbo带来“Pcie Brief Introduction”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Mw41147aS/"},{key:29,image:RY,title:"The J1Sc Family",text:"在2023年12月10日,达坦科技联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 了《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。这是第六个视频,由Christopher Lozinsk带来“The J1Sc Family”。",date:"2023.12.17",url:"https://www.bilibili.com/video/BV1Jc411o7A6/"}],{Heading:LY,Paragraph:AY}=Me,{CNHead4:IY,CNTitleLarge:NY}=LY,{CNMarkSmall:$Y,CNBodySmall:zY}=AY,mc=new Map([["tech-talk",{label:"前沿科技分享",description:"探索前沿技术,拥抱创新与改变",list:FH,recommend:27}],["oss-showcase",{label:"开源产品分享",description:"软硬件融合创新实践的观察与输出",list:BH,recommend:2}],["rust-showcase",{label:"Rust语言应用及案例分享",description:"Rust编程语言的应用、实践与探索",list:sY,recommend:12}],["hardware-acceleration",{label:"硬件加速",description:"硬件加速领域的实践、经验与挑战",list:MY,recommend:21}]]),HY=f.main``,YY=f.div` max-width: 1440px; margin-inline: auto; padding: 1rem 1.76rem 1.68rem; @@ -2033,39 +2033,39 @@ Error generating stack: `+o.message+` &:last-child { padding-bottom: 0; } -`,jh=f(IH)` +`,Th=f(IY)` padding-bottom: 0.48rem; text-align: center; -`,FH=f.div` +`,FY=f.div` display: grid; grid-template-rows: repeat(2, 1fr); grid-template-columns: repeat(2, 1fr); grid-gap: 0.29rem; -`,VH=f.div` +`,VY=f.div` display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 0.43rem 0.29rem; `,eb=f.div` display: flex; flex-direction: column; -`,WH=f(eb)` +`,WY=f(eb)` display: flex; flex-direction: column; grid-area: 1 / 1 / 3 / 2; -`,UH=f.div` +`,UY=f.div` display: flex; justify-content: space-between; height: 100%; -`,BH=f.div``,sw=f.img` +`,BY=f.div``,sw=f.img` display: block; width: 100%; border-radius: 0.06rem; -`,GH=f.img` +`,GY=f.img` display: block; width: 50%; height: min-content; border-radius: 0.06rem; -`,XH=f.img` +`,XY=f.img` float: left; width: 50%; padding-right: 0.21rem; @@ -2073,9 +2073,9 @@ Error generating stack: `+o.message+` border-radius: 0.06rem; `,aw=f.div` padding-top: 0.29rem; -`,KH=f.div` +`,KY=f.div` width: 47%; -`,pc=f($H)` +`,pc=f($Y)` padding-bottom: 0.11rem; color: ${e=>e.theme.secondary01}; `,gc=f.div` @@ -2087,21 +2087,21 @@ Error generating stack: `+o.message+` &:hover { color: #531dab; } -`,vc=f(NH)``,yc=f.img` +`,vc=f(NY)``,yc=f.img` width: 0.215rem; height: 0.215rem; -`,wc=f(zH)` +`,wc=f(zY)` color: #667085; -`,_c=()=>{var a,c,d,h;const t=ti().pathname.split("/").join(""),r=(a=mc.get(t))==null?void 0:a.label,n=(c=mc.get(t))==null?void 0:c.description,i=(d=mc.get(t))==null?void 0:d.list.reverse(),o=(h=mc.get(t))==null?void 0:h.recommend;return N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:Zz,subTitle:n,children:r}),l.jsx(YH,{children:l.jsxs(HH,{children:[l.jsxs(Eh,{children:[l.jsx(jh,{children:"最新视频"}),l.jsx(FH,{children:i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C},E)=>E===0?l.jsxs(WH,{children:[l.jsx(sw,{src:v}),l.jsxs(aw,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g):E<3?l.jsxs(BH,{children:[l.jsx(XH,{src:v}),l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]},E):null)})]}),l.jsxs(Eh,{children:[l.jsx(jh,{children:"推荐视频"}),i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C})=>{if(g===o)return l.jsxs(UH,{children:[l.jsx(GH,{src:v}),l.jsxs(KH,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g)})]}),l.jsxs(Eh,{children:[l.jsx(jh,{children:"全部视频"}),l.jsx(VH,{children:i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C})=>l.jsxs(eb,{children:[l.jsx(sw,{src:v}),l.jsxs(aw,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g))})]})]})})]})};//! moment.js +`,_c=()=>{var a,c,d,h;const t=ti().pathname.split("/").join(""),r=(a=mc.get(t))==null?void 0:a.label,n=(c=mc.get(t))==null?void 0:c.description,i=(d=mc.get(t))==null?void 0:d.list.reverse(),o=(h=mc.get(t))==null?void 0:h.recommend;return N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsxs(Pt.Fragment,{children:[l.jsx(yn,{cover:Zz,subTitle:n,children:r}),l.jsx(HY,{children:l.jsxs(YY,{children:[l.jsxs(Eh,{children:[l.jsx(Th,{children:"最新视频"}),l.jsx(FY,{children:i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C},E)=>E===0?l.jsxs(WY,{children:[l.jsx(sw,{src:v}),l.jsxs(aw,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g):E<3?l.jsxs(BY,{children:[l.jsx(XY,{src:v}),l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]},E):null)})]}),l.jsxs(Eh,{children:[l.jsx(Th,{children:"推荐视频"}),i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C})=>{if(g===o)return l.jsxs(UY,{children:[l.jsx(GY,{src:v}),l.jsxs(KY,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g)})]}),l.jsxs(Eh,{children:[l.jsx(Th,{children:"全部视频"}),l.jsx(VY,{children:i&&i.map(({key:g,image:v,date:x,title:b,text:k,url:C})=>l.jsxs(eb,{children:[l.jsx(sw,{src:v}),l.jsxs(aw,{children:[l.jsx(pc,{children:x}),l.jsxs(gc,{as:lc,to:C,children:[l.jsx(vc,{children:b}),l.jsx(yc,{src:hc})]}),l.jsx(wc,{children:k})]})]},g))})]})]})})]})};//! moment.js //! version : 2.29.4 //! authors : Tim Wood, Iskren Chernev, Moment.js contributors //! license : MIT //! momentjs.com -var tb;function U(){return tb.apply(null,arguments)}function QH(e){tb=e}function Zr(e){return e instanceof Array||Object.prototype.toString.call(e)==="[object Array]"}function lo(e){return e!=null&&Object.prototype.toString.call(e)==="[object Object]"}function Oe(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function wg(e){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(e).length===0;var t;for(t in e)if(Oe(e,t))return!1;return!0}function ar(e){return e===void 0}function qn(e){return typeof e=="number"||Object.prototype.toString.call(e)==="[object Number]"}function bl(e){return e instanceof Date||Object.prototype.toString.call(e)==="[object Date]"}function rb(e,t){var r=[],n,i=e.length;for(n=0;n>>0,n;for(n=0;n0)for(r=0;r>>0,n;for(n=0;n0)for(r=0;r=0;return(o?r?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+n}var bg=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,xc=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Oh={},hs={};function se(e,t,r,n){var i=n;typeof n=="string"&&(i=function(){return this[n]()}),e&&(hs[e]=i),t&&(hs[t[0]]=function(){return mn(i.apply(this,arguments),t[1],t[2])}),r&&(hs[r]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function tF(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function rF(e){var t=e.match(bg),r,n;for(r=0,n=t.length;r=0&&xc.test(e);)e=e.replace(xc,n),xc.lastIndex=0,r-=1;return e}var nF={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function iF(e){var t=this._longDateFormat[e],r=this._longDateFormat[e.toUpperCase()];return t||!r?t:(this._longDateFormat[e]=r.match(bg).map(function(n){return n==="MMMM"||n==="MM"||n==="DD"||n==="dddd"?n.slice(1):n}).join(""),this._longDateFormat[e])}var oF="Invalid date";function sF(){return this._invalidDate}var aF="%d",lF=/\d{1,2}/;function cF(e){return this._ordinal.replace("%d",e)}var uF={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function dF(e,t,r,n){var i=this._relativeTime[r];return _n(i)?i(e,t,r,n):i.replace(/%d/i,e)}function fF(e,t){var r=this._relativeTime[e>0?"future":"past"];return _n(r)?r(t):r.replace(/%s/i,t)}var Aa={};function Bt(e,t){var r=e.toLowerCase();Aa[r]=Aa[r+"s"]=Aa[t]=e}function Ir(e){return typeof e=="string"?Aa[e]||Aa[e.toLowerCase()]:void 0}function kg(e){var t={},r,n;for(n in e)Oe(e,n)&&(r=Ir(n),r&&(t[r]=e[n]));return t}var sb={};function Gt(e,t){sb[e]=t}function hF(e){var t=[],r;for(r in e)Oe(e,r)&&t.push({unit:r,priority:sb[r]});return t.sort(function(n,i){return n.priority-i.priority}),t}function Gd(e){return e%4===0&&e%100!==0||e%400===0}function jr(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function we(e){var t=+e,r=0;return t!==0&&isFinite(t)&&(r=jr(t)),r}function Hs(e,t){return function(r){return r!=null?(ab(this,e,r),U.updateOffset(this,t),this):Mu(this,e)}}function Mu(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function ab(e,t,r){e.isValid()&&!isNaN(r)&&(t==="FullYear"&&Gd(e.year())&&e.month()===1&&e.date()===29?(r=we(r),e._d["set"+(e._isUTC?"UTC":"")+t](r,e.month(),Jd(r,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](r))}function mF(e){return e=Ir(e),_n(this[e])?this[e]():this}function pF(e,t){if(typeof e=="object"){e=kg(e);var r=hF(e),n,i=r.length;for(n=0;n68?1900:2e3)};var vb=Hs("FullYear",!0);function LF(){return Gd(this.year())}function AF(e,t,r,n,i,o,a){var c;return e<100&&e>=0?(c=new Date(e+400,t,r,n,i,o,a),isFinite(c.getFullYear())&&c.setFullYear(e)):c=new Date(e,t,r,n,i,o,a),c}function al(e){var t,r;return e<100&&e>=0?(r=Array.prototype.slice.call(arguments),r[0]=e+400,t=new Date(Date.UTC.apply(null,r)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Au(e,t,r){var n=7+t-r,i=(7+al(e,0,n).getUTCDay()-t)%7;return-i+n-1}function yb(e,t,r,n,i){var o=(7+r-n)%7,a=Au(e,n,i),c=1+7*(t-1)+o+a,d,h;return c<=0?(d=e-1,h=Ia(d)+c):c>Ia(e)?(d=e+1,h=c-Ia(e)):(d=e,h=c),{year:d,dayOfYear:h}}function ll(e,t,r){var n=Au(e.year(),t,r),i=Math.floor((e.dayOfYear()-n-1)/7)+1,o,a;return i<1?(a=e.year()-1,o=i+Bn(a,t,r)):i>Bn(e.year(),t,r)?(o=i-Bn(e.year(),t,r),a=e.year()+1):(a=e.year(),o=i),{week:o,year:a}}function Bn(e,t,r){var n=Au(e,t,r),i=Au(e+1,t,r);return(Ia(e)-n+i)/7}se("w",["ww",2],"wo","week");se("W",["WW",2],"Wo","isoWeek");Bt("week","w");Bt("isoWeek","W");Gt("week",5);Gt("isoWeek",5);q("w",Ke);q("ww",Ke,kr);q("W",Ke);q("WW",Ke,kr);Dl(["w","ww","W","WW"],function(e,t,r,n){t[n.substr(0,1)]=we(e)});function IF(e){return ll(e,this._week.dow,this._week.doy).week}var NF={dow:0,doy:6};function $F(){return this._week.dow}function zF(){return this._week.doy}function YF(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,"d")}function HF(e){var t=ll(this,1,4).week;return e==null?t:this.add((e-t)*7,"d")}se("d",0,"do","day");se("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)});se("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)});se("dddd",0,0,function(e){return this.localeData().weekdays(this,e)});se("e",0,0,"weekday");se("E",0,0,"isoWeekday");Bt("day","d");Bt("weekday","e");Bt("isoWeekday","E");Gt("day",11);Gt("weekday",11);Gt("isoWeekday",11);q("d",Ke);q("e",Ke);q("E",Ke);q("dd",function(e,t){return t.weekdaysMinRegex(e)});q("ddd",function(e,t){return t.weekdaysShortRegex(e)});q("dddd",function(e,t){return t.weekdaysRegex(e)});Dl(["dd","ddd","dddd"],function(e,t,r,n){var i=r._locale.weekdaysParse(e,n,r._strict);i!=null?t.d=i:pe(r).invalidWeekday=e});Dl(["d","e","E"],function(e,t,r,n){t[n]=we(e)});function FF(e,t){return typeof e!="string"?e:isNaN(e)?(e=t.weekdaysParse(e),typeof e=="number"?e:null):parseInt(e,10)}function VF(e,t){return typeof e=="string"?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Eg(e,t){return e.slice(t,7).concat(e.slice(0,t))}var WF="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),wb="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),UF="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),BF=Cl,GF=Cl,XF=Cl;function KF(e,t){var r=Zr(this._weekdays)?this._weekdays:this._weekdays[e&&e!==!0&&this._weekdays.isFormat.test(t)?"format":"standalone"];return e===!0?Eg(r,this._week.dow):e?r[e.day()]:r}function QF(e){return e===!0?Eg(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function qF(e){return e===!0?Eg(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function ZF(e,t,r){var n,i,o,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)o=wn([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(o,"").toLocaleLowerCase();return r?t==="dddd"?(i=dt.call(this._weekdaysParse,a),i!==-1?i:null):t==="ddd"?(i=dt.call(this._shortWeekdaysParse,a),i!==-1?i:null):(i=dt.call(this._minWeekdaysParse,a),i!==-1?i:null):t==="dddd"?(i=dt.call(this._weekdaysParse,a),i!==-1||(i=dt.call(this._shortWeekdaysParse,a),i!==-1)?i:(i=dt.call(this._minWeekdaysParse,a),i!==-1?i:null)):t==="ddd"?(i=dt.call(this._shortWeekdaysParse,a),i!==-1||(i=dt.call(this._weekdaysParse,a),i!==-1)?i:(i=dt.call(this._minWeekdaysParse,a),i!==-1?i:null)):(i=dt.call(this._minWeekdaysParse,a),i!==-1||(i=dt.call(this._weekdaysParse,a),i!==-1)?i:(i=dt.call(this._shortWeekdaysParse,a),i!==-1?i:null))}function JF(e,t,r){var n,i,o;if(this._weekdaysParseExact)return ZF.call(this,e,t,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(i=wn([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[n]=new RegExp(o.replace(".",""),"i")),r&&t==="dddd"&&this._fullWeekdaysParse[n].test(e))return n;if(r&&t==="ddd"&&this._shortWeekdaysParse[n].test(e))return n;if(r&&t==="dd"&&this._minWeekdaysParse[n].test(e))return n;if(!r&&this._weekdaysParse[n].test(e))return n}}function eV(e){if(!this.isValid())return e!=null?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return e!=null?(e=FF(e,this.localeData()),this.add(e-t,"d")):t}function tV(e){if(!this.isValid())return e!=null?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,"d")}function rV(e){if(!this.isValid())return e!=null?this:NaN;if(e!=null){var t=VF(e,this.localeData());return this.day(this.day()%7?t:t-7)}else return this.day()||7}function nV(e){return this._weekdaysParseExact?(Oe(this,"_weekdaysRegex")||jg.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(Oe(this,"_weekdaysRegex")||(this._weekdaysRegex=BF),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function iV(e){return this._weekdaysParseExact?(Oe(this,"_weekdaysRegex")||jg.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(Oe(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=GF),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function oV(e){return this._weekdaysParseExact?(Oe(this,"_weekdaysRegex")||jg.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(Oe(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=XF),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function jg(){function e(g,v){return v.length-g.length}var t=[],r=[],n=[],i=[],o,a,c,d,h;for(o=0;o<7;o++)a=wn([2e3,1]).day(o),c=gr(this.weekdaysMin(a,"")),d=gr(this.weekdaysShort(a,"")),h=gr(this.weekdays(a,"")),t.push(c),r.push(d),n.push(h),i.push(c),i.push(d),i.push(h);t.sort(e),r.sort(e),n.sort(e),i.sort(e),this._weekdaysRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function Tg(){return this.hours()%12||12}function sV(){return this.hours()||24}se("H",["HH",2],0,"hour");se("h",["hh",2],0,Tg);se("k",["kk",2],0,sV);se("hmm",0,0,function(){return""+Tg.apply(this)+mn(this.minutes(),2)});se("hmmss",0,0,function(){return""+Tg.apply(this)+mn(this.minutes(),2)+mn(this.seconds(),2)});se("Hmm",0,0,function(){return""+this.hours()+mn(this.minutes(),2)});se("Hmmss",0,0,function(){return""+this.hours()+mn(this.minutes(),2)+mn(this.seconds(),2)});function _b(e,t){se(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}_b("a",!0);_b("A",!1);Bt("hour","h");Gt("hour",13);function xb(e,t){return t._meridiemParse}q("a",xb);q("A",xb);q("H",Ke);q("h",Ke);q("k",Ke);q("HH",Ke,kr);q("hh",Ke,kr);q("kk",Ke,kr);q("hmm",ub);q("hmmss",db);q("Hmm",ub);q("Hmmss",db);Ye(["H","HH"],Ct);Ye(["k","kk"],function(e,t,r){var n=we(e);t[Ct]=n===24?0:n});Ye(["a","A"],function(e,t,r){r._isPm=r._locale.isPM(e),r._meridiem=e});Ye(["h","hh"],function(e,t,r){t[Ct]=we(e),pe(r).bigHour=!0});Ye("hmm",function(e,t,r){var n=e.length-2;t[Ct]=we(e.substr(0,n)),t[Gr]=we(e.substr(n)),pe(r).bigHour=!0});Ye("hmmss",function(e,t,r){var n=e.length-4,i=e.length-2;t[Ct]=we(e.substr(0,n)),t[Gr]=we(e.substr(n,2)),t[Vn]=we(e.substr(i)),pe(r).bigHour=!0});Ye("Hmm",function(e,t,r){var n=e.length-2;t[Ct]=we(e.substr(0,n)),t[Gr]=we(e.substr(n))});Ye("Hmmss",function(e,t,r){var n=e.length-4,i=e.length-2;t[Ct]=we(e.substr(0,n)),t[Gr]=we(e.substr(n,2)),t[Vn]=we(e.substr(i))});function aV(e){return(e+"").toLowerCase().charAt(0)==="p"}var lV=/[ap]\.?m?\.?/i,cV=Hs("Hours",!0);function uV(e,t,r){return e>11?r?"pm":"PM":r?"am":"AM"}var Sb={calendar:JH,longDateFormat:nF,invalidDate:oF,ordinal:aF,dayOfMonthOrdinalParse:lF,relativeTime:uF,months:kF,monthsShort:fb,week:NF,weekdays:WF,weekdaysMin:UF,weekdaysShort:wb,meridiemParse:lV},qe={},ma={},cl;function dV(e,t){var r,n=Math.min(e.length,t.length);for(r=0;r0;){if(i=ef(o.slice(0,r).join("-")),i)return i;if(n&&n.length>=r&&dV(o,n)>=r-1)break;r--}t++}return cl}function hV(e){return e.match("^[^/\\\\]*$")!=null}function ef(e){var t=null,r;if(qe[e]===void 0&&typeof Gc<"u"&&Gc&&Gc.exports&&hV(e))try{t=cl._abbr,r=require,r("./locale/"+e),Li(t)}catch{qe[e]=null}return qe[e]}function Li(e,t){var r;return e&&(ar(t)?r=ri(e):r=Og(e,t),r?cl=r:typeof console<"u"&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),cl._abbr}function Og(e,t){if(t!==null){var r,n=Sb;if(t.abbr=e,qe[e]!=null)ib("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=qe[e]._config;else if(t.parentLocale!=null)if(qe[t.parentLocale]!=null)n=qe[t.parentLocale]._config;else if(r=ef(t.parentLocale),r!=null)n=r._config;else return ma[t.parentLocale]||(ma[t.parentLocale]=[]),ma[t.parentLocale].push({name:e,config:t}),null;return qe[e]=new Sg(Mp(n,t)),ma[e]&&ma[e].forEach(function(i){Og(i.name,i.config)}),Li(e),qe[e]}else return delete qe[e],null}function mV(e,t){if(t!=null){var r,n,i=Sb;qe[e]!=null&&qe[e].parentLocale!=null?qe[e].set(Mp(qe[e]._config,t)):(n=ef(e),n!=null&&(i=n._config),t=Mp(i,t),n==null&&(t.abbr=e),r=new Sg(t),r.parentLocale=qe[e],qe[e]=r),Li(e)}else qe[e]!=null&&(qe[e].parentLocale!=null?(qe[e]=qe[e].parentLocale,e===Li()&&Li(e)):qe[e]!=null&&delete qe[e]);return qe[e]}function ri(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return cl;if(!Zr(e)){if(t=ef(e),t)return t;e=[e]}return fV(e)}function pV(){return Lp(qe)}function Pg(e){var t,r=e._a;return r&&pe(e).overflow===-2&&(t=r[Fn]<0||r[Fn]>11?Fn:r[cn]<1||r[cn]>Jd(r[Wt],r[Fn])?cn:r[Ct]<0||r[Ct]>24||r[Ct]===24&&(r[Gr]!==0||r[Vn]!==0||r[no]!==0)?Ct:r[Gr]<0||r[Gr]>59?Gr:r[Vn]<0||r[Vn]>59?Vn:r[no]<0||r[no]>999?no:-1,pe(e)._overflowDayOfYear&&(tcn)&&(t=cn),pe(e)._overflowWeeks&&t===-1&&(t=xF),pe(e)._overflowWeekday&&t===-1&&(t=SF),pe(e).overflow=t),e}var gV=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,vV=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,yV=/Z|[+-]\d\d(?::?\d\d)?/,Sc=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Ph=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],wV=/^\/?Date\((-?\d+)/i,_V=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,xV={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function bb(e){var t,r,n=e._i,i=gV.exec(n)||vV.exec(n),o,a,c,d,h=Sc.length,g=Ph.length;if(i){for(pe(e).iso=!0,t=0,r=h;tIa(a)||e._dayOfYear===0)&&(pe(e)._overflowDayOfYear=!0),r=al(a,0,e._dayOfYear),e._a[Fn]=r.getUTCMonth(),e._a[cn]=r.getUTCDate()),t=0;t<3&&e._a[t]==null;++t)e._a[t]=n[t]=i[t];for(;t<7;t++)e._a[t]=n[t]=e._a[t]==null?t===2?1:0:e._a[t];e._a[Ct]===24&&e._a[Gr]===0&&e._a[Vn]===0&&e._a[no]===0&&(e._nextDay=!0,e._a[Ct]=0),e._d=(e._useUTC?al:AF).apply(null,n),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),e._tzm!=null&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ct]=24),e._w&&typeof e._w.d<"u"&&e._w.d!==o&&(pe(e).weekdayMismatch=!0)}}function TV(e){var t,r,n,i,o,a,c,d,h;t=e._w,t.GG!=null||t.W!=null||t.E!=null?(o=1,a=4,r=Ho(t.GG,e._a[Wt],ll(Xe(),1,4).year),n=Ho(t.W,1),i=Ho(t.E,1),(i<1||i>7)&&(d=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,h=ll(Xe(),o,a),r=Ho(t.gg,e._a[Wt],h.year),n=Ho(t.w,h.week),t.d!=null?(i=t.d,(i<0||i>6)&&(d=!0)):t.e!=null?(i=t.e+o,(t.e<0||t.e>6)&&(d=!0)):i=o),n<1||n>Bn(r,o,a)?pe(e)._overflowWeeks=!0:d!=null?pe(e)._overflowWeekday=!0:(c=yb(r,n,i,o,a),e._a[Wt]=c.year,e._dayOfYear=c.dayOfYear)}U.ISO_8601=function(){};U.RFC_2822=function(){};function Mg(e){if(e._f===U.ISO_8601){bb(e);return}if(e._f===U.RFC_2822){kb(e);return}e._a=[],pe(e).empty=!0;var t=""+e._i,r,n,i,o,a,c=t.length,d=0,h,g;for(i=ob(e._f,e._locale).match(bg)||[],g=i.length,r=0;r0&&pe(e).unusedInput.push(a),t=t.slice(t.indexOf(n)+n.length),d+=n.length),hs[o]?(n?pe(e).empty=!1:pe(e).unusedTokens.push(o),_F(o,n,e)):e._strict&&!n&&pe(e).unusedTokens.push(o);pe(e).charsLeftOver=c-d,t.length>0&&pe(e).unusedInput.push(t),e._a[Ct]<=12&&pe(e).bigHour===!0&&e._a[Ct]>0&&(pe(e).bigHour=void 0),pe(e).parsedDateParts=e._a.slice(0),pe(e).meridiem=e._meridiem,e._a[Ct]=OV(e._locale,e._a[Ct],e._meridiem),h=pe(e).era,h!==null&&(e._a[Wt]=e._locale.erasConvertYear(h,e._a[Wt])),Rg(e),Pg(e)}function OV(e,t,r){var n;return r==null?t:e.meridiemHour!=null?e.meridiemHour(t,r):(e.isPM!=null&&(n=e.isPM(r),n&&t<12&&(t+=12),!n&&t===12&&(t=0)),t)}function PV(e){var t,r,n,i,o,a,c=!1,d=e._f.length;if(d===0){pe(e).invalidFormat=!0,e._d=new Date(NaN);return}for(i=0;ithis?this:e:Bd()});function Eb(e,t){var r,n;if(t.length===1&&Zr(t[0])&&(t=t[0]),!t.length)return Xe();for(r=t[0],n=1;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function ZV(){if(!ar(this._isDSTShifted))return this._isDSTShifted;var e={},t;return xg(e,this),e=Cb(e),e._a?(t=e._isUTC?wn(e._a):Xe(e._a),this._isDSTShifted=this.isValid()&&VV(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function JV(){return this.isValid()?!this._isUTC:!1}function e9(){return this.isValid()?this._isUTC:!1}function Tb(){return this.isValid()?this._isUTC&&this._offset===0:!1}var t9=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,r9=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function en(e,t){var r=e,n=null,i,o,a;return Uc(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:qn(e)||!isNaN(+e)?(r={},t?r[t]=+e:r.milliseconds=+e):(n=t9.exec(e))?(i=n[1]==="-"?-1:1,r={y:0,d:we(n[cn])*i,h:we(n[Ct])*i,m:we(n[Gr])*i,s:we(n[Vn])*i,ms:we(Ip(n[no]*1e3))*i}):(n=r9.exec(e))?(i=n[1]==="-"?-1:1,r={y:Xi(n[2],i),M:Xi(n[3],i),w:Xi(n[4],i),d:Xi(n[5],i),h:Xi(n[6],i),m:Xi(n[7],i),s:Xi(n[8],i)}):r==null?r={}:typeof r=="object"&&("from"in r||"to"in r)&&(a=n9(Xe(r.from),Xe(r.to)),r={},r.ms=a.milliseconds,r.M=a.months),o=new tf(r),Uc(e)&&Oe(e,"_locale")&&(o._locale=e._locale),Uc(e)&&Oe(e,"_isValid")&&(o._isValid=e._isValid),o}en.fn=tf.prototype;en.invalid=FV;function Xi(e,t){var r=e&&parseFloat(e.replace(",","."));return(isNaN(r)?0:r)*t}function dw(e,t){var r={};return r.months=t.month()-e.month()+(t.year()-e.year())*12,e.clone().add(r.months,"M").isAfter(t)&&--r.months,r.milliseconds=+t-+e.clone().add(r.months,"M"),r}function n9(e,t){var r;return e.isValid()&&t.isValid()?(t=Ag(t,e),e.isBefore(t)?r=dw(e,t):(r=dw(t,e),r.milliseconds=-r.milliseconds,r.months=-r.months),r):{milliseconds:0,months:0}}function Ob(e,t){return function(r,n){var i,o;return n!==null&&!isNaN(+n)&&(ib(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=r,r=n,n=o),i=en(r,n),Pb(this,i,e),this}}function Pb(e,t,r,n){var i=t._milliseconds,o=Ip(t._days),a=Ip(t._months);e.isValid()&&(n=n??!0,a&&mb(e,Mu(e,"Month")+a*r),o&&ab(e,"Date",Mu(e,"Date")+o*r),i&&e._d.setTime(e._d.valueOf()+i*r),n&&U.updateOffset(e,o||a))}var i9=Ob(1,"add"),o9=Ob(-1,"subtract");function Rb(e){return typeof e=="string"||e instanceof String}function s9(e){return Jr(e)||bl(e)||Rb(e)||qn(e)||l9(e)||a9(e)||e===null||e===void 0}function a9(e){var t=lo(e)&&!wg(e),r=!1,n=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],i,o,a=n.length;for(i=0;ir.valueOf():r.valueOf()9999?Wc(r,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):_n(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Wc(r,"Z")):Wc(r,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function S9(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="",r,n,i,o;return this.isLocal()||(e=this.utcOffset()===0?"moment.utc":"moment.parseZone",t="Z"),r="["+e+'("]',n=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i="-MM-DD[T]HH:mm:ss.SSS",o=t+'[")]',this.format(r+n+i+o)}function b9(e){e||(e=this.isUtc()?U.defaultFormatUtc:U.defaultFormat);var t=Wc(this,e);return this.localeData().postformat(t)}function k9(e,t){return this.isValid()&&(Jr(e)&&e.isValid()||Xe(e).isValid())?en({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function C9(e){return this.from(Xe(),e)}function D9(e,t){return this.isValid()&&(Jr(e)&&e.isValid()||Xe(e).isValid())?en({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function E9(e){return this.to(Xe(),e)}function Mb(e){var t;return e===void 0?this._locale._abbr:(t=ri(e),t!=null&&(this._locale=t),this)}var Lb=Ar("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return e===void 0?this.localeData():this.locale(e)});function Ab(){return this._locale}var Iu=1e3,ms=60*Iu,Nu=60*ms,Ib=(365*400+97)*24*Nu;function ps(e,t){return(e%t+t)%t}function Nb(e,t,r){return e<100&&e>=0?new Date(e+400,t,r)-Ib:new Date(e,t,r).valueOf()}function $b(e,t,r){return e<100&&e>=0?Date.UTC(e+400,t,r)-Ib:Date.UTC(e,t,r)}function j9(e){var t,r;if(e=Ir(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(r=this._isUTC?$b:Nb,e){case"year":t=r(this.year(),0,1);break;case"quarter":t=r(this.year(),this.month()-this.month()%3,1);break;case"month":t=r(this.year(),this.month(),1);break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=r(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=ps(t+(this._isUTC?0:this.utcOffset()*ms),Nu);break;case"minute":t=this._d.valueOf(),t-=ps(t,ms);break;case"second":t=this._d.valueOf(),t-=ps(t,Iu);break}return this._d.setTime(t),U.updateOffset(this,!0),this}function T9(e){var t,r;if(e=Ir(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(r=this._isUTC?$b:Nb,e){case"year":t=r(this.year()+1,0,1)-1;break;case"quarter":t=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=r(this.year(),this.month()+1,1)-1;break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=Nu-ps(t+(this._isUTC?0:this.utcOffset()*ms),Nu)-1;break;case"minute":t=this._d.valueOf(),t+=ms-ps(t,ms)-1;break;case"second":t=this._d.valueOf(),t+=Iu-ps(t,Iu)-1;break}return this._d.setTime(t),U.updateOffset(this,!0),this}function O9(){return this._d.valueOf()-(this._offset||0)*6e4}function P9(){return Math.floor(this.valueOf()/1e3)}function R9(){return new Date(this.valueOf())}function M9(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function L9(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function A9(){return this.isValid()?this.toISOString():null}function I9(){return _g(this)}function N9(){return bi({},pe(this))}function $9(){return pe(this).overflow}function z9(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}se("N",0,0,"eraAbbr");se("NN",0,0,"eraAbbr");se("NNN",0,0,"eraAbbr");se("NNNN",0,0,"eraName");se("NNNNN",0,0,"eraNarrow");se("y",["y",1],"yo","eraYear");se("y",["yy",2],0,"eraYear");se("y",["yyy",3],0,"eraYear");se("y",["yyyy",4],0,"eraYear");q("N",Ig);q("NN",Ig);q("NNN",Ig);q("NNNN",Q9);q("NNNNN",q9);Ye(["N","NN","NNN","NNNN","NNNNN"],function(e,t,r,n){var i=r._locale.erasParse(e,n,r._strict);i?pe(r).era=i:pe(r).invalidEra=e});q("y",Fs);q("yy",Fs);q("yyy",Fs);q("yyyy",Fs);q("yo",Z9);Ye(["y","yy","yyy","yyyy"],Wt);Ye(["yo"],function(e,t,r,n){var i;r._locale._eraYearOrdinalRegex&&(i=e.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?t[Wt]=r._locale.eraYearOrdinalParse(e,i):t[Wt]=parseInt(e,10)});function Y9(e,t){var r,n,i,o=this._eras||ri("en")._eras;for(r=0,n=o.length;r=0)return o[n]}function F9(e,t){var r=e.since<=e.until?1:-1;return t===void 0?U(e.since).year():U(e.since).year()+(t-e.offset)*r}function V9(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;eo&&(t=o),oW.call(this,e,t,r,n,i))}function oW(e,t,r,n,i){var o=yb(e,t,r,n,i),a=al(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}se("Q",0,"Qo","quarter");Bt("quarter","Q");Gt("quarter",7);q("Q",lb);Ye("Q",function(e,t){t[Fn]=(we(e)-1)*3});function sW(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}se("D",["DD",2],"Do","date");Bt("date","D");Gt("date",9);q("D",Ke);q("DD",Ke,kr);q("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient});Ye(["D","DD"],cn);Ye("Do",function(e,t){t[cn]=we(e.match(Ke)[0])});var Yb=Hs("Date",!0);se("DDD",["DDDD",3],"DDDo","dayOfYear");Bt("dayOfYear","DDD");Gt("dayOfYear",4);q("DDD",Kd);q("DDDD",cb);Ye(["DDD","DDDD"],function(e,t,r){r._dayOfYear=we(e)});function aW(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return e==null?t:this.add(e-t,"d")}se("m",["mm",2],0,"minute");Bt("minute","m");Gt("minute",14);q("m",Ke);q("mm",Ke,kr);Ye(["m","mm"],Gr);var lW=Hs("Minutes",!1);se("s",["ss",2],0,"second");Bt("second","s");Gt("second",15);q("s",Ke);q("ss",Ke,kr);Ye(["s","ss"],Vn);var cW=Hs("Seconds",!1);se("S",0,0,function(){return~~(this.millisecond()/100)});se(0,["SS",2],0,function(){return~~(this.millisecond()/10)});se(0,["SSS",3],0,"millisecond");se(0,["SSSS",4],0,function(){return this.millisecond()*10});se(0,["SSSSS",5],0,function(){return this.millisecond()*100});se(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});se(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});se(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});se(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});Bt("millisecond","ms");Gt("millisecond",16);q("S",Kd,lb);q("SS",Kd,kr);q("SSS",Kd,cb);var ki,Hb;for(ki="SSSS";ki.length<=9;ki+="S")q(ki,Fs);function uW(e,t){t[no]=we(("0."+e)*1e3)}for(ki="S";ki.length<=9;ki+="S")Ye(ki,uW);Hb=Hs("Milliseconds",!1);se("z",0,0,"zoneAbbr");se("zz",0,0,"zoneName");function dW(){return this._isUTC?"UTC":""}function fW(){return this._isUTC?"Coordinated Universal Time":""}var V=kl.prototype;V.add=i9;V.calendar=d9;V.clone=f9;V.diff=w9;V.endOf=T9;V.format=b9;V.from=k9;V.fromNow=C9;V.to=D9;V.toNow=E9;V.get=mF;V.invalidAt=$9;V.isAfter=h9;V.isBefore=m9;V.isBetween=p9;V.isSame=g9;V.isSameOrAfter=v9;V.isSameOrBefore=y9;V.isValid=I9;V.lang=Lb;V.locale=Mb;V.localeData=Ab;V.max=IV;V.min=AV;V.parsingFlags=N9;V.set=pF;V.startOf=j9;V.subtract=o9;V.toArray=M9;V.toObject=L9;V.toDate=R9;V.toISOString=x9;V.inspect=S9;typeof Symbol<"u"&&Symbol.for!=null&&(V[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"});V.toJSON=A9;V.toString=_9;V.unix=P9;V.valueOf=O9;V.creationData=z9;V.eraName=V9;V.eraNarrow=W9;V.eraAbbr=U9;V.eraYear=B9;V.year=vb;V.isLeapYear=LF;V.weekYear=J9;V.isoWeekYear=eW;V.quarter=V.quarters=sW;V.month=pb;V.daysInMonth=PF;V.week=V.weeks=YF;V.isoWeek=V.isoWeeks=HF;V.weeksInYear=nW;V.weeksInWeekYear=iW;V.isoWeeksInYear=tW;V.isoWeeksInISOWeekYear=rW;V.date=Yb;V.day=V.days=eV;V.weekday=tV;V.isoWeekday=rV;V.dayOfYear=aW;V.hour=V.hours=cV;V.minute=V.minutes=lW;V.second=V.seconds=cW;V.millisecond=V.milliseconds=Hb;V.utcOffset=UV;V.utc=GV;V.local=XV;V.parseZone=KV;V.hasAlignedHourOffset=QV;V.isDST=qV;V.isLocal=JV;V.isUtcOffset=e9;V.isUtc=Tb;V.isUTC=Tb;V.zoneAbbr=dW;V.zoneName=fW;V.dates=Ar("dates accessor is deprecated. Use date instead.",Yb);V.months=Ar("months accessor is deprecated. Use month instead",pb);V.years=Ar("years accessor is deprecated. Use year instead",vb);V.zone=Ar("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",BV);V.isDSTShifted=Ar("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",ZV);function hW(e){return Xe(e*1e3)}function mW(){return Xe.apply(null,arguments).parseZone()}function Fb(e){return e}var Pe=Sg.prototype;Pe.calendar=eF;Pe.longDateFormat=iF;Pe.invalidDate=sF;Pe.ordinal=cF;Pe.preparse=Fb;Pe.postformat=Fb;Pe.relativeTime=dF;Pe.pastFuture=fF;Pe.set=ZH;Pe.eras=Y9;Pe.erasParse=H9;Pe.erasConvertYear=F9;Pe.erasAbbrRegex=X9;Pe.erasNameRegex=G9;Pe.erasNarrowRegex=K9;Pe.months=EF;Pe.monthsShort=jF;Pe.monthsParse=OF;Pe.monthsRegex=MF;Pe.monthsShortRegex=RF;Pe.week=IF;Pe.firstDayOfYear=zF;Pe.firstDayOfWeek=$F;Pe.weekdays=KF;Pe.weekdaysMin=qF;Pe.weekdaysShort=QF;Pe.weekdaysParse=JF;Pe.weekdaysRegex=nV;Pe.weekdaysShortRegex=iV;Pe.weekdaysMinRegex=oV;Pe.isPM=aV;Pe.meridiem=uV;function $u(e,t,r,n){var i=ri(),o=wn().set(n,t);return i[r](o,e)}function Vb(e,t,r){if(qn(e)&&(t=e,e=void 0),e=e||"",t!=null)return $u(e,t,r,"month");var n,i=[];for(n=0;n<12;n++)i[n]=$u(e,n,r,"month");return i}function $g(e,t,r,n){typeof e=="boolean"?(qn(t)&&(r=t,t=void 0),t=t||""):(t=e,r=t,e=!1,qn(t)&&(r=t,t=void 0),t=t||"");var i=ri(),o=e?i._week.dow:0,a,c=[];if(r!=null)return $u(t,(r+o)%7,n,"day");for(a=0;a<7;a++)c[a]=$u(t,(a+o)%7,n,"day");return c}function pW(e,t){return Vb(e,t,"months")}function gW(e,t){return Vb(e,t,"monthsShort")}function vW(e,t,r){return $g(e,t,r,"weekdays")}function yW(e,t,r){return $g(e,t,r,"weekdaysShort")}function wW(e,t,r){return $g(e,t,r,"weekdaysMin")}Li("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,r=we(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+r}});U.lang=Ar("moment.lang is deprecated. Use moment.locale instead.",Li);U.langData=Ar("moment.langData is deprecated. Use moment.localeData instead.",ri);var Mn=Math.abs;function _W(){var e=this._data;return this._milliseconds=Mn(this._milliseconds),this._days=Mn(this._days),this._months=Mn(this._months),e.milliseconds=Mn(e.milliseconds),e.seconds=Mn(e.seconds),e.minutes=Mn(e.minutes),e.hours=Mn(e.hours),e.months=Mn(e.months),e.years=Mn(e.years),this}function Wb(e,t,r,n){var i=en(t,r);return e._milliseconds+=n*i._milliseconds,e._days+=n*i._days,e._months+=n*i._months,e._bubble()}function xW(e,t){return Wb(this,e,t,1)}function SW(e,t){return Wb(this,e,t,-1)}function fw(e){return e<0?Math.floor(e):Math.ceil(e)}function bW(){var e=this._milliseconds,t=this._days,r=this._months,n=this._data,i,o,a,c,d;return e>=0&&t>=0&&r>=0||e<=0&&t<=0&&r<=0||(e+=fw($p(r)+t)*864e5,t=0,r=0),n.milliseconds=e%1e3,i=jr(e/1e3),n.seconds=i%60,o=jr(i/60),n.minutes=o%60,a=jr(o/60),n.hours=a%24,t+=jr(a/24),d=jr(Ub(t)),r+=d,t-=fw($p(d)),c=jr(r/12),r%=12,n.days=t,n.months=r,n.years=c,this}function Ub(e){return e*4800/146097}function $p(e){return e*146097/4800}function kW(e){if(!this.isValid())return NaN;var t,r,n=this._milliseconds;if(e=Ir(e),e==="month"||e==="quarter"||e==="year")switch(t=this._days+n/864e5,r=this._months+Ub(t),e){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(t=this._days+Math.round($p(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return t*24+n/36e5;case"minute":return t*1440+n/6e4;case"second":return t*86400+n/1e3;case"millisecond":return Math.floor(t*864e5)+n;default:throw new Error("Unknown unit "+e)}}function CW(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+we(this._months/12)*31536e6:NaN}function ni(e){return function(){return this.as(e)}}var DW=ni("ms"),EW=ni("s"),jW=ni("m"),TW=ni("h"),OW=ni("d"),PW=ni("w"),RW=ni("M"),MW=ni("Q"),LW=ni("y");function AW(){return en(this)}function IW(e){return e=Ir(e),this.isValid()?this[e+"s"]():NaN}function bo(e){return function(){return this.isValid()?this._data[e]:NaN}}var NW=bo("milliseconds"),$W=bo("seconds"),zW=bo("minutes"),YW=bo("hours"),HW=bo("days"),FW=bo("months"),VW=bo("years");function WW(){return jr(this.days()/7)}var Nn=Math.round,is={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function UW(e,t,r,n,i){return i.relativeTime(t||1,!!r,e,n)}function BW(e,t,r,n){var i=en(e).abs(),o=Nn(i.as("s")),a=Nn(i.as("m")),c=Nn(i.as("h")),d=Nn(i.as("d")),h=Nn(i.as("M")),g=Nn(i.as("w")),v=Nn(i.as("y")),x=o<=r.ss&&["s",o]||o0,x[4]=n,UW.apply(null,x)}function GW(e){return e===void 0?Nn:typeof e=="function"?(Nn=e,!0):!1}function XW(e,t){return is[e]===void 0?!1:t===void 0?is[e]:(is[e]=t,e==="s"&&(is.ss=t-1),!0)}function KW(e,t){if(!this.isValid())return this.localeData().invalidDate();var r=!1,n=is,i,o;return typeof e=="object"&&(t=e,e=!1),typeof e=="boolean"&&(r=e),typeof t=="object"&&(n=Object.assign({},is,t),t.s!=null&&t.ss==null&&(n.ss=t.s-1)),i=this.localeData(),o=BW(this,!r,n,i),r&&(o=i.pastFuture(+this,o)),i.postformat(o)}var Rh=Math.abs;function Mo(e){return(e>0)-(e<0)||+e}function nf(){if(!this.isValid())return this.localeData().invalidDate();var e=Rh(this._milliseconds)/1e3,t=Rh(this._days),r=Rh(this._months),n,i,o,a,c=this.asSeconds(),d,h,g,v;return c?(n=jr(e/60),i=jr(n/60),e%=60,n%=60,o=jr(r/12),r%=12,a=e?e.toFixed(3).replace(/\.?0+$/,""):"",d=c<0?"-":"",h=Mo(this._months)!==Mo(c)?"-":"",g=Mo(this._days)!==Mo(c)?"-":"",v=Mo(this._milliseconds)!==Mo(c)?"-":"",d+"P"+(o?h+o+"Y":"")+(r?h+r+"M":"")+(t?g+t+"D":"")+(i||n||e?"T":"")+(i?v+i+"H":"")+(n?v+n+"M":"")+(e?v+a+"S":"")):"P0D"}var De=tf.prototype;De.isValid=HV;De.abs=_W;De.add=xW;De.subtract=SW;De.as=kW;De.asMilliseconds=DW;De.asSeconds=EW;De.asMinutes=jW;De.asHours=TW;De.asDays=OW;De.asWeeks=PW;De.asMonths=RW;De.asQuarters=MW;De.asYears=LW;De.valueOf=CW;De._bubble=bW;De.clone=AW;De.get=IW;De.milliseconds=NW;De.seconds=$W;De.minutes=zW;De.hours=YW;De.days=HW;De.weeks=WW;De.months=FW;De.years=VW;De.humanize=KW;De.toISOString=nf;De.toString=nf;De.toJSON=nf;De.locale=Mb;De.localeData=Ab;De.toIsoString=Ar("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",nf);De.lang=Lb;se("X",0,0,"unix");se("x",0,0,"valueOf");q("x",qd);q("X",vF);Ye("X",function(e,t,r){r._d=new Date(parseFloat(e)*1e3)});Ye("x",function(e,t,r){r._d=new Date(we(e))});//! moment.js -U.version="2.29.4";QH(Xe);U.fn=V;U.min=NV;U.max=$V;U.now=zV;U.utc=wn;U.unix=hW;U.months=pW;U.isDate=bl;U.locale=Li;U.invalid=Bd;U.duration=en;U.isMoment=Jr;U.weekdays=vW;U.parseZone=mW;U.localeData=ri;U.isDuration=Uc;U.monthsShort=gW;U.weekdaysMin=wW;U.defineLocale=Og;U.updateLocale=mV;U.locales=pV;U.weekdaysShort=yW;U.normalizeUnits=Ir;U.relativeTimeRounding=GW;U.relativeTimeThreshold=XW;U.calendarFormat=u9;U.prototype=V;U.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};const QW="/zh-cn/assets/blog-cover-95d8a382.png",qW=new Map([["blogs","技术博客"],["events","活动预告"],["highlights","精彩回顾"],["news-honor-dynamic","新闻 / 荣誉"]]),ZW=f.main` +`+new Error().stack),r=!1}return t.apply(this,arguments)},t)}var cw={};function ib(e,t){U.deprecationHandler!=null&&U.deprecationHandler(e,t),cw[e]||(nb(t),cw[e]=!0)}U.suppressDeprecationWarnings=!1;U.deprecationHandler=null;function _n(e){return typeof Function<"u"&&e instanceof Function||Object.prototype.toString.call(e)==="[object Function]"}function ZY(e){var t,r;for(r in e)Oe(e,r)&&(t=e[r],_n(t)?this[r]=t:this["_"+r]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function Mp(e,t){var r=bi({},e),n;for(n in t)Oe(t,n)&&(lo(e[n])&&lo(t[n])?(r[n]={},bi(r[n],e[n]),bi(r[n],t[n])):t[n]!=null?r[n]=t[n]:delete r[n]);for(n in e)Oe(e,n)&&!Oe(t,n)&&lo(e[n])&&(r[n]=bi({},r[n]));return r}function Sg(e){e!=null&&this.set(e)}var Lp;Object.keys?Lp=Object.keys:Lp=function(e){var t,r=[];for(t in e)Oe(e,t)&&r.push(t);return r};var JY={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function eF(e,t,r){var n=this._calendar[e]||this._calendar.sameElse;return _n(n)?n.call(t,r):n}function mn(e,t,r){var n=""+Math.abs(e),i=t-n.length,o=e>=0;return(o?r?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+n}var bg=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,xc=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Oh={},hs={};function se(e,t,r,n){var i=n;typeof n=="string"&&(i=function(){return this[n]()}),e&&(hs[e]=i),t&&(hs[t[0]]=function(){return mn(i.apply(this,arguments),t[1],t[2])}),r&&(hs[r]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function tF(e){return e.match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"")}function rF(e){var t=e.match(bg),r,n;for(r=0,n=t.length;r=0&&xc.test(e);)e=e.replace(xc,n),xc.lastIndex=0,r-=1;return e}var nF={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function iF(e){var t=this._longDateFormat[e],r=this._longDateFormat[e.toUpperCase()];return t||!r?t:(this._longDateFormat[e]=r.match(bg).map(function(n){return n==="MMMM"||n==="MM"||n==="DD"||n==="dddd"?n.slice(1):n}).join(""),this._longDateFormat[e])}var oF="Invalid date";function sF(){return this._invalidDate}var aF="%d",lF=/\d{1,2}/;function cF(e){return this._ordinal.replace("%d",e)}var uF={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function dF(e,t,r,n){var i=this._relativeTime[r];return _n(i)?i(e,t,r,n):i.replace(/%d/i,e)}function fF(e,t){var r=this._relativeTime[e>0?"future":"past"];return _n(r)?r(t):r.replace(/%s/i,t)}var Aa={};function Bt(e,t){var r=e.toLowerCase();Aa[r]=Aa[r+"s"]=Aa[t]=e}function Ir(e){return typeof e=="string"?Aa[e]||Aa[e.toLowerCase()]:void 0}function kg(e){var t={},r,n;for(n in e)Oe(e,n)&&(r=Ir(n),r&&(t[r]=e[n]));return t}var sb={};function Gt(e,t){sb[e]=t}function hF(e){var t=[],r;for(r in e)Oe(e,r)&&t.push({unit:r,priority:sb[r]});return t.sort(function(n,i){return n.priority-i.priority}),t}function Gd(e){return e%4===0&&e%100!==0||e%400===0}function Tr(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function we(e){var t=+e,r=0;return t!==0&&isFinite(t)&&(r=Tr(t)),r}function Ys(e,t){return function(r){return r!=null?(ab(this,e,r),U.updateOffset(this,t),this):Mu(this,e)}}function Mu(e,t){return e.isValid()?e._d["get"+(e._isUTC?"UTC":"")+t]():NaN}function ab(e,t,r){e.isValid()&&!isNaN(r)&&(t==="FullYear"&&Gd(e.year())&&e.month()===1&&e.date()===29?(r=we(r),e._d["set"+(e._isUTC?"UTC":"")+t](r,e.month(),Jd(r,e.month()))):e._d["set"+(e._isUTC?"UTC":"")+t](r))}function mF(e){return e=Ir(e),_n(this[e])?this[e]():this}function pF(e,t){if(typeof e=="object"){e=kg(e);var r=hF(e),n,i=r.length;for(n=0;n68?1900:2e3)};var vb=Ys("FullYear",!0);function LF(){return Gd(this.year())}function AF(e,t,r,n,i,o,a){var c;return e<100&&e>=0?(c=new Date(e+400,t,r,n,i,o,a),isFinite(c.getFullYear())&&c.setFullYear(e)):c=new Date(e,t,r,n,i,o,a),c}function al(e){var t,r;return e<100&&e>=0?(r=Array.prototype.slice.call(arguments),r[0]=e+400,t=new Date(Date.UTC.apply(null,r)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function Au(e,t,r){var n=7+t-r,i=(7+al(e,0,n).getUTCDay()-t)%7;return-i+n-1}function yb(e,t,r,n,i){var o=(7+r-n)%7,a=Au(e,n,i),c=1+7*(t-1)+o+a,d,h;return c<=0?(d=e-1,h=Ia(d)+c):c>Ia(e)?(d=e+1,h=c-Ia(e)):(d=e,h=c),{year:d,dayOfYear:h}}function ll(e,t,r){var n=Au(e.year(),t,r),i=Math.floor((e.dayOfYear()-n-1)/7)+1,o,a;return i<1?(a=e.year()-1,o=i+Bn(a,t,r)):i>Bn(e.year(),t,r)?(o=i-Bn(e.year(),t,r),a=e.year()+1):(a=e.year(),o=i),{week:o,year:a}}function Bn(e,t,r){var n=Au(e,t,r),i=Au(e+1,t,r);return(Ia(e)-n+i)/7}se("w",["ww",2],"wo","week");se("W",["WW",2],"Wo","isoWeek");Bt("week","w");Bt("isoWeek","W");Gt("week",5);Gt("isoWeek",5);q("w",Ke);q("ww",Ke,kr);q("W",Ke);q("WW",Ke,kr);Dl(["w","ww","W","WW"],function(e,t,r,n){t[n.substr(0,1)]=we(e)});function IF(e){return ll(e,this._week.dow,this._week.doy).week}var NF={dow:0,doy:6};function $F(){return this._week.dow}function zF(){return this._week.doy}function HF(e){var t=this.localeData().week(this);return e==null?t:this.add((e-t)*7,"d")}function YF(e){var t=ll(this,1,4).week;return e==null?t:this.add((e-t)*7,"d")}se("d",0,"do","day");se("dd",0,0,function(e){return this.localeData().weekdaysMin(this,e)});se("ddd",0,0,function(e){return this.localeData().weekdaysShort(this,e)});se("dddd",0,0,function(e){return this.localeData().weekdays(this,e)});se("e",0,0,"weekday");se("E",0,0,"isoWeekday");Bt("day","d");Bt("weekday","e");Bt("isoWeekday","E");Gt("day",11);Gt("weekday",11);Gt("isoWeekday",11);q("d",Ke);q("e",Ke);q("E",Ke);q("dd",function(e,t){return t.weekdaysMinRegex(e)});q("ddd",function(e,t){return t.weekdaysShortRegex(e)});q("dddd",function(e,t){return t.weekdaysRegex(e)});Dl(["dd","ddd","dddd"],function(e,t,r,n){var i=r._locale.weekdaysParse(e,n,r._strict);i!=null?t.d=i:pe(r).invalidWeekday=e});Dl(["d","e","E"],function(e,t,r,n){t[n]=we(e)});function FF(e,t){return typeof e!="string"?e:isNaN(e)?(e=t.weekdaysParse(e),typeof e=="number"?e:null):parseInt(e,10)}function VF(e,t){return typeof e=="string"?t.weekdaysParse(e)%7||7:isNaN(e)?null:e}function Eg(e,t){return e.slice(t,7).concat(e.slice(0,t))}var WF="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),wb="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),UF="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),BF=Cl,GF=Cl,XF=Cl;function KF(e,t){var r=Zr(this._weekdays)?this._weekdays:this._weekdays[e&&e!==!0&&this._weekdays.isFormat.test(t)?"format":"standalone"];return e===!0?Eg(r,this._week.dow):e?r[e.day()]:r}function QF(e){return e===!0?Eg(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort}function qF(e){return e===!0?Eg(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin}function ZF(e,t,r){var n,i,o,a=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],n=0;n<7;++n)o=wn([2e3,1]).day(n),this._minWeekdaysParse[n]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[n]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[n]=this.weekdays(o,"").toLocaleLowerCase();return r?t==="dddd"?(i=dt.call(this._weekdaysParse,a),i!==-1?i:null):t==="ddd"?(i=dt.call(this._shortWeekdaysParse,a),i!==-1?i:null):(i=dt.call(this._minWeekdaysParse,a),i!==-1?i:null):t==="dddd"?(i=dt.call(this._weekdaysParse,a),i!==-1||(i=dt.call(this._shortWeekdaysParse,a),i!==-1)?i:(i=dt.call(this._minWeekdaysParse,a),i!==-1?i:null)):t==="ddd"?(i=dt.call(this._shortWeekdaysParse,a),i!==-1||(i=dt.call(this._weekdaysParse,a),i!==-1)?i:(i=dt.call(this._minWeekdaysParse,a),i!==-1?i:null)):(i=dt.call(this._minWeekdaysParse,a),i!==-1||(i=dt.call(this._weekdaysParse,a),i!==-1)?i:(i=dt.call(this._shortWeekdaysParse,a),i!==-1?i:null))}function JF(e,t,r){var n,i,o;if(this._weekdaysParseExact)return ZF.call(this,e,t,r);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),n=0;n<7;n++){if(i=wn([2e3,1]).day(n),r&&!this._fullWeekdaysParse[n]&&(this._fullWeekdaysParse[n]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[n]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[n]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[n]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[n]=new RegExp(o.replace(".",""),"i")),r&&t==="dddd"&&this._fullWeekdaysParse[n].test(e))return n;if(r&&t==="ddd"&&this._shortWeekdaysParse[n].test(e))return n;if(r&&t==="dd"&&this._minWeekdaysParse[n].test(e))return n;if(!r&&this._weekdaysParse[n].test(e))return n}}function eV(e){if(!this.isValid())return e!=null?this:NaN;var t=this._isUTC?this._d.getUTCDay():this._d.getDay();return e!=null?(e=FF(e,this.localeData()),this.add(e-t,"d")):t}function tV(e){if(!this.isValid())return e!=null?this:NaN;var t=(this.day()+7-this.localeData()._week.dow)%7;return e==null?t:this.add(e-t,"d")}function rV(e){if(!this.isValid())return e!=null?this:NaN;if(e!=null){var t=VF(e,this.localeData());return this.day(this.day()%7?t:t-7)}else return this.day()||7}function nV(e){return this._weekdaysParseExact?(Oe(this,"_weekdaysRegex")||Tg.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(Oe(this,"_weekdaysRegex")||(this._weekdaysRegex=BF),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)}function iV(e){return this._weekdaysParseExact?(Oe(this,"_weekdaysRegex")||Tg.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(Oe(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=GF),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function oV(e){return this._weekdaysParseExact?(Oe(this,"_weekdaysRegex")||Tg.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(Oe(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=XF),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Tg(){function e(g,v){return v.length-g.length}var t=[],r=[],n=[],i=[],o,a,c,d,h;for(o=0;o<7;o++)a=wn([2e3,1]).day(o),c=gr(this.weekdaysMin(a,"")),d=gr(this.weekdaysShort(a,"")),h=gr(this.weekdays(a,"")),t.push(c),r.push(d),n.push(h),i.push(c),i.push(d),i.push(h);t.sort(e),r.sort(e),n.sort(e),i.sort(e),this._weekdaysRegex=new RegExp("^("+i.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+r.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function jg(){return this.hours()%12||12}function sV(){return this.hours()||24}se("H",["HH",2],0,"hour");se("h",["hh",2],0,jg);se("k",["kk",2],0,sV);se("hmm",0,0,function(){return""+jg.apply(this)+mn(this.minutes(),2)});se("hmmss",0,0,function(){return""+jg.apply(this)+mn(this.minutes(),2)+mn(this.seconds(),2)});se("Hmm",0,0,function(){return""+this.hours()+mn(this.minutes(),2)});se("Hmmss",0,0,function(){return""+this.hours()+mn(this.minutes(),2)+mn(this.seconds(),2)});function _b(e,t){se(e,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)})}_b("a",!0);_b("A",!1);Bt("hour","h");Gt("hour",13);function xb(e,t){return t._meridiemParse}q("a",xb);q("A",xb);q("H",Ke);q("h",Ke);q("k",Ke);q("HH",Ke,kr);q("hh",Ke,kr);q("kk",Ke,kr);q("hmm",ub);q("hmmss",db);q("Hmm",ub);q("Hmmss",db);He(["H","HH"],Ct);He(["k","kk"],function(e,t,r){var n=we(e);t[Ct]=n===24?0:n});He(["a","A"],function(e,t,r){r._isPm=r._locale.isPM(e),r._meridiem=e});He(["h","hh"],function(e,t,r){t[Ct]=we(e),pe(r).bigHour=!0});He("hmm",function(e,t,r){var n=e.length-2;t[Ct]=we(e.substr(0,n)),t[Gr]=we(e.substr(n)),pe(r).bigHour=!0});He("hmmss",function(e,t,r){var n=e.length-4,i=e.length-2;t[Ct]=we(e.substr(0,n)),t[Gr]=we(e.substr(n,2)),t[Vn]=we(e.substr(i)),pe(r).bigHour=!0});He("Hmm",function(e,t,r){var n=e.length-2;t[Ct]=we(e.substr(0,n)),t[Gr]=we(e.substr(n))});He("Hmmss",function(e,t,r){var n=e.length-4,i=e.length-2;t[Ct]=we(e.substr(0,n)),t[Gr]=we(e.substr(n,2)),t[Vn]=we(e.substr(i))});function aV(e){return(e+"").toLowerCase().charAt(0)==="p"}var lV=/[ap]\.?m?\.?/i,cV=Ys("Hours",!0);function uV(e,t,r){return e>11?r?"pm":"PM":r?"am":"AM"}var Sb={calendar:JY,longDateFormat:nF,invalidDate:oF,ordinal:aF,dayOfMonthOrdinalParse:lF,relativeTime:uF,months:kF,monthsShort:fb,week:NF,weekdays:WF,weekdaysMin:UF,weekdaysShort:wb,meridiemParse:lV},qe={},ma={},cl;function dV(e,t){var r,n=Math.min(e.length,t.length);for(r=0;r0;){if(i=ef(o.slice(0,r).join("-")),i)return i;if(n&&n.length>=r&&dV(o,n)>=r-1)break;r--}t++}return cl}function hV(e){return e.match("^[^/\\\\]*$")!=null}function ef(e){var t=null,r;if(qe[e]===void 0&&typeof Gc<"u"&&Gc&&Gc.exports&&hV(e))try{t=cl._abbr,r=require,r("./locale/"+e),Li(t)}catch{qe[e]=null}return qe[e]}function Li(e,t){var r;return e&&(ar(t)?r=ri(e):r=Og(e,t),r?cl=r:typeof console<"u"&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),cl._abbr}function Og(e,t){if(t!==null){var r,n=Sb;if(t.abbr=e,qe[e]!=null)ib("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=qe[e]._config;else if(t.parentLocale!=null)if(qe[t.parentLocale]!=null)n=qe[t.parentLocale]._config;else if(r=ef(t.parentLocale),r!=null)n=r._config;else return ma[t.parentLocale]||(ma[t.parentLocale]=[]),ma[t.parentLocale].push({name:e,config:t}),null;return qe[e]=new Sg(Mp(n,t)),ma[e]&&ma[e].forEach(function(i){Og(i.name,i.config)}),Li(e),qe[e]}else return delete qe[e],null}function mV(e,t){if(t!=null){var r,n,i=Sb;qe[e]!=null&&qe[e].parentLocale!=null?qe[e].set(Mp(qe[e]._config,t)):(n=ef(e),n!=null&&(i=n._config),t=Mp(i,t),n==null&&(t.abbr=e),r=new Sg(t),r.parentLocale=qe[e],qe[e]=r),Li(e)}else qe[e]!=null&&(qe[e].parentLocale!=null?(qe[e]=qe[e].parentLocale,e===Li()&&Li(e)):qe[e]!=null&&delete qe[e]);return qe[e]}function ri(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return cl;if(!Zr(e)){if(t=ef(e),t)return t;e=[e]}return fV(e)}function pV(){return Lp(qe)}function Pg(e){var t,r=e._a;return r&&pe(e).overflow===-2&&(t=r[Fn]<0||r[Fn]>11?Fn:r[cn]<1||r[cn]>Jd(r[Wt],r[Fn])?cn:r[Ct]<0||r[Ct]>24||r[Ct]===24&&(r[Gr]!==0||r[Vn]!==0||r[no]!==0)?Ct:r[Gr]<0||r[Gr]>59?Gr:r[Vn]<0||r[Vn]>59?Vn:r[no]<0||r[no]>999?no:-1,pe(e)._overflowDayOfYear&&(tcn)&&(t=cn),pe(e)._overflowWeeks&&t===-1&&(t=xF),pe(e)._overflowWeekday&&t===-1&&(t=SF),pe(e).overflow=t),e}var gV=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,vV=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,yV=/Z|[+-]\d\d(?::?\d\d)?/,Sc=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Ph=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],wV=/^\/?Date\((-?\d+)/i,_V=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,xV={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function bb(e){var t,r,n=e._i,i=gV.exec(n)||vV.exec(n),o,a,c,d,h=Sc.length,g=Ph.length;if(i){for(pe(e).iso=!0,t=0,r=h;tIa(a)||e._dayOfYear===0)&&(pe(e)._overflowDayOfYear=!0),r=al(a,0,e._dayOfYear),e._a[Fn]=r.getUTCMonth(),e._a[cn]=r.getUTCDate()),t=0;t<3&&e._a[t]==null;++t)e._a[t]=n[t]=i[t];for(;t<7;t++)e._a[t]=n[t]=e._a[t]==null?t===2?1:0:e._a[t];e._a[Ct]===24&&e._a[Gr]===0&&e._a[Vn]===0&&e._a[no]===0&&(e._nextDay=!0,e._a[Ct]=0),e._d=(e._useUTC?al:AF).apply(null,n),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),e._tzm!=null&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[Ct]=24),e._w&&typeof e._w.d<"u"&&e._w.d!==o&&(pe(e).weekdayMismatch=!0)}}function jV(e){var t,r,n,i,o,a,c,d,h;t=e._w,t.GG!=null||t.W!=null||t.E!=null?(o=1,a=4,r=Yo(t.GG,e._a[Wt],ll(Xe(),1,4).year),n=Yo(t.W,1),i=Yo(t.E,1),(i<1||i>7)&&(d=!0)):(o=e._locale._week.dow,a=e._locale._week.doy,h=ll(Xe(),o,a),r=Yo(t.gg,e._a[Wt],h.year),n=Yo(t.w,h.week),t.d!=null?(i=t.d,(i<0||i>6)&&(d=!0)):t.e!=null?(i=t.e+o,(t.e<0||t.e>6)&&(d=!0)):i=o),n<1||n>Bn(r,o,a)?pe(e)._overflowWeeks=!0:d!=null?pe(e)._overflowWeekday=!0:(c=yb(r,n,i,o,a),e._a[Wt]=c.year,e._dayOfYear=c.dayOfYear)}U.ISO_8601=function(){};U.RFC_2822=function(){};function Mg(e){if(e._f===U.ISO_8601){bb(e);return}if(e._f===U.RFC_2822){kb(e);return}e._a=[],pe(e).empty=!0;var t=""+e._i,r,n,i,o,a,c=t.length,d=0,h,g;for(i=ob(e._f,e._locale).match(bg)||[],g=i.length,r=0;r0&&pe(e).unusedInput.push(a),t=t.slice(t.indexOf(n)+n.length),d+=n.length),hs[o]?(n?pe(e).empty=!1:pe(e).unusedTokens.push(o),_F(o,n,e)):e._strict&&!n&&pe(e).unusedTokens.push(o);pe(e).charsLeftOver=c-d,t.length>0&&pe(e).unusedInput.push(t),e._a[Ct]<=12&&pe(e).bigHour===!0&&e._a[Ct]>0&&(pe(e).bigHour=void 0),pe(e).parsedDateParts=e._a.slice(0),pe(e).meridiem=e._meridiem,e._a[Ct]=OV(e._locale,e._a[Ct],e._meridiem),h=pe(e).era,h!==null&&(e._a[Wt]=e._locale.erasConvertYear(h,e._a[Wt])),Rg(e),Pg(e)}function OV(e,t,r){var n;return r==null?t:e.meridiemHour!=null?e.meridiemHour(t,r):(e.isPM!=null&&(n=e.isPM(r),n&&t<12&&(t+=12),!n&&t===12&&(t=0)),t)}function PV(e){var t,r,n,i,o,a,c=!1,d=e._f.length;if(d===0){pe(e).invalidFormat=!0,e._d=new Date(NaN);return}for(i=0;ithis?this:e:Bd()});function Eb(e,t){var r,n;if(t.length===1&&Zr(t[0])&&(t=t[0]),!t.length)return Xe();for(r=t[0],n=1;nthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function ZV(){if(!ar(this._isDSTShifted))return this._isDSTShifted;var e={},t;return xg(e,this),e=Cb(e),e._a?(t=e._isUTC?wn(e._a):Xe(e._a),this._isDSTShifted=this.isValid()&&VV(e._a,t.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function JV(){return this.isValid()?!this._isUTC:!1}function e9(){return this.isValid()?this._isUTC:!1}function jb(){return this.isValid()?this._isUTC&&this._offset===0:!1}var t9=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,r9=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function en(e,t){var r=e,n=null,i,o,a;return Uc(e)?r={ms:e._milliseconds,d:e._days,M:e._months}:qn(e)||!isNaN(+e)?(r={},t?r[t]=+e:r.milliseconds=+e):(n=t9.exec(e))?(i=n[1]==="-"?-1:1,r={y:0,d:we(n[cn])*i,h:we(n[Ct])*i,m:we(n[Gr])*i,s:we(n[Vn])*i,ms:we(Ip(n[no]*1e3))*i}):(n=r9.exec(e))?(i=n[1]==="-"?-1:1,r={y:Xi(n[2],i),M:Xi(n[3],i),w:Xi(n[4],i),d:Xi(n[5],i),h:Xi(n[6],i),m:Xi(n[7],i),s:Xi(n[8],i)}):r==null?r={}:typeof r=="object"&&("from"in r||"to"in r)&&(a=n9(Xe(r.from),Xe(r.to)),r={},r.ms=a.milliseconds,r.M=a.months),o=new tf(r),Uc(e)&&Oe(e,"_locale")&&(o._locale=e._locale),Uc(e)&&Oe(e,"_isValid")&&(o._isValid=e._isValid),o}en.fn=tf.prototype;en.invalid=FV;function Xi(e,t){var r=e&&parseFloat(e.replace(",","."));return(isNaN(r)?0:r)*t}function dw(e,t){var r={};return r.months=t.month()-e.month()+(t.year()-e.year())*12,e.clone().add(r.months,"M").isAfter(t)&&--r.months,r.milliseconds=+t-+e.clone().add(r.months,"M"),r}function n9(e,t){var r;return e.isValid()&&t.isValid()?(t=Ag(t,e),e.isBefore(t)?r=dw(e,t):(r=dw(t,e),r.milliseconds=-r.milliseconds,r.months=-r.months),r):{milliseconds:0,months:0}}function Ob(e,t){return function(r,n){var i,o;return n!==null&&!isNaN(+n)&&(ib(t,"moment()."+t+"(period, number) is deprecated. Please use moment()."+t+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=r,r=n,n=o),i=en(r,n),Pb(this,i,e),this}}function Pb(e,t,r,n){var i=t._milliseconds,o=Ip(t._days),a=Ip(t._months);e.isValid()&&(n=n??!0,a&&mb(e,Mu(e,"Month")+a*r),o&&ab(e,"Date",Mu(e,"Date")+o*r),i&&e._d.setTime(e._d.valueOf()+i*r),n&&U.updateOffset(e,o||a))}var i9=Ob(1,"add"),o9=Ob(-1,"subtract");function Rb(e){return typeof e=="string"||e instanceof String}function s9(e){return Jr(e)||bl(e)||Rb(e)||qn(e)||l9(e)||a9(e)||e===null||e===void 0}function a9(e){var t=lo(e)&&!wg(e),r=!1,n=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],i,o,a=n.length;for(i=0;ir.valueOf():r.valueOf()9999?Wc(r,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):_n(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Wc(r,"Z")):Wc(r,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function S9(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e="moment",t="",r,n,i,o;return this.isLocal()||(e=this.utcOffset()===0?"moment.utc":"moment.parseZone",t="Z"),r="["+e+'("]',n=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i="-MM-DD[T]HH:mm:ss.SSS",o=t+'[")]',this.format(r+n+i+o)}function b9(e){e||(e=this.isUtc()?U.defaultFormatUtc:U.defaultFormat);var t=Wc(this,e);return this.localeData().postformat(t)}function k9(e,t){return this.isValid()&&(Jr(e)&&e.isValid()||Xe(e).isValid())?en({to:this,from:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function C9(e){return this.from(Xe(),e)}function D9(e,t){return this.isValid()&&(Jr(e)&&e.isValid()||Xe(e).isValid())?en({from:this,to:e}).locale(this.locale()).humanize(!t):this.localeData().invalidDate()}function E9(e){return this.to(Xe(),e)}function Mb(e){var t;return e===void 0?this._locale._abbr:(t=ri(e),t!=null&&(this._locale=t),this)}var Lb=Ar("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(e){return e===void 0?this.localeData():this.locale(e)});function Ab(){return this._locale}var Iu=1e3,ms=60*Iu,Nu=60*ms,Ib=(365*400+97)*24*Nu;function ps(e,t){return(e%t+t)%t}function Nb(e,t,r){return e<100&&e>=0?new Date(e+400,t,r)-Ib:new Date(e,t,r).valueOf()}function $b(e,t,r){return e<100&&e>=0?Date.UTC(e+400,t,r)-Ib:Date.UTC(e,t,r)}function T9(e){var t,r;if(e=Ir(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(r=this._isUTC?$b:Nb,e){case"year":t=r(this.year(),0,1);break;case"quarter":t=r(this.year(),this.month()-this.month()%3,1);break;case"month":t=r(this.year(),this.month(),1);break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":t=r(this.year(),this.month(),this.date());break;case"hour":t=this._d.valueOf(),t-=ps(t+(this._isUTC?0:this.utcOffset()*ms),Nu);break;case"minute":t=this._d.valueOf(),t-=ps(t,ms);break;case"second":t=this._d.valueOf(),t-=ps(t,Iu);break}return this._d.setTime(t),U.updateOffset(this,!0),this}function j9(e){var t,r;if(e=Ir(e),e===void 0||e==="millisecond"||!this.isValid())return this;switch(r=this._isUTC?$b:Nb,e){case"year":t=r(this.year()+1,0,1)-1;break;case"quarter":t=r(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":t=r(this.year(),this.month()+1,1)-1;break;case"week":t=r(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":t=r(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":t=r(this.year(),this.month(),this.date()+1)-1;break;case"hour":t=this._d.valueOf(),t+=Nu-ps(t+(this._isUTC?0:this.utcOffset()*ms),Nu)-1;break;case"minute":t=this._d.valueOf(),t+=ms-ps(t,ms)-1;break;case"second":t=this._d.valueOf(),t+=Iu-ps(t,Iu)-1;break}return this._d.setTime(t),U.updateOffset(this,!0),this}function O9(){return this._d.valueOf()-(this._offset||0)*6e4}function P9(){return Math.floor(this.valueOf()/1e3)}function R9(){return new Date(this.valueOf())}function M9(){var e=this;return[e.year(),e.month(),e.date(),e.hour(),e.minute(),e.second(),e.millisecond()]}function L9(){var e=this;return{years:e.year(),months:e.month(),date:e.date(),hours:e.hours(),minutes:e.minutes(),seconds:e.seconds(),milliseconds:e.milliseconds()}}function A9(){return this.isValid()?this.toISOString():null}function I9(){return _g(this)}function N9(){return bi({},pe(this))}function $9(){return pe(this).overflow}function z9(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}se("N",0,0,"eraAbbr");se("NN",0,0,"eraAbbr");se("NNN",0,0,"eraAbbr");se("NNNN",0,0,"eraName");se("NNNNN",0,0,"eraNarrow");se("y",["y",1],"yo","eraYear");se("y",["yy",2],0,"eraYear");se("y",["yyy",3],0,"eraYear");se("y",["yyyy",4],0,"eraYear");q("N",Ig);q("NN",Ig);q("NNN",Ig);q("NNNN",Q9);q("NNNNN",q9);He(["N","NN","NNN","NNNN","NNNNN"],function(e,t,r,n){var i=r._locale.erasParse(e,n,r._strict);i?pe(r).era=i:pe(r).invalidEra=e});q("y",Fs);q("yy",Fs);q("yyy",Fs);q("yyyy",Fs);q("yo",Z9);He(["y","yy","yyy","yyyy"],Wt);He(["yo"],function(e,t,r,n){var i;r._locale._eraYearOrdinalRegex&&(i=e.match(r._locale._eraYearOrdinalRegex)),r._locale.eraYearOrdinalParse?t[Wt]=r._locale.eraYearOrdinalParse(e,i):t[Wt]=parseInt(e,10)});function H9(e,t){var r,n,i,o=this._eras||ri("en")._eras;for(r=0,n=o.length;r=0)return o[n]}function F9(e,t){var r=e.since<=e.until?1:-1;return t===void 0?U(e.since).year():U(e.since).year()+(t-e.offset)*r}function V9(){var e,t,r,n=this.localeData().eras();for(e=0,t=n.length;eo&&(t=o),oW.call(this,e,t,r,n,i))}function oW(e,t,r,n,i){var o=yb(e,t,r,n,i),a=al(o.year,0,o.dayOfYear);return this.year(a.getUTCFullYear()),this.month(a.getUTCMonth()),this.date(a.getUTCDate()),this}se("Q",0,"Qo","quarter");Bt("quarter","Q");Gt("quarter",7);q("Q",lb);He("Q",function(e,t){t[Fn]=(we(e)-1)*3});function sW(e){return e==null?Math.ceil((this.month()+1)/3):this.month((e-1)*3+this.month()%3)}se("D",["DD",2],"Do","date");Bt("date","D");Gt("date",9);q("D",Ke);q("DD",Ke,kr);q("Do",function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient});He(["D","DD"],cn);He("Do",function(e,t){t[cn]=we(e.match(Ke)[0])});var Hb=Ys("Date",!0);se("DDD",["DDDD",3],"DDDo","dayOfYear");Bt("dayOfYear","DDD");Gt("dayOfYear",4);q("DDD",Kd);q("DDDD",cb);He(["DDD","DDDD"],function(e,t,r){r._dayOfYear=we(e)});function aW(e){var t=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return e==null?t:this.add(e-t,"d")}se("m",["mm",2],0,"minute");Bt("minute","m");Gt("minute",14);q("m",Ke);q("mm",Ke,kr);He(["m","mm"],Gr);var lW=Ys("Minutes",!1);se("s",["ss",2],0,"second");Bt("second","s");Gt("second",15);q("s",Ke);q("ss",Ke,kr);He(["s","ss"],Vn);var cW=Ys("Seconds",!1);se("S",0,0,function(){return~~(this.millisecond()/100)});se(0,["SS",2],0,function(){return~~(this.millisecond()/10)});se(0,["SSS",3],0,"millisecond");se(0,["SSSS",4],0,function(){return this.millisecond()*10});se(0,["SSSSS",5],0,function(){return this.millisecond()*100});se(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3});se(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4});se(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5});se(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6});Bt("millisecond","ms");Gt("millisecond",16);q("S",Kd,lb);q("SS",Kd,kr);q("SSS",Kd,cb);var ki,Yb;for(ki="SSSS";ki.length<=9;ki+="S")q(ki,Fs);function uW(e,t){t[no]=we(("0."+e)*1e3)}for(ki="S";ki.length<=9;ki+="S")He(ki,uW);Yb=Ys("Milliseconds",!1);se("z",0,0,"zoneAbbr");se("zz",0,0,"zoneName");function dW(){return this._isUTC?"UTC":""}function fW(){return this._isUTC?"Coordinated Universal Time":""}var V=kl.prototype;V.add=i9;V.calendar=d9;V.clone=f9;V.diff=w9;V.endOf=j9;V.format=b9;V.from=k9;V.fromNow=C9;V.to=D9;V.toNow=E9;V.get=mF;V.invalidAt=$9;V.isAfter=h9;V.isBefore=m9;V.isBetween=p9;V.isSame=g9;V.isSameOrAfter=v9;V.isSameOrBefore=y9;V.isValid=I9;V.lang=Lb;V.locale=Mb;V.localeData=Ab;V.max=IV;V.min=AV;V.parsingFlags=N9;V.set=pF;V.startOf=T9;V.subtract=o9;V.toArray=M9;V.toObject=L9;V.toDate=R9;V.toISOString=x9;V.inspect=S9;typeof Symbol<"u"&&Symbol.for!=null&&(V[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"});V.toJSON=A9;V.toString=_9;V.unix=P9;V.valueOf=O9;V.creationData=z9;V.eraName=V9;V.eraNarrow=W9;V.eraAbbr=U9;V.eraYear=B9;V.year=vb;V.isLeapYear=LF;V.weekYear=J9;V.isoWeekYear=eW;V.quarter=V.quarters=sW;V.month=pb;V.daysInMonth=PF;V.week=V.weeks=HF;V.isoWeek=V.isoWeeks=YF;V.weeksInYear=nW;V.weeksInWeekYear=iW;V.isoWeeksInYear=tW;V.isoWeeksInISOWeekYear=rW;V.date=Hb;V.day=V.days=eV;V.weekday=tV;V.isoWeekday=rV;V.dayOfYear=aW;V.hour=V.hours=cV;V.minute=V.minutes=lW;V.second=V.seconds=cW;V.millisecond=V.milliseconds=Yb;V.utcOffset=UV;V.utc=GV;V.local=XV;V.parseZone=KV;V.hasAlignedHourOffset=QV;V.isDST=qV;V.isLocal=JV;V.isUtcOffset=e9;V.isUtc=jb;V.isUTC=jb;V.zoneAbbr=dW;V.zoneName=fW;V.dates=Ar("dates accessor is deprecated. Use date instead.",Hb);V.months=Ar("months accessor is deprecated. Use month instead",pb);V.years=Ar("years accessor is deprecated. Use year instead",vb);V.zone=Ar("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",BV);V.isDSTShifted=Ar("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",ZV);function hW(e){return Xe(e*1e3)}function mW(){return Xe.apply(null,arguments).parseZone()}function Fb(e){return e}var Pe=Sg.prototype;Pe.calendar=eF;Pe.longDateFormat=iF;Pe.invalidDate=sF;Pe.ordinal=cF;Pe.preparse=Fb;Pe.postformat=Fb;Pe.relativeTime=dF;Pe.pastFuture=fF;Pe.set=ZY;Pe.eras=H9;Pe.erasParse=Y9;Pe.erasConvertYear=F9;Pe.erasAbbrRegex=X9;Pe.erasNameRegex=G9;Pe.erasNarrowRegex=K9;Pe.months=EF;Pe.monthsShort=TF;Pe.monthsParse=OF;Pe.monthsRegex=MF;Pe.monthsShortRegex=RF;Pe.week=IF;Pe.firstDayOfYear=zF;Pe.firstDayOfWeek=$F;Pe.weekdays=KF;Pe.weekdaysMin=qF;Pe.weekdaysShort=QF;Pe.weekdaysParse=JF;Pe.weekdaysRegex=nV;Pe.weekdaysShortRegex=iV;Pe.weekdaysMinRegex=oV;Pe.isPM=aV;Pe.meridiem=uV;function $u(e,t,r,n){var i=ri(),o=wn().set(n,t);return i[r](o,e)}function Vb(e,t,r){if(qn(e)&&(t=e,e=void 0),e=e||"",t!=null)return $u(e,t,r,"month");var n,i=[];for(n=0;n<12;n++)i[n]=$u(e,n,r,"month");return i}function $g(e,t,r,n){typeof e=="boolean"?(qn(t)&&(r=t,t=void 0),t=t||""):(t=e,r=t,e=!1,qn(t)&&(r=t,t=void 0),t=t||"");var i=ri(),o=e?i._week.dow:0,a,c=[];if(r!=null)return $u(t,(r+o)%7,n,"day");for(a=0;a<7;a++)c[a]=$u(t,(a+o)%7,n,"day");return c}function pW(e,t){return Vb(e,t,"months")}function gW(e,t){return Vb(e,t,"monthsShort")}function vW(e,t,r){return $g(e,t,r,"weekdays")}function yW(e,t,r){return $g(e,t,r,"weekdaysShort")}function wW(e,t,r){return $g(e,t,r,"weekdaysMin")}Li("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10,r=we(e%100/10)===1?"th":t===1?"st":t===2?"nd":t===3?"rd":"th";return e+r}});U.lang=Ar("moment.lang is deprecated. Use moment.locale instead.",Li);U.langData=Ar("moment.langData is deprecated. Use moment.localeData instead.",ri);var Mn=Math.abs;function _W(){var e=this._data;return this._milliseconds=Mn(this._milliseconds),this._days=Mn(this._days),this._months=Mn(this._months),e.milliseconds=Mn(e.milliseconds),e.seconds=Mn(e.seconds),e.minutes=Mn(e.minutes),e.hours=Mn(e.hours),e.months=Mn(e.months),e.years=Mn(e.years),this}function Wb(e,t,r,n){var i=en(t,r);return e._milliseconds+=n*i._milliseconds,e._days+=n*i._days,e._months+=n*i._months,e._bubble()}function xW(e,t){return Wb(this,e,t,1)}function SW(e,t){return Wb(this,e,t,-1)}function fw(e){return e<0?Math.floor(e):Math.ceil(e)}function bW(){var e=this._milliseconds,t=this._days,r=this._months,n=this._data,i,o,a,c,d;return e>=0&&t>=0&&r>=0||e<=0&&t<=0&&r<=0||(e+=fw($p(r)+t)*864e5,t=0,r=0),n.milliseconds=e%1e3,i=Tr(e/1e3),n.seconds=i%60,o=Tr(i/60),n.minutes=o%60,a=Tr(o/60),n.hours=a%24,t+=Tr(a/24),d=Tr(Ub(t)),r+=d,t-=fw($p(d)),c=Tr(r/12),r%=12,n.days=t,n.months=r,n.years=c,this}function Ub(e){return e*4800/146097}function $p(e){return e*146097/4800}function kW(e){if(!this.isValid())return NaN;var t,r,n=this._milliseconds;if(e=Ir(e),e==="month"||e==="quarter"||e==="year")switch(t=this._days+n/864e5,r=this._months+Ub(t),e){case"month":return r;case"quarter":return r/3;case"year":return r/12}else switch(t=this._days+Math.round($p(this._months)),e){case"week":return t/7+n/6048e5;case"day":return t+n/864e5;case"hour":return t*24+n/36e5;case"minute":return t*1440+n/6e4;case"second":return t*86400+n/1e3;case"millisecond":return Math.floor(t*864e5)+n;default:throw new Error("Unknown unit "+e)}}function CW(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+we(this._months/12)*31536e6:NaN}function ni(e){return function(){return this.as(e)}}var DW=ni("ms"),EW=ni("s"),TW=ni("m"),jW=ni("h"),OW=ni("d"),PW=ni("w"),RW=ni("M"),MW=ni("Q"),LW=ni("y");function AW(){return en(this)}function IW(e){return e=Ir(e),this.isValid()?this[e+"s"]():NaN}function bo(e){return function(){return this.isValid()?this._data[e]:NaN}}var NW=bo("milliseconds"),$W=bo("seconds"),zW=bo("minutes"),HW=bo("hours"),YW=bo("days"),FW=bo("months"),VW=bo("years");function WW(){return Tr(this.days()/7)}var Nn=Math.round,is={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function UW(e,t,r,n,i){return i.relativeTime(t||1,!!r,e,n)}function BW(e,t,r,n){var i=en(e).abs(),o=Nn(i.as("s")),a=Nn(i.as("m")),c=Nn(i.as("h")),d=Nn(i.as("d")),h=Nn(i.as("M")),g=Nn(i.as("w")),v=Nn(i.as("y")),x=o<=r.ss&&["s",o]||o0,x[4]=n,UW.apply(null,x)}function GW(e){return e===void 0?Nn:typeof e=="function"?(Nn=e,!0):!1}function XW(e,t){return is[e]===void 0?!1:t===void 0?is[e]:(is[e]=t,e==="s"&&(is.ss=t-1),!0)}function KW(e,t){if(!this.isValid())return this.localeData().invalidDate();var r=!1,n=is,i,o;return typeof e=="object"&&(t=e,e=!1),typeof e=="boolean"&&(r=e),typeof t=="object"&&(n=Object.assign({},is,t),t.s!=null&&t.ss==null&&(n.ss=t.s-1)),i=this.localeData(),o=BW(this,!r,n,i),r&&(o=i.pastFuture(+this,o)),i.postformat(o)}var Rh=Math.abs;function Mo(e){return(e>0)-(e<0)||+e}function nf(){if(!this.isValid())return this.localeData().invalidDate();var e=Rh(this._milliseconds)/1e3,t=Rh(this._days),r=Rh(this._months),n,i,o,a,c=this.asSeconds(),d,h,g,v;return c?(n=Tr(e/60),i=Tr(n/60),e%=60,n%=60,o=Tr(r/12),r%=12,a=e?e.toFixed(3).replace(/\.?0+$/,""):"",d=c<0?"-":"",h=Mo(this._months)!==Mo(c)?"-":"",g=Mo(this._days)!==Mo(c)?"-":"",v=Mo(this._milliseconds)!==Mo(c)?"-":"",d+"P"+(o?h+o+"Y":"")+(r?h+r+"M":"")+(t?g+t+"D":"")+(i||n||e?"T":"")+(i?v+i+"H":"")+(n?v+n+"M":"")+(e?v+a+"S":"")):"P0D"}var De=tf.prototype;De.isValid=YV;De.abs=_W;De.add=xW;De.subtract=SW;De.as=kW;De.asMilliseconds=DW;De.asSeconds=EW;De.asMinutes=TW;De.asHours=jW;De.asDays=OW;De.asWeeks=PW;De.asMonths=RW;De.asQuarters=MW;De.asYears=LW;De.valueOf=CW;De._bubble=bW;De.clone=AW;De.get=IW;De.milliseconds=NW;De.seconds=$W;De.minutes=zW;De.hours=HW;De.days=YW;De.weeks=WW;De.months=FW;De.years=VW;De.humanize=KW;De.toISOString=nf;De.toString=nf;De.toJSON=nf;De.locale=Mb;De.localeData=Ab;De.toIsoString=Ar("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",nf);De.lang=Lb;se("X",0,0,"unix");se("x",0,0,"valueOf");q("x",qd);q("X",vF);He("X",function(e,t,r){r._d=new Date(parseFloat(e)*1e3)});He("x",function(e,t,r){r._d=new Date(we(e))});//! moment.js +U.version="2.29.4";QY(Xe);U.fn=V;U.min=NV;U.max=$V;U.now=zV;U.utc=wn;U.unix=hW;U.months=pW;U.isDate=bl;U.locale=Li;U.invalid=Bd;U.duration=en;U.isMoment=Jr;U.weekdays=vW;U.parseZone=mW;U.localeData=ri;U.isDuration=Uc;U.monthsShort=gW;U.weekdaysMin=wW;U.defineLocale=Og;U.updateLocale=mV;U.locales=pV;U.weekdaysShort=yW;U.normalizeUnits=Ir;U.relativeTimeRounding=GW;U.relativeTimeThreshold=XW;U.calendarFormat=u9;U.prototype=V;U.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"};const QW="/zh-cn/assets/blog-cover-95d8a382.png",qW=new Map([["blogs","技术博客"],["events","活动预告"],["highlights","精彩回顾"],["news-honor-dynamic","新闻 / 荣誉"]]),ZW=f.main` background: #fff; `,JW=f.div` max-width: 1440px; @@ -2173,7 +2173,7 @@ U.version="2.29.4";QH(Xe);U.fn=V;U.min=NV;U.max=$V;U.now=zV;U.utc=wn;U.unix=hW;U background: #d6e4ff; border-radius: 0.04rem; text-transform: capitalize; -`,lU=Object.assign({"/src/articles/blogs/2022-05-17-Rust-Implementation-of-RDMA/index.md":()=>D(()=>import("./index-8702c933.js"),[]),"/src/articles/blogs/2022-05-27-Crossbeam-Epoch-Algorithm-for-Lock-Free-Programming-in-Rust/index.md":()=>D(()=>import("./index-28c4b418.js"),[]),"/src/articles/blogs/2022-05-27-Managing-RDMA-Memory-in-Rust/index.md":()=>D(()=>import("./index-de3329ad.js"),[]),"/src/articles/blogs/2022-05-27-Memory-Management-for-Lock-Free-Data-Structures-in-the-Rust-Language/index.md":()=>D(()=>import("./index-fe9ae8f0.js"),[]),"/src/articles/blogs/2022-05-27-Rethinking-How-Rust-Async-Enables-High-Performance-IO/index.md":()=>D(()=>import("./index-d81ed83c.js"),[]),"/src/articles/blogs/2022-05-27-Rust-Implementation-of-K8S-Scheduling-Extensions/index.md":()=>D(()=>import("./index-9d5e23a7.js"),[]),"/src/articles/blogs/2022-05-27-Rust-implementation-of-RDMA-asynchronous-programming-(I):-epoll-based-implementation-of-RDMA-asynchronous-operation/index.md":()=>D(()=>import("./index-fd018bec.js"),[]),"/src/articles/blogs/2022-05-27-async-Rust-wraps-UCX-communication-library/index.md":()=>D(()=>import("./index-8c82e7c7.js"),[]),"/src/articles/blogs/2022-05-27-io_uring-Rust-Asynchronous-Library-Implementation/index.md":()=>D(()=>import("./index-e7093119.js"),[]),"/src/articles/blogs/2022-06-11-Computer-Architecture-l-MIT-Training-Q&A-and-Tips/index.md":()=>D(()=>import("./index-29c0b7ce.js"),[]),"/src/articles/blogs/2022-06-15-Etcd-client-cache-practice/index.md":()=>D(()=>import("./index-bfe04780.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-and-lock-free-programming-(1)/index.md":()=>D(()=>import("./index-147df4a9.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-in-lock-free-programming-scenarios-(2)/index.md":()=>D(()=>import("./index-b51a8ea2.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(1)/index.md":()=>D(()=>import("./index-5dd90a8c.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(2)/index.md":()=>D(()=>import("./index-426f092b.js"),[]),"/src/articles/blogs/2022-06-15-Using-BPF-to-implement-user-mode-tracing/index.md":()=>D(()=>import("./index-06215d3e.js"),[]),"/src/articles/blogs/2022-06-24-Why-should-a-startup-choose-Rust-for-an-RDMA-library/index.md":()=>D(()=>import("./index-1bdc26aa.js"),[]),"/src/articles/blogs/2022-06-30-Ten-thousand-words-long-article,-detailing-the-hardware-acceleration-and-implementation-of-TRIDENT:-Poseidon-hash-algorithm!/index.md":()=>D(()=>import("./index-2c990cf9.js"),[]),"/src/articles/blogs/2022-07-07-Rethinking-of-the-Curp-Consensus-Protocol/index.md":()=>D(()=>import("./index-f6eeef5e.js"),[]),"/src/articles/blogs/2022-08-11-DatenLord-|-Xline-Geo-distributed-KV-Storage/index.md":()=>D(()=>import("./index-9cd4971b.js"),[]),"/src/articles/blogs/2022-10-11-Rust-Chat-Room:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-bb28ce04.js"),[]),"/src/articles/blogs/2022-10-20-Wonderful-review-l-Rust-chat-room:-Xline-cross-data-center-consistency-management/index.md":()=>D(()=>import("./index-fa30bf44.js"),[]),"/src/articles/blogs/2022-12-15-Distributed-state-machine-consensus-protocol-Copilot/index.md":()=>D(()=>import("./index-24694c1f.js"),[]),"/src/articles/blogs/2023-01-19-From-Cloud-Computing-to-Sky-Computing-(1)/index.md":()=>D(()=>import("./index-4b85dcd8.js"),[]),"/src/articles/blogs/2023-02-01-Distributed-laboratory-live-broadcast-l-Consensus-algorithm-and-consistent-metadata-management-across-data-centers/index.md":()=>D(()=>import("./index-4270ced0.js"),[]),"/src/articles/blogs/2023-02-16-Database-isolation-level-and-MVCC/index.md":()=>D(()=>import("./index-8c16a843.js"),[]),"/src/articles/blogs/2023-02-16-Xline-v0.2.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-9cbd4195.js"),[]),"/src/articles/blogs/2023-03-02-Thinking-about-programs-mathematically-and-verifying-correctness/index.md":()=>D(()=>import("./index-f82a02e0.js"),[]),"/src/articles/blogs/2023-03-23-Xline-v0.3.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-72b88898.js"),[]),"/src/articles/blogs/2023-04-20-How-to-elegantly-organize-asynchronous-code-in-a-Rust-project/index.md":()=>D(()=>import("./index-7582b288.js"),[]),"/src/articles/blogs/2023-04-24-DatenLord-open-source-product-technology-sharing-l-Xline-source-code-interpretation/index.md":()=>D(()=>import("./index-25ae7126.js"),[]),"/src/articles/blogs/2023-05-11-Xline-v0.4.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-494dac65.js"),[]),"/src/articles/blogs/2023-05-17-Computer-Architecture|MIT6.175-and-MIT6.375-Study-Notes/index.md":()=>D(()=>import("./index-073c84f3.js"),[]),"/src/articles/blogs/2023-05-25-Xline-Persistent-Storage-Design-and-Implementation/index.md":()=>D(()=>import("./index-86e42443.js"),[]),"/src/articles/blogs/2023-06-01-From-Cloud-Computing-to-Sky-Computing-(2)/index.md":()=>D(()=>import("./index-7a966399.js"),[]),"/src/articles/blogs/2023-06-21-The-first-cross-cloud-metadata-KV-storage-Xline-officially-entered-the-CNCF-sandbox/index.md":()=>D(()=>import("./index-a8e1cc23.js"),[]),"/src/articles/blogs/2023-06-21-Xline-v0.4.1:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-93097ad1.js"),[]),"/src/articles/blogs/2023-07-13-Interpretation-of-Xline-source-code-(1)——Introduction-to-CURP-protocol/index.md":()=>D(()=>import("./index-b77795ad.js"),[]),"/src/articles/blogs/2023-07-20-Xline-Source-Code-Interpretation-(II)-Lease-Mechanism-and-Implementation/index.md":()=>D(()=>import("./index-0074c42d.js"),[]),"/src/articles/blogs/2023-07-27-BSV-based-high-performance-parallel-CRC-hardware-circuit-generator/index.md":()=>D(()=>import("./index-2bfed728.js"),[]),"/src/articles/blogs/2023-08-15-Xline-v0.5.0-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-7a7fbe77.js"),[]),"/src/articles/blogs/2023-08-31-Fountain-Code/index.md":()=>D(()=>import("./index-0850e6f5.js"),[]),"/src/articles/blogs/2023-09-14-Xline-Source-Code-Interpretation-(III)--CURP-Server-Implementation/index.md":()=>D(()=>import("./index-277ae463.js"),[]),"/src/articles/blogs/2023-09-28-Bluespec-SytemVerilog-Handshake-Protocol-Interface-Conversion/index.md":()=>D(()=>import("./index-3139538f.js"),[]),"/src/articles/blogs/2023-10-12-Software-and-hardware-co-simulation-l-Overview-of-principles-and-main-components/index.md":()=>D(()=>import("./index-1ec93936.js"),[]),"/src/articles/blogs/2023-10-19-Xline-Source-Code-Interpretation-(IV)-CURP-state-machine-engine/index.md":()=>D(()=>import("./index-6618c0b5.js"),[]),"/src/articles/blogs/2023-10-26-Application-of-data-flow-programming-in-hardware-design/index.md":()=>D(()=>import("./index-9edebc8f.js"),[]),"/src/articles/blogs/2023-11-02-blue-ethernet-High-Performance-FPGA-Network-Packet-Processing-Project-Details/index.md":()=>D(()=>import("./index-8a16857f.js"),[]),"/src/articles/blogs/2023-11-23-Xline-v0.6.0:-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-b73b42f4.js"),[])}),hw=Object.assign({"/src/articles/events/2022-05-17-RDMA-Software-Interface-High-Level-Package/index.md":()=>D(()=>import("./index-fc5f1793.js"),[]),"/src/articles/events/2022-08-04-When-RDMA-meets-Rust/index.md":()=>D(()=>import("./index-1f6cee43.js"),[]),"/src/articles/events/2022-08-23-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-047539e4.js"),[]),"/src/articles/events/2022-10-11-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-a179aa93.js"),[]),"/src/articles/events/2022-11-11-Datan-Technology-invites-you-who-love-challenges-to-participate-in-Rust-China-Hackathon-2022/index.md":()=>D(()=>import("./index-b9cc4e07.js"),[]),"/src/articles/events/2022-11-24-The-Rust-China-Hackathon-2022-Datan-Technology-Group-Air-Presentation-is-here/index.md":()=>D(()=>import("./index-cf17c7a4.js"),[]),"/src/articles/events/2022-12-08-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-7df3558a.js"),[]),"/src/articles/events/2022-12-08-Welcome-to-sign-up-for-the-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-e197de7f.js"),[]),"/src/articles/events/2023-01-06-Datan-Technology-2023-Open-Source-Graduation-Design-Internship-Recruitment/index.md":()=>D(()=>import("./index-7b1bdbd4.js"),[]),"/src/articles/events/2023-01-12-Welcome-to-join-Datan-Technology-hardware-design-learning-community/index.md":()=>D(()=>import("./index-4e03f569.js"),[]),"/src/articles/events/2023-02-01-Consensus-Algorithms-and-Metadata-Management-for-Cross-Data-Center-Consistency/index.md":()=>D(()=>import("./index-8bcfd31b.js"),[]),"/src/articles/events/2023-03-31-4.8-Beijing-Rust-Meetup-|-Call-For-Presenters/index.md":()=>D(()=>import("./index-faf3ce4f.js"),[]),"/src/articles/events/2023-04-05-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-d2a8186a.js"),[]),"/src/articles/events/2023-05-04-Meet-this-summer|Datan-Technology-invites-you-to-participate-in-the-2023-Open-Source-Summer/index.md":()=>D(()=>import("./index-3dea6c6a.js"),[]),"/src/articles/events/2023-06-11-Countdown-to-Rust-X-DatenLord-l-Rust-China-Conf-2023/index.md":()=>D(()=>import("./index-0c25eea3.js"),[]),"/src/articles/events/2023-07-03-SpinalHDL-usage-and-development-experience-workshop/index.md":()=>D(()=>import("./index-65845b47.js"),[]),"/src/articles/events/2023-08-01-Countdown-to-6-days-l-Opportunities-and-Challenges-The-Development-Trend-of-Generative-AI-and-its-Application-on-the-Ground/index.md":()=>D(()=>import("./index-16f06676.js"),[]),"/src/articles/events/2023-08-15-DatenLord-X-Segmentfault-Live-Stream-Preview-l-CURP-Protocol-in-Industrial-Practice/index.md":()=>D(()=>import("./index-58491811.js"),[]),"/src/articles/events/2023-08-20-Upcoming-Events-l-2nd-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-6a3ed4c3.js"),[]),"/src/articles/events/2023-09-07-The-2nd-Hardware-Agile-Development-and-Methodology-Workshop-l-2023-RISC-V-China-Summit-Concurrent-Events-Successfully-Held/index.md":()=>D(()=>import("./index-a154d453.js"),[]),"/src/articles/events/2023-09-19-MIT-Coursework-Orientation-for-Newcomers/index.md":()=>D(()=>import("./index-5fa4b651.js"),[]),"/src/articles/events/2023-11-09-Exploring-the-Future-of-SpinalHDL-Applications-in-2023-Online-Workshop/index.md":()=>D(()=>import("./index-dfd283a0.js"),[]),"/src/articles/events/2023-11-17-Ding!-You've-received-a-Hackthon-invitation-from-Dartan-Technologies!/index.md":()=>D(()=>import("./index-69ce89cf.js"),[]),"/src/articles/events/2023-12-05-Countdown-to-5-days:-SpinalHDL-application-prospect-exploration-online-seminar/index.md":()=>D(()=>import("./index-24fab036.js"),[]),"/src/articles/events/2023-12-05-Ding!-2023-hackathon-tips-fresh-from-the-oven!-Last-week-to-sign-up-before-it's-too-late!/index.md":()=>D(()=>import("./index-b8dbda9f.js"),[]),"/src/articles/events/2023-12-14-MIT-Architecture-Open-Course-Learning-Community-Version-2.0-is-officially-launched~/index.md":()=>D(()=>import("./index-50ad21f0.js"),[])}),cU=Object.assign({"/src/articles/highlights/2022-07-28-Creatively-fine-tuned-wheels:-RDMA's-Rust-safety-practices/index.md":()=>D(()=>import("./index-37f93c7b.js"),[]),"/src/articles/highlights/2022-08-04-Rust-X-Datenlord:-Review-of-the-Second-China-Rust-Developer-Conference/index.md":()=>D(()=>import("./index-8f0491cb.js"),[]),"/src/articles/highlights/2022-09-08-Discussion-on-Hardware-Agile-Development-and-Verification-Methodology/index.md":()=>D(()=>import("./index-ab5d85b7.js"),[]),"/src/articles/highlights/2022-10-20-Rust-Chatterbox:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-78a34e98.js"),[]),"/src/articles/highlights/2022-12-12-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-3b5176dc.js"),[]),"/src/articles/highlights/2023-01-12-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-354c3565.js"),[]),"/src/articles/highlights/2023-04-13-4.8-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-4ada4a0c.js"),[])}),uU=Object.assign({"/src/articles/news-honor-dynamic/2022-08-04-Dartan-Technology-Invited-to-Do-Hardware-Acceleration-Research-Sharing-at-2022-China-Computer-Society-Chip-Conference/index.md":()=>D(()=>import("./index-1e4d90fc.js"),[]),"/src/articles/news-honor-dynamic/2023-03-31-Datan-Technology-Entrepreneurship-is-a-rock-and-roll-in-the-soul/index.md":()=>D(()=>import("./index-012df9e2.js"),[])}),dU=()=>{const e=wt(),t=ti(),{title:r}=gn();N.useEffect(()=>{window.scrollTo(0,0)},[]);const i=(()=>{switch(r){case"blogs":return lU;case"events":return hw;case"highlights":return cU;case"news-honor-dynamic":return uU;default:return hw}})(),[o,a]=N.useState([]),c=async()=>{a(await Promise.all(Object.keys(i).map(d=>i[d]())))};return N.useEffect(()=>{c()},[t.pathname]),l.jsxs(l.Fragment,{children:[l.jsx(yn,{cover:QW,children:r&&qW.get(r)}),l.jsx(ZW,{children:l.jsx(JW,{children:o.reverse().map(({metadata:d,assetURLs:h})=>{const{date:g,title:v,label:x,description:b,author:k,editor:C,location:E,cover:y,tags:w}=d;return l.jsxs(eU,{children:[y&&l.jsx(tU,{src:y&&h[0]}),l.jsxs(rU,{children:[l.jsx(nU,{children:U(g).format("YYYY.M.D")}),l.jsx(iU,{onClick:()=>{e(`${g}-${v.split(" ").join("-")}`)},children:x}),l.jsx(oU,{children:b}),l.jsxs(sU,{children:[k&&l.jsxs(l.Fragment,{children:[l.jsxs(Mh,{children:["嘉宾:",k[0]]}),l.jsx(Lh,{})]}),C&&l.jsxs(l.Fragment,{children:[l.jsxs(Mh,{children:["编辑:",C[0]]}),l.jsx(Lh,{})]}),l.jsxs(Mh,{children:["发表于",E]}),w&&l.jsxs(l.Fragment,{children:[l.jsx(Lh,{}),w.map(S=>l.jsx(aU,{children:S},S))]})]})]})]},v)})})})]})},fU=(e,t)=>{const r=N.useRef({});N.useEffect(()=>{const n=c=>{r.current=c.reduce((g,v)=>(g[v.target.innerHTML]=v,g),r.current);const d=[];Object.keys(r.current).forEach(g=>{const v=r.current[g];v.isIntersecting&&d.push(v)});const h=g=>a.findIndex(v=>v.id===g);if(d.length===1)e(d[0].target.id);else if(d.length>1){const g=d.sort((v,x)=>h(v.target.id)-h(x.target.id));e(g[0].target.id)}},i={rootMargin:"0px 0px -40% 0px"},o=new IntersectionObserver(n,i),a=Array.from(document.querySelectorAll("h2, h3"));return a.forEach(c=>o.observe(c)),()=>o.disconnect()},[t])},hU=f.div``,mU=f.div` +`,lU=Object.assign({"/src/articles/blogs/2022-05-17-Rust-Implementation-of-RDMA/index.md":()=>D(()=>import("./index-8702c933.js"),[]),"/src/articles/blogs/2022-05-27-Crossbeam-Epoch-Algorithm-for-Lock-Free-Programming-in-Rust/index.md":()=>D(()=>import("./index-28c4b418.js"),[]),"/src/articles/blogs/2022-05-27-Managing-RDMA-Memory-in-Rust/index.md":()=>D(()=>import("./index-de3329ad.js"),[]),"/src/articles/blogs/2022-05-27-Memory-Management-for-Lock-Free-Data-Structures-in-the-Rust-Language/index.md":()=>D(()=>import("./index-fe9ae8f0.js"),[]),"/src/articles/blogs/2022-05-27-Rethinking-How-Rust-Async-Enables-High-Performance-IO/index.md":()=>D(()=>import("./index-d81ed83c.js"),[]),"/src/articles/blogs/2022-05-27-Rust-Implementation-of-K8S-Scheduling-Extensions/index.md":()=>D(()=>import("./index-9d5e23a7.js"),[]),"/src/articles/blogs/2022-05-27-Rust-implementation-of-RDMA-asynchronous-programming-(I):-epoll-based-implementation-of-RDMA-asynchronous-operation/index.md":()=>D(()=>import("./index-fd018bec.js"),[]),"/src/articles/blogs/2022-05-27-async-Rust-wraps-UCX-communication-library/index.md":()=>D(()=>import("./index-8c82e7c7.js"),[]),"/src/articles/blogs/2022-05-27-io_uring-Rust-Asynchronous-Library-Implementation/index.md":()=>D(()=>import("./index-e7093119.js"),[]),"/src/articles/blogs/2022-06-11-Computer-Architecture-l-MIT-Training-Q&A-and-Tips/index.md":()=>D(()=>import("./index-29c0b7ce.js"),[]),"/src/articles/blogs/2022-06-15-Etcd-client-cache-practice/index.md":()=>D(()=>import("./index-bfe04780.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-and-lock-free-programming-(1)/index.md":()=>D(()=>import("./index-147df4a9.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-in-lock-free-programming-scenarios-(2)/index.md":()=>D(()=>import("./index-b51a8ea2.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(1)/index.md":()=>D(()=>import("./index-5dd90a8c.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(2)/index.md":()=>D(()=>import("./index-426f092b.js"),[]),"/src/articles/blogs/2022-06-15-Using-BPF-to-implement-user-mode-tracing/index.md":()=>D(()=>import("./index-06215d3e.js"),[]),"/src/articles/blogs/2022-06-24-Why-should-a-startup-choose-Rust-for-an-RDMA-library/index.md":()=>D(()=>import("./index-1bdc26aa.js"),[]),"/src/articles/blogs/2022-06-30-Ten-thousand-words-long-article,-detailing-the-hardware-acceleration-and-implementation-of-TRIDENT:-Poseidon-hash-algorithm!/index.md":()=>D(()=>import("./index-2ee8a4ba.js"),[]),"/src/articles/blogs/2022-07-07-Rethinking-of-the-Curp-Consensus-Protocol/index.md":()=>D(()=>import("./index-f6eeef5e.js"),[]),"/src/articles/blogs/2022-08-11-DatenLord-|-Xline-Geo-distributed-KV-Storage/index.md":()=>D(()=>import("./index-9cd4971b.js"),[]),"/src/articles/blogs/2022-10-11-Rust-Chat-Room:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-0bd243e2.js"),[]),"/src/articles/blogs/2022-10-20-Wonderful-review-l-Rust-chat-room:-Xline-cross-data-center-consistency-management/index.md":()=>D(()=>import("./index-fa30bf44.js"),[]),"/src/articles/blogs/2022-12-15-Distributed-state-machine-consensus-protocol-Copilot/index.md":()=>D(()=>import("./index-24694c1f.js"),[]),"/src/articles/blogs/2023-01-19-From-Cloud-Computing-to-Sky-Computing-(1)/index.md":()=>D(()=>import("./index-4b85dcd8.js"),[]),"/src/articles/blogs/2023-02-01-Distributed-laboratory-live-broadcast-l-Consensus-algorithm-and-consistent-metadata-management-across-data-centers/index.md":()=>D(()=>import("./index-39390118.js"),[]),"/src/articles/blogs/2023-02-16-Database-isolation-level-and-MVCC/index.md":()=>D(()=>import("./index-1dde53bb.js"),[]),"/src/articles/blogs/2023-02-16-Xline-v0.2.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-6f20c5b7.js"),[]),"/src/articles/blogs/2023-03-02-Thinking-about-programs-mathematically-and-verifying-correctness/index.md":()=>D(()=>import("./index-82a24597.js"),[]),"/src/articles/blogs/2023-03-23-Xline-v0.3.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-72b88898.js"),[]),"/src/articles/blogs/2023-04-20-How-to-elegantly-organize-asynchronous-code-in-a-Rust-project/index.md":()=>D(()=>import("./index-7582b288.js"),[]),"/src/articles/blogs/2023-04-24-DatenLord-open-source-product-technology-sharing-l-Xline-source-code-interpretation/index.md":()=>D(()=>import("./index-015cf939.js"),[]),"/src/articles/blogs/2023-05-11-Xline-v0.4.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-1e192479.js"),[]),"/src/articles/blogs/2023-05-17-Computer-Architecture|MIT6.175-and-MIT6.375-Study-Notes/index.md":()=>D(()=>import("./index-e6f44fee.js"),[]),"/src/articles/blogs/2023-05-25-Xline-Persistent-Storage-Design-and-Implementation/index.md":()=>D(()=>import("./index-90593fbc.js"),[]),"/src/articles/blogs/2023-06-01-From-Cloud-Computing-to-Sky-Computing-(2)/index.md":()=>D(()=>import("./index-7a966399.js"),[]),"/src/articles/blogs/2023-06-21-The-first-cross-cloud-metadata-KV-storage-Xline-officially-entered-the-CNCF-sandbox/index.md":()=>D(()=>import("./index-a8e1cc23.js"),[]),"/src/articles/blogs/2023-06-21-Xline-v0.4.1:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-148365b0.js"),[]),"/src/articles/blogs/2023-07-13-Interpretation-of-Xline-source-code-(1)——Introduction-to-CURP-protocol/index.md":()=>D(()=>import("./index-5076d4ea.js"),[]),"/src/articles/blogs/2023-07-20-Xline-Source-Code-Interpretation-(II)-Lease-Mechanism-and-Implementation/index.md":()=>D(()=>import("./index-0074c42d.js"),[]),"/src/articles/blogs/2023-07-27-BSV-based-high-performance-parallel-CRC-hardware-circuit-generator/index.md":()=>D(()=>import("./index-dcc07e36.js"),[]),"/src/articles/blogs/2023-08-15-Xline-v0.5.0-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-7a7fbe77.js"),[]),"/src/articles/blogs/2023-08-31-Fountain-Code/index.md":()=>D(()=>import("./index-0850e6f5.js"),[]),"/src/articles/blogs/2023-09-14-Xline-Source-Code-Interpretation-(III)--CURP-Server-Implementation/index.md":()=>D(()=>import("./index-277ae463.js"),[]),"/src/articles/blogs/2023-09-28-Bluespec-SytemVerilog-Handshake-Protocol-Interface-Conversion/index.md":()=>D(()=>import("./index-3139538f.js"),[]),"/src/articles/blogs/2023-10-12-Software-and-hardware-co-simulation-l-Overview-of-principles-and-main-components/index.md":()=>D(()=>import("./index-1ec93936.js"),[]),"/src/articles/blogs/2023-10-19-Xline-Source-Code-Interpretation-(IV)-CURP-state-machine-engine/index.md":()=>D(()=>import("./index-6618c0b5.js"),[]),"/src/articles/blogs/2023-10-26-Application-of-data-flow-programming-in-hardware-design/index.md":()=>D(()=>import("./index-a27a1569.js"),[]),"/src/articles/blogs/2023-11-02-blue-ethernet-High-Performance-FPGA-Network-Packet-Processing-Project-Details/index.md":()=>D(()=>import("./index-0c28844a.js"),[]),"/src/articles/blogs/2023-11-23-Xline-v0.6.0:-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-b73b42f4.js"),[])}),hw=Object.assign({"/src/articles/events/2022-05-17-RDMA-Software-Interface-High-Level-Package/index.md":()=>D(()=>import("./index-a84bdbd8.js"),[]),"/src/articles/events/2022-08-04-When-RDMA-meets-Rust/index.md":()=>D(()=>import("./index-c832920a.js"),[]),"/src/articles/events/2022-08-23-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5968a39d.js"),[]),"/src/articles/events/2022-10-11-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-a179aa93.js"),[]),"/src/articles/events/2022-11-11-Datan-Technology-invites-you-who-love-challenges-to-participate-in-Rust-China-Hackathon-2022/index.md":()=>D(()=>import("./index-b9cc4e07.js"),[]),"/src/articles/events/2022-11-24-The-Rust-China-Hackathon-2022-Datan-Technology-Group-Air-Presentation-is-here/index.md":()=>D(()=>import("./index-cf17c7a4.js"),[]),"/src/articles/events/2022-12-08-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-7df3558a.js"),[]),"/src/articles/events/2022-12-08-Welcome-to-sign-up-for-the-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-4b956329.js"),[]),"/src/articles/events/2023-01-06-Datan-Technology-2023-Open-Source-Graduation-Design-Internship-Recruitment/index.md":()=>D(()=>import("./index-b2f220f4.js"),[]),"/src/articles/events/2023-01-12-Welcome-to-join-Datan-Technology-hardware-design-learning-community/index.md":()=>D(()=>import("./index-1179d885.js"),[]),"/src/articles/events/2023-02-01-Consensus-Algorithms-and-Metadata-Management-for-Cross-Data-Center-Consistency/index.md":()=>D(()=>import("./index-5689e7f4.js"),[]),"/src/articles/events/2023-03-31-4.8-Beijing-Rust-Meetup-|-Call-For-Presenters/index.md":()=>D(()=>import("./index-ffd93bc8.js"),[]),"/src/articles/events/2023-04-05-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-d2a8186a.js"),[]),"/src/articles/events/2023-05-04-Meet-this-summer|Datan-Technology-invites-you-to-participate-in-the-2023-Open-Source-Summer/index.md":()=>D(()=>import("./index-3dea6c6a.js"),[]),"/src/articles/events/2023-06-11-Countdown-to-Rust-X-DatenLord-l-Rust-China-Conf-2023/index.md":()=>D(()=>import("./index-0c25eea3.js"),[]),"/src/articles/events/2023-07-03-SpinalHDL-usage-and-development-experience-workshop/index.md":()=>D(()=>import("./index-0b4fd2ad.js"),[]),"/src/articles/events/2023-08-01-Countdown-to-6-days-l-Opportunities-and-Challenges-The-Development-Trend-of-Generative-AI-and-its-Application-on-the-Ground/index.md":()=>D(()=>import("./index-16f06676.js"),[]),"/src/articles/events/2023-08-15-DatenLord-X-Segmentfault-Live-Stream-Preview-l-CURP-Protocol-in-Industrial-Practice/index.md":()=>D(()=>import("./index-b9ee750d.js"),[]),"/src/articles/events/2023-08-20-Upcoming-Events-l-2nd-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5f61d62d.js"),[]),"/src/articles/events/2023-09-07-The-2nd-Hardware-Agile-Development-and-Methodology-Workshop-l-2023-RISC-V-China-Summit-Concurrent-Events-Successfully-Held/index.md":()=>D(()=>import("./index-a154d453.js"),[]),"/src/articles/events/2023-09-19-MIT-Coursework-Orientation-for-Newcomers/index.md":()=>D(()=>import("./index-65e0a878.js"),[]),"/src/articles/events/2023-11-09-Exploring-the-Future-of-SpinalHDL-Applications-in-2023-Online-Workshop/index.md":()=>D(()=>import("./index-2530d06d.js"),[]),"/src/articles/events/2023-11-17-Ding!-You've-received-a-Hackthon-invitation-from-Dartan-Technologies!/index.md":()=>D(()=>import("./index-28dd2373.js"),[]),"/src/articles/events/2023-12-05-Countdown-to-5-days:-SpinalHDL-application-prospect-exploration-online-seminar/index.md":()=>D(()=>import("./index-1c57aced.js"),[]),"/src/articles/events/2023-12-05-Ding!-2023-hackathon-tips-fresh-from-the-oven!-Last-week-to-sign-up-before-it's-too-late!/index.md":()=>D(()=>import("./index-b8dbda9f.js"),[]),"/src/articles/events/2023-12-14-MIT-Architecture-Open-Course-Learning-Community-Version-2.0-is-officially-launched~/index.md":()=>D(()=>import("./index-50ad21f0.js"),[]),"/src/articles/events/2024-01-02-Highlights-I-DatenLord-Hackathon-2023-came-to-a-successful-conclusion!/index.md":()=>D(()=>import("./index-1c51c928.js"),[])}),cU=Object.assign({"/src/articles/highlights/2022-07-28-Creatively-fine-tuned-wheels:-RDMA's-Rust-safety-practices/index.md":()=>D(()=>import("./index-37f93c7b.js"),[]),"/src/articles/highlights/2022-08-04-Rust-X-Datenlord:-Review-of-the-Second-China-Rust-Developer-Conference/index.md":()=>D(()=>import("./index-8f0491cb.js"),[]),"/src/articles/highlights/2022-09-08-Discussion-on-Hardware-Agile-Development-and-Verification-Methodology/index.md":()=>D(()=>import("./index-284b9c1c.js"),[]),"/src/articles/highlights/2022-10-20-Rust-Chatterbox:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-e7ccea1d.js"),[]),"/src/articles/highlights/2022-12-12-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-ffd70994.js"),[]),"/src/articles/highlights/2023-01-12-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-354c3565.js"),[]),"/src/articles/highlights/2023-04-13-4.8-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-4ada4a0c.js"),[]),"/src/articles/highlights/2023-12-21-Highlights:-2023-SpinalHDL-Application-Prospect-Exploration-Workshop/index.md":()=>D(()=>import("./index-67a528fa.js"),[])}),uU=Object.assign({"/src/articles/news-honor-dynamic/2022-08-04-Dartan-Technology-Invited-to-Do-Hardware-Acceleration-Research-Sharing-at-2022-China-Computer-Society-Chip-Conference/index.md":()=>D(()=>import("./index-1f712296.js"),[]),"/src/articles/news-honor-dynamic/2023-03-31-Datan-Technology-Entrepreneurship-is-a-rock-and-roll-in-the-soul/index.md":()=>D(()=>import("./index-012df9e2.js"),[])}),dU=()=>{const e=wt(),t=ti(),{title:r}=gn();N.useEffect(()=>{window.scrollTo(0,0)},[]);const i=(()=>{switch(r){case"blogs":return lU;case"events":return hw;case"highlights":return cU;case"news-honor-dynamic":return uU;default:return hw}})(),[o,a]=N.useState([]),c=async()=>{a(await Promise.all(Object.keys(i).map(d=>i[d]())))};return N.useEffect(()=>{c()},[t.pathname]),l.jsxs(l.Fragment,{children:[l.jsx(yn,{cover:QW,children:r&&qW.get(r)}),l.jsx(ZW,{children:l.jsx(JW,{children:o.reverse().map(({metadata:d,assetURLs:h})=>{const{date:g,title:v,label:x,description:b,author:k,editor:C,location:E,cover:y,tags:w}=d;return l.jsxs(eU,{children:[y&&l.jsx(tU,{src:y&&h[0]}),l.jsxs(rU,{children:[l.jsx(nU,{children:U(g).format("YYYY.M.D")}),l.jsx(iU,{onClick:()=>{e(`${g}-${v.split(" ").join("-")}`)},children:x}),l.jsx(oU,{children:b}),l.jsxs(sU,{children:[k&&l.jsxs(l.Fragment,{children:[l.jsxs(Mh,{children:["嘉宾:",k[0]]}),l.jsx(Lh,{})]}),C&&l.jsxs(l.Fragment,{children:[l.jsxs(Mh,{children:["编辑:",C[0]]}),l.jsx(Lh,{})]}),l.jsxs(Mh,{children:["发表于",E]}),w&&l.jsxs(l.Fragment,{children:[l.jsx(Lh,{}),w.map(S=>l.jsx(aU,{children:S},S))]})]})]})]},v)})})})]})},fU=(e,t)=>{const r=N.useRef({});N.useEffect(()=>{const n=c=>{r.current=c.reduce((g,v)=>(g[v.target.innerHTML]=v,g),r.current);const d=[];Object.keys(r.current).forEach(g=>{const v=r.current[g];v.isIntersecting&&d.push(v)});const h=g=>a.findIndex(v=>v.id===g);if(d.length===1)e(d[0].target.id);else if(d.length>1){const g=d.sort((v,x)=>h(v.target.id)-h(x.target.id));e(g[0].target.id)}},i={rootMargin:"0px 0px -40% 0px"},o=new IntersectionObserver(n,i),a=Array.from(document.querySelectorAll("h2, h3"));return a.forEach(c=>o.observe(c)),()=>o.disconnect()},[t])},hU=f.div``,mU=f.div` display: flex; max-width: 1440px; margin-inline: auto; @@ -2214,12 +2214,12 @@ U.version="2.29.4";QH(Xe);U.fn=V;U.min=NV;U.max=$V;U.now=zV;U.utc=wn;U.unix=hW;U font-size: 0.18rem; line-height: 1.5; cursor: pointer; -`,xU=Object.assign({"/src/articles/blogs/2022-05-17-Rust-Implementation-of-RDMA/index.md":()=>D(()=>import("./index-8702c933.js"),[]),"/src/articles/blogs/2022-05-27-Crossbeam-Epoch-Algorithm-for-Lock-Free-Programming-in-Rust/index.md":()=>D(()=>import("./index-28c4b418.js"),[]),"/src/articles/blogs/2022-05-27-Managing-RDMA-Memory-in-Rust/index.md":()=>D(()=>import("./index-de3329ad.js"),[]),"/src/articles/blogs/2022-05-27-Memory-Management-for-Lock-Free-Data-Structures-in-the-Rust-Language/index.md":()=>D(()=>import("./index-fe9ae8f0.js"),[]),"/src/articles/blogs/2022-05-27-Rethinking-How-Rust-Async-Enables-High-Performance-IO/index.md":()=>D(()=>import("./index-d81ed83c.js"),[]),"/src/articles/blogs/2022-05-27-Rust-Implementation-of-K8S-Scheduling-Extensions/index.md":()=>D(()=>import("./index-9d5e23a7.js"),[]),"/src/articles/blogs/2022-05-27-Rust-implementation-of-RDMA-asynchronous-programming-(I):-epoll-based-implementation-of-RDMA-asynchronous-operation/index.md":()=>D(()=>import("./index-fd018bec.js"),[]),"/src/articles/blogs/2022-05-27-async-Rust-wraps-UCX-communication-library/index.md":()=>D(()=>import("./index-8c82e7c7.js"),[]),"/src/articles/blogs/2022-05-27-io_uring-Rust-Asynchronous-Library-Implementation/index.md":()=>D(()=>import("./index-e7093119.js"),[]),"/src/articles/blogs/2022-06-11-Computer-Architecture-l-MIT-Training-Q&A-and-Tips/index.md":()=>D(()=>import("./index-29c0b7ce.js"),[]),"/src/articles/blogs/2022-06-15-Etcd-client-cache-practice/index.md":()=>D(()=>import("./index-bfe04780.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-and-lock-free-programming-(1)/index.md":()=>D(()=>import("./index-147df4a9.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-in-lock-free-programming-scenarios-(2)/index.md":()=>D(()=>import("./index-b51a8ea2.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(1)/index.md":()=>D(()=>import("./index-5dd90a8c.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(2)/index.md":()=>D(()=>import("./index-426f092b.js"),[]),"/src/articles/blogs/2022-06-15-Using-BPF-to-implement-user-mode-tracing/index.md":()=>D(()=>import("./index-06215d3e.js"),[]),"/src/articles/blogs/2022-06-24-Why-should-a-startup-choose-Rust-for-an-RDMA-library/index.md":()=>D(()=>import("./index-1bdc26aa.js"),[]),"/src/articles/blogs/2022-06-30-Ten-thousand-words-long-article,-detailing-the-hardware-acceleration-and-implementation-of-TRIDENT:-Poseidon-hash-algorithm!/index.md":()=>D(()=>import("./index-2c990cf9.js"),[]),"/src/articles/blogs/2022-07-07-Rethinking-of-the-Curp-Consensus-Protocol/index.md":()=>D(()=>import("./index-f6eeef5e.js"),[]),"/src/articles/blogs/2022-08-11-DatenLord-|-Xline-Geo-distributed-KV-Storage/index.md":()=>D(()=>import("./index-9cd4971b.js"),[]),"/src/articles/blogs/2022-10-11-Rust-Chat-Room:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-bb28ce04.js"),[]),"/src/articles/blogs/2022-10-20-Wonderful-review-l-Rust-chat-room:-Xline-cross-data-center-consistency-management/index.md":()=>D(()=>import("./index-fa30bf44.js"),[]),"/src/articles/blogs/2022-12-15-Distributed-state-machine-consensus-protocol-Copilot/index.md":()=>D(()=>import("./index-24694c1f.js"),[]),"/src/articles/blogs/2023-01-19-From-Cloud-Computing-to-Sky-Computing-(1)/index.md":()=>D(()=>import("./index-4b85dcd8.js"),[]),"/src/articles/blogs/2023-02-01-Distributed-laboratory-live-broadcast-l-Consensus-algorithm-and-consistent-metadata-management-across-data-centers/index.md":()=>D(()=>import("./index-4270ced0.js"),[]),"/src/articles/blogs/2023-02-16-Database-isolation-level-and-MVCC/index.md":()=>D(()=>import("./index-8c16a843.js"),[]),"/src/articles/blogs/2023-02-16-Xline-v0.2.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-9cbd4195.js"),[]),"/src/articles/blogs/2023-03-02-Thinking-about-programs-mathematically-and-verifying-correctness/index.md":()=>D(()=>import("./index-f82a02e0.js"),[]),"/src/articles/blogs/2023-03-23-Xline-v0.3.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-72b88898.js"),[]),"/src/articles/blogs/2023-04-20-How-to-elegantly-organize-asynchronous-code-in-a-Rust-project/index.md":()=>D(()=>import("./index-7582b288.js"),[]),"/src/articles/blogs/2023-04-24-DatenLord-open-source-product-technology-sharing-l-Xline-source-code-interpretation/index.md":()=>D(()=>import("./index-25ae7126.js"),[]),"/src/articles/blogs/2023-05-11-Xline-v0.4.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-494dac65.js"),[]),"/src/articles/blogs/2023-05-17-Computer-Architecture|MIT6.175-and-MIT6.375-Study-Notes/index.md":()=>D(()=>import("./index-073c84f3.js"),[]),"/src/articles/blogs/2023-05-25-Xline-Persistent-Storage-Design-and-Implementation/index.md":()=>D(()=>import("./index-86e42443.js"),[]),"/src/articles/blogs/2023-06-01-From-Cloud-Computing-to-Sky-Computing-(2)/index.md":()=>D(()=>import("./index-7a966399.js"),[]),"/src/articles/blogs/2023-06-21-The-first-cross-cloud-metadata-KV-storage-Xline-officially-entered-the-CNCF-sandbox/index.md":()=>D(()=>import("./index-a8e1cc23.js"),[]),"/src/articles/blogs/2023-06-21-Xline-v0.4.1:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-93097ad1.js"),[]),"/src/articles/blogs/2023-07-13-Interpretation-of-Xline-source-code-(1)——Introduction-to-CURP-protocol/index.md":()=>D(()=>import("./index-b77795ad.js"),[]),"/src/articles/blogs/2023-07-20-Xline-Source-Code-Interpretation-(II)-Lease-Mechanism-and-Implementation/index.md":()=>D(()=>import("./index-0074c42d.js"),[]),"/src/articles/blogs/2023-07-27-BSV-based-high-performance-parallel-CRC-hardware-circuit-generator/index.md":()=>D(()=>import("./index-2bfed728.js"),[]),"/src/articles/blogs/2023-08-15-Xline-v0.5.0-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-7a7fbe77.js"),[]),"/src/articles/blogs/2023-08-31-Fountain-Code/index.md":()=>D(()=>import("./index-0850e6f5.js"),[]),"/src/articles/blogs/2023-09-14-Xline-Source-Code-Interpretation-(III)--CURP-Server-Implementation/index.md":()=>D(()=>import("./index-277ae463.js"),[]),"/src/articles/blogs/2023-09-28-Bluespec-SytemVerilog-Handshake-Protocol-Interface-Conversion/index.md":()=>D(()=>import("./index-3139538f.js"),[]),"/src/articles/blogs/2023-10-12-Software-and-hardware-co-simulation-l-Overview-of-principles-and-main-components/index.md":()=>D(()=>import("./index-1ec93936.js"),[]),"/src/articles/blogs/2023-10-19-Xline-Source-Code-Interpretation-(IV)-CURP-state-machine-engine/index.md":()=>D(()=>import("./index-6618c0b5.js"),[]),"/src/articles/blogs/2023-10-26-Application-of-data-flow-programming-in-hardware-design/index.md":()=>D(()=>import("./index-9edebc8f.js"),[]),"/src/articles/blogs/2023-11-02-blue-ethernet-High-Performance-FPGA-Network-Packet-Processing-Project-Details/index.md":()=>D(()=>import("./index-8a16857f.js"),[]),"/src/articles/blogs/2023-11-23-Xline-v0.6.0:-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-b73b42f4.js"),[])}),SU=Object.assign({"/src/articles/events/2022-05-17-RDMA-Software-Interface-High-Level-Package/index.md":()=>D(()=>import("./index-fc5f1793.js"),[]),"/src/articles/events/2022-08-04-When-RDMA-meets-Rust/index.md":()=>D(()=>import("./index-1f6cee43.js"),[]),"/src/articles/events/2022-08-23-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-047539e4.js"),[]),"/src/articles/events/2022-10-11-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-a179aa93.js"),[]),"/src/articles/events/2022-11-11-Datan-Technology-invites-you-who-love-challenges-to-participate-in-Rust-China-Hackathon-2022/index.md":()=>D(()=>import("./index-b9cc4e07.js"),[]),"/src/articles/events/2022-11-24-The-Rust-China-Hackathon-2022-Datan-Technology-Group-Air-Presentation-is-here/index.md":()=>D(()=>import("./index-cf17c7a4.js"),[]),"/src/articles/events/2022-12-08-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-7df3558a.js"),[]),"/src/articles/events/2022-12-08-Welcome-to-sign-up-for-the-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-e197de7f.js"),[]),"/src/articles/events/2023-01-06-Datan-Technology-2023-Open-Source-Graduation-Design-Internship-Recruitment/index.md":()=>D(()=>import("./index-7b1bdbd4.js"),[]),"/src/articles/events/2023-01-12-Welcome-to-join-Datan-Technology-hardware-design-learning-community/index.md":()=>D(()=>import("./index-4e03f569.js"),[]),"/src/articles/events/2023-02-01-Consensus-Algorithms-and-Metadata-Management-for-Cross-Data-Center-Consistency/index.md":()=>D(()=>import("./index-8bcfd31b.js"),[]),"/src/articles/events/2023-03-31-4.8-Beijing-Rust-Meetup-|-Call-For-Presenters/index.md":()=>D(()=>import("./index-faf3ce4f.js"),[]),"/src/articles/events/2023-04-05-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-d2a8186a.js"),[]),"/src/articles/events/2023-05-04-Meet-this-summer|Datan-Technology-invites-you-to-participate-in-the-2023-Open-Source-Summer/index.md":()=>D(()=>import("./index-3dea6c6a.js"),[]),"/src/articles/events/2023-06-11-Countdown-to-Rust-X-DatenLord-l-Rust-China-Conf-2023/index.md":()=>D(()=>import("./index-0c25eea3.js"),[]),"/src/articles/events/2023-07-03-SpinalHDL-usage-and-development-experience-workshop/index.md":()=>D(()=>import("./index-65845b47.js"),[]),"/src/articles/events/2023-08-01-Countdown-to-6-days-l-Opportunities-and-Challenges-The-Development-Trend-of-Generative-AI-and-its-Application-on-the-Ground/index.md":()=>D(()=>import("./index-16f06676.js"),[]),"/src/articles/events/2023-08-15-DatenLord-X-Segmentfault-Live-Stream-Preview-l-CURP-Protocol-in-Industrial-Practice/index.md":()=>D(()=>import("./index-58491811.js"),[]),"/src/articles/events/2023-08-20-Upcoming-Events-l-2nd-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-6a3ed4c3.js"),[]),"/src/articles/events/2023-09-07-The-2nd-Hardware-Agile-Development-and-Methodology-Workshop-l-2023-RISC-V-China-Summit-Concurrent-Events-Successfully-Held/index.md":()=>D(()=>import("./index-a154d453.js"),[]),"/src/articles/events/2023-09-19-MIT-Coursework-Orientation-for-Newcomers/index.md":()=>D(()=>import("./index-5fa4b651.js"),[]),"/src/articles/events/2023-11-09-Exploring-the-Future-of-SpinalHDL-Applications-in-2023-Online-Workshop/index.md":()=>D(()=>import("./index-dfd283a0.js"),[]),"/src/articles/events/2023-11-17-Ding!-You've-received-a-Hackthon-invitation-from-Dartan-Technologies!/index.md":()=>D(()=>import("./index-69ce89cf.js"),[]),"/src/articles/events/2023-12-05-Countdown-to-5-days:-SpinalHDL-application-prospect-exploration-online-seminar/index.md":()=>D(()=>import("./index-24fab036.js"),[]),"/src/articles/events/2023-12-05-Ding!-2023-hackathon-tips-fresh-from-the-oven!-Last-week-to-sign-up-before-it's-too-late!/index.md":()=>D(()=>import("./index-b8dbda9f.js"),[]),"/src/articles/events/2023-12-14-MIT-Architecture-Open-Course-Learning-Community-Version-2.0-is-officially-launched~/index.md":()=>D(()=>import("./index-50ad21f0.js"),[])}),bU=Object.assign({"/src/articles/highlights/2022-07-28-Creatively-fine-tuned-wheels:-RDMA's-Rust-safety-practices/index.md":()=>D(()=>import("./index-37f93c7b.js"),[]),"/src/articles/highlights/2022-08-04-Rust-X-Datenlord:-Review-of-the-Second-China-Rust-Developer-Conference/index.md":()=>D(()=>import("./index-8f0491cb.js"),[]),"/src/articles/highlights/2022-09-08-Discussion-on-Hardware-Agile-Development-and-Verification-Methodology/index.md":()=>D(()=>import("./index-ab5d85b7.js"),[]),"/src/articles/highlights/2022-10-20-Rust-Chatterbox:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-78a34e98.js"),[]),"/src/articles/highlights/2022-12-12-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-3b5176dc.js"),[]),"/src/articles/highlights/2023-01-12-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-354c3565.js"),[]),"/src/articles/highlights/2023-04-13-4.8-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-4ada4a0c.js"),[])}),kU=Object.assign({"/src/articles/news-honor-dynamic/2022-08-04-Dartan-Technology-Invited-to-Do-Hardware-Acceleration-Research-Sharing-at-2022-China-Computer-Society-Chip-Conference/index.md":()=>D(()=>import("./index-1e4d90fc.js"),[]),"/src/articles/news-honor-dynamic/2023-03-31-Datan-Technology-Entrepreneurship-is-a-rock-and-roll-in-the-soul/index.md":()=>D(()=>import("./index-012df9e2.js"),[])}),CU=()=>{const{section:e,title:t}=gn(),[r,n]=N.useState(),[i,o]=N.useState("");fU(o,r);const a=async()=>{console.log(`/src/articles/${e}/${t}/index.md`);const h=await(async()=>{switch(e){case"blogs":return await xU[`/src/articles/${e}/${t}/index.md`]();case"events":return await SU[`/src/articles/${e}/${t}/index.md`]();case"highlights":return await bU[`/src/articles/${e}/${t}/index.md`]();case"news-honor-dynamic":return await kU[`/src/articles/${e}/${t}/index.md`]()}})();n(h)};N.useEffect(()=>{console.log(r)},[]),N.useEffect(()=>{a(),window.scrollTo(0,0)},[]);const c=d=>{var h;(h=document.querySelector(`#${d}`))==null||h.scrollIntoView({})};return l.jsx(hU,{children:l.jsxs(mU,{children:[(r==null?void 0:r.toc.length)!==0&&l.jsx(yU,{children:l.jsx(wU,{children:((r==null?void 0:r.toc)||[]).map(({label:d,level:h})=>{const g=d.split(" ").join("-").toLowerCase();return l.jsx(_U,{level:h,isActive:i===g,onClick:()=>c(g),children:d},d)})})}),l.jsxs(pU,{children:[l.jsx(gU,{children:r==null?void 0:r.metadata.label}),l.jsx(vU,{className:"content",dangerouslySetInnerHTML:{__html:(r==null?void 0:r.default)||""}})]})]})})};function Bb(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var zu={},DU={get exports(){return zu},set exports(e){zu=e}},mw;function EU(){return mw||(mw=1,function(e,t){(function(r,n){e.exports=n()})(Fo,function(){var r;function n(){return r.apply(null,arguments)}function i(s){r=s}function o(s){return s instanceof Array||Object.prototype.toString.call(s)==="[object Array]"}function a(s){return s!=null&&Object.prototype.toString.call(s)==="[object Object]"}function c(s,u){return Object.prototype.hasOwnProperty.call(s,u)}function d(s){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(s).length===0;var u;for(u in s)if(c(s,u))return!1;return!0}function h(s){return s===void 0}function g(s){return typeof s=="number"||Object.prototype.toString.call(s)==="[object Number]"}function v(s){return s instanceof Date||Object.prototype.toString.call(s)==="[object Date]"}function x(s,u){var m=[],p,_=s.length;for(p=0;p<_;++p)m.push(u(s[p],p));return m}function b(s,u){for(var m in u)c(u,m)&&(s[m]=u[m]);return c(u,"toString")&&(s.toString=u.toString),c(u,"valueOf")&&(s.valueOf=u.valueOf),s}function k(s,u,m,p){return av(s,u,m,p,!0).utc()}function C(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function E(s){return s._pf==null&&(s._pf=C()),s._pf}var y;Array.prototype.some?y=Array.prototype.some:y=function(s){var u=Object(this),m=u.length>>>0,p;for(p=0;p0)for(m=0;mD(()=>import("./index-8702c933.js"),[]),"/src/articles/blogs/2022-05-27-Crossbeam-Epoch-Algorithm-for-Lock-Free-Programming-in-Rust/index.md":()=>D(()=>import("./index-28c4b418.js"),[]),"/src/articles/blogs/2022-05-27-Managing-RDMA-Memory-in-Rust/index.md":()=>D(()=>import("./index-de3329ad.js"),[]),"/src/articles/blogs/2022-05-27-Memory-Management-for-Lock-Free-Data-Structures-in-the-Rust-Language/index.md":()=>D(()=>import("./index-fe9ae8f0.js"),[]),"/src/articles/blogs/2022-05-27-Rethinking-How-Rust-Async-Enables-High-Performance-IO/index.md":()=>D(()=>import("./index-d81ed83c.js"),[]),"/src/articles/blogs/2022-05-27-Rust-Implementation-of-K8S-Scheduling-Extensions/index.md":()=>D(()=>import("./index-9d5e23a7.js"),[]),"/src/articles/blogs/2022-05-27-Rust-implementation-of-RDMA-asynchronous-programming-(I):-epoll-based-implementation-of-RDMA-asynchronous-operation/index.md":()=>D(()=>import("./index-fd018bec.js"),[]),"/src/articles/blogs/2022-05-27-async-Rust-wraps-UCX-communication-library/index.md":()=>D(()=>import("./index-8c82e7c7.js"),[]),"/src/articles/blogs/2022-05-27-io_uring-Rust-Asynchronous-Library-Implementation/index.md":()=>D(()=>import("./index-e7093119.js"),[]),"/src/articles/blogs/2022-06-11-Computer-Architecture-l-MIT-Training-Q&A-and-Tips/index.md":()=>D(()=>import("./index-29c0b7ce.js"),[]),"/src/articles/blogs/2022-06-15-Etcd-client-cache-practice/index.md":()=>D(()=>import("./index-bfe04780.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-and-lock-free-programming-(1)/index.md":()=>D(()=>import("./index-147df4a9.js"),[]),"/src/articles/blogs/2022-06-15-Garbage-collection-mechanism-in-lock-free-programming-scenarios-(2)/index.md":()=>D(()=>import("./index-b51a8ea2.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(1)/index.md":()=>D(()=>import("./index-5dd90a8c.js"),[]),"/src/articles/blogs/2022-06-15-Memory-Order-(Memory-Order)-problem-(2)/index.md":()=>D(()=>import("./index-426f092b.js"),[]),"/src/articles/blogs/2022-06-15-Using-BPF-to-implement-user-mode-tracing/index.md":()=>D(()=>import("./index-06215d3e.js"),[]),"/src/articles/blogs/2022-06-24-Why-should-a-startup-choose-Rust-for-an-RDMA-library/index.md":()=>D(()=>import("./index-1bdc26aa.js"),[]),"/src/articles/blogs/2022-06-30-Ten-thousand-words-long-article,-detailing-the-hardware-acceleration-and-implementation-of-TRIDENT:-Poseidon-hash-algorithm!/index.md":()=>D(()=>import("./index-2ee8a4ba.js"),[]),"/src/articles/blogs/2022-07-07-Rethinking-of-the-Curp-Consensus-Protocol/index.md":()=>D(()=>import("./index-f6eeef5e.js"),[]),"/src/articles/blogs/2022-08-11-DatenLord-|-Xline-Geo-distributed-KV-Storage/index.md":()=>D(()=>import("./index-9cd4971b.js"),[]),"/src/articles/blogs/2022-10-11-Rust-Chat-Room:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-0bd243e2.js"),[]),"/src/articles/blogs/2022-10-20-Wonderful-review-l-Rust-chat-room:-Xline-cross-data-center-consistency-management/index.md":()=>D(()=>import("./index-fa30bf44.js"),[]),"/src/articles/blogs/2022-12-15-Distributed-state-machine-consensus-protocol-Copilot/index.md":()=>D(()=>import("./index-24694c1f.js"),[]),"/src/articles/blogs/2023-01-19-From-Cloud-Computing-to-Sky-Computing-(1)/index.md":()=>D(()=>import("./index-4b85dcd8.js"),[]),"/src/articles/blogs/2023-02-01-Distributed-laboratory-live-broadcast-l-Consensus-algorithm-and-consistent-metadata-management-across-data-centers/index.md":()=>D(()=>import("./index-39390118.js"),[]),"/src/articles/blogs/2023-02-16-Database-isolation-level-and-MVCC/index.md":()=>D(()=>import("./index-1dde53bb.js"),[]),"/src/articles/blogs/2023-02-16-Xline-v0.2.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-6f20c5b7.js"),[]),"/src/articles/blogs/2023-03-02-Thinking-about-programs-mathematically-and-verifying-correctness/index.md":()=>D(()=>import("./index-82a24597.js"),[]),"/src/articles/blogs/2023-03-23-Xline-v0.3.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-72b88898.js"),[]),"/src/articles/blogs/2023-04-20-How-to-elegantly-organize-asynchronous-code-in-a-Rust-project/index.md":()=>D(()=>import("./index-7582b288.js"),[]),"/src/articles/blogs/2023-04-24-DatenLord-open-source-product-technology-sharing-l-Xline-source-code-interpretation/index.md":()=>D(()=>import("./index-015cf939.js"),[]),"/src/articles/blogs/2023-05-11-Xline-v0.4.0:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-1e192479.js"),[]),"/src/articles/blogs/2023-05-17-Computer-Architecture|MIT6.175-and-MIT6.375-Study-Notes/index.md":()=>D(()=>import("./index-e6f44fee.js"),[]),"/src/articles/blogs/2023-05-25-Xline-Persistent-Storage-Design-and-Implementation/index.md":()=>D(()=>import("./index-90593fbc.js"),[]),"/src/articles/blogs/2023-06-01-From-Cloud-Computing-to-Sky-Computing-(2)/index.md":()=>D(()=>import("./index-7a966399.js"),[]),"/src/articles/blogs/2023-06-21-The-first-cross-cloud-metadata-KV-storage-Xline-officially-entered-the-CNCF-sandbox/index.md":()=>D(()=>import("./index-a8e1cc23.js"),[]),"/src/articles/blogs/2023-06-21-Xline-v0.4.1:-A-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-148365b0.js"),[]),"/src/articles/blogs/2023-07-13-Interpretation-of-Xline-source-code-(1)——Introduction-to-CURP-protocol/index.md":()=>D(()=>import("./index-5076d4ea.js"),[]),"/src/articles/blogs/2023-07-20-Xline-Source-Code-Interpretation-(II)-Lease-Mechanism-and-Implementation/index.md":()=>D(()=>import("./index-0074c42d.js"),[]),"/src/articles/blogs/2023-07-27-BSV-based-high-performance-parallel-CRC-hardware-circuit-generator/index.md":()=>D(()=>import("./index-dcc07e36.js"),[]),"/src/articles/blogs/2023-08-15-Xline-v0.5.0-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-7a7fbe77.js"),[]),"/src/articles/blogs/2023-08-31-Fountain-Code/index.md":()=>D(()=>import("./index-0850e6f5.js"),[]),"/src/articles/blogs/2023-09-14-Xline-Source-Code-Interpretation-(III)--CURP-Server-Implementation/index.md":()=>D(()=>import("./index-277ae463.js"),[]),"/src/articles/blogs/2023-09-28-Bluespec-SytemVerilog-Handshake-Protocol-Interface-Conversion/index.md":()=>D(()=>import("./index-3139538f.js"),[]),"/src/articles/blogs/2023-10-12-Software-and-hardware-co-simulation-l-Overview-of-principles-and-main-components/index.md":()=>D(()=>import("./index-1ec93936.js"),[]),"/src/articles/blogs/2023-10-19-Xline-Source-Code-Interpretation-(IV)-CURP-state-machine-engine/index.md":()=>D(()=>import("./index-6618c0b5.js"),[]),"/src/articles/blogs/2023-10-26-Application-of-data-flow-programming-in-hardware-design/index.md":()=>D(()=>import("./index-a27a1569.js"),[]),"/src/articles/blogs/2023-11-02-blue-ethernet-High-Performance-FPGA-Network-Packet-Processing-Project-Details/index.md":()=>D(()=>import("./index-0c28844a.js"),[]),"/src/articles/blogs/2023-11-23-Xline-v0.6.0:-a-distributed-KV-store-for-metadata-management/index.md":()=>D(()=>import("./index-b73b42f4.js"),[])}),SU=Object.assign({"/src/articles/events/2022-05-17-RDMA-Software-Interface-High-Level-Package/index.md":()=>D(()=>import("./index-a84bdbd8.js"),[]),"/src/articles/events/2022-08-04-When-RDMA-meets-Rust/index.md":()=>D(()=>import("./index-c832920a.js"),[]),"/src/articles/events/2022-08-23-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5968a39d.js"),[]),"/src/articles/events/2022-10-11-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-a179aa93.js"),[]),"/src/articles/events/2022-11-11-Datan-Technology-invites-you-who-love-challenges-to-participate-in-Rust-China-Hackathon-2022/index.md":()=>D(()=>import("./index-b9cc4e07.js"),[]),"/src/articles/events/2022-11-24-The-Rust-China-Hackathon-2022-Datan-Technology-Group-Air-Presentation-is-here/index.md":()=>D(()=>import("./index-cf17c7a4.js"),[]),"/src/articles/events/2022-12-08-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-7df3558a.js"),[]),"/src/articles/events/2022-12-08-Welcome-to-sign-up-for-the-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-4b956329.js"),[]),"/src/articles/events/2023-01-06-Datan-Technology-2023-Open-Source-Graduation-Design-Internship-Recruitment/index.md":()=>D(()=>import("./index-b2f220f4.js"),[]),"/src/articles/events/2023-01-12-Welcome-to-join-Datan-Technology-hardware-design-learning-community/index.md":()=>D(()=>import("./index-1179d885.js"),[]),"/src/articles/events/2023-02-01-Consensus-Algorithms-and-Metadata-Management-for-Cross-Data-Center-Consistency/index.md":()=>D(()=>import("./index-5689e7f4.js"),[]),"/src/articles/events/2023-03-31-4.8-Beijing-Rust-Meetup-|-Call-For-Presenters/index.md":()=>D(()=>import("./index-ffd93bc8.js"),[]),"/src/articles/events/2023-04-05-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-d2a8186a.js"),[]),"/src/articles/events/2023-05-04-Meet-this-summer|Datan-Technology-invites-you-to-participate-in-the-2023-Open-Source-Summer/index.md":()=>D(()=>import("./index-3dea6c6a.js"),[]),"/src/articles/events/2023-06-11-Countdown-to-Rust-X-DatenLord-l-Rust-China-Conf-2023/index.md":()=>D(()=>import("./index-0c25eea3.js"),[]),"/src/articles/events/2023-07-03-SpinalHDL-usage-and-development-experience-workshop/index.md":()=>D(()=>import("./index-0b4fd2ad.js"),[]),"/src/articles/events/2023-08-01-Countdown-to-6-days-l-Opportunities-and-Challenges-The-Development-Trend-of-Generative-AI-and-its-Application-on-the-Ground/index.md":()=>D(()=>import("./index-16f06676.js"),[]),"/src/articles/events/2023-08-15-DatenLord-X-Segmentfault-Live-Stream-Preview-l-CURP-Protocol-in-Industrial-Practice/index.md":()=>D(()=>import("./index-b9ee750d.js"),[]),"/src/articles/events/2023-08-20-Upcoming-Events-l-2nd-Hardware-Agile-Development-and-Verification-Methodology-Workshop/index.md":()=>D(()=>import("./index-5f61d62d.js"),[]),"/src/articles/events/2023-09-07-The-2nd-Hardware-Agile-Development-and-Methodology-Workshop-l-2023-RISC-V-China-Summit-Concurrent-Events-Successfully-Held/index.md":()=>D(()=>import("./index-a154d453.js"),[]),"/src/articles/events/2023-09-19-MIT-Coursework-Orientation-for-Newcomers/index.md":()=>D(()=>import("./index-65e0a878.js"),[]),"/src/articles/events/2023-11-09-Exploring-the-Future-of-SpinalHDL-Applications-in-2023-Online-Workshop/index.md":()=>D(()=>import("./index-2530d06d.js"),[]),"/src/articles/events/2023-11-17-Ding!-You've-received-a-Hackthon-invitation-from-Dartan-Technologies!/index.md":()=>D(()=>import("./index-28dd2373.js"),[]),"/src/articles/events/2023-12-05-Countdown-to-5-days:-SpinalHDL-application-prospect-exploration-online-seminar/index.md":()=>D(()=>import("./index-1c57aced.js"),[]),"/src/articles/events/2023-12-05-Ding!-2023-hackathon-tips-fresh-from-the-oven!-Last-week-to-sign-up-before-it's-too-late!/index.md":()=>D(()=>import("./index-b8dbda9f.js"),[]),"/src/articles/events/2023-12-14-MIT-Architecture-Open-Course-Learning-Community-Version-2.0-is-officially-launched~/index.md":()=>D(()=>import("./index-50ad21f0.js"),[]),"/src/articles/events/2024-01-02-Highlights-I-DatenLord-Hackathon-2023-came-to-a-successful-conclusion!/index.md":()=>D(()=>import("./index-1c51c928.js"),[])}),bU=Object.assign({"/src/articles/highlights/2022-07-28-Creatively-fine-tuned-wheels:-RDMA's-Rust-safety-practices/index.md":()=>D(()=>import("./index-37f93c7b.js"),[]),"/src/articles/highlights/2022-08-04-Rust-X-Datenlord:-Review-of-the-Second-China-Rust-Developer-Conference/index.md":()=>D(()=>import("./index-8f0491cb.js"),[]),"/src/articles/highlights/2022-09-08-Discussion-on-Hardware-Agile-Development-and-Verification-Methodology/index.md":()=>D(()=>import("./index-284b9c1c.js"),[]),"/src/articles/highlights/2022-10-20-Rust-Chatterbox:-Xline-Cross-Data-Center-Consistency-Management/index.md":()=>D(()=>import("./index-e7ccea1d.js"),[]),"/src/articles/highlights/2022-12-12-SpinalHDL-Application-Prospect-Exploration-Online-Seminar/index.md":()=>D(()=>import("./index-ffd70994.js"),[]),"/src/articles/highlights/2023-01-12-Rust-China-Hackathon-2022-Datan-Technology-Group/index.md":()=>D(()=>import("./index-354c3565.js"),[]),"/src/articles/highlights/2023-04-13-4.8-Beijing-Rust-Meetup/index.md":()=>D(()=>import("./index-4ada4a0c.js"),[]),"/src/articles/highlights/2023-12-21-Highlights:-2023-SpinalHDL-Application-Prospect-Exploration-Workshop/index.md":()=>D(()=>import("./index-67a528fa.js"),[])}),kU=Object.assign({"/src/articles/news-honor-dynamic/2022-08-04-Dartan-Technology-Invited-to-Do-Hardware-Acceleration-Research-Sharing-at-2022-China-Computer-Society-Chip-Conference/index.md":()=>D(()=>import("./index-1f712296.js"),[]),"/src/articles/news-honor-dynamic/2023-03-31-Datan-Technology-Entrepreneurship-is-a-rock-and-roll-in-the-soul/index.md":()=>D(()=>import("./index-012df9e2.js"),[])}),CU=()=>{const{section:e,title:t}=gn(),[r,n]=N.useState(),[i,o]=N.useState("");fU(o,r);const a=async()=>{console.log(`/src/articles/${e}/${t}/index.md`);const h=await(async()=>{switch(e){case"blogs":return await xU[`/src/articles/${e}/${t}/index.md`]();case"events":return await SU[`/src/articles/${e}/${t}/index.md`]();case"highlights":return await bU[`/src/articles/${e}/${t}/index.md`]();case"news-honor-dynamic":return await kU[`/src/articles/${e}/${t}/index.md`]()}})();n(h)};N.useEffect(()=>{console.log(r)},[]),N.useEffect(()=>{a(),window.scrollTo(0,0)},[]);const c=d=>{var h;(h=document.querySelector(`#${d}`))==null||h.scrollIntoView({})};return l.jsx(hU,{children:l.jsxs(mU,{children:[(r==null?void 0:r.toc.length)!==0&&l.jsx(yU,{children:l.jsx(wU,{children:((r==null?void 0:r.toc)||[]).map(({label:d,level:h})=>{const g=d.split(" ").join("-").toLowerCase();return l.jsx(_U,{level:h,isActive:i===g,onClick:()=>c(g),children:d},d)})})}),l.jsxs(pU,{children:[l.jsx(gU,{children:r==null?void 0:r.metadata.label}),l.jsx(vU,{className:"content",dangerouslySetInnerHTML:{__html:(r==null?void 0:r.default)||""}})]})]})})};function Bb(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var zu={},DU={get exports(){return zu},set exports(e){zu=e}},mw;function EU(){return mw||(mw=1,function(e,t){(function(r,n){e.exports=n()})(Fo,function(){var r;function n(){return r.apply(null,arguments)}function i(s){r=s}function o(s){return s instanceof Array||Object.prototype.toString.call(s)==="[object Array]"}function a(s){return s!=null&&Object.prototype.toString.call(s)==="[object Object]"}function c(s,u){return Object.prototype.hasOwnProperty.call(s,u)}function d(s){if(Object.getOwnPropertyNames)return Object.getOwnPropertyNames(s).length===0;var u;for(u in s)if(c(s,u))return!1;return!0}function h(s){return s===void 0}function g(s){return typeof s=="number"||Object.prototype.toString.call(s)==="[object Number]"}function v(s){return s instanceof Date||Object.prototype.toString.call(s)==="[object Date]"}function x(s,u){var m=[],p,_=s.length;for(p=0;p<_;++p)m.push(u(s[p],p));return m}function b(s,u){for(var m in u)c(u,m)&&(s[m]=u[m]);return c(u,"toString")&&(s.toString=u.toString),c(u,"valueOf")&&(s.valueOf=u.valueOf),s}function k(s,u,m,p){return av(s,u,m,p,!0).utc()}function C(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function E(s){return s._pf==null&&(s._pf=C()),s._pf}var y;Array.prototype.some?y=Array.prototype.some:y=function(s){var u=Object(this),m=u.length>>>0,p;for(p=0;p0)for(m=0;m=0;return(T?m?"+":"":"-")+Math.pow(10,Math.max(0,_)).toString().substr(1)+p}var ue=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,he=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,st={},Fe={};function X(s,u,m,p){var _=p;typeof p=="string"&&(_=function(){return this[p]()}),s&&(Fe[s]=_),u&&(Fe[u[0]]=function(){return Q(_.apply(this,arguments),u[1],u[2])}),m&&(Fe[m]=function(){return this.localeData().ordinal(_.apply(this,arguments),s)})}function $t(s){return s.match(/\[[\s\S]/)?s.replace(/^\[|\]$/g,""):s.replace(/\\/g,"")}function tr(s){var u=s.match(ue),m,p;for(m=0,p=u.length;m=0&&he.test(s);)s=s.replace(he,p),he.lastIndex=0,m-=1;return s}var hr={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Vi(s){var u=this._longDateFormat[s],m=this._longDateFormat[s.toUpperCase()];return u||!m?u:(this._longDateFormat[s]=m.match(ue).map(function(p){return p==="MMMM"||p==="MM"||p==="DD"||p==="dddd"?p.slice(1):p}).join(""),this._longDateFormat[s])}var Cr="Invalid date";function mr(){return this._invalidDate}var Us="%d",Bs=/\d{1,2}/;function Gs(s){return this._ordinal.replace("%d",s)}var ii={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Ol(s,u,m,p){var _=this._relativeTime[m];return G(_)?_(s,u,m,p):_.replace(/%d/i,s)}function Pl(s,u){var m=this._relativeTime[s>0?"future":"past"];return G(m)?m(u):m.replace(/%s/i,u)}var oi={};function Dt(s,u){var m=s.toLowerCase();oi[m]=oi[m+"s"]=oi[u]=s}function Et(s){return typeof s=="string"?oi[s]||oi[s.toLowerCase()]:void 0}function si(s){var u={},m,p;for(p in s)c(s,p)&&(m=Et(p),m&&(u[m]=s[p]));return u}var Xs={};function mt(s,u){Xs[s]=u}function af(s){var u=[],m;for(m in s)c(s,m)&&u.push({unit:m,priority:Xs[m]});return u.sort(function(p,_){return p.priority-_.priority}),u}function Co(s){return s%4===0&&s%100!==0||s%400===0}function Xt(s){return s<0?Math.ceil(s)||0:Math.floor(s)}function ge(s){var u=+s,m=0;return u!==0&&isFinite(u)&&(m=Xt(u)),m}function L(s,u){return function(m){return m!=null?(Y(this,s,m),n.updateOffset(this,u),this):I(this,s)}}function I(s,u){return s.isValid()?s._d["get"+(s._isUTC?"UTC":"")+u]():NaN}function Y(s,u,m){s.isValid()&&!isNaN(m)&&(u==="FullYear"&&Co(s.year())&&s.month()===1&&s.date()===29?(m=ge(m),s._d["set"+(s._isUTC?"UTC":"")+u](m,s.month(),Ml(m,s.month()))):s._d["set"+(s._isUTC?"UTC":"")+u](m))}function J(s){return s=Et(s),G(this[s])?this[s]():this}function re(s,u){if(typeof s=="object"){s=si(s);var m=af(s),p,_=m.length;for(p=0;p<_;p++)this[m[p].unit](s[m[p].unit])}else if(s=Et(s),G(this[s]))return this[s](u);return this}var fe=/\d/,ie=/\d\d/,ce=/\d{3}/,ne=/\d{4}/,_e=/[+-]?\d{6}/,ae=/\d\d?/,_t=/\d\d\d\d?/,ct=/\d\d\d\d\d\d?/,tt=/\d{1,3}/,zt=/\d{1,4}/,tn=/[+-]?\d{1,6}/,rn=/\d+/,xn=/[+-]?\d+/,nn=/Z|[+-]\d\d:?\d\d/gi,Sn=/Z|[+-]\d\d(?::?\d\d)?/gi,Ks=/[+-]?\d+(\.\d{1,3})?/,bn=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ai;ai={};function K(s,u,m){ai[s]=G(u)?u:function(p,_){return p&&m?m:u}}function Ve(s,u){return c(ai,s)?ai[s](u._strict,u._locale):new RegExp(rr(s))}function rr(s){return pt(s.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(u,m,p,_,T){return m||p||_||T}))}function pt(s){return s.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Wi={};function me(s,u){var m,p=u,_;for(typeof s=="string"&&(s=[s]),g(u)&&(p=function(T,A){A[u]=ge(T)}),_=s.length,m=0;m<_;m++)Wi[s[m]]=p}function kn(s,u){me(s,function(m,p,_,T){_._w=_._w||{},u(m,_._w,_,T)})}function Rl(s,u,m){u!=null&&c(Wi,s)&&Wi[s](u,m._a,m,s)}var jt=0,Cn=1,on=2,xt=3,zr=4,Dn=5,Ui=6,yk=7,wk=8;function _k(s,u){return(s%u+u)%u}var ut;Array.prototype.indexOf?ut=Array.prototype.indexOf:ut=function(s){var u;for(u=0;u68?1900:2e3)};var qg=L("FullYear",!0);function Pk(){return Co(this.year())}function Rk(s,u,m,p,_,T,A){var oe;return s<100&&s>=0?(oe=new Date(s+400,u,m,p,_,T,A),isFinite(oe.getFullYear())&&oe.setFullYear(s)):oe=new Date(s,u,m,p,_,T,A),oe}function qs(s){var u,m;return s<100&&s>=0?(m=Array.prototype.slice.call(arguments),m[0]=s+400,u=new Date(Date.UTC.apply(null,m)),isFinite(u.getUTCFullYear())&&u.setUTCFullYear(s)):u=new Date(Date.UTC.apply(null,arguments)),u}function Ll(s,u,m){var p=7+u-m,_=(7+qs(s,0,p).getUTCDay()-u)%7;return-_+p-1}function Zg(s,u,m,p,_){var T=(7+m-p)%7,A=Ll(s,p,_),oe=1+7*(u-1)+T+A,ve,ze;return oe<=0?(ve=s-1,ze=Qs(ve)+oe):oe>Qs(s)?(ve=s+1,ze=oe-Qs(s)):(ve=s,ze=oe),{year:ve,dayOfYear:ze}}function Zs(s,u,m){var p=Ll(s.year(),u,m),_=Math.floor((s.dayOfYear()-p-1)/7)+1,T,A;return _<1?(A=s.year()-1,T=_+En(A,u,m)):_>En(s.year(),u,m)?(T=_-En(s.year(),u,m),A=s.year()+1):(A=s.year(),T=_),{week:T,year:A}}function En(s,u,m){var p=Ll(s,u,m),_=Ll(s+1,u,m);return(Qs(s)-p+_)/7}X("w",["ww",2],"wo","week"),X("W",["WW",2],"Wo","isoWeek"),Dt("week","w"),Dt("isoWeek","W"),mt("week",5),mt("isoWeek",5),K("w",ae),K("ww",ae,ie),K("W",ae),K("WW",ae,ie),kn(["w","ww","W","WW"],function(s,u,m,p){u[p.substr(0,1)]=ge(s)});function Mk(s){return Zs(s,this._week.dow,this._week.doy).week}var Lk={dow:0,doy:6};function Ak(){return this._week.dow}function Ik(){return this._week.doy}function Nk(s){var u=this.localeData().week(this);return s==null?u:this.add((s-u)*7,"d")}function $k(s){var u=Zs(this,1,4).week;return s==null?u:this.add((s-u)*7,"d")}X("d",0,"do","day"),X("dd",0,0,function(s){return this.localeData().weekdaysMin(this,s)}),X("ddd",0,0,function(s){return this.localeData().weekdaysShort(this,s)}),X("dddd",0,0,function(s){return this.localeData().weekdays(this,s)}),X("e",0,0,"weekday"),X("E",0,0,"isoWeekday"),Dt("day","d"),Dt("weekday","e"),Dt("isoWeekday","E"),mt("day",11),mt("weekday",11),mt("isoWeekday",11),K("d",ae),K("e",ae),K("E",ae),K("dd",function(s,u){return u.weekdaysMinRegex(s)}),K("ddd",function(s,u){return u.weekdaysShortRegex(s)}),K("dddd",function(s,u){return u.weekdaysRegex(s)}),kn(["dd","ddd","dddd"],function(s,u,m,p){var _=m._locale.weekdaysParse(s,p,m._strict);_!=null?u.d=_:E(m).invalidWeekday=s}),kn(["d","e","E"],function(s,u,m,p){u[p]=ge(s)});function zk(s,u){return typeof s!="string"?s:isNaN(s)?(s=u.weekdaysParse(s),typeof s=="number"?s:null):parseInt(s,10)}function Yk(s,u){return typeof s=="string"?u.weekdaysParse(s)%7||7:isNaN(s)?null:s}function lf(s,u){return s.slice(u,7).concat(s.slice(0,u))}var Hk="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Jg="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Fk="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Vk=bn,Wk=bn,Uk=bn;function Bk(s,u){var m=o(this._weekdays)?this._weekdays:this._weekdays[s&&s!==!0&&this._weekdays.isFormat.test(u)?"format":"standalone"];return s===!0?lf(m,this._week.dow):s?m[s.day()]:m}function Gk(s){return s===!0?lf(this._weekdaysShort,this._week.dow):s?this._weekdaysShort[s.day()]:this._weekdaysShort}function Xk(s){return s===!0?lf(this._weekdaysMin,this._week.dow):s?this._weekdaysMin[s.day()]:this._weekdaysMin}function Kk(s,u,m){var p,_,T,A=s.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)T=k([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(T,"").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(T,"").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(T,"").toLocaleLowerCase();return m?u==="dddd"?(_=ut.call(this._weekdaysParse,A),_!==-1?_:null):u==="ddd"?(_=ut.call(this._shortWeekdaysParse,A),_!==-1?_:null):(_=ut.call(this._minWeekdaysParse,A),_!==-1?_:null):u==="dddd"?(_=ut.call(this._weekdaysParse,A),_!==-1||(_=ut.call(this._shortWeekdaysParse,A),_!==-1)?_:(_=ut.call(this._minWeekdaysParse,A),_!==-1?_:null)):u==="ddd"?(_=ut.call(this._shortWeekdaysParse,A),_!==-1||(_=ut.call(this._weekdaysParse,A),_!==-1)?_:(_=ut.call(this._minWeekdaysParse,A),_!==-1?_:null)):(_=ut.call(this._minWeekdaysParse,A),_!==-1||(_=ut.call(this._weekdaysParse,A),_!==-1)?_:(_=ut.call(this._shortWeekdaysParse,A),_!==-1?_:null))}function Qk(s,u,m){var p,_,T;if(this._weekdaysParseExact)return Kk.call(this,s,u,m);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(_=k([2e3,1]).day(p),m&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp("^"+this.weekdays(_,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[p]=new RegExp("^"+this.weekdaysShort(_,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[p]=new RegExp("^"+this.weekdaysMin(_,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[p]||(T="^"+this.weekdays(_,"")+"|^"+this.weekdaysShort(_,"")+"|^"+this.weekdaysMin(_,""),this._weekdaysParse[p]=new RegExp(T.replace(".",""),"i")),m&&u==="dddd"&&this._fullWeekdaysParse[p].test(s))return p;if(m&&u==="ddd"&&this._shortWeekdaysParse[p].test(s))return p;if(m&&u==="dd"&&this._minWeekdaysParse[p].test(s))return p;if(!m&&this._weekdaysParse[p].test(s))return p}}function qk(s){if(!this.isValid())return s!=null?this:NaN;var u=this._isUTC?this._d.getUTCDay():this._d.getDay();return s!=null?(s=zk(s,this.localeData()),this.add(s-u,"d")):u}function Zk(s){if(!this.isValid())return s!=null?this:NaN;var u=(this.day()+7-this.localeData()._week.dow)%7;return s==null?u:this.add(s-u,"d")}function Jk(s){if(!this.isValid())return s!=null?this:NaN;if(s!=null){var u=Yk(s,this.localeData());return this.day(this.day()%7?u:u-7)}else return this.day()||7}function eC(s){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||cf.call(this),s?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=Vk),this._weekdaysStrictRegex&&s?this._weekdaysStrictRegex:this._weekdaysRegex)}function tC(s){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||cf.call(this),s?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Wk),this._weekdaysShortStrictRegex&&s?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function rC(s){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||cf.call(this),s?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Uk),this._weekdaysMinStrictRegex&&s?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function cf(){function s(Kt,Rn){return Rn.length-Kt.length}var u=[],m=[],p=[],_=[],T,A,oe,ve,ze;for(T=0;T<7;T++)A=k([2e3,1]).day(T),oe=pt(this.weekdaysMin(A,"")),ve=pt(this.weekdaysShort(A,"")),ze=pt(this.weekdays(A,"")),u.push(oe),m.push(ve),p.push(ze),_.push(oe),_.push(ve),_.push(ze);u.sort(s),m.sort(s),p.sort(s),_.sort(s),this._weekdaysRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+p.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+m.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+u.join("|")+")","i")}function uf(){return this.hours()%12||12}function nC(){return this.hours()||24}X("H",["HH",2],0,"hour"),X("h",["hh",2],0,uf),X("k",["kk",2],0,nC),X("hmm",0,0,function(){return""+uf.apply(this)+Q(this.minutes(),2)}),X("hmmss",0,0,function(){return""+uf.apply(this)+Q(this.minutes(),2)+Q(this.seconds(),2)}),X("Hmm",0,0,function(){return""+this.hours()+Q(this.minutes(),2)}),X("Hmmss",0,0,function(){return""+this.hours()+Q(this.minutes(),2)+Q(this.seconds(),2)});function ev(s,u){X(s,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),u)})}ev("a",!0),ev("A",!1),Dt("hour","h"),mt("hour",13);function tv(s,u){return u._meridiemParse}K("a",tv),K("A",tv),K("H",ae),K("h",ae),K("k",ae),K("HH",ae,ie),K("hh",ae,ie),K("kk",ae,ie),K("hmm",_t),K("hmmss",ct),K("Hmm",_t),K("Hmmss",ct),me(["H","HH"],xt),me(["k","kk"],function(s,u,m){var p=ge(s);u[xt]=p===24?0:p}),me(["a","A"],function(s,u,m){m._isPm=m._locale.isPM(s),m._meridiem=s}),me(["h","hh"],function(s,u,m){u[xt]=ge(s),E(m).bigHour=!0}),me("hmm",function(s,u,m){var p=s.length-2;u[xt]=ge(s.substr(0,p)),u[zr]=ge(s.substr(p)),E(m).bigHour=!0}),me("hmmss",function(s,u,m){var p=s.length-4,_=s.length-2;u[xt]=ge(s.substr(0,p)),u[zr]=ge(s.substr(p,2)),u[Dn]=ge(s.substr(_)),E(m).bigHour=!0}),me("Hmm",function(s,u,m){var p=s.length-2;u[xt]=ge(s.substr(0,p)),u[zr]=ge(s.substr(p))}),me("Hmmss",function(s,u,m){var p=s.length-4,_=s.length-2;u[xt]=ge(s.substr(0,p)),u[zr]=ge(s.substr(p,2)),u[Dn]=ge(s.substr(_))});function iC(s){return(s+"").toLowerCase().charAt(0)==="p"}var oC=/[ap]\.?m?\.?/i,sC=L("Hours",!0);function aC(s,u,m){return s>11?m?"pm":"PM":m?"am":"AM"}var rv={calendar:W,longDateFormat:hr,invalidDate:Cr,ordinal:Us,dayOfMonthOrdinalParse:Bs,relativeTime:ii,months:xk,monthsShort:Bg,week:Lk,weekdays:Hk,weekdaysMin:Fk,weekdaysShort:Jg,meridiemParse:oC},Qe={},Js={},ea;function lC(s,u){var m,p=Math.min(s.length,u.length);for(m=0;m0;){if(_=Al(T.slice(0,m).join("-")),_)return _;if(p&&p.length>=m&&lC(T,p)>=m-1)break;m--}u++}return ea}function uC(s){return s.match("^[^/\\\\]*$")!=null}function Al(s){var u=null,m;if(Qe[s]===void 0&&e&&e.exports&&uC(s))try{u=ea._abbr,m=Bb,m("./locale/"+s),li(u)}catch{Qe[s]=null}return Qe[s]}function li(s,u){var m;return s&&(h(u)?m=jn(s):m=df(s,u),m?ea=m:typeof console<"u"&&console.warn&&console.warn("Locale "+s+" not found. Did you forget to load it?")),ea._abbr}function df(s,u){if(u!==null){var m,p=rv;if(u.abbr=s,Qe[s]!=null)te("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=Qe[s]._config;else if(u.parentLocale!=null)if(Qe[u.parentLocale]!=null)p=Qe[u.parentLocale]._config;else if(m=Al(u.parentLocale),m!=null)p=m._config;else return Js[u.parentLocale]||(Js[u.parentLocale]=[]),Js[u.parentLocale].push({name:s,config:u}),null;return Qe[s]=new $e(je(p,u)),Js[s]&&Js[s].forEach(function(_){df(_.name,_.config)}),li(s),Qe[s]}else return delete Qe[s],null}function dC(s,u){if(u!=null){var m,p,_=rv;Qe[s]!=null&&Qe[s].parentLocale!=null?Qe[s].set(je(Qe[s]._config,u)):(p=Al(s),p!=null&&(_=p._config),u=je(_,u),p==null&&(u.abbr=s),m=new $e(u),m.parentLocale=Qe[s],Qe[s]=m),li(s)}else Qe[s]!=null&&(Qe[s].parentLocale!=null?(Qe[s]=Qe[s].parentLocale,s===li()&&li(s)):Qe[s]!=null&&delete Qe[s]);return Qe[s]}function jn(s){var u;if(s&&s._locale&&s._locale._abbr&&(s=s._locale._abbr),!s)return ea;if(!o(s)){if(u=Al(s),u)return u;s=[s]}return cC(s)}function fC(){return ht(Qe)}function ff(s){var u,m=s._a;return m&&E(s).overflow===-2&&(u=m[Cn]<0||m[Cn]>11?Cn:m[on]<1||m[on]>Ml(m[jt],m[Cn])?on:m[xt]<0||m[xt]>24||m[xt]===24&&(m[zr]!==0||m[Dn]!==0||m[Ui]!==0)?xt:m[zr]<0||m[zr]>59?zr:m[Dn]<0||m[Dn]>59?Dn:m[Ui]<0||m[Ui]>999?Ui:-1,E(s)._overflowDayOfYear&&(uon)&&(u=on),E(s)._overflowWeeks&&u===-1&&(u=yk),E(s)._overflowWeekday&&u===-1&&(u=wk),E(s).overflow=u),s}var hC=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mC=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,pC=/Z|[+-]\d\d(?::?\d\d)?/,Il=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],hf=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],gC=/^\/?Date\((-?\d+)/i,vC=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,yC={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function iv(s){var u,m,p=s._i,_=hC.exec(p)||mC.exec(p),T,A,oe,ve,ze=Il.length,Kt=hf.length;if(_){for(E(s).iso=!0,u=0,m=ze;uQs(A)||s._dayOfYear===0)&&(E(s)._overflowDayOfYear=!0),m=qs(A,0,s._dayOfYear),s._a[Cn]=m.getUTCMonth(),s._a[on]=m.getUTCDate()),u=0;u<3&&s._a[u]==null;++u)s._a[u]=p[u]=_[u];for(;u<7;u++)s._a[u]=p[u]=s._a[u]==null?u===2?1:0:s._a[u];s._a[xt]===24&&s._a[zr]===0&&s._a[Dn]===0&&s._a[Ui]===0&&(s._nextDay=!0,s._a[xt]=0),s._d=(s._useUTC?qs:Rk).apply(null,p),T=s._useUTC?s._d.getUTCDay():s._d.getDay(),s._tzm!=null&&s._d.setUTCMinutes(s._d.getUTCMinutes()-s._tzm),s._nextDay&&(s._a[xt]=24),s._w&&typeof s._w.d<"u"&&s._w.d!==T&&(E(s).weekdayMismatch=!0)}}function DC(s){var u,m,p,_,T,A,oe,ve,ze;u=s._w,u.GG!=null||u.W!=null||u.E!=null?(T=1,A=4,m=Do(u.GG,s._a[jt],Zs(We(),1,4).year),p=Do(u.W,1),_=Do(u.E,1),(_<1||_>7)&&(ve=!0)):(T=s._locale._week.dow,A=s._locale._week.doy,ze=Zs(We(),T,A),m=Do(u.gg,s._a[jt],ze.year),p=Do(u.w,ze.week),u.d!=null?(_=u.d,(_<0||_>6)&&(ve=!0)):u.e!=null?(_=u.e+T,(u.e<0||u.e>6)&&(ve=!0)):_=T),p<1||p>En(m,T,A)?E(s)._overflowWeeks=!0:ve!=null?E(s)._overflowWeekday=!0:(oe=Zg(m,p,_,T,A),s._a[jt]=oe.year,s._dayOfYear=oe.dayOfYear)}n.ISO_8601=function(){},n.RFC_2822=function(){};function pf(s){if(s._f===n.ISO_8601){iv(s);return}if(s._f===n.RFC_2822){ov(s);return}s._a=[],E(s).empty=!0;var u=""+s._i,m,p,_,T,A,oe=u.length,ve=0,ze,Kt;for(_=$r(s._f,s._locale).match(ue)||[],Kt=_.length,m=0;m0&&E(s).unusedInput.push(A),u=u.slice(u.indexOf(p)+p.length),ve+=p.length),Fe[T]?(p?E(s).empty=!1:E(s).unusedTokens.push(T),Rl(T,p,s)):s._strict&&!p&&E(s).unusedTokens.push(T);E(s).charsLeftOver=oe-ve,u.length>0&&E(s).unusedInput.push(u),s._a[xt]<=12&&E(s).bigHour===!0&&s._a[xt]>0&&(E(s).bigHour=void 0),E(s).parsedDateParts=s._a.slice(0),E(s).meridiem=s._meridiem,s._a[xt]=EC(s._locale,s._a[xt],s._meridiem),ze=E(s).era,ze!==null&&(s._a[jt]=s._locale.erasConvertYear(ze,s._a[jt])),mf(s),ff(s)}function EC(s,u,m){var p;return m==null?u:s.meridiemHour!=null?s.meridiemHour(u,m):(s.isPM!=null&&(p=s.isPM(m),p&&u<12&&(u+=12),!p&&u===12&&(u=0)),u)}function jC(s){var u,m,p,_,T,A,oe=!1,ve=s._f.length;if(ve===0){E(s).invalidFormat=!0,s._d=new Date(NaN);return}for(_=0;_this?this:s:S()});function lv(s,u){var m,p;if(u.length===1&&o(u[0])&&(u=u[0]),!u.length)return We();for(m=u[0],p=1;pthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function KC(){if(!h(this._isDSTShifted))return this._isDSTShifted;var s={},u;return P(s,this),s=sv(s),s._a?(u=s._isUTC?k(s._a):We(s._a),this._isDSTShifted=this.isValid()&&YC(s._a,u.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function QC(){return this.isValid()?!this._isUTC:!1}function qC(){return this.isValid()?this._isUTC:!1}function uv(){return this.isValid()?this._isUTC&&this._offset===0:!1}var ZC=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,JC=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Yr(s,u){var m=s,p=null,_,T,A;return $l(s)?m={ms:s._milliseconds,d:s._days,M:s._months}:g(s)||!isNaN(+s)?(m={},u?m[u]=+s:m.milliseconds=+s):(p=ZC.exec(s))?(_=p[1]==="-"?-1:1,m={y:0,d:ge(p[on])*_,h:ge(p[xt])*_,m:ge(p[zr])*_,s:ge(p[Dn])*_,ms:ge(gf(p[Ui]*1e3))*_}):(p=JC.exec(s))?(_=p[1]==="-"?-1:1,m={y:Bi(p[2],_),M:Bi(p[3],_),w:Bi(p[4],_),d:Bi(p[5],_),h:Bi(p[6],_),m:Bi(p[7],_),s:Bi(p[8],_)}):m==null?m={}:typeof m=="object"&&("from"in m||"to"in m)&&(A=eD(We(m.from),We(m.to)),m={},m.ms=A.milliseconds,m.M=A.months),T=new Nl(m),$l(s)&&c(s,"_locale")&&(T._locale=s._locale),$l(s)&&c(s,"_isValid")&&(T._isValid=s._isValid),T}Yr.fn=Nl.prototype,Yr.invalid=zC;function Bi(s,u){var m=s&&parseFloat(s.replace(",","."));return(isNaN(m)?0:m)*u}function dv(s,u){var m={};return m.months=u.month()-s.month()+(u.year()-s.year())*12,s.clone().add(m.months,"M").isAfter(u)&&--m.months,m.milliseconds=+u-+s.clone().add(m.months,"M"),m}function eD(s,u){var m;return s.isValid()&&u.isValid()?(u=yf(u,s),s.isBefore(u)?m=dv(s,u):(m=dv(u,s),m.milliseconds=-m.milliseconds,m.months=-m.months),m):{milliseconds:0,months:0}}function fv(s,u){return function(m,p){var _,T;return p!==null&&!isNaN(+p)&&(te(u,"moment()."+u+"(period, number) is deprecated. Please use moment()."+u+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),T=m,m=p,p=T),_=Yr(m,p),hv(this,_,s),this}}function hv(s,u,m,p){var _=u._milliseconds,T=gf(u._days),A=gf(u._months);s.isValid()&&(p=p??!0,A&&Xg(s,I(s,"Month")+A*m),T&&Y(s,"Date",I(s,"Date")+T*m),_&&s._d.setTime(s._d.valueOf()+_*m),p&&n.updateOffset(s,T||A))}var tD=fv(1,"add"),rD=fv(-1,"subtract");function mv(s){return typeof s=="string"||s instanceof String}function nD(s){return R(s)||v(s)||mv(s)||g(s)||oD(s)||iD(s)||s===null||s===void 0}function iD(s){var u=a(s)&&!d(s),m=!1,p=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],_,T,A=p.length;for(_=0;_m.valueOf():m.valueOf()9999?Nr(m,u?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):G(Date.prototype.toISOString)?u?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Nr(m,"Z")):Nr(m,u?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function wD(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var s="moment",u="",m,p,_,T;return this.isLocal()||(s=this.utcOffset()===0?"moment.utc":"moment.parseZone",u="Z"),m="["+s+'("]',p=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",_="-MM-DD[T]HH:mm:ss.SSS",T=u+'[")]',this.format(m+p+_+T)}function _D(s){s||(s=this.isUtc()?n.defaultFormatUtc:n.defaultFormat);var u=Nr(this,s);return this.localeData().postformat(u)}function xD(s,u){return this.isValid()&&(R(s)&&s.isValid()||We(s).isValid())?Yr({to:this,from:s}).locale(this.locale()).humanize(!u):this.localeData().invalidDate()}function SD(s){return this.from(We(),s)}function bD(s,u){return this.isValid()&&(R(s)&&s.isValid()||We(s).isValid())?Yr({from:this,to:s}).locale(this.locale()).humanize(!u):this.localeData().invalidDate()}function kD(s){return this.to(We(),s)}function pv(s){var u;return s===void 0?this._locale._abbr:(u=jn(s),u!=null&&(this._locale=u),this)}var gv=z("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(s){return s===void 0?this.localeData():this.locale(s)});function vv(){return this._locale}var Yl=1e3,Eo=60*Yl,Hl=60*Eo,yv=(365*400+97)*24*Hl;function jo(s,u){return(s%u+u)%u}function wv(s,u,m){return s<100&&s>=0?new Date(s+400,u,m)-yv:new Date(s,u,m).valueOf()}function _v(s,u,m){return s<100&&s>=0?Date.UTC(s+400,u,m)-yv:Date.UTC(s,u,m)}function CD(s){var u,m;if(s=Et(s),s===void 0||s==="millisecond"||!this.isValid())return this;switch(m=this._isUTC?_v:wv,s){case"year":u=m(this.year(),0,1);break;case"quarter":u=m(this.year(),this.month()-this.month()%3,1);break;case"month":u=m(this.year(),this.month(),1);break;case"week":u=m(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":u=m(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":u=m(this.year(),this.month(),this.date());break;case"hour":u=this._d.valueOf(),u-=jo(u+(this._isUTC?0:this.utcOffset()*Eo),Hl);break;case"minute":u=this._d.valueOf(),u-=jo(u,Eo);break;case"second":u=this._d.valueOf(),u-=jo(u,Yl);break}return this._d.setTime(u),n.updateOffset(this,!0),this}function DD(s){var u,m;if(s=Et(s),s===void 0||s==="millisecond"||!this.isValid())return this;switch(m=this._isUTC?_v:wv,s){case"year":u=m(this.year()+1,0,1)-1;break;case"quarter":u=m(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":u=m(this.year(),this.month()+1,1)-1;break;case"week":u=m(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":u=m(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":u=m(this.year(),this.month(),this.date()+1)-1;break;case"hour":u=this._d.valueOf(),u+=Hl-jo(u+(this._isUTC?0:this.utcOffset()*Eo),Hl)-1;break;case"minute":u=this._d.valueOf(),u+=Eo-jo(u,Eo)-1;break;case"second":u=this._d.valueOf(),u+=Yl-jo(u,Yl)-1;break}return this._d.setTime(u),n.updateOffset(this,!0),this}function ED(){return this._d.valueOf()-(this._offset||0)*6e4}function jD(){return Math.floor(this.valueOf()/1e3)}function TD(){return new Date(this.valueOf())}function OD(){var s=this;return[s.year(),s.month(),s.date(),s.hour(),s.minute(),s.second(),s.millisecond()]}function PD(){var s=this;return{years:s.year(),months:s.month(),date:s.date(),hours:s.hours(),minutes:s.minutes(),seconds:s.seconds(),milliseconds:s.milliseconds()}}function RD(){return this.isValid()?this.toISOString():null}function MD(){return w(this)}function LD(){return b({},E(this))}function AD(){return E(this).overflow}function ID(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}X("N",0,0,"eraAbbr"),X("NN",0,0,"eraAbbr"),X("NNN",0,0,"eraAbbr"),X("NNNN",0,0,"eraName"),X("NNNNN",0,0,"eraNarrow"),X("y",["y",1],"yo","eraYear"),X("y",["yy",2],0,"eraYear"),X("y",["yyy",3],0,"eraYear"),X("y",["yyyy",4],0,"eraYear"),K("N",_f),K("NN",_f),K("NNN",_f),K("NNNN",GD),K("NNNNN",XD),me(["N","NN","NNN","NNNN","NNNNN"],function(s,u,m,p){var _=m._locale.erasParse(s,p,m._strict);_?E(m).era=_:E(m).invalidEra=s}),K("y",rn),K("yy",rn),K("yyy",rn),K("yyyy",rn),K("yo",KD),me(["y","yy","yyy","yyyy"],jt),me(["yo"],function(s,u,m,p){var _;m._locale._eraYearOrdinalRegex&&(_=s.match(m._locale._eraYearOrdinalRegex)),m._locale.eraYearOrdinalParse?u[jt]=m._locale.eraYearOrdinalParse(s,_):u[jt]=parseInt(s,10)});function ND(s,u){var m,p,_,T=this._eras||jn("en")._eras;for(m=0,p=T.length;m=0)return T[p]}function zD(s,u){var m=s.since<=s.until?1:-1;return u===void 0?n(s.since).year():n(s.since).year()+(u-s.offset)*m}function YD(){var s,u,m,p=this.localeData().eras();for(s=0,u=p.length;sT&&(u=T),rE.call(this,s,u,m,p,_))}function rE(s,u,m,p,_){var T=Zg(s,u,m,p,_),A=qs(T.year,0,T.dayOfYear);return this.year(A.getUTCFullYear()),this.month(A.getUTCMonth()),this.date(A.getUTCDate()),this}X("Q",0,"Qo","quarter"),Dt("quarter","Q"),mt("quarter",7),K("Q",fe),me("Q",function(s,u){u[Cn]=(ge(s)-1)*3});function nE(s){return s==null?Math.ceil((this.month()+1)/3):this.month((s-1)*3+this.month()%3)}X("D",["DD",2],"Do","date"),Dt("date","D"),mt("date",9),K("D",ae),K("DD",ae,ie),K("Do",function(s,u){return s?u._dayOfMonthOrdinalParse||u._ordinalParse:u._dayOfMonthOrdinalParseLenient}),me(["D","DD"],on),me("Do",function(s,u){u[on]=ge(s.match(ae)[0])});var Sv=L("Date",!0);X("DDD",["DDDD",3],"DDDo","dayOfYear"),Dt("dayOfYear","DDD"),mt("dayOfYear",4),K("DDD",tt),K("DDDD",ce),me(["DDD","DDDD"],function(s,u,m){m._dayOfYear=ge(s)});function iE(s){var u=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return s==null?u:this.add(s-u,"d")}X("m",["mm",2],0,"minute"),Dt("minute","m"),mt("minute",14),K("m",ae),K("mm",ae,ie),me(["m","mm"],zr);var oE=L("Minutes",!1);X("s",["ss",2],0,"second"),Dt("second","s"),mt("second",15),K("s",ae),K("ss",ae,ie),me(["s","ss"],Dn);var sE=L("Seconds",!1);X("S",0,0,function(){return~~(this.millisecond()/100)}),X(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),X(0,["SSS",3],0,"millisecond"),X(0,["SSSS",4],0,function(){return this.millisecond()*10}),X(0,["SSSSS",5],0,function(){return this.millisecond()*100}),X(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),X(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),X(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),X(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),Dt("millisecond","ms"),mt("millisecond",16),K("S",tt,fe),K("SS",tt,ie),K("SSS",tt,ce);var ci,bv;for(ci="SSSS";ci.length<=9;ci+="S")K(ci,rn);function aE(s,u){u[Ui]=ge(("0."+s)*1e3)}for(ci="S";ci.length<=9;ci+="S")me(ci,aE);bv=L("Milliseconds",!1),X("z",0,0,"zoneAbbr"),X("zz",0,0,"zoneName");function lE(){return this._isUTC?"UTC":""}function cE(){return this._isUTC?"Coordinated Universal Time":""}var F=M.prototype;F.add=tD,F.calendar=lD,F.clone=cD,F.diff=gD,F.endOf=DD,F.format=_D,F.from=xD,F.fromNow=SD,F.to=bD,F.toNow=kD,F.get=J,F.invalidAt=AD,F.isAfter=uD,F.isBefore=dD,F.isBetween=fD,F.isSame=hD,F.isSameOrAfter=mD,F.isSameOrBefore=pD,F.isValid=MD,F.lang=gv,F.locale=pv,F.localeData=vv,F.max=MC,F.min=RC,F.parsingFlags=LD,F.set=re,F.startOf=CD,F.subtract=rD,F.toArray=OD,F.toObject=PD,F.toDate=TD,F.toISOString=yD,F.inspect=wD,typeof Symbol<"u"&&Symbol.for!=null&&(F[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),F.toJSON=RD,F.toString=vD,F.unix=jD,F.valueOf=ED,F.creationData=ID,F.eraName=YD,F.eraNarrow=HD,F.eraAbbr=FD,F.eraYear=VD,F.year=qg,F.isLeapYear=Pk,F.weekYear=QD,F.isoWeekYear=qD,F.quarter=F.quarters=nE,F.month=Kg,F.daysInMonth=jk,F.week=F.weeks=Nk,F.isoWeek=F.isoWeeks=$k,F.weeksInYear=eE,F.weeksInWeekYear=tE,F.isoWeeksInYear=ZD,F.isoWeeksInISOWeekYear=JD,F.date=Sv,F.day=F.days=qk,F.weekday=Zk,F.isoWeekday=Jk,F.dayOfYear=iE,F.hour=F.hours=sC,F.minute=F.minutes=oE,F.second=F.seconds=sE,F.millisecond=F.milliseconds=bv,F.utcOffset=FC,F.utc=WC,F.local=UC,F.parseZone=BC,F.hasAlignedHourOffset=GC,F.isDST=XC,F.isLocal=QC,F.isUtcOffset=qC,F.isUtc=uv,F.isUTC=uv,F.zoneAbbr=lE,F.zoneName=cE,F.dates=z("dates accessor is deprecated. Use date instead.",Sv),F.months=z("months accessor is deprecated. Use month instead",Kg),F.years=z("years accessor is deprecated. Use year instead",qg),F.zone=z("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",VC),F.isDSTShifted=z("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",KC);function uE(s){return We(s*1e3)}function dE(){return We.apply(null,arguments).parseZone()}function kv(s){return s}var Te=$e.prototype;Te.calendar=le,Te.longDateFormat=Vi,Te.invalidDate=mr,Te.ordinal=Gs,Te.preparse=kv,Te.postformat=kv,Te.relativeTime=Ol,Te.pastFuture=Pl,Te.set=lt,Te.eras=ND,Te.erasParse=$D,Te.erasConvertYear=zD,Te.erasAbbrRegex=UD,Te.erasNameRegex=WD,Te.erasNarrowRegex=BD,Te.months=kk,Te.monthsShort=Ck,Te.monthsParse=Ek,Te.monthsRegex=Ok,Te.monthsShortRegex=Tk,Te.week=Mk,Te.firstDayOfYear=Ik,Te.firstDayOfWeek=Ak,Te.weekdays=Bk,Te.weekdaysMin=Xk,Te.weekdaysShort=Gk,Te.weekdaysParse=Qk,Te.weekdaysRegex=eC,Te.weekdaysShortRegex=tC,Te.weekdaysMinRegex=rC,Te.isPM=iC,Te.meridiem=aC;function Vl(s,u,m,p){var _=jn(),T=k().set(p,u);return _[m](T,s)}function Cv(s,u,m){if(g(s)&&(u=s,s=void 0),s=s||"",u!=null)return Vl(s,u,m,"month");var p,_=[];for(p=0;p<12;p++)_[p]=Vl(s,p,m,"month");return _}function Sf(s,u,m,p){typeof s=="boolean"?(g(u)&&(m=u,u=void 0),u=u||""):(u=s,m=u,s=!1,g(u)&&(m=u,u=void 0),u=u||"");var _=jn(),T=s?_._week.dow:0,A,oe=[];if(m!=null)return Vl(u,(m+T)%7,p,"day");for(A=0;A<7;A++)oe[A]=Vl(u,(A+T)%7,p,"day");return oe}function fE(s,u){return Cv(s,u,"months")}function hE(s,u){return Cv(s,u,"monthsShort")}function mE(s,u,m){return Sf(s,u,m,"weekdays")}function pE(s,u,m){return Sf(s,u,m,"weekdaysShort")}function gE(s,u,m){return Sf(s,u,m,"weekdaysMin")}li("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(s){var u=s%10,m=ge(s%100/10)===1?"th":u===1?"st":u===2?"nd":u===3?"rd":"th";return s+m}}),n.lang=z("moment.lang is deprecated. Use moment.locale instead.",li),n.langData=z("moment.langData is deprecated. Use moment.localeData instead.",jn);var Tn=Math.abs;function vE(){var s=this._data;return this._milliseconds=Tn(this._milliseconds),this._days=Tn(this._days),this._months=Tn(this._months),s.milliseconds=Tn(s.milliseconds),s.seconds=Tn(s.seconds),s.minutes=Tn(s.minutes),s.hours=Tn(s.hours),s.months=Tn(s.months),s.years=Tn(s.years),this}function Dv(s,u,m,p){var _=Yr(u,m);return s._milliseconds+=p*_._milliseconds,s._days+=p*_._days,s._months+=p*_._months,s._bubble()}function yE(s,u){return Dv(this,s,u,1)}function wE(s,u){return Dv(this,s,u,-1)}function Ev(s){return s<0?Math.floor(s):Math.ceil(s)}function _E(){var s=this._milliseconds,u=this._days,m=this._months,p=this._data,_,T,A,oe,ve;return s>=0&&u>=0&&m>=0||s<=0&&u<=0&&m<=0||(s+=Ev(bf(m)+u)*864e5,u=0,m=0),p.milliseconds=s%1e3,_=Xt(s/1e3),p.seconds=_%60,T=Xt(_/60),p.minutes=T%60,A=Xt(T/60),p.hours=A%24,u+=Xt(A/24),ve=Xt(jv(u)),m+=ve,u-=Ev(bf(ve)),oe=Xt(m/12),m%=12,p.days=u,p.months=m,p.years=oe,this}function jv(s){return s*4800/146097}function bf(s){return s*146097/4800}function xE(s){if(!this.isValid())return NaN;var u,m,p=this._milliseconds;if(s=Et(s),s==="month"||s==="quarter"||s==="year")switch(u=this._days+p/864e5,m=this._months+jv(u),s){case"month":return m;case"quarter":return m/3;case"year":return m/12}else switch(u=this._days+Math.round(bf(this._months)),s){case"week":return u/7+p/6048e5;case"day":return u+p/864e5;case"hour":return u*24+p/36e5;case"minute":return u*1440+p/6e4;case"second":return u*86400+p/1e3;case"millisecond":return Math.floor(u*864e5)+p;default:throw new Error("Unknown unit "+s)}}function SE(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+ge(this._months/12)*31536e6:NaN}function On(s){return function(){return this.as(s)}}var bE=On("ms"),kE=On("s"),CE=On("m"),DE=On("h"),EE=On("d"),jE=On("w"),TE=On("M"),OE=On("Q"),PE=On("y");function RE(){return Yr(this)}function ME(s){return s=Et(s),this.isValid()?this[s+"s"]():NaN}function Gi(s){return function(){return this.isValid()?this._data[s]:NaN}}var LE=Gi("milliseconds"),AE=Gi("seconds"),IE=Gi("minutes"),NE=Gi("hours"),$E=Gi("days"),zE=Gi("months"),YE=Gi("years");function HE(){return Xt(this.days()/7)}var Pn=Math.round,To={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function FE(s,u,m,p,_){return _.relativeTime(u||1,!!m,s,p)}function VE(s,u,m,p){var _=Yr(s).abs(),T=Pn(_.as("s")),A=Pn(_.as("m")),oe=Pn(_.as("h")),ve=Pn(_.as("d")),ze=Pn(_.as("M")),Kt=Pn(_.as("w")),Rn=Pn(_.as("y")),ui=T<=m.ss&&["s",T]||T0,ui[4]=p,FE.apply(null,ui)}function WE(s){return s===void 0?Pn:typeof s=="function"?(Pn=s,!0):!1}function UE(s,u){return To[s]===void 0?!1:u===void 0?To[s]:(To[s]=u,s==="s"&&(To.ss=u-1),!0)}function BE(s,u){if(!this.isValid())return this.localeData().invalidDate();var m=!1,p=To,_,T;return typeof s=="object"&&(u=s,s=!1),typeof s=="boolean"&&(m=s),typeof u=="object"&&(p=Object.assign({},To,u),u.s!=null&&u.ss==null&&(p.ss=u.s-1)),_=this.localeData(),T=VE(this,!m,p,_),m&&(T=_.pastFuture(+this,T)),_.postformat(T)}var kf=Math.abs;function Oo(s){return(s>0)-(s<0)||+s}function Wl(){if(!this.isValid())return this.localeData().invalidDate();var s=kf(this._milliseconds)/1e3,u=kf(this._days),m=kf(this._months),p,_,T,A,oe=this.asSeconds(),ve,ze,Kt,Rn;return oe?(p=Xt(s/60),_=Xt(p/60),s%=60,p%=60,T=Xt(m/12),m%=12,A=s?s.toFixed(3).replace(/\.?0+$/,""):"",ve=oe<0?"-":"",ze=Oo(this._months)!==Oo(oe)?"-":"",Kt=Oo(this._days)!==Oo(oe)?"-":"",Rn=Oo(this._milliseconds)!==Oo(oe)?"-":"",ve+"P"+(T?ze+T+"Y":"")+(m?ze+m+"M":"")+(u?Kt+u+"D":"")+(_||p||s?"T":"")+(_?Rn+_+"H":"")+(p?Rn+p+"M":"")+(s?Rn+A+"S":"")):"P0D"}var Ce=Nl.prototype;Ce.isValid=$C,Ce.abs=vE,Ce.add=yE,Ce.subtract=wE,Ce.as=xE,Ce.asMilliseconds=bE,Ce.asSeconds=kE,Ce.asMinutes=CE,Ce.asHours=DE,Ce.asDays=EE,Ce.asWeeks=jE,Ce.asMonths=TE,Ce.asQuarters=OE,Ce.asYears=PE,Ce.valueOf=SE,Ce._bubble=_E,Ce.clone=RE,Ce.get=ME,Ce.milliseconds=LE,Ce.seconds=AE,Ce.minutes=IE,Ce.hours=NE,Ce.days=$E,Ce.weeks=HE,Ce.months=zE,Ce.years=YE,Ce.humanize=BE,Ce.toISOString=Wl,Ce.toString=Wl,Ce.toJSON=Wl,Ce.locale=pv,Ce.localeData=vv,Ce.toIsoString=z("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Wl),Ce.lang=gv,X("X",0,0,"unix"),X("x",0,0,"valueOf"),K("x",xn),K("X",Ks),me("X",function(s,u,m){m._d=new Date(parseFloat(s)*1e3)}),me("x",function(s,u,m){m._d=new Date(ge(s))});//! moment.js -return n.version="2.29.4",i(We),n.fn=F,n.min=LC,n.max=AC,n.now=IC,n.utc=k,n.unix=uE,n.months=fE,n.isDate=v,n.locale=li,n.invalid=S,n.duration=Yr,n.isMoment=R,n.weekdays=mE,n.parseZone=dE,n.localeData=jn,n.isDuration=$l,n.monthsShort=hE,n.weekdaysMin=gE,n.defineLocale=df,n.updateLocale=dC,n.locales=fC,n.weekdaysShort=pE,n.normalizeUnits=Et,n.relativeTimeRounding=WE,n.relativeTimeThreshold=UE,n.calendarFormat=aD,n.prototype=F,n.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},n})}(DU)),zu}(function(e,t){(function(r,n){n(typeof Bb=="function"?EU():r.moment)})(Fo,function(r){//! moment.js locale configuration -var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(i,o){return i===12&&(i=0),o==="凌晨"||o==="早上"||o==="上午"?i:o==="下午"||o==="晚上"?i+12:i>=11?i:i+12},meridiem:function(i,o,a){var c=i*100+o;return c<600?"凌晨":c<900?"早上":c<1130?"上午":c<1230?"中午":c<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:function(i){return i.week()!==this.week()?"[下]dddLT":"[本]dddLT"},lastDay:"[昨天]LT",lastWeek:function(i){return this.week()!==i.week()?"[上]dddLT":"[本]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(i,o){switch(o){case"d":case"D":case"DDD":return i+"日";case"M":return i+"月";case"w":case"W":return i+"周";default:return i}},relativeTime:{future:"%s后",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",w:"1 周",ww:"%d 周",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}});return n})})();const Gb="/zh-cn/assets/wechat-qrcode-8dca7947.png",Xb="/zh-cn/assets/logo-image-91f154f1.svg",Kb="/zh-cn/assets/location-cf5a6f84.svg",Qb="/zh-cn/assets/clock-718648c0.svg",qb="/zh-cn/assets/calendar-cd5a76f0.svg";U.locale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY年MM月DD日",LLL:"YYYY年MM月DD日Ah点mm分",LLLL:"YYYY年MM月DD日ddddAh点mm分",l:"YYYY-M-D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return e===12&&(e=0),t==="凌晨"||t==="早上"||t==="上午"?e:t==="下午"||t==="晚上"?e+12:e>=11?e:e+12},meridiem:function(e,t){const r=e*100+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d秒",m:"1分钟",mm:"%d分钟",h:"1小时",hh:"%d小时",d:"1天",dd:"%d天",M:"1个月",MM:"%d个月",y:"1年",yy:"%d年"},week:{dow:1,doy:4}});const{Heading:jU,Paragraph:TU}=Me,{CNTitleMedium:Zb,CNTitleSmall:OU}=jU,{CNBodySmall:ko,CNMarkSmall:PU,CNBodyLarge:RU,CNMarkMedium:Jb}=TU,MU=f.div` +`+new Error().stack),m=!1}return u.apply(this,arguments)},u)}var ee={};function te(s,u){n.deprecationHandler!=null&&n.deprecationHandler(s,u),ee[s]||($(u),ee[s]=!0)}n.suppressDeprecationWarnings=!1,n.deprecationHandler=null;function G(s){return typeof Function<"u"&&s instanceof Function||Object.prototype.toString.call(s)==="[object Function]"}function lt(s){var u,m;for(m in s)c(s,m)&&(u=s[m],G(u)?this[m]=u:this["_"+m]=u);this._config=s,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function Te(s,u){var m=b({},s),p;for(p in u)c(u,p)&&(a(s[p])&&a(u[p])?(m[p]={},b(m[p],s[p]),b(m[p],u[p])):u[p]!=null?m[p]=u[p]:delete m[p]);for(p in s)c(s,p)&&!c(u,p)&&a(s[p])&&(m[p]=b({},m[p]));return m}function $e(s){s!=null&&this.set(s)}var ht;Object.keys?ht=Object.keys:ht=function(s){var u,m=[];for(u in s)c(s,u)&&m.push(u);return m};var W={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function le(s,u,m){var p=this._calendar[s]||this._calendar.sameElse;return G(p)?p.call(u,m):p}function Q(s,u,m){var p=""+Math.abs(s),_=u-p.length,j=s>=0;return(j?m?"+":"":"-")+Math.pow(10,Math.max(0,_)).toString().substr(1)+p}var ue=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,he=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,st={},Fe={};function X(s,u,m,p){var _=p;typeof p=="string"&&(_=function(){return this[p]()}),s&&(Fe[s]=_),u&&(Fe[u[0]]=function(){return Q(_.apply(this,arguments),u[1],u[2])}),m&&(Fe[m]=function(){return this.localeData().ordinal(_.apply(this,arguments),s)})}function $t(s){return s.match(/\[[\s\S]/)?s.replace(/^\[|\]$/g,""):s.replace(/\\/g,"")}function tr(s){var u=s.match(ue),m,p;for(m=0,p=u.length;m=0&&he.test(s);)s=s.replace(he,p),he.lastIndex=0,m-=1;return s}var hr={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function Vi(s){var u=this._longDateFormat[s],m=this._longDateFormat[s.toUpperCase()];return u||!m?u:(this._longDateFormat[s]=m.match(ue).map(function(p){return p==="MMMM"||p==="MM"||p==="DD"||p==="dddd"?p.slice(1):p}).join(""),this._longDateFormat[s])}var Cr="Invalid date";function mr(){return this._invalidDate}var Us="%d",Bs=/\d{1,2}/;function Gs(s){return this._ordinal.replace("%d",s)}var ii={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function Ol(s,u,m,p){var _=this._relativeTime[m];return G(_)?_(s,u,m,p):_.replace(/%d/i,s)}function Pl(s,u){var m=this._relativeTime[s>0?"future":"past"];return G(m)?m(u):m.replace(/%s/i,u)}var oi={};function Dt(s,u){var m=s.toLowerCase();oi[m]=oi[m+"s"]=oi[u]=s}function Et(s){return typeof s=="string"?oi[s]||oi[s.toLowerCase()]:void 0}function si(s){var u={},m,p;for(p in s)c(s,p)&&(m=Et(p),m&&(u[m]=s[p]));return u}var Xs={};function mt(s,u){Xs[s]=u}function af(s){var u=[],m;for(m in s)c(s,m)&&u.push({unit:m,priority:Xs[m]});return u.sort(function(p,_){return p.priority-_.priority}),u}function Co(s){return s%4===0&&s%100!==0||s%400===0}function Xt(s){return s<0?Math.ceil(s)||0:Math.floor(s)}function ge(s){var u=+s,m=0;return u!==0&&isFinite(u)&&(m=Xt(u)),m}function L(s,u){return function(m){return m!=null?(H(this,s,m),n.updateOffset(this,u),this):I(this,s)}}function I(s,u){return s.isValid()?s._d["get"+(s._isUTC?"UTC":"")+u]():NaN}function H(s,u,m){s.isValid()&&!isNaN(m)&&(u==="FullYear"&&Co(s.year())&&s.month()===1&&s.date()===29?(m=ge(m),s._d["set"+(s._isUTC?"UTC":"")+u](m,s.month(),Ml(m,s.month()))):s._d["set"+(s._isUTC?"UTC":"")+u](m))}function J(s){return s=Et(s),G(this[s])?this[s]():this}function re(s,u){if(typeof s=="object"){s=si(s);var m=af(s),p,_=m.length;for(p=0;p<_;p++)this[m[p].unit](s[m[p].unit])}else if(s=Et(s),G(this[s]))return this[s](u);return this}var fe=/\d/,ie=/\d\d/,ce=/\d{3}/,ne=/\d{4}/,_e=/[+-]?\d{6}/,ae=/\d\d?/,_t=/\d\d\d\d?/,ct=/\d\d\d\d\d\d?/,tt=/\d{1,3}/,zt=/\d{1,4}/,tn=/[+-]?\d{1,6}/,rn=/\d+/,xn=/[+-]?\d+/,nn=/Z|[+-]\d\d:?\d\d/gi,Sn=/Z|[+-]\d\d(?::?\d\d)?/gi,Ks=/[+-]?\d+(\.\d{1,3})?/,bn=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ai;ai={};function K(s,u,m){ai[s]=G(u)?u:function(p,_){return p&&m?m:u}}function Ve(s,u){return c(ai,s)?ai[s](u._strict,u._locale):new RegExp(rr(s))}function rr(s){return pt(s.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(u,m,p,_,j){return m||p||_||j}))}function pt(s){return s.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var Wi={};function me(s,u){var m,p=u,_;for(typeof s=="string"&&(s=[s]),g(u)&&(p=function(j,A){A[u]=ge(j)}),_=s.length,m=0;m<_;m++)Wi[s[m]]=p}function kn(s,u){me(s,function(m,p,_,j){_._w=_._w||{},u(m,_._w,_,j)})}function Rl(s,u,m){u!=null&&c(Wi,s)&&Wi[s](u,m._a,m,s)}var Tt=0,Cn=1,on=2,xt=3,zr=4,Dn=5,Ui=6,yk=7,wk=8;function _k(s,u){return(s%u+u)%u}var ut;Array.prototype.indexOf?ut=Array.prototype.indexOf:ut=function(s){var u;for(u=0;u68?1900:2e3)};var qg=L("FullYear",!0);function Pk(){return Co(this.year())}function Rk(s,u,m,p,_,j,A){var oe;return s<100&&s>=0?(oe=new Date(s+400,u,m,p,_,j,A),isFinite(oe.getFullYear())&&oe.setFullYear(s)):oe=new Date(s,u,m,p,_,j,A),oe}function qs(s){var u,m;return s<100&&s>=0?(m=Array.prototype.slice.call(arguments),m[0]=s+400,u=new Date(Date.UTC.apply(null,m)),isFinite(u.getUTCFullYear())&&u.setUTCFullYear(s)):u=new Date(Date.UTC.apply(null,arguments)),u}function Ll(s,u,m){var p=7+u-m,_=(7+qs(s,0,p).getUTCDay()-u)%7;return-_+p-1}function Zg(s,u,m,p,_){var j=(7+m-p)%7,A=Ll(s,p,_),oe=1+7*(u-1)+j+A,ve,ze;return oe<=0?(ve=s-1,ze=Qs(ve)+oe):oe>Qs(s)?(ve=s+1,ze=oe-Qs(s)):(ve=s,ze=oe),{year:ve,dayOfYear:ze}}function Zs(s,u,m){var p=Ll(s.year(),u,m),_=Math.floor((s.dayOfYear()-p-1)/7)+1,j,A;return _<1?(A=s.year()-1,j=_+En(A,u,m)):_>En(s.year(),u,m)?(j=_-En(s.year(),u,m),A=s.year()+1):(A=s.year(),j=_),{week:j,year:A}}function En(s,u,m){var p=Ll(s,u,m),_=Ll(s+1,u,m);return(Qs(s)-p+_)/7}X("w",["ww",2],"wo","week"),X("W",["WW",2],"Wo","isoWeek"),Dt("week","w"),Dt("isoWeek","W"),mt("week",5),mt("isoWeek",5),K("w",ae),K("ww",ae,ie),K("W",ae),K("WW",ae,ie),kn(["w","ww","W","WW"],function(s,u,m,p){u[p.substr(0,1)]=ge(s)});function Mk(s){return Zs(s,this._week.dow,this._week.doy).week}var Lk={dow:0,doy:6};function Ak(){return this._week.dow}function Ik(){return this._week.doy}function Nk(s){var u=this.localeData().week(this);return s==null?u:this.add((s-u)*7,"d")}function $k(s){var u=Zs(this,1,4).week;return s==null?u:this.add((s-u)*7,"d")}X("d",0,"do","day"),X("dd",0,0,function(s){return this.localeData().weekdaysMin(this,s)}),X("ddd",0,0,function(s){return this.localeData().weekdaysShort(this,s)}),X("dddd",0,0,function(s){return this.localeData().weekdays(this,s)}),X("e",0,0,"weekday"),X("E",0,0,"isoWeekday"),Dt("day","d"),Dt("weekday","e"),Dt("isoWeekday","E"),mt("day",11),mt("weekday",11),mt("isoWeekday",11),K("d",ae),K("e",ae),K("E",ae),K("dd",function(s,u){return u.weekdaysMinRegex(s)}),K("ddd",function(s,u){return u.weekdaysShortRegex(s)}),K("dddd",function(s,u){return u.weekdaysRegex(s)}),kn(["dd","ddd","dddd"],function(s,u,m,p){var _=m._locale.weekdaysParse(s,p,m._strict);_!=null?u.d=_:E(m).invalidWeekday=s}),kn(["d","e","E"],function(s,u,m,p){u[p]=ge(s)});function zk(s,u){return typeof s!="string"?s:isNaN(s)?(s=u.weekdaysParse(s),typeof s=="number"?s:null):parseInt(s,10)}function Hk(s,u){return typeof s=="string"?u.weekdaysParse(s)%7||7:isNaN(s)?null:s}function lf(s,u){return s.slice(u,7).concat(s.slice(0,u))}var Yk="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Jg="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Fk="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Vk=bn,Wk=bn,Uk=bn;function Bk(s,u){var m=o(this._weekdays)?this._weekdays:this._weekdays[s&&s!==!0&&this._weekdays.isFormat.test(u)?"format":"standalone"];return s===!0?lf(m,this._week.dow):s?m[s.day()]:m}function Gk(s){return s===!0?lf(this._weekdaysShort,this._week.dow):s?this._weekdaysShort[s.day()]:this._weekdaysShort}function Xk(s){return s===!0?lf(this._weekdaysMin,this._week.dow):s?this._weekdaysMin[s.day()]:this._weekdaysMin}function Kk(s,u,m){var p,_,j,A=s.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)j=k([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(j,"").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(j,"").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(j,"").toLocaleLowerCase();return m?u==="dddd"?(_=ut.call(this._weekdaysParse,A),_!==-1?_:null):u==="ddd"?(_=ut.call(this._shortWeekdaysParse,A),_!==-1?_:null):(_=ut.call(this._minWeekdaysParse,A),_!==-1?_:null):u==="dddd"?(_=ut.call(this._weekdaysParse,A),_!==-1||(_=ut.call(this._shortWeekdaysParse,A),_!==-1)?_:(_=ut.call(this._minWeekdaysParse,A),_!==-1?_:null)):u==="ddd"?(_=ut.call(this._shortWeekdaysParse,A),_!==-1||(_=ut.call(this._weekdaysParse,A),_!==-1)?_:(_=ut.call(this._minWeekdaysParse,A),_!==-1?_:null)):(_=ut.call(this._minWeekdaysParse,A),_!==-1||(_=ut.call(this._weekdaysParse,A),_!==-1)?_:(_=ut.call(this._shortWeekdaysParse,A),_!==-1?_:null))}function Qk(s,u,m){var p,_,j;if(this._weekdaysParseExact)return Kk.call(this,s,u,m);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(_=k([2e3,1]).day(p),m&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp("^"+this.weekdays(_,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[p]=new RegExp("^"+this.weekdaysShort(_,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[p]=new RegExp("^"+this.weekdaysMin(_,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[p]||(j="^"+this.weekdays(_,"")+"|^"+this.weekdaysShort(_,"")+"|^"+this.weekdaysMin(_,""),this._weekdaysParse[p]=new RegExp(j.replace(".",""),"i")),m&&u==="dddd"&&this._fullWeekdaysParse[p].test(s))return p;if(m&&u==="ddd"&&this._shortWeekdaysParse[p].test(s))return p;if(m&&u==="dd"&&this._minWeekdaysParse[p].test(s))return p;if(!m&&this._weekdaysParse[p].test(s))return p}}function qk(s){if(!this.isValid())return s!=null?this:NaN;var u=this._isUTC?this._d.getUTCDay():this._d.getDay();return s!=null?(s=zk(s,this.localeData()),this.add(s-u,"d")):u}function Zk(s){if(!this.isValid())return s!=null?this:NaN;var u=(this.day()+7-this.localeData()._week.dow)%7;return s==null?u:this.add(s-u,"d")}function Jk(s){if(!this.isValid())return s!=null?this:NaN;if(s!=null){var u=Hk(s,this.localeData());return this.day(this.day()%7?u:u-7)}else return this.day()||7}function eC(s){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||cf.call(this),s?this._weekdaysStrictRegex:this._weekdaysRegex):(c(this,"_weekdaysRegex")||(this._weekdaysRegex=Vk),this._weekdaysStrictRegex&&s?this._weekdaysStrictRegex:this._weekdaysRegex)}function tC(s){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||cf.call(this),s?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(c(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Wk),this._weekdaysShortStrictRegex&&s?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function rC(s){return this._weekdaysParseExact?(c(this,"_weekdaysRegex")||cf.call(this),s?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(c(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Uk),this._weekdaysMinStrictRegex&&s?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function cf(){function s(Kt,Rn){return Rn.length-Kt.length}var u=[],m=[],p=[],_=[],j,A,oe,ve,ze;for(j=0;j<7;j++)A=k([2e3,1]).day(j),oe=pt(this.weekdaysMin(A,"")),ve=pt(this.weekdaysShort(A,"")),ze=pt(this.weekdays(A,"")),u.push(oe),m.push(ve),p.push(ze),_.push(oe),_.push(ve),_.push(ze);u.sort(s),m.sort(s),p.sort(s),_.sort(s),this._weekdaysRegex=new RegExp("^("+_.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+p.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+m.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+u.join("|")+")","i")}function uf(){return this.hours()%12||12}function nC(){return this.hours()||24}X("H",["HH",2],0,"hour"),X("h",["hh",2],0,uf),X("k",["kk",2],0,nC),X("hmm",0,0,function(){return""+uf.apply(this)+Q(this.minutes(),2)}),X("hmmss",0,0,function(){return""+uf.apply(this)+Q(this.minutes(),2)+Q(this.seconds(),2)}),X("Hmm",0,0,function(){return""+this.hours()+Q(this.minutes(),2)}),X("Hmmss",0,0,function(){return""+this.hours()+Q(this.minutes(),2)+Q(this.seconds(),2)});function ev(s,u){X(s,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),u)})}ev("a",!0),ev("A",!1),Dt("hour","h"),mt("hour",13);function tv(s,u){return u._meridiemParse}K("a",tv),K("A",tv),K("H",ae),K("h",ae),K("k",ae),K("HH",ae,ie),K("hh",ae,ie),K("kk",ae,ie),K("hmm",_t),K("hmmss",ct),K("Hmm",_t),K("Hmmss",ct),me(["H","HH"],xt),me(["k","kk"],function(s,u,m){var p=ge(s);u[xt]=p===24?0:p}),me(["a","A"],function(s,u,m){m._isPm=m._locale.isPM(s),m._meridiem=s}),me(["h","hh"],function(s,u,m){u[xt]=ge(s),E(m).bigHour=!0}),me("hmm",function(s,u,m){var p=s.length-2;u[xt]=ge(s.substr(0,p)),u[zr]=ge(s.substr(p)),E(m).bigHour=!0}),me("hmmss",function(s,u,m){var p=s.length-4,_=s.length-2;u[xt]=ge(s.substr(0,p)),u[zr]=ge(s.substr(p,2)),u[Dn]=ge(s.substr(_)),E(m).bigHour=!0}),me("Hmm",function(s,u,m){var p=s.length-2;u[xt]=ge(s.substr(0,p)),u[zr]=ge(s.substr(p))}),me("Hmmss",function(s,u,m){var p=s.length-4,_=s.length-2;u[xt]=ge(s.substr(0,p)),u[zr]=ge(s.substr(p,2)),u[Dn]=ge(s.substr(_))});function iC(s){return(s+"").toLowerCase().charAt(0)==="p"}var oC=/[ap]\.?m?\.?/i,sC=L("Hours",!0);function aC(s,u,m){return s>11?m?"pm":"PM":m?"am":"AM"}var rv={calendar:W,longDateFormat:hr,invalidDate:Cr,ordinal:Us,dayOfMonthOrdinalParse:Bs,relativeTime:ii,months:xk,monthsShort:Bg,week:Lk,weekdays:Yk,weekdaysMin:Fk,weekdaysShort:Jg,meridiemParse:oC},Qe={},Js={},ea;function lC(s,u){var m,p=Math.min(s.length,u.length);for(m=0;m0;){if(_=Al(j.slice(0,m).join("-")),_)return _;if(p&&p.length>=m&&lC(j,p)>=m-1)break;m--}u++}return ea}function uC(s){return s.match("^[^/\\\\]*$")!=null}function Al(s){var u=null,m;if(Qe[s]===void 0&&e&&e.exports&&uC(s))try{u=ea._abbr,m=Bb,m("./locale/"+s),li(u)}catch{Qe[s]=null}return Qe[s]}function li(s,u){var m;return s&&(h(u)?m=Tn(s):m=df(s,u),m?ea=m:typeof console<"u"&&console.warn&&console.warn("Locale "+s+" not found. Did you forget to load it?")),ea._abbr}function df(s,u){if(u!==null){var m,p=rv;if(u.abbr=s,Qe[s]!=null)te("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=Qe[s]._config;else if(u.parentLocale!=null)if(Qe[u.parentLocale]!=null)p=Qe[u.parentLocale]._config;else if(m=Al(u.parentLocale),m!=null)p=m._config;else return Js[u.parentLocale]||(Js[u.parentLocale]=[]),Js[u.parentLocale].push({name:s,config:u}),null;return Qe[s]=new $e(Te(p,u)),Js[s]&&Js[s].forEach(function(_){df(_.name,_.config)}),li(s),Qe[s]}else return delete Qe[s],null}function dC(s,u){if(u!=null){var m,p,_=rv;Qe[s]!=null&&Qe[s].parentLocale!=null?Qe[s].set(Te(Qe[s]._config,u)):(p=Al(s),p!=null&&(_=p._config),u=Te(_,u),p==null&&(u.abbr=s),m=new $e(u),m.parentLocale=Qe[s],Qe[s]=m),li(s)}else Qe[s]!=null&&(Qe[s].parentLocale!=null?(Qe[s]=Qe[s].parentLocale,s===li()&&li(s)):Qe[s]!=null&&delete Qe[s]);return Qe[s]}function Tn(s){var u;if(s&&s._locale&&s._locale._abbr&&(s=s._locale._abbr),!s)return ea;if(!o(s)){if(u=Al(s),u)return u;s=[s]}return cC(s)}function fC(){return ht(Qe)}function ff(s){var u,m=s._a;return m&&E(s).overflow===-2&&(u=m[Cn]<0||m[Cn]>11?Cn:m[on]<1||m[on]>Ml(m[Tt],m[Cn])?on:m[xt]<0||m[xt]>24||m[xt]===24&&(m[zr]!==0||m[Dn]!==0||m[Ui]!==0)?xt:m[zr]<0||m[zr]>59?zr:m[Dn]<0||m[Dn]>59?Dn:m[Ui]<0||m[Ui]>999?Ui:-1,E(s)._overflowDayOfYear&&(uon)&&(u=on),E(s)._overflowWeeks&&u===-1&&(u=yk),E(s)._overflowWeekday&&u===-1&&(u=wk),E(s).overflow=u),s}var hC=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,mC=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,pC=/Z|[+-]\d\d(?::?\d\d)?/,Il=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],hf=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],gC=/^\/?Date\((-?\d+)/i,vC=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,yC={UT:0,GMT:0,EDT:-4*60,EST:-5*60,CDT:-5*60,CST:-6*60,MDT:-6*60,MST:-7*60,PDT:-7*60,PST:-8*60};function iv(s){var u,m,p=s._i,_=hC.exec(p)||mC.exec(p),j,A,oe,ve,ze=Il.length,Kt=hf.length;if(_){for(E(s).iso=!0,u=0,m=ze;uQs(A)||s._dayOfYear===0)&&(E(s)._overflowDayOfYear=!0),m=qs(A,0,s._dayOfYear),s._a[Cn]=m.getUTCMonth(),s._a[on]=m.getUTCDate()),u=0;u<3&&s._a[u]==null;++u)s._a[u]=p[u]=_[u];for(;u<7;u++)s._a[u]=p[u]=s._a[u]==null?u===2?1:0:s._a[u];s._a[xt]===24&&s._a[zr]===0&&s._a[Dn]===0&&s._a[Ui]===0&&(s._nextDay=!0,s._a[xt]=0),s._d=(s._useUTC?qs:Rk).apply(null,p),j=s._useUTC?s._d.getUTCDay():s._d.getDay(),s._tzm!=null&&s._d.setUTCMinutes(s._d.getUTCMinutes()-s._tzm),s._nextDay&&(s._a[xt]=24),s._w&&typeof s._w.d<"u"&&s._w.d!==j&&(E(s).weekdayMismatch=!0)}}function DC(s){var u,m,p,_,j,A,oe,ve,ze;u=s._w,u.GG!=null||u.W!=null||u.E!=null?(j=1,A=4,m=Do(u.GG,s._a[Tt],Zs(We(),1,4).year),p=Do(u.W,1),_=Do(u.E,1),(_<1||_>7)&&(ve=!0)):(j=s._locale._week.dow,A=s._locale._week.doy,ze=Zs(We(),j,A),m=Do(u.gg,s._a[Tt],ze.year),p=Do(u.w,ze.week),u.d!=null?(_=u.d,(_<0||_>6)&&(ve=!0)):u.e!=null?(_=u.e+j,(u.e<0||u.e>6)&&(ve=!0)):_=j),p<1||p>En(m,j,A)?E(s)._overflowWeeks=!0:ve!=null?E(s)._overflowWeekday=!0:(oe=Zg(m,p,_,j,A),s._a[Tt]=oe.year,s._dayOfYear=oe.dayOfYear)}n.ISO_8601=function(){},n.RFC_2822=function(){};function pf(s){if(s._f===n.ISO_8601){iv(s);return}if(s._f===n.RFC_2822){ov(s);return}s._a=[],E(s).empty=!0;var u=""+s._i,m,p,_,j,A,oe=u.length,ve=0,ze,Kt;for(_=$r(s._f,s._locale).match(ue)||[],Kt=_.length,m=0;m0&&E(s).unusedInput.push(A),u=u.slice(u.indexOf(p)+p.length),ve+=p.length),Fe[j]?(p?E(s).empty=!1:E(s).unusedTokens.push(j),Rl(j,p,s)):s._strict&&!p&&E(s).unusedTokens.push(j);E(s).charsLeftOver=oe-ve,u.length>0&&E(s).unusedInput.push(u),s._a[xt]<=12&&E(s).bigHour===!0&&s._a[xt]>0&&(E(s).bigHour=void 0),E(s).parsedDateParts=s._a.slice(0),E(s).meridiem=s._meridiem,s._a[xt]=EC(s._locale,s._a[xt],s._meridiem),ze=E(s).era,ze!==null&&(s._a[Tt]=s._locale.erasConvertYear(ze,s._a[Tt])),mf(s),ff(s)}function EC(s,u,m){var p;return m==null?u:s.meridiemHour!=null?s.meridiemHour(u,m):(s.isPM!=null&&(p=s.isPM(m),p&&u<12&&(u+=12),!p&&u===12&&(u=0)),u)}function TC(s){var u,m,p,_,j,A,oe=!1,ve=s._f.length;if(ve===0){E(s).invalidFormat=!0,s._d=new Date(NaN);return}for(_=0;_this?this:s:S()});function lv(s,u){var m,p;if(u.length===1&&o(u[0])&&(u=u[0]),!u.length)return We();for(m=u[0],p=1;pthis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function KC(){if(!h(this._isDSTShifted))return this._isDSTShifted;var s={},u;return P(s,this),s=sv(s),s._a?(u=s._isUTC?k(s._a):We(s._a),this._isDSTShifted=this.isValid()&&HC(s._a,u.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function QC(){return this.isValid()?!this._isUTC:!1}function qC(){return this.isValid()?this._isUTC:!1}function uv(){return this.isValid()?this._isUTC&&this._offset===0:!1}var ZC=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,JC=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Hr(s,u){var m=s,p=null,_,j,A;return $l(s)?m={ms:s._milliseconds,d:s._days,M:s._months}:g(s)||!isNaN(+s)?(m={},u?m[u]=+s:m.milliseconds=+s):(p=ZC.exec(s))?(_=p[1]==="-"?-1:1,m={y:0,d:ge(p[on])*_,h:ge(p[xt])*_,m:ge(p[zr])*_,s:ge(p[Dn])*_,ms:ge(gf(p[Ui]*1e3))*_}):(p=JC.exec(s))?(_=p[1]==="-"?-1:1,m={y:Bi(p[2],_),M:Bi(p[3],_),w:Bi(p[4],_),d:Bi(p[5],_),h:Bi(p[6],_),m:Bi(p[7],_),s:Bi(p[8],_)}):m==null?m={}:typeof m=="object"&&("from"in m||"to"in m)&&(A=eD(We(m.from),We(m.to)),m={},m.ms=A.milliseconds,m.M=A.months),j=new Nl(m),$l(s)&&c(s,"_locale")&&(j._locale=s._locale),$l(s)&&c(s,"_isValid")&&(j._isValid=s._isValid),j}Hr.fn=Nl.prototype,Hr.invalid=zC;function Bi(s,u){var m=s&&parseFloat(s.replace(",","."));return(isNaN(m)?0:m)*u}function dv(s,u){var m={};return m.months=u.month()-s.month()+(u.year()-s.year())*12,s.clone().add(m.months,"M").isAfter(u)&&--m.months,m.milliseconds=+u-+s.clone().add(m.months,"M"),m}function eD(s,u){var m;return s.isValid()&&u.isValid()?(u=yf(u,s),s.isBefore(u)?m=dv(s,u):(m=dv(u,s),m.milliseconds=-m.milliseconds,m.months=-m.months),m):{milliseconds:0,months:0}}function fv(s,u){return function(m,p){var _,j;return p!==null&&!isNaN(+p)&&(te(u,"moment()."+u+"(period, number) is deprecated. Please use moment()."+u+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),j=m,m=p,p=j),_=Hr(m,p),hv(this,_,s),this}}function hv(s,u,m,p){var _=u._milliseconds,j=gf(u._days),A=gf(u._months);s.isValid()&&(p=p??!0,A&&Xg(s,I(s,"Month")+A*m),j&&H(s,"Date",I(s,"Date")+j*m),_&&s._d.setTime(s._d.valueOf()+_*m),p&&n.updateOffset(s,j||A))}var tD=fv(1,"add"),rD=fv(-1,"subtract");function mv(s){return typeof s=="string"||s instanceof String}function nD(s){return R(s)||v(s)||mv(s)||g(s)||oD(s)||iD(s)||s===null||s===void 0}function iD(s){var u=a(s)&&!d(s),m=!1,p=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],_,j,A=p.length;for(_=0;_m.valueOf():m.valueOf()9999?Nr(m,u?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):G(Date.prototype.toISOString)?u?this.toDate().toISOString():new Date(this.valueOf()+this.utcOffset()*60*1e3).toISOString().replace("Z",Nr(m,"Z")):Nr(m,u?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function wD(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var s="moment",u="",m,p,_,j;return this.isLocal()||(s=this.utcOffset()===0?"moment.utc":"moment.parseZone",u="Z"),m="["+s+'("]',p=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",_="-MM-DD[T]HH:mm:ss.SSS",j=u+'[")]',this.format(m+p+_+j)}function _D(s){s||(s=this.isUtc()?n.defaultFormatUtc:n.defaultFormat);var u=Nr(this,s);return this.localeData().postformat(u)}function xD(s,u){return this.isValid()&&(R(s)&&s.isValid()||We(s).isValid())?Hr({to:this,from:s}).locale(this.locale()).humanize(!u):this.localeData().invalidDate()}function SD(s){return this.from(We(),s)}function bD(s,u){return this.isValid()&&(R(s)&&s.isValid()||We(s).isValid())?Hr({from:this,to:s}).locale(this.locale()).humanize(!u):this.localeData().invalidDate()}function kD(s){return this.to(We(),s)}function pv(s){var u;return s===void 0?this._locale._abbr:(u=Tn(s),u!=null&&(this._locale=u),this)}var gv=z("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(s){return s===void 0?this.localeData():this.locale(s)});function vv(){return this._locale}var Hl=1e3,Eo=60*Hl,Yl=60*Eo,yv=(365*400+97)*24*Yl;function To(s,u){return(s%u+u)%u}function wv(s,u,m){return s<100&&s>=0?new Date(s+400,u,m)-yv:new Date(s,u,m).valueOf()}function _v(s,u,m){return s<100&&s>=0?Date.UTC(s+400,u,m)-yv:Date.UTC(s,u,m)}function CD(s){var u,m;if(s=Et(s),s===void 0||s==="millisecond"||!this.isValid())return this;switch(m=this._isUTC?_v:wv,s){case"year":u=m(this.year(),0,1);break;case"quarter":u=m(this.year(),this.month()-this.month()%3,1);break;case"month":u=m(this.year(),this.month(),1);break;case"week":u=m(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":u=m(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":u=m(this.year(),this.month(),this.date());break;case"hour":u=this._d.valueOf(),u-=To(u+(this._isUTC?0:this.utcOffset()*Eo),Yl);break;case"minute":u=this._d.valueOf(),u-=To(u,Eo);break;case"second":u=this._d.valueOf(),u-=To(u,Hl);break}return this._d.setTime(u),n.updateOffset(this,!0),this}function DD(s){var u,m;if(s=Et(s),s===void 0||s==="millisecond"||!this.isValid())return this;switch(m=this._isUTC?_v:wv,s){case"year":u=m(this.year()+1,0,1)-1;break;case"quarter":u=m(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":u=m(this.year(),this.month()+1,1)-1;break;case"week":u=m(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":u=m(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":u=m(this.year(),this.month(),this.date()+1)-1;break;case"hour":u=this._d.valueOf(),u+=Yl-To(u+(this._isUTC?0:this.utcOffset()*Eo),Yl)-1;break;case"minute":u=this._d.valueOf(),u+=Eo-To(u,Eo)-1;break;case"second":u=this._d.valueOf(),u+=Hl-To(u,Hl)-1;break}return this._d.setTime(u),n.updateOffset(this,!0),this}function ED(){return this._d.valueOf()-(this._offset||0)*6e4}function TD(){return Math.floor(this.valueOf()/1e3)}function jD(){return new Date(this.valueOf())}function OD(){var s=this;return[s.year(),s.month(),s.date(),s.hour(),s.minute(),s.second(),s.millisecond()]}function PD(){var s=this;return{years:s.year(),months:s.month(),date:s.date(),hours:s.hours(),minutes:s.minutes(),seconds:s.seconds(),milliseconds:s.milliseconds()}}function RD(){return this.isValid()?this.toISOString():null}function MD(){return w(this)}function LD(){return b({},E(this))}function AD(){return E(this).overflow}function ID(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}X("N",0,0,"eraAbbr"),X("NN",0,0,"eraAbbr"),X("NNN",0,0,"eraAbbr"),X("NNNN",0,0,"eraName"),X("NNNNN",0,0,"eraNarrow"),X("y",["y",1],"yo","eraYear"),X("y",["yy",2],0,"eraYear"),X("y",["yyy",3],0,"eraYear"),X("y",["yyyy",4],0,"eraYear"),K("N",_f),K("NN",_f),K("NNN",_f),K("NNNN",GD),K("NNNNN",XD),me(["N","NN","NNN","NNNN","NNNNN"],function(s,u,m,p){var _=m._locale.erasParse(s,p,m._strict);_?E(m).era=_:E(m).invalidEra=s}),K("y",rn),K("yy",rn),K("yyy",rn),K("yyyy",rn),K("yo",KD),me(["y","yy","yyy","yyyy"],Tt),me(["yo"],function(s,u,m,p){var _;m._locale._eraYearOrdinalRegex&&(_=s.match(m._locale._eraYearOrdinalRegex)),m._locale.eraYearOrdinalParse?u[Tt]=m._locale.eraYearOrdinalParse(s,_):u[Tt]=parseInt(s,10)});function ND(s,u){var m,p,_,j=this._eras||Tn("en")._eras;for(m=0,p=j.length;m=0)return j[p]}function zD(s,u){var m=s.since<=s.until?1:-1;return u===void 0?n(s.since).year():n(s.since).year()+(u-s.offset)*m}function HD(){var s,u,m,p=this.localeData().eras();for(s=0,u=p.length;sj&&(u=j),rE.call(this,s,u,m,p,_))}function rE(s,u,m,p,_){var j=Zg(s,u,m,p,_),A=qs(j.year,0,j.dayOfYear);return this.year(A.getUTCFullYear()),this.month(A.getUTCMonth()),this.date(A.getUTCDate()),this}X("Q",0,"Qo","quarter"),Dt("quarter","Q"),mt("quarter",7),K("Q",fe),me("Q",function(s,u){u[Cn]=(ge(s)-1)*3});function nE(s){return s==null?Math.ceil((this.month()+1)/3):this.month((s-1)*3+this.month()%3)}X("D",["DD",2],"Do","date"),Dt("date","D"),mt("date",9),K("D",ae),K("DD",ae,ie),K("Do",function(s,u){return s?u._dayOfMonthOrdinalParse||u._ordinalParse:u._dayOfMonthOrdinalParseLenient}),me(["D","DD"],on),me("Do",function(s,u){u[on]=ge(s.match(ae)[0])});var Sv=L("Date",!0);X("DDD",["DDDD",3],"DDDo","dayOfYear"),Dt("dayOfYear","DDD"),mt("dayOfYear",4),K("DDD",tt),K("DDDD",ce),me(["DDD","DDDD"],function(s,u,m){m._dayOfYear=ge(s)});function iE(s){var u=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return s==null?u:this.add(s-u,"d")}X("m",["mm",2],0,"minute"),Dt("minute","m"),mt("minute",14),K("m",ae),K("mm",ae,ie),me(["m","mm"],zr);var oE=L("Minutes",!1);X("s",["ss",2],0,"second"),Dt("second","s"),mt("second",15),K("s",ae),K("ss",ae,ie),me(["s","ss"],Dn);var sE=L("Seconds",!1);X("S",0,0,function(){return~~(this.millisecond()/100)}),X(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),X(0,["SSS",3],0,"millisecond"),X(0,["SSSS",4],0,function(){return this.millisecond()*10}),X(0,["SSSSS",5],0,function(){return this.millisecond()*100}),X(0,["SSSSSS",6],0,function(){return this.millisecond()*1e3}),X(0,["SSSSSSS",7],0,function(){return this.millisecond()*1e4}),X(0,["SSSSSSSS",8],0,function(){return this.millisecond()*1e5}),X(0,["SSSSSSSSS",9],0,function(){return this.millisecond()*1e6}),Dt("millisecond","ms"),mt("millisecond",16),K("S",tt,fe),K("SS",tt,ie),K("SSS",tt,ce);var ci,bv;for(ci="SSSS";ci.length<=9;ci+="S")K(ci,rn);function aE(s,u){u[Ui]=ge(("0."+s)*1e3)}for(ci="S";ci.length<=9;ci+="S")me(ci,aE);bv=L("Milliseconds",!1),X("z",0,0,"zoneAbbr"),X("zz",0,0,"zoneName");function lE(){return this._isUTC?"UTC":""}function cE(){return this._isUTC?"Coordinated Universal Time":""}var F=M.prototype;F.add=tD,F.calendar=lD,F.clone=cD,F.diff=gD,F.endOf=DD,F.format=_D,F.from=xD,F.fromNow=SD,F.to=bD,F.toNow=kD,F.get=J,F.invalidAt=AD,F.isAfter=uD,F.isBefore=dD,F.isBetween=fD,F.isSame=hD,F.isSameOrAfter=mD,F.isSameOrBefore=pD,F.isValid=MD,F.lang=gv,F.locale=pv,F.localeData=vv,F.max=MC,F.min=RC,F.parsingFlags=LD,F.set=re,F.startOf=CD,F.subtract=rD,F.toArray=OD,F.toObject=PD,F.toDate=jD,F.toISOString=yD,F.inspect=wD,typeof Symbol<"u"&&Symbol.for!=null&&(F[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),F.toJSON=RD,F.toString=vD,F.unix=TD,F.valueOf=ED,F.creationData=ID,F.eraName=HD,F.eraNarrow=YD,F.eraAbbr=FD,F.eraYear=VD,F.year=qg,F.isLeapYear=Pk,F.weekYear=QD,F.isoWeekYear=qD,F.quarter=F.quarters=nE,F.month=Kg,F.daysInMonth=Tk,F.week=F.weeks=Nk,F.isoWeek=F.isoWeeks=$k,F.weeksInYear=eE,F.weeksInWeekYear=tE,F.isoWeeksInYear=ZD,F.isoWeeksInISOWeekYear=JD,F.date=Sv,F.day=F.days=qk,F.weekday=Zk,F.isoWeekday=Jk,F.dayOfYear=iE,F.hour=F.hours=sC,F.minute=F.minutes=oE,F.second=F.seconds=sE,F.millisecond=F.milliseconds=bv,F.utcOffset=FC,F.utc=WC,F.local=UC,F.parseZone=BC,F.hasAlignedHourOffset=GC,F.isDST=XC,F.isLocal=QC,F.isUtcOffset=qC,F.isUtc=uv,F.isUTC=uv,F.zoneAbbr=lE,F.zoneName=cE,F.dates=z("dates accessor is deprecated. Use date instead.",Sv),F.months=z("months accessor is deprecated. Use month instead",Kg),F.years=z("years accessor is deprecated. Use year instead",qg),F.zone=z("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",VC),F.isDSTShifted=z("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",KC);function uE(s){return We(s*1e3)}function dE(){return We.apply(null,arguments).parseZone()}function kv(s){return s}var je=$e.prototype;je.calendar=le,je.longDateFormat=Vi,je.invalidDate=mr,je.ordinal=Gs,je.preparse=kv,je.postformat=kv,je.relativeTime=Ol,je.pastFuture=Pl,je.set=lt,je.eras=ND,je.erasParse=$D,je.erasConvertYear=zD,je.erasAbbrRegex=UD,je.erasNameRegex=WD,je.erasNarrowRegex=BD,je.months=kk,je.monthsShort=Ck,je.monthsParse=Ek,je.monthsRegex=Ok,je.monthsShortRegex=jk,je.week=Mk,je.firstDayOfYear=Ik,je.firstDayOfWeek=Ak,je.weekdays=Bk,je.weekdaysMin=Xk,je.weekdaysShort=Gk,je.weekdaysParse=Qk,je.weekdaysRegex=eC,je.weekdaysShortRegex=tC,je.weekdaysMinRegex=rC,je.isPM=iC,je.meridiem=aC;function Vl(s,u,m,p){var _=Tn(),j=k().set(p,u);return _[m](j,s)}function Cv(s,u,m){if(g(s)&&(u=s,s=void 0),s=s||"",u!=null)return Vl(s,u,m,"month");var p,_=[];for(p=0;p<12;p++)_[p]=Vl(s,p,m,"month");return _}function Sf(s,u,m,p){typeof s=="boolean"?(g(u)&&(m=u,u=void 0),u=u||""):(u=s,m=u,s=!1,g(u)&&(m=u,u=void 0),u=u||"");var _=Tn(),j=s?_._week.dow:0,A,oe=[];if(m!=null)return Vl(u,(m+j)%7,p,"day");for(A=0;A<7;A++)oe[A]=Vl(u,(A+j)%7,p,"day");return oe}function fE(s,u){return Cv(s,u,"months")}function hE(s,u){return Cv(s,u,"monthsShort")}function mE(s,u,m){return Sf(s,u,m,"weekdays")}function pE(s,u,m){return Sf(s,u,m,"weekdaysShort")}function gE(s,u,m){return Sf(s,u,m,"weekdaysMin")}li("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(s){var u=s%10,m=ge(s%100/10)===1?"th":u===1?"st":u===2?"nd":u===3?"rd":"th";return s+m}}),n.lang=z("moment.lang is deprecated. Use moment.locale instead.",li),n.langData=z("moment.langData is deprecated. Use moment.localeData instead.",Tn);var jn=Math.abs;function vE(){var s=this._data;return this._milliseconds=jn(this._milliseconds),this._days=jn(this._days),this._months=jn(this._months),s.milliseconds=jn(s.milliseconds),s.seconds=jn(s.seconds),s.minutes=jn(s.minutes),s.hours=jn(s.hours),s.months=jn(s.months),s.years=jn(s.years),this}function Dv(s,u,m,p){var _=Hr(u,m);return s._milliseconds+=p*_._milliseconds,s._days+=p*_._days,s._months+=p*_._months,s._bubble()}function yE(s,u){return Dv(this,s,u,1)}function wE(s,u){return Dv(this,s,u,-1)}function Ev(s){return s<0?Math.floor(s):Math.ceil(s)}function _E(){var s=this._milliseconds,u=this._days,m=this._months,p=this._data,_,j,A,oe,ve;return s>=0&&u>=0&&m>=0||s<=0&&u<=0&&m<=0||(s+=Ev(bf(m)+u)*864e5,u=0,m=0),p.milliseconds=s%1e3,_=Xt(s/1e3),p.seconds=_%60,j=Xt(_/60),p.minutes=j%60,A=Xt(j/60),p.hours=A%24,u+=Xt(A/24),ve=Xt(Tv(u)),m+=ve,u-=Ev(bf(ve)),oe=Xt(m/12),m%=12,p.days=u,p.months=m,p.years=oe,this}function Tv(s){return s*4800/146097}function bf(s){return s*146097/4800}function xE(s){if(!this.isValid())return NaN;var u,m,p=this._milliseconds;if(s=Et(s),s==="month"||s==="quarter"||s==="year")switch(u=this._days+p/864e5,m=this._months+Tv(u),s){case"month":return m;case"quarter":return m/3;case"year":return m/12}else switch(u=this._days+Math.round(bf(this._months)),s){case"week":return u/7+p/6048e5;case"day":return u+p/864e5;case"hour":return u*24+p/36e5;case"minute":return u*1440+p/6e4;case"second":return u*86400+p/1e3;case"millisecond":return Math.floor(u*864e5)+p;default:throw new Error("Unknown unit "+s)}}function SE(){return this.isValid()?this._milliseconds+this._days*864e5+this._months%12*2592e6+ge(this._months/12)*31536e6:NaN}function On(s){return function(){return this.as(s)}}var bE=On("ms"),kE=On("s"),CE=On("m"),DE=On("h"),EE=On("d"),TE=On("w"),jE=On("M"),OE=On("Q"),PE=On("y");function RE(){return Hr(this)}function ME(s){return s=Et(s),this.isValid()?this[s+"s"]():NaN}function Gi(s){return function(){return this.isValid()?this._data[s]:NaN}}var LE=Gi("milliseconds"),AE=Gi("seconds"),IE=Gi("minutes"),NE=Gi("hours"),$E=Gi("days"),zE=Gi("months"),HE=Gi("years");function YE(){return Xt(this.days()/7)}var Pn=Math.round,jo={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function FE(s,u,m,p,_){return _.relativeTime(u||1,!!m,s,p)}function VE(s,u,m,p){var _=Hr(s).abs(),j=Pn(_.as("s")),A=Pn(_.as("m")),oe=Pn(_.as("h")),ve=Pn(_.as("d")),ze=Pn(_.as("M")),Kt=Pn(_.as("w")),Rn=Pn(_.as("y")),ui=j<=m.ss&&["s",j]||j0,ui[4]=p,FE.apply(null,ui)}function WE(s){return s===void 0?Pn:typeof s=="function"?(Pn=s,!0):!1}function UE(s,u){return jo[s]===void 0?!1:u===void 0?jo[s]:(jo[s]=u,s==="s"&&(jo.ss=u-1),!0)}function BE(s,u){if(!this.isValid())return this.localeData().invalidDate();var m=!1,p=jo,_,j;return typeof s=="object"&&(u=s,s=!1),typeof s=="boolean"&&(m=s),typeof u=="object"&&(p=Object.assign({},jo,u),u.s!=null&&u.ss==null&&(p.ss=u.s-1)),_=this.localeData(),j=VE(this,!m,p,_),m&&(j=_.pastFuture(+this,j)),_.postformat(j)}var kf=Math.abs;function Oo(s){return(s>0)-(s<0)||+s}function Wl(){if(!this.isValid())return this.localeData().invalidDate();var s=kf(this._milliseconds)/1e3,u=kf(this._days),m=kf(this._months),p,_,j,A,oe=this.asSeconds(),ve,ze,Kt,Rn;return oe?(p=Xt(s/60),_=Xt(p/60),s%=60,p%=60,j=Xt(m/12),m%=12,A=s?s.toFixed(3).replace(/\.?0+$/,""):"",ve=oe<0?"-":"",ze=Oo(this._months)!==Oo(oe)?"-":"",Kt=Oo(this._days)!==Oo(oe)?"-":"",Rn=Oo(this._milliseconds)!==Oo(oe)?"-":"",ve+"P"+(j?ze+j+"Y":"")+(m?ze+m+"M":"")+(u?Kt+u+"D":"")+(_||p||s?"T":"")+(_?Rn+_+"H":"")+(p?Rn+p+"M":"")+(s?Rn+A+"S":"")):"P0D"}var Ce=Nl.prototype;Ce.isValid=$C,Ce.abs=vE,Ce.add=yE,Ce.subtract=wE,Ce.as=xE,Ce.asMilliseconds=bE,Ce.asSeconds=kE,Ce.asMinutes=CE,Ce.asHours=DE,Ce.asDays=EE,Ce.asWeeks=TE,Ce.asMonths=jE,Ce.asQuarters=OE,Ce.asYears=PE,Ce.valueOf=SE,Ce._bubble=_E,Ce.clone=RE,Ce.get=ME,Ce.milliseconds=LE,Ce.seconds=AE,Ce.minutes=IE,Ce.hours=NE,Ce.days=$E,Ce.weeks=YE,Ce.months=zE,Ce.years=HE,Ce.humanize=BE,Ce.toISOString=Wl,Ce.toString=Wl,Ce.toJSON=Wl,Ce.locale=pv,Ce.localeData=vv,Ce.toIsoString=z("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Wl),Ce.lang=gv,X("X",0,0,"unix"),X("x",0,0,"valueOf"),K("x",xn),K("X",Ks),me("X",function(s,u,m){m._d=new Date(parseFloat(s)*1e3)}),me("x",function(s,u,m){m._d=new Date(ge(s))});//! moment.js +return n.version="2.29.4",i(We),n.fn=F,n.min=LC,n.max=AC,n.now=IC,n.utc=k,n.unix=uE,n.months=fE,n.isDate=v,n.locale=li,n.invalid=S,n.duration=Hr,n.isMoment=R,n.weekdays=mE,n.parseZone=dE,n.localeData=Tn,n.isDuration=$l,n.monthsShort=hE,n.weekdaysMin=gE,n.defineLocale=df,n.updateLocale=dC,n.locales=fC,n.weekdaysShort=pE,n.normalizeUnits=Et,n.relativeTimeRounding=WE,n.relativeTimeThreshold=UE,n.calendarFormat=aD,n.prototype=F,n.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},n})}(DU)),zu}(function(e,t){(function(r,n){n(typeof Bb=="function"?EU():r.moment)})(Fo,function(r){//! moment.js locale configuration +var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(i,o){return i===12&&(i=0),o==="凌晨"||o==="早上"||o==="上午"?i:o==="下午"||o==="晚上"?i+12:i>=11?i:i+12},meridiem:function(i,o,a){var c=i*100+o;return c<600?"凌晨":c<900?"早上":c<1130?"上午":c<1230?"中午":c<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:function(i){return i.week()!==this.week()?"[下]dddLT":"[本]dddLT"},lastDay:"[昨天]LT",lastWeek:function(i){return this.week()!==i.week()?"[上]dddLT":"[本]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(i,o){switch(o){case"d":case"D":case"DDD":return i+"日";case"M":return i+"月";case"w":case"W":return i+"周";default:return i}},relativeTime:{future:"%s后",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",w:"1 周",ww:"%d 周",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}});return n})})();const Gb="/zh-cn/assets/wechat-qrcode-8dca7947.png",Xb="/zh-cn/assets/logo-image-91f154f1.svg",Kb="/zh-cn/assets/location-cf5a6f84.svg",Qb="/zh-cn/assets/clock-718648c0.svg",qb="/zh-cn/assets/calendar-cd5a76f0.svg";U.locale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY年MM月DD日",LLL:"YYYY年MM月DD日Ah点mm分",LLLL:"YYYY年MM月DD日ddddAh点mm分",l:"YYYY-M-D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return e===12&&(e=0),t==="凌晨"||t==="早上"||t==="上午"?e:t==="下午"||t==="晚上"?e+12:e>=11?e:e+12},meridiem:function(e,t){const r=e*100+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d秒",m:"1分钟",mm:"%d分钟",h:"1小时",hh:"%d小时",d:"1天",dd:"%d天",M:"1个月",MM:"%d个月",y:"1年",yy:"%d年"},week:{dow:1,doy:4}});const{Heading:TU,Paragraph:jU}=Me,{CNTitleMedium:Zb,CNTitleSmall:OU}=TU,{CNBodySmall:ko,CNMarkSmall:PU,CNBodyLarge:RU,CNMarkMedium:Jb}=jU,MU=f.div` background: #fafafa; `,LU=f.div` display: flex; @@ -2290,7 +2290,7 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ } `,hi=f.span` font-weight: 600; -`,YU=f(ko)` +`,HU=f(ko)` font-weight: 600; padding-bottom: 0.11rem; position: relative; @@ -2304,7 +2304,7 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ `,gw=f(ko)` font-weight: 600; /* padding-bottom: 0.04rem; */ -`,HU=f(Jb)` +`,YU=f(Jb)` font-weight: 600; font-size: 0.16rem; padding-bottom: 0.12rem; @@ -2403,7 +2403,7 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ &:checked { accent-color: ${e=>e.theme.secondary01}; } -`,oB=new Map([["fullTime","全职"],["internship","兼职"]]),ww=[{id:"Distributed storage software development senior engineer".split(" ").join("-").toLowerCase(),label:"分布式存储软件开发资深工程师",tag:["全职","急招"],workNature:"远程办公",workType:"fullTime",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与开源分布式存储项目DatenLord的开发和维护;","完善DatenLord的测试,构建新的DatenLord测试框架;","提高DatenLord分布式性能表现。 "]},{title:"【岗位要求】",body:["至少5年的分布式系统开发或研究经验,最好是分布式存储系统研发或研究经验;","具有HDFS 、Ceph、GlusterFS等分布式存储系统具有相关开发和使用经验;","熟悉Rust、C或C++语言;","具有开源项目的开发和维护经验。"]}]},{id:"Rust distributed storage development".split(" ").join("-").toLowerCase(),label:"Rust分布式存储开发",tag:["实习","即将招满"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与高性能分布式存储系统研发,涉及的开发内容包括但不限于:","分布式存储系统开发;","分布式数据一致性协议研究和开发;","分布式缓存、数据管理服务;","使用 Rust 语言进行内核驱动开发。"]},{title:"【岗位要求】",body:["熟练使用Rust语言,熟悉多线程、高并发编程;","熟悉Linux操作系统存储管理相关功能;","具有很强的学习能力,自我驱动以及团队合作意识;","实习时间6个月以上,每周4~5天。"]},{title:"【加分项】",body:["熟悉Rust异步编程、有tokio或async-std使用经验优先;","熟悉分布式一致性协议Paxos或Raft、分布式KV存储etcd、有K8S的CSI接口编程经验优先;","有过开源项目/开源贡献经验者优先。"]}]},{id:"FPGA development".split(" ").join("-").toLowerCase(),label:"FPGA开发",tag:["实习"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["负责基于FPGA实现网络IO加速,以及加密、压缩、编码等算法加速的设计与RTL实现;","实现常用外设接口IP的RTL设计、集成和验证;","配合上层软件实现软硬件联调。"]},{title:"【岗位要求】",body:["熟悉基于FPGA的设计流程,熟悉Xilinx的FPGA芯片架构,熟练掌握Xilinx的FPGA开发工具;","熟练掌握Verilog、SystemVerilog以及SystemVerilog Assertion的使用;","熟练掌握TCL、Python脚本语言;","具有很强的学习能力,自我驱动以及团队合作意识;","实习时间6个月以上,每周4~5天。"]},{title:"【加分项】",body:["熟悉Bluespec、SpinalHDL、Chisel、Clash等至少一种新一代HDL语言;"," 熟悉CXL、PCIe、AXI、ACE、CHI等相关总线接口开发优先;","熟悉TCP/IP、RDMA、NVMe协议,有加密、压缩、编码开发经验优先。"]}]},{id:"The joint hardware and software research and development internship".split(" ").join("-").toLowerCase(),label:"软硬件联合研发实习生",tag:["实习"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与高性能存储SoC芯片的软硬件开发:","负责网络IO加速的RTL实现;","负责加密、压缩、编码等算法加速的设计与RTL实现;","负责SoC芯片的Linux驱动开发;","负责实现软硬件联合调试与自动化测试。"]},{title:"【岗位要求】",body:["熟悉IC设计流程,熟悉常用的仿真、综合等EDA工具;","熟悉Xilinx的FPGA设计流程,熟练掌握Xilinx的FPGA开发工具;","熟悉Bluespec、SpinalHDL、Chisel或Clash等新一代HDL语言;","熟悉Rust for Linux开发内核模块、驱动;","熟悉基于QEMU的软硬件联合调试工具链;","具有很强的学习能力,自我驱动以及团队合作意识。"]},{title:"【加分项】",body:["有网络或存储硬件系统开发经验优先;","熟悉TCP/IP或InfiniBand/RDMA网络协议栈优先;","熟悉CXL、PCIe、AXI、ACE、CHI、NVMe等协议接口开发优先;","有DSP领域相关经验,熟悉LDPC、喷泉码、椭圆曲线加密算法和零知识证明算法优先;","有Linux内核网络、文件、存储相关开发经验优先;","能长期实习(1年以上)优先。"]}]}],sB=()=>{const e=wt(),[t,r]=N.useState(ww),[n,i]=N.useState({fullTime:!0,internship:!0});return N.useEffect(()=>{r(ww.filter(o=>n[o.workType]===!0))},[n]),N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsx(MU,{children:l.jsxs(LU,{children:[l.jsx(AU,{children:l.jsxs($U,{children:[l.jsx(UU,{children:"筛选"}),l.jsx(BU,{children:"工作类型"}),l.jsxs(vw,{as:"div",children:[l.jsx(yw,{type:"checkbox",id:"full-time",checked:n.fullTime,onChange:()=>{const o={...n};o.fullTime=!o.fullTime,i(o)}}),l.jsx("label",{htmlFor:"full-time",children:"全职"})]}),l.jsxs(vw,{as:"div",children:[l.jsx(yw,{type:"checkbox",id:"internship",checked:n.internship,onChange:()=>{const o={...n};o.internship=!o.internship,i(o)}}),l.jsx("label",{htmlFor:"internship",children:"兼职"})]})]})}),l.jsx(IU,{children:l.jsx(GU,{children:t.map(o=>{const{id:a,label:c,tag:d,workNature:h,workType:g,releaseTime:v,content:x}=o;return l.jsxs(XU,{onClick:()=>{e(a.split(" ").join("-"))},children:[l.jsx(KU,{src:Xb}),l.jsxs(QU,{children:[l.jsx(qU,{children:d.join(", ")}),l.jsx(iB,{children:l.jsx(ZU,{children:c})}),l.jsxs(JU,{children:[l.jsx(Ih,{icon:Kb,children:h}),l.jsx(Ah,{children:"·"}),l.jsx(Ih,{icon:Qb,children:oB.get(g)}),l.jsx(Ah,{children:"·"}),l.jsx(Ah,{children:"·"}),l.jsx(Ih,{icon:qb,children:U(v,"YYYY-MM-DD").fromNow()})]}),x.map(({title:b,body:k})=>l.jsxs(eB,{children:[l.jsx(nB,{as:"p",children:b}),l.jsx(tB,{children:k.map(C=>l.jsx(rB,{as:"li",children:C},C))})]},b))]})]},a)})})}),l.jsxs(NU,{children:[l.jsxs(ek,{children:[l.jsx(HU,{children:"面试流程"}),l.jsx(pw,{children:"实习岗位:"}),l.jsxs(fi,{children:[l.jsx(hi,{children:"项目笔试"}),"- 两天"]}),l.jsxs(fi,{children:[l.jsx(hi,{children:"性能优化"})," - 不超过一周"]}),l.jsx(fi,{children:l.jsx(hi,{children:"交叉面试"})}),l.jsxs(fi,{children:[l.jsx(hi,{children:"思路 review"})," - 交流指导"]}),l.jsx("div",{style:{paddingBlock:"0.06rem"}}),l.jsx(pw,{children:"校招 / 社招岗位:"}),l.jsxs(fi,{children:[l.jsx(hi,{children:"项目笔试"})," - 两天"]}),l.jsxs(fi,{children:[l.jsx(hi,{children:"思路 review"})," - 交流指导"]}),l.jsxs(fi,{children:[l.jsx(hi,{children:"性能优化"})," - 不超过一周"]}),l.jsx(fi,{children:l.jsx(hi,{children:"交叉面试"})})]}),l.jsxs(zU,{children:[l.jsx(YU,{children:"投递简历"}),l.jsx(gw,{children:"- 投递至邮箱:"}),l.jsx(FU,{style:{paddingTop:"0.04rem"},children:l.jsx(VU,{children:"info@datenlord.com"})}),l.jsx("div",{style:{height:"0.24rem"}}),l.jsx(gw,{children:"- 添加达坦科技小助手微信:"}),l.jsx(WU,{src:Gb})]})]})]})})};U.updateLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY年MM月DD日",LLL:"YYYY年MM月DD日Ah点mm分",LLLL:"YYYY年MM月DD日ddddAh点mm分",l:"YYYY-M-D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return e===12&&(e=0),t==="凌晨"||t==="早上"||t==="上午"?e:t==="下午"||t==="晚上"?e+12:e>=11?e:e+12},meridiem:function(e,t){const r=e*100+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d秒",m:"1分钟",mm:"%d分钟",h:"1小时",hh:"%d小时",d:"1天",dd:"%d天",M:"1个月",MM:"%d个月",y:"1年",yy:"%d年"},week:{dow:1,doy:4}});const{Heading:aB,Paragraph:lB}=Me,{CNTitleSmall:cB,CNHead5S:uB,CNTitleLarge:dB}=aB,{CNBodySmall:Vs,CNMarkSmall:fB,CNBodyLarge:hB,CNMarkMedium:tk,CNBodyMedium:rk}=lB,mB=f.div` +`,oB=new Map([["fullTime","全职"],["internship","兼职"]]),ww=[{id:"Distributed storage software development senior engineer".split(" ").join("-").toLowerCase(),label:"分布式存储软件开发资深工程师",tag:["全职","急招"],workNature:"远程办公",workType:"fullTime",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与开源分布式存储项目DatenLord的开发和维护;","完善DatenLord的测试,构建新的DatenLord测试框架;","提高DatenLord分布式性能表现。 "]},{title:"【岗位要求】",body:["至少5年的分布式系统开发或研究经验,最好是分布式存储系统研发或研究经验;","具有HDFS 、Ceph、GlusterFS等分布式存储系统具有相关开发和使用经验;","熟悉Rust、C或C++语言;","具有开源项目的开发和维护经验。"]}]},{id:"Rust distributed storage development".split(" ").join("-").toLowerCase(),label:"Rust分布式存储开发",tag:["实习","即将招满"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与高性能分布式存储系统研发,涉及的开发内容包括但不限于:","分布式存储系统开发;","分布式数据一致性协议研究和开发;","分布式缓存、数据管理服务;","使用 Rust 语言进行内核驱动开发。"]},{title:"【岗位要求】",body:["熟练使用Rust语言,熟悉多线程、高并发编程;","熟悉Linux操作系统存储管理相关功能;","具有很强的学习能力,自我驱动以及团队合作意识;","实习时间6个月以上,每周4~5天。"]},{title:"【加分项】",body:["熟悉Rust异步编程、有tokio或async-std使用经验优先;","熟悉分布式一致性协议Paxos或Raft、分布式KV存储etcd、有K8S的CSI接口编程经验优先;","有过开源项目/开源贡献经验者优先。"]}]},{id:"FPGA development".split(" ").join("-").toLowerCase(),label:"FPGA开发",tag:["实习"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["负责基于FPGA实现网络IO加速,以及加密、压缩、编码等算法加速的设计与RTL实现;","实现常用外设接口IP的RTL设计、集成和验证;","配合上层软件实现软硬件联调。"]},{title:"【岗位要求】",body:["熟悉基于FPGA的设计流程,熟悉Xilinx的FPGA芯片架构,熟练掌握Xilinx的FPGA开发工具;","熟练掌握Verilog、SystemVerilog以及SystemVerilog Assertion的使用;","熟练掌握TCL、Python脚本语言;","具有很强的学习能力,自我驱动以及团队合作意识;","实习时间6个月以上,每周4~5天。"]},{title:"【加分项】",body:["熟悉Bluespec、SpinalHDL、Chisel、Clash等至少一种新一代HDL语言;"," 熟悉CXL、PCIe、AXI、ACE、CHI等相关总线接口开发优先;","熟悉TCP/IP、RDMA、NVMe协议,有加密、压缩、编码开发经验优先。"]}]},{id:"The joint hardware and software research and development internship".split(" ").join("-").toLowerCase(),label:"软硬件联合研发实习生",tag:["实习"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与高性能存储SoC芯片的软硬件开发:","负责网络IO加速的RTL实现;","负责加密、压缩、编码等算法加速的设计与RTL实现;","负责SoC芯片的Linux驱动开发;","负责实现软硬件联合调试与自动化测试。"]},{title:"【岗位要求】",body:["熟悉IC设计流程,熟悉常用的仿真、综合等EDA工具;","熟悉Xilinx的FPGA设计流程,熟练掌握Xilinx的FPGA开发工具;","熟悉Bluespec、SpinalHDL、Chisel或Clash等新一代HDL语言;","熟悉Rust for Linux开发内核模块、驱动;","熟悉基于QEMU的软硬件联合调试工具链;","具有很强的学习能力,自我驱动以及团队合作意识。"]},{title:"【加分项】",body:["有网络或存储硬件系统开发经验优先;","熟悉TCP/IP或InfiniBand/RDMA网络协议栈优先;","熟悉CXL、PCIe、AXI、ACE、CHI、NVMe等协议接口开发优先;","有DSP领域相关经验,熟悉LDPC、喷泉码、椭圆曲线加密算法和零知识证明算法优先;","有Linux内核网络、文件、存储相关开发经验优先;","能长期实习(1年以上)优先。"]}]}],sB=()=>{const e=wt(),[t,r]=N.useState(ww),[n,i]=N.useState({fullTime:!0,internship:!0});return N.useEffect(()=>{r(ww.filter(o=>n[o.workType]===!0))},[n]),N.useEffect(()=>{window.scrollTo(0,0)},[]),l.jsx(MU,{children:l.jsxs(LU,{children:[l.jsx(AU,{children:l.jsxs($U,{children:[l.jsx(UU,{children:"筛选"}),l.jsx(BU,{children:"工作类型"}),l.jsxs(vw,{as:"div",children:[l.jsx(yw,{type:"checkbox",id:"full-time",checked:n.fullTime,onChange:()=>{const o={...n};o.fullTime=!o.fullTime,i(o)}}),l.jsx("label",{htmlFor:"full-time",children:"全职"})]}),l.jsxs(vw,{as:"div",children:[l.jsx(yw,{type:"checkbox",id:"internship",checked:n.internship,onChange:()=>{const o={...n};o.internship=!o.internship,i(o)}}),l.jsx("label",{htmlFor:"internship",children:"兼职"})]})]})}),l.jsx(IU,{children:l.jsx(GU,{children:t.map(o=>{const{id:a,label:c,tag:d,workNature:h,workType:g,releaseTime:v,content:x}=o;return l.jsxs(XU,{onClick:()=>{e(a.split(" ").join("-"))},children:[l.jsx(KU,{src:Xb}),l.jsxs(QU,{children:[l.jsx(qU,{children:d.join(", ")}),l.jsx(iB,{children:l.jsx(ZU,{children:c})}),l.jsxs(JU,{children:[l.jsx(Ih,{icon:Kb,children:h}),l.jsx(Ah,{children:"·"}),l.jsx(Ih,{icon:Qb,children:oB.get(g)}),l.jsx(Ah,{children:"·"}),l.jsx(Ah,{children:"·"}),l.jsx(Ih,{icon:qb,children:U(v,"YYYY-MM-DD").fromNow()})]}),x.map(({title:b,body:k})=>l.jsxs(eB,{children:[l.jsx(nB,{as:"p",children:b}),l.jsx(tB,{children:k.map(C=>l.jsx(rB,{as:"li",children:C},C))})]},b))]})]},a)})})}),l.jsxs(NU,{children:[l.jsxs(ek,{children:[l.jsx(YU,{children:"面试流程"}),l.jsx(pw,{children:"实习岗位:"}),l.jsxs(fi,{children:[l.jsx(hi,{children:"项目笔试"}),"- 两天"]}),l.jsxs(fi,{children:[l.jsx(hi,{children:"性能优化"})," - 不超过一周"]}),l.jsx(fi,{children:l.jsx(hi,{children:"交叉面试"})}),l.jsxs(fi,{children:[l.jsx(hi,{children:"思路 review"})," - 交流指导"]}),l.jsx("div",{style:{paddingBlock:"0.06rem"}}),l.jsx(pw,{children:"校招 / 社招岗位:"}),l.jsxs(fi,{children:[l.jsx(hi,{children:"项目笔试"})," - 两天"]}),l.jsxs(fi,{children:[l.jsx(hi,{children:"思路 review"})," - 交流指导"]}),l.jsxs(fi,{children:[l.jsx(hi,{children:"性能优化"})," - 不超过一周"]}),l.jsx(fi,{children:l.jsx(hi,{children:"交叉面试"})})]}),l.jsxs(zU,{children:[l.jsx(HU,{children:"投递简历"}),l.jsx(gw,{children:"- 投递至邮箱:"}),l.jsx(FU,{style:{paddingTop:"0.04rem"},children:l.jsx(VU,{children:"info@datenlord.com"})}),l.jsx("div",{style:{height:"0.24rem"}}),l.jsx(gw,{children:"- 添加达坦科技小助手微信:"}),l.jsx(WU,{src:Gb})]})]})]})})};U.updateLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY年MM月DD日",LLL:"YYYY年MM月DD日Ah点mm分",LLLL:"YYYY年MM月DD日ddddAh点mm分",l:"YYYY-M-D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return e===12&&(e=0),t==="凌晨"||t==="早上"||t==="上午"?e:t==="下午"||t==="晚上"?e+12:e>=11?e:e+12},meridiem:function(e,t){const r=e*100+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d秒",m:"1分钟",mm:"%d分钟",h:"1小时",hh:"%d小时",d:"1天",dd:"%d天",M:"1个月",MM:"%d个月",y:"1年",yy:"%d年"},week:{dow:1,doy:4}});const{Heading:aB,Paragraph:lB}=Me,{CNTitleSmall:cB,CNHead5S:uB,CNTitleLarge:dB}=aB,{CNBodySmall:Vs,CNMarkSmall:fB,CNBodyLarge:hB,CNMarkMedium:tk,CNBodyMedium:rk}=lB,mB=f.div` background: #fafafa; `,pB=f.div` display: flex; @@ -2498,11 +2498,11 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ } `,EB=f(ik)` flex-direction: column; -`,jB=f.div` +`,TB=f.div` display: flex; justify-content: space-between; padding-bottom: 0.24rem; -`,TB=f.img` +`,jB=f.img` height: min-content; width: 0.625rem; margin-right: 0.22rem; @@ -2572,7 +2572,7 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ display: flex; align-items: center; justify-content: space-between; -`,zB=f.div``,YB=f(uB)``,HB=f.div` +`,zB=f.div``,HB=f(uB)``,YB=f.div` padding-top: 0.5rem; display: grid; grid-template-columns: repeat(2, 1fr); @@ -2589,7 +2589,7 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ `,VB=f.img` width: 0.32rem; height: 0.32rem; -`,WB=new Map([["fullTime","全职"],["internship","兼职"]]),Ew=[{id:"Distributed storage software development senior engineer".split(" ").join("-").toLowerCase(),label:"分布式存储软件开发资深工程师",tag:["全职","急招"],workNature:"远程办公",workType:"fullTime",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与开源分布式存储项目DatenLord的开发和维护;","完善DatenLord的测试,构建新的DatenLord测试框架;","提高DatenLord分布式性能表现。 "]},{title:"【岗位要求】",body:["至少5年的分布式系统开发或研究经验,最好是分布式存储系统研发或研究经验;","具有HDFS 、Ceph、GlusterFS等分布式存储系统具有相关开发和使用经验;","熟悉Rust、C或C++语言;","具有开源项目的开发和维护经验。"]}]},{id:"Rust distributed storage development".split(" ").join("-").toLowerCase(),label:"Rust分布式存储开发",tag:["实习","即将招满"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与高性能分布式存储系统研发,涉及的开发内容包括但不限于:","分布式存储系统开发;","分布式数据一致性协议研究和开发;","分布式缓存、数据管理服务;","使用 Rust 语言进行内核驱动开发。"]},{title:"【岗位要求】",body:["熟练使用Rust语言,熟悉多线程、高并发编程;","熟悉Linux操作系统存储管理相关功能;","具有很强的学习能力,自我驱动以及团队合作意识;","实习时间6个月以上,每周4~5天。"]},{title:"【加分项】",body:["熟悉Rust异步编程、有tokio或async-std使用经验优先;","熟悉分布式一致性协议Paxos或Raft、分布式KV存储etcd、有K8S的CSI接口编程经验优先;","有过开源项目/开源贡献经验者优先。"]}]},{id:"FPGA development".split(" ").join("-").toLowerCase(),label:"FPGA开发",tag:["实习"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["负责基于FPGA实现网络IO加速,以及加密、压缩、编码等算法加速的设计与RTL实现;","实现常用外设接口IP的RTL设计、集成和验证;","配合上层软件实现软硬件联调。"]},{title:"【岗位要求】",body:["熟悉基于FPGA的设计流程,熟悉Xilinx的FPGA芯片架构,熟练掌握Xilinx的FPGA开发工具;","熟练掌握Verilog、SystemVerilog以及SystemVerilog Assertion的使用;","熟练掌握TCL、Python脚本语言;","具有很强的学习能力,自我驱动以及团队合作意识;","实习时间6个月以上,每周4~5天。"]},{title:"【加分项】",body:["熟悉Bluespec、SpinalHDL、Chisel、Clash等至少一种新一代HDL语言;"," 熟悉CXL、PCIe、AXI、ACE、CHI等相关总线接口开发优先;","熟悉TCP/IP、RDMA、NVMe协议,有加密、压缩、编码开发经验优先。"]}]},{id:"The joint hardware and software research and development internship".split(" ").join("-").toLowerCase(),label:"软硬件联合研发实习生",tag:["实习"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与高性能存储SoC芯片的软硬件开发:","负责网络IO加速的RTL实现;","负责加密、压缩、编码等算法加速的设计与RTL实现;","负责SoC芯片的Linux驱动开发;","负责实现软硬件联合调试与自动化测试。"]},{title:"【岗位要求】",body:["熟悉IC设计流程,熟悉常用的仿真、综合等EDA工具;","熟悉Xilinx的FPGA设计流程,熟练掌握Xilinx的FPGA开发工具;","熟悉Bluespec、SpinalHDL、Chisel或Clash等新一代HDL语言;","熟悉Rust for Linux开发内核模块、驱动;","熟悉基于QEMU的软硬件联合调试工具链;","具有很强的学习能力,自我驱动以及团队合作意识。"]},{title:"【加分项】",body:["有网络或存储硬件系统开发经验优先;","熟悉TCP/IP或InfiniBand/RDMA网络协议栈优先;","熟悉CXL、PCIe、AXI、ACE、CHI、NVMe等协议接口开发优先;","有DSP领域相关经验,熟悉LDPC、喷泉码、椭圆曲线加密算法和零知识证明算法优先;","有Linux内核网络、文件、存储相关开发经验优先;","能长期实习(1年以上)优先。"]}]}],UB=()=>{const e=wt(),{key:t}=gn();N.useEffect(()=>{window.scrollTo(0,0)},[t]);const r=Ew.filter(({id:n})=>n!==t);return l.jsx(mB,{children:l.jsxs(pB,{children:[l.jsxs(gB,{children:[l.jsx(DB,{children:Ew.map(n=>{const{id:i,label:o,tag:a,workNature:c,workType:d,releaseTime:h,content:g}=n;return t===i?l.jsxs(ik,{children:[l.jsx(TB,{src:Xb}),l.jsxs(bw,{children:[l.jsx(OB,{children:a.join(", ")}),l.jsx(Dw,{children:l.jsx(PB,{children:o})}),l.jsxs(MB,{children:[l.jsx($h,{icon:Kb,children:c}),l.jsx(Nh,{children:"·"}),l.jsx($h,{icon:Qb,children:WB.get(d)}),l.jsx(Nh,{children:"·"}),l.jsx(Nh,{children:"·"}),l.jsx($h,{icon:qb,children:U(h,"YYYY-MM-DD").fromNow()})]}),g.map(({title:v,body:x})=>l.jsxs(kw,{children:[l.jsx(IB,{as:"p",children:v}),l.jsx(Cw,{children:x.map(b=>l.jsx(LB,{as:"li",children:b},b))})]},v))]})]},i):null})}),l.jsxs(zB,{children:[l.jsx(YB,{children:"相关岗位"}),l.jsx(HB,{children:r.map((n,i)=>{const{id:o,label:a,content:c}=n;return i<2?l.jsxs(EB,{children:[l.jsxs(jB,{children:[l.jsx(FB,{children:l.jsx(VB,{src:ZS})}),l.jsx($B,{onClick:()=>e(`/job-description/${o}`),children:"岗位详情"})]}),l.jsxs(bw,{children:[l.jsx(Dw,{children:l.jsx(RB,{children:a})}),c.map(({title:d,body:h},g)=>{if(g===0)return l.jsxs(kw,{children:[l.jsx(NB,{as:"p",children:d}),l.jsx(Cw,{children:h.map(v=>l.jsx(AB,{as:"li",children:v},v))})]},d)})]})]},o):null})})]})]}),l.jsxs(vB,{children:[l.jsxs(nk,{children:[l.jsx(xB,{children:"简历评估合格后,面试流程为:"}),l.jsx(SB,{children:"具体面试流程会根据候选人的情况略有调整。"}),l.jsx(_w,{children:"实习生:"}),l.jsxs(xw,{children:[l.jsx(Sw,{children:"入职初期为300元/天,"}),"如能力和产出优秀将予以薪资调增,最高500元/天。"]}),l.jsx(_w,{children:"正式员工:"}),l.jsxs(xw,{children:[l.jsx(Sw,{children:"对标国内一线大厂的薪资+期权,"}),"待面试通过后根据能力情况确定。"]})]}),l.jsxs(yB,{children:[l.jsx(wB,{children:"面试流程"}),l.jsx(_B,{children:"- 简历投递至邮箱:"}),l.jsxs(bB,{children:[l.jsx(kB,{children:"info@datenlord.com"}),"或扫描微信联系也可以喔~"]}),l.jsx(CB,{src:Gb})]})]})]})})},BB="/zh-cn/assets/cover-ab5b198b.png",GB="/zh-cn/assets/right-arrow-32ec3014.svg",XB="data:image/png;base64,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",KB="/zh-cn/assets/bg-bg-3abf4aa0.png",QB="data:image/png;base64,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",qB="/zh-cn/assets/cont-del-ill-f7f1f3a0.png",ZB="data:image/png;base64,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",JB="/zh-cn/assets/hl-ill-ab994ba5.png",Lo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAYAAABXuSs3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAVDSURBVHgB7Vm9bxxFFH9v9j7sKLEJJAVgSGRRQBpTUpqGliY9CEUCKUqUihICXSSkGEcUNBGU/AOpKUBJgcCRUChxYSJAoAQbiH13Oy/va/bD8Z1zt1e4uOcbz97u7OzvvfnN7z2vAWY2s5kdScNRF4lolbu3uS3uG0sj5iHYP2/Uzz9EsNFq4VcwBRsKnEF//Odfvav3f+/BYEDQyPz206fa8PLS3AYivImID6GBHQicQZ/d+Xfw650ftmES48gCg9N+//nlM/Nw5qXuJ91udhUaWBhyflUiPYklsDGSHhP3chxz0uOt+7uQD2gFGlpr2IX+GPR4IrICmheTFLld1yH8i0HDoE/PQENrwRRMaREFl0dZWxnxdE6BZwC7uzlCQ2sMPEW7BjoaVfhjFKkAD0zO3i413O0NgRegqWwxGljp85xKrnv0kbfVo/+PRMSpBlo4LIDz3KMeU9RJV0KW4eGD/gI0tGGqIjpJowHXj2OeAJPq/qAfoS+tF6EnbY+8z+HBH/1Xr125d+vapbtLMG3gdEhWTYCLaBMWkVbg3Pq91Az83h633Qj/MVXYzoWs8931Sz+fhwksQBMrNqJH3AEr6L61nkYeFLw4YVGPxQTM9o8mifzEwE2bybntNIkW7aoDrNlKG+vNGemTIeBCBtl7MKZNBLyqJpGokL6S41CCTg6kPaAUKvKRtgA0Nl0aRJxK+YslaAXOoc8H9XNJbWIu500OsdxHi+tj0mVs4NUNWUs4OTgo7ys1il7zpJS7RLLjBh6FLYH+hkdjVXSNNmc14lXNrmp4mf5Nx1MGTVPYT9w+BvNjafuEHKcaoAQyd64nkLGS+otCS+5H5A8WPOe4L3QJv1+/ePez9QtPR5kJI45FtG2D2iYtahQF61GmfamMtG4scgQGZTp7oY6cxw7dWn//x3OHIZiQ4yUS56uBLniP9T3gsmlIK45E95qgqo8L7Mw36xfuLE0VeOkAVWQR66UsVHiBVIu4hjoYTSTa6VJALDzjoxNZq3MFpgW8Gm1dcKhw3U6WtUK1YEAstc8P0x6t0sYfIlMLsLdgWsANgz0HFTqaC7h/RtRxijf1FU9CZrf5jOI6FstnU8oGXhhFl2a1Cj8hhBKkHAe0PxZq3/2cfuc+y3R8IppuzFhO6eAJOnlnqEQ2qMexeBIWwBwcRzQrd6ORwfmf8XUGrozz9aLgPohG6qxRb8be8d4WTBt4AoveJIqxZZptXLdViGjKY2wgaPG4VlulxUlhkPW4KlcYbl++8cb2VICndyVGjTLSWWZpXkApYH5vJdckg3I4C70XmDKm01EukRbxpuyke0YiIBOxhRg/HYVlLODpRU9yQmkRZfn5WjGTkVQd8rqFYqnp7RZCtxuSwgjBn/iLhR24/sGXK/dgWsCrb6dMMUQh6o8VPQ7BK8GM/IUQ+msKNOBzwdSTyCXFjKm9zbFYu/jFys3DsDTiuFBGc4lokzyeZ8uFQr5JrQRAz6zWd9oBjh0PO7wwO3z/CR7OPKbfmDm3ea6bl2+8vvU0z58IeMH1YMsckvi6LEYutyl4dRhTZvWItxFOv9D55cO111ahgY0NvEw2VnMINQSkltWJPgi1IoxcZQR8mzfm3FzzF2jDEtDmycXDJzegpi4YoEguWcu432oFbmitbe3Us23ozuMGNLRwMCD89sXnu18vn53Thw4D7WM9I2ItCakDmTvi7TkG/crysc12l9agoY18d8JL+y537xxwT5mYOeAxUuUWFmX5qv+FkMwTKMoO1THhJ+z3Pp8/Ob8JM5vZzGZ2pOwx917POGoSrr0AAAAASUVORK5CYII=",eG="data:image/png;base64,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",tG="/zh-cn/assets/spy-bg1-ba75fb2e.png",rG="/zh-cn/assets/spy-bg2-d3211011.png",nG="/zh-cn/assets/spy-bg3-a41ded57.png",iG="/zh-cn/assets/spy-bg4-5446dcc4.png",oG="/zh-cn/assets/foot-reg-qr-03a7d7e1.png",sG="/zh-cn/assets/foot-ass-qr-e467649e.png",{Heading:aG,Paragraph:lG}=Me,{CNHead1:cG,CNHead5:ok,CNTitleLarge:sk}=aG,{CNBodyLarge:El,CNBodyMedium:uG}=lG,dG=f.div` +`,WB=new Map([["fullTime","全职"],["internship","兼职"]]),Ew=[{id:"Distributed storage software development senior engineer".split(" ").join("-").toLowerCase(),label:"分布式存储软件开发资深工程师",tag:["全职","急招"],workNature:"远程办公",workType:"fullTime",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与开源分布式存储项目DatenLord的开发和维护;","完善DatenLord的测试,构建新的DatenLord测试框架;","提高DatenLord分布式性能表现。 "]},{title:"【岗位要求】",body:["至少5年的分布式系统开发或研究经验,最好是分布式存储系统研发或研究经验;","具有HDFS 、Ceph、GlusterFS等分布式存储系统具有相关开发和使用经验;","熟悉Rust、C或C++语言;","具有开源项目的开发和维护经验。"]}]},{id:"Rust distributed storage development".split(" ").join("-").toLowerCase(),label:"Rust分布式存储开发",tag:["实习","即将招满"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与高性能分布式存储系统研发,涉及的开发内容包括但不限于:","分布式存储系统开发;","分布式数据一致性协议研究和开发;","分布式缓存、数据管理服务;","使用 Rust 语言进行内核驱动开发。"]},{title:"【岗位要求】",body:["熟练使用Rust语言,熟悉多线程、高并发编程;","熟悉Linux操作系统存储管理相关功能;","具有很强的学习能力,自我驱动以及团队合作意识;","实习时间6个月以上,每周4~5天。"]},{title:"【加分项】",body:["熟悉Rust异步编程、有tokio或async-std使用经验优先;","熟悉分布式一致性协议Paxos或Raft、分布式KV存储etcd、有K8S的CSI接口编程经验优先;","有过开源项目/开源贡献经验者优先。"]}]},{id:"FPGA development".split(" ").join("-").toLowerCase(),label:"FPGA开发",tag:["实习"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["负责基于FPGA实现网络IO加速,以及加密、压缩、编码等算法加速的设计与RTL实现;","实现常用外设接口IP的RTL设计、集成和验证;","配合上层软件实现软硬件联调。"]},{title:"【岗位要求】",body:["熟悉基于FPGA的设计流程,熟悉Xilinx的FPGA芯片架构,熟练掌握Xilinx的FPGA开发工具;","熟练掌握Verilog、SystemVerilog以及SystemVerilog Assertion的使用;","熟练掌握TCL、Python脚本语言;","具有很强的学习能力,自我驱动以及团队合作意识;","实习时间6个月以上,每周4~5天。"]},{title:"【加分项】",body:["熟悉Bluespec、SpinalHDL、Chisel、Clash等至少一种新一代HDL语言;"," 熟悉CXL、PCIe、AXI、ACE、CHI等相关总线接口开发优先;","熟悉TCP/IP、RDMA、NVMe协议,有加密、压缩、编码开发经验优先。"]}]},{id:"The joint hardware and software research and development internship".split(" ").join("-").toLowerCase(),label:"软硬件联合研发实习生",tag:["实习"],workNature:"远程办公",workType:"internship",releaseTime:"2023-5-17",content:[{title:"【岗位职责】",body:["参与高性能存储SoC芯片的软硬件开发:","负责网络IO加速的RTL实现;","负责加密、压缩、编码等算法加速的设计与RTL实现;","负责SoC芯片的Linux驱动开发;","负责实现软硬件联合调试与自动化测试。"]},{title:"【岗位要求】",body:["熟悉IC设计流程,熟悉常用的仿真、综合等EDA工具;","熟悉Xilinx的FPGA设计流程,熟练掌握Xilinx的FPGA开发工具;","熟悉Bluespec、SpinalHDL、Chisel或Clash等新一代HDL语言;","熟悉Rust for Linux开发内核模块、驱动;","熟悉基于QEMU的软硬件联合调试工具链;","具有很强的学习能力,自我驱动以及团队合作意识。"]},{title:"【加分项】",body:["有网络或存储硬件系统开发经验优先;","熟悉TCP/IP或InfiniBand/RDMA网络协议栈优先;","熟悉CXL、PCIe、AXI、ACE、CHI、NVMe等协议接口开发优先;","有DSP领域相关经验,熟悉LDPC、喷泉码、椭圆曲线加密算法和零知识证明算法优先;","有Linux内核网络、文件、存储相关开发经验优先;","能长期实习(1年以上)优先。"]}]}],UB=()=>{const e=wt(),{key:t}=gn();N.useEffect(()=>{window.scrollTo(0,0)},[t]);const r=Ew.filter(({id:n})=>n!==t);return l.jsx(mB,{children:l.jsxs(pB,{children:[l.jsxs(gB,{children:[l.jsx(DB,{children:Ew.map(n=>{const{id:i,label:o,tag:a,workNature:c,workType:d,releaseTime:h,content:g}=n;return t===i?l.jsxs(ik,{children:[l.jsx(jB,{src:Xb}),l.jsxs(bw,{children:[l.jsx(OB,{children:a.join(", ")}),l.jsx(Dw,{children:l.jsx(PB,{children:o})}),l.jsxs(MB,{children:[l.jsx($h,{icon:Kb,children:c}),l.jsx(Nh,{children:"·"}),l.jsx($h,{icon:Qb,children:WB.get(d)}),l.jsx(Nh,{children:"·"}),l.jsx(Nh,{children:"·"}),l.jsx($h,{icon:qb,children:U(h,"YYYY-MM-DD").fromNow()})]}),g.map(({title:v,body:x})=>l.jsxs(kw,{children:[l.jsx(IB,{as:"p",children:v}),l.jsx(Cw,{children:x.map(b=>l.jsx(LB,{as:"li",children:b},b))})]},v))]})]},i):null})}),l.jsxs(zB,{children:[l.jsx(HB,{children:"相关岗位"}),l.jsx(YB,{children:r.map((n,i)=>{const{id:o,label:a,content:c}=n;return i<2?l.jsxs(EB,{children:[l.jsxs(TB,{children:[l.jsx(FB,{children:l.jsx(VB,{src:ZS})}),l.jsx($B,{onClick:()=>e(`/job-description/${o}`),children:"岗位详情"})]}),l.jsxs(bw,{children:[l.jsx(Dw,{children:l.jsx(RB,{children:a})}),c.map(({title:d,body:h},g)=>{if(g===0)return l.jsxs(kw,{children:[l.jsx(NB,{as:"p",children:d}),l.jsx(Cw,{children:h.map(v=>l.jsx(AB,{as:"li",children:v},v))})]},d)})]})]},o):null})})]})]}),l.jsxs(vB,{children:[l.jsxs(nk,{children:[l.jsx(xB,{children:"简历评估合格后,面试流程为:"}),l.jsx(SB,{children:"具体面试流程会根据候选人的情况略有调整。"}),l.jsx(_w,{children:"实习生:"}),l.jsxs(xw,{children:[l.jsx(Sw,{children:"入职初期为300元/天,"}),"如能力和产出优秀将予以薪资调增,最高500元/天。"]}),l.jsx(_w,{children:"正式员工:"}),l.jsxs(xw,{children:[l.jsx(Sw,{children:"对标国内一线大厂的薪资+期权,"}),"待面试通过后根据能力情况确定。"]})]}),l.jsxs(yB,{children:[l.jsx(wB,{children:"面试流程"}),l.jsx(_B,{children:"- 简历投递至邮箱:"}),l.jsxs(bB,{children:[l.jsx(kB,{children:"info@datenlord.com"}),"或扫描微信联系也可以喔~"]}),l.jsx(CB,{src:Gb})]})]})]})})},BB="/zh-cn/assets/cover-ab5b198b.png",GB="/zh-cn/assets/right-arrow-32ec3014.svg",XB="data:image/png;base64,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",KB="/zh-cn/assets/bg-bg-3abf4aa0.png",QB="data:image/png;base64,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",qB="/zh-cn/assets/cont-del-ill-f7f1f3a0.png",ZB="data:image/png;base64,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",JB="/zh-cn/assets/hl-ill-ab994ba5.png",Lo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAYAAABXuSs3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAVDSURBVHgB7Vm9bxxFFH9v9j7sKLEJJAVgSGRRQBpTUpqGliY9CEUCKUqUihICXSSkGEcUNBGU/AOpKUBJgcCRUChxYSJAoAQbiH13Oy/va/bD8Z1zt1e4uOcbz97u7OzvvfnN7z2vAWY2s5kdScNRF4lolbu3uS3uG0sj5iHYP2/Uzz9EsNFq4VcwBRsKnEF//Odfvav3f+/BYEDQyPz206fa8PLS3AYivImID6GBHQicQZ/d+Xfw650ftmES48gCg9N+//nlM/Nw5qXuJ91udhUaWBhyflUiPYklsDGSHhP3chxz0uOt+7uQD2gFGlpr2IX+GPR4IrICmheTFLld1yH8i0HDoE/PQENrwRRMaREFl0dZWxnxdE6BZwC7uzlCQ2sMPEW7BjoaVfhjFKkAD0zO3i413O0NgRegqWwxGljp85xKrnv0kbfVo/+PRMSpBlo4LIDz3KMeU9RJV0KW4eGD/gI0tGGqIjpJowHXj2OeAJPq/qAfoS+tF6EnbY+8z+HBH/1Xr125d+vapbtLMG3gdEhWTYCLaBMWkVbg3Pq91Az83h633Qj/MVXYzoWs8931Sz+fhwksQBMrNqJH3AEr6L61nkYeFLw4YVGPxQTM9o8mifzEwE2bybntNIkW7aoDrNlKG+vNGemTIeBCBtl7MKZNBLyqJpGokL6S41CCTg6kPaAUKvKRtgA0Nl0aRJxK+YslaAXOoc8H9XNJbWIu500OsdxHi+tj0mVs4NUNWUs4OTgo7ys1il7zpJS7RLLjBh6FLYH+hkdjVXSNNmc14lXNrmp4mf5Nx1MGTVPYT9w+BvNjafuEHKcaoAQyd64nkLGS+otCS+5H5A8WPOe4L3QJv1+/ePez9QtPR5kJI45FtG2D2iYtahQF61GmfamMtG4scgQGZTp7oY6cxw7dWn//x3OHIZiQ4yUS56uBLniP9T3gsmlIK45E95qgqo8L7Mw36xfuLE0VeOkAVWQR66UsVHiBVIu4hjoYTSTa6VJALDzjoxNZq3MFpgW8Gm1dcKhw3U6WtUK1YEAstc8P0x6t0sYfIlMLsLdgWsANgz0HFTqaC7h/RtRxijf1FU9CZrf5jOI6FstnU8oGXhhFl2a1Cj8hhBKkHAe0PxZq3/2cfuc+y3R8IppuzFhO6eAJOnlnqEQ2qMexeBIWwBwcRzQrd6ORwfmf8XUGrozz9aLgPohG6qxRb8be8d4WTBt4AoveJIqxZZptXLdViGjKY2wgaPG4VlulxUlhkPW4KlcYbl++8cb2VICndyVGjTLSWWZpXkApYH5vJdckg3I4C70XmDKm01EukRbxpuyke0YiIBOxhRg/HYVlLODpRU9yQmkRZfn5WjGTkVQd8rqFYqnp7RZCtxuSwgjBn/iLhR24/sGXK/dgWsCrb6dMMUQh6o8VPQ7BK8GM/IUQ+msKNOBzwdSTyCXFjKm9zbFYu/jFys3DsDTiuFBGc4lokzyeZ8uFQr5JrQRAz6zWd9oBjh0PO7wwO3z/CR7OPKbfmDm3ea6bl2+8vvU0z58IeMH1YMsckvi6LEYutyl4dRhTZvWItxFOv9D55cO111ahgY0NvEw2VnMINQSkltWJPgi1IoxcZQR8mzfm3FzzF2jDEtDmycXDJzegpi4YoEguWcu432oFbmitbe3Us23ozuMGNLRwMCD89sXnu18vn53Thw4D7WM9I2ItCakDmTvi7TkG/crysc12l9agoY18d8JL+y537xxwT5mYOeAxUuUWFmX5qv+FkMwTKMoO1THhJ+z3Pp8/Ob8JM5vZzGZ2pOwx917POGoSrr0AAAAASUVORK5CYII=",eG="data:image/png;base64,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",tG="/zh-cn/assets/spy-bg1-ba75fb2e.png",rG="/zh-cn/assets/spy-bg2-d3211011.png",nG="/zh-cn/assets/spy-bg3-a41ded57.png",iG="/zh-cn/assets/spy-bg4-5446dcc4.png",oG="/zh-cn/assets/foot-reg-qr-03a7d7e1.png",sG="/zh-cn/assets/foot-ass-qr-e467649e.png",{Heading:aG,Paragraph:lG}=Me,{CNHead1:cG,CNHead5:ok,CNTitleLarge:sk}=aG,{CNBodyLarge:El,CNBodyMedium:uG}=lG,dG=f.div` display: flex; flex-direction: column; align-items: center; @@ -2622,9 +2622,9 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ `,gG=f.img` height: 0.2rem; width: 0.2rem; -`,jl=f.div` - position: relative; `,Tl=f.div` + position: relative; +`,jl=f.div` /* min-height: 6.4rem; */ display: flex; flex-direction: column; @@ -2638,7 +2638,7 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ `,sf=f.div` font-size: 0.4rem; font-weight: 600; -`,vG=f(jl)``,yG=f(Tl)` +`,vG=f(Tl)``,yG=f(jl)` padding-block: 0.7rem 1.17rem; `,wG=f(of)``,_G=f(sf)``,xG=f(El)` padding-top: 0.61rem; @@ -2651,11 +2651,11 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ background: #fff; border-radius: 0.16rem; box-shadow: 0px 6px 32px 0px rgba(37, 41, 49, 0.06); -`,Yh=f.div` +`,Hh=f.div` font-size: 0.38rem; font-weight: 600; color: #7680dd; -`,Hh=f.div` +`,Yh=f.div` padding-top: 0.07rem; color: #626262; font-size: 0.16rem; @@ -2668,19 +2668,19 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ top: 0; width: 100%; height: 100%; -`,CG=f(jl)` +`,CG=f(Tl)` background: linear-gradient( 106deg, #e4f4ff -1.1%, #f9fcff 47.11%, #edf6fc 102.52% ); -`,DG=f(Tl)` +`,DG=f(jl)` min-height: 6.4rem; padding-block: 0.7rem 1.49rem; `,EG=f(of)` height: 0.26rem; -`,jG=f(sf)``,TG=f.div` +`,TG=f(sf)``,jG=f.div` display: flex; margin-top: 0.8rem; background: #fff; @@ -2761,10 +2761,10 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ margin-left: 0.8533rem; width: 2.24rem; text-align: center; -`,YG=f(ak)` +`,HG=f(ak)` margin-left: 0.96rem; padding-inline: 1.97rem; -`,HG=f.div` +`,YG=f.div` position: relative; `,Gh=f.div` display: flex; @@ -2821,9 +2821,9 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ width: 0.01rem; height: 96%; background: #7680dd; -`,WG=f(jl)` +`,WG=f(Tl)` background: linear-gradient(180deg, #f9fffe 4.64%, #fff 168.71%); -`,UG=f(Tl)` +`,UG=f(jl)` padding-block: 0.7rem 1.45rem; `,BG=f(of)``,GG=f(sf)``,XG=f.div` display: flex; @@ -2843,9 +2843,9 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ margin-right: 0.07rem; width: 0.44954rem; height: 0.44954rem; -`,No=f(El)``,qG=f(jl)` +`,No=f(El)``,qG=f(Tl)` background: linear-gradient(180deg, #f9fffe 4.64%, #fff 168.71%); -`,ZG=f(Tl)` +`,ZG=f(jl)` padding-block: 0.7rem 2.06rem; `,JG=f(of)``,eX=f(sf)``,tX=f.div` display: grid; @@ -2856,9 +2856,9 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ `,Cc=f.img` width: 100%; cursor: pointer; -`,rX=f(jl)` +`,rX=f(Tl)` background: #fafafa; -`,nX=f(Tl)` +`,nX=f(jl)` padding-block: 0.44rem 0.56rem; `,iX=f.div` display: grid; @@ -2880,13 +2880,13 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ grid-template-columns: repeat(2, 1fr); grid-gap: 0.49rem; padding-top: 0.42rem; -`,jw=f.img` +`,Tw=f.img` width: 2.17809rem; `,sX=f(sk)` padding-top: 0.41rem; color: #333; cursor: pointer; -`,aX=()=>(N.useEffect(()=>{window.scrollTo(0,0)}),l.jsxs(Pt.Fragment,{children:[l.jsx(lX,{}),l.jsx(cX,{}),l.jsx(uX,{}),l.jsx(hX,{}),l.jsx(mX,{}),l.jsx(pX,{})]})),lX=()=>{const e=wt();return l.jsxs(dG,{children:[l.jsx(fG,{children:"MIT体系结构公开课学习社区"}),l.jsx(hG,{onClick:()=>{const t=document.getElementById("supply");console.log(t),t&&t.scrollIntoView({behavior:"smooth"})},children:"立即报名"}),l.jsxs(mG,{onClick:()=>e("rank"),children:[l.jsx(pG,{children:"点击查看荣誉榜单"}),l.jsx(gG,{src:GB})]})]})},cX=()=>l.jsxs(vG,{children:[l.jsxs(yG,{children:[l.jsx(wG,{src:XB}),l.jsx(_G,{children:"项目背景"}),l.jsx(xG,{children:"随着芯片技术自主可控成为国家重要的战略发展规划,对芯片设计相关领域的人才需求也在快速增长。体系结构课程相对于硬件设计的重要性可以类比于设计模式相对于软件设计的重要性,扎实的体系结构基础是设计复杂硬件的基石。然而现实情况是,虽然国内大专院校计算机学科、电子工程学科、微电子等都有开设体系结构或组成原理等相关课程,但由于前些年对相关教学重视度不够,导致教学实践环节存在诸多缺失,毕业生掌握的技能与工业界的期望之间存在较大差距,例如:"}),l.jsxs(SG,{children:[l.jsxs(zh,{children:[l.jsx(Yh,{children:"01"}),l.jsx(Hh,{children:"教学内容局限在基础知识,而对于业界所需的诸多技术(例如异常处理、缓存技术、内存管理、多核一致性等)往往在教学中一笔带过。"})]}),l.jsxs(zh,{children:[l.jsx(Yh,{children:"02"}),l.jsx(Hh,{children:"实验、大作业、课程设计等实操环节过于简单,很少有系统级别的实验项目,学生在动手实践环节投入的精力有限,通常只需要编写HDL代码即可顺利完成相关考核,而对于前期开发环境搭建、后期验证调试、性能调优等基本不会涉及。"})]}),l.jsxs(zh,{children:[l.jsx(Yh,{children:"03"}),l.jsx(Hh,{children:"学科领域泾渭分明,软硬件结合部分训练缺失。软件相关专业课程对硬件相关知识经常快速略过,而硬件相关专业课程也较少涉及上层软件相关的知识。"})]})]}),l.jsx(bG,{children:"为了解决上述问题,我们很高兴看到已经有类似“一生一芯”这样的项目启动并取得了很好的成果,但“一生一芯”项目主要解决了上述的问题2和问题3,而对于工业界实际需要的技能,如多核处理器技术及多核下的数据一致性问题等,依旧存在覆盖上的缺失。"})]}),l.jsx(kG,{src:KB})]}),uX=()=>l.jsx(CG,{children:l.jsxs(DG,{children:[l.jsx(EG,{src:QB}),l.jsx(jG,{children:"课程内容"}),l.jsx(dX,{}),l.jsx(fX,{})]})}),dX=()=>l.jsxs(TG,{children:[l.jsxs(OG,{children:[l.jsx(PG,{children:"详情说明"}),l.jsx(bc,{children:"为了进一步缩小学生能力与业界期望之间的差距,我们找到了MIT体系结构方面的3门公开课及其对应的课程实验,希望通过学习公开课并亲自动手完成实验的方式,进一步增加学生的动手实践能力以及解决实际问题的能力。对这些公开课的说明如下:"}),l.jsx(bc,{children:"三门公开课难度级别分别对应本科必修课(6.004)、硕士必修课(6.175)以及实践选修课(6.375)"}),l.jsxs(RG,{children:[l.jsx(MG,{}),l.jsxs(Fh,{isActive:!0,children:[l.jsx(Vh,{isActive:!0,children:"MIT6.004"}),l.jsx(Wh,{isActive:!0}),l.jsx(Uh,{isActive:!0}),l.jsx(Bh,{children:"第一阶段"})]}),l.jsxs(Fh,{isActive:!1,children:[l.jsx(Vh,{isActive:!1,children:"MIT6.375"}),l.jsx(Wh,{isActive:!1}),l.jsx(Uh,{isActive:!1}),l.jsx(Bh,{children:"第二阶段"})]}),l.jsxs(Fh,{isActive:!1,children:[l.jsx(Vh,{isActive:!1,children:"MIT6.175"}),l.jsx(Wh,{isActive:!1}),l.jsx(Uh,{isActive:!1}),l.jsx(Bh,{children:"第三阶段"})]})]}),l.jsx(bc,{children:"内容涵盖了组合逻辑、简单时序逻辑、流水线及流式数据处理、RISC-V指令集架构、RISC-V处理器实现、Cache、中断异常、Non-Blocking Cache、多核处理器、Cache Coherence等。该课程及实验的授课老师为MIT的Arvind教授,他也是新一代开源HDL语言Bluespec SystemVerilog的发明人,因此该课程的全部实验也采用Bluespec进行RTL的编写。"}),l.jsx(bc,{children:"在学习三门公开课的同时,我们也自己加入了一些专项训练内容,例如AXI协议握手、流式编程在控制通路上的应用等,从而进一步提升参与者的能力,加深对硬件设计中并发性和流水线的理解。"})]}),l.jsx(LG,{src:qB})]}),fX=()=>l.jsxs(AG,{children:[l.jsx(IG,{children:"培训内容"}),l.jsxs(NG,{children:[l.jsxs($G,{children:[l.jsx(zG,{children:"序号"}),l.jsx(YG,{children:"实验内容"})]}),l.jsxs(HG,{children:[l.jsxs(Gh,{children:[l.jsx(Xh,{children:"第一阶段"}),l.jsxs(Kh,{children:[l.jsxs(ir,{children:[l.jsx(or,{children:"Lab0"}),l.jsx(sr,{children:"实验环境搭建"})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab1"}),l.jsx(sr,{children:"多路复用器和加法器"})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab2"}),l.jsx(sr,{children:"乘法器"})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab3"}),l.jsx(sr,{children:"流水线"})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab4"}),l.jsx(sr,{children:"FIFO(Bypass/Pass through/Concurrent)"})]})]})]}),l.jsxs(Gh,{children:[l.jsx(Xh,{children:"第二阶段"}),l.jsxs(Kh,{children:[l.jsxs(ir,{children:[l.jsx(or,{children:"专项1"}),l.jsx(sr,{children:l.jsx(Ln,{children:"AXI总线握手打拍与反压机制"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"专项2"}),l.jsxs(sr,{children:[l.jsx(Ln,{children:"流式数据处理"}),l.jsxs(FG,{children:[l.jsx(kc,{children:"简单音频处理流水线"}),l.jsx(kc,{children:"音频处理扩展:FFT"}),l.jsx(kc,{children:"音频处理扩展:Pitch Shifting"}),l.jsx(kc,{children:"流水线的软硬件联调仿真"})]})]})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"专项3"}),l.jsx(sr,{children:l.jsx(Ln,{children:"网络设备中的流式数据包处理"})})]})]})]}),l.jsxs(Gh,{children:[l.jsx(Xh,{children:"第三阶段"}),l.jsxs(Kh,{children:[l.jsxs(ir,{children:[l.jsx(or,{children:"Lab5"}),l.jsx(sr,{children:l.jsx(Ln,{children:"单周期及多周期RISC-V处理器"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab6"}),l.jsx(sr,{children:l.jsx(Ln,{children:"支持分支预测及6级流水的RISC-V处理器"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab7"}),l.jsx(sr,{children:l.jsx(Ln,{children:"具备ICache和DCache的RISC-V处理器"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab8"}),l.jsx(sr,{children:l.jsx(Ln,{children:"支持异常处理的RISC-V处理器"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Project1"}),l.jsx(sr,{children:l.jsx(Ln,{children:"支持乱序执行的RISC-V处理器(Store Queue)"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Project2"}),l.jsx(sr,{children:l.jsx(Ln,{children:"多核处理器及缓存一致性(基于MSI协议)"})})]})]})]}),l.jsx(VG,{})]})]})]}),hX=()=>l.jsx(WG,{children:l.jsxs(UG,{children:[l.jsx(BG,{src:ZB}),l.jsx(GG,{children:"项目课程亮点"}),l.jsxs(XG,{children:[l.jsx(KG,{src:JB}),l.jsxs(QG,{children:[l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"课程及实验安排由浅入深,并在最终到达相当的深度,既可作为“一生一芯”项目的补充课程,也可作为独立项目进行学习。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"采用Bluespec作为实验语言,具有更强的抽象表达能力,可以更高效的实现复杂功能,使得学生可以把精力更集中的放在架构设计上。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"注重软硬件联合开发,培养软硬通吃的复合型人才。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"课程时间安排紧凑,内容丰富,学生通常可以通过2~3个月的业余时间即可自学完成所有实验。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"主要课程资料均为英文,有助于锻炼国外文献阅读能力。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"全开源、社区化"})]})]})]})]})}),mX=()=>l.jsx(qG,{id:"supply",children:l.jsxs(ZG,{children:[l.jsx(JG,{src:eG}),l.jsx(eX,{children:"新手上路补给站"}),l.jsxs(tX,{children:[l.jsx(Cc,{src:tG,onClick:()=>window.location.href="https://www.bilibili.com/video/BV1u8411i7Qw/"}),l.jsx(Cc,{src:rG,onClick:()=>window.location.href="https://www.bilibili.com/video/BV1cs4y1r7T3/"}),l.jsx(Cc,{src:nG,onClick:()=>window.location.href="https://mp.weixin.qq.com/s/-MnRFCXHy5v-tt4MujfqtQ"}),l.jsx(Cc,{src:iG,onClick:()=>window.location.href="https://mp.weixin.qq.com/s/I5bPw_AUWTh2VgzAm4SHhg"})]})]})}),pX=()=>l.jsx(rX,{children:l.jsxs(nX,{children:[l.jsxs(iX,{children:[l.jsxs(Qh,{style:{gridColumnStart:"span 2"},children:[l.jsx(qh,{children:"申明"}),l.jsx(Zh,{children:"MIT体系结构公开课学习社区项目以学习者自学开源的MIT三门公开课为主,社区内大家互相监督和交流,社区有助教在线答疑,帮助有志于从事数字芯片设计的同学强化体系结构基础知识,提升数字芯片设计的能力。"})]}),l.jsxs(Qh,{children:[l.jsx(qh,{children:"报名表"}),l.jsx(Zh,{children:"请扫描二维码,填写报名表,加入MIT体系结构公开课学习社区项目。报名成功后,将收到邮件确认。"})]}),l.jsxs(Qh,{children:[l.jsx(qh,{children:"咨询"}),l.jsx(Zh,{children:"关于MIT体系结构公开课学习社区项目有任何问题或疑问,可以邮件:ta@datenlord.com或添加DatenLord小助手微信咨询。"})]})]}),l.jsxs(oX,{children:[l.jsx(jw,{src:oG}),l.jsx(jw,{src:sG})]}),l.jsxs(sX,{onClick:()=>window.location.href="https://datenlord.feishu.cn/wiki/CNwFwKXPaiy0cfkNYrqcLNdCnTf",children:["往届学员",">>"]})]})}),gX="/zh-cn/assets/title-6364f1d7.png",vX="/zh-cn/assets/stage1-5eb61c6d.png",yX="/zh-cn/assets/stage2-586e5a56.png",wX="/zh-cn/assets/stage3-021de657.png",_X="/zh-cn/assets/github-6b99dc67.svg",xX=f.div` +`,aX=()=>(N.useEffect(()=>{window.scrollTo(0,0)}),l.jsxs(Pt.Fragment,{children:[l.jsx(lX,{}),l.jsx(cX,{}),l.jsx(uX,{}),l.jsx(hX,{}),l.jsx(mX,{}),l.jsx(pX,{})]})),lX=()=>{const e=wt();return l.jsxs(dG,{children:[l.jsx(fG,{children:"MIT体系结构公开课学习社区"}),l.jsx(hG,{onClick:()=>{const t=document.getElementById("supply");console.log(t),t&&t.scrollIntoView({behavior:"smooth"})},children:"立即报名"}),l.jsxs(mG,{onClick:()=>e("rank"),children:[l.jsx(pG,{children:"点击查看荣誉榜单"}),l.jsx(gG,{src:GB})]})]})},cX=()=>l.jsxs(vG,{children:[l.jsxs(yG,{children:[l.jsx(wG,{src:XB}),l.jsx(_G,{children:"项目背景"}),l.jsx(xG,{children:"随着芯片技术自主可控成为国家重要的战略发展规划,对芯片设计相关领域的人才需求也在快速增长。体系结构课程相对于硬件设计的重要性可以类比于设计模式相对于软件设计的重要性,扎实的体系结构基础是设计复杂硬件的基石。然而现实情况是,虽然国内大专院校计算机学科、电子工程学科、微电子等都有开设体系结构或组成原理等相关课程,但由于前些年对相关教学重视度不够,导致教学实践环节存在诸多缺失,毕业生掌握的技能与工业界的期望之间存在较大差距,例如:"}),l.jsxs(SG,{children:[l.jsxs(zh,{children:[l.jsx(Hh,{children:"01"}),l.jsx(Yh,{children:"教学内容局限在基础知识,而对于业界所需的诸多技术(例如异常处理、缓存技术、内存管理、多核一致性等)往往在教学中一笔带过。"})]}),l.jsxs(zh,{children:[l.jsx(Hh,{children:"02"}),l.jsx(Yh,{children:"实验、大作业、课程设计等实操环节过于简单,很少有系统级别的实验项目,学生在动手实践环节投入的精力有限,通常只需要编写HDL代码即可顺利完成相关考核,而对于前期开发环境搭建、后期验证调试、性能调优等基本不会涉及。"})]}),l.jsxs(zh,{children:[l.jsx(Hh,{children:"03"}),l.jsx(Yh,{children:"学科领域泾渭分明,软硬件结合部分训练缺失。软件相关专业课程对硬件相关知识经常快速略过,而硬件相关专业课程也较少涉及上层软件相关的知识。"})]})]}),l.jsx(bG,{children:"为了解决上述问题,我们很高兴看到已经有类似“一生一芯”这样的项目启动并取得了很好的成果,但“一生一芯”项目主要解决了上述的问题2和问题3,而对于工业界实际需要的技能,如多核处理器技术及多核下的数据一致性问题等,依旧存在覆盖上的缺失。"})]}),l.jsx(kG,{src:KB})]}),uX=()=>l.jsx(CG,{children:l.jsxs(DG,{children:[l.jsx(EG,{src:QB}),l.jsx(TG,{children:"课程内容"}),l.jsx(dX,{}),l.jsx(fX,{})]})}),dX=()=>l.jsxs(jG,{children:[l.jsxs(OG,{children:[l.jsx(PG,{children:"详情说明"}),l.jsx(bc,{children:"为了进一步缩小学生能力与业界期望之间的差距,我们找到了MIT体系结构方面的3门公开课及其对应的课程实验,希望通过学习公开课并亲自动手完成实验的方式,进一步增加学生的动手实践能力以及解决实际问题的能力。对这些公开课的说明如下:"}),l.jsx(bc,{children:"三门公开课难度级别分别对应本科必修课(6.004)、硕士必修课(6.175)以及实践选修课(6.375)"}),l.jsxs(RG,{children:[l.jsx(MG,{}),l.jsxs(Fh,{isActive:!0,children:[l.jsx(Vh,{isActive:!0,children:"MIT6.004"}),l.jsx(Wh,{isActive:!0}),l.jsx(Uh,{isActive:!0}),l.jsx(Bh,{children:"第一阶段"})]}),l.jsxs(Fh,{isActive:!1,children:[l.jsx(Vh,{isActive:!1,children:"MIT6.375"}),l.jsx(Wh,{isActive:!1}),l.jsx(Uh,{isActive:!1}),l.jsx(Bh,{children:"第二阶段"})]}),l.jsxs(Fh,{isActive:!1,children:[l.jsx(Vh,{isActive:!1,children:"MIT6.175"}),l.jsx(Wh,{isActive:!1}),l.jsx(Uh,{isActive:!1}),l.jsx(Bh,{children:"第三阶段"})]})]}),l.jsx(bc,{children:"内容涵盖了组合逻辑、简单时序逻辑、流水线及流式数据处理、RISC-V指令集架构、RISC-V处理器实现、Cache、中断异常、Non-Blocking Cache、多核处理器、Cache Coherence等。该课程及实验的授课老师为MIT的Arvind教授,他也是新一代开源HDL语言Bluespec SystemVerilog的发明人,因此该课程的全部实验也采用Bluespec进行RTL的编写。"}),l.jsx(bc,{children:"在学习三门公开课的同时,我们也自己加入了一些专项训练内容,例如AXI协议握手、流式编程在控制通路上的应用等,从而进一步提升参与者的能力,加深对硬件设计中并发性和流水线的理解。"})]}),l.jsx(LG,{src:qB})]}),fX=()=>l.jsxs(AG,{children:[l.jsx(IG,{children:"培训内容"}),l.jsxs(NG,{children:[l.jsxs($G,{children:[l.jsx(zG,{children:"序号"}),l.jsx(HG,{children:"实验内容"})]}),l.jsxs(YG,{children:[l.jsxs(Gh,{children:[l.jsx(Xh,{children:"第一阶段"}),l.jsxs(Kh,{children:[l.jsxs(ir,{children:[l.jsx(or,{children:"Lab0"}),l.jsx(sr,{children:"实验环境搭建"})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab1"}),l.jsx(sr,{children:"多路复用器和加法器"})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab2"}),l.jsx(sr,{children:"乘法器"})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab3"}),l.jsx(sr,{children:"流水线"})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab4"}),l.jsx(sr,{children:"FIFO(Bypass/Pass through/Concurrent)"})]})]})]}),l.jsxs(Gh,{children:[l.jsx(Xh,{children:"第二阶段"}),l.jsxs(Kh,{children:[l.jsxs(ir,{children:[l.jsx(or,{children:"专项1"}),l.jsx(sr,{children:l.jsx(Ln,{children:"AXI总线握手打拍与反压机制"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"专项2"}),l.jsxs(sr,{children:[l.jsx(Ln,{children:"流式数据处理"}),l.jsxs(FG,{children:[l.jsx(kc,{children:"简单音频处理流水线"}),l.jsx(kc,{children:"音频处理扩展:FFT"}),l.jsx(kc,{children:"音频处理扩展:Pitch Shifting"}),l.jsx(kc,{children:"流水线的软硬件联调仿真"})]})]})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"专项3"}),l.jsx(sr,{children:l.jsx(Ln,{children:"网络设备中的流式数据包处理"})})]})]})]}),l.jsxs(Gh,{children:[l.jsx(Xh,{children:"第三阶段"}),l.jsxs(Kh,{children:[l.jsxs(ir,{children:[l.jsx(or,{children:"Lab5"}),l.jsx(sr,{children:l.jsx(Ln,{children:"单周期及多周期RISC-V处理器"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab6"}),l.jsx(sr,{children:l.jsx(Ln,{children:"支持分支预测及6级流水的RISC-V处理器"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab7"}),l.jsx(sr,{children:l.jsx(Ln,{children:"具备ICache和DCache的RISC-V处理器"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Lab8"}),l.jsx(sr,{children:l.jsx(Ln,{children:"支持异常处理的RISC-V处理器"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Project1"}),l.jsx(sr,{children:l.jsx(Ln,{children:"支持乱序执行的RISC-V处理器(Store Queue)"})})]}),l.jsxs(ir,{children:[l.jsx(or,{children:"Project2"}),l.jsx(sr,{children:l.jsx(Ln,{children:"多核处理器及缓存一致性(基于MSI协议)"})})]})]})]}),l.jsx(VG,{})]})]})]}),hX=()=>l.jsx(WG,{children:l.jsxs(UG,{children:[l.jsx(BG,{src:ZB}),l.jsx(GG,{children:"项目课程亮点"}),l.jsxs(XG,{children:[l.jsx(KG,{src:JB}),l.jsxs(QG,{children:[l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"课程及实验安排由浅入深,并在最终到达相当的深度,既可作为“一生一芯”项目的补充课程,也可作为独立项目进行学习。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"采用Bluespec作为实验语言,具有更强的抽象表达能力,可以更高效的实现复杂功能,使得学生可以把精力更集中的放在架构设计上。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"注重软硬件联合开发,培养软硬通吃的复合型人才。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"课程时间安排紧凑,内容丰富,学生通常可以通过2~3个月的业余时间即可自学完成所有实验。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"主要课程资料均为英文,有助于锻炼国外文献阅读能力。"})]}),l.jsxs(Ao,{children:[l.jsx(Io,{src:Lo}),l.jsx(No,{children:"全开源、社区化"})]})]})]})]})}),mX=()=>l.jsx(qG,{id:"supply",children:l.jsxs(ZG,{children:[l.jsx(JG,{src:eG}),l.jsx(eX,{children:"新手上路补给站"}),l.jsxs(tX,{children:[l.jsx(Cc,{src:tG,onClick:()=>window.location.href="https://www.bilibili.com/video/BV1u8411i7Qw/"}),l.jsx(Cc,{src:rG,onClick:()=>window.location.href="https://www.bilibili.com/video/BV1cs4y1r7T3/"}),l.jsx(Cc,{src:nG,onClick:()=>window.location.href="https://mp.weixin.qq.com/s/-MnRFCXHy5v-tt4MujfqtQ"}),l.jsx(Cc,{src:iG,onClick:()=>window.location.href="https://mp.weixin.qq.com/s/I5bPw_AUWTh2VgzAm4SHhg"})]})]})}),pX=()=>l.jsx(rX,{children:l.jsxs(nX,{children:[l.jsxs(iX,{children:[l.jsxs(Qh,{style:{gridColumnStart:"span 2"},children:[l.jsx(qh,{children:"申明"}),l.jsx(Zh,{children:"MIT体系结构公开课学习社区项目以学习者自学开源的MIT三门公开课为主,社区内大家互相监督和交流,社区有助教在线答疑,帮助有志于从事数字芯片设计的同学强化体系结构基础知识,提升数字芯片设计的能力。"})]}),l.jsxs(Qh,{children:[l.jsx(qh,{children:"报名表"}),l.jsx(Zh,{children:"请扫描二维码,填写报名表,加入MIT体系结构公开课学习社区项目。报名成功后,将收到邮件确认。"})]}),l.jsxs(Qh,{children:[l.jsx(qh,{children:"咨询"}),l.jsx(Zh,{children:"关于MIT体系结构公开课学习社区项目有任何问题或疑问,可以邮件:ta@datenlord.com或添加DatenLord小助手微信咨询。"})]})]}),l.jsxs(oX,{children:[l.jsx(Tw,{src:oG}),l.jsx(Tw,{src:sG})]}),l.jsxs(sX,{onClick:()=>window.location.href="https://datenlord.feishu.cn/wiki/CNwFwKXPaiy0cfkNYrqcLNdCnTf",children:["往届学员",">>"]})]})}),gX="/zh-cn/assets/title-6364f1d7.png",vX="/zh-cn/assets/stage1-5eb61c6d.png",yX="/zh-cn/assets/stage2-586e5a56.png",wX="/zh-cn/assets/stage3-021de657.png",_X="/zh-cn/assets/github-6b99dc67.svg",xX=f.div` display: flex; flex-direction: column; align-items: center; @@ -2954,7 +2954,7 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ width: 0.62432rem; height: 0.62432rem; border-radius: 50%; -`,Yo=f.div` +`,Ho=f.div` display: flex; align-items: center; color: #fff; @@ -2971,4 +2971,4 @@ var n=r.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_ background-size: cover; margin-left: 0.06rem; } -`,zp=[{avatar:"https://avatars.githubusercontent.com/u/11474381?v=4",name:"myrfy001",url:"https://github.com/myrfy001"},{avatar:"https://avatars.githubusercontent.com/u/32484423?v=4",name:"GTwhy",url:"https://github.com/GTwhy"},{avatar:"https://avatars.githubusercontent.com/u/78157415?v=4",name:"kazutoiris",url:"https://github.com/kazutoiris"},{avatar:"https://avatars.githubusercontent.com/u/55951109?v=4",name:"wengwz",url:"https://github.com/wengwz"},{avatar:"https://avatars.githubusercontent.com/u/111745697?v=4",name:"Huihaojia",url:"https://github.com/Huihaojia"},{avatar:"https://avatars.githubusercontent.com/u/108394891?v=4",name:"李琦彬",url:"https://github.com/androny1012"},{avatar:"https://avatars.githubusercontent.com/u/94814217?v=4",name:"李金东",url:"https://github.com/adamgallas"}],Yp=zp,Tw=Yp,EX=()=>l.jsxs(Pt.Fragment,{children:[l.jsxs(xX,{children:[l.jsx(SX,{src:gX}),l.jsx(bX,{children:"恭喜所有完成MIT体系结构公开课学习的同学!"}),l.jsx(kX,{children:"(排名不分先后)"})]}),l.jsx(CX,{children:l.jsxs(DX,{children:[l.jsx(Jh,{children:l.jsxs(em,{children:[l.jsx(tm,{src:vX}),l.jsx(rm,{children:l.jsxs(nm,{children:[zp.map(({avatar:e,name:t,url:r})=>l.jsxs($o,{onClick:()=>window.open(r),children:[l.jsx(zo,{src:e}),l.jsx(Yo,{children:t})]},t)),zp.map(({avatar:e,name:t,url:r})=>l.jsxs($o,{onClick:()=>window.open(r),children:[l.jsx(zo,{src:e}),l.jsx(Yo,{children:t})]},t))]})})]})}),l.jsx(Jh,{children:l.jsxs(em,{children:[l.jsx(tm,{src:yX}),l.jsx(rm,{children:l.jsxs(nm,{children:[Yp.map(e=>l.jsxs($o,{children:[l.jsx(zo,{src:e.avatar}),l.jsx(Yo,{children:e.name})]},e.name)),Yp.map(e=>l.jsxs($o,{children:[l.jsx(zo,{src:e.avatar}),l.jsx(Yo,{children:e.name})]},e.name))]})})]})}),l.jsx(Jh,{children:l.jsxs(em,{children:[l.jsx(tm,{src:wX}),l.jsx(rm,{children:l.jsxs(nm,{children:[Tw.map(e=>l.jsxs($o,{children:[l.jsx(zo,{src:e.avatar}),l.jsx(Yo,{children:e.name})]},e.name)),Tw.map(e=>l.jsxs($o,{children:[l.jsx(zo,{src:e.avatar}),l.jsx(Yo,{children:e.name})]},e.name))]})})]})})]})})]}),jX=MP([{path:"/",element:l.jsx(x4,{}),children:[{path:"",element:l.jsx(BI,{})},{path:"products",element:l.jsx(H1,{})},{path:"products/:sectionId",element:l.jsx(H1,{})},{path:"rdma",element:l.jsx(_N,{})},{path:"solutions",element:l.jsx(V1,{})},{path:"solutions/:sectionId",element:l.jsx(V1,{})},{path:"resources1",element:l.jsx(W1,{})},{path:"resources1/:sectionId",element:l.jsx(W1,{})},{path:"resources2",element:l.jsx(Z1,{})},{path:"resources2/:sectionId",element:l.jsx(Z1,{})},{path:"clients",element:l.jsx(J1,{})},{path:"clients/:sectionId",element:l.jsx(J1,{})},{path:"company1",element:l.jsx(tw,{})},{path:"company1/:sectionId",element:l.jsx(tw,{})},{path:"company2",element:l.jsx(ow,{})},{path:"company2/:sectionId",element:l.jsx(ow,{})},{path:"tech-talk",element:l.jsx(_c,{})},{path:"oss-showcase",element:l.jsx(_c,{})},{path:"rust-showcase",element:l.jsx(_c,{})},{path:"hardware-acceleration",element:l.jsx(_c,{})},{path:":title",element:l.jsx(dU,{})},{path:":section/:title",element:l.jsx(CU,{})},{path:"job-description",element:l.jsx(sB,{})},{path:"job-description/:key",element:l.jsx(UB,{})},{path:"MIT",element:l.jsx(aX,{})},{path:"MIT/rank",element:l.jsx(EX,{})}]}]),TX={themeDark:"#0A061F",themeDark02:"#42424A",secondary01:"#7680DD",secondary02:"#D9DBEF",secondary07:"#F2994A",secondary08:"#FDCB6E",gray03:"#828282",gray04:"#4F4F4F",gray007:"#272D37",white00:"#fff"};function Br(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n3?t.i-4:t.i:Array.isArray(e)?1:zg(e)?2:Yg(e)?3:0}function gs(e,t){return Ws(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function OX(e,t){return Ws(e)===2?e.get(t):e[t]}function lk(e,t,r){var n=Ws(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function ck(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function zg(e){return IX&&e instanceof Map}function Yg(e){return NX&&e instanceof Set}function qi(e){return e.o||e.t}function Hg(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=dk(e);delete t[Je];for(var r=vs(t),n=0;n1&&(e.set=e.add=e.clear=e.delete=PX),Object.freeze(e),t&&_o(e,function(r,n){return Fg(n,!0)},!0)),e}function PX(){Br(2)}function Vg(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function hn(e){var t=Wp[e];return t||Br(18,e),t}function RX(e,t){Wp[e]||(Wp[e]=t)}function Hp(){return ul}function im(e,t){t&&(hn("Patches"),e.u=[],e.s=[],e.v=t)}function Yu(e){Fp(e),e.p.forEach(MX),e.p=null}function Fp(e){e===ul&&(ul=e.l)}function Ow(e){return ul={p:[],l:ul,h:e,m:!0,_:0}}function MX(e){var t=e[Je];t.i===0||t.i===1?t.j():t.g=!0}function om(e,t){t._=t.p.length;var r=t.p[0],n=e!==void 0&&e!==r;return t.h.O||hn("ES5").S(t,e,n),n?(r[Je].P&&(Yu(t),Br(4)),Zn(e)&&(e=Hu(t,e),t.l||Fu(t,e)),t.u&&hn("Patches").M(r[Je].t,e,t.u,t.s)):e=Hu(t,r,[]),Yu(t),t.u&&t.v(t.u,t.s),e!==uk?e:void 0}function Hu(e,t,r){if(Vg(t))return t;var n=t[Je];if(!n)return _o(t,function(c,d){return Pw(e,n,t,c,d,r)},!0),t;if(n.A!==e)return t;if(!n.P)return Fu(e,n.t,!0),n.t;if(!n.I){n.I=!0,n.A._--;var i=n.i===4||n.i===5?n.o=Hg(n.k):n.o,o=i,a=!1;n.i===3&&(o=new Set(i),i.clear(),a=!0),_o(o,function(c,d){return Pw(e,n,i,c,d,r,a)}),Fu(e,i,!1),r&&e.u&&hn("Patches").N(n,r,e.u,e.s)}return n.o}function Pw(e,t,r,n,i,o,a){if(zi(i)){var c=Hu(e,i,o&&t&&t.i!==3&&!gs(t.R,n)?o.concat(n):void 0);if(lk(r,n,c),!zi(c))return;e.m=!1}else a&&r.add(i);if(Zn(i)&&!Vg(i)){if(!e.h.D&&e._<1)return;Hu(e,i),t&&t.A.l||Fu(e,i)}}function Fu(e,t,r){r===void 0&&(r=!1),!e.l&&e.h.D&&e.m&&Fg(t,r)}function sm(e,t){var r=e[Je];return(r?qi(r):e)[t]}function Rw(e,t){if(t in e)for(var r=Object.getPrototypeOf(e);r;){var n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Object.getPrototypeOf(r)}}function _i(e){e.P||(e.P=!0,e.l&&_i(e.l))}function am(e){e.o||(e.o=Hg(e.t))}function Vp(e,t,r){var n=zg(t)?hn("MapSet").F(t,r):Yg(t)?hn("MapSet").T(t,r):e.O?function(i,o){var a=Array.isArray(i),c={i:a?1:0,A:o?o.A:Hp(),P:!1,I:!1,R:{},l:o,t:i,k:null,o:null,j:null,C:!1},d=c,h=dl;a&&(d=[c],h=_a);var g=Proxy.revocable(d,h),v=g.revoke,x=g.proxy;return c.k=x,c.j=v,x}(t,r):hn("ES5").J(t,r);return(r?r.A:Hp()).p.push(n),n}function LX(e){return zi(e)||Br(22,e),function t(r){if(!Zn(r))return r;var n,i=r[Je],o=Ws(r);if(i){if(!i.P&&(i.i<4||!hn("ES5").K(i)))return i.t;i.I=!0,n=Mw(r,o),i.I=!1}else n=Mw(r,o);return _o(n,function(a,c){i&&OX(i.t,a)===c||lk(n,a,t(c))}),o===3?new Set(n):n}(e)}function Mw(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return Hg(e)}function AX(){function e(o,a){var c=i[o];return c?c.enumerable=a:i[o]=c={configurable:!0,enumerable:a,get:function(){var d=this[Je];return dl.get(d,o)},set:function(d){var h=this[Je];dl.set(h,o,d)}},c}function t(o){for(var a=o.length-1;a>=0;a--){var c=o[a][Je];if(!c.P)switch(c.i){case 5:n(c)&&_i(c);break;case 4:r(c)&&_i(c)}}}function r(o){for(var a=o.t,c=o.k,d=vs(c),h=d.length-1;h>=0;h--){var g=d[h];if(g!==Je){var v=a[g];if(v===void 0&&!gs(a,g))return!0;var x=c[g],b=x&&x[Je];if(b?b.t!==v:!ck(x,v))return!0}}var k=!!a[Je];return d.length!==vs(a).length+(k?0:1)}function n(o){var a=o.k;if(a.length!==o.t.length)return!0;var c=Object.getOwnPropertyDescriptor(a,a.length-1);if(c&&!c.get)return!0;for(var d=0;d1?y-1:0),S=1;S1?g-1:0),x=1;x=0;i--){var o=n[i];if(o.path.length===0&&o.op==="replace"){r=o.value;break}}i>-1&&(n=n.slice(i+1));var a=hn("Patches").$;return zi(r)?a(r,n):this.produce(r,function(c){return a(c,n)})},e}(),_r=new zX,fk=_r.produce;_r.produceWithPatches.bind(_r);_r.setAutoFreeze.bind(_r);_r.setUseProxies.bind(_r);_r.applyPatches.bind(_r);_r.createDraft.bind(_r);_r.finishDraft.bind(_r);function fl(e){return fl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fl(e)}function YX(e,t){if(fl(e)!=="object"||e===null)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(fl(n)!=="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function HX(e){var t=YX(e,"string");return fl(t)==="symbol"?t:String(t)}function FX(e,t,r){return t=HX(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Nw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $w(e){for(var t=1;t"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Ft(1));return r(hk)(e,t)}if(typeof e!="function")throw new Error(Ft(2));var i=e,o=t,a=[],c=a,d=!1;function h(){c===a&&(c=a.slice())}function g(){if(d)throw new Error(Ft(3));return o}function v(C){if(typeof C!="function")throw new Error(Ft(4));if(d)throw new Error(Ft(5));var E=!0;return h(),c.push(C),function(){if(E){if(d)throw new Error(Ft(6));E=!1,h();var w=c.indexOf(C);c.splice(w,1),a=null}}}function x(C){if(!VX(C))throw new Error(Ft(7));if(typeof C.type>"u")throw new Error(Ft(8));if(d)throw new Error(Ft(9));try{d=!0,o=i(o,C)}finally{d=!1}for(var E=a=c,y=0;y"u")throw new Error(Ft(12));if(typeof r(void 0,{type:Vu.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Ft(13))})}function UX(e){for(var t=Object.keys(e),r={},n=0;n"u")throw h&&h.type,new Error(Ft(14));v[b]=E,g=g||E!==C}return g=g||o.length!==Object.keys(d).length,g?v:d}}function Wu(){for(var e=arguments.length,t=new Array(e),r=0;r0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]{e.value+=1},decrement:e=>{e.value-=1},incrementByAmount:(e,t)=>{e.value+=t.payload}}}),xK=_K.reducer,SK=lK({reducer:{counter:xK}});dm.createRoot(document.getElementById("root")).render(l.jsx(DM,{store:SK,children:l.jsxs($R,{theme:TX,children:[l.jsx(EM,{}),l.jsx(kP,{router:jX})]})}))});export default bK(); +`,zp=[{avatar:"https://avatars.githubusercontent.com/u/11474381?v=4",name:"myrfy001",url:"https://github.com/myrfy001"},{avatar:"https://avatars.githubusercontent.com/u/32484423?v=4",name:"GTwhy",url:"https://github.com/GTwhy"},{avatar:"https://avatars.githubusercontent.com/u/78157415?v=4",name:"kazutoiris",url:"https://github.com/kazutoiris"},{avatar:"https://avatars.githubusercontent.com/u/55951109?v=4",name:"wengwz",url:"https://github.com/wengwz"},{avatar:"https://avatars.githubusercontent.com/u/111745697?v=4",name:"Huihaojia",url:"https://github.com/Huihaojia"},{avatar:"https://avatars.githubusercontent.com/u/108394891?v=4",name:"李琦彬",url:"https://github.com/androny1012"},{avatar:"https://avatars.githubusercontent.com/u/94814217?v=4",name:"李金东",url:"https://github.com/adamgallas"}],Hp=zp,jw=Hp,EX=()=>l.jsxs(Pt.Fragment,{children:[l.jsxs(xX,{children:[l.jsx(SX,{src:gX}),l.jsx(bX,{children:"恭喜所有完成MIT体系结构公开课学习的同学!"}),l.jsx(kX,{children:"(排名不分先后)"})]}),l.jsx(CX,{children:l.jsxs(DX,{children:[l.jsx(Jh,{children:l.jsxs(em,{children:[l.jsx(tm,{src:vX}),l.jsx(rm,{children:l.jsxs(nm,{children:[zp.map(({avatar:e,name:t,url:r})=>l.jsxs($o,{onClick:()=>window.open(r),children:[l.jsx(zo,{src:e}),l.jsx(Ho,{children:t})]},t)),zp.map(({avatar:e,name:t,url:r})=>l.jsxs($o,{onClick:()=>window.open(r),children:[l.jsx(zo,{src:e}),l.jsx(Ho,{children:t})]},t))]})})]})}),l.jsx(Jh,{children:l.jsxs(em,{children:[l.jsx(tm,{src:yX}),l.jsx(rm,{children:l.jsxs(nm,{children:[Hp.map(e=>l.jsxs($o,{children:[l.jsx(zo,{src:e.avatar}),l.jsx(Ho,{children:e.name})]},e.name)),Hp.map(e=>l.jsxs($o,{children:[l.jsx(zo,{src:e.avatar}),l.jsx(Ho,{children:e.name})]},e.name))]})})]})}),l.jsx(Jh,{children:l.jsxs(em,{children:[l.jsx(tm,{src:wX}),l.jsx(rm,{children:l.jsxs(nm,{children:[jw.map(e=>l.jsxs($o,{children:[l.jsx(zo,{src:e.avatar}),l.jsx(Ho,{children:e.name})]},e.name)),jw.map(e=>l.jsxs($o,{children:[l.jsx(zo,{src:e.avatar}),l.jsx(Ho,{children:e.name})]},e.name))]})})]})})]})})]}),TX=MP([{path:"/",element:l.jsx(x4,{}),children:[{path:"",element:l.jsx(BI,{})},{path:"products",element:l.jsx(Y1,{})},{path:"products/:sectionId",element:l.jsx(Y1,{})},{path:"rdma",element:l.jsx(_N,{})},{path:"solutions",element:l.jsx(V1,{})},{path:"solutions/:sectionId",element:l.jsx(V1,{})},{path:"resources1",element:l.jsx(W1,{})},{path:"resources1/:sectionId",element:l.jsx(W1,{})},{path:"resources2",element:l.jsx(Z1,{})},{path:"resources2/:sectionId",element:l.jsx(Z1,{})},{path:"clients",element:l.jsx(J1,{})},{path:"clients/:sectionId",element:l.jsx(J1,{})},{path:"company1",element:l.jsx(tw,{})},{path:"company1/:sectionId",element:l.jsx(tw,{})},{path:"company2",element:l.jsx(ow,{})},{path:"company2/:sectionId",element:l.jsx(ow,{})},{path:"tech-talk",element:l.jsx(_c,{})},{path:"oss-showcase",element:l.jsx(_c,{})},{path:"rust-showcase",element:l.jsx(_c,{})},{path:"hardware-acceleration",element:l.jsx(_c,{})},{path:":title",element:l.jsx(dU,{})},{path:":section/:title",element:l.jsx(CU,{})},{path:"job-description",element:l.jsx(sB,{})},{path:"job-description/:key",element:l.jsx(UB,{})},{path:"MIT",element:l.jsx(aX,{})},{path:"MIT/rank",element:l.jsx(EX,{})}]}]),jX={themeDark:"#0A061F",themeDark02:"#42424A",secondary01:"#7680DD",secondary02:"#D9DBEF",secondary07:"#F2994A",secondary08:"#FDCB6E",gray03:"#828282",gray04:"#4F4F4F",gray007:"#272D37",white00:"#fff"};function Br(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n3?t.i-4:t.i:Array.isArray(e)?1:zg(e)?2:Hg(e)?3:0}function gs(e,t){return Ws(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function OX(e,t){return Ws(e)===2?e.get(t):e[t]}function lk(e,t,r){var n=Ws(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function ck(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function zg(e){return IX&&e instanceof Map}function Hg(e){return NX&&e instanceof Set}function qi(e){return e.o||e.t}function Yg(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=dk(e);delete t[Je];for(var r=vs(t),n=0;n1&&(e.set=e.add=e.clear=e.delete=PX),Object.freeze(e),t&&_o(e,function(r,n){return Fg(n,!0)},!0)),e}function PX(){Br(2)}function Vg(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function hn(e){var t=Wp[e];return t||Br(18,e),t}function RX(e,t){Wp[e]||(Wp[e]=t)}function Yp(){return ul}function im(e,t){t&&(hn("Patches"),e.u=[],e.s=[],e.v=t)}function Hu(e){Fp(e),e.p.forEach(MX),e.p=null}function Fp(e){e===ul&&(ul=e.l)}function Ow(e){return ul={p:[],l:ul,h:e,m:!0,_:0}}function MX(e){var t=e[Je];t.i===0||t.i===1?t.j():t.g=!0}function om(e,t){t._=t.p.length;var r=t.p[0],n=e!==void 0&&e!==r;return t.h.O||hn("ES5").S(t,e,n),n?(r[Je].P&&(Hu(t),Br(4)),Zn(e)&&(e=Yu(t,e),t.l||Fu(t,e)),t.u&&hn("Patches").M(r[Je].t,e,t.u,t.s)):e=Yu(t,r,[]),Hu(t),t.u&&t.v(t.u,t.s),e!==uk?e:void 0}function Yu(e,t,r){if(Vg(t))return t;var n=t[Je];if(!n)return _o(t,function(c,d){return Pw(e,n,t,c,d,r)},!0),t;if(n.A!==e)return t;if(!n.P)return Fu(e,n.t,!0),n.t;if(!n.I){n.I=!0,n.A._--;var i=n.i===4||n.i===5?n.o=Yg(n.k):n.o,o=i,a=!1;n.i===3&&(o=new Set(i),i.clear(),a=!0),_o(o,function(c,d){return Pw(e,n,i,c,d,r,a)}),Fu(e,i,!1),r&&e.u&&hn("Patches").N(n,r,e.u,e.s)}return n.o}function Pw(e,t,r,n,i,o,a){if(zi(i)){var c=Yu(e,i,o&&t&&t.i!==3&&!gs(t.R,n)?o.concat(n):void 0);if(lk(r,n,c),!zi(c))return;e.m=!1}else a&&r.add(i);if(Zn(i)&&!Vg(i)){if(!e.h.D&&e._<1)return;Yu(e,i),t&&t.A.l||Fu(e,i)}}function Fu(e,t,r){r===void 0&&(r=!1),!e.l&&e.h.D&&e.m&&Fg(t,r)}function sm(e,t){var r=e[Je];return(r?qi(r):e)[t]}function Rw(e,t){if(t in e)for(var r=Object.getPrototypeOf(e);r;){var n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=Object.getPrototypeOf(r)}}function _i(e){e.P||(e.P=!0,e.l&&_i(e.l))}function am(e){e.o||(e.o=Yg(e.t))}function Vp(e,t,r){var n=zg(t)?hn("MapSet").F(t,r):Hg(t)?hn("MapSet").T(t,r):e.O?function(i,o){var a=Array.isArray(i),c={i:a?1:0,A:o?o.A:Yp(),P:!1,I:!1,R:{},l:o,t:i,k:null,o:null,j:null,C:!1},d=c,h=dl;a&&(d=[c],h=_a);var g=Proxy.revocable(d,h),v=g.revoke,x=g.proxy;return c.k=x,c.j=v,x}(t,r):hn("ES5").J(t,r);return(r?r.A:Yp()).p.push(n),n}function LX(e){return zi(e)||Br(22,e),function t(r){if(!Zn(r))return r;var n,i=r[Je],o=Ws(r);if(i){if(!i.P&&(i.i<4||!hn("ES5").K(i)))return i.t;i.I=!0,n=Mw(r,o),i.I=!1}else n=Mw(r,o);return _o(n,function(a,c){i&&OX(i.t,a)===c||lk(n,a,t(c))}),o===3?new Set(n):n}(e)}function Mw(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return Yg(e)}function AX(){function e(o,a){var c=i[o];return c?c.enumerable=a:i[o]=c={configurable:!0,enumerable:a,get:function(){var d=this[Je];return dl.get(d,o)},set:function(d){var h=this[Je];dl.set(h,o,d)}},c}function t(o){for(var a=o.length-1;a>=0;a--){var c=o[a][Je];if(!c.P)switch(c.i){case 5:n(c)&&_i(c);break;case 4:r(c)&&_i(c)}}}function r(o){for(var a=o.t,c=o.k,d=vs(c),h=d.length-1;h>=0;h--){var g=d[h];if(g!==Je){var v=a[g];if(v===void 0&&!gs(a,g))return!0;var x=c[g],b=x&&x[Je];if(b?b.t!==v:!ck(x,v))return!0}}var k=!!a[Je];return d.length!==vs(a).length+(k?0:1)}function n(o){var a=o.k;if(a.length!==o.t.length)return!0;var c=Object.getOwnPropertyDescriptor(a,a.length-1);if(c&&!c.get)return!0;for(var d=0;d1?y-1:0),S=1;S1?g-1:0),x=1;x=0;i--){var o=n[i];if(o.path.length===0&&o.op==="replace"){r=o.value;break}}i>-1&&(n=n.slice(i+1));var a=hn("Patches").$;return zi(r)?a(r,n):this.produce(r,function(c){return a(c,n)})},e}(),_r=new zX,fk=_r.produce;_r.produceWithPatches.bind(_r);_r.setAutoFreeze.bind(_r);_r.setUseProxies.bind(_r);_r.applyPatches.bind(_r);_r.createDraft.bind(_r);_r.finishDraft.bind(_r);function fl(e){return fl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fl(e)}function HX(e,t){if(fl(e)!=="object"||e===null)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t||"default");if(fl(n)!=="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function YX(e){var t=HX(e,"string");return fl(t)==="symbol"?t:String(t)}function FX(e,t,r){return t=YX(t),t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Nw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $w(e){for(var t=1;t"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error(Ft(1));return r(hk)(e,t)}if(typeof e!="function")throw new Error(Ft(2));var i=e,o=t,a=[],c=a,d=!1;function h(){c===a&&(c=a.slice())}function g(){if(d)throw new Error(Ft(3));return o}function v(C){if(typeof C!="function")throw new Error(Ft(4));if(d)throw new Error(Ft(5));var E=!0;return h(),c.push(C),function(){if(E){if(d)throw new Error(Ft(6));E=!1,h();var w=c.indexOf(C);c.splice(w,1),a=null}}}function x(C){if(!VX(C))throw new Error(Ft(7));if(typeof C.type>"u")throw new Error(Ft(8));if(d)throw new Error(Ft(9));try{d=!0,o=i(o,C)}finally{d=!1}for(var E=a=c,y=0;y"u")throw new Error(Ft(12));if(typeof r(void 0,{type:Vu.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Ft(13))})}function UX(e){for(var t=Object.keys(e),r={},n=0;n"u")throw h&&h.type,new Error(Ft(14));v[b]=E,g=g||E!==C}return g=g||o.length!==Object.keys(d).length,g?v:d}}function Wu(){for(var e=arguments.length,t=new Array(e),r=0;r0&&o[o.length-1])&&(h[0]===6||h[0]===2)){r=0;continue}if(h[0]===3&&(!o||h[1]>o[0]&&h[1]{e.value+=1},decrement:e=>{e.value-=1},incrementByAmount:(e,t)=>{e.value+=t.payload}}}),xK=_K.reducer,SK=lK({reducer:{counter:xK}});dm.createRoot(document.getElementById("root")).render(l.jsx(DM,{store:SK,children:l.jsxs($R,{theme:jX,children:[l.jsx(EM,{}),l.jsx(kP,{router:TX})]})}))});export default bK(); diff --git a/zh-cn/assets/index-93097ad1.js b/zh-cn/assets/index-148365b0.js similarity index 95% rename from zh-cn/assets/index-93097ad1.js rename to zh-cn/assets/index-148365b0.js index a90e605..d6740dd 100644 --- a/zh-cn/assets/index-93097ad1.js +++ b/zh-cn/assets/index-148365b0.js @@ -1,4 +1,4 @@ -const i="/zh-cn/assets/cover-6865ae02.png",e=[i],l={label:"Xline v0.4.1:一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。",cover:"./cover.png",location:"中国香港",author:["达坦科技"],tags:["Xline"],date:"2023-06-21",title:"Xline v0.4.1: A distributed KV store for metadata management"},t=[{label:"Xline 是什么?我们为什么要做 Xline?",level:2},{label:"V0.4.0 版本有什么新功能?",level:3},{label:"欢迎参与到 Xline 项目中",level:2},{label:"相关链接",level:2}],s=`

    封面

    +const e="/zh-cn/assets/cover-6865ae02.png",i=[e],l={label:"Xline v0.4.1:一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。",cover:"./cover.png",location:"中国香港",author:["达坦科技"],tags:["Xline"],date:"2023-06-21",title:"Xline v0.4.1: A distributed KV store for metadata management"},t=[{label:"Xline 是什么?我们为什么要做 Xline?",level:2},{label:"V0.4.0 版本有什么新功能?",level:3},{label:"欢迎参与到 Xline 项目中",level:2},{label:"相关链接",level:2}],s=`

    封面

    Xline 是什么?我们为什么要做 Xline?

    Xline 是一个基于 Curp 协议的,用于管理元数据的分布式 KV 存储。 现有的分布式 KV 存储大多采用 Raft 共识协议,需要两次 RTT 才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。

    但是,当跨数据中心部署时,节点之间的延迟可能是几十或几百毫秒,此时 Raft 协议将成为性能瓶颈。Curp 协议就是为了解决这个问题而设计的。它可以在命令不冲突的情况下减少一个 RTT,从而提高性能。因此,Xline 旨在实现高性能的数据访问和跨数据中心场景下的强一致性。

    @@ -43,4 +43,4 @@ const i="/zh-cn/assets/cover-6865ae02.png",e=[i],l={label:"Xline v0.4.1:一个
  • Curp 相关文章:
    https://medium.com/@datenlord/curp-revisit-the-consensus-protocol-384464be1600
  • Xline 官网:www.xline.cloud
  • -`;export{e as assetURLs,s as default,l as metadata,t as toc}; +`;export{i as assetURLs,s as default,l as metadata,t as toc}; diff --git a/zh-cn/assets/index-1c51c928.js b/zh-cn/assets/index-1c51c928.js new file mode 100644 index 0000000..81756ca --- /dev/null +++ b/zh-cn/assets/index-1c51c928.js @@ -0,0 +1,77 @@ +const t="/zh-cn/assets/image1-0b23a908.png",p=[t],o={label:"精彩回顾 | DatenLord Hackathon 2023圆满结束!",description:"DatenLord Hackathon 2023已经顺利完赛。达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台。我们邀请参赛者为DatenLord的极端场景设计并实现缓存 p2p 传输和同步模块。",location:"中国新疆",date:"2024-01-02",title:"Highlights I DatenLord Hackathon 2023 came to a successful conclusion!"},r=[{label:"评选结果",level:2},{label:"一等奖获奖点评",level:2},{label:"二等奖获奖点评",level:2},{label:"获奖快问快答",level:2},{label:"赛题路演直播预约",level:2}],n=`

    DatenLord Hackathon 2023 已经顺利完赛。达坦科技基于其跨云分布式文件系统 DatenLord 项目,结合 AI 大模型时代背景,搭建了擂台。我们邀请参赛者为 DatenLord 的极端场景设计并实现缓存 p2p 传输和同步模块。

    +

    本届赛题为“Explore the Possibilities”,旨在为感兴趣的队伍提供平台发掘和实现自己的无限可能,同时探索项目的各种可能性。比赛吸引了众多对于 Rust 感兴趣且勇于探索敢于挑战的伙伴前来应战。大家源于五湖四海,各不相同的背景,齐聚于此进行思维的碰撞。达坦科技组赛题评审委员按照代码风格、测试完备性、文档完备性、解决方案设计四个维度进行综合评判,最终做出如下评审结果。

    +

    评选结果

    +

    一等奖:摆摆队 +二等奖:阮老师小分队 +三等奖:无

    +

    一等奖获奖点评

    +

    一等奖,1000 美金:摆摆队-钟弋辰

    +

    评委会点评: +代码风格:3 +测试完备性:3.5 +文档完备性:4 +解决方案设计:4

    +

    综述: 摆摆队提出了一个比较全面的解决策略,涵盖了多种方法,并对各种方法进行了比较测试。文档方面,内容详尽,辅以图解,增强了理解度。然而,文档在突出问题关键和核心思想方面稍显不足,未能充分抓住题目的关键点。在代码规范方面,存在一定的可读性问题。一些复杂或潜在风险的代码段缺乏必要的注释说明,整体注释较少,代码清晰度有待提高。

    +

    代码链接: +https://github.com/datenlord/Hackathon-2023/pull/3

    +

    二等奖获奖点评

    +

    二等奖,700 美金:阮老师小分队-吕波

    +

    评委会点评: +代码风格:3.5 +测试完备性:2.5 +文档完备性:3.5 +解决方案设计:3

    +

    综述: 文件分片传输以及使用 tracker 记录各节点的状态的思路很好,在文档中也提出了希望能实现但因时间紧迫而未能完成的特性。项目本身可以考虑在性能上做进一步优化,如序列化方案、网络协议、并发性等方面。相信如果有足够的时间,这个项目的完成度可以更高。

    +

    代码链接: +https://github.com/datenlord/Hackathon-2023/pull/2

    +

    获奖快问快答

    +
      +
    1. 为什么选择参加这次的 DatenLord Hackathon 活动?这次的赛题吸引你的点是什么?
    2. +
    +

    钟弋辰: 去年也参加了 datenlord 的赛题,去年的是一个单机数据结构的优化,这次的重点在分布式缓存上。最近读研也在做一些分布式计算和存储方面的工作,因此想尝试一下。赛题本身就是挺吸引我的一个点,因为缓存实际上要考虑很多东西,不同的负载模式,整体系统的资源情况,不同的方案实际上各有权衡。甚至后续进一步做优化有 idea 的话可以发一下论文。

    +

    吕波: 本次 DatenLord Hackathon 活动提供了一个在深度学习研究方向上非常有趣并且吸引我的场景,在大模型数据集读取或者是大规模分布式训练的场景下,加速数据读取的速度。该赛题提供了一个非常直观的解决方案——利用 p2p 加速数据读取。我对分布式系统和数据访问加速的领域很感兴趣。

    +

    这次的赛题吸引我主要是因为它提出了一个在多云多数据中心场景下进行数据访问优化的挑战,并且需要设计和实现缓存之间的 p2p 传输和同步模块,这是一个具有挑战性且有实际应用意义的问题。该赛题也对我后期理解和实现分布式训练有很大的帮助,因此想要借助这个机会熟悉这方面的技术实现。

    +
      +
    1. 在设计方案的时候一开始有想到哪些思路、或灵感?最后是如何做取舍的?
    2. +
    +

    钟弋辰: 总体来说一个优化点在如何知道缓存的位置,以更高效的命中缓存。另一个是缓存节点本身也是对外提供缓存的角色,如何均衡多个节点的资源和网络负载也是一个问题。还有一个问题是从少量节点将缓存扩展到多个节点这一过程,之前读过一篇阿里云镜像分发的论文,使用一些多级树形分发方法能更好的利用系统带宽。另外就是单机的缓存策略。另外也是去读了一些分布式缓存的论文,但是时间有限,看到的一些论文只考虑了数据的静态分布,还有很大的计算复杂度,这类论文感觉实际上意义不是很大,因为真实环境是动态变化的,而且需要在线的实时响应。另外涉及到数据写还可以考虑一些数据一致性的工作。

    +

    最终想的还是一个比较初步简单的思路,就是用中心节点来负责监控缓存位置以及调度缓存请求;对应到的是上述优化问题中的第一和第二个。同时进一步的优化可以考虑多个中心节点,以分摊中心节点的负载。

    +

    吕波: 在设计方案的初期,我主要参考现有的一些现有的成熟 p2p 实现方案,包括:

    +

    (1)使用分布式哈希表(DHT)来管理缓存节点和文件信息的分布。

    +

    (2)使用 mDNS(多播 DNS)来实现节点的发现和通信。

    +

    (3)结合 gossip 协议,将节点的缓存信息广播出去,减少对中心化 tracker 的依赖。

    +

    (4)使用 HTTP 协议集成 Tracker 和 Node,方便测试和观察集群状态,并且支持局域网和广域网条件下的节点信息同步。

    +

    在现有技术的调研过程中,首先考虑了一个基于现有 p2p 基础库的方案,即使用 libp2p-rust 来实现节点发现,消息同步的机制。另外,也考虑使用原生 HTTP 的方式进行数据交互,即 Tracker-Node 的方式。我在做取舍时考虑到实现的难度、系统的可扩展性和性能等因素,决定先实现基本的 Tracker/Node 的方式支持数据访问,同时 Tracker 节点可以集成到任意的 Node 节点当中,并且后期可以通过 Datenlord 提供的分布式 KV 存储实现数据同步。当然,也便于理解和实现,以快速获得有效的结果。

    +
      +
    1. 在具体设计和实现本次赛题的过程中,觉得最具挑战的部分是什么?后来是如何解决的?
    2. +
    +

    钟弋辰: 测试环境和实验设计吧,之前其实很不擅长做部署运维,很多时候都手动去操作,浪费很多时间,但在最近的学习过程中去探索了一下完整测试部署方案,使用 ansible 可以大大提高效率,也为最终整体项目打好了一个基础。中间还有一个是 docker 配置相关的,由于我采用了 quic udp 的协议,docker 配置相较于 tcp 有所不同,也是搜了很久才解决。实验设计的话,一开始是摸不着头脑的,后来就先做,然后采用循序渐进的方法,通过结合分析来暴露出 baseline 方法的不足。

    +

    吕波: 在具体设计和实现本次赛题的过程中,我觉得最具挑战的部分是构建可靠的 p2p 传输协议和保证数据一致性。由于涉及到多个节点之间的通信和文件分片的管理,需要解决节点之间的同步和协作问题。为了解决这个挑战,我采取了以下措施:

    +

    (1)设计并实现了一个基于 HTTP(基于 axum 的异步 HTTP 库)的 p2p 协议,确保节点之间能够高效地传输文件和同步信息。

    +

    (2)在节点中引入缓存机制,存储种子信息、分片信息、下载记录等,以提高数据访问速度和减轻后端持久化存储的读取压力。

    +

    (3)实现了心跳机制和定时线程,维护在线节点的列表,确保节点的可用性和协同工作。

    +

    通过上述几种方式,我能够通过简易的 HTTP 客户端查询集群的状态,并且能够调试节点的问题,最后也便于对整个集群系统进行性能测试。

    +
      +
    1. Hackathon 的完成时间非常紧迫,在最终提交的设计上,是如何做权衡的?你的设计最大的亮点是什么?
    2. +
    +

    钟弋辰: 总体工作一是要设计基本框架,包括整体系统的模块接口统一,模块间如何相互访问,利用宏来提高实现效率,每个模块对应的 rpc;二是实现具体模块:p2p,rpc 的封装;metric 中心节点观测模块;文件系统模拟 fsnode;缓存路由 cacherouter;仿真用户 sim_user;测试部署脚本。一部分工作是继承自我正在做的论文项目,也相对减轻了我这次比赛的工作量。

    +

    权衡的话就是没有实现一些进一步的优化了,比如单机缓存策略本来计划实现一下 s3-fifo;还有本来准备做一下多中心节点。

    +

    最大的亮点可能就是中心缓存路由这个思路吧,在实验上有一定的优势效果,总的来说其实也只是一个很简单的思路。

    +

    吕波: 在 Hackathon 的完成时间非常紧迫的情况下,对于最终提交的设计,我主要针对核心功能点进行实现,以保证整体 pipline 能够按时完成,并且考虑一定的可扩展性便于后期的优化:

    +

    (1)确保基本功能的完整性和正确性,即实现缓存之间的 p2p 传输和同步模块。

    +

    (2)运用现有的 HTTP 协议进行接口设计和测试,以快速验证设计的可行性。

    +

    (3)着重实现核心特点,如代码模块清晰、功能复用、节点的上线和心跳维护、下载任务的分发等。

    +

    我认为我的设计最大的亮点是采用了 p2p-with-tracker 的方式,一方面这种方式可以快速融入到 Datenlord 的系统中,同时结合分布式 KV 存储支持数据访问结合了中心化的 tracker 节点和分布式的 p2p 传输,以实现高效的数据访问和加速,在系统稳定后基本上都可以从周围在线节点中获取,新增节点可以直接查到周围节点的分片并直接下载,避免直接向 S3 请求文件。最后,整体系统调试简单,部署复现也比较容易,方面后期对系统进行扩充和移植。

    +
      +
    1. 参加此次 DatenLord Hackachon 活动,你有哪些收获或感受?
    2. +
    +

    钟弋辰: Rust 很棒,喜欢也很享受做这类优化研究结合工程实现的工作,但也是一个需要时间积累的过程。另外感觉参与的人比较少,希望能有更多小伙伴喜欢这门语言,参与相关的工作。

    +

    吕波: 非常荣幸能够参与到 Datenlord 此次比赛当中,并且结合当下热点问题进行赛题设计,另外还简化了部分任务方便我快速上手。在我目前的研究方向中,也曾经考虑过分布式并行训练的一些问题,此次赛题也给我提供了很大的思考价值,也让我对分布式系统和数据访问加速领域有了更深入的了解。

    +

    在项目实现上,参加本次 Hackathon 让我在有限的时间内面对挑战并解决问题的能力得到了锻炼和提升,在此次比赛中,由于参与该项目时间较晚,准备工作可能不是非常充分,需要在实践的过程中学习 Rust 相关的领域知识和 p2p 的技术实现,学会如何在紧迫的时间限制下进行设计和实现,并在压力下保持高效率和创造力。

    +

    参加 DatenLord Hackathon 活动是一次充满挑战和收获的经历。我从中学到了许多宝贵的经验和知识,这将对我的个人和职业发展产生积极的影响,也希望能够有机会持续参与到 Datenlord 的社区贡献当中,继续深挖领域知识~

    +

    赛题路演直播预约

    +

    赛题路演直播预约

    +

    最终获得优胜奖的两支队伍,将于 2024 年 1 月 7 日(周日) 上午 10:30 在线上举办一场空中路演。欢迎所有的参赛队伍和对赛题感兴趣的伙伴,届时参与聆听获奖小组的分享。分享包括他们的解题思路,碰到的难点和挑战,以及如何应对的方法和设计亮点。

    +

    欢迎您预约直播,或者登陆腾讯会议观看直播:

    +

    会议号:729 465 619

    +

    图片

    `;export{p as assetURLs,n as default,o as metadata,r as toc}; diff --git a/zh-cn/assets/index-24fab036.js b/zh-cn/assets/index-1c57aced.js similarity index 93% rename from zh-cn/assets/index-24fab036.js rename to zh-cn/assets/index-1c57aced.js index aff0a01..457eab3 100644 --- a/zh-cn/assets/index-24fab036.js +++ b/zh-cn/assets/index-1c57aced.js @@ -1,4 +1,4 @@ -const n="/zh-cn/assets/image1-b917417e.jpg",o="/zh-cn/assets/image1-50beaba8.png",a=[n,o],p={label:"倒计时5天:SpinalHDL应用前景探索线上研讨会",description:"SpinalHDL是一种开源的高级硬件描述语言,它可以作为VHDL或Verilog的替代,Charles Papon 在2014年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于Scala的DSL,能够借助现有的Scala语言特性和开发工具提供强大、易用、高效的硬件设计能力。达坦科技采用硬件加速提升存储性能,目前采用FPGA实现存储相关场景的性能加速。SpinalHDL是达坦科技在产品中使用的硬件描述语言之一,因此,达坦科技也一直热心于推广SpinalHDL在业界的落地应用。在2023年12月10日,我们将联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。",location:"中国香港",date:"2023-12-05",title:"Countdown to 5 days: SpinalHDL application prospect exploration online seminar"},t=[{label:"Tooling and flow:",level:2},{label:"Projects :",level:2}],s=`

    SpinalHDL 是一种开源的高级硬件描述语言,它可以作为 VHDL 或 Verilog 的替代,Charles Papon 在 2014 年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于 Scala 的 DSL,能够借助现有的 Scala 语言特性和开发工具提供强大、易用、高效的硬件设计能力。

    +const n="/zh-cn/assets/image1-b917417e.jpg",o="/zh-cn/assets/image1-50beaba8.png",p=[n,o],t={label:"倒计时5天:SpinalHDL应用前景探索线上研讨会",description:"SpinalHDL是一种开源的高级硬件描述语言,它可以作为VHDL或Verilog的替代,Charles Papon 在2014年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于Scala的DSL,能够借助现有的Scala语言特性和开发工具提供强大、易用、高效的硬件设计能力。达坦科技采用硬件加速提升存储性能,目前采用FPGA实现存储相关场景的性能加速。SpinalHDL是达坦科技在产品中使用的硬件描述语言之一,因此,达坦科技也一直热心于推广SpinalHDL在业界的落地应用。在2023年12月10日,我们将联合SpinalHDL社区及该语言的创建者 Charles Papon 举办 《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。",location:"中国香港",date:"2023-12-05",title:"Countdown to 5 days: SpinalHDL application prospect exploration online seminar"},a=[{label:"Tooling and flow:",level:2},{label:"Projects :",level:2}],s=`

    SpinalHDL 是一种开源的高级硬件描述语言,它可以作为 VHDL 或 Verilog 的替代,Charles Papon 在 2014 年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于 Scala 的 DSL,能够借助现有的 Scala 语言特性和开发工具提供强大、易用、高效的硬件设计能力。

    达坦科技采用硬件加速提升存储性能,目前采用 FPGA 实现存储相关场景的性能加速。SpinalHDL 是达坦科技在产品中使用的硬件描述语言之一,因此,达坦科技也一直热心于推广 SpinalHDL 在业界的落地应用

    在 2023 年 12 月 10 日,我们将联合 SpinalHDL 社区及该语言的创建者 Charles Papon 举办 《2023 SpinalHDL 应用前景探索》 的线上研讨会,分为两个 Track。

    Tooling and flow:

    @@ -21,4 +21,4 @@ Explore the SpinalHDL Landscape

    会议链接:
    https://zoom.us/j/82302372789?pwd=OYsFCbiW06KqC4U83ZKsZwefM75gJr.1

    开源硬件和敏捷开发感兴趣的朋友,可以添加达坦科技小助手的微信,加入达坦科技硬件群。

    -

    图片

    `;export{a as assetURLs,s as default,p as metadata,t as toc}; +

    图片

    `;export{p as assetURLs,s as default,t as metadata,a as toc}; diff --git a/zh-cn/assets/index-8c16a843.js b/zh-cn/assets/index-1dde53bb.js similarity index 97% rename from zh-cn/assets/index-8c16a843.js rename to zh-cn/assets/index-1dde53bb.js index 529f710..23a48ca 100644 --- a/zh-cn/assets/index-8c16a843.js +++ b/zh-cn/assets/index-1dde53bb.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/image1-145af1bc.png",a="/zh-cn/assets/image2-b5b0ee19.png",l="/zh-cn/assets/image3-204919ac.png",p="/zh-cn/assets/image4-e50f112d.png",t="/zh-cn/assets/image5-cdb8d1de.png",i=[e,a,l,p,t],o={label:"数据库隔离级别及MVCC",description:"数据库在同时处理多个事务时需要决定事务之间能否看到对方的修改,能看到多少等等。根据隔离的严格程度,从严到松可以分为 Serializable, Repeatable reads, Read committed, Read uncommitted。我们用下面这个 KV 存储的例子来解释这四个隔离级别。KV 存储的初始状态如下:",location:"中国香港",tags:["Xline"],date:"2023-02-16",title:"Database isolation level and MVCC"},n=[{label:"数据库隔离级别介绍",level:2},{label:"Read uncommitted",level:3},{label:"Repeatable read",level:3},{label:"Serializable",level:3},{label:"Snapshot 隔离级别及 MVCC",level:2},{label:"一点联想",level:2},{label:"总结",level:2}],s=`

    数据库隔离级别介绍

    +const e="/zh-cn/assets/image1-145af1bc.png",a="/zh-cn/assets/image2-b5b0ee19.png",l="/zh-cn/assets/image3-204919ac.png",p="/zh-cn/assets/image4-e50f112d.png",t="/zh-cn/assets/image5-cdb8d1de.png",i=[e,a,l,p,t],n={label:"数据库隔离级别及MVCC",description:"数据库在同时处理多个事务时需要决定事务之间能否看到对方的修改,能看到多少等等。根据隔离的严格程度,从严到松可以分为 Serializable, Repeatable reads, Read committed, Read uncommitted。我们用下面这个 KV 存储的例子来解释这四个隔离级别。KV 存储的初始状态如下:",location:"中国香港",tags:["Xline"],date:"2023-02-16",title:"Database isolation level and MVCC"},o=[{label:"数据库隔离级别介绍",level:2},{label:"Read uncommitted",level:3},{label:"Repeatable read",level:3},{label:"Serializable",level:3},{label:"Snapshot 隔离级别及 MVCC",level:2},{label:"一点联想",level:2},{label:"总结",level:2}],s=`

    数据库隔离级别介绍

    数据库在同时处理多个事务时需要决定事务之间能否看到对方的修改,能看到多少等等。根据隔离的严格程度,从严到松可以分为 Serializable, Repeatable reads, Read committed, Read uncommitted。我们用下面这个 KV 存储的例子来解释这四个隔离级别。KV 存储的初始状态如下:

    Table 1:

    图片

    @@ -43,4 +43,4 @@ const e="/zh-cn/assets/image1-145af1bc.png",a="/zh-cn/assets/image2-b5b0ee19.png

    本文为大家介绍了数据库的四种隔离级别,分别用例子介绍了不同隔离级别之间的区别。然后详细介绍了 Snapshot 这个使用最广泛的隔离级别,并且说明了其最长用的实现方式 MVCC。最后结合了 MVCC 和 无锁数据结构的内存管理机制进行了对比和探讨。

    达坦科技 Xline 项目专注于跨云元数据管理 KV 存储,并且目前正在实践应用 MVCC 做数据库隔离。如果您想了解更多相关信息,请参考 Xline GitHub 链接:
    https://github.com/datenlord/Xline

    -

    本周次条是 Xline 最新版本的发布,请阅读《Xline v.0.2.0:一个用于元数据管理的分布式 KV 存储》。

    `;export{i as assetURLs,s as default,o as metadata,n as toc}; +

    本周次条是 Xline 最新版本的发布,请阅读《Xline v.0.2.0:一个用于元数据管理的分布式 KV 存储》。

    `;export{i as assetURLs,s as default,n as metadata,o as toc}; diff --git a/zh-cn/assets/index-494dac65.js b/zh-cn/assets/index-1e192479.js similarity index 97% rename from zh-cn/assets/index-494dac65.js rename to zh-cn/assets/index-1e192479.js index 803af9c..5bcdc80 100644 --- a/zh-cn/assets/index-494dac65.js +++ b/zh-cn/assets/index-1e192479.js @@ -1,4 +1,4 @@ -const l="/zh-cn/assets/cover-6865ae02.png",e=[l],i={label:"Xline v0.4.0:一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。",cover:"./cover.png",location:"中国香港",author:["期待你贡献的"],tags:["Xline"],date:"2023-05-11",title:"Xline v0.4.0: A distributed KV store for metadata management"},t=[{label:"Xline 是什么?我们为什么要做 Xline?",level:2},{label:"V0.4.0 版本有什么新功能?",level:3},{label:"欢迎参与到 Xline 项目中",level:2},{label:"相关链接",level:2}],n=`

    封面

    +const l="/zh-cn/assets/cover-6865ae02.png",e=[l],i={label:"Xline v0.4.0:一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。",cover:"./cover.png",location:"中国香港",author:["期待你贡献的"],tags:["Xline"],date:"2023-05-11",title:"Xline v0.4.0: A distributed KV store for metadata management"},t=[{label:"Xline 是什么?我们为什么要做 Xline?",level:2},{label:"V0.4.0 版本有什么新功能?",level:3},{label:"欢迎参与到 Xline 项目中",level:2},{label:"相关链接",level:2}],s=`

    封面

    Xline 是什么?我们为什么要做 Xline?

    Xline 是一个基于 Curp 协议的,用于管理元数据的分布式 KV 存储。 现有的分布式 KV 存储大多采用 Raft 共识协议,需要两次 RTT 才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。

    但是,当跨数据中心部署时,节点之间的延迟可能是几十或几百毫秒,此时 Raft 协议将成为性能瓶颈。Curp 协议就是为了解决这个问题而设计的。它可以在命令不冲突的情况下减少一个 RTT,从而提高性能。因此,Xline 旨在实现高性能的数据访问和跨数据中心场景下的强一致性。

    @@ -37,4 +37,4 @@ Xline 的建设需要每一位对此感兴趣且愿意付出的你们的参与
  • Curp 相关文章:
    https://medium.com/@datenlord/curp-revisit-the-consensus-protocol-384464be1600
  • Xline 官网:www.xline.cloud
  • -`;export{e as assetURLs,n as default,i as metadata,t as toc}; +`;export{e as assetURLs,s as default,i as metadata,t as toc}; diff --git a/zh-cn/assets/index-1e4d90fc.js b/zh-cn/assets/index-1f712296.js similarity index 92% rename from zh-cn/assets/index-1e4d90fc.js rename to zh-cn/assets/index-1f712296.js index d453460..966fd1e 100644 --- a/zh-cn/assets/index-1e4d90fc.js +++ b/zh-cn/assets/index-1f712296.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-0645adbc.jpg",o="/zh-cn/assets/image1-4a25d469.jpg",e="/zh-cn/assets/image2-ee430ce0.png",n=[t,o,e],s={label:"达坦科技受邀在2022中国计算机学会芯片大会做硬件加速研究分享",description:"2022年7月29日至7月30日,由中国计算机学会(CCF)集成电路设计专业委员会、容错计算专业委员会、体系结构专业委员会和信息存储技术专业委员会联合举办的学术大会中国计算机学会芯片大会在江苏南京如期圆满举行。",cover:"./cover.jpg",location:"新加坡",date:"2022-08-04",title:"Dartan Technology Invited to Do Hardware Acceleration Research Sharing at 2022 China Computer Society Chip Conference"},a=[],c=`

    封面

    +const t="/zh-cn/assets/cover-0645adbc.jpg",o="/zh-cn/assets/image1-4a25d469.jpg",e="/zh-cn/assets/image2-ee430ce0.png",s=[t,o,e],a={label:"达坦科技受邀在2022中国计算机学会芯片大会做硬件加速研究分享",description:"2022年7月29日至7月30日,由中国计算机学会(CCF)集成电路设计专业委员会、容错计算专业委员会、体系结构专业委员会和信息存储技术专业委员会联合举办的学术大会中国计算机学会芯片大会在江苏南京如期圆满举行。",cover:"./cover.jpg",location:"新加坡",date:"2022-08-04",title:"Dartan Technology Invited to Do Hardware Acceleration Research Sharing at 2022 China Computer Society Chip Conference"},n=[],i=`

    封面

    2022 年 7 月 29 日至 7 月 30 日,由中国计算机学会(CCF)集成电路设计专业委员会、容错计算专业委员会、体系结构专业委员会和信息存储技术专业委员会联合举办的学术大会中国计算机学会芯片大会在江苏南京如期圆满举行。

    2022 年 CCF 芯片大会由中科院计算所孙凝晖院士、中科院微电子所刘明院士担任大会主席,集结国内外知名专家学者,围绕智能化时代的芯片技术主题,论述芯片领域国际最前沿、权威和新颖的学术观点,包括芯片设计与 EDA、新型体系架构、前沿存储技术、容错计算应用等方面的关键技术和应用前景。

    达坦科技致力于软硬件深度融合的跨云存储平台,其硬件负责人吴迪带领研发团队在今年的Xilinx 全球自适应计算挑战赛上刚获得Big Data Analytics 赛道一等奖。此次,达坦科技提交的论文“基于 SpinalHDL 和 Cocotb 的 Poseidon 哈希算法硬件加速器的敏捷开发”也成功入选,并受邀在大会做分享。达坦科技的翁万正在 30 日下午领域专用架构与敏捷设计论文分组,向与会者介绍了研究背景、方法技术和实验结果。

    @@ -6,4 +6,4 @@ const t="/zh-cn/assets/cover-0645adbc.jpg",o="/zh-cn/assets/image1-4a25d469.jpg"

    Poseidon 是一种全新的面向零知识证明的(ZKP:Zero-Knowledge Proof)密码学协议设计的哈希算法。相比经典的 SHA-256 和 Keccak 哈希函数, 在零知识证明的应用场景下, Poseidon 能够显著地减少哈希函数的约束条件进而降低证明的计算复杂度, 极大提升零知识证明系统的运行效率。Poseidon 哈希函数的计算涉及高位宽模乘和矩阵乘法运算, 需要消耗大量计算资源。为了提升哈希计算的效率, 达坦基于流水线和折叠技术提出了一种面向 FPGA 平台的 Poseidon 硬件加速器架构。

    在该整体架构下, 针对高位宽模乘, 达坦科技基于 Karatsuba 乘法拆分算法实现了一种高性能蒙哥马利模乘器。针对函数中的向量—矩阵乘法计算, 达坦科技基于脉动矩阵结构提出了一种高吞吐率的硬件实现。最终, 在搭载有 Xilinx Virtex Ultrascale+ FPGA 芯片的 Varium C1100 加速卡上, 硬件加速器每秒最高能完成 0.99M 次哈希计算, 达到 AMD Ryzen 5900X 处理器 Poseidon 计算速度的两倍。

    图片

    -

    除了打造全新的广域网共识算法,达坦科技专注于自研面向存储网络的硬件加速,以期软硬件的深度融合能提升存储的性能。目前达坦科技的硬件项目 TRIDENT,已经在 Github 上开源,欢迎参与讨论:https://github.com/datenlord/TRIDENT。

    `;export{n as assetURLs,c as default,s as metadata,a as toc}; +

    除了打造全新的广域网共识算法,达坦科技专注于自研面向存储网络的硬件加速,以期软硬件的深度融合能提升存储的性能。目前达坦科技的硬件项目 TRIDENT,已经在 Github 上开源,欢迎参与讨论:https://github.com/datenlord/TRIDENT。

    `;export{s as assetURLs,i as default,a as metadata,n as toc}; diff --git a/zh-cn/assets/index-dfd283a0.js b/zh-cn/assets/index-2530d06d.js similarity index 95% rename from zh-cn/assets/index-dfd283a0.js rename to zh-cn/assets/index-2530d06d.js index 3bca56e..6fe7046 100644 --- a/zh-cn/assets/index-dfd283a0.js +++ b/zh-cn/assets/index-2530d06d.js @@ -1,4 +1,4 @@ -const l="/zh-cn/assets/image1-50beaba8.png",a=[l],n={label:"2023年SpinalHDL应用前景探索线上研讨会----征集演讲嘉宾",description:"SpinalHDL是一种开源的高级硬件描述语言,它可以作为VHDL或Verilog的替代,Charles Papon 在2014年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于Scala的DSL,能够借助现有的Scala语言特性和开发工具提供强大、易用、高效的硬件设计能力。",location:"中国香港",date:"2023-11-09",title:"Exploring the Future of SpinalHDL Applications in 2023 Online Workshop"},p=[{label:"SpinalHDL 是什么?",level:2},{label:"达坦科技是谁?",level:2},{label:"为什么达坦科技要推广 SpinalHDL?",level:2},{label:"Call For Presenter",level:2}],i=`

    SpinalHDL 是什么?

    +const l="/zh-cn/assets/image1-50beaba8.png",n=[l],a={label:"2023年SpinalHDL应用前景探索线上研讨会----征集演讲嘉宾",description:"SpinalHDL是一种开源的高级硬件描述语言,它可以作为VHDL或Verilog的替代,Charles Papon 在2014年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于Scala的DSL,能够借助现有的Scala语言特性和开发工具提供强大、易用、高效的硬件设计能力。",location:"中国香港",date:"2023-11-09",title:"Exploring the Future of SpinalHDL Applications in 2023 Online Workshop"},p=[{label:"SpinalHDL 是什么?",level:2},{label:"达坦科技是谁?",level:2},{label:"为什么达坦科技要推广 SpinalHDL?",level:2},{label:"Call For Presenter",level:2}],i=`

    SpinalHDL 是什么?

    SpinalHDL 是一种开源的高级硬件描述语言,它可以作为 VHDL 或 Verilog 的替代,Charles Papon 在 2014 年创建后,伴随着数年来开源硬件设计的蓬勃发展,在多方面显露出优势,譬如:它专注于高效的硬件描述,而不是事件驱动;作为一种基于 Scala 的 DSL,能够借助现有的 Scala 语言特性和开发工具提供强大、易用、高效的硬件设计能力。

    达坦科技是谁?

    达坦科技(DatenLord)致力于打造高性能跨云存储,其通过软硬件深度融合的方式打破云之间的壁垒,实现高性能跨云数据访问,提供海量异地、异构数据的统一存储访问机制,为云上应用提供高性能安全存储支持。

    @@ -18,4 +18,4 @@ const l="/zh-cn/assets/image1-50beaba8.png",a=[l],n={label:"2023年SpinalHDL应

    如您有意向社区,以及 SpinalHDL 的爱好者做分享,请于 2023 年 11 月 30 日之前,直接将姓名(或 GitHub 昵称)+ 议题摘要提交至以下 GitHub 链接:
    https://github.com/SpinalHDL/SpinalHDL/discussions/1235

    图片

    -

    对开源硬件感兴趣的朋友可以添加达坦科技小助手微信加入达坦科技硬件群。

    `;export{a as assetURLs,i as default,n as metadata,p as toc}; +

    对开源硬件感兴趣的朋友可以添加达坦科技小助手微信加入达坦科技硬件群。

    `;export{n as assetURLs,i as default,a as metadata,p as toc}; diff --git a/zh-cn/assets/index-ab5d85b7.js b/zh-cn/assets/index-284b9c1c.js similarity index 96% rename from zh-cn/assets/index-ab5d85b7.js rename to zh-cn/assets/index-284b9c1c.js index c9d9056..a651103 100644 --- a/zh-cn/assets/index-ab5d85b7.js +++ b/zh-cn/assets/index-284b9c1c.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-99998007.jpg",n="/zh-cn/assets/image1-6f9cec09.jpg",t=[e,n],s={label:"精彩回顾|硬件敏捷开发与验证方法学研讨",description:"8月27日,作为2022年第二届RISC-V中国峰会的同期活动,达坦科技成功举办硬件敏捷开发与验证方法学研讨。虽然是线上分享活动,但大家热情依旧,会后在“硬件敏捷开发和验证方法学讨论群”中积极互动提问。长达四小时的就新一代HDL在数字芯片设计方面的实践经验分享,究竟碰撞出了什么新的火花呢?下面我们一起来回顾研讨会的精彩内容。",cover:"./cover.jpg",location:"中国香港",date:"2022-09-08",title:"Discussion on Hardware Agile Development and Verification Methodology"},o=[{label:"芯片敏捷设计与验证之路",level:2},{label:"香山处理器敏捷开发与验证实践",level:2},{label:"通过 Chainsaw 实现硬件算子敏捷开发",level:2},{label:"Scala 在 IC 开发中的应用",level:2},{label:"NaxRiscv CPU: Introduction and Extension Demonstration",level:2},{label:"结束语",level:2}],a=`

    封面

    +const n="/zh-cn/assets/cover-99998007.jpg",s="/zh-cn/assets/image1-6f9cec09.jpg",t=[n,s],e={label:"精彩回顾|硬件敏捷开发与验证方法学研讨",description:"8月27日,作为2022年第二届RISC-V中国峰会的同期活动,达坦科技成功举办硬件敏捷开发与验证方法学研讨。虽然是线上分享活动,但大家热情依旧,会后在“硬件敏捷开发和验证方法学讨论群”中积极互动提问。长达四小时的就新一代HDL在数字芯片设计方面的实践经验分享,究竟碰撞出了什么新的火花呢?下面我们一起来回顾研讨会的精彩内容。",cover:"./cover.jpg",location:"中国香港",date:"2022-09-08",title:"Discussion on Hardware Agile Development and Verification Methodology"},o=[{label:"芯片敏捷设计与验证之路",level:2},{label:"香山处理器敏捷开发与验证实践",level:2},{label:"通过 Chainsaw 实现硬件算子敏捷开发",level:2},{label:"Scala 在 IC 开发中的应用",level:2},{label:"NaxRiscv CPU: Introduction and Extension Demonstration",level:2},{label:"结束语",level:2}],a=`

    封面

    8 月 27 日,作为 2022 年第二届 RISC-V 中国峰会的同期活动,达坦科技成功举办硬件敏捷开发与验证方法学研讨。虽然是线上分享活动,但大家热情依旧,会后在“硬件敏捷开发和验证方法学讨论群”中积极互动提问。长达四小时的就新一代 HDL 在数字芯片设计方面的实践经验分享,究竟碰撞出了什么新的火花呢?下面我们一起来回顾研讨会的精彩内容。

    芯片敏捷设计与验证之路

    华南理工大学计算机科学与工程学院赖晓铮副教授首先分享了 “让硬件设计像软件设计一样简单”的愿景,即开发人员编写的代码只占工作量的 10%,剩下 90%由开源芯片生态系统提供。

    @@ -23,4 +23,4 @@ const e="/zh-cn/assets/cover-99998007.jpg",n="/zh-cn/assets/image1-6f9cec09.jpg"

    请点击如下链接:
    https://t.elecfans.com/live/2113.html收看本次研讨会的回放。
    也欢迎添加小助手微信,加入“硬件敏捷开发和验证方法学讨论群”,进行延伸讨论与互动,并第一时间获得后续相关活动的讯息。

    -

    图片

    `;export{t as assetURLs,a as default,s as metadata,o as toc}; +

    图片

    `;export{t as assetURLs,a as default,e as metadata,o as toc}; diff --git a/zh-cn/assets/index-69ce89cf.js b/zh-cn/assets/index-28dd2373.js similarity index 95% rename from zh-cn/assets/index-69ce89cf.js rename to zh-cn/assets/index-28dd2373.js index dc1b8d9..cec9790 100644 --- a/zh-cn/assets/index-69ce89cf.js +++ b/zh-cn/assets/index-28dd2373.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/image1-b170e804.jpg",o="/zh-cn/assets/image2-29d090cb.png",a="/zh-cn/assets/image1-50beaba8.png",n=[t,o,a],e={label:"叮!您收到了一封来自达坦科技的Hackthon邀请函",description:"DatenLord Hackathon 2023正式启动!达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来,抓住机遇,创造奇迹!",location:"中国香港",date:"2023-11-17",title:"Ding! You've received a Hackthon invitation from Dartan Technologies!"},s=[{label:"Hackathon2023",level:2},{label:"主题",level:2},{label:"大赛时间线",level:2},{label:"背景介绍",level:2},{label:"赛题介绍",level:2},{label:"评估标准",level:2},{label:"赛题宣讲会",level:2}],l=`

    Hackathon2023

    +const t="/zh-cn/assets/image1-b170e804.jpg",o="/zh-cn/assets/image2-29d090cb.png",a="/zh-cn/assets/image1-50beaba8.png",n=[t,o,a],e={label:"叮!您收到了一封来自达坦科技的Hackthon邀请函",description:"DatenLord Hackathon 2023正式启动!达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约!本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来,抓住机遇,创造奇迹!",location:"中国香港",date:"2023-11-17",title:"Ding! You've received a Hackthon invitation from Dartan Technologies!"},l=[{label:"Hackathon2023",level:2},{label:"主题",level:2},{label:"大赛时间线",level:2},{label:"背景介绍",level:2},{label:"赛题介绍",level:2},{label:"评估标准",level:2},{label:"赛题宣讲会",level:2}],s=`

    Hackathon2023

    DatenLord Hackathon 2023 正式启动! 达坦科技基于其跨云分布式文件系统 DatenLord 项目,结合 AI 大模型时代背景,搭建了擂台,在此正式向您发出邀约!

    本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不仅可以尽情施展才华、与来自全国各地优秀的青年才俊们同台 PK,更将有机会与优秀的评委教师对话交流。Clock is Ticking!无需犹豫,行动起来,抓住机遇,创造奇迹!

    主题

    @@ -31,4 +31,4 @@ const t="/zh-cn/assets/image1-b170e804.jpg",o="/zh-cn/assets/image2-29d090cb.png

    如有任何问题欢迎联系达坦科技微信小助手:DatenLord_Tech 或发送邮件至
    info@datenlord.com

    图片

    -

    让我们一起在 Hackathon2023 的舞台上尽情释放创意的火花,期待与优秀的你碰撞出新的想法!

    `;export{n as assetURLs,l as default,e as metadata,s as toc}; +

    让我们一起在 Hackathon2023 的舞台上尽情释放创意的火花,期待与优秀的你碰撞出新的想法!

    `;export{n as assetURLs,s as default,e as metadata,l as toc}; diff --git a/zh-cn/assets/index-2c990cf9.js b/zh-cn/assets/index-2ee8a4ba.js similarity index 99% rename from zh-cn/assets/index-2c990cf9.js rename to zh-cn/assets/index-2ee8a4ba.js index be35a8e..5a6af97 100644 --- a/zh-cn/assets/index-2c990cf9.js +++ b/zh-cn/assets/index-2ee8a4ba.js @@ -1,4 +1,4 @@ -const i="/zh-cn/assets/image1-9e1613a7.png",o="/zh-cn/assets/image2-7b7b20fc.png",e="/zh-cn/assets/image3-b15b4acb.png",n="/zh-cn/assets/image4-e5ed8af3.png",l="/zh-cn/assets/image5-74f0a1a0.png",t="/zh-cn/assets/image6-5ab2a1df.png",a="/zh-cn/assets/image7-bfc65522.png",p="/zh-cn/assets/image8-462cfa81.png",s="/zh-cn/assets/image9-ecae19a3.png",d="/zh-cn/assets/image10-1092617f.png",P="/zh-cn/assets/image11-2508217f.png",c="/zh-cn/assets/image12-69f6226d.png",r="/zh-cn/assets/image13-62fe53ff.png",h="/zh-cn/assets/image14-048f6e24.png",g="/zh-cn/assets/image15-c04accbc.png",m="/zh-cn/assets/image16-2de227b5.png",S="/zh-cn/assets/image17-ecbf7b1e.png",D="/zh-cn/assets/image18-88f5d1b8.png",F="/zh-cn/assets/image19-5df924ff.png",R="/zh-cn/assets/image20-5dfde1d6.png",b="/zh-cn/assets/image21-90c388d7.png",A=[i,o,e,n,l,t,a,p,s,d,P,c,r,h,g,m,S,D,F,R,b],u={label:"万字长文,详述TRIDENT:Poseidon 哈希算法的硬件加速与实现!",description:"本文主要介绍了DatenLord团队在今年的Xilinx全球自适应计算挑战赛上获得 Big Data Analytics赛道一等奖的作品——TRIDENT:Poseidon哈希算法的硬件实现与加速。该项目基于Xilinx Varium C1100 FPGA加速卡,为 Filecoin 区块链应用中的Poseidon哈希算法提供了一套完整的硬件加速方案。在硬件方面,TRIDENT基于 SpinalHDL 设计了Poseidon加速器 IP 并基于 Vivado中Block Design 工具搭建完整的FPGA硬件系统。在软件方面,我们为 Filecoin 软件实现 Lotus 提供了访问 FPGA 硬件加速器的接口。最终,TRIDENT 能够为Filecoin应用提供两倍于 AMD Ryzen 5900X 处理器的 Poseidon 计算加速效果。下文将主要从Poseidon哈希算法概述、基于SpinalHDL和Cocotb的硬件设计、总体方案设计、加速器 IP 设计和性能测试等方面对整个TRIDENT项目进行详细的介绍。",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2022-06-30",title:"Ten thousand words long article, detailing the hardware acceleration and implementation of TRIDENT: Poseidon hash algorithm!"},T=[{label:"引言",level:2},{label:"0.1 Poseidon 与零知识证明",level:3},{label:"0.2 Filecoin 分布式存储网络",level:3},{label:"Poseidon 哈希算法概述",level:2},{label:"1.1Poseidon 参数",level:3},{label:"1.2 Poseidon 详细计算流程",level:3},{label:"1.3Poseidon 算法特点",level:3},{label:"基于 SpinalHDL 和 Cocotb 的硬件设计与验证",level:2},{label:"2.1 SpinalHDL 和 Cocotb 概述",level:3},{label:"2.2 SpinalHDL 在硬件设计中的优势",level:3},{label:"2.3Cocotb 在验证中的优势",level:3},{label:"总体方案设计",level:2},{label:"3.1 开发平台",level:3},{label:"3.2 加速系统设计",level:3},{label:"加速器 IP 设计",level:2},{label:"4.1 模加电路的设计",level:3},{label:"4.2 模乘电路的设计",level:3},{label:"4.3 加速器架构设计",level:3},{label:"性能测试",level:2},{label:"5.1 Vivado Implementation 报告",level:3},{label:"总结",level:2}],L=`

    本文主要介绍了 DatenLord 团队在今年的 Xilinx 全球自适应计算挑战赛上获得 Big Data Analytics 赛道一等奖的作品——TRIDENT: Poseidon 哈希算法的硬件实现与加速。该项目基于 Xilinx Varium C1100 FPGA 加速卡,为 Filecoin 区块链应用中的 Poseidon 哈希算法提供了一套完整的硬件加速方案。在硬件方面,TRIDENT 基于 SpinalHDL 设计了 Poseidon 加速器 IP 并基于 Vivado 中 Block Design 工具搭建完整的 FPGA 硬件系统。在软件方面,我们为 Filecoin 软件实现 Lotus 提供了访问 FPGA 硬件加速器的接口。最终,TRIDENT 能够为 Filecoin 应用提供两倍于 AMD Ryzen 5900X 处理器的 Poseidon 计算加速效果。下文将主要从 Poseidon 哈希算法概述、基于 SpinalHDL 和 Cocotb 的硬件设计、总体方案设计、加速器 IP 设计和性能测试等方面对整个 TRIDENT 项目进行详细的介绍。

    +const i="/zh-cn/assets/image1-9e1613a7.png",o="/zh-cn/assets/image2-7b7b20fc.png",e="/zh-cn/assets/image3-b15b4acb.png",n="/zh-cn/assets/image4-e5ed8af3.png",l="/zh-cn/assets/image5-74f0a1a0.png",t="/zh-cn/assets/image6-5ab2a1df.png",a="/zh-cn/assets/image7-bfc65522.png",p="/zh-cn/assets/image8-462cfa81.png",s="/zh-cn/assets/image9-ecae19a3.png",d="/zh-cn/assets/image10-1092617f.png",P="/zh-cn/assets/image11-2508217f.png",c="/zh-cn/assets/image12-69f6226d.png",r="/zh-cn/assets/image13-62fe53ff.png",h="/zh-cn/assets/image14-048f6e24.png",g="/zh-cn/assets/image15-c04accbc.png",m="/zh-cn/assets/image16-2de227b5.png",S="/zh-cn/assets/image17-ecbf7b1e.png",F="/zh-cn/assets/image18-88f5d1b8.png",R="/zh-cn/assets/image19-5df924ff.png",D="/zh-cn/assets/image20-5dfde1d6.png",b="/zh-cn/assets/image21-90c388d7.png",A=[i,o,e,n,l,t,a,p,s,d,P,c,r,h,g,m,S,F,R,D,b],T={label:"万字长文,详述TRIDENT:Poseidon 哈希算法的硬件加速与实现!",description:"本文主要介绍了DatenLord团队在今年的Xilinx全球自适应计算挑战赛上获得 Big Data Analytics赛道一等奖的作品——TRIDENT:Poseidon哈希算法的硬件实现与加速。该项目基于Xilinx Varium C1100 FPGA加速卡,为 Filecoin 区块链应用中的Poseidon哈希算法提供了一套完整的硬件加速方案。在硬件方面,TRIDENT基于 SpinalHDL 设计了Poseidon加速器 IP 并基于 Vivado中Block Design 工具搭建完整的FPGA硬件系统。在软件方面,我们为 Filecoin 软件实现 Lotus 提供了访问 FPGA 硬件加速器的接口。最终,TRIDENT 能够为Filecoin应用提供两倍于 AMD Ryzen 5900X 处理器的 Poseidon 计算加速效果。下文将主要从Poseidon哈希算法概述、基于SpinalHDL和Cocotb的硬件设计、总体方案设计、加速器 IP 设计和性能测试等方面对整个TRIDENT项目进行详细的介绍。",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2022-06-30",title:"Ten thousand words long article, detailing the hardware acceleration and implementation of TRIDENT: Poseidon hash algorithm!"},u=[{label:"引言",level:2},{label:"0.1 Poseidon 与零知识证明",level:3},{label:"0.2 Filecoin 分布式存储网络",level:3},{label:"Poseidon 哈希算法概述",level:2},{label:"1.1Poseidon 参数",level:3},{label:"1.2 Poseidon 详细计算流程",level:3},{label:"1.3Poseidon 算法特点",level:3},{label:"基于 SpinalHDL 和 Cocotb 的硬件设计与验证",level:2},{label:"2.1 SpinalHDL 和 Cocotb 概述",level:3},{label:"2.2 SpinalHDL 在硬件设计中的优势",level:3},{label:"2.3Cocotb 在验证中的优势",level:3},{label:"总体方案设计",level:2},{label:"3.1 开发平台",level:3},{label:"3.2 加速系统设计",level:3},{label:"加速器 IP 设计",level:2},{label:"4.1 模加电路的设计",level:3},{label:"4.2 模乘电路的设计",level:3},{label:"4.3 加速器架构设计",level:3},{label:"性能测试",level:2},{label:"5.1 Vivado Implementation 报告",level:3},{label:"总结",level:2}],C=`

    本文主要介绍了 DatenLord 团队在今年的 Xilinx 全球自适应计算挑战赛上获得 Big Data Analytics 赛道一等奖的作品——TRIDENT: Poseidon 哈希算法的硬件实现与加速。该项目基于 Xilinx Varium C1100 FPGA 加速卡,为 Filecoin 区块链应用中的 Poseidon 哈希算法提供了一套完整的硬件加速方案。在硬件方面,TRIDENT 基于 SpinalHDL 设计了 Poseidon 加速器 IP 并基于 Vivado 中 Block Design 工具搭建完整的 FPGA 硬件系统。在软件方面,我们为 Filecoin 软件实现 Lotus 提供了访问 FPGA 硬件加速器的接口。最终,TRIDENT 能够为 Filecoin 应用提供两倍于 AMD Ryzen 5900X 处理器的 Poseidon 计算加速效果。下文将主要从 Poseidon 哈希算法概述、基于 SpinalHDL 和 Cocotb 的硬件设计、总体方案设计、加速器 IP 设计和性能测试等方面对整个 TRIDENT 项目进行详细的介绍。

    引言

    Poseidon 是一种全新的面向零知识证明(ZKP: Zero-Knowledge Proof)密码学协议设计的哈希算法。相比同类算法,包括经典的 SHA-256、SHA-3 以及 Pedersen 哈希函数,在零知识证明的应用场景下,Poseidon 能够显著地降低证明生成和验证的计算复杂度,极大地提升零知识证明系统整体的运行效率。基于上述优点,Poseidon 目前已被广泛应用在了各种区块链项目当中,包括去中心化存储系统 Filecoin、加密货币 Mina Protocol 和 Dusk Network 等,主要用于加速其中的零知识证明系统。

    0.1 Poseidon 与零知识证明

    @@ -252,17 +252,17 @@ const i="/zh-cn/assets/image1-9e1613a7.png",o="/zh-cn/assets/image2-7b7b20fc.png

    在上文中介绍的 FPGA 硬件系统和其中 Poseidon 加速器 IP 的基础上,我们通过 Vivado 集成开发环境将其实现在了 Varium C1100 FPGA 加速卡上,该板卡搭载了 Xilinx Virtex UltraScale+系列的 FPGA 芯片,具体芯片型号为具体型号为 XCU55N-FSVH2892-2L-E。整个硬件系统实现(Implementation)后的报告以及计算性能的测试结果如下:

    5.1 Vivado Implementation 报告

    整体硬件加速系统综合实现后逻辑资源消耗情况如下表所示:

    -

    图片

    +

    图片

    各项 FPGA 资源中 DSP Slices(70.01%)和 LUT(61.15%)的消耗最多, 主要用于 255-Bit Montgomery 模乘电路的实现上。这两项资源的不足也限制了在加速器中配置更多模乘器来提升计算并行度和整体的加速性能。

    在时序上,实现(Implementation)后 Poseidon 加速器刚好能够满足 100MHz 工作频率的要求。关键路径上,建立(set up)时间的余量为 0.069ns,保持(hold)时间的余量为 0.01ns。

    除了资源和时序外,FPGA 实现后的功耗信息如下图所示。由下图可见,在运行我们设计的加速器硬件时,FPGA 芯片的整体功耗在 24.7W 左右。而我们在性能测试中使用的 RTX 3070 GPU 加速卡的运行功耗在 120W 左右。

    -

    图片

    +

    图片

    ###  5.2 计算性能测试

    TRIDENT 项目中设计了两种方式测试 Poseidon 加速器的计算性能:

    1. C 语言程序测试结果:在 Xilinx 提供的 XDMA 驱动的基础上使用 C 语言编写简单的性能测试程序。该测试程序向 FPGA 加速器写入一定数量的输入数据,并记录加速器完成所有数据哈希运算所需要的时间。基于该测试程序,我们分别测试了 Poseidon 加速器在三种长度输入数据下的性能表现。当输入数据的大小为 arity2, 即中间状态向量元素个数 时,加速器在 0.877 秒内完成了 850000 次的哈希运算,数据吞吐率可达到 29.1651MB/s, 即每秒大约能够完成 1M 次哈希运算
    -

    图片

    +

    图片

    1. Lotus-Bench 测试结果:Lotus 中提供了计算机硬件在 Filecoin 计算负载下性能表现的基准测试程序 Lotus-Bench;与自己实现的 C 语言测试程序相比,Lotus-Bench 的测试更加接近实际的工作负载,能够得到更加准确的测试结果。在 Lotus-Bench 的基础上,我们分别测试了 CPU, GPU 和 FPGA 在 preCommit 阶段(该阶段主要完成 Poseidon 哈希函数的计算)处理 512MB 数据所需要的时间。FPGA 在 Lotus-Bench 测试下的算力可达到 15.65MB/s,大约是 AMD Ryzen 5900X CPU 实现的 2 倍,但和 RTX 3070 GPU 的加速性能相比仍有很大的提升空间.
    @@ -278,4 +278,4 @@ const i="/zh-cn/assets/image1-9e1613a7.png",o="/zh-cn/assets/image2-7b7b20fc.png
  • 优化加速器架构:由于需要适配 Filecoin Poseidon 计算实例中不同大小的输入数据,目前在输入较小的情况下加速器中存在一些冗余的运算单元。通过进一步优化加速器的整体架构,使得在不同长度的输入数据下,所有运算单元都能得到更好的利用,能够进一步提升整体的加速性能。

  • -`;export{A as assetURLs,L as default,u as metadata,T as toc}; +`;export{A as assetURLs,C as default,T as metadata,u as toc}; diff --git a/zh-cn/assets/index-4270ced0.js b/zh-cn/assets/index-39390118.js similarity index 89% rename from zh-cn/assets/index-4270ced0.js rename to zh-cn/assets/index-39390118.js index e0acf95..e7636fd 100644 --- a/zh-cn/assets/index-4270ced0.js +++ b/zh-cn/assets/index-39390118.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/image1-3ae2277f.jpg",e="/zh-cn/assets/image1-0a18e154.png",a=[t,e],s={label:"分布式实验室直播 | 共识算法与跨数据中心一致性的元数据管理",description:"在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。",location:"中国海南",tags:["Xline"],date:"2023-02-01",title:"Distributed laboratory live broadcast l Consensus algorithm and consistent metadata management across data centers"},n=[],i=`

    在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。

    +const t="/zh-cn/assets/image1-3ae2277f.jpg",a="/zh-cn/assets/image1-0a18e154.png",e=[t,a],s={label:"分布式实验室直播 | 共识算法与跨数据中心一致性的元数据管理",description:"在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。",location:"中国海南",tags:["Xline"],date:"2023-02-01",title:"Distributed laboratory live broadcast l Consensus algorithm and consistent metadata management across data centers"},i=[],n=`

    在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。

    本周四(2 月 2 日)晚上 8 点,达坦科技和分布式实验室合作,由达坦科技 Rust 分布式存储工程师赵佳炜讲述共识算法与跨数据中心一致性的元数据管理,并介绍 Xline 是如何实现高性能跨数据中心的数据一致性管理。

    图片

    直播亮点:

    @@ -9,6 +9,6 @@ const t="/zh-cn/assets/image1-3ae2277f.jpg",e="/zh-cn/assets/image1-0a18e154.png
  • Xline 接下来的优化方向。
  • 请添加分布式实验室小助手的微信,报名参与直播:

    -

    图片

    +

    图片

    达坦科技(DatenLord)推出的开源分布式 KV 存储 Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并保证数据的一致性,方便业务系统实现多地多中心多活部署。

    -

    GitHub 链接:https:github.com/datenlord/Xline

    `;export{a as assetURLs,i as default,s as metadata,n as toc}; +

    GitHub 链接:https:github.com/datenlord/Xline

    `;export{e as assetURLs,n as default,s as metadata,i as toc}; diff --git a/zh-cn/assets/index-e197de7f.js b/zh-cn/assets/index-4b956329.js similarity index 97% rename from zh-cn/assets/index-e197de7f.js rename to zh-cn/assets/index-4b956329.js index 2565054..9794106 100644 --- a/zh-cn/assets/index-e197de7f.js +++ b/zh-cn/assets/index-4b956329.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-12543354.png",s="/zh-cn/assets/image1-0a18e154.png",n="/zh-cn/assets/image2-e7e1943c.png",a="/zh-cn/assets/image3-5eef7eef.jpg",e=[t,s,n,a],l={label:"欢迎报名Rust China Hackathon 2022 达坦科技组",description:"12月4日下午,DatenLord就2022Rust China Hackathon大赛活动企业组(达坦科技组)的赛题进行了空中宣讲会。不仅对赛事流程进行了全面的讲解,同时对赛题背景以及完赛标准和要点进行了深入的剖析。会后更是设置问答环节,细致、详尽地解答了大家所提的各种问题,以便大家对赛题有更加充分的理解。",cover:"./cover.png",location:"中国香港",date:"2022-12-08",title:"Welcome to sign up for the Rust China Hackathon 2022 Datan Technology Group"},o=[{label:"赛事日程表",level:2},{label:"参赛福利",level:2},{label:"赛题评审",level:2},{label:"参赛及代码提交",level:2},{label:"赛题剖析",level:2},{label:"达坦科技 DatenLord 赛题",level:2}],p=`

    12 月 4 日下午,DatenLord 就 2022Rust China Hackathon 大赛活动企业组(达坦科技组)的赛题进行了空中宣讲会。不仅对赛事流程进行了全面的讲解,同时对赛题背景以及完赛标准和要点进行了深入的剖析。会后更是设置问答环节,细致、详尽地解答了大家所提的各种问题,以便大家对赛题有更加充分的理解。

    +const t="/zh-cn/assets/cover-12543354.png",s="/zh-cn/assets/image1-0a18e154.png",n="/zh-cn/assets/image2-e7e1943c.png",a="/zh-cn/assets/image3-5eef7eef.jpg",e=[t,s,n,a],l={label:"欢迎报名Rust China Hackathon 2022 达坦科技组",description:"12月4日下午,DatenLord就2022Rust China Hackathon大赛活动企业组(达坦科技组)的赛题进行了空中宣讲会。不仅对赛事流程进行了全面的讲解,同时对赛题背景以及完赛标准和要点进行了深入的剖析。会后更是设置问答环节,细致、详尽地解答了大家所提的各种问题,以便大家对赛题有更加充分的理解。",cover:"./cover.png",location:"中国香港",date:"2022-12-08",title:"Welcome to sign up for the Rust China Hackathon 2022 Datan Technology Group"},p=[{label:"赛事日程表",level:2},{label:"参赛福利",level:2},{label:"赛题评审",level:2},{label:"参赛及代码提交",level:2},{label:"赛题剖析",level:2},{label:"达坦科技 DatenLord 赛题",level:2}],o=`

    12 月 4 日下午,DatenLord 就 2022Rust China Hackathon 大赛活动企业组(达坦科技组)的赛题进行了空中宣讲会。不仅对赛事流程进行了全面的讲解,同时对赛题背景以及完赛标准和要点进行了深入的剖析。会后更是设置问答环节,细致、详尽地解答了大家所提的各种问题,以便大家对赛题有更加充分的理解。

    本届 Hackathon 为 Rust 中文社区举办的第一届的线上黑客马拉松,大赛主题为「RustForFun」,分为「社区组」与「企业组」。达坦科技作为本届 Hackathon 的协办方,赞助参与本次企业组赛道。希望借此机会激发大家对 Rust 语言的学习热情,提高应用 Rust 的能力,同时结识志趣相投的好友,一起进行思维的碰撞。

    赛事日程表

      @@ -62,4 +62,4 @@ Xline 是达坦科技推出的分布式元数据 KV 存储器。在使用中, }

      评估标准
      -你的实现应遵从上述 Trait 并满足上述要求。我们将使用一定基准测试来进行评估,并根据其结果评分。在基准测试中,我们将发送大量并发请求,因此你也可以创建自己的性能测试来帮助进行优化。

      `;export{e as assetURLs,p as default,l as metadata,o as toc}; +你的实现应遵从上述 Trait 并满足上述要求。我们将使用一定基准测试来进行评估,并根据其结果评分。在基准测试中,我们将发送大量并发请求,因此你也可以创建自己的性能测试来帮助进行优化。

      `;export{e as assetURLs,o as default,l as metadata,p as toc}; diff --git a/zh-cn/assets/index-b77795ad.js b/zh-cn/assets/index-5076d4ea.js similarity index 99% rename from zh-cn/assets/index-b77795ad.js rename to zh-cn/assets/index-5076d4ea.js index 3d97017..7701ffe 100644 --- a/zh-cn/assets/index-b77795ad.js +++ b/zh-cn/assets/index-5076d4ea.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-6865ae02.png",l="/zh-cn/assets/image1-1421d5c3.png",t="/zh-cn/assets/image2-03115587.png",i="/zh-cn/assets/image3-8a8d1c33.png",a="/zh-cn/assets/image4-c1593056.png",s=[e,l,t,i,a],p={label:"Xline 源码解读(一) —— 初识 CURP 协议",description:"Xline 是一款开源的分布式 KV 存储引擎,其核心目的是实现高性能的跨数据中心强一致性,提供跨数据中心的meatdata 管理。那么 Xline 是怎么实现这种高性能的跨数据中心强一致性的呢?这篇文章就将带领大家一起来一探究竟。",cover:"./cover.png",location:"中国香港",author:["赵佳炜"],tags:["Xline"],date:"2023-07-13",title:"Interpretation of Xline source code (1)——Introduction to CURP protocol"},n=[{label:"Xline 是什么",level:2},{label:"Xline 的整体架构",level:2},{label:"CURP 协议简介",level:2},{label:"CURP 是什么?",level:3},{label:"为什么选择 CURP 协议",level:3},{label:"fast path 与 slow path",level:3},{label:"Summary",level:2}],r=`

      封面

      +const e="/zh-cn/assets/cover-6865ae02.png",l="/zh-cn/assets/image1-1421d5c3.png",t="/zh-cn/assets/image2-03115587.png",i="/zh-cn/assets/image3-8a8d1c33.png",a="/zh-cn/assets/image4-c1593056.png",s=[e,l,t,i,a],p={label:"Xline 源码解读(一) —— 初识 CURP 协议",description:"Xline 是一款开源的分布式 KV 存储引擎,其核心目的是实现高性能的跨数据中心强一致性,提供跨数据中心的meatdata 管理。那么 Xline 是怎么实现这种高性能的跨数据中心强一致性的呢?这篇文章就将带领大家一起来一探究竟。",cover:"./cover.png",location:"中国香港",author:["赵佳炜"],tags:["Xline"],date:"2023-07-13",title:"Interpretation of Xline source code (1)——Introduction to CURP protocol"},n=[{label:"Xline 是什么",level:2},{label:"Xline 的整体架构",level:2},{label:"CURP 协议简介",level:2},{label:"CURP 是什么?",level:3},{label:"为什么选择 CURP 协议",level:3},{label:"fast path 与 slow path",level:3},{label:"Summary",level:2}],o=`

      封面

      Xline 是什么

      Xline 是一款开源的分布式 KV 存储引擎,其核心目的是实现高性能的跨数据中心强一致性,提供跨数据中心的 meatdata 管理。那么 Xline 是怎么实现这种高性能的跨数据中心强一致性的呢?这篇文章就将带领大家一起来一探究竟。

      Xline 的整体架构

      @@ -77,4 +77,4 @@ b. follower 接收到请求后,由于 z = 9 与 witness 中的 z = 7 相冲突

      Xline 是一款提供跨数据中心强一致性的分布式 KV 存储,其核心问题之一便是如何在跨数据中心这种高延迟的广域网环境中提供高性能的强一致性保证。传统的分布式共识算法,如 Raft 和 Multi-Paxos,通过让所有操作都满足持久化存储和有序性前提来保证状态机一致性。而 CURP 协议则是对达成共识的场景做了更细粒度的划分,将协议分割成了前端(fast path)和后端(slow path),前端只保证了提案会被持久化到集群当中,而后端不仅保证了持久化,也保证了所有保存了该提案的节点会按照相同的顺序执行命令,保证了状态机的一致性。

      关于 CURP 协议的简介就到这里,更多的细节欢迎参考我们的其他文章和分享,如下:
      Curp 共识协议的重新思考

      -

      DatenLord | Xline Geo-distributed KV Storage

      `;export{s as assetURLs,r as default,p as metadata,n as toc}; +

      DatenLord | Xline Geo-distributed KV Storage

      `;export{s as assetURLs,o as default,p as metadata,n as toc}; diff --git a/zh-cn/assets/index-8bcfd31b.js b/zh-cn/assets/index-5689e7f4.js similarity index 92% rename from zh-cn/assets/index-8bcfd31b.js rename to zh-cn/assets/index-5689e7f4.js index 2b93648..2586269 100644 --- a/zh-cn/assets/index-8bcfd31b.js +++ b/zh-cn/assets/index-5689e7f4.js @@ -1,4 +1,4 @@ -const n="/zh-cn/assets/cover-dcd7e2ce.jpeg",t="/zh-cn/assets/image1-3ae2277f.jpg",s="/zh-cn/assets/image1-0a18e154.png",e=[n,t,s],o={label:"分布式实验室直播 | 共识算法与跨数据中心一致性的元数据管理",description:"在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。",cover:"./cover.jpeg",location:"海南",date:"2023-02-01",title:"Consensus Algorithms and Metadata Management for Cross Data Center Consistency"},r=[],a=`

      在 2021 年时,UC Berkeley 提出了 天空计算(Sky Computing) 的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。 Xline 是一款开源分布式 kv 存储系统, 基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现

      +const n="/zh-cn/assets/cover-dcd7e2ce.jpeg",t="/zh-cn/assets/image1-3ae2277f.jpg",s="/zh-cn/assets/image1-0a18e154.png",o=[n,t,s],e={label:"分布式实验室直播 | 共识算法与跨数据中心一致性的元数据管理",description:"在 2021 年时,UC Berkeley 提出了天空计算(Sky Computing)的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。Xline 是一款开源分布式 kv 存储系统,基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现。",cover:"./cover.jpeg",location:"海南",date:"2023-02-01",title:"Consensus Algorithms and Metadata Management for Cross Data Center Consistency"},r=[],a=`

      在 2021 年时,UC Berkeley 提出了 天空计算(Sky Computing) 的概念。所谓天空计算是云平台上的一层,其目标是打通彼此孤立的云,将分布式系统从数据中心范围扩展到全球范围。 Xline 是一款开源分布式 kv 存储系统, 基于 curp 共识算法实现,旨在提供跨云元数据管理功能。相比于传统共识协议 Raft 或 Paxos,curp 在天空计算的场景中有着更好的性能表现

      本周四(2 月 2 日)晚上 8 点,达坦科技和分布式实验室合作,由达坦科技 Rust 分布式存储工程师赵佳炜讲述共识算法与跨数据中心一致性的元数据管理,并介绍 Xline 是如何实现高性能跨数据中心的数据一致性管理。

      图片

      直播亮点:

      @@ -11,4 +11,4 @@ const n="/zh-cn/assets/cover-dcd7e2ce.jpeg",t="/zh-cn/assets/image1-3ae2277f.jpg

      请添加分布式实验室小助手的微信,报名参与直播:

      图片

      达坦科技(DatenLord)推出的开源分布式 KV 存储 Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并保证数据的一致性,方便业务系统实现多地多中心多活部署。

      -

      GitHub 链接:https://github.com/xline-kv/

      `;export{e as assetURLs,a as default,o as metadata,r as toc}; +

      GitHub 链接:https://github.com/xline-kv/

      `;export{o as assetURLs,a as default,e as metadata,r as toc}; diff --git a/zh-cn/assets/index-047539e4.js b/zh-cn/assets/index-5968a39d.js similarity index 93% rename from zh-cn/assets/index-047539e4.js rename to zh-cn/assets/index-5968a39d.js index 333cd8a..5096d7d 100644 --- a/zh-cn/assets/index-047539e4.js +++ b/zh-cn/assets/index-5968a39d.js @@ -1,4 +1,4 @@ -const o="/zh-cn/assets/cover-9c53ea5f.png",t="/zh-cn/assets/imgae1-084eb861.jpg",e=[o,t],n={label:"硬件敏捷开发与验证方法学研讨",description:"作为2022年第二届RISC-V中国峰会的同期活动,8月27日下午,达坦科技将在线上举办硬件敏捷开发与验证方法学研讨。",cover:"./cover.png",location:"新加坡",date:"2022-08-23",title:"Hardware Agile Development and Verification Methodology Workshop"},s=[],l=`

      作为 2022 年第二届 RISC-V 中国峰会的同期活动,8 月 27 日下午,达坦科技将在线上举办硬件敏捷开发与验证方法学研讨。

      +const o="/zh-cn/assets/cover-9c53ea5f.png",t="/zh-cn/assets/imgae1-084eb861.jpg",e=[o,t],s={label:"硬件敏捷开发与验证方法学研讨",description:"作为2022年第二届RISC-V中国峰会的同期活动,8月27日下午,达坦科技将在线上举办硬件敏捷开发与验证方法学研讨。",cover:"./cover.png",location:"新加坡",date:"2022-08-23",title:"Hardware Agile Development and Verification Methodology Workshop"},n=[],l=`

      作为 2022 年第二届 RISC-V 中国峰会的同期活动,8 月 27 日下午,达坦科技将在线上举办硬件敏捷开发与验证方法学研讨。

      如何提升数字芯片的开发和验证效率一直是业界关注的焦点。近年来随着 Chisel、SpinalHDL 等等一众新一代 HDL 的推出,业界逐步感受到新一代 HDL 在数字芯片设计效率方面的提升。相比 Verilog 和 VHDL,这些新一代 HDL 在语法表达能力、代码简洁程度、错误检查等方面有不小的提升;相比高阶综合 HLS,这些新一代 HDL 支持 RTL 级描述能力,在芯片性能的把控方面远超 HLS。此外,基于 Python,以 Cocotb 和 pyuvm 为代表的新一代验证框架的推出,使得验证的周期得到一定程度的缩减,特别是基于 Python 的验证框架可以复用 Python 生态丰富的已有工具和模型,大大减少了 Golden Reference 的工作量。

      更重要的是,这些新一代 HDL 打开了全新的数字芯片敏捷设计和验证的方法学大门。本次研讨将邀请业界多位专家分享他们在各自领域的硬件敏捷开发与验证实践经验,为业界提供一次深入探讨和交流的机会,促进硬件敏捷开发与验证方法学的发展与落地。

      参与本次研讨的听众可以深入了解业界关于硬件敏捷开发与验证的最前沿探索,诸如:

      @@ -11,4 +11,4 @@ const o="/zh-cn/assets/cover-9c53ea5f.png",t="/zh-cn/assets/imgae1-084eb861.jpg"

      活动时间:8 月 27 日,13:15-17:15
      活动链接:https://t.elecfans.com/live/2113.html
      感兴趣的听众可以添加海报中的群主二维码加入讨论群,添加时请注明硬件敏捷开发和验证方法学研讨。

      -

      图片

      `;export{e as assetURLs,l as default,n as metadata,s as toc}; +

      图片

      `;export{e as assetURLs,l as default,s as metadata,n as toc}; diff --git a/zh-cn/assets/index-6a3ed4c3.js b/zh-cn/assets/index-5f61d62d.js similarity index 95% rename from zh-cn/assets/index-6a3ed4c3.js rename to zh-cn/assets/index-5f61d62d.js index 434a40f..6bb52de 100644 --- a/zh-cn/assets/index-6a3ed4c3.js +++ b/zh-cn/assets/index-5f61d62d.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-cf0f8eeb.png",o="/zh-cn/assets/image1-6485c4dd.jpg",e=[t,o],n={label:"活动预告 | 第二届硬件敏捷开发与验证方法学研讨会",description:"2023年8月23日至25日, 2023 RISC-V中国峰会将在北京香格里拉饭店举办。本届峰会采用“主会议+主题活动+展览展示+同期活动”的会议组织方式,将邀请RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技将在线上举办第二届硬件敏捷开发与验证方法学研讨会。",cover:"./cover.png",location:"新加坡",date:"2023-08-20",title:"Upcoming Events l 2nd Hardware Agile Development and Verification Methodology Workshop"},s=[{label:"2023 RISC-V中国峰会",level:2},{label:"活动信息",level:2}],r=`

      图片

      +const t="/zh-cn/assets/cover-cf0f8eeb.png",o="/zh-cn/assets/image1-6485c4dd.jpg",s=[t,o],n={label:"活动预告 | 第二届硬件敏捷开发与验证方法学研讨会",description:"2023年8月23日至25日, 2023 RISC-V中国峰会将在北京香格里拉饭店举办。本届峰会采用“主会议+主题活动+展览展示+同期活动”的会议组织方式,将邀请RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技将在线上举办第二届硬件敏捷开发与验证方法学研讨会。",cover:"./cover.png",location:"新加坡",date:"2023-08-20",title:"Upcoming Events l 2nd Hardware Agile Development and Verification Methodology Workshop"},e=[{label:"2023 RISC-V中国峰会",level:2},{label:"活动信息",level:2}],r=`

      图片

      2023 RISC-V中国峰会

      2023年8月23日至25日, 2023 RISC-V中国峰会将在北京香格里拉饭店举办。本届峰会采用“主会议+主题活动+展览展示+同期活动”的会议组织方式,将邀请RISC-V国际基金会、业界专家、企业代表及社区伙伴等共同探讨RISC-V发展趋势与机遇。作为本届RISC-V中国峰会的同期活动,8月25日下午,达坦科技将在线上举办第二届硬件敏捷开发与验证方法学研讨会

      随着数字芯片的设计规模和复杂度越来越大,加之芯片市场的竞争越来越激烈,如何提升数字芯片的开发和验证效率成为业界关注的焦点。虽然各种设计工具、验证方法学层出不穷,但是一直没有得到业界广泛认可。目前业界普遍采用的还是基于Verilog、SystemVerilog、VHDL和UVM的工具和方法。

      @@ -16,4 +16,4 @@ const t="/zh-cn/assets/cover-cf0f8eeb.png",o="/zh-cn/assets/image1-6485c4dd.jpg"

      收看链接:
      https://wx.vzan.com/live/tvchat-904511107?v=1691984417574
      或欢迎点击下方链接预约公众号直播。

      -

      感兴趣的观众可以添加海报中的达坦科技小助手二维码加入讨论群,添加时请注明硬件敏捷开发和验证方法学研讨

      `;export{e as assetURLs,r as default,n as metadata,s as toc}; +

      感兴趣的观众可以添加海报中的达坦科技小助手二维码加入讨论群,添加时请注明硬件敏捷开发和验证方法学研讨

      `;export{s as assetURLs,r as default,n as metadata,e as toc}; diff --git a/zh-cn/assets/index-5fa4b651.js b/zh-cn/assets/index-65e0a878.js similarity index 97% rename from zh-cn/assets/index-5fa4b651.js rename to zh-cn/assets/index-65e0a878.js index 8dbcdb6..85ae0e5 100644 --- a/zh-cn/assets/index-5fa4b651.js +++ b/zh-cn/assets/index-65e0a878.js @@ -1,4 +1,4 @@ -const l="/zh-cn/assets/cover-f142cd17.jpg",e="/zh-cn/assets/image1-9d5b5029.jpg",s="/zh-cn/assets/image2-2129b7ac.jpg",t=[l,e,s],o={label:"计算机体系结构 l MIT课程学习新手上路宣讲",description:"MIT课程学习社区是一个兴趣导向的学习社区,大家或是想要补缺体系结构的基础知识,或是提升自己的实践和工程能力。MIT 6.175与MIT6.375的课程和Lab都有相当的难度,要求采用Bluespec语言实现RISC-V32位处理器,并支持多级流水、分支预测、异常处理、缓存一致性等功能。此外,Lab环节还涉及软硬件联合开发,要求基于所实现的RISC-V处理器运行真实的RISC-V程序,并给出性能评估。当真正着手开始学习MIT的这两门课程,会发现不要说坚持下来,能入门也不是一件容易的事情。为此,达坦科技软硬件联合开发工程师米明恒将在2023年9月23日(周六)上午10:30为大家带来一场计算机体系结构 l MIT课程学习新手上路宣讲。",cover:"./cover.jpg",location:"中国香港",date:"2023-09-19",title:"MIT Coursework Orientation for Newcomers"},i=[{label:"MIT 课程学习社区的源",level:2},{label:"MIT 课程学习新手上路宣讲",level:2},{label:"入门宣讲的目的",level:2},{label:"入门宣讲的要点",level:2},{label:"问卷调查",level:2}],a=`

      封面

      +const l="/zh-cn/assets/cover-f142cd17.jpg",e="/zh-cn/assets/image1-9d5b5029.jpg",s="/zh-cn/assets/image2-2129b7ac.jpg",t=[l,e,s],o={label:"计算机体系结构 l MIT课程学习新手上路宣讲",description:"MIT课程学习社区是一个兴趣导向的学习社区,大家或是想要补缺体系结构的基础知识,或是提升自己的实践和工程能力。MIT 6.175与MIT6.375的课程和Lab都有相当的难度,要求采用Bluespec语言实现RISC-V32位处理器,并支持多级流水、分支预测、异常处理、缓存一致性等功能。此外,Lab环节还涉及软硬件联合开发,要求基于所实现的RISC-V处理器运行真实的RISC-V程序,并给出性能评估。当真正着手开始学习MIT的这两门课程,会发现不要说坚持下来,能入门也不是一件容易的事情。为此,达坦科技软硬件联合开发工程师米明恒将在2023年9月23日(周六)上午10:30为大家带来一场计算机体系结构 l MIT课程学习新手上路宣讲。",cover:"./cover.jpg",location:"中国香港",date:"2023-09-19",title:"MIT Coursework Orientation for Newcomers"},i=[{label:"MIT 课程学习社区的源",level:2},{label:"MIT 课程学习新手上路宣讲",level:2},{label:"入门宣讲的目的",level:2},{label:"入门宣讲的要点",level:2},{label:"问卷调查",level:2}],n=`

      封面

      MIT 课程学习社区的源

      无论用哪一种语言,Bluespec、Chisel、SpinalHDL 来进行硬件设计,背后扎实的硬件设计基础知识都是必不可少的,特别是体系结构,因为体系结构的主要研究对象是指令集架构、处理器架构、存储器层次结构、总线和 IO 等,而 CPU 作为当今最复杂的数字芯片之一,非常适合作为学习实践相关知识的一只“麻雀”。

      虽然国内大专院校计算机科学和电子工程专业都有开设体系结构或组成原理等相关课程,但是在实操环节缺失很多内容,特别是 CPU 缓存、内存管理、异常处理相关的部分,基本上都不涉及。当达坦科技做校招或招募在校实习生的时候,看到了潜在求职者在理论和实践之间的脱节。

      @@ -22,4 +22,4 @@ const l="/zh-cn/assets/cover-f142cd17.jpg",e="/zh-cn/assets/image1-9d5b5029.jpg"

      图片

      欢迎您预约直播,或者登陆腾讯会议观看直播:
      会议号:474-6575-9473

      -

      图片

      `;export{t as assetURLs,a as default,o as metadata,i as toc}; +

      图片

      `;export{t as assetURLs,n as default,o as metadata,i as toc}; diff --git a/zh-cn/assets/index-67a528fa.js b/zh-cn/assets/index-67a528fa.js new file mode 100644 index 0000000..fe2d357 --- /dev/null +++ b/zh-cn/assets/index-67a528fa.js @@ -0,0 +1,30 @@ +const e="/zh-cn/assets/image1-50beaba8.png",t=[e],i={label:"精彩回顾:2023 SpinalHDL 应用前景探索研讨会",description:"达坦科技通过软硬件深度融合的方式打通云间壁垒,实现数据高效跨云访问。其采用硬件加速提升存储性能,目前采用FPGA实现存储相关场景的性能加速。SpinalHDL是达坦科技在产品中使用的硬件描述语言之一,因此,达坦科技一直热心于推广SpinalHDL在业界的落地应用。达坦科技此次联合SpinalHDL社区及该语言的创建者 Charles Papon 举办了 《2023 SpinalHDL应用前景探索》的线上研讨会,分为两个Track。",location:"中国新疆",date:"2023-12-21",title:"Highlights: 2023 SpinalHDL Application Prospect Exploration Workshop"},n=[{label:"Tooling and flow",level:2},{label:"Projects",level:2},{label:"Related Resources",level:2}],o=`

      达坦科技通过软硬件深度融合的方式打通云间壁垒,实现数据高效跨云访问。其采用硬件加速提升存储性能,目前采用 FPGA 实现存储相关场景的性能加速。SpinalHDL 是达坦科技在产品中使用的硬件描述语言之一,因此,达坦科技一直热心于推广 SpinalHDL 在业界的落地应用。

      +

      达坦科技此次联合 SpinalHDL 社区及该语言的创建者 Charles Papon 举办了《2023 SpinalHDL 应用前景探索》** 的线上研讨会,分为两个 Track。

      +

      Tooling and flow

      +

      Track 1: Tooling and flow

      +

      四位演讲人主要围绕着 SpinalHDL 语言的方法论,即到底怎么把 SpinalHDL 用起来,它究竟提供了什么功能和优势等做了全面的阐述——

      +

      Yindong Xiao, Get started with SpinalHDL with a Simplified Setup

      +

      Abstract: The existing SpinalHDL environment requires several steps to install, and the user may encounter various problems during the process. This is not very friendly to newcomers, especially students, who need to spend a lot of time learning how to work with the environment rather than the design itself. On the other hand, the installation process requires access to the Internet, which is not possible for many companies and places with poor network conditions. Therefore, it is necessary to provide a better way of offline installable to simplify the usage. The talk will show how to quickly and easily set up a development environment using Docker on Linux or the MSYS2 installation tool on Windows.

      +

      Get started with SpinalHDL with a Simplified Setup 分享视频

      +

      yportne13, Some Tips on Using Memory Black Box in SpinalHDL

      +

      Abstract: In this lecture, I will share some tips and tricks on how to use Memory Black Box in SpinalHDL. The main contents include the following four points: how to automatically select an appropriate implementation method based on Memory size, how to send bist enable signal to all Memories, how to add new interfaces to Memory, and how to manage bist logic.

      +

      Some Tips on Using Memory Black Box in SpinalHDL 分享视频

      +

      Charles Papon, Pipelining API Introduction

      +

      Abstract: VexRiscv and NaxRiscv had their own pipelining API, now it's time for SpinalHDL to integrate its own ! This talk will introduce the recently added spinal.lib.misc.pipeline API. It mainly allows the user to define pipeline without having to manualy propagate data through the pipeline and define the arbitration, but also allows quite a few additional design patterns that will be demonstrated during the talk.

      +

      Pipelining API Introduction 分享视频

      +

      Andreas Wallner, SpinalHDL Intro for New Users

      +

      Abstract: We will design a WG2812 controller, starting with a very classical design and build a bus peripheral from that. Along the way I'll introduce basic SpinalHDL concepts.

      +

      SpinalHDL Intro for New Users 分享视频

      +

      Projects

      +

      Track 2: Projects

      +

      两位演讲人专注于 SpinalHDL 的应用案例,着重分享了具体用 SpinalHDL 所做的实际的项目或商业应用。

      +

      Chenbo, Pcie Brief Introduction

      +

      Abstract: In this lecture, I will share 3 subtopics pcie brief introduction, I will give audience basic knowledge of pcie. xilinx pcie, explain some concepts in pcie through xilinx pcie integrated block and it's example design. spinal pcie, overview of spinal pcie facility and its future.

      +

      Pcie Brief Introduction 分享视频

      +

      Christopher Lozinski, The J1Sc Family

      +

      Abstract: The J1 in Scala (J1Sc) is the newest member of a large family of stack processors. When your finite state machines become too complex and you don’t have an SoC, it is time to use a soft core processor. The j1 is a small stack processor. It can run Forth, a small Reverse Polish notation programming language, Forth includes an interpreter, which is great for hardware debugging. The J1Sc Coding style will be compared with the original J1 Verilog. There are so many variants of the J1, really the only way to manage them all from a single code base is with a high level tool like SpinalHDL.

      +

      The J1Sc Family 分享视频

      + +

      精彩回顾 l SpinalHDL 应用前景探索线上研讨会

      +

      开源硬件和敏捷开发感兴趣 的朋友,可以添加达坦科技小助手的微信,加入达坦科技硬件群。

      +

      图片

      `;export{t as assetURLs,o as default,i as metadata,n as toc}; diff --git a/zh-cn/assets/index-9cbd4195.js b/zh-cn/assets/index-6f20c5b7.js similarity index 95% rename from zh-cn/assets/index-9cbd4195.js rename to zh-cn/assets/index-6f20c5b7.js index 34d9912..48c76f1 100644 --- a/zh-cn/assets/index-9cbd4195.js +++ b/zh-cn/assets/index-6f20c5b7.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-eeda38bf.png",l=[e],i={label:"Xline v0.2.0:一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。",cover:"./cover.png",location:"中国香港",tags:["Xline"],date:"2023-02-16",title:"Xline v0.2.0: A distributed KV store for metadata management"},t=[{label:"Xline 是什么?我们为什么要做 Xline?",level:2},{label:"V0.2.0 版本有什么新功能?",level:3},{label:"欢迎参与到 Xline 项目中",level:2},{label:"相关链接",level:2}],n=`

      封面

      +const l="/zh-cn/assets/cover-eeda38bf.png",e=[l],i={label:"Xline v0.2.0:一个用于元数据管理的分布式KV存储",description:"Xline是一个基于Curp协议的,用于管理元数据的分布式KV存储。现有的分布式KV存储大多采用Raft共识协议,需要两次RTT才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。",cover:"./cover.png",location:"中国香港",tags:["Xline"],date:"2023-02-16",title:"Xline v0.2.0: A distributed KV store for metadata management"},t=[{label:"Xline 是什么?我们为什么要做 Xline?",level:2},{label:"V0.2.0 版本有什么新功能?",level:3},{label:"欢迎参与到 Xline 项目中",level:2},{label:"相关链接",level:2}],n=`

      封面

      Xline 是什么?我们为什么要做 Xline?

      Xline 是一个基于 Curp 协议的,用于管理元数据的分布式 KV 存储。 现有的分布式 KV 存储大多采用 Raft 共识协议,需要两次 RTT 才能完成一次请求。当部署在单个数据中心时,节点之间的延迟较低,因此不会对性能产生大的影响。

      但是,当跨数据中心部署时,节点之间的延迟可能是几十或几百毫秒,此时 Raft 协议将成为性能瓶颈。Curp 协议就是为了解决这个问题而设计的。它可以在命令不冲突的情况下减少一个 RTT,从而提高性能。因此,Xline 旨在实现高性能的数据访问和跨数据中心场景下的强一致性。

      @@ -36,4 +36,4 @@ const e="/zh-cn/assets/cover-eeda38bf.png",l=[e],i={label:"Xline v0.2.0:一个
    • Curp 相关文章:
      https://medium.com/@datenlord/curp-revisit-the-consensus-protocol-384464be1600
    • Xline 官网:www.xline.cloud
    • -
    `;export{l as assetURLs,n as default,i as metadata,t as toc}; +`;export{e as assetURLs,n as default,i as metadata,t as toc}; diff --git a/zh-cn/assets/index-f82a02e0.js b/zh-cn/assets/index-82a24597.js similarity index 99% rename from zh-cn/assets/index-f82a02e0.js rename to zh-cn/assets/index-82a24597.js index f958500..0a7213c 100644 --- a/zh-cn/assets/index-f82a02e0.js +++ b/zh-cn/assets/index-82a24597.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-c17c52cc.png",s="/zh-cn/assets/image1-0dff4570.png",c="/zh-cn/assets/image2-e09cfdc8.png",o="/zh-cn/assets/image3-2b589463.png",p="/zh-cn/assets/image4-5841c9d6.png",a="/zh-cn/assets/image5-92344f1d.png",d="/zh-cn/assets/image6-b429f851.png",i="/zh-cn/assets/image7-97920b5a.png",t="/zh-cn/assets/image8-ecf5c6f3.png",r="/zh-cn/assets/image9-f47bad66.png",n="/zh-cn/assets/image10-b50adc27.png",l="/zh-cn/assets/image11-99ec2a51.png",m=[e,s,c,o,p,a,d,i,t,r,n,l],g={label:"从数学角度思考程序与验证正确性",description:"本文旨在为没有接触过形式化方法的读者提供一种新的视角看待计算机系统与算法,而非形式化方法或 TLA+ 教程。因此本文的重点是如何从数学角度思考程序,不会使用大篇幅讲解 TLA+ 的语法。",cover:"./cover.png",location:"中国香港",author:["田野"],tags:["Xline"],date:"2023-03-02",title:"Thinking about programs mathematically and verifying correctness"},h=[{label:"我们该如何写出正确的程序?",level:2},{label:"程序中会有什么样错误?",level:3},{label:"经验",level:3},{label:"形式化方法",level:3},{label:"TLA+",level:2},{label:"简单的例子",level:3},{label:"Two-Phase Commit",level:2},{label:"总结",level:2},{label:"我们的项目:Xline",level:2}],A=`

    封面

    +const e="/zh-cn/assets/cover-c17c52cc.png",s="/zh-cn/assets/image1-0dff4570.png",c="/zh-cn/assets/image2-e09cfdc8.png",o="/zh-cn/assets/image3-2b589463.png",p="/zh-cn/assets/image4-5841c9d6.png",a="/zh-cn/assets/image5-92344f1d.png",d="/zh-cn/assets/image6-b429f851.png",t="/zh-cn/assets/image7-97920b5a.png",i="/zh-cn/assets/image8-ecf5c6f3.png",r="/zh-cn/assets/image9-f47bad66.png",n="/zh-cn/assets/image10-b50adc27.png",l="/zh-cn/assets/image11-99ec2a51.png",m=[e,s,c,o,p,a,d,t,i,r,n,l],g={label:"从数学角度思考程序与验证正确性",description:"本文旨在为没有接触过形式化方法的读者提供一种新的视角看待计算机系统与算法,而非形式化方法或 TLA+ 教程。因此本文的重点是如何从数学角度思考程序,不会使用大篇幅讲解 TLA+ 的语法。",cover:"./cover.png",location:"中国香港",author:["田野"],tags:["Xline"],date:"2023-03-02",title:"Thinking about programs mathematically and verifying correctness"},h=[{label:"我们该如何写出正确的程序?",level:2},{label:"程序中会有什么样错误?",level:3},{label:"经验",level:3},{label:"形式化方法",level:3},{label:"TLA+",level:2},{label:"简单的例子",level:3},{label:"Two-Phase Commit",level:2},{label:"总结",level:2},{label:"我们的项目:Xline",level:2}],A=`

    封面

    本文旨在为没有接触过形式化方法的读者提供一种新的视角看待计算机系统与算法,而非形式化方法或 TLA+ 教程。因此本文的重点是如何从数学角度思考程序,不会使用大篇幅讲解 TLA+ 的语法。

    我们该如何写出正确的程序?

    程序设计的目标永远是写出正确的程序。随着时间的推移,我们的程序越来越复杂,其中可能存在的错误也越来越多。想要写出正确的程序,首先应该了解程序中可能出现的错误有哪些。

    @@ -105,14 +105,14 @@ Next 用于定义状态转换关系。

  • 变量 msgs 作为消息池,用于记录所有正在传输的消息,初始值是一个空集。
  • 下面我们来定义系统做可能发生的动作。

    -

    图片

    +

    图片

    • TLA+ 中可以用上述方式定义类似于其它编程语言中"函数"概念的表达式,这样就无需对每一个 Resource Manager 都定义一个表达式了。
    • [type → "prepare", rm → r] 是一个 TLA+ 中的 record,类似于其它编程语言中的 struct。
    • UNCHANGED ⟨rmState, tmState, msgs⟩ 表示这个动作不会改变 rmStatetmStatemsgs 这三个变量的值。在 TLA+ 中,每一个变量的值是否改变都需要显式地声明。

    TM 的状态为 init,且在消息池中存在来自 rPrepared 消息,tmPrepared 在下一个状态的值会是 tmPrepared{r} 的并集。

    -

    图片

    +

    图片

    上面的两个动作分别是 Transaction Manager 进行 Commit 与 Abort。

    图片

    上述 4 个 Resource Manager 动作分别是 Resource Manager 选择 Prepare 与 Abort,以及处理由 Transaction Manager 决定的 Commit 与 Abort。

    diff --git a/zh-cn/assets/index-86e42443.js b/zh-cn/assets/index-90593fbc.js similarity index 99% rename from zh-cn/assets/index-86e42443.js rename to zh-cn/assets/index-90593fbc.js index e71ef1d..9099a01 100644 --- a/zh-cn/assets/index-86e42443.js +++ b/zh-cn/assets/index-90593fbc.js @@ -1,4 +1,4 @@ -const s="data:image/png;base64,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",a="data:image/png;base64,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",n="data:image/png;base64,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",e="data:image/png;base64,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",l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABGCAAAAABp19w+AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAPnSURBVFjD7ZZdTFtlGMd/UJhrGWAdlY91MO0mY4EOyFzAhIaBaYJbJMgFURc1DKfGiyGaxWYxdYshkixuQPwITozuioSQ7EInmhmihu7DlZZtpaFUmbU10kbo2jEYX1605RzkbAZkJkvOc3POeZ7/+Z2c//uc57xxC9yriL9nZBkto2W0jJbRMlpG/3/ohMUzdyAYDOVUrpgw6wwGgyHD9jujg/UAz6wcfdEEkLscvWhIXF0VkL/y99bUlgJ5ywtxwu5pthK6MlZhquM1NN3L06JldIFmNWSuwG6JtAg9CI+vhswAFN4dfQfFv8asRXqNBPScBQpWgx4BdZZEXuhr1xLFDZc7IV+nAJi+HC5JAbg6tE8ZLc9fd43l6FNjRpZyV7RYMfFFD0BWRzL0m4ADL8D3R/mpNVLv/8gD0FgDYIUiKbRgyICg6KnuUb/8SUeZ7zg4TaoTBXw2BefANgXwxyGTp9x82szJkaiRMavnwlLouf5Fq7tb0Z3an5d7EDt8zKniEAShErgFjDfZaDxakV1Rxi8RqzVRIwN1e3+VQI+AJhMASzuY04Br5OCyVW7yjsJGqKiCVJh/24exBgj7SAfsQldb/SgkvBYUnVCdAxNnOnkRK9X8AE8lAPvO7oiH805ogHnH+x79zqU9u/u5omwJ9KLCPgxXTZNeP6ojxdQY1XwFewASKQC6gPbbATeUmaJG6qOMB1+R6hBBcQ245UvONeaVJMK6dbg8qIoAnJTAvA1Uo0p1la5UGzNSejzE0ILCD8UnxJILUJ4I0KfeCRNAi16oDi4aeblr+mnxTI4XK4IuIAyblzz9EuwCCFirFBAGMkVVKxTi9cLFpk3Dx/wSaBsU8mlDCNIgLeZSAOA6bAU4QwWwEXgoWg/MRnp24a13mG+rOpSEQwJthfzb57YkwyMwHMn91VQ7DigjrD+/1G8DkjQQbd7e2g5+B3XmkK8Yu2f/kJ/tEmggvX/yScCg4scZgCv1tj2pgA7cMNVMIwB1cAlg+ngz5cTBNr7DwOY27bcUp4vQincjx6HfSPow8ch6SND24Uhx957ujH/9oAJI7WUwyfHBUFNkxOjsYz9vmDrf02rf1bIVVfeMV/25/qU4Vcb0ezMHdCJ07Afme9OH2hwZIpY2H6B+oiHqae/JSVC9YYzeMtn+NcBjz5cDWI5NssOcAfSZ+UYpgWbGdTM3JbZ8o2MbslMF0ZR3QvnoeuF63BPWZsXaNuRe0CsADl/Ye7hF/NUsrFXcNBgGxgxOIbF2uycFPNxszJXskP8YD9TzbPhVKa/XIMZvaEUzdU3R/4j7cxMso2W0jJbRMvr+QP8NsluKv9sZ0eAAAAAASUVORK5CYII=",p="data:image/png;base64,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",t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABGCAAAAAAifw/TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAARbSURBVGje7ZhtTFtVGMd/UJjQCayOyngZ6OqGEOgYmQRMIAxMIzBBxIQ4lpkguvkJxgwbMabZTIjEJdsg0YXNF+YnEoLug8uYzky3gEBg5WWAlCoE6bJBhI7aAePFD325rWuFy4hL9J5PPec5//vrff7POefe67XM42nej4krgSWwBJbAElgCS2AJLIH/y2Afxy/DpMk0E5Up+goLgyaTaSbt+bWCTcUAr4kHt1cCRIsFO1LtVZgFxInPmbIgBYgRK/MS3iQWMqFhi3gy/e+ibBQrciouPSjXwqUXkkSLnMA98MJauNyEhEcBr0kPLLSupTYE8GIrxK8FPAyKMNEqYR3rXfT39AafOJUMYK7TnBwI0Dew198WXhrV341SB4HVohTxf1cAO+un65sAwuoCoKUSeOsA/HCcG2es8ZZPxgDK8gG6YJd4sJDqm4K+Ka9J8fbZulTjSRislJ+K57NZuAq6WYDbpZVj6dqvtJwetllkt3jRLB682OKwuPEMqvP7Y6LfoRs+5XziDJggE7gPTJXrKDueEZmRyq9Wi5U2iyYLc34TDR4GZSgArbWgDQZuEYVelxk+PgKbISMLgmDpmBFNPmA2EgJ0C6u4awKZR9LUHfdgQf855EXBdP1HvEkXefwE2T7AXmK94edBKIGlvkMG9U7XVZi07+NI99SFvvp9F9wXl0PfPQR9lZbxCeTvJ5KvUfAt7AHwJR5oAGrnJw2QWmmzSG27xqaDHu72w+8fGrKDBf0t4L4xIFoTk+wLGzagH0O+C2CQZFjSgXzEX5GlSomwW7TiRhtetOOLEfdgQT8Biaecp7RBui/ANcVOmAaq1UK0x2FRZ8NcrodTtRi+9lBcPZCESQ+YYavLlA7YDTDZlSUDMxDqFO2CBMbHob08fOjExEr3/hBYBwmcK5mBYAi2538SYBSeA7hIBrAZeMoWn1ywrsLl9z5gqSardCP9osFdEDd/9ZkAeBaGrGN/lBdMAf5W0p0L6u3ARiXYFmtzQR2/gyJ0wJhI99j+gQlW/xzidDqFtFheAtLkXH8A0Fus2xMEqMAAs1WUAVAIHQBzJ6tIxwu28x1pbK2JuEJiyKrB9uJKvEHjl/JcwO+olmOvz/3Sr5OX5XoD+depPjB/0VCuAuCVH3vP+mwbHeiY2l0aSajc0v5Nkzqe4OC5y2T/E8r1q6n90cd4xIhCa92sW2uMgOLFEpuXzactID+ssUkstZcAdhSlA7SesBCr3QJc03LZH7jS7EI4Yt1PS3U5Fe7APND/GR1oL6qRu09GBgmTZsen/bf5Cf2pMXNEmD1XM4ZltQygoi2nonrTQQydLuCXA23g7KPuUo1vrDAoU6lctH6uXRQKp06AbcO0tKGZuFQHfxOvXFyP2GTwdJUm2vMEV4/XD/xEMW+YD616utc6fqGfuhfh4VTsvW0+Z1EWBYYKfq4n2HMr1ckBLK8e/pfBbtr/7/1YAktgCSyBJbAElsCO9hdp+FP075MrqAAAAABJRU5ErkJggg==",c="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAABGCAAAAABkyax5AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAATISURBVFjD7ZhtbFNVGMd/2xw0l21uSkM2HQPGJkzGYDpgBC8SlaBimjE3A3zgRTQKhGD8oCIYlQ8wjS8ENLwaEUTIBAkD4wJmEEeWDAbSjjoHS7c1bs7hLmDXrbDt+qFr77nt7VIaSDTp8+mc5/zPr895znPuubcxKvfOYu8hOwqPwqPwKDwK19l9kUza4oLY4mzAcTA+nv7hq+4evF/prYHeD4DuNiukPxFKqUZi/fNkWe5QVVVVK+SzIWWR5dzhLobjALSbZ4aURQavl16VKPcAXJgRWhYZ/EK+qRT3GaDHPvUuwwdqH2M+lAN2JofWBVdL168X7DeZ9GTBCJ27pXVmnK/d7M7FPKeq0Z6DNc3s83pqstOGhv/xeS1kP9RYVcVGWfDbVqfN8MNt0jgoruKHHOoK/BJPGVvH62m62rn1rSxbjiuq2lMpy/I+beDPeXKj1ntvnaqq6jJZvtYtV2nuWtnyV+hS7Fixg7n7nk8G09ztsKvWN9C73v1GlpDyqQAl8ONvTNKmFyxR3uoOtaEdq5qxvJPo7UxcDF8MDK7u48ZZFk3ncOcCzJE4fC59pABYktv0aQh499pO5qz1OyzQfNbbvHiKpTGa0Mp4AFMRyncFIixuGaeuGMN3tyFpbEYBV73Nw0zJEuacL/Ru7QtAnm4D88fwtSHcdgRWJwtDZmgBoK2alwS/q3qQmDqLgCqPWUR1gwHcUwbS06KyD1oBqEDSzrh9/2ucKPcOLCD9AX3tzYbTBvCTTigZLuj6FZAA+o4yRVvgll1OnNuuDGZB1rMx5VCj9fyHqAbQBe4AxgG0uMXF7xCzsJdAy7M3d/lX4wvJUw0po0WZDRgD0Ag5hGuPgjUoLfWA/sF8HsgYhI8NGz7WVwViWqzABFHVVg1kAbRDgt990hCZUOhrJcKNIHgPkCLqy4HlSQAuJG0/XZeN4E/5W5IRfARwvyBXjoBUDMB1hOovKho6LfFwPQieAdwWRMeApd5suISs+Oz3b278PWyvET1FUfztWAF+TQj8IGRafL/fH4TwDNjaUkMHHwB/eLDUvXZ7g5uUMpO38yBdQYDJm9IDHiv+sEgKgse/DlW+0D2bbEgf+e6vFJRgRpeTXCN2r3f79HBKJsCGWwB0rPmZzD3ZvpFk/W54zQqPGMFdGERO3Doz9uW/KP/YPyttoPRL7a5NxiAvF3k83giuiCdOu6Az9n91yLkegIUvivfLRGgYFQipIx/qfmp9eZre3yCuSLj9TSuLrjpakjJGZyXq9HlweXYA+5qTvIHtFdMbtgfA6wefdoFwSE01el9Nzmy6FOirh/Gf1O97n1tBK5puCs75EFZIw80A1yUyN7dsG5nAIr2/vRPhCIfzfj5/PycW6l3naGrfk8hmz3C9/xhp07VeOJGnLuBQn86jODG7Fx5QCWC7j1ISe2dwFqGcCUz5gc3SjqOBwkq39Ax3CDe/wlZd1q1MG1Yo46DybdHdsZMPE+8UzuJnlTLxn7Y68sGFmYpswdu30b1S95IUHjzmzfzq77Wuq4lcmETcadtzgmq3bW6pfl6Yn1g311j6/B2HXHxbVTtXyHKlIOmU3+3RT4qJ6H/FplEJAK3JSUPKIoOHaf/fb/8oPAqPwv/L8H8BwYY2Ks9nd80AAAAASUVORK5CYII=",r="data:image/png;base64,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",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABGCAAAAAAifw/TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAASkSURBVGje7Zh/TJR1HMdfJ8jgSPEERBDBRCAcnErGkA2G4G6iBiNdbMVsM8iaaxCWSeZuukbS3FRoSWSU1dpsjOVaJjSbqYOEgOOHgByXMOJa3OVx8kNAPPrjfjxHnLaHaG71fP763vez9/N6ns/78/1+n+dk0zyaWPCIuBJYAktgCSyBJbAElsAS+L8MdneMdEazeTg0VfQVprrMZvNw0hNzBZv3ADwjHlxfCBApFuwotSwrDYgWXzP/nZuAKLEymfAlMZUK55aLJ9PxCv6VYkVOzaUF/7lwaYM40SIncCs8NRcuzbD+n4DnpAem6ubSGwL4fh3EzAXcA4og0SphHWtn6O9ode7RYW4AE40j8YsB2jt3eNnSlj7tYKjSB6wWbRJ/uwLYWT90tgogqHwR1BYCL+6GH45w7ZQ1X/tBP0B+JkATbBAPFkrdLOirMqoUuWXlifrj0FUoPxHDx+NwCTTjAL/lFfYnqz9Xc7LHZpHd4vsj4sH3ax0WV54i7Ex2VORLtMBpzsQOgxlSgbuAqUBD/pGUkJREfrFa7G+zyJi1/ZZocA/4BwJQVwpqP+AGoWg1qSsGesEXUtLABywH9agygRE9AUCLsIqbDLg9gDOuvTXu2mNBXwEZoTB0voIXaCKDK7DNHdjx3doF8FMX5ICl41i/ct3MVRj33IYQl9i7FV8BqtxlLsAOfUs3tBeODRiQH4olU6XgW9gMsJAY4BxQOmnUQWKhzSKl7RpL9rp+XMvbHW+FtL9f01y+dBZY0N8A7uoXRaqi4heChwfafuQbALqIB4sG5L1eirSwTcF2i/5uo73y88sqWVTAYcPpQ7PAgt4AsSecZdcheSHAZcU6GAKKlUK21WFR47mJdNenajNlEU+SGKSv2e/51+ZqhTjMWmAEVs6QNcBGAGNTmhuMAIFO2SZYz8AA1Bes6D5qcAn2gmGQrYLbs7paA+v5KGcY/MDPXn8jQB+sAThPCuAL2J0yTllX4fTrh7GUpOV50+ESvOvZ3ARADz6zwE0QPXlp1SJ4HLqtc7cLdpqs97sU+P0zZTjg7Q+2xVq9s5xfQRHYqY+lpT+704Dr9xC/fdke8EcvMd6zwEBA7dgWIEnO1XsAbXs0m32AMNDBeBH5AGRBA8DE8SKSkUE435PEypLgGmIDHtJin4BT19ubK/YalZ/K0wHPN9Uc3DVxs0Mjz09fAGRepXj35HldQRgAT//YVua+uq+zwbQxL4RA+Vj911XKGPz8Ji6y7SHcjm94w+n0s7/66PfrUaitm3VdiR5QJOTYvKw+OQby11Q2yVjpBYCI55MB6o6OsVa9HLis5qIXUFM9A7jfup8ac0yHVMwGc087GrnY3lS9g4+FCH3A+MCQ12pP4bepfyQ4yF6rYd200g3gwPXtB4qX7EXXOAO8dTHA6Ku6dxNmzE/PV4wmJTUPJnW5Tk7mb22ZnjbtMzhm3JmvcINlRapIlznLe12la+Bmm1BG2fz9UX62gohjvi5TH365JRzLvdrRL/4NMKY7wa5PxQvFtkHiO465+Ss1KBQPSDTbB2HC3Hw+saj4/30fS2AJLIElsASWwBLYEX8COk7eiUf+0c0AAAAASUVORK5CYII=",A="data:image/png;base64,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",i="data:image/png;base64,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",h="/zh-cn/assets/003b1add7c7cb3a3e1dc779588014fab-6e38a540.png",j="/zh-cn/assets/bfdd9f38cc1b1220f25734c917e16153-633580be.png",g="/zh-cn/assets/e05d5510aaeaf46a9e2cdf6ae3b818a2-b38efa29.png",d="/zh-cn/assets/7e948d626ced5b735cff1801c43863a5-6ab26544.png",u="/zh-cn/assets/dd296480837e3618f70d3410d656da79-b4b17dcf.jpeg",m=[s,a,n,e,l,p,t,c,r,o,A,i,h,j,g,d,u],y={label:"Xline 持久化存储设计与实现",description:"在 Xline 早期的原型阶段,我们采用了基于内存的存储来实现数据的持久化。这虽然简化了 Xline 原型设计的复杂度,提高了项目的开发和迭代速度,但带来的影响也是显著的:由于数据都存储在内存当中,因此一旦当进程 crash 后,节点的数据恢复需要依赖于从其他正常节点上拉取全量数据,这就需要较长的恢复时间。基于此方面的考虑,Xline 在最新发布的版本 v0.3.0 中引入了一个 Persistent Storage Layer,来将数据持久化到磁盘当中,同时向上层调用方屏蔽掉无关的底层细节。",location:"中国香港",author:["达坦科技"],tags:["Xline"],date:"2023-05-25",title:"Xline Persistent Storage Design and Implementation"},k=[{label:"引言",level:2},{label:"B+ Tree 读写放大分析",level:3},{label:"LSM Tree 读写放大分析",level:3},{label:"总结",level:3},{label:"持久化存储层设计与实现",level:2},{label:"整体架构与写入流程",level:3},{label:"接口设计",level:3},{label:"实现相关",level:3},{label:"性能评估",level:2}],f=`

    引言

    +const s="data:image/png;base64,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",a="data:image/png;base64,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",n="data:image/png;base64,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",e="data:image/png;base64,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",l="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABGCAAAAABp19w+AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAPnSURBVFjD7ZZdTFtlGMd/UJhrGWAdlY91MO0mY4EOyFzAhIaBaYJbJMgFURc1DKfGiyGaxWYxdYshkixuQPwITozuioSQ7EInmhmihu7DlZZtpaFUmbU10kbo2jEYX1605RzkbAZkJkvOc3POeZ7/+Z2c//uc57xxC9yriL9nZBkto2W0jJbRMlpG/3/ohMUzdyAYDOVUrpgw6wwGgyHD9jujg/UAz6wcfdEEkLscvWhIXF0VkL/y99bUlgJ5ywtxwu5pthK6MlZhquM1NN3L06JldIFmNWSuwG6JtAg9CI+vhswAFN4dfQfFv8asRXqNBPScBQpWgx4BdZZEXuhr1xLFDZc7IV+nAJi+HC5JAbg6tE8ZLc9fd43l6FNjRpZyV7RYMfFFD0BWRzL0m4ADL8D3R/mpNVLv/8gD0FgDYIUiKbRgyICg6KnuUb/8SUeZ7zg4TaoTBXw2BefANgXwxyGTp9x82szJkaiRMavnwlLouf5Fq7tb0Z3an5d7EDt8zKniEAShErgFjDfZaDxakV1Rxi8RqzVRIwN1e3+VQI+AJhMASzuY04Br5OCyVW7yjsJGqKiCVJh/24exBgj7SAfsQldb/SgkvBYUnVCdAxNnOnkRK9X8AE8lAPvO7oiH805ogHnH+x79zqU9u/u5omwJ9KLCPgxXTZNeP6ojxdQY1XwFewASKQC6gPbbATeUmaJG6qOMB1+R6hBBcQ245UvONeaVJMK6dbg8qIoAnJTAvA1Uo0p1la5UGzNSejzE0ILCD8UnxJILUJ4I0KfeCRNAi16oDi4aeblr+mnxTI4XK4IuIAyblzz9EuwCCFirFBAGMkVVKxTi9cLFpk3Dx/wSaBsU8mlDCNIgLeZSAOA6bAU4QwWwEXgoWg/MRnp24a13mG+rOpSEQwJthfzb57YkwyMwHMn91VQ7DigjrD+/1G8DkjQQbd7e2g5+B3XmkK8Yu2f/kJ/tEmggvX/yScCg4scZgCv1tj2pgA7cMNVMIwB1cAlg+ngz5cTBNr7DwOY27bcUp4vQincjx6HfSPow8ch6SND24Uhx957ujH/9oAJI7WUwyfHBUFNkxOjsYz9vmDrf02rf1bIVVfeMV/25/qU4Vcb0ezMHdCJ07Afme9OH2hwZIpY2H6B+oiHqae/JSVC9YYzeMtn+NcBjz5cDWI5NssOcAfSZ+UYpgWbGdTM3JbZ8o2MbslMF0ZR3QvnoeuF63BPWZsXaNuRe0CsADl/Ye7hF/NUsrFXcNBgGxgxOIbF2uycFPNxszJXskP8YD9TzbPhVKa/XIMZvaEUzdU3R/4j7cxMso2W0jJbRMvr+QP8NsluKv9sZ0eAAAAAASUVORK5CYII=",p="data:image/png;base64,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",t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABGCAAAAAAifw/TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAARbSURBVGje7ZhtTFtVGMd/UJjQCayOyngZ6OqGEOgYmQRMIAxMIzBBxIQ4lpkguvkJxgwbMabZTIjEJdsg0YXNF+YnEoLug8uYzky3gEBg5WWAlCoE6bJBhI7aAePFD325rWuFy4hL9J5PPec5//vrff7POefe67XM42nej4krgSWwBJbAElgCS2AJLIH/y2Afxy/DpMk0E5Up+goLgyaTaSbt+bWCTcUAr4kHt1cCRIsFO1LtVZgFxInPmbIgBYgRK/MS3iQWMqFhi3gy/e+ibBQrciouPSjXwqUXkkSLnMA98MJauNyEhEcBr0kPLLSupTYE8GIrxK8FPAyKMNEqYR3rXfT39AafOJUMYK7TnBwI0Dew198WXhrV341SB4HVohTxf1cAO+un65sAwuoCoKUSeOsA/HCcG2es8ZZPxgDK8gG6YJd4sJDqm4K+Ka9J8fbZulTjSRislJ+K57NZuAq6WYDbpZVj6dqvtJwetllkt3jRLB682OKwuPEMqvP7Y6LfoRs+5XziDJggE7gPTJXrKDueEZmRyq9Wi5U2iyYLc34TDR4GZSgArbWgDQZuEYVelxk+PgKbISMLgmDpmBFNPmA2EgJ0C6u4awKZR9LUHfdgQf855EXBdP1HvEkXefwE2T7AXmK94edBKIGlvkMG9U7XVZi07+NI99SFvvp9F9wXl0PfPQR9lZbxCeTvJ5KvUfAt7AHwJR5oAGrnJw2QWmmzSG27xqaDHu72w+8fGrKDBf0t4L4xIFoTk+wLGzagH0O+C2CQZFjSgXzEX5GlSomwW7TiRhtetOOLEfdgQT8Biaecp7RBui/ANcVOmAaq1UK0x2FRZ8NcrodTtRi+9lBcPZCESQ+YYavLlA7YDTDZlSUDMxDqFO2CBMbHob08fOjExEr3/hBYBwmcK5mBYAi2538SYBSeA7hIBrAZeMoWn1ywrsLl9z5gqSardCP9osFdEDd/9ZkAeBaGrGN/lBdMAf5W0p0L6u3ARiXYFmtzQR2/gyJ0wJhI99j+gQlW/xzidDqFtFheAtLkXH8A0Fus2xMEqMAAs1WUAVAIHQBzJ6tIxwu28x1pbK2JuEJiyKrB9uJKvEHjl/JcwO+olmOvz/3Sr5OX5XoD+depPjB/0VCuAuCVH3vP+mwbHeiY2l0aSajc0v5Nkzqe4OC5y2T/E8r1q6n90cd4xIhCa92sW2uMgOLFEpuXzactID+ssUkstZcAdhSlA7SesBCr3QJc03LZH7jS7EI4Yt1PS3U5Fe7APND/GR1oL6qRu09GBgmTZsen/bf5Cf2pMXNEmD1XM4ZltQygoi2nonrTQQydLuCXA23g7KPuUo1vrDAoU6lctH6uXRQKp06AbcO0tKGZuFQHfxOvXFyP2GTwdJUm2vMEV4/XD/xEMW+YD616utc6fqGfuhfh4VTsvW0+Z1EWBYYKfq4n2HMr1ckBLK8e/pfBbtr/7/1YAktgCSyBJbAElsCO9hdp+FP075MrqAAAAABJRU5ErkJggg==",c="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAABGCAAAAABkyax5AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAATISURBVFjD7ZhtbFNVGMd/2xw0l21uSkM2HQPGJkzGYDpgBC8SlaBimjE3A3zgRTQKhGD8oCIYlQ8wjS8ENLwaEUTIBAkD4wJmEEeWDAbSjjoHS7c1bs7hLmDXrbDt+qFr77nt7VIaSDTp8+mc5/zPr895znPuubcxKvfOYu8hOwqPwqPwKDwK19l9kUza4oLY4mzAcTA+nv7hq+4evF/prYHeD4DuNiukPxFKqUZi/fNkWe5QVVVVK+SzIWWR5dzhLobjALSbZ4aURQavl16VKPcAXJgRWhYZ/EK+qRT3GaDHPvUuwwdqH2M+lAN2JofWBVdL168X7DeZ9GTBCJ27pXVmnK/d7M7FPKeq0Z6DNc3s83pqstOGhv/xeS1kP9RYVcVGWfDbVqfN8MNt0jgoruKHHOoK/BJPGVvH62m62rn1rSxbjiuq2lMpy/I+beDPeXKj1ntvnaqq6jJZvtYtV2nuWtnyV+hS7Fixg7n7nk8G09ztsKvWN9C73v1GlpDyqQAl8ONvTNKmFyxR3uoOtaEdq5qxvJPo7UxcDF8MDK7u48ZZFk3ncOcCzJE4fC59pABYktv0aQh499pO5qz1OyzQfNbbvHiKpTGa0Mp4AFMRyncFIixuGaeuGMN3tyFpbEYBV73Nw0zJEuacL/Ru7QtAnm4D88fwtSHcdgRWJwtDZmgBoK2alwS/q3qQmDqLgCqPWUR1gwHcUwbS06KyD1oBqEDSzrh9/2ucKPcOLCD9AX3tzYbTBvCTTigZLuj6FZAA+o4yRVvgll1OnNuuDGZB1rMx5VCj9fyHqAbQBe4AxgG0uMXF7xCzsJdAy7M3d/lX4wvJUw0po0WZDRgD0Ag5hGuPgjUoLfWA/sF8HsgYhI8NGz7WVwViWqzABFHVVg1kAbRDgt990hCZUOhrJcKNIHgPkCLqy4HlSQAuJG0/XZeN4E/5W5IRfARwvyBXjoBUDMB1hOovKho6LfFwPQieAdwWRMeApd5suISs+Oz3b278PWyvET1FUfztWAF+TQj8IGRafL/fH4TwDNjaUkMHHwB/eLDUvXZ7g5uUMpO38yBdQYDJm9IDHiv+sEgKgse/DlW+0D2bbEgf+e6vFJRgRpeTXCN2r3f79HBKJsCGWwB0rPmZzD3ZvpFk/W54zQqPGMFdGERO3Doz9uW/KP/YPyttoPRL7a5NxiAvF3k83giuiCdOu6Az9n91yLkegIUvivfLRGgYFQipIx/qfmp9eZre3yCuSLj9TSuLrjpakjJGZyXq9HlweXYA+5qTvIHtFdMbtgfA6wefdoFwSE01el9Nzmy6FOirh/Gf1O97n1tBK5puCs75EFZIw80A1yUyN7dsG5nAIr2/vRPhCIfzfj5/PycW6l3naGrfk8hmz3C9/xhp07VeOJGnLuBQn86jODG7Fx5QCWC7j1ISe2dwFqGcCUz5gc3SjqOBwkq39Ax3CDe/wlZd1q1MG1Yo46DybdHdsZMPE+8UzuJnlTLxn7Y68sGFmYpswdu30b1S95IUHjzmzfzq77Wuq4lcmETcadtzgmq3bW6pfl6Yn1g311j6/B2HXHxbVTtXyHKlIOmU3+3RT4qJ6H/FplEJAK3JSUPKIoOHaf/fb/8oPAqPwv/L8H8BwYY2Ks9nd80AAAAASUVORK5CYII=",r="data:image/png;base64,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",o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAABGCAAAAAAifw/TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAASkSURBVGje7Zh/TJR1HMdfJ8jgSPEERBDBRCAcnErGkA2G4G6iBiNdbMVsM8iaaxCWSeZuukbS3FRoSWSU1dpsjOVaJjSbqYOEgOOHgByXMOJa3OVx8kNAPPrjfjxHnLaHaG71fP763vez9/N6ns/78/1+n+dk0zyaWPCIuBJYAktgCSyBJbAElsAS+L8MdneMdEazeTg0VfQVprrMZvNw0hNzBZv3ADwjHlxfCBApFuwotSwrDYgWXzP/nZuAKLEymfAlMZUK55aLJ9PxCv6VYkVOzaUF/7lwaYM40SIncCs8NRcuzbD+n4DnpAem6ubSGwL4fh3EzAXcA4og0SphHWtn6O9ode7RYW4AE40j8YsB2jt3eNnSlj7tYKjSB6wWbRJ/uwLYWT90tgogqHwR1BYCL+6GH45w7ZQ1X/tBP0B+JkATbBAPFkrdLOirMqoUuWXlifrj0FUoPxHDx+NwCTTjAL/lFfYnqz9Xc7LHZpHd4vsj4sH3ax0WV54i7Ex2VORLtMBpzsQOgxlSgbuAqUBD/pGUkJREfrFa7G+zyJi1/ZZocA/4BwJQVwpqP+AGoWg1qSsGesEXUtLABywH9agygRE9AUCLsIqbDLg9gDOuvTXu2mNBXwEZoTB0voIXaCKDK7DNHdjx3doF8FMX5ICl41i/ct3MVRj33IYQl9i7FV8BqtxlLsAOfUs3tBeODRiQH4olU6XgW9gMsJAY4BxQOmnUQWKhzSKl7RpL9rp+XMvbHW+FtL9f01y+dBZY0N8A7uoXRaqi4heChwfafuQbALqIB4sG5L1eirSwTcF2i/5uo73y88sqWVTAYcPpQ7PAgt4AsSecZdcheSHAZcU6GAKKlUK21WFR47mJdNenajNlEU+SGKSv2e/51+ZqhTjMWmAEVs6QNcBGAGNTmhuMAIFO2SZYz8AA1Bes6D5qcAn2gmGQrYLbs7paA+v5KGcY/MDPXn8jQB+sAThPCuAL2J0yTllX4fTrh7GUpOV50+ESvOvZ3ARADz6zwE0QPXlp1SJ4HLqtc7cLdpqs97sU+P0zZTjg7Q+2xVq9s5xfQRHYqY+lpT+704Dr9xC/fdke8EcvMd6zwEBA7dgWIEnO1XsAbXs0m32AMNDBeBH5AGRBA8DE8SKSkUE435PEypLgGmIDHtJin4BT19ubK/YalZ/K0wHPN9Uc3DVxs0Mjz09fAGRepXj35HldQRgAT//YVua+uq+zwbQxL4RA+Vj911XKGPz8Ji6y7SHcjm94w+n0s7/66PfrUaitm3VdiR5QJOTYvKw+OQby11Q2yVjpBYCI55MB6o6OsVa9HLis5qIXUFM9A7jfup8ac0yHVMwGc087GrnY3lS9g4+FCH3A+MCQ12pP4bepfyQ4yF6rYd200g3gwPXtB4qX7EXXOAO8dTHA6Ku6dxNmzE/PV4wmJTUPJnW5Tk7mb22ZnjbtMzhm3JmvcINlRapIlznLe12la+Bmm1BG2fz9UX62gohjvi5TH365JRzLvdrRL/4NMKY7wa5PxQvFtkHiO465+Ss1KBQPSDTbB2HC3Hw+saj4/30fS2AJLIElsASWwBLYEX8COk7eiUf+0c0AAAAASUVORK5CYII=",A="data:image/png;base64,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",i="data:image/png;base64,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",h="/zh-cn/assets/003b1add7c7cb3a3e1dc779588014fab-6e38a540.png",j="/zh-cn/assets/bfdd9f38cc1b1220f25734c917e16153-633580be.png",g="/zh-cn/assets/e05d5510aaeaf46a9e2cdf6ae3b818a2-b38efa29.png",d="/zh-cn/assets/7e948d626ced5b735cff1801c43863a5-6ab26544.png",u="/zh-cn/assets/dd296480837e3618f70d3410d656da79-b4b17dcf.jpeg",m=[s,a,n,e,l,p,t,c,r,o,A,i,h,j,g,d,u],y={label:"Xline 持久化存储设计与实现",description:"在 Xline 早期的原型阶段,我们采用了基于内存的存储来实现数据的持久化。这虽然简化了 Xline 原型设计的复杂度,提高了项目的开发和迭代速度,但带来的影响也是显著的:由于数据都存储在内存当中,因此一旦当进程 crash 后,节点的数据恢复需要依赖于从其他正常节点上拉取全量数据,这就需要较长的恢复时间。基于此方面的考虑,Xline 在最新发布的版本 v0.3.0 中引入了一个 Persistent Storage Layer,来将数据持久化到磁盘当中,同时向上层调用方屏蔽掉无关的底层细节。",location:"中国香港",author:["达坦科技"],tags:["Xline"],date:"2023-05-25",title:"Xline Persistent Storage Design and Implementation"},f=[{label:"引言",level:2},{label:"B+ Tree 读写放大分析",level:3},{label:"LSM Tree 读写放大分析",level:3},{label:"总结",level:3},{label:"持久化存储层设计与实现",level:2},{label:"整体架构与写入流程",level:3},{label:"接口设计",level:3},{label:"实现相关",level:3},{label:"性能评估",level:2}],k=`

    引言

    在 Xline 早期的原型阶段,我们采用了基于内存的存储来实现数据的持久化。这虽然简化了 Xline 原型设计的复杂度,提高了项目的开发和迭代速度,但带来的影响也是显著的:由于数据都存储在内存当中,因此一旦当进程 crash 后,节点的数据恢复需要依赖于从其他正常节点上拉取全量数据,这就需要较长的恢复时间。

    基于此方面的考虑,Xline 在最新发布的版本 v0.3.0 中引入了一个 Persistent Storage Layer,来将数据持久化到磁盘当中,同时向上层调用方屏蔽掉无关的底层细节。

    ## 存储引擎选型

    @@ -476,4 +476,4 @@ StorageEngine Trait 定义(engine/src/engine_api.rs):

    性能评估

    在 v0.3.0 的新版本中,我们除了引入了 Persistent Storage Layer 以外,还对 CURP 的部分内容做了一些大型的重构。在重构完毕,添加新功能后,前不久通过了 validation test 和 Integration test。性能部分的测试信息,已经在 Xlinev0.4.0  中释放出来。

    性能报告请参考链接:

    -

    https://github.com/datenlord/Xline/blob/master/img/xline-key-perf.png

    `;export{m as assetURLs,f as default,y as metadata,k as toc}; +

    https://github.com/datenlord/Xline/blob/master/img/xline-key-perf.png

    `;export{m as assetURLs,k as default,y as metadata,f as toc}; diff --git a/zh-cn/assets/index-9edebc8f.js b/zh-cn/assets/index-a27a1569.js similarity index 99% rename from zh-cn/assets/index-9edebc8f.js rename to zh-cn/assets/index-a27a1569.js index 5b7b69e..cc7be85 100644 --- a/zh-cn/assets/index-9edebc8f.js +++ b/zh-cn/assets/index-a27a1569.js @@ -1,4 +1,4 @@ -const v="/zh-cn/assets/cover-92745c95.jpg",e="/zh-cn/assets/image1-638abd39.png",s="/zh-cn/assets/image2-2a8f796e.gif",p="/zh-cn/assets/image3-ae1841b7.png",a="/zh-cn/assets/image4-5bf432ec.png",n="/zh-cn/assets/image5-81eb5b8d.png",l="/zh-cn/assets/image6-537c8738.png",o="/zh-cn/assets/image7-b58de99e.png",i="/zh-cn/assets/image8-c6334c83.png",t="/zh-cn/assets/image9-6340ddaa.png",c="/zh-cn/assets/image10-ac1b70de.png",r="/zh-cn/assets/image11-1f1870d2.png",_="/zh-cn/assets/image12-01c249ea.png",m="/zh-cn/assets/image13-a48112ad.png",u="/zh-cn/assets/image14-d780d4f2.png",d="/zh-cn/assets/image15-f58a4d86.png",h="/zh-cn/assets/image16-79c3985b.png",k="/zh-cn/assets/image17-863e7adb.png",f="/zh-cn/assets/image18-931263d9.png",g="/zh-cn/assets/image19-8f35c101.png",P="/zh-cn/assets/image20-ef5a452f.png",j="/zh-cn/assets/image21-ebff1568.png",b="/zh-cn/assets/image22-b3b3dbaa.png",F="/zh-cn/assets/image23-12fff2c5.png",w=[v,e,s,p,a,n,l,o,i,t,c,r,_,m,u,d,h,k,f,g,P,j,b,F],T={label:"数据流式编程在硬件设计中的应用",description:"数据流式编程(Dataflow Programming)是一种存在已久的程序设计范式,可以追溯到19世纪60年代,由MIT的Jack Dennis教授开创。",cover:"./cover.jpg",location:"中国香港",author:["米明恒"],tags:["硬件加速"],date:"2023-10-26",title:"Application of data flow programming in hardware design"},y=[{label:"数据流式编程的思想",level:2},{label:"数据流式编程思想简介",level:3},{label:"软件开发中的数据流式编程思想",level:3},{label:"软件数据流 vs 硬件数据流",level:3},{label:"数据流思想与状态机思想的对比",level:3},{label:"Bluespec 语言及其流式编程框架 PAClib",level:2},{label:"Bluespec SystemVerilog(BSV)和 PAClib 简介",level:3},{label:"PAClib 中的基础开发组件",level:3},{label:"IFFT 应用实例",level:2},{label:"需求背景",level:3},{label:"代码实现",level:3},{label:"写在最后",level:2}],I=`

    数据流式编程的思想

    +const v="/zh-cn/assets/cover-92745c95.jpg",e="/zh-cn/assets/image1-638abd39.png",s="/zh-cn/assets/image2-2a8f796e.gif",p="/zh-cn/assets/image3-ae1841b7.png",a="/zh-cn/assets/image4-5bf432ec.png",n="/zh-cn/assets/image5-81eb5b8d.png",l="/zh-cn/assets/image6-537c8738.png",o="/zh-cn/assets/image7-b58de99e.png",i="/zh-cn/assets/image8-c6334c83.png",t="/zh-cn/assets/image9-6340ddaa.png",c="/zh-cn/assets/image10-ac1b70de.png",r="/zh-cn/assets/image11-1f1870d2.png",_="/zh-cn/assets/image12-01c249ea.png",m="/zh-cn/assets/image13-a48112ad.png",u="/zh-cn/assets/image14-d780d4f2.png",d="/zh-cn/assets/image15-f58a4d86.png",h="/zh-cn/assets/image16-79c3985b.png",k="/zh-cn/assets/image17-863e7adb.png",f="/zh-cn/assets/image18-931263d9.png",g="/zh-cn/assets/image19-8f35c101.png",b="/zh-cn/assets/image20-ef5a452f.png",j="/zh-cn/assets/image21-ebff1568.png",P="/zh-cn/assets/image22-b3b3dbaa.png",F="/zh-cn/assets/image23-12fff2c5.png",w=[v,e,s,p,a,n,l,o,i,t,c,r,_,m,u,d,h,k,f,g,b,j,P,F],T={label:"数据流式编程在硬件设计中的应用",description:"数据流式编程(Dataflow Programming)是一种存在已久的程序设计范式,可以追溯到19世纪60年代,由MIT的Jack Dennis教授开创。",cover:"./cover.jpg",location:"中国香港",author:["米明恒"],tags:["硬件加速"],date:"2023-10-26",title:"Application of data flow programming in hardware design"},y=[{label:"数据流式编程的思想",level:2},{label:"数据流式编程思想简介",level:3},{label:"软件开发中的数据流式编程思想",level:3},{label:"软件数据流 vs 硬件数据流",level:3},{label:"数据流思想与状态机思想的对比",level:3},{label:"Bluespec 语言及其流式编程框架 PAClib",level:2},{label:"Bluespec SystemVerilog(BSV)和 PAClib 简介",level:3},{label:"PAClib 中的基础开发组件",level:3},{label:"IFFT 应用实例",level:2},{label:"需求背景",level:3},{label:"代码实现",level:3},{label:"写在最后",level:2}],I=`

    数据流式编程的思想

    数据流式编程思想简介

    数据流式编程(Dataflow Programming)是一种存在已久的程序设计范式,可以追溯到 19 世纪 60 年代,由 MIT 的 Jack Dennis 教授开创。

    图片

    @@ -261,7 +261,7 @@ endfunction f_radix4 (stagenum), param_buf_unfunnel); -

    图片

    +

    图片

    如上述代码片段和图 20 所示,通过 mkMap_fn_with_funnel_indexed 函数的第一个参数来决定实例化多少个 f_radix4 计算单元,从而改变计算的并行度。

        let permuter = mkFn_to_Pipe_Buffered (False, f_permute,
                                                 param_buf_permuter_output);
    @@ -273,7 +273,7 @@ endfunction
                             mkCompose (mapper,
                                         mkCompose (ungrouper, permuter)));
     
    -

    图片

    +

    图片

    图 22 节点的串联

    如上述代码片段和图 22 所示,通过 mkCompose 可以实现多个 Node 之间的顺序连接。

    图片

    diff --git a/zh-cn/assets/index-fc5f1793.js b/zh-cn/assets/index-a84bdbd8.js similarity index 95% rename from zh-cn/assets/index-fc5f1793.js rename to zh-cn/assets/index-a84bdbd8.js index 8a387bb..02d062b 100644 --- a/zh-cn/assets/index-fc5f1793.js +++ b/zh-cn/assets/index-a84bdbd8.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-39643179.png",e="/zh-cn/assets/image1-a93ba076.jpg",s="/zh-cn/assets/image2-4624885a.gif",p="/zh-cn/assets/image3-ea54df7e.jpg",a=[t,e,s,p],c={label:"直播预告 | RDMA软件接口高层封装",description:"RDMA 作为高速通信协议被数据中心广泛使用,但是因为底层接口设计得过于繁复,对使用者造成了很大的不便,因此我们使用 Rust 语言对 RDMA 进行了一层高层封装。这次分享将介绍这层封装的做法和原理。",cover:"./cover.png",location:"香港",date:"2022-05-17",title:"RDMA Software Interface High Level Package"},l=[{label:"嘉宾介绍",level:2},{label:"讨论内容",level:2},{label:"观看方式",level:2},{label:"特别鸣谢",level:2}],o=`

    嘉宾介绍

    +const t="/zh-cn/assets/cover-39643179.png",e="/zh-cn/assets/image1-a93ba076.jpg",p="/zh-cn/assets/image2-4624885a.gif",s="/zh-cn/assets/image3-ea54df7e.jpg",a=[t,e,p,s],c={label:"直播预告 | RDMA软件接口高层封装",description:"RDMA 作为高速通信协议被数据中心广泛使用,但是因为底层接口设计得过于繁复,对使用者造成了很大的不便,因此我们使用 Rust 语言对 RDMA 进行了一层高层封装。这次分享将介绍这层封装的做法和原理。",cover:"./cover.png",location:"香港",date:"2022-05-17",title:"RDMA Software Interface High Level Package"},l=[{label:"嘉宾介绍",level:2},{label:"讨论内容",level:2},{label:"观看方式",level:2},{label:"特别鸣谢",level:2}],o=`

    嘉宾介绍

    施继成

    达坦科技联合创始人兼 CTO,复旦大学软件工程本硕,师从华为基础软件首席科学家、鸿蒙实验室主任陈海波教授。擅长操作系统内核开发、分布式系统、嵌入式系统,对分布式数据一致性有钻深的研究,发表多篇操作系统内核相关论文,累计数百次引用。毕业后曾在谷歌中国、微软亚太和阿里巴巴等公司从事分布式计算和存储等相关工作。入选 2022 年度 6 氪 S 级创业者名册,荣获中国“企业工具与底层软件”领域 “36 位 36 岁以下创业者“称号。

    讨论内容

    @@ -13,8 +13,8 @@ const t="/zh-cn/assets/cover-39643179.png",e="/zh-cn/assets/image1-a93ba076.jpg"

    本次直播我们将在【腾讯会议】进行,欢迎大家观看,没时间观看直播的同学可以关注回放,会议结束后回放在阅码场官网上传,年卡阅码场会员和其他阅码场训练营专业群资深用户免费点播。

    图片

    特别鸣谢

    -

    图片

    +

    图片

    转发本文,文末留言提问、加群提问、或者现场提问,我们将赠送 1 本书,数量有限,送完为止。

    ↓ 扫码加入本次直播交流群;

    -

    图片

    +

    图片

    咨询的小伙伴,可添加小月@阅码场的微信 Linuxer2016 咨询

    `;export{a as assetURLs,o as default,c as metadata,l as toc}; diff --git a/zh-cn/assets/index-7b1bdbd4.js b/zh-cn/assets/index-b2f220f4.js similarity index 96% rename from zh-cn/assets/index-7b1bdbd4.js rename to zh-cn/assets/index-b2f220f4.js index 5643b0b..aac8d66 100644 --- a/zh-cn/assets/index-7b1bdbd4.js +++ b/zh-cn/assets/index-b2f220f4.js @@ -1,4 +1,4 @@ -const i="/zh-cn/assets/cover-964a3e23.png",e="/zh-cn/assets/image1-c300ce2e.png",n="/zh-cn/assets/image2-b3df764b.png",l="/zh-cn/assets/image3-6b1d2584.png",s="/zh-cn/assets/image4-034a33e9.png",t="/zh-cn/assets/image5-6a5e807d.png",o=[i,e,n,l,s,t],a={label:"达坦科技2023开源毕业设计实习招募中",description:"自1984年Richard Stallman发起GMU和Free Software Foundation,开源作为一种全新的软件开发和使用模式正式诞生。One for All, All for One的理念传播开后,之后的40年里在开源软件社区被无数开发者实践和传承。开源软件因其节省费用(不需要购买许可证,大大降低了IT投入成本)、安全稳定(安全漏洞少)、技术成熟、个性化定制、自主知识产权等优势获得喜人的发展,由此我们也见证了无数开源软件项目的成长和成熟",cover:"./cover.png",location:"海南",date:"2023-01-06",title:"Datan Technology 2023 Open Source Graduation Design Internship Recruitment"},r=[{label:"毕设项目的背景",level:2},{label:"细分方向",level:2},{label:"开源毕设导师组",level:2},{label:"开源毕设项目的流程",level:2},{label:"申请流程",level:2}],p=`

    自 1984 年 Richard Stallman 发起 GMU 和 Free Software Foundation,开源作为一种全新的软件开发和使用模式正式诞生。One for All, All for One 的理念传播开后,之后的 40 年里在开源软件社区被无数开发者实践和传承。开源软件因其节省费用(不需要购买许可证,大大降低了 IT 投入成本)、安全稳定(安全漏洞少)、技术成熟、个性化定制、自主知识产权等优势获得喜人的发展,由此我们也见证了无数开源软件项目的成长和成熟

    +const i="/zh-cn/assets/cover-964a3e23.png",e="/zh-cn/assets/image1-c300ce2e.png",n="/zh-cn/assets/image2-b3df764b.png",l="/zh-cn/assets/image3-6b1d2584.png",s="/zh-cn/assets/image4-034a33e9.png",t="/zh-cn/assets/image5-6a5e807d.png",o=[i,e,n,l,s,t],a={label:"达坦科技2023开源毕业设计实习招募中",description:"自1984年Richard Stallman发起GMU和Free Software Foundation,开源作为一种全新的软件开发和使用模式正式诞生。One for All, All for One的理念传播开后,之后的40年里在开源软件社区被无数开发者实践和传承。开源软件因其节省费用(不需要购买许可证,大大降低了IT投入成本)、安全稳定(安全漏洞少)、技术成熟、个性化定制、自主知识产权等优势获得喜人的发展,由此我们也见证了无数开源软件项目的成长和成熟",cover:"./cover.png",location:"海南",date:"2023-01-06",title:"Datan Technology 2023 Open Source Graduation Design Internship Recruitment"},p=[{label:"毕设项目的背景",level:2},{label:"细分方向",level:2},{label:"开源毕设导师组",level:2},{label:"开源毕设项目的流程",level:2},{label:"申请流程",level:2}],r=`

    自 1984 年 Richard Stallman 发起 GMU 和 Free Software Foundation,开源作为一种全新的软件开发和使用模式正式诞生。One for All, All for One 的理念传播开后,之后的 40 年里在开源软件社区被无数开发者实践和传承。开源软件因其节省费用(不需要购买许可证,大大降低了 IT 投入成本)、安全稳定(安全漏洞少)、技术成熟、个性化定制、自主知识产权等优势获得喜人的发展,由此我们也见证了无数开源软件项目的成长和成熟

    图片

    相比而言,硬件开源之路更为崎岖。因为对物理器件的依赖度更高,复杂度更高,修改难度大,硬件开源之路走得比较缓慢。虽然是一条少有人走的路,但其正确性毋庸置疑。开源芯片生态(Open Source Chip Ecosystem-OSCE)的优势,包括可以节约市场化时间,以及知识产权的成本,EDA 工具、设施和劳动力。硬件开发者也期盼硬件设计可以像软件设计一样简单。

    图片

    @@ -46,4 +46,4 @@ const i="/zh-cn/assets/cover-964a3e23.png",e="/zh-cn/assets/image1-c300ce2e.png"

    欢迎您预约直播,或者登陆腾讯会议观看直播:

    图片

    对开源毕设感兴趣的朋友,欢迎添加小助手微信,加入达坦科技开源毕设群。

    -

    图片

    `;export{o as assetURLs,p as default,a as metadata,r as toc}; +

    图片

    `;export{o as assetURLs,r as default,a as metadata,p as toc}; diff --git a/zh-cn/assets/index-58491811.js b/zh-cn/assets/index-b9ee750d.js similarity index 89% rename from zh-cn/assets/index-58491811.js rename to zh-cn/assets/index-b9ee750d.js index 440c2f3..b0d35f5 100644 --- a/zh-cn/assets/index-58491811.js +++ b/zh-cn/assets/index-b9ee750d.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-ccfdc2fa.jpg",e="/zh-cn/assets/image1-9be7272d.jpg",a="/zh-cn/assets/image2-20a7bcaa.jpg",n=[t,e,a],s={label:"DatenLord X Segmentfault直播预告 | CURP协议的工业化实践",description:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源的分布式KV存储Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性,方便业务系统实现多地多中心多活部署。",cover:"./cover.jpg",location:"新加坡",date:"2023-08-15",title:"DatenLord X Segmentfault Live Stream Preview l CURP Protocol in Industrial Practice"},c=[{label:"CURP 协议",level:2}],o=`

    图片

    +const t="/zh-cn/assets/cover-ccfdc2fa.jpg",e="/zh-cn/assets/image1-9be7272d.jpg",n="/zh-cn/assets/image2-20a7bcaa.jpg",a=[t,e,n],s={label:"DatenLord X Segmentfault直播预告 | CURP协议的工业化实践",description:"传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord推出开源的分布式KV存储Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性,方便业务系统实现多地多中心多活部署。",cover:"./cover.jpg",location:"新加坡",date:"2023-08-15",title:"DatenLord X Segmentfault Live Stream Preview l CURP Protocol in Industrial Practice"},o=[{label:"CURP 协议",level:2}],c=`

    图片

    CURP 协议

    传统单数据中心解决方案无法满足跨数据中心的场景对性能和一致性的需求。DatenLord 推出开源的分布式 KV 存储 Xline,针对多数据中心场景,实现数据的高性能跨云、跨数据中心共享访问,并且保证数据的一致性,方便业务系统实现多地多中心多活部署。

    Xline 中所使用的共识协议,即非 Paxos ,也非 Raft,而是一种新的名为 Curp 的共识协议,其全称为 “Consistent Unordered Replication Protocol”。CURP 协议发表于 2019 年,其协议主要论述的是主从备份的场景,共识场景仅仅在附录中有简单表述,缺乏严肃验证。

    @@ -6,4 +6,4 @@ const t="/zh-cn/assets/cover-ccfdc2fa.jpg",e="/zh-cn/assets/image1-9be7272d.jpg"

    本次直播分享,达坦科技联合思否,邀请达坦科技的联合创始人兼 CTO 施继成做一个关于 CURP 协议的工业化实践的直播,分享将论述 CURP 协议的正确性,同时以 KV 存储软件 Xline 为例子讲述如何在工业产品中使用该共识算法。

    图片

    会议号:474-6575-9473

    -

    图片

    `;export{n as assetURLs,o as default,s as metadata,c as toc}; +

    图片

    `;export{a as assetURLs,c as default,s as metadata,o as toc}; diff --git a/zh-cn/assets/index-1f6cee43.js b/zh-cn/assets/index-c832920a.js similarity index 89% rename from zh-cn/assets/index-1f6cee43.js rename to zh-cn/assets/index-c832920a.js index f2eee82..28e9c82 100644 --- a/zh-cn/assets/index-1f6cee43.js +++ b/zh-cn/assets/index-c832920a.js @@ -1,4 +1,4 @@ -const s="/zh-cn/assets/cover-48216986.png",t="/zh-cn/assets/image1-02771bf0.jpg",n="/zh-cn/assets/image1-f46bfcc6.jpg",o=[s,t,n],r={label:"当RDMA遇到Rust",description:"2022年8月5日-6日,一年一度的中国开源基础设施活动日(OpenInfra Days China)即将在线上举行。本次会议没有限定一个统一的主题,主要聚焦云计算基础设施、云原生技术与应用实践、开源治理、5G、算力网络与边缘计算五大主题方向。",cover:"./cover.png",location:"新加坡",date:"2022-08-04",title:"When RDMA meets Rust"},p=[],g=`

    封面

    +const s="/zh-cn/assets/cover-48216986.png",t="/zh-cn/assets/image1-02771bf0.jpg",n="/zh-cn/assets/image1-f46bfcc6.jpg",r=[s,t,n],o={label:"当RDMA遇到Rust",description:"2022年8月5日-6日,一年一度的中国开源基础设施活动日(OpenInfra Days China)即将在线上举行。本次会议没有限定一个统一的主题,主要聚焦云计算基础设施、云原生技术与应用实践、开源治理、5G、算力网络与边缘计算五大主题方向。",cover:"./cover.png",location:"新加坡",date:"2022-08-04",title:"When RDMA meets Rust"},p=[],e=`

    封面

    2022 年 8 月 5 日-6 日,**一年一度的中国开源基础设施活动日(OpenInfra Days China)**即将在线上举行。本次会议没有限定一个统一的主题,主要聚焦云计算基础设施、云原生技术与应用实践、开源治理、5G、算力网络与边缘计算五大主题方向。

    云计算基础设施分论坛主要聚焦云计算基础设施领域的前沿技术和优秀实践,围绕多硬件架构和多操作系统支持、人工智能技术应用、网络与存储,数据处理 DPU 及其他加速硬件、硬件自动化和智能运维等方面展开技术分享和探讨。达坦科技联合创始人施继成将在这一分论坛做题为当 RDMA 遇到 Rust 的专题分享。

    图片

    @@ -10,4 +10,4 @@ const s="/zh-cn/assets/cover-48216986.png",t="/zh-cn/assets/image1-02771bf0.jpg"

    参会方式

    想要了解更多达坦科技为什么选择 Rust 做 RDMA 库,以及开发设计背后的理念、逻辑、和实践经验,欢迎扫描海报二维码,免费注册报名。

    有意加入 Rust 前沿交流讨论群,请添加小助手微信:

    -

    图片

    `;export{o as assetURLs,g as default,r as metadata,p as toc}; +

    图片

    `;export{r as assetURLs,e as default,o as metadata,p as toc}; diff --git a/zh-cn/assets/index-2bfed728.js b/zh-cn/assets/index-dcc07e36.js similarity index 99% rename from zh-cn/assets/index-2bfed728.js rename to zh-cn/assets/index-dcc07e36.js index 6c36a0b..bd92ad6 100644 --- a/zh-cn/assets/index-2bfed728.js +++ b/zh-cn/assets/index-dcc07e36.js @@ -1,4 +1,4 @@ -const s="/zh-cn/assets/image1-85650830.png",a="/zh-cn/assets/image2-d3ac686f.png",t="/zh-cn/assets/image3-d19685f7.png",e="/zh-cn/assets/image4-22c90bed.png",l="/zh-cn/assets/image5-060ec542.png",p="/zh-cn/assets/image6-e95accb5.png",n="/zh-cn/assets/image7-39b0aa47.png",c="/zh-cn/assets/image8-f5342e9f.png",i="/zh-cn/assets/image9-f8fdd108.png",r="/zh-cn/assets/image10-fea0520f.png",C="/zh-cn/assets/image11-3896bab5.png",o="/zh-cn/assets/image12-5d3c96d7.png",h="/zh-cn/assets/image13-56596c1a.png",d="/zh-cn/assets/image14-1cff1399.png",u="/zh-cn/assets/image15-f50d9208.png",m="/zh-cn/assets/image16-73064f95.png",g="/zh-cn/assets/image17-8fbf2614.png",R="/zh-cn/assets/image18-04a62cf7.png",_="/zh-cn/assets/image19-b4bc01e2.png",b="/zh-cn/assets/image20-41386794.png",j="/zh-cn/assets/image21-453c426e.png",S="/zh-cn/assets/image22-e0049342.png",E="/zh-cn/assets/image23-989a38cf.png",y=[s,a,t,e,l,p,n,c,i,r,C,o,h,d,u,m,g,R,_,b,j,S,E],f={label:"基于BSV的高性能并行CRC硬件电路生成器",description:"循环冗余校验码,即Cyclic Redundancy Check (CRC), 是一种在各种通信系统中广泛应用的检错机制。CRC算法的工作原理和哈希函数类似,具体来说,其对任意长度的数据计算出一段唯一的标识(校验和), 然后根据这个标识来判断该数据在传输过程中是否发生变化。CRC检错码在实际生活中有着广泛的应用,诸如网络通信,存储系统等场景下都需要CRC来保证数据传输的正确性。而不同的应用场景往往需要采用不同的CRC配置参数,同时对计算的性能也有不同的需求。例如,在基于Ethernet协议的网络传输中需要采用IEEE802-3协议所规定的CRC参数,同时需要高吞吐率的CRC实现以和网络带宽相匹配。",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2023-07-27",title:"BSV based high performance parallel CRC hardware circuit generator"},x=[{label:"引 言",level:2},{label:"算法原理",level:2},{label:"CRC 计算的定义",level:3},{label:"电路架构与性能",level:2},{label:"架构设计",level:3},{label:"性能与面积",level:3},{label:"使用指南",level:2},{label:"配置参数",level:3},{label:"输入输出接口",level:3},{label:"BSV 使用接口",level:3},{label:"Verilog 使用接口",level:3},{label:"引用和链接",level:2}],v=`

    引 言

    +const s="/zh-cn/assets/image1-85650830.png",a="/zh-cn/assets/image2-d3ac686f.png",t="/zh-cn/assets/image3-d19685f7.png",e="/zh-cn/assets/image4-22c90bed.png",l="/zh-cn/assets/image5-060ec542.png",p="/zh-cn/assets/image6-e95accb5.png",n="/zh-cn/assets/image7-39b0aa47.png",i="/zh-cn/assets/image8-f5342e9f.png",c="/zh-cn/assets/image9-f8fdd108.png",r="/zh-cn/assets/image10-fea0520f.png",C="/zh-cn/assets/image11-3896bab5.png",o="/zh-cn/assets/image12-5d3c96d7.png",h="/zh-cn/assets/image13-56596c1a.png",d="/zh-cn/assets/image14-1cff1399.png",u="/zh-cn/assets/image15-f50d9208.png",m="/zh-cn/assets/image16-73064f95.png",g="/zh-cn/assets/image17-8fbf2614.png",R="/zh-cn/assets/image18-04a62cf7.png",_="/zh-cn/assets/image19-b4bc01e2.png",b="/zh-cn/assets/image20-41386794.png",j="/zh-cn/assets/image21-453c426e.png",S="/zh-cn/assets/image22-e0049342.png",E="/zh-cn/assets/image23-989a38cf.png",y=[s,a,t,e,l,p,n,i,c,r,C,o,h,d,u,m,g,R,_,b,j,S,E],f={label:"基于BSV的高性能并行CRC硬件电路生成器",description:"循环冗余校验码,即Cyclic Redundancy Check (CRC), 是一种在各种通信系统中广泛应用的检错机制。CRC算法的工作原理和哈希函数类似,具体来说,其对任意长度的数据计算出一段唯一的标识(校验和), 然后根据这个标识来判断该数据在传输过程中是否发生变化。CRC检错码在实际生活中有着广泛的应用,诸如网络通信,存储系统等场景下都需要CRC来保证数据传输的正确性。而不同的应用场景往往需要采用不同的CRC配置参数,同时对计算的性能也有不同的需求。例如,在基于Ethernet协议的网络传输中需要采用IEEE802-3协议所规定的CRC参数,同时需要高吞吐率的CRC实现以和网络带宽相匹配。",location:"中国香港",author:["翁万正"],tags:["硬件加速"],date:"2023-07-27",title:"BSV based high performance parallel CRC hardware circuit generator"},x=[{label:"引 言",level:2},{label:"算法原理",level:2},{label:"CRC 计算的定义",level:3},{label:"电路架构与性能",level:2},{label:"架构设计",level:3},{label:"性能与面积",level:3},{label:"使用指南",level:2},{label:"配置参数",level:3},{label:"输入输出接口",level:3},{label:"BSV 使用接口",level:3},{label:"Verilog 使用接口",level:3},{label:"引用和链接",level:2}],F=`

    引 言

    循环冗余校验码,即 Cyclic Redundancy Check (CRC), 是一种在各种通信系统中广泛应用的检错机制。CRC 算法的工作原理和哈希函数类似,具体来说,其对任意长度的数据计算出一段唯一的标识(校验和), 然后根据这个标识来判断该数据在传输过程中是否发生变化。CRC 检错码在实际生活中有着广泛的应用,诸如网络通信,存储系统等场景下都需要 CRC 来保证数据传输的正确性。而不同的应用场景往往需要采用不同的 CRC 配置参数,同时对计算的性能也有不同的需求。例如,在基于 Ethernet 协议的网络传输中需要采用 IEEE802-3 协议所规定的 CRC 参数,同时需要高吞吐率的 CRC 实现以和网络带宽相匹配。

    对于一个具体的通信系统,CRC 既可以通过软件编程也可以硬件电路的形态来实现。相较于网络上丰富的软件库,开源的 CRC 硬件实现却相对落后,尤其是面向高性能的应用场景。例如,下述链接都提供了参数可配置的 CRC 硬件电路生成器,但这些实现方式都是直接将 CRC 算法映射到组合逻辑电路上,这往往会导致较长的组合逻辑延时进而降低电路的整体工作频率,无法满足高吞吐率的需求。

      @@ -47,9 +47,9 @@ const s="/zh-cn/assets/image1-85650830.png",a="/zh-cn/assets/image2-d3ac686f.png
      1. 若多项式
      -

      image

      -

      image

      +

      +

      image

      1. image
      @@ -266,4 +266,4 @@ CrcAxiStream#(32, 256 https://github.com/datenlord/blue-crc

      引用和链接

      [1] Y. Sun and M. S. Kim, "A Table-Based Algorithm for Pipelined CRC Calculation," 2010 IEEE International Conference on Communications, Cape Town, South Africa, 2010, pp. 1-5, doi: 10.1109/ICC.2010.5501903.

      -

      [2] Sun Y, Kim M S. A pipelined CRC calculation using lookup tables[C]//2010 7th IEEE Consumer Communications and Networking Conference. IEEE, 2010: 1-2.

      `;export{y as assetURLs,v as default,f as metadata,x as toc}; +

      [2] Sun Y, Kim M S. A pipelined CRC calculation using lookup tables[C]//2010 7th IEEE Consumer Communications and Networking Conference. IEEE, 2010: 1-2.

      `;export{y as assetURLs,F as default,f as metadata,x as toc}; diff --git a/zh-cn/assets/index-073c84f3.js b/zh-cn/assets/index-e6f44fee.js similarity index 98% rename from zh-cn/assets/index-073c84f3.js rename to zh-cn/assets/index-e6f44fee.js index 483f6db..53132af 100644 --- a/zh-cn/assets/index-073c84f3.js +++ b/zh-cn/assets/index-e6f44fee.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-1329fc54.png",l="/zh-cn/assets/image1-03c3323d.png",s="/zh-cn/assets/image2-19f32eff.png",i="/zh-cn/assets/image3-7a5e2db9.png",a="/zh-cn/assets/image4-a055bd84.png",t="/zh-cn/assets/image5-b8622f96.png",p="/zh-cn/assets/image6-5093ee75.png",n="/zh-cn/assets/image7-9fa09d91.png",o="/zh-cn/assets/image8-84dd6aec.png",c="/zh-cn/assets/image9-2f762488.png",r="/zh-cn/assets/image10-f2b55246.png",d="/zh-cn/assets/image11-c5d501bb.png",h="/zh-cn/assets/image12-56434254.png",m="/zh-cn/assets/image13-1c12a6c5.png",u="/zh-cn/assets/image14-69943dbe.png",b="/zh-cn/assets/image15-45a7b638.png",f="/zh-cn/assets/image16-5b765721.jpg",g="/zh-cn/assets/image17-8fb19d7c.jpg",R="/zh-cn/assets/image18-c8c4d5a1.jpg",S="/zh-cn/assets/image19-fb1e5167.png",y="/zh-cn/assets/image20-a391e7d8.jpg",_=[e,l,s,i,a,t,p,n,o,c,r,d,h,m,u,b,f,g,R,S,y],M={label:"计算机体系结构|MIT6.175和MIT6.375学习笔记",description:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。现在,完成第一期学习的同学整理了MIT6.175和MIT6.375的关键内容以及Lab实践的学习笔记。",cover:"./cover.png",location:"中国香港",author:["kazutoiris"],tags:["硬件加速"],date:"2023-05-17",title:"Computer Architecture|MIT6.175 and MIT6.375 Study Notes"},v=[{label:"MIT 6.175",level:2},{label:"环境搭建",level:3},{label:"四种 FIFO (Lab 4)",level:3},{label:"Ready 和 Valid 握手",level:3},{label:"EHR 寄存器 (Lab4)",level:3},{label:"RISC-V (Lab5)",level:3},{label:"Branch Prediction (Lab6)",level:3},{label:"DDR3 Memory (Lab7)",level:3},{label:"Cache Coherence (Project)",level:3},{label:"MIT 6.375",level:2},{label:"Bluespec 中的一些特性",level:3},{label:"CORDIC 算法",level:3},{label:"一些常用的概念",level:2},{label:"Setup Time 、Hold Time 和 Clock-to-Q Time",level:3},{label:"SRAM",level:3},{label:"DRAM",level:3},{label:"References",level:2}],C=`

      图片

      +const e="/zh-cn/assets/cover-1329fc54.png",l="/zh-cn/assets/image1-03c3323d.png",s="/zh-cn/assets/image2-19f32eff.png",i="/zh-cn/assets/image3-7a5e2db9.png",a="/zh-cn/assets/image4-a055bd84.png",t="/zh-cn/assets/image5-b8622f96.png",p="/zh-cn/assets/image6-5093ee75.png",n="/zh-cn/assets/image7-9fa09d91.png",o="/zh-cn/assets/image8-84dd6aec.png",c="/zh-cn/assets/image9-2f762488.png",r="/zh-cn/assets/image10-f2b55246.png",d="/zh-cn/assets/image11-c5d501bb.png",h="/zh-cn/assets/image12-56434254.png",m="/zh-cn/assets/image13-1c12a6c5.png",u="/zh-cn/assets/image14-69943dbe.png",b="/zh-cn/assets/image15-45a7b638.png",g="/zh-cn/assets/image16-5b765721.jpg",f="/zh-cn/assets/image17-8fb19d7c.jpg",R="/zh-cn/assets/image18-c8c4d5a1.jpg",y="/zh-cn/assets/image19-fb1e5167.png",S="/zh-cn/assets/image20-a391e7d8.jpg",_=[e,l,s,i,a,t,p,n,o,c,r,d,h,m,u,b,g,f,R,y,S],M={label:"计算机体系结构|MIT6.175和MIT6.375学习笔记",description:"在2023年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。现在,完成第一期学习的同学整理了MIT6.175和MIT6.375的关键内容以及Lab实践的学习笔记。",cover:"./cover.png",location:"中国香港",author:["kazutoiris"],tags:["硬件加速"],date:"2023-05-17",title:"Computer Architecture|MIT6.175 and MIT6.375 Study Notes"},v=[{label:"MIT 6.175",level:2},{label:"环境搭建",level:3},{label:"四种 FIFO (Lab 4)",level:3},{label:"Ready 和 Valid 握手",level:3},{label:"EHR 寄存器 (Lab4)",level:3},{label:"RISC-V (Lab5)",level:3},{label:"Branch Prediction (Lab6)",level:3},{label:"DDR3 Memory (Lab7)",level:3},{label:"Cache Coherence (Project)",level:3},{label:"MIT 6.375",level:2},{label:"Bluespec 中的一些特性",level:3},{label:"CORDIC 算法",level:3},{label:"一些常用的概念",level:2},{label:"Setup Time 、Hold Time 和 Clock-to-Q Time",level:3},{label:"SRAM",level:3},{label:"DRAM",level:3},{label:"References",level:2}],C=`

      图片

      在 2023 年初,达坦科技发起成立硬件设计学习社区,邀请所有有志于从事数字芯片设计的同学加入我们的学习互助自学小组,以理解数字芯片设计的精髓,强化理论知识的同时提升实操技能,继而整体提升设计能力。现在,完成第一期学习的同学整理了 MIT6.175 和 MIT6.375 的关键内容以及 Lab 实践的学习笔记

      6.175 和 6.375 的课程和 Lab 学习都有一定的难度,要求采用 Bluespec 语言实现 RISC-V 处理器,并支持多级流水、分支预测、缓存、异常处理、缓存一致性等功能。此外,Lab 环节还涉及软硬件联合开发,要求基于所实现的 RISC-V 处理器运行真实的 RISC-V 程序,并给出性能评估。希望第一期学员(GitHub:kazutoiris )的学习笔记对想从事数字芯片设计的工程师有所帮助。

      MIT 6.175

      @@ -323,7 +323,7 @@ Memory Consistency → 内存连贯性

      当 CLK 发生跳变后,前级处于直通模式。此时,任何 D 信号的变化都会对前级产生影响。但是,D 信号发生的任何变化都需要经过前级的所有门电路。前级门电路的数量大于后级数量,所以前级带来的延迟也比后级大。即使变化传递至后级时,后级也早已进入稳定。所以不需要考虑 Hold time。

      SRAM

      单端口 SRAM(1R/W)

      -

      图片

      +

      图片

      SRAM 是通过 BL 和 ~BL 控制读写,WL 控制具体的行。

      1. SRAM 写 0
      2. @@ -339,14 +339,14 @@ Memory Consistency → 内存连贯性

        BL = 1, ~BL = 1, WL = 1。通过检查 BL 和 ~BL 的电压降低情况可以知道 Y 的值。
        如果 BL 电压降低,那么 Y = 0;如果 ~BL 电压降低,那么 Y = 1。

        伪双端口 SRAM (1R1W)

        -

        图片

        +

        图片

        伪双端口具有独立的读写字线(RWL, WWL)和读写位线(RBL, WBL 和 WBLB)。

        真双端口 SRAM (2R2W)

        图片

        具有两套完整的读写字线和读写位线。
        All the images in this section are cited from [宇芯电子].

        DRAM

        -

        图片

        +

        图片

        1. DRAM 写
        @@ -380,4 +380,4 @@ All the images in this section are cited from [宇芯电子].


      达坦科技硬件设计学习社区持续开放,点击原文了解社区学习详情。若想询问加入细节,请添加下方小助手微信号或info@datenlord.com

      -

      图片

      `;export{_ as assetURLs,C as default,M as metadata,v as toc}; +

      图片

      `;export{_ as assetURLs,C as default,M as metadata,v as toc}; diff --git a/zh-cn/assets/index-78a34e98.js b/zh-cn/assets/index-e7ccea1d.js similarity index 89% rename from zh-cn/assets/index-78a34e98.js rename to zh-cn/assets/index-e7ccea1d.js index aa88b97..0c3885e 100644 --- a/zh-cn/assets/index-78a34e98.js +++ b/zh-cn/assets/index-e7ccea1d.js @@ -1,4 +1,4 @@ -const t="/zh-cn/assets/cover-3674aa81.jpg",e=[t],s={label:"Rust唠嗑室:Xline跨数据中心一致性管理",description:"2022年10月15日,达坦科技和Rust语言中文社区合作,在Rust唠嗑室活动中,由达坦科技(DatenLord)联合创始人施继成做了关于开源分布式存储技术的分享,着重介绍了达坦科技新的开源项目Xline,这一跨云的metadata(元数据)KV存储的产品是如何实现高性能跨数据中心的数据一致性管理的",cover:"./cover.jpg",location:"香港",date:"2022-10-20",title:"Rust Chatterbox: Xline Cross Data Center Consistency Management"},a=[{label:"内容介绍",level:2}],n=`

      封面

      +const t="/zh-cn/assets/cover-3674aa81.jpg",e=[t],n={label:"Rust唠嗑室:Xline跨数据中心一致性管理",description:"2022年10月15日,达坦科技和Rust语言中文社区合作,在Rust唠嗑室活动中,由达坦科技(DatenLord)联合创始人施继成做了关于开源分布式存储技术的分享,着重介绍了达坦科技新的开源项目Xline,这一跨云的metadata(元数据)KV存储的产品是如何实现高性能跨数据中心的数据一致性管理的",cover:"./cover.jpg",location:"香港",date:"2022-10-20",title:"Rust Chatterbox: Xline Cross Data Center Consistency Management"},s=[{label:"内容介绍",level:2}],a=`

      封面

      2022 年 10 月 15 日,达坦科技和 Rust 语言中文社区合作,在 Rust 唠嗑室活动中,由达坦科技(DatenLord)联合创始人施继成做了关于开源分布式存储技术的分享,着重介绍了达坦科技新的开源项目 Xline,这一跨云的 metadata(元数据)KV 存储的产品是如何实现高性能跨数据中心的数据一致性管理的。

      内容介绍

      -

      施继成首先介绍了做Xline这个产品的动机。最初2021年UCBerkeley 提出了Sky Computing(“天空计算”)的概念。与我们都熟知的cloud computing(“云计算”)不同的是,sky computing,如其表面意义所讲,是天空中有很多的云,是解决跨云的问题。如何打破不同云之间的隔阂,或者打通和最大化利用跨云数据是当前面临的一个难题,也是我们的目标所在。如今谈论云计算时,我们不需要考虑云资源的部署,可扩展性等问题,因为云厂商已经都帮忙做了。但是,一旦跨云,则无论算力的迁移,或数据的迁移,都是摆在我们眼前要攻克的难题。达坦科技在做的就是解决“如何做跨云数据交互”的问题,我们致力于将分布式系统从数据中心范围扩散至全球范围,这样即使单个数据中心宕机,却仍不影响用户使用数据。

      `;export{e as assetURLs,n as default,s as metadata,a as toc}; +

      施继成首先介绍了做Xline这个产品的动机。最初2021年UCBerkeley 提出了Sky Computing(“天空计算”)的概念。与我们都熟知的cloud computing(“云计算”)不同的是,sky computing,如其表面意义所讲,是天空中有很多的云,是解决跨云的问题。如何打破不同云之间的隔阂,或者打通和最大化利用跨云数据是当前面临的一个难题,也是我们的目标所在。如今谈论云计算时,我们不需要考虑云资源的部署,可扩展性等问题,因为云厂商已经都帮忙做了。但是,一旦跨云,则无论算力的迁移,或数据的迁移,都是摆在我们眼前要攻克的难题。达坦科技在做的就是解决“如何做跨云数据交互”的问题,我们致力于将分布式系统从数据中心范围扩散至全球范围,这样即使单个数据中心宕机,却仍不影响用户使用数据。

      `;export{e as assetURLs,a as default,n as metadata,s as toc}; diff --git a/zh-cn/assets/index-3b5176dc.js b/zh-cn/assets/index-ffd70994.js similarity index 98% rename from zh-cn/assets/index-3b5176dc.js rename to zh-cn/assets/index-ffd70994.js index 1acad32..ef9fd65 100644 --- a/zh-cn/assets/index-3b5176dc.js +++ b/zh-cn/assets/index-ffd70994.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/image1-b974e0d0.png",i="/zh-cn/assets/image2-599a44cc.jpg",a="data:image/png;base64,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",A="data:image/png;base64,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",r="/zh-cn/assets/image5-184dc93a.png",o="/zh-cn/assets/image6-18c75b26.jpg",t="/zh-cn/assets/image7-6a4a9bfe.png",n="/zh-cn/assets/image8-1849dbeb.png",s="/zh-cn/assets/image9-14a6fe14.jpg",g="/zh-cn/assets/image5-6a5e807d.png",p=[e,i,a,A,r,o,t,n,s,g],l={label:"精彩回顾 l SpinalHDL应用前景探索线上研讨会",description:"2022年12月16日,达坦科技联合SpinalHDL社区,举办了SpinalHDL Webinar 2022。在题为《SpinalHDL应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用Spinal HDL的实践、挑战和经验的分享。",location:"中国香港",date:"2022-12-12",title:"SpinalHDL Application Prospect Exploration Online Seminar"},C=[{label:"数据通路加速",level:2},{label:"复杂系统设计案例",level:2},{label:"硬件设计流程",level:2},{label:"推荐阅读",level:2}],h=`

      2022 年 12 月 16 日,达坦科技联合 SpinalHDL 社区,举办了 SpinalHDL Webinar 2022。在题为《SpinalHDL 应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用 Spinal HDL 的实践、挑战和经验的分享。

      +const e="/zh-cn/assets/image1-b974e0d0.png",i="/zh-cn/assets/image2-599a44cc.jpg",a="data:image/png;base64,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",A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaQAAAGkCAMAAABJkqEHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB6VBMVEXw8PDUj0/8/Pzx8fH9/f3u7u7v7+/p6eny8vL5+fn19fX6+vrt7e339/f09PT4+Pj7+/v+/v5lZWV4eHiJiYm2trbo6OhtbW329vbk5OScnJz///+zs7NxcXHExMSampp7e3tRUVHq6urX19fU1NTr6+vd3d3T09PMzMywsLDi4uKTk5NQUFBJSUlaWlpHR0egoKBNTU25ubnn5+fm5uZjY2POzs7f39+pqanj4+NTU1OlpaWnp6e8vLzs7Ox9fX3V1dXCwsKYmJhFRUXb29vl5eXz8/O9vb26urqxsbHLy8tZWVleXl5UVFRKSkq3t7fc3NzW1taOjo51dXXAwMBSUlKtra2VlZVwcHDe3t6KiorR0dGRkZHGxsZiYmKsrKx2dnafn5+/v795eXlubm6jo6NkZGSFhYW+vr6bm5uWlpbNzc2UlJRfX1+mpqbKyspLS0tISEjIyMjh4eGNjY27u7tzc3N3d3ehoaG4uLjg4OBycnLJycnQ0NCZmZmkpKRMTExPT090dHRhYWHZ2dmQkJCenp7a2tpGRkZ/f39mZmaDg4N8fHy1tbXPz8/BwcGvr6+rq6tOTk7S0tJXV1eysrKBgYHFxcWqqqpWVlZVVVVnZ2ddXV2AgICLi4udnZ1sbGyMjIyIiIgh10w3AAAAAWJLR0QbAmDUpAAACrpJREFUeNrtl/97lWUdx+/OudnOl21nD7h54EEm4ECG4zgGLr44ycOOipaIBQJhSmhWQpgUgpVBlAVlX7AyK/vyl3YdthGUdV3tuvPzuj++Xz+cbfez7bxf7/f27CwEIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgiB4DNpcJcFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhYUpGJIWVCQiiFlQUEqhpQFBakYUhZWvaBirCXSG3n8ufPXCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVCyoMCFQvqDAgUL2gwoBA9YIKAwLVS6Iw4uPRSBmgkTJAI2WARsoAjZQBGikDNFIGaKQM0EgZoJEyQCNlgEbKAI2UARopAzRSBmikDNBIGaCRMkAjZYBGygCNlAEaKQM0UgZopAzQSBmgkTJAI2WARsoAjZQBGikDNFIGaKQM0EgZoJEyQCNlgEbKAI2UARopAzRSBmikDNBIGaCRMkAjZYBGygCNlAEaKQM0UgZopAzQSBmgkTJAI2WARsoAjZQBGikDNFIGaKQM0EgZoJEyQCNlgEbKAI2UARopAzRSBmikDNBIGaCRMkAjZYBGygCNlAEaKQPSjKSpM6hXI2mkfLGuVCNpJB9YV6qRNJIPrCvVSBrJB9aVaiSN5APrSjWSRvKBdaUaSSP5wLpSjaSRfGBdqUbSSD6wrlQjaSQfWFeqkTSSD6wr1UgayQfWlWokjeQD60o1kkbygXWlGkkj+cC6Uo2kkXxgXalG0kg+sK5UI2kkH1hXqpE0kg+sK9VIGskH1pVqJI3kA+tKNZJG8oF1pRpJI/nAulKNpJF8YF2pRtJIPrCuVCNpJB9YV6qRNJIPrCvVSBrJB9aVaiSN5APrSjWSRvKBdaUaSSP5wLpSjaSRfGBdqUbSSD6wrlQjaSQfWFfqvF4SDkeS0adFyVoivZFDJWuJ9EYOlawl0hs5VLKWSG/kUMlaIr2RQyVrifRGDpWsJdIbOVSylkhv5FDJWiK9kUMla4n0Rg6VrCXSGzlUspZIb+RQyVoivZFDJWuJ9EYOlawl0hs5VLKWSG/kUMlaIr2RQyVrifRGDpWsJdIbOVSylkhv5FDJWiK9kUMla4n0Rg6VrCXSGzlUspZIb+RQyVoivZFDJWuJ9EYOlawl0hs5VLKWSG/kUMlaIr2RQyVrifRGDpWsJdIbOVSylkhv5FDJWiK9kUMla4n0Rg6VrCXSGzlUspZIb+RQyVoivZFDJWuJ9EYOlawl0hs5VLKWSG/kUMlaIr2RQyVrifRGDpWsJdIbOVSylkhv5FDJWiK9kUMla4n0Rg6VrCXSGzlUspZIb+RQyVoivZFDJWuJ9EYOlawl0hs5VLKWSG/kUMlaIr2RQyVrifRGDpWsJdIbOVSylkhv5FDJWiK9kUMla4n0Rg6VrCXSGzlUspZIb+RQyVoivZFDJWuJ9EYOlawl0hs5VLKWSG/kUMlaIr2RQyVrifRGDpWsJdIbOVSylkhv5FDJWiK9kRBCCCGEEEJYUKlaJxD/nbjIKusc4j8yEJcZvOO0Vg8hNJpD/cfh5cOR1mitGlqNodBohhCKFTzbSM3aN0tijKtjjGvuifHO4/rYQGiM3xtCaK9dVxZFUYbhZrn+vuZga8NEaAzeH0K5cVOolWVs3f6i4bvvmrXy3+6ilc0PWAtnyGSMlf5QW7bG+OCdF7bVi6KMRas6PLW9fGh6R9kZeric2Tk7u2vDRL1obCqKslm0a+WO3Y/M7Vr6muKze+78FrVy79S/PF1l335r4wx5dPlmN//YgYE770Wfe3zj2LZup3OwLOfLhxaqZadelLHd2/rEkxPhqUNPP/P58gvT08+Wew8/F4+Eeoy9UCnLgdCOsRF6sV40l0ZqxNjuH8T+paiRVsDY0kbPL77pLR03y0oIlfrDIYSdX/xS2SyKsjN0tDz2wsjx4f7tbn59WRSjxeIOoydOzn9539ypavli5ytx/UvDT/bKlydaL4f+xV7xxJrG6V751PavFo/eFyY00v/OwuI4Z2Lsz9WOjaXzVw6/2ov7FraGUNvytaXbXSxHxk6+tmXD1xuV+ODBo51vfHN6ob9DfH3b7AOt0dXV8uyB4VgbLV6aLbrn2tu/1b/YGjh/aGDsZPHGsfnq9Lfb6zTSChhdvt+FGE+9efvVw0jthcrajVOPLIRWfbIcjkXZGWmWFx6bG1zVnOpNbe0cG90Wv/Pd/m9Stbi4Ie55tnm+Wp7dPDz3xsaN3QNFJ1TeunRrpMtvh+b39hfd+dabZ/Q3aWVMxrv5/uLxyMiu9os/CNV3muXl3We75394vlu/VM6sGjq8a+eVq4cOXg2T5eW9p2rljl3Ndmc8/OhaZTpULl6rVX5cbYRef6RXLpXP7Am95oVa8ZNzRSeMtO7pFRppRbx790inbx1WY/3di2smq5PPzx396duHFz/zZ+XM7PWrW8cuTDbGbwwXe1Y92n8JPjr086u1hVqjMh0a7YU9c+OjjV8sj1SW5fy1+ebaK+8VnRCO99oN/U1aEfH60C/3377pxfFbh63B1b8ajEUcnXrvyP560acexsuZ2RBaGyaG48njtV//5vHntgze7HbfPzEbNp/Ze2M6hHUzJ8Jvn77yu6Hfd0J49YOb3W63e/qDP3x4LvQPBrZf+eNujbQSbv0rc3B5o7eWTo+cW/v6n2amr3x4ZCiE+zt9/hxmu7MhhI8mwl/e3/fXGzfDa/f+zTr9p4rll+IDSx9PDnzMJw1s6p/OD916P/zzUXxCDH10/e9n34kJvpP4P6PfDCGEEEIIIYQQQgjxCfAPIJnMJCqASFsAAAAASUVORK5CYII=",r="/zh-cn/assets/image5-184dc93a.png",o="/zh-cn/assets/image6-18c75b26.jpg",t="/zh-cn/assets/image7-6a4a9bfe.png",n="/zh-cn/assets/image8-1849dbeb.png",s="/zh-cn/assets/image9-14a6fe14.jpg",g="/zh-cn/assets/image5-6a5e807d.png",p=[e,i,a,A,r,o,t,n,s,g],l={label:"精彩回顾 l SpinalHDL应用前景探索线上研讨会",description:"2022年12月16日,达坦科技联合SpinalHDL社区,举办了SpinalHDL Webinar 2022。在题为《SpinalHDL应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用Spinal HDL的实践、挑战和经验的分享。",location:"中国香港",date:"2022-12-12",title:"SpinalHDL Application Prospect Exploration Online Seminar"},c=[{label:"数据通路加速",level:2},{label:"复杂系统设计案例",level:2},{label:"硬件设计流程",level:2},{label:"推荐阅读",level:2}],C=`

      2022 年 12 月 16 日,达坦科技联合 SpinalHDL 社区,举办了 SpinalHDL Webinar 2022。在题为《SpinalHDL 应用前景探索》的线上研讨会上,九位分享人在三个讨论分主题下做了各自领域内应用 Spinal HDL 的实践、挑战和经验的分享。

      数据通路加速

      图片

      分享人:Tianrui Li

      @@ -53,4 +53,4 @@ const e="/zh-cn/assets/image1-b974e0d0.png",i="/zh-cn/assets/image2-599a44cc.jpg https://github.com/datenlord/TRIDENT

      推荐阅读

      万字长文,详述 TRIDENT: Poseidon 哈希算法的硬件加速与实现!

      -

      精彩回顾|硬件敏捷开发与验证方法学研讨

      `;export{p as assetURLs,h as default,l as metadata,C as toc}; +

      精彩回顾|硬件敏捷开发与验证方法学研讨

      `;export{p as assetURLs,C as default,l as metadata,c as toc}; diff --git a/zh-cn/assets/index-faf3ce4f.js b/zh-cn/assets/index-ffd93bc8.js similarity index 93% rename from zh-cn/assets/index-faf3ce4f.js rename to zh-cn/assets/index-ffd93bc8.js index 70c413c..0305554 100644 --- a/zh-cn/assets/index-faf3ce4f.js +++ b/zh-cn/assets/index-ffd93bc8.js @@ -1,4 +1,4 @@ -const e="/zh-cn/assets/cover-c938ebe8.png",t="/zh-cn/assets/image1-a88ec652.jpg",s="/zh-cn/assets/image2-0d688c12.png",r=[e,t,s],n={label:"4.8 Beijing Rust Meetup | Call For Presenters",description:"如果你有兴趣参与探讨Rust作为一种强调性能、安全和并发性的编程语言的各种应用、实践和无限可能性的头脑风暴,就一定不能错过这场来自达坦科技、南京大学、CloudWeGo、华为等技术专家带来的关于Rust编程语言相关应用的线下Meetup。我们的主题是Rust💡X,意在探讨用Rust编程语言“点亮”的任何应用、实践和探索。",cover:"./cover.png",location:"中国香港",date:"2023-03-31",title:"4.8 Beijing Rust Meetup | Call For Presenters"},o=[{label:"嘉宾演讲 (Presenter & Topic)",level:2},{label:"提交议题 (Call for Presenters)",level:2},{label:"Meetup 报名方式 (Registration)",level:2}],i=`

      如果你有兴趣参与探讨 Rust 作为一种强调性能、安全和并发性的编程语言的各种应用、实践和无限可能性的头脑风暴,就一定不能错过这场来自达坦科技、南京大学、CloudWeGo、华为等技术专家带来的关于 Rust 编程语言相关应用的线下 Meetup。我们的主题是 Rust💡X,意在探讨用 Rust 编程语言“点亮”的任何应用、实践和探索

      +const e="/zh-cn/assets/cover-c938ebe8.png",t="/zh-cn/assets/image1-a88ec652.jpg",s="/zh-cn/assets/image2-0d688c12.png",n=[e,t,s],r={label:"4.8 Beijing Rust Meetup | Call For Presenters",description:"如果你有兴趣参与探讨Rust作为一种强调性能、安全和并发性的编程语言的各种应用、实践和无限可能性的头脑风暴,就一定不能错过这场来自达坦科技、南京大学、CloudWeGo、华为等技术专家带来的关于Rust编程语言相关应用的线下Meetup。我们的主题是Rust💡X,意在探讨用Rust编程语言“点亮”的任何应用、实践和探索。",cover:"./cover.png",location:"中国香港",date:"2023-03-31",title:"4.8 Beijing Rust Meetup | Call For Presenters"},i=[{label:"嘉宾演讲 (Presenter & Topic)",level:2},{label:"提交议题 (Call for Presenters)",level:2},{label:"Meetup 报名方式 (Registration)",level:2}],o=`

      如果你有兴趣参与探讨 Rust 作为一种强调性能、安全和并发性的编程语言的各种应用、实践和无限可能性的头脑风暴,就一定不能错过这场来自达坦科技、南京大学、CloudWeGo、华为等技术专家带来的关于 Rust 编程语言相关应用的线下 Meetup。我们的主题是 Rust💡X,意在探讨用 Rust 编程语言“点亮”的任何应用、实践和探索

      时间: 2023 年 4 月 8 日 14:00 地点: 环球财讯中心 M 层 北京市西城区宣武门外大街甲 1 号

      嘉宾演讲 (Presenter & Topic)

      @@ -31,4 +31,4 @@ const e="/zh-cn/assets/cover-c938ebe8.png",t="/zh-cn/assets/image1-a88ec652.jpg"

      Meetup 报名方式 (Registration)

      欢迎扫描下方二维码或点击阅读原文,即可报名。

      阅读原文

      -

      图片

      `;export{r as assetURLs,i as default,n as metadata,o as toc}; +

      图片

      `;export{n as assetURLs,o as default,r as metadata,i as toc}; diff --git a/zh-cn/index.html b/zh-cn/index.html index fe51291..ee95ff0 100644 --- a/zh-cn/index.html +++ b/zh-cn/index.html @@ -5,7 +5,7 @@ 达坦科技 - +