From bc3fbcb7da0d466feec54b88c69e62a6515700a5 Mon Sep 17 00:00:00 2001 From: AryanNandanwar Date: Tue, 18 Aug 2026 01:53:48 +0530 Subject: [PATCH 1/5] added timeline tracker --- .changeset/pretty-clowns-double.md | 5 + .../files/test.txt | 5 + .../files/test.txt | 3 + .../files/test.txt | 3 + .../timeline.json | 44 +++ .../files/test.txt | 0 .../timeline.json | 33 ++ .../timeline.json | 4 + assets/nanocoder-vscode.vsix | Bin 148148 -> 150424 bytes plugins/vscode/media/chat-panel.css | 2 +- plugins/vscode/media/chat-panel.html | 9 + plugins/vscode/media/chat-panel.js | 153 ++++++++ plugins/vscode/src/acp-client.spec.ts | 41 +++ plugins/vscode/src/acp-client.ts | 45 +++ plugins/vscode/src/chat-webview-provider.ts | 41 +++ plugins/vscode/src/extension.ts | 1 + plugins/vscode/src/styles.css | 114 ++++++ plugins/vscode/src/webview-protocol.ts | 31 +- source/acp/acp-agent.spec.ts | 93 ++++- source/acp/acp-agent.ts | 68 +++- source/acp/acp-conversation.spec.ts | 123 ++++++- source/acp/acp-conversation.ts | 10 + source/acp/acp-session.spec.ts | 9 + source/acp/acp-session.ts | 3 + source/acp/acp-timeline.spec.ts | 83 +++++ source/acp/acp-timeline.ts | 183 ++++++++++ source/acp/conversation.contract.spec.ts | 1 + source/constants.ts | 1 + source/services/file-snapshot.ts | 34 +- source/services/timeline-manager.spec.ts | 271 ++++++++++++++ source/services/timeline-manager.ts | 332 ++++++++++++++++++ source/types/index.ts | 1 + source/types/timeline.ts | 39 ++ test.txt | 7 + 34 files changed, 1777 insertions(+), 15 deletions(-) create mode 100644 .changeset/pretty-clowns-double.md create mode 100644 .nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/d401b26d-26f6-4772-9574-edc9c325c9e1/files/test.txt create mode 100644 .nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65/files/test.txt create mode 100644 .nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/fedc889b-12b5-401a-816b-4b919e33b089/files/test.txt create mode 100644 .nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/timeline.json create mode 100644 .nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/entries/70136ff6-3264-4f26-8c7c-5c3389031ad5/files/test.txt create mode 100644 .nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/timeline.json create mode 100644 .nanocoder/timeline/b6d817dc-9f6e-491a-8ee3-e203a86b2852/timeline.json create mode 100644 source/acp/acp-timeline.spec.ts create mode 100644 source/acp/acp-timeline.ts create mode 100644 source/services/timeline-manager.spec.ts create mode 100644 source/services/timeline-manager.ts create mode 100644 source/types/timeline.ts create mode 100644 test.txt diff --git a/.changeset/pretty-clowns-double.md b/.changeset/pretty-clowns-double.md new file mode 100644 index 000000000..70e4ab691 --- /dev/null +++ b/.changeset/pretty-clowns-double.md @@ -0,0 +1,5 @@ +--- +"@nanocollective/nanocoder": minor +--- + +Added an action timeline in the VS Code sidebar so you can click a prior mutating tool step and revert the workspace files and conversation back to that point. diff --git a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/d401b26d-26f6-4772-9574-edc9c325c9e1/files/test.txt b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/d401b26d-26f6-4772-9574-edc9c325c9e1/files/test.txt new file mode 100644 index 000000000..10af5be0d --- /dev/null +++ b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/d401b26d-26f6-4772-9574-edc9c325c9e1/files/test.txt @@ -0,0 +1,5 @@ +Manual testing is the process of manually checking software for defects. Testers execute test cases without the use of automation tools. + +Automated testing involves using software tools and scripts to automatically execute tests on software. It increases speed, coverage, and reliability compared to manual testing. + +Alpha testing is a type of acceptance testing performed by internal teams to identify bugs before releasing the product to external users. \ No newline at end of file diff --git a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65/files/test.txt b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65/files/test.txt new file mode 100644 index 000000000..167cdbe06 --- /dev/null +++ b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65/files/test.txt @@ -0,0 +1,3 @@ +Manual testing is the process of manually checking software for defects. Testers execute test cases without the use of automation tools. + +Automated testing involves using software tools and scripts to automatically execute tests on software. It increases speed, coverage, and reliability compared to manual testing. \ No newline at end of file diff --git a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/fedc889b-12b5-401a-816b-4b919e33b089/files/test.txt b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/fedc889b-12b5-401a-816b-4b919e33b089/files/test.txt new file mode 100644 index 000000000..167cdbe06 --- /dev/null +++ b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/fedc889b-12b5-401a-816b-4b919e33b089/files/test.txt @@ -0,0 +1,3 @@ +Manual testing is the process of manually checking software for defects. Testers execute test cases without the use of automation tools. + +Automated testing involves using software tools and scripts to automatically execute tests on software. It increases speed, coverage, and reliability compared to manual testing. \ No newline at end of file diff --git a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/timeline.json b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/timeline.json new file mode 100644 index 000000000..92d15a469 --- /dev/null +++ b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/timeline.json @@ -0,0 +1,44 @@ +{ + "nextSeq": 4, + "entries": [ + { + "id": "fedc889b-12b5-401a-816b-4b919e33b089", + "seq": 1, + "toolCallId": "call_z0Ej93lHzNzn660I7oK2qi1R", + "toolName": "string_replace", + "title": "string_replace: test.txt", + "timestamp": "2026-08-17T20:08:12.299Z", + "truncateToMessageIndex": 3, + "filesChanged": [ + "test.txt" + ], + "createdFiles": [] + }, + { + "id": "e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65", + "seq": 2, + "toolCallId": "call_Todel8faSjR2FRGVU0yv6QJc", + "toolName": "string_replace", + "title": "string_replace: test.txt", + "timestamp": "2026-08-17T20:08:16.774Z", + "truncateToMessageIndex": 7, + "filesChanged": [ + "test.txt" + ], + "createdFiles": [] + }, + { + "id": "d401b26d-26f6-4772-9574-edc9c325c9e1", + "seq": 3, + "toolCallId": "call_KZXnmWqP8UUEEUX4tEtSntsD", + "toolName": "string_replace", + "title": "string_replace: test.txt", + "timestamp": "2026-08-17T20:08:35.614Z", + "truncateToMessageIndex": 13, + "filesChanged": [ + "test.txt" + ], + "createdFiles": [] + } + ] +} \ No newline at end of file diff --git a/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/entries/70136ff6-3264-4f26-8c7c-5c3389031ad5/files/test.txt b/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/entries/70136ff6-3264-4f26-8c7c-5c3389031ad5/files/test.txt new file mode 100644 index 000000000..e69de29bb diff --git a/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/timeline.json b/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/timeline.json new file mode 100644 index 000000000..7351b77f0 --- /dev/null +++ b/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/timeline.json @@ -0,0 +1,33 @@ +{ + "nextSeq": 3, + "entries": [ + { + "id": "108000fd-f36e-44b1-9a96-fabe57200865", + "seq": 1, + "toolCallId": "call_8PZCCvV2Nujw2XENJfZ48V9d", + "toolName": "write_file", + "title": "write_file: test.txt", + "timestamp": "2026-08-17T20:01:25.100Z", + "truncateToMessageIndex": 1, + "filesChanged": [ + "test.txt" + ], + "createdFiles": [ + "test.txt" + ] + }, + { + "id": "70136ff6-3264-4f26-8c7c-5c3389031ad5", + "seq": 2, + "toolCallId": "call_q4FSQgII0EzHvrF1H7ISUEVo", + "toolName": "write_file", + "title": "write_file: test.txt", + "timestamp": "2026-08-17T20:02:22.288Z", + "truncateToMessageIndex": 7, + "filesChanged": [ + "test.txt" + ], + "createdFiles": [] + } + ] +} \ No newline at end of file diff --git a/.nanocoder/timeline/b6d817dc-9f6e-491a-8ee3-e203a86b2852/timeline.json b/.nanocoder/timeline/b6d817dc-9f6e-491a-8ee3-e203a86b2852/timeline.json new file mode 100644 index 000000000..16fe2a954 --- /dev/null +++ b/.nanocoder/timeline/b6d817dc-9f6e-491a-8ee3-e203a86b2852/timeline.json @@ -0,0 +1,4 @@ +{ + "nextSeq": 3, + "entries": [] +} \ No newline at end of file diff --git a/assets/nanocoder-vscode.vsix b/assets/nanocoder-vscode.vsix index 53f7e1ecac8f41e6947cc35c9c751a0407e07384..7b2873feb23241c16500bd47830f9425e04972f3 100644 GIT binary patch delta 113937 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 b_AaZDGh{WloSPE6|4c{6lc6b zjHNXtXIx@_QB(&CbBrnu_LP*MCJb{-D#OEKUogClnL7>@i-9YKcn?DMdxkhT;eVVT)3`nlQ5h)+P2cVJdk3e0 z^ss}Ei>EM|#o=_m45P(l*qT}0G>x2++6Zk#fZ4MI_vEs`fq)j} zOKK4Vk$){_D7!`VCt<-vSPZ`m;QlN-ggad!BE%J7_%rfh1-y`k`_LNVY5-*XA|}(O zsTt-sxAL1?`OU5T=2m_cxAOk$e+xLo#R*q=##rz&i{?@C6#PB-;ZOe={26DcVkr1~ zaOAvZ>HGH%ZIqGn>-S&#LC=nyg>Yg|XkWA==YNg*F^vO83Y-V;&;qT{t{n@Qgovo( z=~rL1>5(uV9(h?@3tS;^L}KaEBwB313GJRS2OOQbR0e?g&kf^g62}i4P?FDp!<|yo zd;^Hva(>(s;Zk6Ui%Z&Iz+lAyLlo~rc3~WqpuwR7{6k$ADEJ_DLGWEke#YUC=s-~L zUw?n{n?GL49Vx=U5KdfrJs=WmjQ~TOPQ88wa6MxQ8zIltFJtpCC8XjliaULEQ;cyL4T*4 z1eGl-VNp2xTE`D9Yjz=PY6rSnJoL;U-q>@Hq5^XKf;Pfe;S3f47Wh!5JIIjeBDh_5 zgmY4+Aet`3m`#1a5svNBQ>ux2PVKeW4sb5e!4sv91X znja`>>X4xVWjqv&Aw{saEMDp;R&4 zh$BX5yUK@N#6{u~9*~kTm9BM9vWAHu;z}AWl$64T6OC-JIQn3Lb9ES~vwvCkt|>WC z#Mt$gwWX<%7FU(jGOmEuONS#3@8gU&lTzsEBS^F3r?J@!-S06f@{N{W2TLiK)@Mfq z#lmqZW6YFRY@a`F|V2 zQJCjpUW6(X4F`@hJkqchu7AvW|5nbEAwGnJ1v;QAzjhW{qN)i=5jNtuWn2ddVuEA# zoMTv!gVWt^Rf^=UGHcu_+f>F;7cfId>3r?p9-^)$NJ{j+diRvU8QdFI<6Q1x@R5?j zZm3YNP}WdJXj&6oaYWlR$4q#&+#qtahfTp-*yNam8LVC)3sJd4d4Gua6qYE&Mwhdnx2-x9R$}gntS-+HEmg-tH!mZ5!!j2j~S=oB^S^Yagby$vEUVyV|o;wcBWq z&nWM}ve`y($4Jp|)FBL{jm)Wg9h}2$ByWizzN*_|+(t4OOJa5APNM}yWgDp@8BFKq za9+CL?Z*rj+4eDsZL}}Y*#bqQjZ|=GV6xRl%5iy~>IjmlImKsEs-rM&4Owc) z;%cvedag&XHn6D%?3<#nbi(09V$&bNaxQnj!6=>zwSWCMUBp@emO_F$3cI6Tjv$F+ zy`>y_v#nl^0SF|;#PpUTxq~aQaHYmxtD!|x551NnYy5of;{~LRPC{qOnJJZ>gvzwr z)_{fa{6=9Xu-2fdZtpSI5Ea{DZtmb41$H2kUQEV0Po$hD5MMjT8>@+*gk3GR4_Z&g z?>=S59G*Ai0Wv(j-U%0b@sst7i!V>gO~uP!RXv z(iL}UROKKC$yFe|<$y4ZY_Nar!hTEj_yXyp&ubEnKrfR?pb}19AJv{r0+FNrTL)JO zTn+!pg9}D7r{#7~SzUwq$;VtKllJ$|=put27Jt-D!O(RPKiF_9TC{BhD_jau6^O-sc6AO_ze@+5{Xb@v$_xYP#+-T z0e_jolFW4UtPs-vC^;!Z%rQkOtxU;DBQsL?$cz+CS!w)ge7mwiL6P*1)z>i5~-jsuDW=u z6GRi#utJ3<3y-XTk8v13gp2qgjDMz+$$+1{o&$z5Qsp8ya+|YH`mN1g4YQD_h$SlO$vvtWrC$)BipB(X@l<0)>1G+<`9-ZKF0J{Qa&)fHl_&P`j$`{5s6#qvH zMeR&uNbf#E2x7A~haqWCDwJbRDA@JZ?BFf!n_LXtt6Usgx`){fd$L@`1AkpkPIpMx zQI2!c#_|>$O*YO$X6?ko^9y=|jYIjP3`8)gZcNdb%zcaa-t#F)te^6z&)q&wo7P)fn~4lF$3($&gq}eNkbQ!8!Q{OK;L6Cd#TW&P=Djdn4IXnk?C(`AHwa!Wkx6OS|Rc=v@##^tv+>U!tQ*Pq<3Ke@p~cFsgR zv5WCVZKIlxDp(>$)S}=66)(F^W9rd?oETVzZYpgp+8U)Jb_Z#Kb$|8pCbx0#-OfAC zEMlTLZa>D`Xt_Y;_LK8^DIqS!YCy5_Db@pub)RBA;Ia023|M#^o(3GAJPuC-0*gPh zzWBnvdL<5W1tf{cYBy!?@p=)*8p%+J#Zz_tZ?kvXybR!_m~ zKCOPAd>1eN@HW$V5=^J_;3>X~YbO7@WB&6%|GA6pKAC6pJJ`;XV6_ZZ%Qu#ZKOMc*ycCm4!DTjtfvJp9q_UPuN?5I1Fs$M zTI8K&nWacj^oud4i~1ah_lN)_)A}5^H?yg!`y3Q$`n|eru0uI-hYiioGQnYsH@Zyo zptLl!wV+PA+Nm!c#Vb@da&hqHn+Ty3AwHOS(@iE}9DmH~bFdWH`2c%E7aqrPRrs9W zP#7zHvFmdn6dm_uif=AZNB`zXc4cJp>i=wIhL$MwC=ClN##Ux6)GSSIdGFGAEN?DN zpY<(`nVKFM)R^)lp=4Eh>XtZpvBNjGL!MC<@f`LF}Bg~JZ4 zD;aixs()D60hn@N7bFUSowif@ENk^%!ns1Y6ZtEwlhdX|$l7~<*Y>NIOgYDD=Zg+;M(;2f7?6YZNy zKer5Dv!-D(al7P=u1SrO1?!C|t(J`rD^a1JB!3CrVhXy)MInn`pV7ZeaIN-H z$u;g@Hn#Va>Wyx(zwY>^38ry;9VMGGS$eGs)}5FBjZ@Y&ETr4`k1BWFn4Rj?A&me} z+(JhAiOmjnWnlGrV+HKjJQ`9UuVhY+u9w{%?Qm?$o!g-&n5Fx%!1BeS%MhBc17@R6 z+JD^u1+LRBTVg&dFs~+yTQd=YrAL|hyH`9({q3(H<0}#kGPSRZq{x32nRF4d?w{EH zH!{{EFBrN!Tm2J|T9(Itc?NuQ_f@8Z^jS-jUxIp2o7EM0>5??BLs~$_L3YGN?)4qe zj(jd4Q!0I`UX?5mHOHcEH1o+w5e_@{lYg(S@Le)eRVVdX4M#*7E@9zQ7I;|JHstqu ze$L(uEx!ALVPf4^l%O(*W~lV`;;cSz{LI&IbYC^1boq575(nM~lA~`$DVk$RVL#Fw z8Vp5ll71lXygqNdC-#k3k$cAq)f6eMzFJw|x&A@=vCr<9_zF5s2awqSGWSi_-G3R$ zNaf_%$WDGT8Ks!^C}txRvmS-`Ttyb*%G~i0*Iof35XBLjVIj#zlwBovjg(@XZ+xv2n`Ua?Wu&YLQ(rPhIfVx~ANB3x)qbw{M@s5IeEz`#LW8~h41s;M z8B~97bYb_#EtMU!`|(mJW7FbBo6E12gWD_C-xBsqtQ!Hx;BDDi@#(8JEq{E>NXh)h zDFJ`SaVfv?kso>2k!{+KE$m?P#TYY(Lq&4L#%kv+g)C4Ws$QM9!g){|{BDF-Ty$St zNWXDIL$B4Z%oY=Uedw2V{`4qHLMNkBih5HT&ZtwMzC(z@;Ehux{LdOuuda179^@NK zlPlSsS$-j8w~&P2xL^2jdVl=jTJeZy?i=xq#TZtNxLe+?L=YuYwdtL^bO-d-;A0Ls z1kbq2zY+XD1^xNmTb*;0=NV-UNB6VUM+~HuyuR9qIDD67a23a|j79hn(fdcr5z8p9 z`$>4;$k&rs2CT@*A5Ir$cjmBuWp@n=cs94i9jo@~2^L|d4@s2wrGE!W%K({1s!m8JoQx6ZQ+_#;&Ks7qg95iD13<_&N55_4(_gKf1B_ zj8uC}OQ3$i2i#76Tu1dBd#p#VVPy>(%tRV#0`mX+n-4Sdu3U5-4-#r4MWgFp*S>d>@PAuO#@v~olDo~?R&D;r zmyXfz`TAfo7jyqCI`Y@qiv7QX^nTHG2cNfpbSDdEAR>u&OpXdmdlBWB8J+hq5B{^vl z^L3)6_y?3a4(BU2rng;f1lA`r8gMzj;m3DnQG-yMV)y}sOAg|dW=wNZe@BlcT9g8ctmi) zy-R}82;ygzbG1$kWI8HsrioXoe9X@uwVzoI=lvFb-A$U!M0%te*py}rnv1yxpq&uV z&Of+w@!#uRyuN#JZU17?LB*xE`KcUtGDNjh_0zJNl!urTf9q4yxpwjmg(y*x;z`PH z6vX(wPyrC|#l4EaX^L`TF1u*=dp)2hN`-ir!p*Qs^YH!;ck}YYDCDOyCBQ6Hm)uGh z$(%(lBQkKW(Nh5;Qf_n?u&CU$1%HUT6y~Na^}8Tux7`JgbSl1!Fz#vfYY8^$0K13$ zh9=?a7XZ}de~ZFtp_s(?A8^2)1ljS*g0yRONk#$gj`FHq;K^Gc)l^$bMyD<(NF)j$ zQn6VJ=d3D2)4~*L>0qNHsmD}eKUCqt4U4fd?$vde=G^s5UURQuqUv@)O`e^Ci-U4V zE1bgT`rTUGN#oWUyz%Ih#;KWl7t)2c<_i>0`rXygf9ExYl@gKJi*%k3(mndMp`O>Qk^x2|bZ$y!o;jFKpif;hV4HZUGQ(tNB-leW4?!61sGJfb{2Yx(xidfVUj&T(U3 z^(<^Pw#N_$&xm@Swt}(ftU20wa+##p;OeYQf9;}A`w6)7203s|d(GG29MZNNakI{p z2wGZTv_ypmQ8oo`2v@_Xd9wN(Ft}NyPE{pm1v!Q_Lnz>SQe<>h`uawh4uscg9LF@s zXagN);gt5uYdl)K9ThEp#FUS5t{cIQVds`-g0gg{)@TK8^E00~EmzMk51dZJkARks zf5c;&AF&;Ai&3n6^WK-*?#*UVd{C0AvYBZiSXN*xztXCEptQsH5JMhYE-kowD??_I z#LR}MkPr z5i1q3T$U_@)kD^BFb0hlI*}jY_9cZce{Sg6F>~xnNvUvO5mgPyh6iDtYx<^NN=O~4 z`mB?4Q=oT}tkxXYfFMvsU2C!VFvES#39*$tjPkTk$b+3h(D2a^RY-RbbwOmMNqMGM zpc;Y@Hw{fhltIc~tCqcPVF484Rx2Ro$#QEZknm-&@?}gan6LRZ&WJFuGqPcY`AT$YvAQy(th-86Op@a- zoXf;b3S?A-!Uk0;jqi}R-p1)5h#&5fWBM%R{64St$Ejjj`3C$YOrxy#Gklxe=RUk6 zSK1FHcBjqrklMc`kT z7W{%SYc};;$WF!HDB@~~kE1DfK8Co3ZqkB3WExE=e?&WJ$)8%nj3(Q51FS-q6~NAhZUz_D3N&+(->0M(JJU2TUeE0l%q{bWy`x zrdFwrSuQX7P9jsyCK`OAe~kaNRff~66&pFh^T&1c<*=C@d9NZ=r!1F|#sX?6H&(?az|?WU97hXSoZPh~fIX{p1!HPsXMq7Podbth*vOQH8Fln=?YEWCR( z@?PF?Qc3GunIe`YiJJg_N44y#mYtB@ZPrT3B6R=q5$7Hk>Z14-YatvFyrh6hc?z4UWX))@|e2d zTbIX_;8qfD=Pqlh-{2tsi|1vtXVug4MPD0`6aI>}p(0yz(ybpqy~z)F_y>59#Hh+5 z#;~az;xBO5Qf*Zxe|sN0)mtW3VIG4_(FgTzH7bG!jl2A{IaW2spP$%Dl^A1W4KK{bLBpj zs05Zo`V06gRrS~KhgGb@AFLs1psZ&VHT!9ac_5!#!#s?|f0K(=og1$H5adLO&EqD-TN{!7ljb!fnb?n49_PU!G*mPSdwy6hl0!cU3E z9Lis%9;l-sd#%0(I~O;?UnXm=MO>Ni;UtPfUo0NT{#wdTIqXy21yl0oN{1v&;4BT7 zDR|Sj-a_l;e_c!ewjkQy1Ri{Z$cwIJrYxm1$$X#)eb~(eW$OHlma;Qi$_*p#W@45Q zAd84O^b>jwHWi+D!rh%^4!*)67RtC4}Q| zgo~a4SoA{LuE7BA^EWXp33?Jn;Ss+BTPlPeW#wXM=C2mS#!BUC8U+u?a;ekcs#=IU zI+sgve{;Q6kR5NKCxV}w{Fyo+nUhk@(-VXeo-T`Ni;OZ1|LeoK*$00)*BWI{DllFS z?$%X`l|gX$Mz3ujHN$WwN5B&V7$uNl8YK{5lwgz_j*KD#Vw3?s4}|N}o5-xJ1UJfG zMsaKugCs61u}$Ez5{dg39OUSmq?oDG7NK!8e~fajl2OPoU|8sUW7&C{RCU} ze-jOO!`(bN_!P^fX-orb{E8Rc+21|6!s`800bX#x9ReWkEhJ-=+~VmOreXW$=_uss zG^9h!XFNU6@^s1pBLjfmIYtL3ygR!xoWqcp-Nmp69P)*u1AGWsgt5-U^F(6uBhTFH z2u$7buI){ODCX%*q|@&a){g09E;`2Bf9B!>PY1U=eG?3GR8a(2&3oPo_($XPi6qPN zjqDU{?U1c-@4se%ff zCDtvWs$7DQB&RH+x=&yE81}Pl&R-AWusI+8`_E@Q^@xA?;Z$~e!qXpvJEYQ(e-G+o zlv5_K^odt_u)V`mXP63RJoS#J4ueCSmJm}(D(ar|x(`7<C(0f2Is6X~z40O0luGd}z3QuzaEc#?U@-=zOR;#CTh$ zx6?t213Th1ozdwGV(pnT81tfMEJ!l&6z8zdSQ?^kBX`5}tw75zq|QHzc^q+^Ngfq& zl$}cg+U5g1PeMA15{hFyju9rwGR9BPr2`w_B|fDQesIE*e~K!nyuCjKe+IW>;+Juh zro<188T%t9{>WUKM`IEQHas7bK=I%=WT5%)r-?|-8RF^ngbd(@4^|qD$-v;RAIMO# z##EepaI9l8j6x=s{ksXKaMiz^K(y>c@IXq2ikn`J$uOmCh*`e0xFBbMf(&y$Q!<CaS@kSfq4=j{p?%_uFxR389i%U#5hvaOMv&zwV0z7!$ZQmeWKp zs&@$)#c7Z~MO@G^CPh#4F~J)V`h&L#0mpxEse%vz(*U=bF{zRbe>iLLbEe>M;Vl_+ zbI}REJk5}fQcA{1B`5F;I~r3mmQ%GiArpvJ}lCiDh3y$O*o)FWe?5D0*OE(maE zLZtHoewh<}3k8?Wm`M6eDEt%{NH|=KKjn$?#&8Iw;hd~D^!+i3W`b6YK zode($j^%u{=VVHAB#ZB3Zr(z~CS)2V#&@qN0MvH}luYMwe;&Vk>Bnh}{w50u;F-ho{!;q{alBmt{Iwc7R%trpF2tcX1Qj!or=x{7by@gV2iYf=* zql6@KcioBkZ?(0ijHe?(tB=Mc(cA2{cv=Xjlav~c7)h@v<7Xk{gOuR&5RkZvF`;>Y z&mo}wFlO{>lf3y09`4I(CZB_Su(T&1i~*8^=~%DyUG8zBcIh)H198lg<@rT_;86uc z&|nNdOWZ5IC7Gmx)0|}S9OB&IZj=zNV$fWf0tBA!FjnDcOftRi4n@L{OFm2l4E9P~ zier))a>^+rXOx|2#EwIfX}KjBle|V~*&CBQt?=tVBVt6c=AbMgd3rvZ8K58`c}dpU zPf5-wEs@FhjN~lB{4^oC5`=z##AL4dDjV~ZV654g%ww^d4<=+@l6i(>GFKbtF_{~} z&Xmldhl+1~$%&LXf|Sg2v8i5@x#Xi~6aHIp=Od9q{(LM_|3t<<;h|D-y2s>3{M??9 z8!^<$Sj6A^OvSPHGbM{h#!)pMl1HVp>O=s5%rwr9D2EzHSUNNyQa;Ro1yCPir;!0M zh$j;z4KeF|!a>G4_Rl~=5CLBVL`k4JjkESq0F=PCgAMH{q3yFyuk>mX=*&G+Y}q$5 z-f|TMJDZ4p4pO#z(k~?ERPrv0x*m%q&yY1x9scf`4Rua!}gQ?#el8iyE77 z>9)a%tdwDHa)WY?s_M#rgqOFyk&(4>Fq;~gN2Oik$jCW18TFo#aiZAptpSBz8MyS# ztTJc2EM-+V*ymhlmKn*Z_)JMme+uH%a`)Gv0a>X!!d!LapNh1xtDOl@z5MNCu2O^~ zBCX``-9P}OEPf&Yd^gcc_X`zZA$dF!6{!M0aA>Pal6@?xv?SMmB5lge2MANDkR9xV z(uI6hXN!dxw3K>JNrVt^fFe-zf#iM=W4& zMW+aoDv%HOh1_FrFjp!;zRRT2f*fFZtp=HiA{9Nzu>ea^ZLZTwT-%c{C8LcZ17gr# ziY1M`{B~+U-tQxSKE|S$*^x0;sdOY)B5g`zM?(oSC9+)!)dJWyf=YUla|JULB_k?; zN*Wu;Vuqk~gME?elUpoe=ms9;2E@R}TLc@D$)Whx5JeDDr$adrStY^ZQUI0kFu~p_ z4*Q)al^*3QQi9wl&qY#_;&+iQixoowlmz`D5dbY;gjhy@X;Vg+mgtWY)3LF zrKpbp(W;vO${RvOIw!u?-u!Vxe67BDG$FpBzd4CS5;@fYB)Ogjq!(HLaIT?7Gnob} zzILZ!#-jayW2m48>AnT1lmL$+OrS(_%u{OHc{C@!()aj~&y$-(uFeOSM?{poHIJ-zolG{DN*@<98=|uWBZ2qN!&6|AaE{Ho66&l?V_Doy+qt%d*`N z%aHh`Ha_1Fe?>pyYX!->T%`1Bc?%%9=h9o^SJffDso02adAg+8@Jp(V{1yOeH~o48 zNp%Q6okP-4Z}=4jMiQAI-OWhA4HZUS0_mcEOu)4g<5O-xbivmE7F+s{8{(Tv3%{bZ z@K@CqzM-RdHmhC%&nt_yWyV6cyJ{MvDjGocMLBisY8~HF^oZMls=+ zH50FI0HW0pzScv0ydl1!h=}Hx6dWstq*O&5M#L}cB4&`SSo%3sWrzzC$gL_Qe7To@ z=8X7C4{;h{La@PWnM6i-DU+y**pG;>bP-o`;!9=3PDFgEjX1ffnnX%=54x~qvW(c$Xf7>8OhV# zH0R-C`3^9uS1#6Q2@UO>ytK}_c_5T(pGM>+^ThKVBStCQzsGPxt`!VY2A8vc3*+VP zF+R}YEEFWQ0}^v5&Y3BM)gpF4EXcOV0&in2LOOC|g3`MS3e6zOGgrje zEx3)1GQMSPbP9)H?JX?E<9FrqJ*{pz55iUD4xzkb;u)!|#bX1&jUY1e%=bz{9W?98 zYj>}HAIT@jujG^C18;P3)$a~}AQpG9T-w3KpznnjgFZgK8aPf-V9XlUYaIu0{h`;x zHoEx0a-^PEP8LNyej;LlWliBHH_;A{fiGafVlf`w5Fjk#o~_-~4oTn;JN8135C__z zjM1>yvtyO;F8X@RBe;Zu#Z>`kWUD(7p^SuA-|LKUw@}sVv~b9}l6Y2sg{j*Yc0u`7 z;Js1B`iouk6R$0$x6-C$nH1d#{pTTQPEgz8W zn=HTAvp;-c3LcH+l>9l_}V}F}zKGZUA!t%5nY32|S5qbkXM? z3#al;j}r{gievo>Mt(LHb9;vgCDVPP+HQW#ALT=|mki{8P%w~xptqR$^-h?`cN7hr z-;s1038mwmGMcMTjxv<2G?q@KWgI210AWC$zdJIEgmUWL9k+o;H+&}X`xzxO(A)6P z=eIKfJyT}y?Kn2Df3-$knjy#V1aaYQGCl*6KAoJv!1v7CW1eaT4 z?)b-dCV$jVq#dq-?{K*BN*zzHyzzOS(3=?sSLJ&mh&1$Oe-g|y7-@rR7R?vzb}Q8$ z@W<~k;Fn<8B3xJQKup#gp3H;OI}d4In|x$5M?5-5jW53D_=2D;j$NgmXQ2|->Y2}DxKw}n zCfB%MKx|Jwe{|bf$e_7)b(9r>1h!vd@voFn!V0+TvocZ0;Kd{bF@OCAZt#P+pnLR3 zX&3c)NKT!*ZA@0)(wYa``Y+4rb=)>#9)IaiKp$C7Prjl1xZ}#7Dh!Z#m>lGP-NI<)+}c!DV@iT-#uTZNlwwEL`R(tT!G!=Xy2a^E_xp6M zIur;D27|$HFc{3Z-56@sB<<4DozVV1XjPlhPKcVolYvy*C{V_Q~t2%EC?*iA*O9(~TqJKQxUHh~BMAZb9{L5fhpzI-zP zDFdv?uE5PW4A9DUhzg}Vr+VmpPsJ+pwzut|P1|0lXn{NNF5zhLdvk1V zZONal$~dMGh8S$6alp)DKOFZ5z8k@{&s@C5#1YO6YB15nGR-ue{8Y4>sTxLtBm?yZ z7LM3)oQ+xvUVJo^9Vmpopi(@_(a;UY6fjKzpn51`XqPSs0VjV`nA%x0J3}puQrc-I zs*T~fJ8JRh%@!N_P3C5kHC9Rvu?CMNDqi!S>>XFi_&bAtpS}2n`vQmrfr-qf zsKuJ_BWVdw{APb|B?pMtvVgZ{s+DZaesVi?&L4>RhD{vCf_)-)V zJsQ)>P%eMyrZbG{nQkFCLBwk+jqwy~(w0cWu^|L0i!I)&VAZrVw;>Q&LPxac4Q`EY zm|Phb9N2~727TiKL0o{z(H+7ae#(G?p29P~3ZpIy`60`R7y)mP1|kMAN{KQIR%51a zi~dRlVJ4vU%`K>EsB2?7ZAJTPSrqn5HhDz{K39JcLHC2?@2F|ZB;e&uV$lTBbiJM!jNdq+X$-O;nRrzC${(3z1JF+}9R`pog$GIt);>$|%T>($-; zgT2PXhkFOr1Jfqrb^h%`)9#3C0Rl=jZBRRCH1;1h8r6rp537&%_Gc)%I_5mm6Vox|_qZ2;aUmjT56 zHm>Py(=a!u?##Tf4{6)&Y;9R_+wC|UK-=xeO)E{fod@5TB!)vLcI8qJtBjv6Pg!?A z+z(~Jfcv*l7F20jgAw8@5nIHlYP)}(FDLUmPG*e71kw8QG<+IN!0*67M^XsW!;dHo zX+3p~5t#NlO*zrjNmC|F4_3)DrDZ862^TZMc>`;K@x<~-Y%kUrq$3wlHeQ+!*qP-; zB{ia3_Jw+C$?O>mxWp^u5&~Mq?671eJ)3y5%>1b)-zRI#pK=tia1Iv?DO`VJNFk_` znIWl0)Zfw}@oS3jz>W2FLiz_t`oM@Ow9MFyo+<>{5^-R=NsKH;# zMNV^+YUS3wO5~qDt6PP@$+d^I3fY6^ezw?Q*B8sz7zj(}5Y~0F1SCGv+MTfgq(WZw zQMPhHi$C0DMQk5MY}D?<_soB9_d5FdPpl*<-E)!KjhPtszUHsuKOWl}LHwNl@?YQG;BvBlD zRjLH-xC5~|HOgYgfxRM-8v&{Ib_OF>bi~1i?{ir}3D53{eC@ct}6WJ9A zqStC!AwGa(6^ZZ>a&ujIg9Hx>)VvQUp#!wJw*&&DuY#@I^dF9G#@hM~kx@Oj{ zy|ra3M+9)(3};O=WGN@-zZV?B7WpJl5`oKsHWB=Xj4@3i#04ww;g84 z!Nju19IlnLqx3kln}n|BKk@#v>Qx}kwL4&)-Byq3K0wI>6Gm$~CX`b*v8=|97}UQS z_P-jkqu&M=-B$IrU)3qXL8Y+I^QVI651{CSTIBE}!t{S&yjzI-pVgZOP!UbE0=fDI zq_`{HT3pc^gK?q38c2<~WNIJO=S;3shuM8l?>IT;;$9aa3AgJusqGg{dD6{^E0!ua zWy;iOSKEj0Rv)jKTXkYqP2naZj#FR9X|`ACfC>x9p7N-)KMx%IMnbYe?ocYPWSb@K zxJkwXoNa#^a*p1mjoGJMHmA9k@>}R+PNpgOBO&!UpapFtaP-oW=J8BNGxAs9Tw3ag ze;(LmKy!s;%Dk7GSfZZ3{urQ+6FH9~(TySerg1YQ1CM|Def}#_Bq5@sm!!^A%?X-E!(J6p32MA?Or>g+s`?~DQL%ch|M#<7@RyZBS6vegz zz;}Nl(&s16hyCwG%R@E^0|)n0pe?)7m8)g>?Lo(ZKX-T9BtcO@Z+5e^0Tz<}_Vx@S zR13E$rst;KhjBTNl(7him6*7a?fopP_@%7kXIRBoS*5SCN?(~9KgTNh9x|-r=V#c@ zvPvFE0jn$mG-cO3vM+&E`YNkTql!LxzHNUW3T1r87$PDQ!7h{U`#QUHoql`LAvey% zah$$nm_x2=brn_18dOHo1*@h1gbM(~iXFAgZg)GamKDQg8D-LKGSI5EyB)h}4Juwj zhYTz};r_sK9sZL8a|?lC4S+*#wzdX&f{+PvYZ^$b1UogJef`P0cSC*rg z7{K|s{;;->iAcr1_rfL|Xm$t}hH-yBuGb#b4L311r@s$)?{=EzNQ~#=|6DL_=Ens5 zX)N4LAjaG>9pdSBNH8w}eAt^)`AA}6Ad1F;C4D9N>IK>5p|%*SdrI#4r|68oP^_dI zCxm@3pr5RuRXL5KRx7d7TEKih+u#MzPM*J#vp0E-B9?hF(c`vSMcHQ3f zCpYSwv*xt0SPbw-FxVkLa6^f@&hHWS^j_~NtrptE>pJgQtzV;sGq4U)KWIpWUFTQU z9rg0v{h(qNcOB|s)x^7RO1;yNa=T8#dJ6QO-l_QXx=z4qMFpte15$raG^EB|Ct}@s z1>HSSG4s2QhgETNdm};(-cT}CLihX{XJRggo*HvGcD0zxJ(qN&@Ka2qG~(HZt{QIn z_gD?L{60>DB|ndqV97^u8Xh@t@i`GOOgxwLL%0#guAFsAUya%FW1L1nPFy7d^1E1x zfc!+(B}0EN9pzOQ0|US0+1Q!mm`l8Vkk*-W zG0g8Jzue}!X*l2C;xwG^Pq7l8_bkqY(Cxc2TJFy=8TR+oKufQ?N{N`UPpnXkWwWcs zxcw_mL(Ps|HI{7bk!aA{+pX8r5nOiRI$2Ha@~KuN`aI>OqSJqC{9WJMSDXHlDHM%g z%5u^C4VLU4G}PwDnL^S0qbwKAUtq~zt*$nIn<*5{U&(UO{G_YKR1IAsSut|c_@d9^ zOngz_h4`X)-B=Rv{U8%rbmXQnL~j#(X6TK&_=B;;fc;=mJBD2uH1v;{UqXH!I}iSB z_l`U5>dqr~=W~B&x=&`C56BUg^Rn&D2jrP3INJH~r=Op{c)9cD-OeBG&eg~3VKCZB zCeXIN4{iTQ+fI&l-gTz+Dioh#@ewroT-|xpnbsdd@n2Z%?tDJl`J=k?=)+EDTCc&2 zAK}GItJSp5``f?ScUEho^4)K?)pE}JcW=)7Hk7}&TkwC+bN0`P-Ll?b1$_CV_R?xs zNawu2ZMRs8=E$C)@ot_!oE{}@z(D*ZM&t{dtOxUdA{Cn zMfHBm*E=bycf#wz@Y?77?VU~r+aHTs{kS5wq8J`EYPB{WkRM<|EH<%&qn)$P^kBB5 z{%oxBvsQnf!4%x0CdN*{U(w6cn~`;~s1tCLREu_JJMDucMqTGNu^KiR;KRO6hWPN%Chu@6S{vsT8<)j- z1)kEy_2J*!=R4<>&Udy_w!PE&AEizweLUake0P6dvA20iXIe)gaMjh8W@Y35ZvJcQ z-`{ONa9V$UxR~C}{@+e#`+w339bg;zYo{}rxAG5P%84Yu~Q?vv-8U0=Z<}6Ssaz~ z9Vma^MjEjaq>&BN^nL(T`V+gH*2sQi_CNRwe$@B&W}6SjWYTrs56FjahMu3hj`^o` zema&6|rORtxNmytWV@_Ms7d<9z1hvRTK3IiG>Gkbf}OpWqS;?(mr|Cuz)@ z_VnQ_TX+jVK*YBI&*tTV08;FgU&-J7XJccPBFGsu6| z5k(jFjQq~#eO+c-z1;&#zNzy!yY1>u9l7xRDqPqsU^lzfZ04J{Y*^JZ=)4A)9w3r6 z6~~rb3BLjkD*ZqZY(IeSoc$eF47Bq4%yF28pcU`V9NPvZAoMgX?!!(8v+O)q|knKnmM2oZl1R3=5fZTsz-z#;NmE)Ta2z8wYf5J{I2AB!_I^RZOp7*Ew zq}G5+zYZLe5$*iEe}3L?*BkqwDl`r{cf6#wyZ7)>r(NF{CDk^(ZCBH()#{y6ty;Br zs`Z`vBd8DR2kW4URoL9tJN6DMVl!OtoS*lB(P|x>s%pEj53E`%tX5@p>gs>X8oXi5 zW81b#0<<%xOLBAi>j0KiD(>k}ag;#zsC5L8-HzSFm2-aHH!}_>;Qzv7|0?Ewt<>46 zwJz{-T~jZwvSJAvZ^$UW&(AABv(2f}Y&PSytX5N2#0i7C+n~!TH*6wT@de0G07r~+ zMOOFRln8WaO=Yht;t-?4X`6q4n4QCfxrKq34?9#a;ov=dq53JS{?I0Gveoxdfc=8i8@sIfORV15waJTY^+&jqKgR0& z4e<9NAF=j+!zL%$+O_%tRDX-r5B53oudu)a96m7rf=Pr+47`gDnSV>G#r@~; zj5KwWcPO#MeG$7725yqLJ@Ai=a}>M49hmlKR$eQ05CggX@~4r_ZsH)8%iRW+q#;>0m|aG`~3g;izz$9~VqBYg{b(wr>vBfzN*dA}-PqHg zrG$=HU=vP?h}GI~bkdaGMjLuJ1`}d7PI+QP^5d(jSv*KuCPZPBV^*~fg@yG|^b#^xGdnEa@n4TsOx&DtsgyyKRHlYow3$Q+6-}fpw>`K4aqU9{4A+ z2nJ?NfyF^uJe2IP^!L7(bS_uV|(aI~InrP{%@g9e3bf-;CxXRRA zX1=d1Ur1J)SEaM1Ui7vrpRQZOT-pKLUR%u*)Vxw$4rpOkuEKaweI{VHsJz&B+ml zhB=Bauk$!NIa0ahPfJhEz3WzG~~x!#=J zr|7(KGd8+3z3#U;ahmvKa5Mobi}?K%QL>yE6;W`7Amtw8`Dr39id1oRvSiNS_W2xv z$}yWOQhA+w5URf=`d3oP@RgZr5*~jpwB;xsbT)6^?4}jwMjP_cVt8MuL~iwEj2SPK9bJ;2&D4L4wj8}8 zNv~q_)pGPQBZir7wwgzv1x&q}kzXRfb2|8RB3da&IeixvL`s&KOl&R`bbh_?Yn=wFIj!2CkZQ)mMZ<|YjQpxU1zosGEKqUV+{R-7N?LU z8?k4V?=F-X&=@9K?Q^G0M^G>wfj%8kp)$h15Ni4biE7!7ZOJ)cAU}LUS}~AK0ehwI z(^Gv4PI*R%WhbEW9iM@CJir;){1zub=DCn~ej)h*ASXTp*c6agA-;bSkbNkE{A8jT z!R<#C&q}2-qEef7VbRO-H^SIh+EiTKz3r%X#2^6} zgr+RI9w)BdvQ!9x^Eeq=0f|To3NHB#txzum#(b0A*$gpj&?3f!;MAa-52;;#x~Xj| zhSXsVia033z`=r#;FEulXC0kYc#0R68mGx1>r8=Q7A(tO^wIw!0y!=@qvFtvR+1a3 zM9laliQj^P5Fc>Y7m@~fF$T+mK-ldLOBx3$d4j~L;;*eO3@BD{qs!Q#_KdxxeF$Tu z)ZTV#gknuw1+wGRW;hOuM?6f!`lN{jrmP{E(i_?vvkPBvf6IRaeKh~d6r z?L7ikU;SQePGB_ct3KicNuTwc1)bm)EzqhdTKix`2;M-n}J}3(QF$@9w5E@rI`)bzZvM7p$#^l1!sI%7YIj{iou1V?#vTG~${b zIVF^_{5%#>LX!u!2Ms`UsbLkAeU6esGtyFMDuZPe*ff7yEGCYSpJM13&u69tcL*FS zCXk_&%ig{dBvx#bL7I*f&~%M-gf~$>%(aYX-AKcv)HM0kfHE6X&Zk&k5p+AAkzU-sGu4V!$ z*iGV_?9G4i4aezjZCU-hJBtyDbm5*br)U0-z2i9Dbj*4)8Fy^Z8nEv1il5z#;WBhO zD_}T+DY4~6a}kMfqe^0)h&8ZW5<;F?pmNc`rx+5XjA9}nKf_}HL5EUyu?EDqWn5|P zO`rJo>`-AdK$|1&R^n@KgexPqiyA{!7Ia45riFiSCGtM4%^6Z_#Pxt!=rqc=A8aio z?GsZ)$&nS%q?HcWvjzmvv74UN$EO*KaZ`w}Uq)be5rKWyW8ZlkSbY*gkAkj&d8AuNiR#Y0L5e(fF#F!jCO?1Z=OD2tGgG~0Cdt|cT+$WQV&4*-i&^(y6 zWm60ql;*X|2d@qx>RKPR17x5@2X{*`E$d*W>bxwA&)ZkeAT%Vch>QB@XeoYZ z#zv)>8)wDuyt~}WqYgBZ)7QU1<}vVJUIfO2kg!=uKV%^-f)cn{5bsnF%ODaJ zA@W2+goiX)1nI{dWqwP+yqq)^wf{|Tuk3!s$(#uhPQZTglL~l$5#XPe0=#b)fAGZT z-~v8a%?A(Kn?m=3AaUym3f6zwN|NGdIpF6<$BV}MGn`oTsSnw=X=E=P{Ln?C(C_I& zetPn1@qGQBoA38JgoP9HzIbA?CRL$qFjEu+M8@QuipgQaaq3yM4E;aRX*)#y#4D;` z#5`QE#R9TjK+=JW4adpXhAr~<)w{d+ajkxkdt1OI!MgmxLK>~cA*p{6{8yJ}CB>{> zN}t~rA>(oN zZ-n}E2P{Z7GqB)7Nkf8eSY~oNf@uDb4yOfY6&sFY{`A`$^X`9cBdECk<=q`@DmE+b&#hkt7O0T5i+!d8pjwasA6x=kMdE6?RfEbDl)<7*h!p+XLp} zOe=$6O@7OGwJeA7K;8s=!EY`sVcSubl4Qx)Tg`gIKR#LO4P&n;^}iE|uT$rVt*s3$ zr2;so$$~RL8c%;#M5KG3k}eOYm4VVSU$`&KW*$_FSwCQNHh{8Qv&l+iH2pG*lDG|0 zZc&n+eh{s>HH~PGdK21jdf;Lt3`}89pQJ2D4P9lf2A-yw{3OH8KM`4Vmzd$6yV`7S zYzWP;a2|D=9L#}8@jJ&HC$j)Ark)_wP;xW7B(v05;}w6$$}bBpYj@<=PUa1iUrbrm z?ily<(Pr7=N@a_o&K9n0`0zT2C3NSkkT~+2l}6Ee9{d z@iUc5$uko>)x-FE>4_h2Z_9Y??YKjHhgNtdi=20utDXmk_F>UMZOdZ=NsnT^q17i5 z!F(g$(DLzlCJ$732yx*v0C_<@J3X+E?4~}=Bacn9NF2|`6hUwSw4r1sA9usS))p|V zI46HUT7idfP!H^Q{B&lwyRTs7NKn!s_E$RG!-N-M?_ z5XqVRWUpDktdcriCD@ggcb#Wt*3&a!{^1S&u2pG=9d-=d;vP7y)CC7Uf(mkCisi|9 z1`;-0(_1)K3}>d6h4+uJ&y%KJ2rs^06vTgcaw0g3CV+C2!auKR(v-e_HUw+_8Q%$y z7C~Gr6%`{}Nn~_0EaI1Thqz8qVLcGv31s3~Bmn6T$k4K*MltiRUC>f9mtj&>U-6$n#;sqf^3wO9bt! z9gEvuHus!zl}}(`_2p;JE&J^8SUYpRd;Rpg=N@wSKpaMlc85%yIFoI?3!{IHQ4}(w z-8d6iIZvG%?kJdF-Y=AQ*)>kyh?mM*>}S@ZZy&xXT8jfV<~NM--{V?*Ph8R^ee#sN z;A`=XQX;>Wt(&1WAbs#%Bf{@Iv73XUl{HXSmTNa%41&RY!gA%?GAIKiY z)Uwd{O5QtZ(%}yj*ybr?n>XzbwBuY{)7uZ5)A!rkvx{tR0sZuf#$$gUdYsOnn?gW* z;0TZW$_YSD1E-56FB9i95TD@!wtO1t?{l9Yfz<`W3dm(R#^&?|^fNoWu*u70YwKy$ zk`@1t!T<9Hh6VLADwHvmHAJ0XXP6`#=&QdrB(WI`h58(5FAREaqV{L(?X*7T0!oW%0cpB+gAm z-ksqZgY|)uA0b^#Vs!~V&xl82P+47PqnlJddWlctnDiZYYwM}-YagiU>?EVkcF7Ii zdTF(+iLTB*b-I7L!7sL++AVi$tG~5%qh6TU+PV=vZ#d3IwPksCcb4Y_7FXwOn{*uy zyCMV7>e?Ohlyu1rnSesqwVM&XY+Bv*73HU?qTJQ}1VXtfwx`;?nFK5Xne=W>>Ubez zVtV4VmTwUfaq-G?9&ZGR<)w)ygA`1yCF~ha(5`kk40wOUM3!^xDl7-A*i)*e+=%c* zp^3N_RhV@ylv(F&I99>z)eLtTt*&1i)!{J0W_Lkjl{!?JCJ-AbRi z=_dm;94CvRX0^NpU?=K660N`jG*}mI71(?ODCRf4S1B3{d^dT{5~V6B$1|->=NM`n!dK618C6qsqwuCI z1lAP0k0xvjG6I69*uw*EHx(EQS#+8s5TOf8i-6S@8VJycG;eh##lu(GYgop}CP{91S_VCmcn z0ZauaE@H%3WyDxxMDig$8S}vAH}nEGp;>vZla#3BF0gYfGRXz1AmK*F8|ZMSoGXTd*tJ7FIN=-coT4TSwvbObYz-GSSMIC&&0aDYfZ8PDC3elI!@ zX4p7Or&gs+E6Rw&2=6s*xL`5In0;S|RE zV-9O9S^OD_@r;!O?>o_ zg%u^>g^ME=?%X022)j}%Q#&U!Je_~dIuvYe(R|T%;yBy$;ecoJ)>Z5FAd3$ev)R!jL>9}4_fUv+7--w;5Zd-S>^>pxC%t|K(;6Al=#rwG zc!`YVVd&3_Ufh`-25qn7@JqjiqYY+o7OndZz`*qqpaC9zOZVVRWW93CIx~O%2~@uS zp;J8!zZcLBL*XJ2IN)duYzzM&Jp!I2erZaCC6wSPg%~aDVq!$I+2Y}(C%>+A2w{Wb z-y#xZ6&-%;k2lOgB7x}2pKIDvaOVyjH~XDnX8n+VC?IAGlk^ZOBSf+4+ZEs0sIvRB zi6#OSXoyX;EH-Q45Q%+49tVH!CIV4XI%1(%ZQ`N;sQ6o3ZY5%IN31q0#A)~B;c&3E zr2~cK6tJ^kIQ$Kis|ZGNC>NB_poJ%r#!R_y?%Mz+-0k`-B)yQp751K6);6c;^Um&w zdxKjm%Wn4ULP|>Ebio*pB+TzeI;XxFkNjefE2)`#2_0rnM7hSzsH%U2D9v~Qd3G8$ zsUV)eCp?bRuX)1oDfr~WL?805U@Tx9bsI)IFw5O=QQin4h%Y%M082KaVB_$Tq08anD7v+Zo zA^9dw)E;zlUth01=wyF(Ka-+wEFaB;eOckuwBH_dobJrFoA@-Dp_PQq0YgL}u~Q=x z$K%(R^BCjF_QakJwzm)2Q7i+K!?l}1w9ri?&bo<=ht^XPk^vk_kB8O`KF_kgA%$Bv zOb9;2I2@of__p2Derh^IZ^(2AF)Y}UiSZvskDcmaw6g;;F=>BCY#!RQv!PkU#LjlR zCf0T}{T7Vx*Evwa^%d_T#gyt)A)SJZb}QH@c2IwC9q;>4zRX3nVHddEtu61d6WCLc zbck;jy~A!q-RoHq+MW!k1Hl?N+Nfc0v?YEz(4E?$_t*&~Nvx>tbxLiIKr#th2Anwb zc6RI>uEK1LVzqxO)#q2V7e?#5+oIQ6vWydD#5-Eji&A(?qQ-qqZ^7$LwRGZa+0u`e zJDs><+pO=J@f*%vg8OP%6Qzt_JJHIx&%Hf$amSsn4Uu(Z{MKflACF`)Ry|WPy996( zDl#eN(m5T$i3a!Diw(%^6pu$E43C5km#AQa!(VLl#!-JngT%jOUz9f^`VVqk&27WWowew>s(nIcTER(!pe{0L~oe6(>PUnU}D?`4I@xw5tGOZgL9NTWE zxwdTZRoO5>*)Yk<2A9hQw@fw+7Dxm)D-nuhr;rFd*4zXRke6A=E}7&Pvd{kQI1@!K z43+~om;-Jg!-KBqeot=Xr~A1(`l9c)rQIoc?v56J#D~!3ieKu8oZG`_Hm1R{gm%|6_z z=&OZm->v9tzVak4(3Y)d0e(cdEDP;c5gUez{=CBK#);M@)e}@r)RpeyN_R=jS2_!v zv?ivs6jKc?9c_NyA&2cXy@j-73}?CsXBmGqgeF!Z@4xdkijMH<-A}scitH-O4vu(A zmR;s^u3QDB#m*+>%TCpZ^@E>z3n{bg4&6CR#%0XxJC8?rvj}~s;k+>Vk{d>RFS>ZA zD4AT$8dKQS8Qe@mLL|mA+jD6WQpS{X*7a<<9r5!c`>x3f@3Q9{JfS_dopj)p zSVK#0(q2nU-$ZT@Lllm==rVsU#rwYOnr&DXWH;r#_tZ)%N*wkIhF?4sXXc4ONJc`5 zc*JUSE9BBz7vn-22F+~9<-ks(%nE=`OrpwwpVdNi3bDxL@0>$&B)s(kTCnoQ^f7jvKU;7sYOK;4~7@C~E;~ z$*cRAgQ&0$5fKXtJo9wlIC+MkgW;7V-CJ2Has-iQxR=|^Zf#zOu4eOYf@gXua8@ih zpw2Xc4|TNQq`Bou-W!0w4mf}A42G5mr|210l6PIBW@%TLyCnULLTau&2V8oEPMb^2 zXzA>fO-nI}%h9*VsTMKO4jV?%1ENVCUq?icGfhmqU77m#shy2&OM1JF~nX#3FwV?H&7~$gjG1A;$~Vk8*~({LkKM$FD#Ub~ZnJ{Y6g8%jiEeFQtVr510Y#%(ZWqL?^(bwaCxaJDDCb8}2 z6>v?WbIp~;H5<9TSDt^3l6m^;5^)&Bh8s0R%m{?+_afbLv)KHr#amfU5i}L>_B}01 z$%h4Q*P!Y(Wrd)y0(@qV)3A8pakuWmTk(VRACjNGo$Y6V#cgyWzO-pc58&A_s-Yn=+q zafp7(zM3yrv{fj}Y%(pq0yoSw^->muX+@j?Lk&BD6eP7)(jA+Bns%$!tP(g0O0)26 zViq3ZX4sT*2f4q0z#UuRu-TT03_}^@^i8av;o5(^-8F?Y2;uC)wz)_9>VtxT%sZ`t zgEV%|Vq&u6!c!K3nbb$cDUMa>(jAtmopUmp!7+>7v~*Opd`OvBEKe0*DY=85lB~r` zgez~gOhL^LzF21>=}}U|fQUL|07_4YMDACyK&_0m>|8)`P$ z+&O=rY-ZWUa2zK_mm1(IM*HlP&o$DXprVbT-v(_B%5zDl>^q}#GX^Ek;yq!N66M(&3 zi40kISz_crUAg_A984=49C*G(NVY4F58Qv$(E^i`@>6ms28o1k=!kvfq<@=}olUtb zZ5Gs!FA1hkN30yo7AgO+*B!XxfX!Q%NDPWc#D!jb%#9Mx)1h26)p*4Z~ z1I?&i>%j8Gu{O1l&+O)0_z0x9AxtWJR&wVQj%scXI{UGnB7|<+CKSzS=oOtL(*q0 zUJeQM@#)2o&;Xx4c!Y-dbUY-Kwf#6G1J?FrNCqB0y&aMP!{rq`9UtNI^C7unu#bl1 zioJg}Bv)g6`eR70Zt>}_A@Tb7^y83ttd}2##A6X<-wnw}*58vMxn@tl4axNtKK(Q# z*F${z?2&7R>(4{tv$pStWO#p#PrnYykU^$bBw*uAu1LUI1XmOB8IO6cwYc?Mo_Cx3}{OIux_tLHy zb_`biSi%~6{ieyXFT?Ys!G1v&LHxbXfA5rV(b0=g#NW3BCSRbXs(uj3xDCA&&>#To)k&=Lole2&Z$$0wu z7uMHO{VWGAMSFdWc%IGzE_$>A7|5}i=l_PfX7>%2&l3_^E>m^iB$(5%kw>k;P*dCU zmIn&Y?JM~2D$KZh#D~Z5VTlvJW+(e5VfpNMCv3o{tclWITX!m~y20A-P)NH6*>Plk zye|bgj{Fqr$2flsK5#)^2A9*Lp^&Jd3gvx1Zn*Mq5?T|Z<~Y83~=|J#O zz{MfXvxu7^Dmiu0ra4lm-mXR?E!wTUYvEJoCt$;VQz0JamY1p#sW(V~AjuaBzjXv}CIPW=e3m zkj8W=vD`UzUF&^3izq0jt3c}N+t&yRQH z9832Ik!>9>Bf-hu2RJb>`B$JoIa^zX9<%plW8>N+6Z*TVl2(Ptia})*(Sdg}GcTGd z(s1nfpF&xGllxpl%^~hp;_;vWaa?458viFq%|Py_5cg_n?~Q$iwm>k8IGP0h16c2> zx;+0B=a-=}sNILKLWEr#miFc}YKx(uQq3M`t0T^rR}dy2hGReRMn3%z4uoEHk*;!W zJM#57Q5OsfVD-nYvc=>dK25DaSr7`|6oAmf}C(o;CF8>t77z8m%3!039BXB3E#uVoTAzd3$? z7~U9N7~$>t&Drtwyx}Ta)C`gMZgh!lxe%AQ7yDa!zo)G*!}Z$3>0Am?1*=7y(t8H} z#oNOi8xI)AuVv7 z4+}An#FngAgz=(H#2YtYRfC~>>js7k{Ov{s+W_B<3ibeGf%>m52b@DM;A1pyvn1es z&sFCaeG3*S>8qfVft*vm7owu6)UQia>Sw4@%W9u;*?pe7$yLSeLO6X$?(wgG8oGP` zt5&T_+4tC~)wZ_c@15GCR@n4drkbYr*r{)AdEYyYR@4kpYyV@8);4>R+lp8_O>pZ??wN}7x4R@Rd zntTNFp5os|W<#jp)xajzv;^Fxa{EMu{KqO>{QHnCoNsd*so+^vr@&xH<3DJkRfeB# zILlhAo6tfC+LjdGo#hD4W*N(Oce6rSlJ)>?wQPMOC$}uTt%QiGtdh0_34G z`6roO^6JeM&lC+aPH|T6h!J>~{iDuBRpCd4qPu(Cza;Cb@-_MxM}Enm{6l5t5Kz8{AgjI+(*mGVJIV5wM(esVKE{d1 z3Z=tTa(dCGA7Z0J7H)@74OlG9Iw7tvueiw3|ROnNJXI zmDwgLVL-*>fPNB>pdAU@2qUdJ)|2dzw68TIAt#t7#Mtxd6VBLw9FH1ASEo6D3h~)e zkYjytg-HFo$4;>Hub#>tYUL^#azF)KWCHVN7qkDRnKG)HvVgdX^tJ4G#XQdpXMY3F ztD=_gTJL?%zLaMRO_X22v)|m97xUcL@w2&)4^O!o+FXVNd~cnr%9rz#+%n%!{|d@I z)D6FL{dB&yA(wG~+=;@E>ZiS6_=1a;_WAiXX>gq4#8;KN=@lztSr4IaZHy|ATr-ZP zx-k^vP07I<)KZkiPWPN`E;Bwy_dtX-ZT$B{eqEnfo#aIVHC<<#siLlS&bV=9pCmqH zZer66Avw%*+KWQ+B0nS{8`xk@)78;0q zXI^Jd6>UqYsT|=&eotSGEZV8fb;+sCAJP%(Y{4B_!S+mc9p^gaDwV0)sJQ?%(&mk$ z^hHBmxBLs3zfC*GEdJ$vWpCLEiL=z1!IyWh-^cxXJ74FhfPdZgG(J;q?&{pJm(JMk zlQPpXldffdX9yY<)H4J&jDv6Z456MKq@c<==LK`2%|AO(sMb&fxuBrZtIB;RXbd^A(hX-chz zDwoez!HU&16bu^q7YtJUYx#JNtBrbHA+f4?@OfZ(?B+P*Oc4>M%Z*#ncXs#kHf8bQ zQo4G7q*6q!BW%j6Yf{U4qbl>VoPsBq>c5AeyE%elFJIf8c4->s?8xG){bkg<2i97A z)AXAg;{3^8-Tv(jtTNlTU1GFZ<&&VPQ~dNmJ;**w$D|QMAG1n0<>RN@eK`>`M(*qY zQ#<#!IlLUBajRz0Af*vIJ4k8A{&vP#SGYcZXP%SovS#b-z?kLwn;DfRZ|VwrRtu`? zhUY_;q0?M%3}(@}6}v^YwPmdimVaqXo2UTg-LHFw`6ckG8F=@OpSZX7g*aYpPUG2^ zpA4)r67_7hVAHtv(k=Spq^r5?fIz6m>4Eh(S-|%Pqh{Z~{MdiIT62nv9RYM`BxW z%}da4ywNx|ykG)r4Y?9+^4$_R}mO;f#aXt>4@K;L*nvuO@#a2p$aT5cG4 z?#8ieTt;r7A@bLl>ZT9sLnikS?*6iX)|cb+o6|?}((%EhBm+XM(d!_b-`8?>l9WOx z0izHb#bOeTXyPSvuq~&{0=vb3vfyzmS~56N$v2*dD`LUfJK(rKNFf7%9tb<8|PzEQcY71N71AV zoT40-*IHFMjOgXqKfgJxMX=6KjLG@U*-7MnPOm`jz`r37uV#Q&6#ugn#W9F|pjGw6 zjg1L4V2Q$Dl5s|N91n|sUdzbci* zE1aVghuwYzEgqiIAQXD>vS68tTmWKaEqVDK^9r+Uds;JwA;TmHOLJ;~IGMgv-9w6m)fe;3^nnvb3U}6XgrkbX9!w zg_P|rqo?P4(6sb7C0hEAQcM3~o|c}_%Rs2gSMH=w=NWEAg(9mh#2I9@yr567LcgCB z+HDK#ePMJ;)WlI;gv5OR6djyLq6~M8@Y1;U!|Q7r0~78iiYxFA)KJ`hcd`{#FW;Ss z8+n&kkOw7yRjqfzA(-j+z@C$8*J`QiX}c4T=yei}hq?!?Qk?OOy$<_u5S&D`G#nTga?r4C zKHZP{UIutxua&q=T>nz5O#{On7=!bhvjhK<203H!7iqCbZt)9eg*_^Y+F2MGaS}$E zA-Js;%f@cbGMAZGu>I1=iX`-YHw{V4L-+53hg_E9rIxrq{REH0UQ3^u@D-OP@lRMph<^R<+EEk&E_* zx3t2Sm6?praOQQ%1XZ6JiRb$+pbYYVQOL%Btfb81l2Hfs{&ijOml9p@2dN9bo2Lu@ zLA~A;mFnQgX^_zfpQsw4Qb$t?xiy*=)KgT#@>;7Zgr{C`>2|492~T&PyPm&u zRH_r6ezQ8^&Iwvv$3frNd3zOork;E6j1{YlXSB{38&P?l*r;1e2u z0V`xwKv^m@z$Z)tghP57B{VW#=R=tDI&WV+E2x)O1;rax6@0OTDk$c^#1i_4d*w@A z4|AG-J33qdk(Q7B#Ji*hA4b!l(I@yCC3EyR8eO@5LS-291%Q}Br#D(%t6S7ZfnKLJ z`DKI*nzo=`K#d7xWcVtE$v?)%WfY!&-<+JKeL}$YIMz*CztJdJK7hCsTcE5Y7tQW3GCFuV$S(t!4($sxH-(#o96`fUYz)056BxWpFCi~`Fh_%1 z0-TKh4Vqn0uE>>x%EtPpLBdvHi8@yfsZWQ-^D$_1dX#VQA{j*#zTWzhYp$(-+^NeJ z#3#pqdV%rIqyE6{UD22?T_uutOub+&B`@gGYc~iIYP{}UVFd6vraq{8@=c__T2<%M z$*MpyykL3tuRsDWQt-5nK?dYH%<6bWooJfg%MwlRoz(Q6EQs5%dkjv;yH9HPTuYyy z9AOFglkOg!DsT7jxvoSQ*nM(;!rB>F`9uMWm7hGCXH8rdKsFe|?(uGl;gd5~FWd5n zmDg77Ob@;ARl6FxBeg3=cRn8t_mmBi4g9W{v_Izd|EGB#r(c zUOiH{h~ajC&wDAh9N&vU{wqzidS5 zwR_7%k;wOwjU1uP;L)*C`zXtUPijgg^>t=GlVN>L5c?27y|*@m=SRm{>UOQ2O622u zJ_Y-N%DSJ5kT847l+~3p9hM8ty{ydr5Bjg8r7Ij5X?;}PaWlWQH9xY( z?xSO6&iFL$Domk@Hdbjlf;5eED#X`NnPqk1vk7Ua_2&oP;EcgP#rw((KUCOuPYJy7 ztqxPh%`^wb}3L8wqtE{xtw~Gl^?9}(dieWd!7|`H3c4j>-+fl>qYX|JyOLm z4)2&DrQy%UdaTmmi>FDCJ0adbN?{zGva6AcmERS@bF8)r5X|$Bqmnibwcok4y0=&y z3kjyE18mJ5AKx3PR%V*Tfj7Rj@hmgFUnlzX8gleLbTURvE)Q$UlvcGV%@gWWd4Hr# z7287{Ym0b=h}8doFfwr7+EaQ`p`R)ZG#DCTmWfjRPosRc?5q zAXQCExIt%ELGw(TA~wjC17PeP>?@>VV|t{pZlgF>1t?K}eA{~_^pqn7f7RGj3W75t z2Xu6{M!1XBrhNgP3=4JP3ie+i0>)R{KP?W2v5tT$&^s3rARqnW>kV2vP zsQflJ6vmYsxmqBMBm_^kx$e|y743+_OX#qmj&d?lQbRdVfRF}WK~G=kXpLDPWy1S^ zl678&f>LaM=ordLv4!*Zn)O?TQ_?Rhatdg-6?qxjou3~arzKh>V+e{tGvSGOS;n)P z24Jk~8*$#NCiSh(R?0^Oj`J=x2J?$q-Mjj4wJBaaWx#}|ooK}^RuSz{Z-PJ9u}75y z&l`h8-B7r%h{|C=4Kxpa4O`2bFf_Vwgsz+6K4HFRhloRo)oa^!A=2JqS#%>Fo;6Bt}qS z5+&Y$+CrzqiWlR*mV9AvZOLbWV>O+Mz8Ci*Z|DVX5=I6t*NSnf@j7oibVpX~Jihoh zg!TLPgZzc2zALcCp3W5Mwa!CEm#b0QXN$+%AQ94ZuE4Go}H?dvd=SkL4GC z6uW_tY~E$qG~9#+eUCG1Jm=Un@_KZVR+Qlv=7QtOUP03}!Y(Z6sVLe4ZxW7rUcSjV z7(;ZVucZG)A;trPfM}V1uW3$E3!{+T5*x3m34%;RZRsm?cTaj@6hbJ1Wsu9Fv`9l- z1u~73xsdN6#sO!xRMIq!KApI+aSic*#(DxZ46?O!T!T`e124!!Tq2l3DL^l{_Q#*S ziMMP3gE`|3E~Bw$T#p08ca34#r+%1^Tfp0|9jbu0X98ICP2GhlJ|qKJlR_}SgS z>y;>n-=d*yKzmoNahr=j%gUDsKr2Y0L3Na#%xDq5oeoeyh}>XL4M6wymiCe_FW00ko(^upldIDnrlwt*Y^~5_cS6+~?pr2tNUH(zq7}VGqaR2Dh+4T>r1JN53J(T#x8jM}rfeOC@=nN6Q zf(C!gz5p6y_Gy>L3;ygz5D|G<&Ak*@LL)HwMere7PG>I#g>}4WIemT3=tQ_+7@iU? zxX2>R+lKcQBN%~kMD!TJt1Ix&e0M_2g9N8vf%^&(j2)^JWeRnF;d)vnVsLGVh{0;C zb~Yn(`<@#W{zc09=xPJuB1N(LGsoKXZF8rC7AF*=f(%XLhOli?b zYq5+Y`}Kp|>$7}nX{{Q%>Fn2!zPy+0J;r@Z%_ciQ0DE8Fjedji>vXcl#ld~d1IDM3 zJ+rQlkJZb99AEZ-idEj-HL}xzNlnCaqc}-)K?C0HvFP?&+drk$S9zY#9XikKHxBS0 z%x@IsG+oFm*&Nd)m9p8TwROO` zWuL8sd@kv^l}o%hleMb9?PSNR!Macqsz$i9BL-QIr57slG1KX%SP_ zIFa~=rzp{X^m3!RpF3>(^;3l)4HdzIlwNGAkItI8OI1SXE1wqeNi}CVy@~VV*$Q{g z_%yKT+1)DzomsZu-mpp$zOQ>@g;<0~PyfYe`f zhpSMpSXqJ;4oQ8H3E-4=sY>15N6L#-+|9Xq^|xYwFXKfiovHfm-a_p4`%zyRc@9@q zWgEGORpp#sa-r$(qPPMJyJDX^MpnE8tpv$ZdVH9+u&VJ*eilRI=*M`Ygk6N<3@&%tl zq?YP`O4B%3xxsTkI^^Q(I&(hcEA%sGnE87;_cS!kgm_Y7Li}Bt5Z});Ar5JDeeIp! zoHk4nkNE*8EBqJ+VK%UB;!eh{QZw;rKa7(w7u?qMuRTbBl2(QA@opx#ZNApWaD0u> z_$HZGRN;&#W2nH7T=Ny;@i?M^aUFuAi5H81`o)#Awa^NbuQmb-d0@qDKt_!Q{13SS z8f(PijRk-JPK)<_-wP;s@Qh=6okr)yT33)wYkw5Ri5JG9mnczscSOOr?d|}+tgd(M z`qUe`suyf2MOD{WXqokly{2)ZJH-l0sF@phk>(VOTUgyEmKEjFHH3XPNybLH4ob6s zHWbv%d&R16Rj*iod_A6TSYjn^0wj?zzReuG@4V=WQqIlE?d@pfHI1+zCNxPrFPN8c z%=g5Z`XV4aznEySdhT5netZk7E1^vz0mi#cZf}jy_lu9zwU*Fdkhr;qx7V>}#B?0F z?gYeL^DDW%KJz>`FhJ0GP26m8K{d;Nk7V&~dUjDsB5!EfO&zWqLFCfq0p8Dcm7y^5 zXt3-~jS_m!n@MGjBLQXGt6uuDd z#Elckx}N_a##l*w6O+Wvo{?*?*E}TGV1OvjEoW2;bPazP2HrJ|5_g>dzHi2VK|+Ua zl7x^D*qylEkS1nRmWKfr1}mPBo7zYaf{}PM8B-d^*%NME-_}~#vLbThDJ!4-^+ycM^J87uT?t&?HwwKW)A_eFPb!9rQi%lo!6 zUO){m2RU;a3N+q;#WC>UqPphcig1F|F%@0l3{h1&rQ*Ld>yZkL!6{XLaY^;1+vi7j z=z6jA3ibL_ooMxjmQUSr#;aEIQl+UED-F0GD-$-%(X|H=^tl@@4PrX%LKBfm2 zj=3{x4ho(W7PnZ-54E6wgY2;z?+txWQ3@)x$B@Uu_31b=Ms76piVnDVdwNfo!$!>a z6H(QiwoHZyIIM+Ul1b0C%=wf05wK!gTn}5e!}FWdqa^w}0tNt1Bbs>0Iz(7}H*8tp zxdDF-*HS5i6|TeHd*Ki+hf(CbrJYMl!NtPCR0X)$!?YA0R*IH?j4?28lu<2UgP5HD@A&I`uHKBXW6=k!+KMw;nCQ=(s$DAB)4C7Ry+|5SyYp_rJQ`-=Nzi-r#@ry8mXq?sbv{JLK_~LP zlT-W)E(Lq12l%{)fA_KE$RwC9JZhQ)<)Pzg4VSWhEKV{EVMNe&Ss|1?!Mng&o+dT^}h>50rk6^oCq-%@0*WU2nr} zSz4p2GOU_^(jERiMZ%wCD27(G1>{muKYeIe(8kumq(-|%q-W%=8VW}+gt6|)E^A>} z5@Mz&ZZFijQOA0kpJ2m!jg2ypq#;g&)ks@1MqqS1-BuPxth(iktL*qSZ_GTd(xOeIYBLsZyU|cDH_| z`F)hmDIZo{hl={v9GF_|8KDK&4#g_lQ~t7kPfQYDg;DY>ODRTN5FUOQTt3ULAWb+O zSih9`w{@Fyw7L(dGZHy{=W)N4wELYV z92FRURT4rGeyavfWc8)eI%o|lj2Zi_R#M?i&x&RwfL0f5VQx-Ct8dRPhzErh0BKbi zv$k61(6m998kj9pWjKXsPx$&)7EMEW%~s2i*(_^+w5TPC*|2H5&rKCg_(NP_t0<5l z3|i(B!R#2CfP0c#cTDPVq^dc2tS*&fU7Epv_Iw54j0mTX#3)rz%$!p2NmNncUz>lQ z7kuQ=0wdZpLyY#ZWJVWJLE2uFDwisRA94_S>T719$-b^@?=$ie4LB0PXIbz!%G=+w zFPWJ~yyn)Ptp0*Fo#k{GLm}tBLf|uI^jT9g$~VrTw6Hf}hAQ|dYq&3fgJ!EGS(6!m zt5jx01K0Ac_x0A?6sEOTKTGWI!%V+J(Q<#Omiu~3ZdO}GXIIr}HW=m8cv>^|Gek)( za`)SdDhx}=ECl01DWci|SHhB63N?XLE2O8sg%P$ybt=HFDB7WUQ4`3*c(Akx7kmAs z8~EWT8o?HG=@yEKWa&2J(P*_^X2dUlGNkrXLu!A4A$8#NQ_JbZ@!Nw|%QQQ!R%i`u z(sf>2ePK$yar}0-(`qH~m#F})R=3cu+RxlX&Ws_i88i0ewU|s|ndH{_)a%CDekS!L zZ=&_c76e?lx#9VF{$`9fr;{bIE3_9+y@A!w8;kAqO2xvxN%?pVC`7xGY)P&F)TSb}oB%H%?7p5wa0cq=%#w+ZjK<{jJ7@Y>*&D%5uip z_f*X|6bW=U8jVJy(Lg`s4d>jo$`lovaouCyu2`L_V3pbfFQ#oIAPyyeeRe*;443O5 zJj0*Qa4%^6DH>3VL$1@TllfE{ocFIMm>jGNKQi!n0zlu385ff6XRRcHI3u4JP zEn_QpSqTmN`r-XUiZR^bQ2XsSP0nb9IHkYex4JD@zSitFI^!`v(jrqzMijRVpG-VY z;dn$B04w*8jW@A4@{oalORe>B0NL$?nZ|zXo)84XXio-v!GMM-)cX3<PjCa?} zD#YkiIUHlo?&7gDVB#{8^rt+2PpkZl+n1G;pHY!vS>hrp1w!wPk#vV~~H70xwU z!_yMm3L%&Ju4jHd>}vbFXqwqPzb#nY6t*1l^-%x*;uP#*5_!JZA& zm(v8Vs(|eVVH{P-MXYV1tAPwavKNrxC1UL%+h|E*9|>B2HxH89&Xo36R~>$IN*;bh zZSEj8?Ck{X-!2!!vFGBFgS>hB?)2 z6~&?7dt~kJh>8Vg8xk2a)n$ulTlQf@c59X{f;QKU1*(ReZ#_tKlFIoT@N@}ZN~F0= z@4MYt%-RKi>;uhY{@reH>ffY{mi;#h$OqzmpsDP?f)`ryU-2rH=@&v8GpT;XOZ{37 zo`5bO9qs7P4A79p;^B3ne%phAJ83j+1k$##50TWEE;iBYY!IN zRLt3bK_bFWP*z2BxpkiE3}rdCY>1mjYl;nfqU`s<(p&l@nf2l!!Zq61+CT=XdvYTw zV%`T5F)J*eRWAqNF5tOMTV#jemB^`Q1Q!yAgB#2RxRP1*jIey?%HI)~+^p@rAFQ|8 zYIfmC-2sG7n_++xDwdkTp27 zKzx}wZVX2k$%eXjY^{M&pr0t8GfzxqdF1LYef4@mL+!y5CxU52;mR&mql(EX?(4wV zh+-g1u`QQ~NGJBGFY*xB)@&KF64V-a#H*G+_E{BQSuBsgYds^iQuU>;Mo$QTT~pUu zQy2c+OC|4kj27I8UW_BTz}$d?SG&5;LxZm_FUEpz7fT=QzP!6NFlf^`IfP8wP!UxzW%c)*9TN zX9f2BC*KoEy?O(_moXR!iX|j_!_(a6eNX=O`PRa)35V}gR=Kz>>0fJ;#+CYF;;Kq~x>^UrzskXX5J(2cpIq zu7?+Y<>BGwp%JFGP(=MTK)h|I`&8f%!%vr{be_J#zSXn!6&6kB?2`?b&77j#6qcdL-oo}1Ht{8)OB+jg2=AfdTi&$rCCA*Lftu1?q z!ye!fe4a2xuO%$qD669+c$kQ{-}oEykV(vnV+ zLYgxMg*3c+=uNDDF^@puMWTXwh(%%=>S6kjPQb)WMbBdG-c$5}Sqy)B=STJLuvI-2 zv9@ILhAXyu>?mp2?qsp46I*y5PJEB5M=;y8;Ms0Qzst5}w4kYdb7T%kUYsHBJW_z< z7#hZc^p~iPJx7J8)uE;SA_L!Gckc0XxexCj{(r@^St8eel10;}a>tn^S@^h~RFbhd zBlMxv1;0nv94M_uhvQ?V^;t5eP$HkgBf5WzN|q=|;}KWXOsl5%gcY)v5nK9G-O>6I z!Jiis1oqVcgNr?dO{ATA) zVWk>u2=acaMr!*Azvk>CusDXsuM$JEp&RD1btV>n97WNfB3c{`i;_4QR0c)Tm`hak z=yFd;a{0JRAiop+vhw#t#Jjp8E?iq`eI)B>YY9DyuOU}u@E1}01KH^1@vY<}WZFl0 zHMwAub~AbW3SCSdP!I50T6yKD%zi{yl?%DD9O_*W&!XPicc|%}@`7^NOUh+od_y_$ zuGXY~%A!BhC6hoMwx%9&1%x9+j9}ROtL3oL;UXDbw=X=Jfshq{ zAxoKsSp=Ff_vajA&X0|`u*jGTBeIIm+L4RfMbo+_E0VV5E^g=j$Xre{=&s#uPBCQD zZktrYXSqqNuB)T*=15k|Kz)W)Y(7pie`@f@pq}XXr4WWIuN}^y{m1I6BnH= zW{iuL-|)UJk2rI;vcHQgI8h{Lvli0Vo^4>|BDZK)cP=a^o{5F`1M#jRi??8GUEH3} zfm};SaR`YjJaN?M;&w5IaZNW6V%D<65ZcjzSj_TYCb3o;!qIzc2Ur$L5z z!5__RlR^kut+a6{lp;^n^GK{b81v~(#qU-Yr0+P7ARfJ0p3*d1_Lz=`qe=1MNdld@ zj5^yO)>~r`QXplkNV>cWJ`gc~luFu^rNC0p!BF=amZg9)&tuobbx28{b{UwfJNN1X zu{L)eDEhR$DU`#3F5(|xS^yK5xFn01Yl{sDAXeI8pfW01oX|MXg>=1+OqM1KEcb5h zlAt!OZTT~E-KwT1G(WBk-FaTx@I-2LkI9Kj8c?LnO$=5uH2;)iXoj(Wp-J{-F@#=E z48I)>Xo1gAea{@cgCxo6LaDQNh9Zx188Xjd0lUBVzcjC*Ln2~P3l6dB=?V$<4kn*9 zx1cH{%*TWW*d?gFMP9-9jGmwJ2-liM$y2!l1OMj67kLEfIOCb)J#IO4M=h>ns<{EBu~!}k zqy+t338`;<>xM0tKHPVJO)67kOJpZ31eb2tlR5o}CP5rG^VmIqBLU>0t?2PH025gW zHE1Q>eMZW7nX-8abKyW*LdMe)0xaTM()LQ*Vc8LR=miQw!(vFdo0AlUzH)q(Pf>Wy z$j)Sm)y6fdQWUbK@A=`9ZB2J9(Av00s@iBAEml7;<5Y7GCfwMcqtFi!Eb zVPVx&I{C?Pg&uEf-h0I@M1B^;)o<-)oPi7u#O5jZgk`nsBdRr@5H%=P7S4 zM>QMqH~jr{WIXpXIEO%B%-ZK>HNO7wJ0NflWcIsl8fz`csXPRWw|`Bq0%Tt+QWkpECgpHy)P#_wetR?@r_6cL`kKJh=dikb z^!CmY9NlSF=L0pfo|+#NBjwjKMA@iZR`c#$XuhU@0as1T3d5lS-kUWS2_w4Qe1rR9 z+Z(k7uya8Uf1byUXtulQ%Qocb=5#D_mIG+Xq0NyGLJ&*yX8eQ{RwATi3ii00&dPL? z*04R@q;=^&Cg7%L*EI1G>5$GiDjf%O!D9m9vm-w}`=zc4QJvTu&87)0l}2|#$a`sW z)KX4=kux}#s1}bSM+;~#O--^Mgn}cmyt-}99ti(DjFKc$y$l)f<($Kxat;WSXVJmy zN?v=)$71thJ8UhwiNIFln1QH+!^%yqQ^t^f(}|jJdd=p!D)s0|rYI_Wcs4x0*bb+? zVR{bj_mg?Af0jI-oeSn0!@dWLv#uc?CZ14#3l_ba{^+&Dqz=5uaxWobPYidFVXk zdC1Z{2hW74>aGbL4_x{l!)_wNn#g65wDl#g(@g|Yh^uO*cw-@643SJX(R= zly4xqF(t2onuGcCw6D4kB<S5O}bE&yrD#!?P+k z`C#w(Ax7e!wOhHtoz_~~ttu(Mlyn|-(}b$IxrD1-5hNuOFM(TFY_RS|J+2$+M(=w{ zAVkJ;u_CN^qxnJdUW)KoTH=Z1B@)u%9*6#uEhzS0%5n%p9%We-uqdtf9HBu1w zWNZ2JaL&=3Kg(SJIT&OMrb%Cj)`%VyeIZ-VOU_!Nm#u`qvS=4^mNRN5y0(kY<{SYr zI@z-aBi?IJog~T$DZp^2_%P66vZkFJIvfN#W|S13p+R&oWomcfm|)QnCtjd+kc0?Hwqhoc0xt&U(a?L7FELvJlQuQqu5MK;wVU z`EKE!LYm$^%iWQ%k|qePI-RB)K16~)Y9SV#qXu?0Rgr9eTKtEy6FgB*$ht#zME+wr zZQM&43Yd zktC@H^_ad9P@w;7!gXzxIBJ^Enp)(DRs@bzdUXI;X+>-s<3BNl*$8h`~ zXj=Xr>ZON&m?Wkip{MZ*O7zGaAwEOOWK{a@mM@7hd6OAtl8FubFPr(IxS-kIWp8u; zf*Pn9R9NQQsAT57^j35dg5;Z4LLA08%nA+C_PW8AFbGfFlFq4N^W*qzJA8vAwf1`k zovPVS!uKZTg(>RhX~Jkh;;d8gLZqatIrO0r4bgRfBQy$-n+vmKgxWL2YvgGnIJ{#j z?TqX}`j~!@Z0cR4hqGpcmQO6ZJz%+UvP0HxmPPOu>Jf~;#PE&o;qWm%6wAg+8Ar+B7osBr- zo7qgG_){i}=xhLIw`U9JwrQ_DvapO^Y-hcHMK?E3XsNoU==N+WJ+6H^gHyie{m$O_ zbtH<<^Xh-z%pr(5sKIHs#Ro=AHN;oU`c2?Qa|YW^=gnDD6_^dW#d$NQv({7=Gt?B9 z4oF;W*cF<#=Ur};J(4CB{Cp7p1AKjZ$vvC3+A-FY|IAXFX4aeXzg#z+^E^Z)*wXKR zKzmxfVfJo=X}{Hk+M})|66VcDEzYkV90Hv-0obeufdhF+OWj={=YU>MgrQ8Q3#dMt z&A@ZQU}>YhOsW(%n8PZhu4WVLn6cdnIZeD%vp&}FQrpv z+z6Ysr#%DPOji&b+%*+3r90>`{x8EYPtQoHiwx@Utut$Y#_7%Cd0n*Oyf-M)EBWrG z@^mP#O@@wXvv;1Tni3Rfo}Tgq;7bc;gKoDD%4RTY0KN{0>p4$vTY(jcJEjzW6=3|d zdKcTXb7_X1r?cLjciKQftJ4(&QRsarJn!u%%|yq+eg@M#(r!;hi_-TL%m%$7pG(0S zoV8meCyk=TzBJ6*5UqCJ>o+X{82;&j*M?77pdHV;Rl^w#O;cdXE~N`+^Sx_bLv2tq z<2|d(Vx-#g@2@$*c}^Uh_b+dM5>38|PL|gsIE(7d#!2M=d~-vC83}2<@rURnblH;D zTa5(jKR5MAq_?G$Z%K50LN3F4)UbmI{lBfI?el+{N`3j?Oj@lMFZ}84=a`N{X_xE8X_rSGz^X0PbS_$Oh1H5=f@FD|yt z)&K(T_%iVmp9E;vOEf)wbZzC1DX!+~GfB*1)fW_~I~!h8_#ckhvio#T->A z$r3}&VpKX=zzyt65bThDBM<5{dy*^i-8NK=L50fjCfWv~8zgtg_KJ~hKE=4aYGhm? zpE)TsnVS1hX>lhm1?A*=jF#G>kyKNtYCLPpli>f4qJx@+|^+ za$tOCJW(IWHjK7w{_Pn$p!kLFkg zY2KxXd283VxG}sANodt)ug`yIq#RATrBXhpt&q62?`(az;GVhLNRelBG!<3IdY81% z*sa7beh2v|_9!7q%84Nif7gW1lFf4lqx}+04oJtfqriR^TB!nxJiVpr!UNa8Vrp^< zC|e7GjXP}XIdsK53W7$-4ZD;>QSc-praH;J2&=8PUa}9QW`}n$yJIUrhCOabc(;Qt z_b)%tWi+nAziU1dig-tF>lP6BT>NZ*BHM_BR>W>d$URTCK~Rw>HC1eb?|8ZHKx(bl-e=skxP6ZVBVT-#4MBJPXcZW%b4?8JZe!l z_CGiEH(b2yv3sP^u(8kM^sAO#le1T?@rteL;VIYFjrg9ge|dG5AUHj(WyPhTpW-ch z;l7$g-@k$u5#1S+f3dSbs52JPtBPc%OeUURtAOBB86=eFKC0RW!UJOJ12MB7vkMBM zp2~NDf#u_x-Y-Y%0yDvS7aZ;&nkRbNx{;&u1`;hhu@zJ@qR0q|gzS>AD+Oh5K#mEB zn5LqDY}X3TzOWY)7!t9Ft)on4r#CdBEQG8C;h|2DAMqR*e^$RNC-2;+9k{ptO58WtQC1X{;En_ znq`sW&YRs%D=E+$ieis}pW10}cDpSERFoFaXOBUn z?bSaKlIpwtFQ9(%9{e`YEgp{O*%gv3d_@0}@#S`5Q} zp-9Cxl&O%4c~BxCq(~MMgm*Gg5XFTvw+hA|&(V;ZBlZt7?9k-<91X;QqCe+W!6(6G zio3`wt4Cib{V5TOQMNY{BS%f-p2N$-5}(G)A@;c}IDwp2CnKvv+?`e)TgDa^LL{Bt z0jht7f5x^{i-qAJv2ZsL-)5K~fhaky_PaDeMUPY?_kcuoB1b##+OefLm2<$VfD?uh zhc!t*p}r?89L^i`xvQalssmBYZflWlx9o&-)KtNnj+Ok7AEvn4V`M@L957Bs-85CY zfy6IRE3|~lX8A)nwdSQoGd3z?5&BPNWeYL1e=EuQ3>VWK!c}bfPLILK3Zk|52-&l3 zP+llQV&XP8!lWiZC9nj;Q34Q(ADRCo=77N!QxEO|aJf1>Pp zv=Au(xysttwi3t0e!r&SRq!-vjzE=aTFE0}zh7gposVaOX11PYf-F#}HX;#QD*|^r zf15B=SVjlOH&F4pQ-*_G{f12Q~t=M`eb9?(H1Zi*bTWF3-#C}-k^Zf>^T9bqZAe=3APnaXIcQNd$VG346JEmYMtDbl2WE|R@oN|wXdMS1?_(htg95hc1h$Co6)e>@w< zkVxwsF^8$h5Ctn9E zqSkcDTq9A3T#sG`YPy9_un-iGf3SRQVBgWYq`_wE63e0974gb0x(c9?^)(ALaC_G| zdC)c-h_m&sO76es0SYM$8c$KR^aHX^8|-<8dID{a$^J%YT7>+D2JY5^CJ^FPGnD_j z^_EP+a@d-B#AVe?Nem$**A|G_rnFU<(q4P)yf-jXi*cn)vow4?$o1N6e{5}HW9z!e z*ox?ydZ99Yt|?tbX+!HSqL~5)D=SKDC{-$BWM#`#x3P9U4U(8z_=g9HemN$VjFjDO zEDCej2PYLmyWQYzQ&~XU9Cfza0B>);lpIL*FV!2oLHY8MLSTlz5gETsZ8%<0FjQ#Z zP%EPAFf!~FT0j5rH$%DXe?Fi1q3!Cu^tPJ~^kcD+#rrzP%DSQvai5Km^__P`U58y! zOHe(wb~N}%me)~%mF0WU4s@_IvI<}bD@!Y1*~lscpS7}*;{Hv!`7{@o8jjXr!BP)+N1So=3fWTh0v0ztN31i!u)idAU}c8BWS>vo7flY%b4iz~#`g zqXDJf+TT!*H}Qr9v|v;RRAomh$VJPJ!?m)yYsh>)D9@D@}7P0_F8k_ zd6!_5IMiCxJA)52G-RRPXWu2PTGKm=d8JLew9edP+a<-tn9ra}S#}xlnrRp1n0D8( zX?Im@+Fixg*2V3-XI+yb(=I7uH0}be91N3d-*u?j%F8YMe>j&KeR<=D5jSl@`o$T1 z{!7chvevG@UenN}QH1Qim+&2#eJ}N5*!p|9BLTa*rjcd=`kMfF?NH4ML~k`qFub8_ z-b>QO@{4;fXWo#1hBEvdSynsNbmuRQ^>Fc<`NFNd%kdiMC(jtBP9cA1hb zp&7>3h9l)=sI{R^Sr3~T4!0p}iW+3t0RnDnqe+IH4(ej$YkHydnBN~WNjLk7s z@jzotRR?vbuH<`>xJ8(xID7h_Lr_|vR$zNynM=J;}+Z1#qGR({bgBf*VN-=Zv-c>lMZ%6 zuNn5z-IERR;)0s94o3aVacIP}6A2zajn-QLint~^fMEQtoj2G}@1D6Vb+90Qn>|6$ z>MhtRpe}3{M9j+%|IZZ6`t;-n9H<|XJ3(itf5V%l&?VxTqJOn`6bs<@)!{1lr z?(*4Kc)W8$7FoP8V`~e$LtcS>r$(2@SH|4T%Yh+`yiEDZwq7pytfdzhjcBlB*L)gT zOe1oVEyz?F1To47^6z$Fco5 ze|c-5?BaGl$WVw0EA+#aV8X#z3YveoO&Cid*D$GT?=0q0>yii+1#u*9+?YJu&k?R--ZatJ`d*WpN;r4 z%EYR^bRmqe&x2gyd*&E(zs-xaA+)nUgNWJwfdB1uN&rirSw55~{ZR6OP!2eCe=H$M z7=jZEg)cdKESV&V2_}sMiT#9mf*kSnY$WaCI*h~@j z+$`&a6Ig&mJg#b^XuWL7Ty%1h(Nxuki}#cINsdxOO_Z55#ixa;tum3qJ4+qs?GNTi z#0E*SQB|sMES2OF)uHildfCYKf4NrL0M%SNcZ6quxB5O3lKruu1w?V((^19N<14ieqC(Zi>w4_>^QHe{j?L@mra_ z4L;rEee9KLvY#+O>N=q-h6U&^(sPVpT6bW&%?rK^dkK8W&J?l7IrZBgjuP7BlqYE$ ziVvv;T6&oCV+nGqZJ*U1iUqCQp`E` zYMZpfII3YkVU^y_GOZ|Ff7@1P`jZl7VDF>Oq84Z#ZA#uV+}n%P8ae@|W@u!^Nadi- z>1TxpN{>utyfiN)QvpDefTo?~uo2Yo&!fJnE&2h{BQz!L8_1W@oO7SYV`u6*dLuUl z%+4TzA|Ub;oc;D$(HP4O0xxWZm?LMi{bxG!Vd$1$8BQQS2Woade`!&BsE^VCwmU^5pB>MH!R0-^Gocwxi50u+=EZ>cG3A5A5CPG-0)|KzvGmlswEw1>MjN%iMyiod+ zsGnOg_ERkH;p*SuBk>r~j#F}WX{RaG8+4fRo~)B%%Ds@hM8_$Y;!4ckl@$w{bx+p5 z<9{UH9VXCl(6Vaf>=8^81XK+l&2-uF{*shAn)#7_;GXp9f0EHW_kn;Gy9^?7>9Qqx zHhzLPjNSy~qqyI-+x9=g_4^*RP}BU6bZq&{d%9*HiRTv`GKhlvyA70)JB|lHm&Xru zNR?O92O-YxQ)a*r%fDHEAX>!_)bZ#C>)!eZSGg+iPqc~oZ(=#(QurCc2!*o5ba8J6 zD8cjzfmEH^e}lN1wl#9@8MR`?TX7pyXm4QJzc25in8^CwAITqS;|PR(yz~5!?WgTH z%guiid8>1`{n_|j?k;Mb&x**W=JOMT{ za&_odut9-}2~pB@srdVmQP*Dwe&od(R9@U%DTeS3qk(^a9X?oYR@!^0H^b7*kWSN-T6mPCLtA0^IV+6&c!hCUw8B`DfGi;#H9iEwgQD}# zh=|YHf0BYl==`wwj#d%buT>WgH^hN63>`lSDfAo~P}qF;Er-GdD_`E~fm+voKr-tE zv`9eT<7ELni9nrs$H(ge%o4mhNWDjEgcV`8aFIc3m4IKPbwWgMBi~y34qLG$aeRwz zOe=z)fB0Kch~Pq+*)O1J7q490F3vVI@XHwZf7FWt;*i|fK?Muti}9b0Y5xt{BG;|EFvq&P zjIF!dQr4Zazj$1Jvtto`P*(ySy2_^@!+Bgh6BPy#W&<8HXpqx5buK` zlB%C7jsg;-ywDOXSd?F!K`CkHoi}2ZFPWCIFY!xJHC0eEG_~T${j6T6ozThqe?DX! zUFxsDJ)0%QCxgS6JL0B{Py8AgpR!e;kKx`3gWYK?k##r6#Wd4%yO9!B?%qEkIVsyS zjX^ufBEh2+i}E3r7;!1b9!04Tqkt_bPKC(mGD;<3D2M2K4*ag3p!&DySJ-L@+p_HxW?>p>G1V;bHNI zT|8I{kI~>2y|wlB)ZTi;azJkA6WPAs2bA!RO=Dh?tUXEsN)Eq|5Khswgafl)Wu|KczQ*6tEp7;WFXG#&@W@b<=kAf@4Ua9qMLH)NU?e zARy{+_5lVpg`C*|U2Z);Ty7&;)jXywrM!f^RJi%jpgv1j$(cGPyqQ}NO}I3JndBJE zx7=Wki!HC~kxlKu_C;cFe{b?FiLOt`Wmu0IHk)|=x7D;m{!cSjD&I_6trsuC|DLo) zr~a7n>4T2hHj+R>HpIA=#2-JU*`N!-g66<33+Ebpaj zi08IS1YgTk!CBU3`cffj2hMEBqi`UpUqZX-bCzBskkWMF^$23{e>rMvZoVAM=28_5 z%r0NAGRu>d(|=aO9+C7BBkbz;fLch33`zTPGC0a+&M@4IB!j^hmB%qo1(cU4fVZ-{ z*q^}>M4?>nMh-2TyRnOe2Pe`*IWoGLBttmsQ+HM&gJXrS$T3w-==)f6+6#$Rr|N#HS{bSuN#C&hq%_FlCq7ac;+bIMG=$J=GM}8O<`w z@?8B;knK^XITY-?dHY+>ll1KjgUC@7~;;T$Be=e}$7qWs+BR+XvH$8>=xM z!7!a^JKW#GR`pOU7s%udS0nY@SM;NL1j|Y}DL7NxSnCKq zBq+xTcV$~!8R46u3gW%YMU~BEo|RCU*5^?EixDC7n`N^LsXUJrC{Y<6Tgkw}Nwria zqgUd!Cs#}259AQewcaRPP$N{R&+cv_2}noCeA;4hMvze4acTS zUc+P9kIGK^*;?PlvsgESyPs|GqY{<=KJA*L;f?8Nf2WaZ#LO=Fid86Zl?LEHF#ESizD4k4Z3JSane!oe4dj_ zRT9;c=}lFqD3b{14VCGba{%!SsRt!6t-P=@5T%?qmC~4&N8H2yzaCexX8|Up)%Q2jYF8 z`aQyu9r)^C`AYe@{mYPErDCn(cm4F8V%FMse^@{~%VYQEOT_dNS>G>zjc*2)okw@f zU6W!@F7Nn!udM>(5jS|$PV)0cz!sB@FdxvYkyaKQuijHA83@E)7=Y7 z1wf%{)eq&Cz+yOqD{Fbg+VHVCn0r3tAj;IH(Byl#hX2W;pLWz`Yd?$Iwj5$z`l*nl ze}FnbYVE;d8|wO1j{xjc1k|BeKS%J>hJ3j8O3{|#!u|lLD!`xgsA?j)9=nGGQ~`lV zpL=nh@|;G@x-WeaH3!(*_hcgzX!}o@nt<&>dg<=~Ou3V!CKy}DD{&7nc5qg7n>i_( zR5~?f4bsXP{-rUEP}@Kj}d-&v+scksS@8x%dwV>-+FZLf3+g91`z3B z6>^xiVEBtF)ICNDvhUWsjSjKAyXD#?kb+FTy4V)yi;b1%{#;~< z#+1Mdk)|`pYKS!B(aA9$e~gXCk9+b(Oo!mRoKC?-Ih}!B5s?-^;-9a@LyoUJOf6Rkw@z3JbzzjkXIhUw2sVk;u9QSO9s${A^C;HRbGN$~x z(CM^=N}r)FIeVVX(35q1nT`HpXfqum zL6vgVN(Zi&=pH?My+nm{5W8033`vU`RoTGx5>@ikjVLKh@oZnxk(_GA0P>u&shtHm zS)IkI;^17;CSXYE`<8MpHXgt=Hathh@z3uONbTnd^WPmYpyZod^e+b zkrc_ng5GCMhU_Gef1RS0(NP>_u0Wx#s02KTJOASO6i2Qfg(ru^vi}FL&=?KBuU+y( z#uCZmR!Z%6ZKEmg%XBDaL~LV>+7~I)MCrOC<$%#lAZe;;vfE5PpJ}c5UHPZSUdu*c zDoi$R@kU@O56$6rv+T@1;^+|BI!CdP)u8y_&Px)(JT=RYf0ex_)oT~A(WS=x8S0PL zv+lu?mw5bM1L8lIwVzGg9~EQ2Z_+lcHPYFKFU%98A5e8v}CD8lcIKC5c_c!m=#ifAJ(*T zMx`kN{YVYewuf$Vwue5(+e7O;+e7mf&@<-;LFPP5f7YBQD3))U;{AyK#hJn9%`U3Z z;eUBqh;~o!*v$DY6!X?uf)H*5DG4mSeIiTn`20D~t1ZctZ_1OY?`Rwi?g5(&^Crj9 z9VHzg;fXh#XRU$2z)KGKn`ydMYlJr<3{@oXb^;u~mnEAC0qvgot{qi@^P$^LDl~`U z{qx(7e@J>v2zP5_W|3_EAmO}_fNl#(@fp65wKQY{goL(AcyS)|dGic)B(L8bRD~F4 zO)n`l+O4tGs`a(J>PG6V*WX(vO0|Oz)hp{)(Hce_9@iZt)hSR@_*i-?xzjlFn`9z z8n=)34D${$s0AUPgV>8$*NSI;@LOV&c0ng@)*(T>=7vZOEQC?&;hI#2qm0ZV`&yq7 z3Vqy0B@oY@&j$&lDsDX{3df1sD!-Pyl}P=fQ^8d7c>BHe+8Y247&QVQCL z6HUCltkC~eB&j?*%QJ3I0QK`E@fbdLCD|jSZ!|;FtQ0C~x6&r82}S}z>bntQWiRsv z&rO1z?F!f5d=cD`rluH{gQN`BPWgN&a}Um!!3H@(OnVHu?hrLYmM0;1C*d~bhyX&G+Od14M6zBjRVmG*R9lV`X|_ZbquHu`Gtu}qN=idv>2 zo!(V3ndn$uXnZNN{h`+WXUX^wWU6(mnS8^_70F5$vqV}9mG9-rrRLC%z0fV_()aXy zhNYXK_K{S8rXrh(L}Iq)$!NZ^e?T*0Ft>|7&)2=6=F)g;Wl!0v+a*^la9H{P zxy6r=voGsxL_`91Z9zIlLLz+Pfq%fq8)O0P5JPxzyO;&~4MK_w=m>&(f2AEVAc5k) z=o#4;`mut%La953m`nNn61@dm1=OY9hKZjR+!y8L+&i?lR`wWy!|r)Y@S%Z_+zGNm zMctmeJ>!Jt3LCHr(BDB zp^5nNOwGy;x)O-8ZZupee-zIiU5l(-t=@uQ;d98ExioO7XI-*@SxAwLpXfyT#qDh1 zulWh%*&X~@YwbZEnWV)PB7%`}`UWSi412Io20CiIjY=GDC;gBNizbDcobiJ|5Q#4 z;0n%~a*m!6u_`YFx*#9t3zG9l?{Pek8GJ^u=pK^sN|?!unlbbH-Z-5@jPO{x{zLi5 zf3_0DD!0sMa4uEksv$Ym6LHcgUHfBzo^5OP_wnb*e~MLAC5!hWXG*^9InJyNHL#d~ z^XxKmkSUs3V(U75aB#M)=hA#Eqi0CS&J%`YmkId{QPbyvS+t%DS7r$(v^-OqpW(oa zTF<48cw+0CD{Ei1o)^>{C!^M(3^`V&t*ZD-=H4pq3T3k=yp!37F@uXUaH*BRQ8IAh zd|M0DfA<;l!620t@@n<^$H=Som?4y#Z;MOnf%&#R^OC7*zOBO~yo%{)->^j*d;Z^v~$WMEAM*2K}r_aZApKHl}w}l+|{Tcq!=QRe|U5`FL zR@diIQT;YAHW+chof5#(dmMcppQXX!OzdlWe+zlg^!ES*Mgq4srn^|aA<46$EzDUyL5>&rzE3aZUDb`hF(=rCYqYV!O zf6#se1S{U@$=1>YXg?{pF)vWXGpPjjSC>0WNu~34h71X(JbSbaDpOGdbUA*98mJ3C zip7u~C8Y$cZVzo?9fF0Qp_Z@kP;bxCzSkjur9KlC&r;iD2La^jqPqXpWnpH{QyaQ_-+i-B-kH_O$K7VW)AhLB_Nbj8lX}XxDGax^>dHuH zGwf}Vl;^g1h{ov**^1C71zR`=(Ty)@Rq9t7dvnD1-f<|_cUKM~SU(*tf4M7XEHOi7 z=f;C*MO!3Q3B5oIfNZJE6|B0v;K^;+KfEm_!Vlk+FtNa7m1b{8O;kWqx`SsTF*mgi zZfS`<1xdYJMzoOP5Ukf`oE{deg+PcJGMkxq55T*a-95Mv7G0(LOpW$Umi>yHeVYNL zO}uJXla{11e_}Ve;LFphf4R%Aa*hl96dxD(uE;5VN!=@^T*H_C#kSpS4P6#qGiyx) zvMxA*YA&sLw-p}?YakDHsq!0gqsrg;_uE}z>8d{MH49jHog83wAzLq8=ISr6A?YOX z?wR|Aon#FOWXp#CevKGD$qFCvK~^Y`KFI2joxfpsE?aA7Sp_4sf3vLW)rKs`wQtX6 z@eA#6tHa0*x%a))an|H@>HzE7cUE?Xl(tuy<-l!VlD|BB9E#fXipL0`IoIjtTl-uq7jZ3 zg1@pmFxSh4Nut2F_v0f0KhCO8(88A2Y;7c_Z0?Y3`woQp=v9$Plt7uJ7eANG1!3~T zYnOP*43xiY*#kIUoe03u_KM^HMJtOvFwp|SW0ov=Zvktse~9I~d1R~gKt6cQt`D#I zA%1|l@k47(HNZwF2U_PQP+TpiY;nl0ZmmI6yDVgu!BW_3O26?pgx4Cm+l{p*E{mSz zI4fu-0p9Ymtt&Km^VMYq^A=J)8{h~PlCfJ0P-<4{F2_p!F1Av?FT5h<;&yRvMHk!F zd=bZMEH7>sf1R{_dKc03cg-TbxdtF-15ZGkpQlSBYjj`P1L7rGt(Jhf<;kdzyGR}APsKgTB?)i-p&F;y%!JlEGgXH&#nO0bCqt62VQj9A{9rrsKB4NUBMR~GNgdFRG*d9Mz}*2ed)tb_&g z4l6KmJu$k^y|_lRHEoJ|OLSiCu@neEd=Vx>JMY+^YzZi_!Tg zvS8hOe`PH%Zs)BfD1_U2%ZdUq7N5w@{`;0=;pCl9y__Z^%Q!{WAqSSSvji~lD3m<0 zu`X#8qB&daq4AK@Hq|jaogqIyke#B1_k){PncuU6nmyQWfu-BUnT* z@!c-YmT8Q84{ua%DDkZ;UZb-qcXXn1lf)E0f4#AG;z4SOv*|W{2qAAFkdJ8365&TV zd6pv71sy6Fem-KBns}GI%79c0=>Myn?PJU)&7aH*!rW+iSJl=I87%4cNj+R4gucS0 zvS(rOr`SGSWa=bU~4KB8WX}h0`pZBH{1 zf8wI}usv+&6i>x~kA@I5Z7iw9cjuR@z7`oSMxBdouhs9NHOQa`(Gk6AuX(W@H6fo` zcfRNwFK!tQ`@@TEzd7p(#sEEw!Sh>^y#DdKi*3I*?_F&B1GuWL--BD-M!iKB`NDA# z-Pptff9xIiI;=PU()7_?P39U^-2*Ow5GXB6DZo80UJj1i|vSSe>V0z zXYjYz=_f0b(ulySDg*R@1xN)NOt(Sc>Z4|JBs5&MI*1;O&hEU)pS%2Tv-xBfGDtye z!hzG_0`iddMz9%cXqOhv1vRQEFkr$T?M;4TA&v*x0Z!YYUK zj}86^!BJRN(@Ieh)?2`AI2sP5f5c`2qa!-eF++!!t(+^x50F0!YW6HEuk`e0&{xyVRn zzr9Gu`waR+m=T-Jb5XlQcuudiIJ?*mI{yxXNe-oScvohvAsNuxA?sp;B zsy}FsGUk1E(LGPJHk>y!R>~OpP2RKfc~1G1sb5_B5Q85M@TLs@QFGA~M!s&JekmIc z5TcSY?|G2ys5k21P?sG0f8I)!*Fs+uMDYy;zr+%dGVxO%w73`0do#W`Xr8BHU-VC@ z_!p3{`4CL(=}ZY~zJXs*JR1|Ef5)*gTz|=-x!?TU&>=z*CPXVM zL#X)Cu+>!EK4?zQ_8RHk1;lEC4Gj}jr8J^JOkk@zAvMRUzS#C#vk~f|QWk!%DO#Gf@IMDFM>O}- z*VaM}Ze z?RK&T=nSNKHpbrfnynU(I1&Wv@%No(vsHbm0QRL(yT_F5SuyONX%1LD0}g-eLrd2#o*at5>Fd)C zpSA1JT137 z7`*aY?P46&mpqRn$*|;w^L3`)|q3196->wNFk?f(BQX{v>$Ye5dqf4Cf@IQJva;!}edi z0Bg%%S^i{F^DjTpWmJ3dqQ;yW^DOw9VBxj=6Xw{o!LdIqT}p!Fj?vO|irN9)_&Zvs ze}dFtl8|==jUxbaHaSVLt7Q0r)w5APJV$_{vzJ|K(AOB z1$U>X^}B21mkB^@yaFlqDS~4xoY3*-Wj(T~MoLuw1l>2TiN#C}7_|oS8_7+ze=1RJ z>C<3I$6qx~0KR7X0SK)QYi)jBXn9SSYxPyx7&f`|gJ}F!%Y=jm<&j*8wRdG4e?L}e z$o4=SACHY=2k9DNVGpZm1H$#wA?zCwzJ5A{10%wyf@tvNef3_OR}yjVPO6UNrwT}v zVe+ZUut718bU1t@rC|_xHEPtzvxm`7*#+4=G=5S`E=&pjbZb{{+4;$h>l;j>>ugU_ndLl{+78e3&pRF{ViJtzWmik z2Iv1&7zJuSA&*dhwSrBYuUa-=M!~~PK$ncqxSUJ_lm1eXfIQ>|(0{D}f4Zn$`y27k zDvglaClwm2&xy)0^8 z&ZzvEX6g`D|0E^NrD6C>bdBoTd^c|#+3`lz_^TEMcy|PVP0fbRe*#=40Ivc{A{taA z(mf7Ljm}>g62%{Ay=h12>!0!0pVMFegumXUzy1S%b<yHp|u>0>ZpB5V1|D1Nkva$u9{I0PqX_bxYhZfdemfARn_p z?)Byf*X^DLO|uQUf7Bb40b^>?I!nzhL1O|yWEv%2>wx~61$2jaquY^cIuM(6F^?-}dRqb&5-d!Z-W%!!!uJ>Zmt@+GDnXwc^gfApKczo9{N2a6c-G>+_W zc}+KDOay4MX9C)9;)^|t<%Xj z^uz;pxa=N4Vk6Y6B&1qdVl4YJh-9YhGE;UP>g3&S z4ZV^WF%VHzf3xM*r@0$`zAb_vwq9-j2FiwJ2tQPVfTv0mxNjvm+b;z$upJgI1GZrv ziTps3=<6<}LK2x5(IBKtu~v5J3Ro4etLtbSXf7i}nb^k*aCFxPn@zk^e;nB1#5)c6 z68@D5U$nh(Y0YL4-2g)Z8b;$#kj-@0(H>U7etzK8f9y5A`w3o9G2!y(z{H2e9)KHi zQvuqqgFpAEfV+dmV^b7>{goXUyI&GZFZO~QVZ{}VUFdEkB$%fq2y~#Ik zJ==TNXpE_m$<*6!YBm*>#=Z&rp9<;M0T{{uM>Z4R0B2eY)>$*Sr2FP@r*I~G&6Nsc{ zf2+C_9goLBa<6g2KVeWJJh|D1*Y#hcx@Y?$q}C2Zyo*Cujm9hLhBS_=WG5>U5%v2sxM(Q2?QJgR>D#^5}HIG zH0(?RSflaqU_%6wXolZt*eFN{b@nx8e;N-(itR|n@L1!<^#uXE*d($MxHb0`0Wg{Z z=1?$IE@>?RBV&nt5AGUYUQgZz@;Hn?@hJ);dgW8-#d=_i;2{But0->WzOyMNh@Yx? zuqldg$fasSBXR_aAe^ZTA#+Vc`GUir1Se6jjjr!bPv6#}U`uOutyQyYcd(?Ye}P$6 zyQ|qX>cLdv)ZW?NBsf_SH{=!I0ctdBcFpsl!fFMNHM{1pP*!;roWPpzD-e0=g)Cw_ zT6^)L?oWJfQQS_xk)z@^85O6ux*=aTArSM9oZ{h(@AgnP##AZobZ1i8upGCb2D!5 zbh%4jj%4P76`u=s$Xck^Z|&FWsMedwZ88juTzxZnlUf4Vj7OopX`Fu59Eb69Yg~V= z4ct$lFUF}e3AQ>mp_&XWiY=?RCnqNiS)YoytzcyWnb`JS@0C!ZeFasdozoAKyB z{%Bs98#nVPX#AWBpG>|9#Hkh104{iO6rr|0`GH=|Z*RD&maZ94uwt@dc*z?jiXu8a ziAZoo;n=kkkX7`u-E22sf417SSX)4tw)oVAj;HEZvkQz$z7F)SgIdG>bQAbs9r-~x zj!u#vpj~XxN)CyL3K<+nrzh&&>8Vd`LD-nu5ZHVZ(2#l&jCClOdUbkQi>?FzW6cJ) zK)@VcNIjpP)`ga8*vy9y%s)M?`6BYxUiw>DAC8-LNU1kg0jbNof29lFozoNXbb49~ z=&EK1bQ@9!-is$V`{B9F<1!3PCoX(c&!?v{q7yBvgyc*<-H_-S_C|#l<$Lk#q49}_ zSjtG!D4qswHlZg#B3IE-1L9IyL-rEPoLevY!yoM6BmozP-Pfarn8KkclK|x78V0N= z%29=rPtu$7=|S*hf7}vGkTIz?Cs)*ccqK`J0N}_Dg$g8!+Q^4PXg_jrrzdqzDrtlg z-Gn4I#)=P?Kw|;CK#j1YcRFe?Z)AY3kf;P%Bkx0<+6ukBLN?CjBz}E6p-4pEdM7X% z-vPF-ZW~;>gi8!mLjC<)+{Slf>y7Wd)I^dmRV?aB@uH5%f35&;AKo`!iDkj1y=w5| zraQ$t8FRdQ@uD7{1a$S=Z{pv{u3`UL-`Uh&HEbjYyT%C%zvq>}O69=Z2|Y=VE+sU| z`TydDTzW$Wo-3~&v%v-M%om43V1T@M;ZPwzGR|2QJ)yT`bK}y`PJfVVw=AUEFW}bX z3qIz>`B?6jwP{K5dCbi&?465_R35!fsfn@RtH}0OD?h070cQCtOX8AVhk8TM00YO^ zVf+-`Da4iY5%fv)uFt;_POJOkh5OZH!V6}E^n82cf3hV37IBg-=D=|r@=&uJ8u9to za<(uJ@l&IgkY;P?dosH9#QN!@Z#itWq99=sOlU2M=lK!jED5L;T~jM08w$`rUQ@Us!J1G5 zO3ez^f50eGZ%zUuBkfCEW*e~6)B5YlH?KJ}cT$~x3g~KlS>H7tcwgR5!ndt=Ad0V@ z(^LK|MSwY{r|-q{*Po&jIoAL1hlls^@w&L?Ysr^|ZnmtQy&om%7J zzy1ha^T)40-9Eg3cwnnK)SXNw0j8?M`Z}O1iCt=V_-b=XTw4Hf9wuHrY`o&bo~v`B2Au7@cu^;^`HmPEtBLv? zkBl9RomE4Q=GEKXyH_iYdg4lLFQ#A+4Kd9(N)0NYl@AR_}vhC^-9v0*5Gd$BP$E8mNF; ztdbr*QlAy|wyMA8!vEq$J*yL&gW7Mu z8D4i&ul*b9ksJ21bJDCePV3GIaoz7$6Z!Ay>DzavVSTke0V1dLaC@dD8oDcR)*SAXO+{wQnwQGBS4jYA;~E)Uwv=0F1aFC(OG1xVd2Bs)>Hr+;8l zBu1TC1JhXjenqm{OB!J;v^FdZ!8RkF^`1HJt#}K*@ya{-nmH*;rcN3U`hfN9KH!=9KEgx1HtEOz85dN69!tE#ggTzQ;y*THyh?N?li>0lQW^Y69N;OD@5EC_Q8u6 zb^avq#V;jR^~nz3%1`e^nZ`px#eZ+V;Zv2NI#u~i)2K?ZOak?jaO|BR3v&`SUPZy3 z>`Ol4ZU_i{YVdiDM(R+f2xI(S_Ew$Pwf_fB8i&AM?k5p51ycomi$1)=!}62xa=Bie z+H&z^V+TsZ7Tyb4Lb)=uA`cHXY;n?n`%J!S*$^!upC1}FdEh%upEB~t|9??7JcyrM zJ48NTB%IV5Xm)leo}KCG>8IF<@*|D7HVA|afIl#5$Qksj)+_lM9L$lLh7)H8RP^~` znHzoa_NJ=e)C-6}2;~fMXx%@NK@oP)(2K&hwN^0R!p;=sJ5O3!u?tmiWQwZorr&-` z-o^Wi_$A(V)ZVLYRQxjDf`7v=)s88C7q6-{YU8c147plFgjNTlBkZ67vvl1*;Xx9a z+A=Hw699n)8XOs9kbuf(Gj~d>%F2Tj5Ecn1a_#GX`wsV?*SKq0HZ6hdZ?h!IGvSR- zN*zJoUdulTugMKn1vde%3ci+hX9ZxxG*~7%=p50I(^!QKp8Jw>alMv`6gq(y> zk^uich|}hGlTYF*Gk>EyCheyk}X-r2RlDQ z@#00D-*EFcasLu)*s@HRE<u%~bUgMnV`(+Q{#8&aCJ4w+)qXCX5`+H;O+r>St!k@nb z#|OQYA#UHwf`1NrC84ae{+As~l8wX{FG%8^2ZdZ~oGSSP^?XHx+E~4i!thEuxdgBk zmXg&slR7&+eZzmByqW*$?5EfNnE&$n&EoZ&*FXIWb^>KJ2Um0cdr}YMYTtkNleh5hU1J=?vhKRI z2m9y8wSVbnb(pAhtA2PK!hgVmsVuH<)AHl_(d5&^gMFrdc(DJLe(~?ek$Dcg0cFWt zm^7ufBl)dYkC%6iSL_7*0(bQ=j+{Uv4R(+MU7x`gq^X7qSwc0`DDzX+5gBRCGScG=8@p8mNBccL(+ZH-8;4f71ZR&O;;Ph=cdlt%ThN1Af9yw&*kJ=y{0P}3kYEo?FtHS=DBM+2GEBx`hw zA_T^U5NCOy$rJ97$**-5`|+rZLcLKjLO$QKuxq?%4K^-p>h5h(tgNJm2$Yp@)PFJ> z!v2Mv+k|f@HXk_u!Uit<)_FJiwGRK})0UL3+0MHM6(*&ELv?p`!*=5@0EE0dSuq#< zjgD;0O40S!dBI zE)VMDZerrPr%6C|?6l-Z-A}m}mwyST=JyFRziN$9?c`Co157obzg4Mxrkbik|2M{p z4bmT;kLarwXfL+Uenht@L(FIk;(C?Kk8ANd#7j-S`L#}R$z`WC-=p8HYW&WD?^ZS2 z1zKOR)8K@En1tg%P7UFM9hpQ}BkI?>C%m-z4B{J!cJti>L?T0Z;m6%qp??Jx$i$g^ zBj3P2WgIBRrPOJlInj2xKZn#=Y@CMbUHA?RMd1N*A8fC}Fclg> zj>@btnZyW*^Rir{)W%XN*rcFJfe|XJkCCVez_vSKLN|%-zqD_8_h07nHneY{yKQH} zxX<}V&%}az;wiRT_kz^ak z`26*|X1w1gmP*s#W)@bv3p>*8ES{0(aEa`@}lbw5ApCw%i)13&|zD z^n3W;a@JemCCTRp*kc_~GT#vRTDo!}KR`L=03>VLWm7W`44C=n={n zY<%zJ2U6>$zUNx*kL$s@KF-4*JG)AQt?_kViG^4L$ z2#n>u99IJ!y%1RBL>PW-Y7O4c77C2MWde6BwzV(;V+~`biooS z$G4>RAAh0+8oB9PMNBFT!r#8F>~#^c-lZS!e06#(A@dZtk+1;ctC8VX%EnpbanzlI zCg)zX*h!RHmmh3Y69jhxMOA#D2lN3d80Ir3(z;<%B`w+1{s0``lkUDhzlblrXd!el zgdJ7xX??0}-W|C(ILS07T9rH=wwPeqrSMR0nKAHAoGt27H$o;#W3s#S^W*l~F#HA_>dRyVz+;Mw*E`NI3bZa4?O8vgQJue$X zR)1K8vZx$`?d`cTjO2P`1XPr6Z_hzF2S#M!E(FcaN+U%zb-8LV%iIMYMi58@oE_j@ zhzun_0aFbc*>cD%7mrOa1~7qyd4SA9`H9#LOfa=Y=xi6)ks^sJ6@M#{%?;H{FM*B# z^(7TYYC)<;X9L*h;8y}lP&;3^lVoiEDGUw4Uose#eu)`;;R%<`&;cZWc?l^K1l&7( zemWuaSE)+)8zy|Cgm;I}@iSJRKjZg^zVQHo? zDdT4sVV{eG3Q~T@?s%>}IPvfu9*vOs1~d1cik_MwY5N#M6TWlt4dE~mJAK3Pj)Y;| z`?o>2IF{!eq`yL}2XL-`!{;;llqWeP4YAEHWEW*fH3WXd&weUCsXr(5X&&Q{{0Y&% z`f!e4Ed;_~nba@%{RWO)_zbZ^AvMO7_gMVx?jC-f(^oLUub23B6dX}6g!Gl90{0kk zAK^s^zTXjenpnMXPEc@{g3qH^e&U7!NgqWLUdyoIiB2%a_^^O~WI8>G0PHWTwtcMa z1a2ePUW7QwjETTQkt8-3ObkRKU085XG38WVXK>g>5?+^ZiXxq7oDjdjX3)%}(M@!M z(Tw+)DsFi=?1-0iUohbqF`bJ`qB&YIf*PI#T>sY(1dZ1@_&%WTndpM&@C89tsae=R za`^|?J@4dX+2#0usjj<_b`n#XoNh4{5w~5e03kr@1V2yl^P@mH#QHv_G_bodyR!Qz zP1#jwjLvT{yXu)ssxZq+dW$aVz(t#1f6xZ57-so{_>8qzN{T)! zcX?m7ZhycAK~8=3+kg%DE$yZQHc0a#35H?`4;UD$yc6BOH(=Tw1Wl4YlcSMgv~RzEQm_vJ8VmsR$#B@GD7?7)4Jgts{Qf#Xm0KE!KE{>BZFm5V<^&z1z6dCc z+x~zaBbX7YcN!jE44I?GW;5(llCl1;`fL~wO$P&fieb?{dX%71>f@6Seop%`EHd`T zfF%LAFj1$-ZC|`85jeFTVAxY3JxH;Cjkg+hT!!C&kr=2}Up{hi(aF~!Hj`OMqYRy4 zMG!AbHEYtR=Ntm0`n`v9C4_Ht>wMc+4?W!O`}z%ti#C)GOgxUj&NoU3bP(dZ6@Fg# z89dOth0)FWX0E?Q_U_SN$lKF{ED#IsXfXFrq=eBA%~>M3sSvip70 z9SzKXxKuosahk?vn`v2Vp(JD9~yppb5Sapx(Ra+*tj8$rRuOnJvyEO5*?Qwl9Ky$eV<10TmY z$qG`J!D*f_r5Hn7Ifn!V`<9y;&^Q7GOL!j_6Ybj(tQ{-qJtmD(@)|_@IV1^3tb`_E z%9AVgFlSbYuaR~*i-bi&k00k^K`xtd+7&F1$G}{rVNV$O)m0tM6J~fUqKN}Z$~P;2 z&4h%3|5sYz2~)m=X#+0AaE6H(&M?8}z~R}kx&;?>W2BUG*~46=%An`ie3`1?l2o5w z!&sX*;M$CJ$aGv*F;jViSdhk3zfUnFH3dzEtRDZ@`Ag6`7e2b#d;NRiYQ|76HvH#) z=sG-=+=!xtTjPDP2Hv5G7oxQ&yorH-*QWRV8h8gL-q&3xQFt?xUKK4x;(oRU?!Jlp zW7o+P?&-jnh`uHUqM{Awvk$c*AHB)y%mRULRj|2GcN0c|ng8pH1bIOV){8+zml#`?G4tksHrq+! zR4N2d7Qk;{!AuO3=&^Z{fvI?$9{yruHg|fzl>RDm=!t&3-HR2r8!C4B2e9$N0_@{QG03WAKc&sVYVUFcds^~i;sF}pD zHL#S;yFnat?umSagy2XgCiFJ}t@V@}LT7nQEZLHP8*9QK41a|N?Fxbl{ z=rvRnxHSrd+{~F7IaH>9T3xGBx(ah6MG;ik51wT{DDELFID1&14j zo|ojW(=mfJBg+y*dKOnZP804-+e4o9`E%aOom7;~g&G8Xpqmf$rY1aU8(v|xf5ABj z_dMY%Gy(aGSMrUzVA5A8uznX_;)0^soSbD)@Dc`2Z3N{Osk%jfAm9eNP3PoYPU{=e z7VJ6;lF;VhFBnOQcxIK$$Zi~prXql|c;Z-K1_^@@bKHgbHdzMTSHS9S>eM#u1kwRa zyzVsdQAQi*!sZcZfY-4EkZ($zmu6;Oln*StG8eM-Ytp&t-Go!$X zb3p|zp+piISw~!d<5I6PBR@(h|1hPV5L_h#;ONyqV_V`SmZd35krQPm=1J#rqRf?&N?hN$p#nr`8_>Cv!8nr+O zc0?WJ)ro;6)rKi`G}_{Y4P}lh6Q)!KZBTTHU^I$nM&HSQ*|l(&pEyQ8G?{&kldW~Z z>xY5@r;*kP4X1?bvJ|i2n*XS;->t$pf1g`7=z1rPK3s-a1dnn!N9kinI)>8ffYKB? z6F)i~bih;?wjY@^Db;z(_9K(_pdycUX|n}$e1XE8sNFtZ7nJ2L)FXZ=>~9)YKUbGR z^F%>Q9>P+8*h0e&qhu-AGp@mcEQQ=}Gjl(3 zx-t`3)@B|Y)Dq{oly??6yWGf|{9@)#%ej9ub8pJIe>Zavja*{)nz`qZGhT<@ZYl3L za^lp;``OGqiJXz@*Vrz26gfSaM-mbOe^%eVi=2sSCrV<>+|$UpvU07mZzJcMnkY~0hJK2inaq=XEHl3cmlm06 zW(;LUxx_$~5X>AivyYi3^QLR?ZeDhsVIp}q@2!<}ARKcmUe=Q31?Cizp@d>;UF7*1 ztfa$%K@KfT$)?H#R**?+q1-8YfaWEMzwB?IN1e}(kR8c5Ggq_k?yK!L|*_Oz0H zVrJh|vX9K{LzxW}2eKR9oxafozgvUgAT@B(wq{njH>hNTVos5E)7ZP^Z4jcJh;J=n zyXEaL9R?9CAv!0sdCTk%5U?Qa>ULb8rq^~}lYn<5{IA57K>Fz1lmb?U4HPCbw(Hd2} ze;zo>mziP{B+ejV#H%*~hnd6>NK+mPO$Nt>_^{5H-|I?2xKt>>Z!Os0tawDc1FX$X zhrm<+b8B8Ku3GbK@tGz5Ex$-93PDnJVErxuDStnSzVWaD8Y2xMP-?X1DTEoY=z#|_ z7n_Uh)*}(lU3O(JdhnzCL_f+kXH(*zmtx%kQ6SbSSs^3#&U%inI3u}ug z@42bD=k}BOO*b(E`0}xHSXlcY@0<7XN_JspCzb5P%+4y=nVB8QY`n0@&F`5Eo2Bk7 z$;P`M2+0!A1sV&9Sz;eM1`+AlnW*l)QbeHEx29qE@Ev&1*nx|GcE8}5B3Euot~rWUh{2>|Cjdd6rrev%KzebKPGpS@)@l zeLQx~Qfq1EW_B!pv!U{1`92}NY+Y^8eelZsQok|-lZbHa9IFS-i6lblWNSLQ52xc@ zJsn+>j?vgTQFI)|Y6p&ut{6X@gy;1n?3qeVy|HtoNcbX2*iB}dg81PS?AB8-?&~YS zaO`}Esru)7Bv5NplMp_fgg5mh7}A2l*m*7}c&Ekyech;k`bQ71|80H!Q4XK-=HAsz02B(|QtOb1F{8&Z#1yD_L{4*57b*669I+$vUf69~vum{v})HbL1$i z9TT2Rkfd*novvcLzEvxRd|An^8a#Zoe$%4`Ty}DZ z<#Xj4OFg!KM3r;Auhy$JJmXTeK?&z-H5*Vem&q5<5@gdtA`>#fC2%(iZk$ZBU{sQP ziFTmW%V0Rs8(9F}j-9tL!*fPKjQU0(OYNPCJaf-eZ_u!9t7%&%@28AFF}NO+ z{%6X6;41yxg0~mm$Yf3lhcVJy9?m+iK)?RAQW5T|;Iy!hjzP^xuh?GSTGRrfz7Bi5 zm)2%rA3g~Ca3yk-nJBqbV(E{+e)wzgRb+1I!lj(gg-}1sz2csR z?8>w0V`^Mw;>;j@(*2{_F{qBtZoIT1%JCk5XeF<1)f?HWs+sYUMqYL6pDq2qBNVp{ zBHt_{lAET4X|}BQGfC$sNvCN{tSS8V@RO&AYp-)hywc;JRAa0VFbo_DdIdv2fuLZF z1RqF((aP1h%52V|kd!8|IbXmJo{-?{ZCmfzkd3F5DKUy2OShhz5wO32%aTs!aTfW1 zX@`?nJfrmos`V6wg`xjBXgAap)sJ5y$8RJ#He|G?`{VlIBbQnIAv~q|T=`5Zw7WB( z>)+P8vghm;zq{MwSTWvYM~Q5+2;0L1Zm;XOOkrHLcX+Gu6b2T)Vht#YCw+SiK?_(b zNt({tgtt<*nt*gu0b$$O*Ellu2wDHV>zJ8%NN8Gs1 z&mP{_zgvC%Z_|I*)noL9>OBZ{ektWN0;|p`e`zME(qdT zLyO$uI)VgUI_vx+Yan+AL;ht!SMiePlI~^Xf|`4m9pM! zohQI;b#*Mmci-Z8FE?s*jA0h zdkB4;tI+O65G8p-3M0U+V-(6@4#LS}yYVjPjn4x0XS`zZ0OKV~S)Ry$yLfV0dOd!t z48VJ}J;{&}v_<7!WwI3BMX_WCs&RQH#|2#c=s}r2d{Ew3cY3naGB)x|3UOc~w{xRH z=Yqa!DLY9VyPcWa$-Il~5;LRWjVybrEJiOhnt#-=*$l6YD zj)4oqD5F;bI6b=#x;ImQFp4y$+3y@8v}*@zX#ec)pp6z97W)z5GJ<=_h%1?8W;~@Y zCt?}RFUDOLcQ_exW+!j=f&!g@Jt1RJvLmPWR97B&{G%WCl zEi;o!rnTiBnxXUzRXi z|65!+x_(#fmr-}k=7Y6-!*t_p@S8oyGk!%C{lr)T29^QiPgO)bdU%Rl= z>d-~1X zwGfzWgqfQl+51GO$cQ}KqJ7gka{@vqcw)2&kOXdZHafwBN3{` z#Yh_!QbW+wGY}s$hSAu=i4Pw-kIu`7RL{7T2>PniXeiqt{Qw*0bPsRDtNQtKTqbd- zNK|Kk2qP~-B?d@`-luK{q+IgDlfOEh183;C%G*%UY16Mxhtw%>wA98*&tGje_waUp zsBh!5i$O8(qBtr_kdJp&pd%rEJL27fhaUN& z6O&D#Lm#nTrlTfhddWc=cn!j6iWwzg<5LQlKAA)K~Q~dAV|%KGQiunNH`51Pwu6#G2M;Q#w#qYuC^U1=j4m z;Le=#kgaS#{zKE51$W%G0ZAqo;m!mi!A(L~XXrg|9|ax>vh{z9Sd^z;m@L?6rh{NM zTg0|*vSup-4`?D12eTq^ux1O?Vw?D1tD6p~xy@FPbO)g5(riuAZg4%0F`{sPvlUWY zqf>#AzIG)rO$#9`Xd+*;$z<$C5zA49OoUNx+HpRcQpu{hBoJAB{5CrX8fy+CJAWA5 zTHhkVp%wR#RRb0_WfVL@A%BjO=0w#RPBox9t~LSjVQMRjj;y25*l&Z4dO<|dwIk8)8lr#?P5$aWFzsgsWrm$ zIO=lesoTy+aa1_X$4ys8_7jH}dflvZ=*8Pvnu?JY4!w9A-fBV&vQ~f~zXN90$4cpHn1LI4Zjq7)KjSL?h2HD1X&5N!K|okFHPj0 zE~L15!-;y20ncM7>sDj($*RknmQ`B(#5S#`f;K?t4krD8QGl+->K?-w_Uh*;u@Nk>3++`LDQsV&Kik#*)+&PSOD7y=i zsUwUn$czEHy(KaU473czER^wgH|ReNQY92e1n; zC^B<$nA`Ys{ZHCo#^6!$)&g7#;dS%0beY-c#8T0 zk=X5jb}z*~ffqO3nH8c1gg!2SVrWEJSg-bOBr_7~Iyv563k)m_;p(LOjy{B-G~Rh; z*LGB&dS-`q60={?HdxG#KiJ7U$*b<7p|Me=(m zg874v;+ma*1R{cxS2yw<=eVwi0OKrb-rdQckJOT}%ZxLl#5f9N5%9BCf*ePo0tJs> zkHEW^4HM<5@)Tyl)`KaKdQ3JJ>HfWnN#rO{@SRoy8%=&Ov;S7f{+r4k23Ev>@TiQR+^#7YavEoYP+AFOoW*re=9qzh&$iMmcxvGJGA-=fFVjMoMSoYN zDU^PR6acy6vmq!=x3@A+y5myz&(-{&^_+_<^DH*X-T;i1O6on$Mtl=j@epxiY;#|T146{tuG+kSuRk1 z2~fIN-!AlzmIB-fvSyP{uO2WD|dX zziq^~qN0GxG|zE*Y$6d--<0`BvVUr_Sm>Kn$1dyn7ne%A_!_i}Ln?m@{Tp9gUqYuI z8n=n+hIH*h%zNZO+YLBmw=RYGoj^6q`s~*y+uIXaeo5!JY@(u%^x(tj?o{{bd{HV# zD$!BTnV7fM)Sp~Dxzx&p*X2%zY&N-nc&cY}mQkn zc(dQ$w(rG>D+7+u^*#1~g~3Gf({HU8fQ6wxr_E; zP5^DtiOk&Yky2~ZO#M_}yyUs;XkfQ=a@~VL9@35mhO2>`VdeJ7K8b4j#2h0;RJ%P% zdY0@=G&KKvJ1iHfxeB1D(;~Xi^%(kERy;G5tgdD#a=HL ziHwn1<9JWAukZ=jK!1JiLRztZ8P0CFX0!Gg*qi}Jb^$*v6YBffFIhB#kCoUgGjAEbf1llf_BK)qc=r+yPs0KwYHSK|9*VP~vGXw2G^ll6IbWPu2b( z`teTqPaEw{_|s2rP(B3$W*`eMQExr-gGGfevx0}?Wa4Iqu^q@ROv(^MX#`Q>E`%#= znxks)5h|0(jsg(AQpDZv;ztV2^mQVD>qO)Rz|$?@4to(?`o%?XNtNgR#Y1E_CH#3U zehb9nQ@ieHhF8tNg$P@Jx`AEb_+rXRt zcWnbZMK+sf6nG7dG@Nn_HrHL?m0(_B-h%Cw*6V1XHh|<-llc$iHk?tK=h1aMYd~c7 zsO#=D#yM}GY~wLXWPlr=@$NW-$B$%2H|e^U`n{QxG2W5$?Hpr&-9wPGtc^JC?y|Na zAi)%!)$xMe}{5CU#y7p&gaMZ!fvcsMkYCkWew|T9VVrKs)9W82` zXfr#PjsmsCvYFj~mG0WK(UqC~O}Zm0xN`-}7!igtV&1vR0(P%_6k*2AlXDL_| zbis5i{TprzFC~QR>n?~=&{3D;8b&h0%rRA4R3{U2ICVWIQFcO7nMJDDh-iaeQ^^;E zK1|*iMmQ&$py*h%kM`g1pSlL22gYI(eDAwEx$L&o?dtA-u55uO)}dqyU+_y6d5cPC znxWmvq%#>U?^KchR4sl zOWQ)^E}*|Mp7U(N!^ZWj5j1d!8j~Q4f}~)L>v7R223+)Rm~z@0hA_H~Vh|J(^v}|c z@bkj5x*U{$o4tA>D1Nk#SVRF3w;~y|$eqjWJjN5H&0#AOnoq9TE$wzYmI_V_b0*@X zSjhW$7!&~ubf5Q}!07fZqu&EpzNS;f)(BazhOH61F38N9S63KJ;OYtvaRD<3^5bdZ z8%Z_TA$h>NIPT%Y=`*@GN^{6`5PcIN+@ZTUVxkfu}NpEwtw zSJidgOIKedT=vEX)vD{zA35_Jw$n5@481oriy%v!xA^-C<7kf^(#Hag!?p@Th90cu z7@p>KIkp($K99k-u?x;ZohL3{zJK}ozkd0zzy1B^|N1MN<9K?_LsCMbspmEJh2mO+ zLOnNsinMXf8~^khx@dDzLk^3hVO0EUt6a02W+C?d*FFr+HwU#snlAh1G9Uuya*)@eEDrLc z1m!?I2>X3|3xO##ywq?Q2qS_I(trS<7_oT8yxH%UY%gSO$PmSAZUj>Ah_1i>Qcy zm*ar0-JpRt*uZ-!Q}bg(^oNN4I!>?cA^1Vm@8hz(nX$v!rOVFO9W2my7-wDX?a$Vp z@FCPRo3$Z2HuG_Q|ET_({G!D;Uw3kkQQa(N3aJTrD;1O_y6%{-Khhgzy=zUAp#qa_* z@Z(A!h}KdUom8^JsMn*sqneQ;I%M~~?_1sQuRp@q?22bdXOX7yUJyes&O&w*C2*L0 z?bo2qi=Y_8Qg~UHyLvOh4QW}XoM~{@z3A7Tb!k^E#JA4-T9_=D9^&P747MGAh7`<% zI3|OSr66l|-G@HT!##DFgUaMp3OXHln$vd>PlK7b5o8=Lvj&JrkT91n`+~EYh&l|t z4}HCja+U2xeuxzb44imuFABrg4dyw7W8C|FRh z`{EqS>5!o<3Vy9~$y&3`$JlkNcfa-SbV6d}{R>VCC0zPfR3-%Jp51PLVg2)NW~50W z(Xu`QVU2e{n}p6qX^3~=yta;ob?+=cZumeM#k2Pop`ubs)y@2_o#^O)FX?+fh;&WP z>+d1w3zB2Zu5}B3?9)SGCMV#!1y5)GAahQfi!WjMIw_TW;j%f*R8AKRQ>9JSg@n2U z8ZK+opZ~b&fnwh3{HRNRCO@#JGh=ApmKW@Xqw`kw)$z){I;rFep*3CGE4fma53~0w z*-D-S+0QH4r0;RhAQ2E#xR|PxN#d9uvC9XSWV`erq6hKwnQ=u@(o21oLeJ{2)e}Uk zt$8#`Z)a{Dc6tnxY@xbC|G?w+UFaWim<*GQU1gUp(^m%`3R%{F?hJO`O}RnbJ& zBD)}L3=87;1DudTtbey&hL8P5J@95mx3X-)v%}E)t-towCdKl6BCb&hiRceQ?>J>c zUJO#Yy^qi++pEQYwq{kIW_5L}S-6<^;ClYWIpB!k0$D@diF0usvfGfIg=`wKn~)ub zY(He@A$uFLH#5d3?9+@DlS`u#c)3n|^Ns|e4*&Mozy9T~E;~S)kvAg_pqhmN4)xFg z|EbH6Q?ni@A71k?cv5Ue#r;d#&1}Uw)^4N&6`>c0PVby}xZzFK=xCT(rddwFj!> zLTJ>@(4PQ*a1JkBmLR@-mULeOx2I^WOLevhA<-tl=_bHA0*6s}JmPT7^H$vyjl#V_ zkl>D)ECUcTC|i<$7EB;JT9SQ`c9Bb&*5$9+mVnxlcE>|vOy=K#tc%Fd0l+x<_Y|#; zHyP;o-@iTKzdwniO}f0d3GlE*{Io7l3h?Xp(z5Q&KakU%Ej*N%JD=0!Z&W7Tf?kfKPaWjSA{eb=Adc z_#HK66S1w2i{7KBe-nJkqW9=8KkMKBAh~{vj;SC#BmU@mS0!-8H7fRkQE(l_Q9(!c zLG248Ph3T}o{Ed+*3-&0a_i}WP_GN@vSD{rs{Lzy?RcTwdWzSV`uYJVX` zs)bVPyy_=GmU{#4ymclmEv^A!^!G9XzCDzrHDygyeI3jOL|#9X$aOWx@LHFP`vDnW znvbiwLQ>Iq1Nq+!djhrlx@r7gAV?-G=<}q!zx7+SOWNE#x1QE*jqB}dl|60A?o_)s z%@?%s%ol2h`M0Bs_Qto!1EINo+p66PV7kj`j{|X-^ngPVea8mZ+T^a61N;F$f1Ip% zXdH&#Zpf6C5^ZO1LfvzU@d;k|y5lT^H^Z5EmaHpVw(125{j{~dhSVngzP}0Z`6j?e zbiN(So$u(6+4=TTWEfIszfD7ah*brXAVO7LND?Q{v2pUO`|zD$BTnS2U8{n^uh{r` z)lHLL)R*d{U>I6l#e9N5G$TLJe;m(oho#rWr|=Kyl%p1@rC{IpvvfT2j#|1VsrZ4t zl2117l`q&G2UzsL*=s@Lp0|u~crP0#Yx>dxmVFiEHL_N(6TzB)UOAz19;0{y_Of@C zTvIkfT=OXO(#d9h+6@Zcr#H>X!=C^yJ8hMf9)>vg#?D?^|M2KV{o|2Ve`mT*zDGDl zFWrA(jk}fhg7yt+@hssmF28Esqk%dCeU5N697W04C*cB3fTkMUqJk7qh zrcaw}l?VT$Gw18SeCE8|q;p-LrhasndH)J&}x3R8co8dNAg0ku9&9=B^e*#&y0`a zpi3B|{1jZlc(&rwn)M`Sut)u_E=H&ytPG*xR`OdV@5^{NqC9?9&dWGlohY}cxANMX^bM5}>H;ken9e|xc zrTl#(WdHOVx@2@I zjVDNJeukUyx3FYNBB(}v;QZ`6By?w0;{~nXyVBf1+c?xP_Dmy(n(VTvLd~7FYO7EK z^sh8l=!(VCe;h=8Vc|IBVKg4n?>L>}^<;dusc9oLc4Ce%?x51*uzRLD^K4yG<1<_` zzy6_Jy0-}(Up4`Lj=&fka_sEYbro0vjGZsv(TndkA?S1y;J2Fq?;$t9oco!Z! zCv|y30e|VJzD* zxJM9{si2*90DchGK9f>-;e4vR{Xw^guB-=@ygV1T*{_wXpestfJiBz+E8_1xSO7fi zj?S>F#B=sty789vn%3hAL=PwL0n(?BW{(&UBmpTUt}9)sxMx^bQd0H0@gs(6Odb3k z=YI?z{hJb2R0vyFBvUCk+?2_ajf6go(h~xOvKplqW+)OZga(Z5S_K{kho}>?t{O{J zp`Y{^y#uEeuHAhvh*KjtqsfNiv-kEEm`)R(3BlPgEjHESOR+`MG`q=1L6^T<;VMo6 z9i*|?`(K=yfEmZz7O4xp|Bk!xGs$HS#(zaR3<{~~sI4EQdOc@YdpZ%O@Q-JO2bB$-6ujhded!@F5hGk?LIB%03g@a=c&gz%} zD@H6Cv24Vm5lcrbAF*Hrru`MW{%pF5)$Ft^=3Ms-!h)txw{=H$DkS#lxag)sVpMB& zGDIz}<_1-rV{l+Wx2}VUZQHhO+s4GUGds5JiEZ1qImyIMCeFlXzH{!ab8r7zwW_;n zt$(}s>i2!15$cQ^f>ni9m_Y8%HdzlUCib?*Vb-yu@3zVVpr5~Vx2E{d(GGxTcF1ogec`oPH-+hxYJoG?NZ=68-S8h2(fwJ}0%~CT}n%acS}rk$+n77SXHdvp`7J z1giXAii6>5Pg-4M%Ht8@BQgL*o2(#tyuxZwXg66%16NwjXMUR!s>YesxRZiVS}kOr zOmm^AT`y~C^**0WX6OT-#w0pg(SG)EYhyzzlVy1l7BSd@XwT9%p%-Lqqp!fFrK_X6 z(OLE6ivrKpTco|Vvaty@m#>OKV_Ivg%&YO^s4s#I-Ldk6eC9A*c^81cSnhh0tDKXj z^SShUi!0iHbouADJ-m+sCuPTO+Jk}@w{ATATBM6|KIYnYXyd8?#(Xnjyw9ZIx_1--Uy1cH0#SXdUe5rKjI&CJ-jfZ&pCmKJo`l-)4 zuommW9>R@}jxvhsOGQ}d@P z@po)6|4*qs#aR&r@Xcnixn_b0xO61Nik}{X(2Y{osDqg4>(F4FKw|!@_vvW^q_)DQ zXaM)GFyslMLQ~>Vd&V8S?xlg?1p{nm)7i<}lc$jL8;?X%=#?zjvB$r&0*?!D6isxf znSMIHylPRRZ$s$BbOiF!A&pPweME4y9Xr4QU3{Llm<1CwdG~c?H zB#DZmA#5p3(?V1P0a@2iRL>VXD8m%AYe#_w%V2C9y!8{f#N7x#+Mb>(Y$GSpHFOVs zPiK*WJG0r6?^*}#(RMlbl%!cC@s>~cI`r#YJR6S(t!YlVSN9O^I3Cb5t{IcZ+SaEY z1oWibveD&Oi5%hIM+&P3ltCrY=fw5y+#`=tSVh^vu!*{{eX2i{@)#!?L&<7|IgCe_bm zf_fSi_7h|rf#xg`iaD=_WGoz{Furp7hpmkG89KSVQM7+k=)j))m8&qmWmpvts5*&| z>wOm~=E;U%Ds3pWFx-xv{8=|@%VZk^+Qi(W{B`uaJRFY`12cMoF+az2PA#iX%J`ZI z#CGS1<9eOT#uzuRJQl5y#P9k3iSBe`SpGn5XX0;XgkDp~9a^XVf(63{hUVJ|rHGkV z)IfOmeZED%8mNjl?8Mws8sP+ZuHzOYA76jdkIBlHw&$Lx0 zK2Ow|CxAV)Nuf|PU#B_xtdoZ8{M8|?S{ur`8^GX1Droz>>H;?An|t4HliD|mTXV^o@2!9QU?AnUNbA5d;p? zpU>4?kcby#bNwf0aw1HJv)trn2r=ln0Jh=^vdGPyIC0K(s>oS4F;}Zl5#5W$=TW1@U(&-`r-Av!K&)5W_x+n)oF8 z_kn~&`sQ{8A*XK*fWCKn;d*IpbeDfh%uA4H)|vuIs6nAQ%Qu^JD8lGa2UL7Cb-nWA zj4r=Xm%bm2T^@a<4)m1SEY9CKoIR=cyDonc z$K^)j&wg8{x8~{%nESi<2*j?i!pg!?w11VVb*LavPVeg70VBLz%_~#oO=cfnEdm-s z>Fqh#Tk$Uh@0XP5pDXmVclD^Sa@I)u9p`>VSDY#sZ_QfVugmaNusQcc zdWG<V!5RC+tI0e9-fa}o$uZwgk285iFrE?k-@ z=GyZ1!QqQ|#-qoc-)@1LaNIClIlXWRzhX4?n_= zObV~;Y8v7^>NN|HvKyHpN`^vD!{KcyB+qc$udh*`c@G9=6gzwDlPm}!Xq=eO%$e&* zem}EK5Hzq2a|D4ZIGyY{E?y%z;BybKdCq=J1Ech9DIr`DVXyVHOwuv+5&FdXnjVYMa^dQgVG3<_dR^hY`|J(%LqI6C z8#4QezL8Aj`=Eq1AFI()Ccqa8Ww>vdOGT(pG~}Glrx>sBPw~5>G}|_v*`7q zw@&_U@H`ZMq&sN(y2NtaaC4x$_}@0^5K}4WL8s{!U09WSQgn8GDnH{?dT_z6eX{8- zG_4yicz#C;=kUwne$2~Z!)CACf=9}bU4fESAL|a7xnzctG6|<66^Q2T%4~H4pxpb2 zWG~-y<7k#c4;WA(&|9aqs-qO4#0Ac_w^udA^-Cl+X__*e(8l$ds(vxFwmn+wc5+)a z$n}q;?ol%!E;^&~W=cC9;ZbZfiy8M-6j)S+Arp4eMWTbH3{@mEqlM6VY!kG9M({10 z?UP@}72wqO7-ZG1A3}O~r99vPm|uaQXwH+Q6|9Zg%S=M2a2?a9$Le&kdM=(}WeAQ^ zBywjud4IFYv_P-njMtw1y_+gPWM+vf_alO1{rW3vwU`P~kwT~BOflsJ7#}6nXe8Bp zu0-ByCB?nS^V&L$1kjQ5w;iP5#C$Fec=tW0vDTsL|JQxSrLD)oL}T;?AGNkBFUCV))MI)=N}Be ziR3Q@yddw~apBGt{{1fiEWsHc)0G~kw>M<}TrW;;8}>?FG(*E5t3u)+ZILtfwB zHK=)`PE^T+>17$TBzMp!D_L(d8~Yo`>D=}wAf2Otc;@lt+cf9{jIhK((e)XUBgT=$ z8vA8pYWf41)-Jj~Dz!`GLt2phb}j$*O;Yjux$`pYD5_eqdGmA~k2_bAbS+t@!B{cs zE2NBM{7PV6N407s_abz}Il0|7C`@lsRU>Ug%OdLd$rGu&l7t~O4NYYkDHyLKu0RPH zynQ@Z(^zc8uBX}v+~~UY{+H~y}Z zEVE?iKE;61=Mw{f#(eVxj5Onxbc??NcF;ezl_&43Zi492)ldvd2&ul{-n#k1*lLig z3P^?;swuevr7@lKI^0UC`KmH7<#-L-Sr`T_tG2cUV+=?II&4`<#s|QnI=3YwW5q5_et6;* zZj)qzj*?6{XoOFKJlph9@SyWX2*(J!7eNL__(Lq=7DdMoC#@UxJfNwzhT9;}6NMJ; zpygJb&vrf}%qsAz=02O!TH- zaxbo~2%&vbPuIXO5qdR$S$ogK?J~6VT#3tKvd|cGCwFyepK-y!P{s8A!V7G{r`ZGa z;kn#N+CPaIKb{^6vU{@xxzVImgwAJj)<4efzh0(&el#3b%%drVR?j%2^7YFl)tsdg zAw&@fr592%S>CbiL%=QP&c=OsP9o5?TZs@&SaXVtDW?_~z~{TBeE(`zwaOW(nk*hO zR^psk*YN0orxbdMABwuCFc}ZnF^UI1l3@dwkwpTo8vu3Ch;hRZ;?c2BLx{nc{NerY zU)~U4&$^RH@gGc8<-@N3e2;!xnr-ntrEhK^%6V@tYdSizHS|PIPAL4@!h^CRj#H7uh|^J!LzjdF zNBQx?=f1Y$=E&g0e(T(`!FVZBsg%G8{hLlhbQ&=!yv>ri;~`&>Zx>m&3tdYatD`V2 z)h}5O;f{cxFk+;)2CI0CfytzerkV6AoV^A^vcTcfz$!_bT(#(R+d_Ly+l+SoMfISY zck(Qqzl=U6t4P5bqe4Iy6g!wXr%^(P3{^7R51oZzPCn8z?WmfHF5$f8>P@Uif(GL@ zK;DFtX0bJE+zYJ0W#SO|7k*@-7eST1c^7am6keUAqzt~;`oA~=FcvAKb z48X*QRjU;QRz*;ydGW$Yz(R6XK5ap9P1<3!dJUm+S&SD!@@qt~au_D^z~{^bp;f$c zhDagD$47s`cl~}}h6Vv)G4(tdPlj=wMW;~86Iffpd$&rq?e@GNonZ`L{{GB%kNTmry{iVh z^?eg2Ru-vxNVlF16ml-U0=+*G5#9-V50Q-AS>UigpDvs@Y7FOhB0W(snv`&>GLRw8 z5mKIuR7kj9A1u&@>IXLiQmMHvpYWF`Icso05VIUE7Oxf8dm)@M&JZ0uKIE;>r36b1!41m`WVvPXuQI2d zDTrThlgSijbjY=8W8F9N&Z-dSE+DZ?Qa-CoZm|N7mqH6Q==+I}c?**w^mb^6g6hyD z_q1eZp1BU_Tjz30qC!bSq9&$(Z(0Ap{-}S$a}MG^^rii!W87>xBT%QPn(IQZj9iTc z9dI9{xUEN2^>z;0YT?HD)1wZ@{k1i$^Gpk|2+u30aoraA-PBb@wpVX0AE;yzS`kY3 zaV0g8!4lniITDTD|2^rTjpy7!70X|wmRUJs=B?#$pz46(Vrd2(tRQNZCoH|Dvhdz|{*xX0hwnl^=b;=3$yN-sWr z_Yc)v*41Dc1w0?pJp^gqA;4u)i=pbZHE2i`JLxqK6f`vAO^pBG|fArEdLUjSeRP$j>vu6rP zRIwys(Y{-t@w9?{WePJHuj}F}5nTN*+JmG`o=0m$mVai z*)s%UPNsFxXe~8okq>&J?H#+9#c)DfGUj6{*3>FkF802B_Hax-_FlE1`1%Qbtp+Z0@|*((2vJ?=o<`VaOrU4%r#DtV)KVjCWTTcZq>t zykQ9- z)4LJF+BZg^RY;HY7enqq(G+E%lUU0sn5eNDC?Ge+TaH*k9AqpE(_T@0(n|@z=zz?p zY9B;NvSjvlYyxMS;57eYO!!DadTJ7c2?cI^Hnb>6mi|PY`s4~G?yViX>y!~@JO0L3 z5D4gE*A74R^Mnkh-FDK0$3ZW=6hTo1B!a$UXeQGbN!` zBSZGV>x66NdX!6){q0mnFZ_K@tqF{Tg|(_*)ZLWA1EeJ<{yn|ImEV0Mo#vf4v-1)# z1M7<`W%P}+_Ei&G{c@RHBIuA+nk8R=Swf z)7c4|=tvI65i7rVvQG83AHQvxv}^Wsxk}d^It|xSNmKpGWuU5JQtedI!x9CoO~T&8 zm!VEZHmQ}gwWTkd(kY@@FBnoWasC>rC(NT~44i}}K|&QRu-(C~x@~N!mslQ{VNv== zs%*P$)Iu~%B~sEUH~mw0VO}Axqj1DKP?e>ApgtKC~wb;)Rr6b{L(5x%`BW6OV&$>*j&;K~xIBT=jxnlcZ-3 z)|qm^$<J8VrUZ$9f6Kh8YP+QPgA)c7 zMAzm-o`{`po(8#?hduBb>5R>N#^bWJ$5ZLo^kRSjtgUz28cHj;GB zu3&sbS>f5LQ@Y|<(?i4dT$&weGU4EuM9Fs^dxnj>2Fu+zR%8JH4`Ytc(~~+TWR&zz zagPCT>AS z8}A7b3(Q~`f+uEBVu*A8_CgSM@mOh|Hf5;0uApFR+I-OnPS0CVMD8(EG_Mnz3)!5HK=TinygLvjcK;j*TbOn_Qo$KOl83_ z%Py!uLZ9i8SArklHLD7x6^D-?5l%Y?&s&ll3EWMEbSDU+BB3uQj8H}0Rgq*_dHfQ? z)7{r3`n9$xJHo-R)o#-I48NN?~)XkpRCx?6m2RL5H# z)$Ux%hDNvwhsqDe5{Vp43K|Aan6!i-DcySAv>HCjo0P>EK?qmv<~N>9V)?T9wu-3l zO`@I4@W8WLD&40{&n|oPolSh-`+H%Mt{Dj)3G3QEYe~Y)YxS!-Z9%KMR4;gkmuu=m zHZA4v;9Q?kNe7!kKPU%3ury^oSi0YV+30%mhq86%Y}KQ->%*nXMx0}mc}srwY;72O zQ>$%WU0gw#y$YI>Suwp5FJYR2oYd+36kvv+eCgQ~VA6mvBN|~Tc?W-HbNo(UkIxS; zA5W;>N}Z-$`7j0Jte_(QRdkX;S7N*|moia_eOfKC20;3neUKW>o6ngK>gP|zai3k& z9)hxM;$z=4WYZRI5;RG!do%t+o#l}Pa^7hPXodKau_{64a6IOED8y+h#n&wcw6v)S-Li>o5zAHcs_QSUu!07-1;P8PBZ{YXtjg~>|q1G>Xy?c>~Z`-l>`3I-tj}C4yTv|a5@~0hbO9{7EH_B+^-xev^s5Osnh%5ulug98hsD-bK`!4t7X0$b3$E5^x2cI`;Bdx zTnu&pj6&V7kz~0@chKX2^%HX>=VRJJcSoSKn{P`k-a zWh$M0qjBrDbSxMn+wSr;wofX^=?v&`(}*8*h-8~7id9=R`;*Ix3^F^brS{dZbo+Vm zbrn)X^|jFP_Gi^S0X+A51o(PBkUQD`;{1C5{c@!AwcUG)$i!#l^338Z@c8vK1ptEn zclS&_us}*f0ukN#>Or|dzq^Q3Wh)HLFU3HH-vuu3X=^DWAbi8}h1?xD+u8I}nxa3{BQZSUi&XNxs|Gb|o0|OHn;b;14Bjxx2}J zKhJ{IWL&Q2(jGIh(HV(jBk{$_j>N+3!t_}kqnMg}8j=@&(Wb$&UV~F{G1AFE97Dq!BS zxJgt+xr?JOUCx1gI5b=*TU)ae3-4V6fgC9`FMMV z$Li(NbtEVD42foTby+m|abLwY&nX=U{dYZ>!gL1aTRzO{ z5`sYEpT;LK=eFL9@B$+m)Ghg0QjM-ow=_(hSEDZhT)^R2;C~K~JEjzvoi7Vr~ zE?@nqhRU%Qz`&iak%vXv74Z^9LlA(yPDnv+=Yxr73E%+m$N>?e?+x+Nzccq`|CAgQ z-~7CU58hHU48ZCBTFa#d7^@`)TqW@jM|4o`=)n&*ajCY76-+g)B}bAu=;p|iK!jSR ze{Xj@4MqkyGb?t2OWA}``y;Zj%3xJXIG+x%tBwP+^Yj>Q7M1EP!6?IHUT74*UaI|@ zOdreZ$uX;Lc7aRHEs*m+mJ-S_u4OO$lMrekF*X}BcQ`NJOaxW2l?~h6 z2i++$2v%+t5alEoccc-f%CSj&5tkJ&vOy(LaDV5E`C@^lC(a?(J5^gd4*HSU!UKL2 zD75blU5dvZszPXiBxy(k;oD0^Lq%AIL%UeWcamtYMZgBMnj)enif@-Q@-X(tG4JV4 z|NKB4Y}(AW+hCK<8(T)=JbX}3^Ad`pWlyJiYwFILiSq+yGiLtK`gtq;mK&~0ka%l$ zZG;QtTgFk9x%XFoI)RmgwL@w2XpxkN=Yx*TA&wrkKH5@e^xD(YEi}H)0V(hE@3QmS zj7~lnLcmh+YNnQKn!()09w=Ht8Zk%PBr0&)a&)Ahc$-OFv zbfY>}-c7{(QHttk_BwCAD#w-^VQMG@qJGXHwPflKExaefaCB8->K2nSUKI?)*D?{8 zzC+7Gf9*?ABa@ueT=${;Zt-E(ArbH;g5(ep3Rn=pR8y~YFgfc)#%dNE>V5wQAh-PF z$%Hrr@qNsF`Nyy8GufrBJtHHS(P|KOG80_qX_5FjJum+p-_JLdB-2#er=lA+vWSzq zdJL_35gv72-2@ju1S{-|yv`z^zzB{B3a{v%DPK;c-S9y!htraPSxiSv@T2zUogrVNF@fA8U%bH@-}SaKsqnC@WkKd5C^D zkm=9L^S>}B4>ps0TlbQ{`Pf}D4nUAoz!oWXTll2lB{Wg6md_*(dP13V3lOBQY#mCK zp%Z{O3XGJXxM*YchN(f)FY+pGn;#th@{r{X zwKT~3?IA4AvUvHzEXU*U3cIYB#%%wulSJw&^Kj7skxpDQkn}-s$CpW z_Z4r9g!&j_&gd&_;#k`7!R_DCcD0wMh=_8VW2~8EhsqV1v42p<&X=rsYtn7&a3(;W zf@2l%W1Gb?`4hpQTG9)J5?nA~UPGCm)q>$`Ien{jg&jjK#ON-=0w^F@sr^Pf$n*=Z z*keT`M3VCDn^(>k6w__*pxs=UChmjTCm-U=Nx`BuBxL-h>SzfHCgi_1M-@Q39$`y+ zYbf%0s1=R$1oY!Gme5E9^{QC4h;C%sG~JfeT#qIQ+?@iwcgwl?+W-86L|W%NIO#sB7{i9+o!&m1A{{552F`9MP0tws|1%^|7y9}+O`3c+cltkC6`+lb|DltKN&IA z`PWj>8XeXi7c?qEgrh&Pqdp%zOLMaZl;^i_kU=`^uWkd&f;~ymD*~`9LP3~&zQIkD zS6Rf8=u<9B5u@>=lD%Z7ZeR~v`xX+R!0E)9vL*BdWq(Un2Ilc{K{&)NJImp{M_oI$ zp_8XZ28(E%wiEUsq-W*oy?CihZ%(t;T1JO28_pQ!?*-CSA3~4ydKI1BgI=)SSb3<0 zh2s{J&7IAbL7_Dda06CG?dLnjC!@k+Ej6bM2|4(VOpxnuxy$OBqMGhB4RF`RT6k~% z*;8?<>a{2$0EDxkf`vyr!31aHZ}o#2sFif7>?C>>r_RS~T>Vo@1Qn zAL&)Tk~b?alZ+-jf1PFAt-aHJQPG(j`Qu?9uO3#}-4r)LO@;jNhXxHDdA#sG3wRng0Mv_^_SsB~DlhJ<W45>LT&El9p}Dmg$7(7faC*)HeodxfBpC$RJ?7MwG`IUJ_o?cd0VZ`G zxrP(J0Hky6ibInc12ooe&OQ=_f4@X}I77D;eoQ#*TKEXBQ7{E1`N;A)O@Xv^`-ENj zO1E6NEna0p_cy%^6!8c;&3jj$!oRO^nj;wZjIUpYh#erJ*5(tlwZ7o40JQ*7x$m<5-X@8Tk2I;H@L)^SxkbST=36T-OuIDm$lK zBrly_Mk>-gdXfKll=hGW>f<%4bn>h!1Lxr4uN}v8{7$Gql7^!;m>pgr>K0<3d6TII z0yoP8l|2l?=3l2oqRsq@GQ4@$!aV*T-$@CYvZ3b9sr^r?wGZ58{BoSL44Pa7E=Hrk zmVlQVjL=28x19}d##3VE_N&89n{7gv#85(ZQW8M^F9kj(Qx=|``XmBprSOx0@LuRm zV+&r}9-`r# zK`#{we3^vt^cym(SCGA;)u#E{R`Z`wMk%b-qWtq5P!a6!Pd!PqR!KzYZ$hO!bO7i> z0z_hyEVh~^j+L32AOj74mX&R~yqs=ewm-^~z3tjn73Pb*3+i(!cU}Dow~=NPiaTfe zgvHX9SZliFl51K@#kuf7)8WzrqiaCT9#7Nh!Kxr@@ zXRgS-Wc}z?4FZPL%zrH>S_7)Wsupdin|8k%Obu zPy3oAPAYMR^^}dm)S%7eX~p)bm@L|3`de}BFJ0=pIeY>+yfb?xE;@&S@7L!)Rp7D> zt-o#}B4ii!Xj)d+lS)2h?DJ=_h6iKS3!NMD57257j3Y9R2u;w)3({qDBmh{gTIyIM z2UbcuT#oHZF2=YMLV}IdJ?G-yPI1d*7hK)6(ZGDJw#4ra-C5t@_HryxHR=~(#U83t zzD-$Mqk(&LjZe}L%$~$M2i_~CB&ufnBKPMEd3CeiP={77PdA!`CC5XF5dgL`%&)nG?GWk09<&kC&)?KTO*^>O{GeonGauM#RB`^u zF_SoHY=#AayyqQHM7+j-oos0lIb4LcX9qh{5qw>I{h(7Mgoq!DsGtZHU9oU32&x@Y z9_SE9mu(C}Wo4be9a%~luQ&H9v5(J`$0o2wwOmtMK z*C}au#D$dxsEB_AGqnIWUCm>GFKgetWucEdZHpg2G;QBvWZhN4@7N&5jn*L5bviU; zZ8SPCgD*IL>SrX!i9m`fA!9{TQ>=Sh_Ss!sYEO8$vrR3A$iEmp#~m0DJ7=ufYO0v8c_Haw%_DJ}g}mH`*Cx1HTHp5@vHHiz#%ZBG?2 zT27UIxJOtSY#v%F+i%SIo@5Zu)B$fHR=f%Iu+}oz+Y&Fs`wcKg=CTTIHHe9!vfJVaz-=>fcAeJS%9(r}>~~DaHNo>9n5@66*VvN3pvCG_9EFqy zFrtE!c)!=-eMcTJwP3t(ym!1;;rIxcY<7HXd%ew=R|bGU4EsYy?E=?hhBJ)5nX@t0 zWF1;t?@gB?!#T6LRZA=}whc6{uB#xduo%6pu{L0<2#P70UIo)PvlM^B$Pc)e-cbO!^VSYbhY~cm^O~E{(*l>{yd=m>4^5}#9K$uBt z^-sr=z;%8pf&9e?%m2ZL`T5$H{uu*lHh#Nidjs?-8M40L+RBvf-&2i?8#V^uqmu?S zz6+P)_tG3k;>L{v^tr zIbNAEn&6R<7+@!MK6szvXXAvP5#Hs`4V}O0+esHITfx-4(TJ8WEUKE=`j08#(B424 zm;sFccp5OappuLe>iK7L>CIlbB{U54?}*!VEv;1$x|QY(3#?)ukC)I9xl8p0ec_yO z1I{^}{Mzq13Lw2-mRYM!A9!%%A5q1)lP8IGF27Yt+nw^f57##Qr=;<>qZiZ_Wxt>F zDMZWBSO*gs4x{}}?FFfM%&9lw+4X6`fkV23 zu`hhdl3wCY4ySpCq9Z?#an{)}jho)almNLI>i*8}reo!2e%1`tk+{9i|*uVclUN+4|SH^vi}DI>M49AGaBo4Wc)> zc+!Z|x7E}gs<7O;5N_8Tr=gUemjI0KSZ$yBs)P^V-tr8KFsiIn?&A#AHQ8or^+yEl z$FET3Ei6M!pp_o-P>M|B2}sqOc#y5k(lpguPM^x#s=ePSo}qJh53v5Ynr7m|zS2X_ zuy8oE2ZJ;|fh8%v2l#aBMKaMwWuwM57JU3s-~edVyW64a(QNG7hJ+ zk@bO3xzR}m9F{}PY&4-pki6?w!$R zFXI~Ktx;y3Om_bYzTJ+%Av^=}3L{zpr);?wWp|SbV!@f;ncW^6aUf`V#k1sb3~dgZy+2i(Im2oJ&z>X!J>tg+tSmx zCY#XmBI9#f^Hi~_r^dJGV`jhj+-sC~J<2`H0H%N?*acGOGYul)lTu$l`^Ud@kX!Y~ z8}J}ITSLrBQMVk%ynu;?QKtE~9tsRCb?mUZ(o=jgX4D%O1D&fx_#xB+IOsA)WteY| z4L2tF?KGZ9G(35a7#f_TiA&2cpbDwaG(auMu6|^FfPh%O2TN&CIMUuyk%2lPC7I%s zWaH{rv=@zS+V`ob84T;LCJthhWoR;w{(i-KLj ze2>#cm1_>fTtdfh-7;imH~77wVj*6v{>i%8-dOff(IVV0E)BDodqC{QK_{c{GRoki zOcQT)ItyP41~fNoSz!jI2h7`^sYecwOg|kSzp6JVvP)X(xY9P|&t0lP&yJ@l7A(tq z7qeVPY}tl0Q-IphMrMG(o50Bz;aBBu2@X#S4)?pw2{nc7ys*IuBd#u!(Jf#z`*7@` zRplwM`Ce_VL2L`(I$#<4pYE#hvxpbAGpXiB>5Z{Z1GN5Puaj>vjp*!RZW{7+0JclbGXU)>v%bkeKg~(BNbSYaw zMjAIb(hV46zb&_GkxUf}TZ#3Vca_hhK%Gd6g-WXrHTbpa(34aj9SI(QS0rUQC}=)t zKQXTqP>>o%C=g{iP%t5IbPy0|XpnSx)byW1U?SlE2@Zt71i^105!1KqAAjyD$D3PT{i+~9b|0fsc4s)*$0|J6f z1_D9^^1rJ%uq8D)Fo7f;MidO5I7k=KVCTiX8RlOtqADODg#Wt{q&U#<=f9lflN3q00~etQv(QPE0s~`R4U=e0 zFn`%{8%dJjGx-%!Y>fbnmc?CAIb>-X8wmz*kz}28tt>rBu+%< zYiE)rktjMB$7UgT6uq4Dskm(XC<gWXvoN>~5t=ov6tr#=4SzQ~FjD}G zZEbDE6W0B~o5t6#><16P9xFt-C{oqJtsL?wdUht#@>MKLk&2?*87J}hw6n{)qQ?#% zDLie7P?lN#uE=se<*-Oy1)iop`67-Y0m$&i4sqR}_fS!o>~>~YwWE9J_t{~RNx^uM zm}Qex)=IsafCAm1({sk+QGZk$rky1Mq5e+&Y~Bt17nV=sP7`H?zMOsvG0)CKt*ZOXVT5bzs&hu!qi@EESBO@i^h5M5qCLii~0jWq-f|%VHs#s#Fl0 z<$N5MtKjy)U_=xAmO)7CAQPTQ@t|I%j&*+=Yyo_3#^ncvS=$|!Y9vjv;u#;$U?rR_ z)$g-k1S`Z?#Akx>qTnmZvI&!A5vNnR%hIf5*$89<>20-A%w6s=E(9-yqQq_|iq8xh zpejw|4W9$^=;Y_YO@EfJf*~6(3Yir_p2cY?3O38mM6o}b1|)I>Ni53%KeDpmsf=MN z!8l8@LNYvij|Sm=F+YY?O2@o3tBHg9>z?Ihjp`8@2M5hm>4I(-x&j>^m+_e}lWlB* zkk%VLpW0^XA6UvLmU+Tg2#Nny zsM^14_Knx+*RQPeD&uefhhf;MOv9%}X9ry{kw~!?zb>*gO9&=eA*MyPNF#^eI4iy8 z1aS`#{~UwWH`8z9c1>LKLhrmvE1rW)ayW~Vs0(1J`ldSaFBdo0uUC24BZq@E69d#f z8XP~cM7#+}e18K)TwKCOFQhxX;db!sx_OYgCm8Ti`V3z5{Dr7H~g) z7tHTeFC8ngHo)$Qx@!=eR56^?P@H@}juVCCqybWMYJY6BZGSiE>-UkpehqT+ za>?*6AZ0e4CgMdb%dA-a9E+v8gn*=GzOe)LgZBZt*YceC*t-Oic$( zOsAD11;mr-v=CEXW<@iMvurV)m89WviqB%X;0c_-qSCO;xGZZE==a%MxCKq&EH8x2 zvs4Pu1EMg%;e6P{uzDJZ2VN)d(Z1i^vTdKsNC zS@L-<8FaX^fWaN6oC)kr!nMQ9aT%901PMRK5$lc?^ISwMOPS!~8CytEXmw_f$&B^K zS-t{xguT%()QFCG3hK5(NSfqwmL<+eaepdH!6N`AE+tF2EZL;sQ>165@v}2w2W&tK z^PVr6#3?#XD#lb90{5;E^LR05AAbG|dkJikb)O4f&O|{! zdzyK^Jbe4+13SR;DdlMfWLoUAlZWzb%FgFWDi3yMWts2y`^)7rT;2?`V%i@L27|sl zo9-|;R({OR4|WD@z=pTj@YW8S#7T0nqc-p%+`V@mJp_$3iw<^Pvmv|9UVpIL>}Ph5 zynR#|X4yTW{zaa7I@cJ^-Vu$hRbvy%R9M?;#WVh3n7I~5hAsIP(Qb7(#! zaVo|k1C0_U^Mg zXM4B!kPR6?yB7@E@WoyCcQE|<&ip1D{Or_X!(ce`ezW1(5Xa! zR`BoM4m%&J-|+8Us7%1v%C{<&Z`CW?#Zn4R$s!o4FgS+9~JJbaKY8c^8IMi!Hf8sdz!@*s( zLilIBp@vM&LXEQ51QE^2gm$0yl) z4disktBDOORV~uSJROT95m7VZ#`wQuruFmp2LI7G{08PVj*D?3*!Y}w@pwi57RdG= zJ?vBYCCsRut2oF^;(V0xqKeFU5$uJx|A3gY=kXnOYc{MLtbeuh`A+qGuAI!yNnD6= z$<7aUfH)B}1>`+D?^`>pfF;{u1*{mfg;pNIXX32L(kks*qYC~x$%;9P76lqtgW=$h zNW(RrhzxPa_HMJid+dH2PbAW=;Kv%<{^Jp`Zg<{yH>aHwFN$pW9sv2nio}M~-1dcw zz58|HqPFsTaDO-1qtzd>z1FoCQT)fnkmWo>HXO|ETh8I|r0_Po8Q$i@aBsNB=)c5l zZnB%N?y|l6NpOqpvAy8dD_!|F+Yw=Ed+Wl}PXn{y<$IBEFlK^=sT<2o=|;iQg}=xM zuI%`9NsV|ZlzrkUFR7JPTfgCNx=;f&e%NWR*W61ynSZ>FL8bYcm$Pt^WLeSeLWg0R zfsQs{m2Oy{-5Cr912dTJ;vw6!L;RP8ELoZ@JM~(32BzA{wJ+-X#hmeJcH#r}qVVC; zeEz!T={<}M}f)I2;O%Ftix`ARi_Ie zqI*XNG9NdU_^YRN}g0d`F|H>xf&?XxE58U0~zFkpGG$MBdCQO&gmH18u` zyg=ugqwAmL+4OjSUIYU+9|e168f9E2IEBM3Uzx8`luydCh)0W3bUVC=xiJ)DMXf%! zSbuVTx==|OnkxWeo@_0WwytBrz{VSyiD~Uh(wr(PRlW@5o+!>s>x2m8!R0C)dk!L4 zG39458elAlkHcjVm*`*W_?H#g5_#G)xK4LFhq^X<^6n*Dq}Ibs`+?wp`I5&aYZ%0i z(M4Fvk*?S6h2>17T^G(~j4CC^15?Faynk3kKXg==;h2}>*#|9DbTaD0Z50qWDcUv6*Tb>VsBA0kBo+WE` zyUe-T>r~a>*NH%n7u={Fr;_g|Lp;)OT$rZfxJSpk?8_`$6#J}`F6N?$$KW;*r+RI z_TxT7b1=Czuq2ztV<>cu?C9#E%%fd$lGC;x7secY)Fgr@Y=8L3^bFdQ`tE^;8Q3!Q3Mo`n(5|u&N zG9#WOAM}6@iT!OMiWT{QWyO;u>2^YZ0ZyWFAr-f9+8WnQssQxrGA#YoZWG4|%+;nl z{$TYsc57)pm+QktFoC81XUEXoRgP@{Ma_Jz$Ep>CXe8`vN8zR_4*$PUi+}8RF{qxM zFJ|u(CBQ+CwAQ7`^zgJtBJ4hcQ?y6y!R^6%QV@Z5JFyIMLv)>8)wk;%((khmGhR^8 z43Gg1N`e3yF`vmX&jr{bp|o6PK#`r2MMXR*8P9nEhC@UDh4|Y-$np?@R$eCSd|haE z+RMe?J?L6s+>DwK=+1tl6MvS(bvuS$;R@KauCAk}T#V+i0pBkCg$tjFnxSsZ&&^<4 zhb9Hz+gzkiW1eKwj^mC7fb{ze!%G;&vk-4mP&v^w*RQ+LF$zpueibCveX|;TkZ5x_ zLx$L2*TN3|wr+U?1nB8niKGA+L|F1-D#{Q7iKGTX5j;-mITUoCfPYJP2>w~sCh8P7 zU(b|psdCx(7TCmeHGr6NSymt<0L>wf9yZsnv&yFsCF-6l{vl-SfO$|iHA2u~B5dHH{~oV^0y) zhA_k@I!Ey&j-D&hKtHW5@S5pbngKT(cO#%!Q32MTs!$W@#2lz=9b#wM60Zm#+EL*? zJNYS=)PKWSBD*6hwAb6f_qcIJuladAU(8i_C5T{b zoGs9k3d1c~_u7}rSQkArOOJRQFl7>tMR%}U+advLnxl_}`gB$Bk`pB7#5leeJgN*& z&9n&Y9776C?!nX)&E%H1hcfN5j?zD*Ss5U=5Gn)%=YP_$jVz2FX9oW;y4Z^)gW~r> zi;yTnz>hFXRotl;_oq9Mz|#(xIdJI910x6n5o8ln5iUs-#?&!#uZa_$^Oq60P*UYE zP9t&tcGB(a+OQ=MYIQ~6-oc&?r!aa=Zu^jn5e;XX-C%nrz{DpC+#O%A2e|Of#Yd!I z!&%H8(|^v(FP+F*S&7l0|GKmi1Qsnm4FQ?KSz4!*U=zw)SS zfTed<{trDR_~!|F2mkc`mCFfzC2QmIIy&{Hh-z1l)mWh+hSH}$eWmQi^XV>&qw}gF zZCSuwealt#t-*8-1xC%BQC|ATTG2h?VlK0}R*6C)DJ zVt?$3p4fqrKlPoTW*gEVvKUwH3RNZ5GMFrqgw5z5iscN(sP}CQzqB4KZqTLrN~qW4 zWGUWA%&yIHks^V;&LW<49Y}kXC8O>2mq47i(cFL-lud1kUsLmA=TC)TAoDTvV#-bZX=ey=~ zZa-o#4Bcub=LLBZf%{z0tzdxe*?m*v)ougTi615Aa5>yqmnYPiLp3L;27i-ezke<* z3)G^lAZ}h1P}kwOmqZX@MHn_r= zSV&;ZKfQm&3K7NN`h>Y}AWO}Ed)2!VbG1WP`0JJh@v`tXeT|0MqZH{PP$v>`K5eKt zY8t;Svao_wg=pKuW*IkJJrRmo)qfs0h00e3_519}qRfIq;LR1dF)svPuO*^fKfA1w z+K9rFWw}a3NL&z4g+-Z>J*J_wOCQHYmLxCmV~^c{qy*4{bRYdbd%@Ev5$qWmT{A{H zOxFD{iznp``V6<9R4jp2_0~gwDpo4Kwx;De6)U={V4oeJ{~tssVVM6aR(}f54O*Y= zX2t4-GY6%9hBzdimc|}JkvDM~OcF%Nt5>hJ>KX1LAcupFNGr4{A`8#rki8dEm{dXW zQYV@hoUkq=ih!e%RNZP#F@7qB%V8lfMk`gZJA&*cfHM`dG~*Itk-&jq48cK}A09>k z*o-=i!k#F=ONS2GI3E~1WPg8I@FF7hyk|jz;GmSnxWI&?C=(P`lxF1&g4nm$MJaEz zoY*n0XM@tbWkK7{um%;oT4+pMQx-}8a30-wl9V@yKo3DY&6cUPO<+vzsaTC-JPj!} z?8F2Kg%A_Ljx?(;8c4;MH)ivT-q7cqzU~;2ywJ2MR5)lAFu`XIvjM*LS=aTg)o@<#= z=%eg~?4yPTv__Jhd_jFtr#9uz#R(hn@hQeXs<5zFvK%mgST@*&TL69llpg}QF@BcC z5x9qIBy}O6xk!0JJ%5Q}4kq#*wM8iqbte;1mN5iN@^}t-14R|%dCn4XCX&#LLiYE& zQE)1+2g`v_7Y|uv=3V0^gdPxhPj=IcdHN?PZB)?JwNoY%GL~$Hyb|mtW6&~JnTVb_ zlL?nI9h|totuA9Z(I@5r%N9~aIcAFzxPlWynHSkSFLkF_D}SUuUV}RW@S}n+6*n0P zNExDYx-m@AhO2}L)4*=K%Q6U{TgFmQFDE#k6ABQ8$WE&+9Eou@7gAOElzvM8d;}Nz zWA=al?SG%(f=+mnNa_eYLl)DS-Uc)u4$+ltkwOULG>v}~k&lkh1p=?A5N4alLRzj$ z5u^~R8BqZ02!Dt+WG~@v!0kyaLL9jRNkXb05gM(ZtI)5t zCE0@3lYXlqdET}W?J=pJ;-!rV<<{K+nkM7Hy;Wl*O@CHUUFp3#qg*4ORp(r&&GiH? z1!k|Z9H+&lA!(30q*nhn?PzOK^70$1*ix^FwQO-X%})M&?F$bf(ICxOB^d;>`Vswo zj23m;1Dy*7)d9eZ6J-H|yJ5HUNsE7qKjA-*!8Z~9x`2Ij?TZ7}#R=PY!8G`AE|)lz7mxp(^`{x`8Zj z^H`QK@_$AbS}%|u`opgpjff%T#k5;NPtTc6J%7DpiIib|j%%_NEbKCdBLVM;R_ZHx zDah}`^^^dUh;n4X>tU0J3q<9Ew;DqiCqcJfiQ)=!ce+dhP!Tm>Epz@%%X|l@stX0K`c(m$ z!f}XL*bu_@@3G;4-LoimHDEC3<^t7w?|*@HHk4=6W~cS%cuf80p83x`WA@AtLcl6< zn71l%n71o&n75N5yE(h>hjadR3E{TWrgwO1vaBbaZm{09N_lS5)8@|B>E&Fx^YZph z+D^v<0KKBJi7#6EBIqp6H*&V#f||ai$IZ4~GXO%ashqDfCOLiU+LiuiaUMWX$A7O> zP3qVv7dJ4S{o2`G8J*;~IWMMh`d$ljw@3|HtEQ4I>R^(_Iy{M|=}RzO;e60s)gk$X z&;;%~o1;nBZa@HjzfQ3km~?pW@FgezJom0f-)CaBDT%Jwe=eSrov9OVl&X4 z_f)&qZzYfL|M_1UyFjcSov4LzXn)x))@W!cwj(-LQ>@ggwHLlixN(tbN__1i#Cn8R zrG1~-D33HbYOm zYS%%#1Mg*x)zrVCEl#(g9g=~ei%Vd3sl)cw6`Cq-Kb4ahItdVXq7?`1jR5eM{O>=0 zBKTR=wR}?mv?%d?FyQ)$-+yaxwe=T8EYZyn48$KXEruw-*bS~+l%Kl4C}Nd)5|o;2 ztL6!hjpP9u3+UeqM0DgB`3vq%7~e(+f{p|;!$Gf)!#v?7_zFL+=wfZq&k_a%z#95+ zs;RNO$>)mw1CTl~G^p{chHwGsUMSmw@9<7VXu(`~ruIL1-t!A5ynhcc;@1V8;(p&t zUX7lxAO#3GH-38m@(`9a1qonbRnULMmY@3Y|Hu7Z*6HXF1s!#vkqcIiaE>vM{l6aZ z;I}8izaH=R-3;oWfmJyTfy^L3qzd*^YWuU8BabQ>#Y zg%H$2$dEa`|F|ff`hQ@pQni=}ry)~VINa|;6*7I16@ne^_nm%T+CFeBw>37mK!P(H z&SU{mc_~p*sk4 z&qt7^^rtt6M2U}0T`7t)QS>FmTb;1rk(yJr%adJLr!!cm6MwIXhkTmPH^2*4XET%w z{PV0ps2joEWhZK&6E^3kLIMicfcGI|OUO7WBGh0mN_GNcqh)fU2Fg;V$oa9`^pz+( zlEw3!BxLprC)&t5*dLXxOp?(czAUC~qq$TN{V4wlgR! zAyjlnjiKKaFn_=qpUO#w(I*N-xtLCc1kq{V-S)%ZdEXDs#{blB-ugIXK6L!KtrNF1 znI+PYUJewATNa-nMUt!lTPHC~2t)_5V|=U-%v-xKX1@^8oP7F3bw5>z3%HsN1yZki z;hLHm&`8`N`O3y~=-&s&j_?wqj#!j|brH1xL|QRqB7e@~hM|;J z3inOPZVwLJoW@oCR}*l?1+aZkS6XV!ux(H&6wQwdsVK=2M-H2eNO+ z9Fsms=fjD$@zvOxX)FC046mEsHW@P0l#~y2d8W0zTjDZ(f1e3qrhxn&31K6 zyfU9^IxOJ`P;$Xkl+>5Ds>Ts{aus|Tpt8Z;c*+e)MVGLI{}zKMQkISd`3a(PpIF-6 zSIytuoL|FXEjMmBnM1A+AJZ5fgTVupuz!PjoCeEaV540&NMxj970{7^p9jm}=-%yr zInDz<>T8#{&;^Eg7hkZ9vB zqRq=>p1c}OySPUw*p@qgm^v>GTH&({;OjRpJn4hH*RX7C>`5=@8YHAW{jQ<@+6bbru!;EZ``WZ2Y=3#(CtA7nGtAvQ|WPaLQg zh-2H^0A;*G@B>hUJ$KI#oPx40h=&zsB;~PD2!0h7f zmP{pdo2dm-r$h;8CnqhQQuOtY`ky`>_q|u(eB|h`W!w9{+YdcaY(kf94o7CiAAIS_ zB%HABRT@*7EbFMkM(V{M6n_~TvE}`?ID4o)CIQleo$k?JcaCrLcDj%E@fv8q^d3Jt z`XoPnIR59y4?p!)t4A(Y$qa>=AF5a-t1zQ%fIt)!h?Es8Jg&8=Siju-;2(QI)}z+? zmD{uqUIWmH`*7AykLuRC{L}#N=;}j6@E7PSWQ-v$Ak#_Ax76T~i+|7c$kRAiouPm# z#QY$}U@#G(6}MyVD#oGNAHa1-p>`pzx4-HQ zF3)~9zWLm1t307KjDM}f15CC#1)k$!az$xm%Wt#J;i9=Jl>Y*<3LLKm&)3zRQnfqz z+8)U%taC3vM+zAz?}I8!(4rCaOmCAJYs*!=a5nS9QMD>QSG?pwPKJC9 ziRUWN)&^La+XjC7Z4gB{k1z#l?#I2sqU0GSYjQM-5SH238V$JrRQp&=L#P;RYI!9$$r* z`x;|JYJ>irZ2y%o1;m_JqT>`i^jF&|&8u_2+G^JCK7VM4bZCgZaQv};Z*?2wZZ=uP zt7^BJ;!LIfa1uJFa2$eM7Izjg`xMTjF1$UTE@0u?XDM%i`Vd`mJ zO`vbvevrf>A?V3}OH@^U@ST+JulA`BUMkrqrLJjo{~j3EuX|6NhLk8>VOi~-_0YM^ zjfvtiFn{YAZyUkWsp(t@U1fU}rESqZ8s0^EN{kNv`iC?iX#0%MIlg{nKX@F&^0nu2 zf#=~OJylPZ!egL|!bz9>-6^Nm>eMe)hP%$k8!N+`wBcr9(6*rgXc*<{ci>I0nw1+R zYg5p78hYLAI=R_t;)LuWEw4Qj{ylD}RRieN?tiG2)>jlvE)hzuD3$2idU*HPYY zb--zz1c|D+;tW%5*gU;WS^W2k4Go;vTNfJwjd8g#<*hXgqe5agHl;B?TRB1Ac$jRh zsj?v|FRn(>$WOiZ#*H{$eTBU3u>@~!E(6}GuE`a5jN|&$@*+C^uW3=~6^7db%2RxM zFn^brZlHvO?cL#kEpjlW$i5U~;Kn^X9ppU2>$)Xoj?@h|xy&g%x(9e02 zfD7GrE2I~$M$=!jgT^&$B;u+FQK^G1>$^->gX>~jDP=42pH{%9I507U%?N?dD!3rb zvgJp}g+dRD*t8+=ZEZ%cEMEm!%L)ZQ;D2we#jWLef?pW}z$g4@de?1|jkUk=<2?knaZwoM>LQ*!shBSii(~N{VgLpXg{qqQy$$wms z75>-1q@tWc;3=Ptt~6M)a%Pr_{n3CfL|D6L%i5Ez4je-?)-?>#dr`(KGW}l0CaZ&c zIgbY}rPZ07^PY@;0K(*+8i9>SNS~Yb*htJkJHi#~gXeBS_B>h08D%?y&44|DcL3UF zx*0l!!Ji`_NM5XZm_M039TdxBT7S6Pg`8C;7nVt*qnT{PCIz31(0Qt&W*osg1gw+g zrug0ULYn}{?{wnb)V~Z>&n@ejRe1u)t@U8L{WPf^WN-uADsH zaio#fsjkk*8{U4Y7=H|-)%`R@`dW_Od6QX}rjiU_Y$eKu0N-up`<|S-K7Wo9+*V9> zA=4E)o0l1w2h%cSAI3aQmDdaPQ}JaiIG)$#jHfJv#|Xd^WqO2S3^uVeBDX(lwKnrdy?%eoSyLXgB3I? zwCb#@dOOLZyJoUo`v^{!uRdnx@wLt_vnhC(n{)CPm8Py-#;K-xlYg2_Cv~FKWIFSf z_1X1YuIXZL-FPJ?9@9HGY+xZa=aXfbRi9NIQuQ4>{M#^9bDnjv1|b)G46@>>&`*HE zRcxQ#+Z*n(TjB6@m+j$y!ke!{_8L>a5$XIwj82=jJJyxiq8N+* z0$}b_K?uqFY7dYqh<`o;K(dQ)Ne8WO7V{Bk1myELjZ0xFeEmvuknEw8%Z|*bTGF6m zwg+#9>IzExfp2i4e5iYL+-N1d>xS+hZWn_AWTH}^`uK_M`@aW+fz!)kGKtTdd+D5_ z&G)sVcup5{;0HAHBY1sfu#Ikob%?1F#o+C$CSjR92idv1=YOVg3kS~jRv3VRZYbz1 zVZ2vP5lqg3cTWqx5>WuBI4&XPCxb}zX~=eHt@e>x*jM&Ht_{M$-cAquSztFnE|WNo zCFDBOloGPT45K1hHjhhi2*Sjni}W-FrB)a74MMhHk@$o{Qs++q$4gCYT?A{FjWd0F zp=eBrX@(tvg@06YS&4a;tJH+mLoB69^$6#+?}X}Zb9+qorP?#y*!jrzfkM$YcB`ce z%8yv>!~Ke#IJdSEa!*#?7tzO>ULbH$Y2IbfT6b23h)|0DZ?dfT_`p3JKR;x!=;-e9 zl|4iXK$1p!fN`OgAxirY7t_%CxtBSdQii(cbQGW-UI~iQb>~jx}@3MXnwe_yE zUTLN-JuS8d>-(mAA(t$Zi;jYY-efE*;wijLI1}U3eNv#uU?tS~MpYhGx({$RDzYWG zI8pY}kLrHlr?`U-VC$j8CUHmaqPzuh^Fhv2k%Y5y4l-Oxocu)PF9^WllyVQ9uz>Cu z_$^LnqJN+u7USiwGsJ=rnUze;N8liD`~(C?pIvu7OqvQ<<*#y{G#Oo!maQsqtv zRnA^1=F>vt`|MYK#vuwTFGDr|P>S)Qh|5(Nr^v&`G05A{t3r4{hz*omFQ9z$s@v`9 z6tq2MmrTEL1Z=;UUCq)tDr+cbAA!+wpbr* zO(Kzt27yz}$_vR+DDlH|G&YTGUmM<=(S)~F)e+{2#2^@Yp_p|+#g3V)DYx+gOk{GV z0)Gqe$kd5c@ySTt3pTMk6w@bAJRj^c^+Ku2ouQpwA;|!R3pBhBNUj7GjWJty<7SQb zZFXUL(|C#{7%QDe9vgU^d$~S&7{zBSjt+MGfT10RZ1-Si^9MHcLnW3I!?WLmok!Qc zkjhGBhP=QbRrm8U80we7cOEI&^^2@w7=J$ONAcMs`mge^_w>k@Os~^%X|Oe`V{2N+ z)?hdwRBKmbaB0MkjbV<#UZt=W-`F1ESTPQeud7LVqu*+N2`g~MlX|_dbY5=Wsug>4 zB`mePN7}I4)H0!YJW{*vd*ahBiBM~|R8#@ukW<@9O22`Da;j$dlw{WFE9L-|Uwxhm%NNI=(#AZ~L|YU@J60Q0d=UzEwK@ zP*$<@L4VaU+>k0PITbrKsFX)V7`WumzE?7V$c|?hb)jd92s%H_&Z0{%p;C}LU@-d6h zv)EKgvnBAs=Zhry7r_gR^Po?!v$UK!zm+3Et;>G_Hd9o(b%%q-ASHBrEMWKU+(JEs z+Yd;sPx(qdnPwaHahLsbQ-43`vIFPW7r2B*eAU@!N5{LYV<6NYV8gMy493)--l8Wo z{9qR(JG(?j4|IZZ<4m9_#=fJj#5w=PJ8kyTLIb@i{`IT*FkVLPPxbH1$UX&n&rPL7 zj|8(XEDUwsT{XysQ;m33U48w^Vt@IDzv-$Eb|H*B zPIy03C_E;C93b{QWH39E>h#fpM~~HxXz{Mrky+zvXLj*7?a(2|YG*Ftv~{-`QoOY7 z5Rw_E44#n1{me#-@u`42?<`xgImEFQVvLDDXwy%?11{8e3H4S4#fl z8#xsC^(%1fz!vgqAt`DIEeaBmmPOnEO7{rAyutgP2IJU&Z^}T|`tpd&IW~0CQ*|p2 zbEMYM0~^rDut+rE2Nz+L7osYXwnr8@4VsTGa5~T@)?HLUp?|l46!Ullxkwh^ZH2M~ zg!r6-3*XTo9Nh6$Rh{~1{t;*9=2Wb>uQ`of2Yj;}ZM@TAb{j6n7S(Nw`iASFi=IkE zGB|Aytg8l_p9g!ctHc-*Tub}tqjJaq`H!Azbe|B_pj4xk)s?8}%DvXYLdpQO!#jq? zUq<`&Q^V*wE`M~OiBdf0?@=Jw0FhMpGM{pcpznBt;3=d+);1W&RId*e>}dzrh7r~h zgd1U`YWv-jk+Aw!EbbPOBylc53uxZF3DOMn1-SBG$M4 zgVKBNw6e7;F%NmL*Wj*IRTfqDIb2sqym;XzHK;(RSGV(CV05(Ju6`}w8;ut+4{)6+ zKQuN}e@Pa5MSOa*Rm|oPYVD3|1 zxG({xqePz)@Ph(}6L9yXcfiR>%Y}8$&tEB#08E|UJR10hdiB^+hI&uh_tT?~Z7Ee$ zDZWRj&zl@rUcSP8Sm8D9I*~0C))#yV;r@PT6Qq_^= zN6LchF{E9h7B9+ALu0*y=?*HEAJw*q8y}D}9hjQeuiI7txJN_I09#%G-4(Hw>9&PI z*Xyl6dNIy(qoa41ArIKM6R@$1#?M&?G3s?Cyto_pjM8MEwY@uRny7~nokkivYZ_A^ z{C`>XebAnwfv(AujQ!|4k=KA;pfoL96|8#L*upqU7KM?2{2{j2(HgejW%dkodc~bn z!G=V4rEa6_6NyBWS9uhC%d}`dkZkck=8@!puMefC_^EOz*?Q}aCDpWYEZMg8gQ+aI zoK>q`>1?`mUsAu{C=zSA$Wyw}5n7R)+&aT#v=8WZQ&EYxo+NWyhOU~e17agr?+$+ zE4H~Y+qT|0skyptDnz#FT2*_aZSY-n+e{8dlbsjYSsaPtsdCKkvFaDtT5rjaVtwE@XG%(}L$S*L|(g<7tiSd27Ibo1wbROx+qa*Ra{F6*T87u(3L3BY*Ry>Q<)= za^M_-H540UkEY4X@GqC>Nrl7Gb?t|@;K$e z0bAF!{ZUINiq7{-sQ9ro^sZmgG?Lx6`R~PcgTlNCg$;Yu#bK-0K;2D1iH^Mo&E@V? zFPfJKZWe2hSP#ipl7JIC-+$En!8ag8@s&D4erUzW8p3KshFCK7;mLGb2z;%>eHr-5 z_^B@mVdi&03UIK`z!C8&=MCz8raFHoQX;r9w zds#2cVu2|zw7c>wmf>dZ#JX<9q6BGoeM?3~>x#{0n_G~a`kN?+8|)=oz`t9|DYKc@ z7_aMeH(o+IEmE?V{rD@o^TX zU`Y$Z&|Q`BOq>QyPD94;ALGhyr^!^_Vg64M^# z_{7Xmqm_Piu1bUceb!*CPJ6X_3JQNS)N0MNJ<-&{}TZ&QS-ZoaF);U1~cSf;%3rIe|heB*qyx}M{02t20G}AUjLbT_b ziJzKdVI5+gBiE3kG;W&Cjw5ahtZzY80ntjtYZV9OOXlx&FJzl$;pNb(|AUy!VSuo3=BF3hsz?;{l6Y&I`0 z<7g^MeScPI1EVz@=<;dJ3Bslc%(5ilW)i=*lxZK6sEai@L)iH?DkAmA=agr8J(HhWD^*Uwj(A!1F?eVQ7VD9z|~p(n7(3*mWb0l)6hj8YhfP zdw&JTQ&Bq2EcyI^uG6k`VIYC0w9Hp;cFLTpM%vJuwE5HmZHPLA%C)DFud<=DsX@J< zjs*1M-q#%m1ILw=@|&F?^?*evxc0>&=Hdi}lMfklBC_yNib;&`c)5mTVvZYof|}~B z$_R>er@48lNWC4gp>dfiSM17m%UtdwF@G=7fy&X2Io;MbhccVgJxs6SU)lgJ^`ZP& z-FM4$zErSzpBs0LrgUdY$!UT`)NgbUgw&j{snC|G(QTK?%f5_LudQZt`ZPssZlP(S zDpVx;s@2`SKG=;cy^TyvRc%P`s^loWNhGNHDrn!|cHT-(E5VEd)1kmhqWY7!=~;{;3oU}wY63x z(%7v6SE0jqY{n%^Gp`eBwW~7F;djOhc)l55{{{a|u)W9S%=FYTv7w+)M2jOB=_R;H zN|DloX}e6>3&uQ;A%n^x15PKTa)0G)!YmEeam-o;U%n+fxlQ_3E234wR5#eR&qrBN zqW9=mGt+(?mhj#}wY7SV{#y>_y4}Z_3l85#BWj|X42u1D176<7Fv-g1Sd*mGrtvXv zadsptxjdzS*)EXJ37EuAbe`5-CR8q-(MlO?;2G#`N(rZuw=Ijf6rZ6VNq=q>#R9U_ zaPas@;Eiz1VS+=zF&Q!lEm0$2Ph%iPm4M5bij?0WdVfG$lU@X$&c)!~(IQU3yMkfO zu;#Q-x8*r0Ih3r(4%m~T;Hxl}_^)1PRgB4Yyf19uc`^=RSre}g$VAz|NpY$AX$q4? zJ0LHj9wEvLVz0!Ul3g0>Vt>wq({p&Ym@6nY{{A`*Kfn7G zbP?a9hG?{M!RGUz$%|}Sz3;i9vs!du1t7vE_)dM>; zS{H?S?$kF{ERg!s&KRFf@`#4c7_XKQLD@Y{i*knwJYp~cbB4iX}S9Kt#Tn_E!UpbE1kDZ z;616$wg}X$Sts3V&4&89%dv|itrsJ01VF8)IQ?vPZfjq>D6-{ym0w(U*IacR7h@2@ zx4-2s)^HWu;Qpm^;eV||6Q-7ftb+l#r!J;5m(|dditXLFIKqy+I9&Hd#->Xk^{4%_ z@I?kfPf@wU0Y)v^x7_Y(H?~4u>l`+qfyLWSJ2SBB{=hmytA;(Nld2Bs+85Z+7yWBr zeAxtFCvI>CZFahHWGj2EbnbHY+t;u5Myb9!_W}JWtZ123Vt+&P&5aVrH|Q}@ml6*7 z2%Ua2HWJnwcqHJZdDjElIzF?2x)~cUY5ELzrgYWlIE*P}LEcsV&C0tO-IDD{2#^hi zqm@>1aFh;A`2+*ZXM)A%b^0IL#L8BcQ|~fi(4i@4r}kt;i?PYtK;53EeZx%U>qW^i z!RrA#>L>~RGk-jR`&n%lh+LU3k~03>R;q3j85Ywk>B&-DY!`f4Rz zKHwM7<@K_Akav{e@Il}H=L~yS&9Cvln$6vF;vj?*?-w!Z_I1;wX27^tJ=MCt&6b_ z*CkAK_^2P)eZBR8OFMYQC(U3ttC(gV7O-qU=0PYS_&4P$qCuT)wGlQE3@umwSPCo! zdB@>E_(wii&v`R!Owq1n7Yp8PIakET)N>M*-9#G06aI!k-?c;fY;MF(w4EV@sY5t( zLzBl7kvAd9aOeno{O3Gwd@+Lt%FIbh^NJl2wu(NTSiIU~PG1Fg)5Y4WzCC|m{gnsc ze|UD)^*m}E#1(FH99p|5;^nGe=lfaZlUr&i;VU zmfm9DoA)5tFU==XZG1^zZ-BYVI6=8}?Jcvl%L&=h4 zh*lqD%6RbfI9_FuRf7find)g}H%HrhfNgPxtfbZ3%rVYt!4ib*z*dTu2vchUgVn*`!n#pLg8h z5?USwNaLyw{s*#9Y;Tt~Wvo-k)9eihee&wvo|yz!3nzksu(UIY+i?A`iMM zR3af7EN)A-s<9z`*8vSDu$6biL$uqjk*T!e6=My#`L(9U$N6an=HcaIT7tI?>FtSN zx#qjUEvUlayL!y*dEpyW9O>`o4S;~{WhvYUCn$=GA3sr%!&PO2Hcb{-{~b^GWh#S* zLiqDC=`2Ytgu0WpU>|w#{i;e@OMd9llKkCkr`???ey^&H zz<7J5`MHbg!)JY}7WO9{?%?v;b3kwbpT;@8X@PEsZkwg8q0~&ZOME8cV*BD%csJWm zX)P^nERBHBS{VStu*3>b*P&k52n?@jKxzFvJ+U#tPB&i`w5cx-@(d`W$A;NTQpc=w zLJ<+geE|FYDMeVrkRz{*6l9-c4BNC@Q%lm7z}RIjiRN(k%f{DuAV53FHD?`sd62x* zeJeXPa2(wd;0_SfCOC9Iz~!nd?Fm-yjIOOcVa@B7WQ#I|9vKJ1S9wQi-2yPZSY;}z z5iKt3vABE%+lQe5K zmzl~yfI1g@g8iU?l#xldS7MS_+_C%^Po5Ba(C>3Y@;QIw7W#McK5Jwo5cym4^V0l= zXds$KRUFb4G4)uBy2M9p?Rc{v7<@J7@U^2snJ8^k*Jk0U;cU@U z{x6jeuNi{j47>{VDE|QnG zO-tATZ;H~w#C*`2m^%j=Bf*edZP$wm&WuL3tQlIvrO}v0&ei1!U8|=Dous+M?(XS0 z-|Ma0+XEFw1Rd2G2&=$%66Fq4$@`r=V0TZ*H{u5`M3r^SHl3{PmYL72t6n*;K~tRR z_dQ0YaXM;(f+UZ^k<0Pff&8{;)dib`msdW}-;uquN4}6+L6cchy6kH@%}}8wgie|l zhF33VdX}=_%T@rPJ%i1*_v13Rj^t=06N8a=C+K4^>sa~FVwRTyZoAS}C8!L4E077k zLpL+%gmy~Sv?&FRuwcG_ghWf7xl8{j`Ggl!5zKTW=6%w$MPnI9RXH@T9R^(;x%?VX zY8@^0D&tL6SG!vvh(Arq zt^3@P;k#49q^0RebL^__Le}uK zd{BaQba8W4OsXPY+M4XU9E33Q+f9L|+6@_cK}jhNT`Q9O^Iz^YybM zTzVRd&H9e;^s1Z*f-NO3I`>FNn+m4ec)}2@bz*Z*gCjWwBhd-~-J#l5N!wbA#{&4O z$D2h3rk2f56kl2Bh-pGGP1!z@cj`3+V(0Db0FLY&4bVYU75|9BQpN1Mn*rc6bi0%$ z1SXl5LJdN0%qK?QU&OdJy@NwSr;ZczS=Y5{OLKcB%N>!)+FZPBqQ-dP(~xbk-H6w! zqA^+xqkw#UjP{3Eqs*sS&g*K;+X(7k>3OKszxVtMC0*M;5aTTDHOKCS)pU2Bapq-tQc_5V{!!FnU{XXn;M)sP;bvfTI z9eeq3Vg0cCvG=CV=R&GD88;*3U%W8}QLpkcf+iOA5pE@9!j4&J1!GIBKs~;Sd{tKG zPB?Z+)H%=3AyYB>_9TAfe=g|p%+`OAY|AR=qKb?;CmpkB^tCuV0#t#YGZuZfWbS{n z@d_LPxa2u%$A7)&?uAHmabM~v8hX@4VzVxP+usM&oPXe2Miwn}kC4z)#xJF9^BX7Z zaL89~3PwejbGx^_x>i2SC9ch+%j*;2AHn8ohMT0z9HgghwoY)Y7?N!w@5`$7EAiwf zgizQiq$;sShfY*2EzklBvK!YH@U?k9qNlHKZ_F8Yy=@fqHbkCK`0zTDsi2H&4qO-X zODV=m%>~K{jlcK*a%4_}dQXJq#97OF(r*8O?^;oaF@=apiTlq_tzL2N=LX-M2Z^dz zac9a;z~P0 zv$kD_jxpee($T}d9FhtJC9Z5ZP0^eo`72WI&jZR>X`t4TareU=fj;&qppiiF)I%t@ z*@d?vi}S{!&~T2@hv@K@+wwc=GF`$5Jn#2h?{BD>O}V;mnk9Xh|Obb%Uz|}lCBrfMm-6&R`c9qL;317z9do-9mzBYU20hjrQt0t+oSw^*7BygCA;68Z8wYH|_5G~#MOt%-}90x+6XR(&1@}_tRWu&@joGU57 zfJZPsVV}n;f`Mn&@6H4EJClor8vYj_oVG!1oOVpTE@$HSk)fc_U3lpk{A9y1JmX_` zn2=VolfZc|sC>-aKG-3|A@0c8zCa1356rz(;fv~ND!_C@C-vzO;`kn3h+laqGV;|$ zd**HX2y6q0E-#dgA3s!H%8Ke6qUXVOZn51;4s6;tlA#bHj)GF+6w?Fu5D~Y3fFM1` z<@-09eEO$;NlmfV*}jj{5BWgPw3rQi@__Ircy$lw2@2c7(BWb^b75jTVw=_d%9UUJ z^Vd7zNBXZ!3Ka}q_)pz^o1grDNPSkfPUuYKCe)q)w&?LC+L3#nY!`pl1m=OSBz7L~ zap$=C@g?~0VS`9&Qnkzo!_4^kxz9xW+^{BCirIB@|G-PYn{S#o`%2iSmd!niT}&b& zzUJ+3k*2jyO(5<7vNQB+j!<0IpzQPvCcXIm%|p=Cf_zNw`8Dccfd3UTtnh_cchRd8 z*(WGK72vjX0sqF6U@4~DUrrV|KEHFN^BwXgm@WgF$Vr(sdb1;+eg*sac>4{a z_N%m&sj3CO;;Z%8f3N_Vt)bfRRo6LdC!_kB zaGse5bYm%RZ5woBCvQ;R4Zra*xi6^%_5wO^#&?g93~`8as3yHX6hJY)Q_h~7cA0$< zw=~aE0B^-d&TlV4zY>^t2FmV>|BbvgV?a1WC9y}k{=Vlayo`_1mW$;5AxVBjK=r506b5=rS$HTifd))%6^BGzgy;-m0nDP4?CS@V{WXDrVf2n=8u*-edvvX{*GmO>RFapGd;N=pUgCue_)A@6b0l=b4su>|&RMQ-rxqN*9FIUZp zM*khGz6H#mw3H1aT}3rLXr&P}PA&Hyk2ReuHPUD*~ZFeyDtYrc(_7@Nx+q1-w#!>=&-7rrgH^F~~W%5>~*I_&1z)p&ge zlTK70Jffc@Lvsk;rc2I&q@G%QjJcTIAUoSKa7*+5-!zAl;g0WPm#As<`o}odTMOLU zkn_op?w6y2@7WLdIpx`;7q5o>9+QhmWGt=;>A%;JP6icLN^_#TO;k^YtpN2|-8(y? zfTV1$->q^8(PCeYTV_~H<>>|Yp1X|*&I`O@+8Wv#42Cp<0UqQeR_?+-T(^P6EIBif z%{U;HY|Vwaz{=dI&hRxW-Y3q4P{}C2+0l9Z`UN zHkuFdDBWFO!^HghH!LCS1Mu%_-toRdu8q3vTWcsfehra~brptXgttDCp$@jrxGIx5 z$&}_f0k->=-Cj62QG&L%h#R~si#w?}+siN6s2;OaO26V@wVj|IUYzw7&UYo%x#rR? zfrw^6ro^kPlGn?*zv7}w7^C-lgq3;mY}A7Tgm(%iO}4@zkDPAv32+_ao$7D`{YCZ= zyUv^**z^!P!n~?w1I;Tc$tc4c&j;FIwz3m};CRcfC=<}LDf(PGgL=)DO#bat@PQ~H z7^>msVJR+QOZM!2{QWeXSW2~TwAjQ*`WF!QkohE*L1aG!C^*R}&HowQ5mlWE1V0NU zr<;oR_7|t@#lB0V0LG09Vbuv5jSP%_4nvU%ZGHu9@e%>@M3PG++s|ht5|qcUkPf4U z;q2OA+J|O&H>6_4F-e{~=yNh@AtZ|8ISy_or7|KUvIIAB?rH7g9!yw{)>MmEGgHz! zLlH&GpNrReb28UQzihgc@B&Lq9sDC?Q(cT;A}|IQJL4=zfsq9An>bP_e+!u=s~P#G zuC^9N)U(jYm6Y+kYb_)2NBsfOC507c3zjZxg}1k?mYY%v2aVxh(YZ+TUxu`)I-Kw6HVrjvd#`<@)^!P3_erz4~r5 z*=UBp(b$n#q%=C1Wu8Cx7!M}q-GrC}PGa6u;+L2!fxW1@+PyEn4W)?J)WeMPsLRhE zGYfDlbxN}RnB$B`n=&YbxjFN^5tO{TD<5UDKlL>%jS(R4K6xZ{Q7--T^-zLTS7a!;463QmLLs_M)JV0(Ys9udQ<$EZ{9q?IyL5C7B%{uE+6 z7u2}zA-}Y0PT-nr@X?}{*1aDzPeVM>ybkF+FTLT)!Gcf*KU3wGmpg1g;uKBNQ@v%n z4*455R@CEkOhi;=1@clF>VAq~&Mv3tBXy8%t2c4T`K9q=r=0f|t9u@b&O7Aq{?{Bj zV73lP`6G&IlzFk3L9!dUshHwG40}Qk9i~Cu2gQJ-RaG|J;0`iujrlhyPmL)@D!Gg_ zlqi~~hzHcq-IO4EiYSTkCrNO1`j}P7703}N20R4&${Y0su?+I_BZ6m@(3eoO2+Wt- zbqgCs-kL7+sFfdwlPCD<7~$}y>tOZd+%WFCrIsv<4bM=fKsi= zv*3_o8R{H0nSnd7IlxJmp)(z9_!j- zD@`ex+>@icB|>Uol2D#}fI4O(BQx zI=_S7`Qi~U!^nSa+eWffZGun_s*!jN!!98ETK)Uc`B&ib3%>N$KnEU(@YP}9$5h6< ztb8y%h{m}BklZl~SDyNL-ASd#YOmnvZ0&deH{OiV;*VkWU(yv3J_>qlfV;v_4c-0_q~=PL&?Ri zR8QI8AzMYV$W`&h*i33JVrl4&VAoAy1)d-a8O2aytDnA^f)@tFEXpq&Cx|%6eHMqC zq_|UznlFSImuMqC%wp=QK<0A-rr4a2tfDR1X(kyaSNU;i7A~!UrQ}q5HRrduiQDzJ z>}Vnr${G|DPGqW4SvM^+8iU4?K@y_mHV74r`dLH)sSP21v9tlnki)CkaAURbja(*ApMAKI`0c40_Wn|VcVkai% z!Xh{uN@P%vi2fT64d4OAF|8^$5;4WzL(cxW^M|{Q{WU zOt>@+mA0A_nc#GC+blDmMfIgGUcO zZ0V%?;0`~#VSoB_53zjvd!T9&_Dsq>QkFb7$ra)Q&2qjQS;jjL;_`UQ=sfm2RJ^Fp zQU3n#qd?SjaJ`&5ltgFo-&*get{+|@8S zpTQ}5vC#*>Wy`0^4>MZ8H)S|h`W-${+P5gdZgGP@^1X1bWq}DZW%G{tFcYS6!2CGm z4GCdA1^TG2)}fZHaSypD(}peH!Bhl4!s-N;Xeot7?XBd;(W;@OMlIt;RGk2Z9Kn^q z&tZkacgO3FZ1`h;ocGBL*(m;C5u>)PkH%^Iu9gK5PUKdBJ3`>ZuBj07HV*07PoYXr zY|)sB-q2_GgAk01y&IZgcGq(!@~oX@ZTS7~aO->H;CN`r+v z9dNm^I30`t)5E{YHgo)&cIb%oLJAUz5;`rdW)7_JN_9j7$JvAe1-w>T^V-(Y-AV^c z-tx*o+lRdXnd}ryQx*xA*@z{X+0jI1lrsgt0tG)WT0T`!K459~ck~MP1XcP&HVTHY zW92-Y2Ucv>ymIKU*L%be-gAp1$})-cMWDed%9t+IjE=BP;wO@7nb;J>I6R&m8|3D#gf}2}{6S&!H z$nT*+>OHr4G>Nj&HWt!lV5pk(eXAHxbdufqZ?rm=xW8m7%BkSrq;P_ZPfs)?5cFAe z^~qRI++*aP9_Jn%JNPZPYM8uD`Sfve8TsnaGIn3`@_Nj8+j5D#_+s)f-Vt6;#+(3X z?W%caEX)7%lKR%l|L2vlF4j7w=@n%lv3s=Xr{7QOenmu-u(s7#BF%LfK+^4c3pb}l zyxsvZv$kaTG^_ib&Z@VzE$pb?wmnL0`DgwuMM%DMGWJVP>?cM3zn4wp34s{w)YkFC z%j08^EP7+|U&2~YCdB3l(57gcMdSHEPy585;7{wH#Ly38WKQCDTBmF=+QU3Ytcuw! z)FJG4?r=^> z3qe3jS)jQ&!R5ETc{#hvx{4x0(oFn}WTuW{*WX^Tqo^KU4ztA$21_)nQZ+Nzps=4B zffadD$H(gvTC?Cx;q%pjh^LruzhaAKN!8ZKvIz`gm#xlpTS=MM$g1P?V~t%M9g-*7 z+om)Fn>tyxsz%Auc~YDi0(-Cly+PA0b}E53yLE$nOWJuCt2mZfjeN7Y?9oZ>{G;

+`sr*fPq<&h7;BaVEBcTBOdR-t+bqRD0xxS0 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%0Anhe1bdQ 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 diff --git a/plugins/vscode/media/chat-panel.css b/plugins/vscode/media/chat-panel.css index c4799c307..aeef917cd 100644 --- a/plugins/vscode/media/chat-panel.css +++ b/plugins/vscode/media/chat-panel.css @@ -1 +1 @@ -*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-top-10{top:-2.5rem}.bottom-24{bottom:6rem}.bottom-\[calc\(100\%\+8px\)\]{bottom:calc(100% + 8px)}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.top-0{top:0}.z-0{z-index:0}.z-10{z-index:10}.z-50{z-index:50}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1\.5{margin-right:.375rem}.mr-\[2px\]{margin-right:2px}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-\[1px\]{margin-top:1px}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.hidden{display:none}.h-12{height:3rem}.h-24{height:6rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-full{height:100%}.max-h-64{max-height:16rem}.max-h-\[250px\]{max-height:250px}.max-h-\[calc\(100vh-100px\)\]{max-height:calc(100vh - 100px)}.max-h-full{max-height:100%}.min-h-\[44px\]{min-height:44px}.w-12{width:3rem}.w-24{width:6rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[15\%\]{max-width:15%}.max-w-\[30\%\]{max-width:30%}.max-w-\[40\%\]{max-width:40%}.max-w-\[85\%\]{max-width:85%}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;white-space:nowrap}.text-ellipsis,.truncate{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-\[3px\]{border-left-width:3px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-vscode-border{border-color:var(--vscode-panel-border,hsla(0,0%,50%,.2))}.border-vscode-button-secondary{border-color:var(--vscode-button-secondaryBackground)}.border-vscode-focusBorder{border-color:var(--vscode-focusBorder)}.border-vscode-input-border{border-color:var(--vscode-input-border,transparent)}.border-vscode-input-focus{border-color:var(--vscode-focusBorder)}.border-vscode-widget-border{border-color:var(--vscode-widget-border)}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-transparent{background-color:transparent}.bg-vscode-bg{background-color:var(--vscode-editor-background)}.bg-vscode-button-bg{background-color:var(--vscode-button-background)}.bg-vscode-button-secondary{background-color:var(--vscode-button-secondaryBackground)}.bg-vscode-dropdown-bg{background-color:var(--vscode-dropdown-background)}.bg-vscode-input-bg{background-color:var(--vscode-input-background)}.bg-vscode-list-active{background-color:var(--vscode-list-activeSelectionBackground)}.bg-vscode-widget-bg{background-color:var(--vscode-editorWidget-background)}.bg-vscode-widget-header{background-color:var(--vscode-editorWidget-border)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pl-3{padding-left:.75rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-vscode{font-family:var(--vscode-font-family)}.text-\[0\.75em\]{font-size:.75em}.text-\[0\.78em\]{font-size:.78em}.text-\[0\.85em\]{font-size:.85em}.text-\[0\.8em\]{font-size:.8em}.text-\[0\.95em\]{font-size:.95em}.text-\[0\.9em\]{font-size:.9em}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-\[0\.04em\]{letter-spacing:.04em}.tracking-\[0\.06em\]{letter-spacing:.06em}.text-\[\#3178C6\]{--tw-text-opacity:1;color:rgb(49 120 198/var(--tw-text-opacity,1))}.text-\[\#563D7C\]{--tw-text-opacity:1;color:rgb(86 61 124/var(--tw-text-opacity,1))}.text-\[\#89d185\]{--tw-text-opacity:1;color:rgb(137 209 133/var(--tw-text-opacity,1))}.text-\[\#CB3837\]{--tw-text-opacity:1;color:rgb(203 56 55/var(--tw-text-opacity,1))}.text-\[\#E34F26\]{--tw-text-opacity:1;color:rgb(227 79 38/var(--tw-text-opacity,1))}.text-\[\#F1E05A\]{--tw-text-opacity:1;color:rgb(241 224 90/var(--tw-text-opacity,1))}.text-\[\#cccccc\]{--tw-text-opacity:1;color:rgb(204 204 204/var(--tw-text-opacity,1))}.text-\[\#f14c4c\]{--tw-text-opacity:1;color:rgb(241 76 76/var(--tw-text-opacity,1))}.text-vscode-button-fg{color:var(--vscode-button-foreground)}.text-vscode-dropdown-fg{color:var(--vscode-dropdown-foreground)}.text-vscode-fg{color:var(--vscode-editor-foreground)}.text-vscode-input-fg{color:var(--vscode-input-foreground)}.text-vscode-list-activeFg{color:var(--vscode-list-activeSelectionForeground)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}body,html{height:100%;width:100%;margin:0;padding:0;overflow:hidden;font-family:var(--vscode-font-family);font-size:var(--vscode-font-size)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--vscode-scrollbarSlider-background);border:3px solid transparent;background-clip:padding-box;border-radius:5px}::-webkit-scrollbar-thumb:hover{background:var(--vscode-scrollbarSlider-hoverBackground);border:3px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:active{background:var(--vscode-scrollbarSlider-activeBackground);border:3px solid transparent;background-clip:padding-box}select{border:1px solid var(--vscode-dropdown-border,transparent)}select,select option{background-color:var(--vscode-dropdown-background);color:var(--vscode-dropdown-foreground)}.markdown-body p{margin-bottom:.5em;margin-top:0}.markdown-body p:last-child{margin-bottom:0}.markdown-body strong{font-weight:600}.markdown-body ul{list-style-type:disc}.markdown-body ol,.markdown-body ul{padding-left:1.5em;margin-bottom:.75em}.markdown-body ol{list-style-type:decimal}.markdown-body li{margin-bottom:.25em}.markdown-body code{font-family:var(--vscode-editor-font-family,monospace);padding:.1em .3em;border-radius:3px;font-size:.9em}.markdown-body code,.markdown-body pre{background-color:var(--vscode-textCodeBlock-background,rgba(0,0,0,.1))}.markdown-body pre{padding:.75em;border-radius:4px;overflow-x:auto;max-width:100%;margin-bottom:.75em}.markdown-body pre code{background-color:transparent;padding:0;font-size:.85em}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{font-weight:600;margin-top:1em;margin-bottom:.5em}.markdown-body h1{font-size:1.5em}.markdown-body h2{font-size:1.3em}.markdown-body h3{font-size:1.1em}.context-chip{display:inline-flex;align-items:center;gap:6px;max-width:200px;padding:4px 8px;border-radius:12px;border:1px solid var(--vscode-dropdown-border,hsla(0,0%,59%,.2));background-color:var(--vscode-editorWidget-background);font-size:.85em;font-weight:500;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;transition:all .15s ease}.context-chip:hover{border-color:var(--vscode-focusBorder);opacity:.95}.context-chip .chip-name{overflow:hidden;text-overflow:ellipsis}.context-chip .chip-remove{margin-left:2px;opacity:.5;font-size:1.1em;line-height:1;cursor:pointer;transition:opacity .15s ease}.context-chip .chip-remove:hover{opacity:1}#composer-box.drag-over:after{content:"Drop files or folders";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;border:2px dashed var(--vscode-focusBorder);border-radius:inherit;background:var(--vscode-input-background);opacity:.92;font-size:.85em;font-weight:600;pointer-events:none;z-index:10}.first\:border-t-0:first-child{border-top-width:0}.empty\:hidden:empty{display:none}.focus-within\:border-vscode-input-focus:focus-within{border-color:var(--vscode-focusBorder)}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-black\/80:hover{background-color:rgba(0,0,0,.8)}.hover\:bg-vscode-button-hover:hover{background-color:var(--vscode-button-hoverBackground)}.hover\:bg-vscode-button-secondaryHover:hover{background-color:var(--vscode-button-secondaryHoverBackground)}.hover\:bg-vscode-list-hover:hover{background-color:var(--vscode-list-hoverBackground)}.hover\:bg-vscode-toolbarHover:hover{background-color:var(--vscode-toolbar-hoverBackground,hsla(0,0%,50%,.15))}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.group:hover .group-hover\:opacity-100{opacity:1}.group.is-processing .group-\[\.is-processing\]\:block{display:block}.group.is-processing .group-\[\.is-processing\]\:hidden{display:none}.\[\&\.is-processing\]\:bg-vscode-button-secondary.is-processing{background-color:var(--vscode-button-secondaryBackground)}.\[\&\.is-processing\]\:hover\:bg-vscode-button-secondaryHover:hover.is-processing{background-color:var(--vscode-button-secondaryHoverBackground)}.\[\&_svg\]\:mr-0 svg{margin-right:0}.\[\&_svg\]\:h-6 svg{height:1.5rem}.\[\&_svg\]\:w-6 svg{width:1.5rem} \ No newline at end of file +*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-top-10{top:-2.5rem}.bottom-24{bottom:6rem}.bottom-\[calc\(100\%\+8px\)\]{bottom:calc(100% + 8px)}.left-0{left:0}.left-1\/2{left:50%}.right-0{right:0}.top-0{top:0}.z-0{z-index:0}.z-10{z-index:10}.z-50{z-index:50}.mx-1{margin-left:.25rem;margin-right:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.ml-1{margin-left:.25rem}.ml-auto{margin-left:auto}.mr-1\.5{margin-right:.375rem}.mr-\[2px\]{margin-right:2px}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-\[1px\]{margin-top:1px}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.hidden{display:none}.h-12{height:3rem}.h-24{height:6rem}.h-5{height:1.25rem}.h-8{height:2rem}.h-full{height:100%}.max-h-64{max-height:16rem}.max-h-\[250px\]{max-height:250px}.max-h-\[calc\(100vh-100px\)\]{max-height:calc(100vh - 100px)}.max-h-full{max-height:100%}.min-h-\[28px\]{min-height:28px}.min-h-\[44px\]{min-height:44px}.w-12{width:3rem}.w-24{width:6rem}.w-5{width:1.25rem}.w-8{width:2rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[15\%\]{max-width:15%}.max-w-\[30\%\]{max-width:30%}.max-w-\[40\%\]{max-width:40%}.max-w-\[85\%\]{max-width:85%}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;white-space:nowrap}.text-ellipsis,.truncate{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-\[3px\]{border-left-width:3px}.border-t{border-top-width:1px}.border-none{border-style:none}.border-vscode-border{border-color:var(--vscode-panel-border,hsla(0,0%,50%,.2))}.border-vscode-button-secondary{border-color:var(--vscode-button-secondaryBackground)}.border-vscode-focusBorder{border-color:var(--vscode-focusBorder)}.border-vscode-input-border{border-color:var(--vscode-input-border,transparent)}.border-vscode-input-focus{border-color:var(--vscode-focusBorder)}.border-vscode-widget-border{border-color:var(--vscode-widget-border)}.bg-black\/50{background-color:rgba(0,0,0,.5)}.bg-transparent{background-color:transparent}.bg-vscode-bg{background-color:var(--vscode-editor-background)}.bg-vscode-button-bg{background-color:var(--vscode-button-background)}.bg-vscode-button-secondary{background-color:var(--vscode-button-secondaryBackground)}.bg-vscode-dropdown-bg{background-color:var(--vscode-dropdown-background)}.bg-vscode-input-bg{background-color:var(--vscode-input-background)}.bg-vscode-list-active{background-color:var(--vscode-list-activeSelectionBackground)}.bg-vscode-widget-bg{background-color:var(--vscode-editorWidget-background)}.bg-vscode-widget-header{background-color:var(--vscode-editorWidget-border)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pl-3{padding-left:.75rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.text-left{text-align:left}.text-center{text-align:center}.font-vscode{font-family:var(--vscode-font-family)}.text-\[0\.65em\]{font-size:.65em}.text-\[0\.75em\]{font-size:.75em}.text-\[0\.78em\]{font-size:.78em}.text-\[0\.85em\]{font-size:.85em}.text-\[0\.8em\]{font-size:.8em}.text-\[0\.95em\]{font-size:.95em}.text-\[0\.9em\]{font-size:.9em}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.tracking-\[0\.04em\]{letter-spacing:.04em}.tracking-\[0\.06em\]{letter-spacing:.06em}.text-\[\#3178C6\]{--tw-text-opacity:1;color:rgb(49 120 198/var(--tw-text-opacity,1))}.text-\[\#563D7C\]{--tw-text-opacity:1;color:rgb(86 61 124/var(--tw-text-opacity,1))}.text-\[\#89d185\]{--tw-text-opacity:1;color:rgb(137 209 133/var(--tw-text-opacity,1))}.text-\[\#CB3837\]{--tw-text-opacity:1;color:rgb(203 56 55/var(--tw-text-opacity,1))}.text-\[\#E34F26\]{--tw-text-opacity:1;color:rgb(227 79 38/var(--tw-text-opacity,1))}.text-\[\#F1E05A\]{--tw-text-opacity:1;color:rgb(241 224 90/var(--tw-text-opacity,1))}.text-\[\#cccccc\]{--tw-text-opacity:1;color:rgb(204 204 204/var(--tw-text-opacity,1))}.text-\[\#f14c4c\]{--tw-text-opacity:1;color:rgb(241 76 76/var(--tw-text-opacity,1))}.text-vscode-button-fg{color:var(--vscode-button-foreground)}.text-vscode-dropdown-fg{color:var(--vscode-dropdown-foreground)}.text-vscode-fg{color:var(--vscode-editor-foreground)}.text-vscode-input-fg{color:var(--vscode-input-foreground)}.text-vscode-list-activeFg{color:var(--vscode-list-activeSelectionForeground)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color)}.shadow-2xl,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-md{--tw-backdrop-blur:blur(12px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}body,html{height:100%;width:100%;margin:0;padding:0;overflow:hidden;font-family:var(--vscode-font-family);font-size:var(--vscode-font-size)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--vscode-scrollbarSlider-background);border:3px solid transparent;background-clip:padding-box;border-radius:5px}::-webkit-scrollbar-thumb:hover{background:var(--vscode-scrollbarSlider-hoverBackground);border:3px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:active{background:var(--vscode-scrollbarSlider-activeBackground);border:3px solid transparent;background-clip:padding-box}select{border:1px solid var(--vscode-dropdown-border,transparent)}select,select option{background-color:var(--vscode-dropdown-background);color:var(--vscode-dropdown-foreground)}.markdown-body p{margin-bottom:.5em;margin-top:0}.markdown-body p:last-child{margin-bottom:0}.markdown-body strong{font-weight:600}.markdown-body ul{list-style-type:disc}.markdown-body ol,.markdown-body ul{padding-left:1.5em;margin-bottom:.75em}.markdown-body ol{list-style-type:decimal}.markdown-body li{margin-bottom:.25em}.markdown-body code{font-family:var(--vscode-editor-font-family,monospace);padding:.1em .3em;border-radius:3px;font-size:.9em}.markdown-body code,.markdown-body pre{background-color:var(--vscode-textCodeBlock-background,rgba(0,0,0,.1))}.markdown-body pre{padding:.75em;border-radius:4px;overflow-x:auto;max-width:100%;margin-bottom:.75em}.markdown-body pre code{background-color:transparent;padding:0;font-size:.85em}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{font-weight:600;margin-top:1em;margin-bottom:.5em}.markdown-body h1{font-size:1.5em}.markdown-body h2{font-size:1.3em}.markdown-body h3{font-size:1.1em}.context-chip{display:inline-flex;align-items:center;gap:6px;max-width:200px;padding:4px 8px;border-radius:12px;border:1px solid var(--vscode-dropdown-border,hsla(0,0%,59%,.2));background-color:var(--vscode-editorWidget-background);font-size:.85em;font-weight:500;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;transition:all .15s ease}.context-chip:hover{border-color:var(--vscode-focusBorder);opacity:.95}.context-chip .chip-name{overflow:hidden;text-overflow:ellipsis}.context-chip .chip-remove{margin-left:2px;opacity:.5;font-size:1.1em;line-height:1;cursor:pointer;transition:opacity .15s ease}.context-chip .chip-remove:hover{opacity:1}#composer-box.drag-over:after{content:"Drop files or folders";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;border:2px dashed var(--vscode-focusBorder);border-radius:inherit;background:var(--vscode-input-background);opacity:.92;font-size:.85em;font-weight:600;pointer-events:none;z-index:10}#timeline-strip.timeline-disabled{opacity:.45;pointer-events:none}#timeline-nodes{position:relative}.timeline-line{position:absolute;left:10px;right:10px;top:50%;height:2px;background:var(--vscode-panel-border,hsla(0,0%,50%,.35));transform:translateY(-50%);pointer-events:none}.timeline-node{position:relative;z-index:1;width:28px;height:28px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:transparent;border:none;padding:0;cursor:pointer}.timeline-dot{width:10px;height:10px;border-radius:50%;border:2px solid var(--vscode-focusBorder);background:var(--vscode-editor-background);transition:transform .12s ease,background .12s ease}.timeline-node[data-kind=edit] .timeline-dot{border-color:var(--vscode-focusBorder)}.timeline-node[data-kind=execute] .timeline-dot{border-color:var(--vscode-editorWarning-foreground,#cca700)}.timeline-node[data-kind=other] .timeline-dot{border-color:var(--vscode-descriptionForeground,hsla(0,0%,50%,.8))}.timeline-node[data-kind=now] .timeline-dot{width:8px;height:8px;background:var(--vscode-button-background);border-color:var(--vscode-button-background)}.timeline-node.is-selected .timeline-dot,.timeline-node:hover .timeline-dot{transform:scale(1.35);background:var(--vscode-focusBorder)}.timeline-node[data-kind=now].is-selected .timeline-dot,.timeline-node[data-kind=now]:hover .timeline-dot{background:var(--vscode-button-background)}.timeline-tooltip{display:none;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);white-space:nowrap;max-width:240px;overflow:hidden;text-overflow:ellipsis;padding:4px 8px;border-radius:4px;background:var(--vscode-editorWidget-background);border:1px solid var(--vscode-widget-border);color:var(--vscode-editor-foreground);font-size:.75em;z-index:5;pointer-events:none}.timeline-node:hover .timeline-tooltip{display:block}.timeline-confirm-actions{display:flex;gap:8px;margin-top:8px}.timeline-confirm-actions button{border:none;border-radius:4px;padding:4px 10px;font-size:.85em;cursor:pointer;font-family:var(--vscode-font-family)}.first\:border-t-0:first-child{border-top-width:0}.empty\:hidden:empty{display:none}.focus-within\:border-vscode-input-focus:focus-within{border-color:var(--vscode-focusBorder)}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:bg-black\/80:hover{background-color:rgba(0,0,0,.8)}.hover\:bg-vscode-button-hover:hover{background-color:var(--vscode-button-hoverBackground)}.hover\:bg-vscode-button-secondaryHover:hover{background-color:var(--vscode-button-secondaryHoverBackground)}.hover\:bg-vscode-list-hover:hover{background-color:var(--vscode-list-hoverBackground)}.hover\:bg-vscode-toolbarHover:hover{background-color:var(--vscode-toolbar-hoverBackground,hsla(0,0%,50%,.15))}.hover\:opacity-100:hover{opacity:1}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.group:hover .group-hover\:opacity-100{opacity:1}.group.is-processing .group-\[\.is-processing\]\:block{display:block}.group.is-processing .group-\[\.is-processing\]\:hidden{display:none}.\[\&\.is-processing\]\:bg-vscode-button-secondary.is-processing{background-color:var(--vscode-button-secondaryBackground)}.\[\&\.is-processing\]\:hover\:bg-vscode-button-secondaryHover:hover.is-processing{background-color:var(--vscode-button-secondaryHoverBackground)}.\[\&_svg\]\:mr-0 svg{margin-right:0}.\[\&_svg\]\:h-6 svg{height:1.5rem}.\[\&_svg\]\:w-6 svg{width:1.5rem} \ No newline at end of file diff --git a/plugins/vscode/media/chat-panel.html b/plugins/vscode/media/chat-panel.html index 712338b35..085f11495 100644 --- a/plugins/vscode/media/chat-panel.html +++ b/plugins/vscode/media/chat-panel.html @@ -14,6 +14,15 @@

+
diff --git a/plugins/vscode/media/chat-panel.js b/plugins/vscode/media/chat-panel.js index d25379c6a..f205c46c6 100644 --- a/plugins/vscode/media/chat-panel.js +++ b/plugins/vscode/media/chat-panel.js @@ -350,6 +350,152 @@ }); } + const EDIT_TOOLS = new Set(['write_file', 'string_replace', 'diff_edit', 'file_op']); + const EXECUTE_TOOLS = new Set(['execute_bash']); + + function timelineKind(toolName) { + if (EDIT_TOOLS.has(toolName)) return 'edit'; + if (EXECUTE_TOOLS.has(toolName)) return 'execute'; + return 'other'; + } + + function timelineRelativeTime(timestamp) { + const diffMs = Date.now() - new Date(timestamp).getTime(); + const minutes = Math.floor(diffMs / 60000); + if (minutes < 1) return 'just now'; + if (minutes < 60) return `${minutes}m ago`; + const hours = Math.floor(minutes / 60); + if (hours < 24) return `${hours}h ago`; + return `${Math.floor(hours / 24)}d ago`; + } + + const timelineStrip = (function createTimelineStrip() { + const root = document.getElementById('timeline-strip'); + const nodesEl = document.getElementById('timeline-nodes'); + const confirmEl = document.getElementById('timeline-confirm'); + if (!root || !nodesEl || !confirmEl) { + return { + setEntries() {}, + setDisabled() {}, + clear() {}, + }; + } + + let entries = []; + let pendingId = null; + + function hideConfirm() { + pendingId = null; + confirmEl.classList.add('hidden'); + confirmEl.innerHTML = ''; + } + + function showConfirm(entry) { + pendingId = entry.id; + const files = (entry.filesChanged || []).slice(0, 3).join(', '); + const extra = (entry.filesChanged || []).length > 3 ? '…' : ''; + confirmEl.innerHTML = ''; + + const text = document.createElement('div'); + text.textContent = + `Revert workspace and conversation to before step ${entry.seq} (${entry.title || entry.toolName})? ` + + `This deletes later chat messages and undoes later file changes.` + + (files ? ` Files: ${files}${extra}` : ''); + confirmEl.appendChild(text); + + const actions = document.createElement('div'); + actions.className = 'timeline-confirm-actions'; + + const revertBtn = document.createElement('button'); + revertBtn.textContent = 'Revert'; + revertBtn.style.background = 'var(--vscode-button-background)'; + revertBtn.style.color = 'var(--vscode-button-foreground)'; + revertBtn.addEventListener('click', () => { + vscode.postMessage({ type: 'revertToCheckpoint', checkpointId: entry.id }); + hideConfirm(); + }); + + const cancelBtn = document.createElement('button'); + cancelBtn.textContent = 'Cancel'; + cancelBtn.style.background = 'var(--vscode-button-secondaryBackground)'; + cancelBtn.style.color = 'var(--vscode-button-secondaryForeground, inherit)'; + cancelBtn.addEventListener('click', hideConfirm); + + actions.appendChild(revertBtn); + actions.appendChild(cancelBtn); + confirmEl.appendChild(actions); + confirmEl.classList.remove('hidden'); + } + + function render() { + nodesEl.innerHTML = ''; + if (entries.length === 0) { + root.classList.add('hidden'); + hideConfirm(); + return; + } + root.classList.remove('hidden'); + + const line = document.createElement('div'); + line.className = 'timeline-line'; + nodesEl.appendChild(line); + + for (const entry of entries) { + const btn = document.createElement('button'); + btn.type = 'button'; + btn.className = 'timeline-node'; + btn.dataset.kind = timelineKind(entry.toolName); + btn.dataset.id = entry.id; + btn.setAttribute('aria-label', `Step ${entry.seq}: ${entry.title || entry.toolName}`); + + const dot = document.createElement('span'); + dot.className = 'timeline-dot'; + btn.appendChild(dot); + + const tip = document.createElement('span'); + tip.className = 'timeline-tooltip'; + const files = (entry.filesChanged || []).slice(0, 2).join(', '); + tip.textContent = `Step ${entry.seq} · ${entry.title || entry.toolName}` + + (files ? ` · ${files}` : '') + + ` · ${timelineRelativeTime(entry.timestamp)}`; + btn.appendChild(tip); + + btn.addEventListener('click', () => showConfirm(entry)); + nodesEl.appendChild(btn); + } + + const nowBtn = document.createElement('button'); + nowBtn.type = 'button'; + nowBtn.className = 'timeline-node is-selected'; + nowBtn.dataset.kind = 'now'; + nowBtn.setAttribute('aria-label', 'Current state'); + const nowDot = document.createElement('span'); + nowDot.className = 'timeline-dot'; + nowBtn.appendChild(nowDot); + const nowTip = document.createElement('span'); + nowTip.className = 'timeline-tooltip'; + nowTip.textContent = 'Now'; + nowBtn.appendChild(nowTip); + nowBtn.addEventListener('click', hideConfirm); + nodesEl.appendChild(nowBtn); + + nodesEl.scrollLeft = nodesEl.scrollWidth; + } + + return { + setEntries(next) { + entries = Array.isArray(next) ? next : []; + hideConfirm(); + render(); + }, + setDisabled(disabled) { + root.classList.toggle('timeline-disabled', Boolean(disabled)); + }, + clear() { + this.setEntries([]); + }, + }; + })(); function toggleHistoryView() { isHistoryView = !isHistoryView; if (isHistoryView) { @@ -499,6 +645,7 @@ // --- Send / Stop toggle logic --- function setProcessing(active) { isProcessing = active; + timelineStrip.setDisabled(active); if (!active) { // Globally cancel any stuck spinners across all tool cards, // in case multiple aggregators were created in the same session @@ -1446,6 +1593,9 @@ clearInterval(currentThoughtBox.timer); currentThoughtBox = null; } + if (!message.isLoading) { + timelineStrip.clear(); + } setProcessing(false); break; case 'sessionLoaded': @@ -1474,6 +1624,9 @@ sessionsData = message.sessions || []; renderSessions(); // Always update so list is ready when history opens break; + case 'updateTimeline': + timelineStrip.setEntries(message.entries || []); + break; case 'copyLastCodeBlock': copyLastCodeBlock(); break; diff --git a/plugins/vscode/src/acp-client.spec.ts b/plugins/vscode/src/acp-client.spec.ts index 01cf95be4..c632be87c 100644 --- a/plugins/vscode/src/acp-client.spec.ts +++ b/plugins/vscode/src/acp-client.spec.ts @@ -111,3 +111,44 @@ test('NanocoderAcpClient - a cancelled prompt does not raise an error toast', as t.regex(shownError ?? '', /RequestError/, 'A genuine failure must still surface'); }); + +test('NanocoderAcpClient - listTimeline returns entries from extMethod', async (t) => { + const client = makeClient({ + extMethod: async (method: string, params: Record) => { + t.is(method, 'timeline/list'); + t.is(params.sessionId, 'session-1'); + return { + entries: [ + { + id: 'cp-1', + seq: 1, + toolCallId: 'call-1', + toolName: 'write_file', + title: 'write_file: a.ts', + timestamp: '2026-01-01T00:00:00.000Z', + filesChanged: ['a.ts'], + }, + ], + }; + }, + }); + + const entries = await client.listTimeline(); + t.is(entries.length, 1); + t.is(entries[0].id, 'cp-1'); +}); + +test('NanocoderAcpClient - revertTimeline calls timeline/revert', async (t) => { + let called: {method?: string; params?: Record} = {}; + const client = makeClient({ + extMethod: async (method: string, params: Record) => { + called = {method, params}; + return {revertedTo: {id: 'cp-1'}, filesRestored: ['a.ts']}; + }, + }); + + await client.revertTimeline('cp-1'); + t.is(called.method, 'timeline/revert'); + t.deepEqual(called.params, {sessionId: 'session-1', checkpointId: 'cp-1'}); +}); + diff --git a/plugins/vscode/src/acp-client.ts b/plugins/vscode/src/acp-client.ts index 028eb2928..0b6ab558a 100644 --- a/plugins/vscode/src/acp-client.ts +++ b/plugins/vscode/src/acp-client.ts @@ -25,6 +25,15 @@ export class NanocoderAcpClient { public onPermissionsCancelled?: (toolCallIds: string[]) => void; public onStateSync?: (state: StateSyncPayload) => void; public onConnectionReady?: () => void; + public onTimelineUpdated?: (entries: Array<{ + id: string; + seq: number; + toolCallId: string; + toolName: string; + title: string; + timestamp: string; + filesChanged: string[]; + }>) => void; public currentMode?: string; public availableModes: string[] = []; @@ -436,4 +445,40 @@ export class NanocoderAcpClient { } } + async listTimeline(): Promise> { + if (!this.connection || !this._sessionId) return []; + try { + const result = await this.connection.extMethod('timeline/list', { + sessionId: this._sessionId, + }); + const entries = (result as {entries?: unknown}).entries; + return Array.isArray(entries) ? entries : []; + } catch (error) { + this.outputChannel.appendLine(`listTimeline failed: ${error}`); + return []; + } + } + + async revertTimeline(checkpointId: string): Promise { + if (!this.connection || !this._sessionId) return; + try { + await this.connection.extMethod('timeline/revert', { + sessionId: this._sessionId, + checkpointId, + }); + } catch (error) { + this.outputChannel.appendLine(`revertTimeline failed: ${error}`); + vscode.window.showErrorMessage(`Failed to revert timeline: ${error}`); + throw error; + } + } + } diff --git a/plugins/vscode/src/chat-webview-provider.ts b/plugins/vscode/src/chat-webview-provider.ts index 5c28224a0..9fdd3097c 100644 --- a/plugins/vscode/src/chat-webview-provider.ts +++ b/plugins/vscode/src/chat-webview-provider.ts @@ -27,6 +27,7 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider { private _view?: vscode.WebviewView; private _isWebviewReady = false; + private _timelineRefreshTimer?: ReturnType; constructor( private readonly _extensionUri: vscode.Uri, @@ -41,6 +42,10 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider { type: 'acpUpdate', update }); + const kind = update?.update?.sessionUpdate ?? update?.sessionUpdate; + if (kind === 'tool_call' || kind === 'tool_call_update') { + this.scheduleTimelineRefresh(); + } }; this._acpClient.onPermissionRequested = (toolCallId: string, toolCall: any, options?: any[]) => { @@ -183,6 +188,7 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider { this.postMessage({type: 'clear', isLoading: true}); this._acpClient.resumeSession(message.sessionId).finally(() => { this.postMessage({type: 'sessionLoaded'}); + this._broadcastTimeline(); }); break; case 'deleteSession': @@ -250,6 +256,12 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider { case 'copyToClipboard': this._copyToClipboard(message.text); break; + case 'requestTimeline': + this._broadcastTimeline(); + break; + case 'revertToCheckpoint': + this._handleRevert(message.checkpointId); + break; } } ); @@ -273,6 +285,7 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider { this._outputChannel.appendLine(`[Extension] Session initialized automatically: ${sessionId}`); // Broadcast session list to populate History tab await this._broadcastSessions(); + await this._broadcastTimeline(); } } catch (error) { this._outputChannel.appendLine(`Failed to initialize session on ready: ${error}`); @@ -296,6 +309,33 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider { this.postMessage({type: 'updateSessions', sessions}); } + private scheduleTimelineRefresh() { + if (this._timelineRefreshTimer) { + clearTimeout(this._timelineRefreshTimer); + } + this._timelineRefreshTimer = setTimeout(() => { + this._broadcastTimeline(); + }, 150); + } + + private async _broadcastTimeline() { + const entries = await this._acpClient.listTimeline(); + this.postMessage({type: 'updateTimeline', entries}); + } + + private async _handleRevert(checkpointId: string) { + this._outputChannel.appendLine(`[Webview] User reverted timeline to ${checkpointId}`); + this.postMessage({type: 'clear', isLoading: true}); + try { + await this._acpClient.revertTimeline(checkpointId); + } catch { + // Error toast is raised by the ACP client. + } finally { + this.postMessage({type: 'sessionLoaded'}); + await this._broadcastTimeline(); + } + } + /** * Exclude glob for `@` search. * @@ -431,6 +471,7 @@ export class ChatWebviewProvider implements vscode.WebviewViewProvider { // message then streams into the fresh view). if (text.trim() === '/clear') { this.postMessage({type: 'clear'}); + this.postMessage({type: 'updateTimeline', entries: []}); } // Expand any @[file] / @[folder] attachments into their contents diff --git a/plugins/vscode/src/extension.ts b/plugins/vscode/src/extension.ts index 9371c1521..73ff365e4 100644 --- a/plugins/vscode/src/extension.ts +++ b/plugins/vscode/src/extension.ts @@ -100,6 +100,7 @@ export function activate(context: vscode.ExtensionContext) { vscode.commands.registerCommand('nanocoder.newChat', () => { acpClient.newChat(); chatProvider.postMessage({type: 'clear'}); + chatProvider.postMessage({type: 'updateTimeline', entries: []}); outputChannel.appendLine('[Extension] New chat started — session cleared.'); }), diff --git a/plugins/vscode/src/styles.css b/plugins/vscode/src/styles.css index 453c1c76d..4b91827af 100644 --- a/plugins/vscode/src/styles.css +++ b/plugins/vscode/src/styles.css @@ -154,3 +154,117 @@ select option { pointer-events: none; z-index: 10; } + +/* ── Action Timeline ────────────────────────────────── */ +#timeline-strip.timeline-disabled { + opacity: 0.45; + pointer-events: none; +} + +#timeline-nodes { + position: relative; +} + +.timeline-line { + position: absolute; + left: 10px; + right: 10px; + top: 50%; + height: 2px; + background: var(--vscode-panel-border, rgba(128,128,128,0.35)); + transform: translateY(-50%); + pointer-events: none; +} + +.timeline-node { + position: relative; + z-index: 1; + width: 28px; + height: 28px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + background: transparent; + border: none; + padding: 0; + cursor: pointer; +} + +.timeline-dot { + width: 10px; + height: 10px; + border-radius: 50%; + border: 2px solid var(--vscode-focusBorder); + background: var(--vscode-editor-background); + transition: transform 120ms ease, background 120ms ease; +} + +.timeline-node[data-kind="edit"] .timeline-dot { + border-color: var(--vscode-focusBorder); +} + +.timeline-node[data-kind="execute"] .timeline-dot { + border-color: var(--vscode-editorWarning-foreground, #cca700); +} + +.timeline-node[data-kind="other"] .timeline-dot { + border-color: var(--vscode-descriptionForeground, rgba(128,128,128,0.8)); +} + +.timeline-node[data-kind="now"] .timeline-dot { + width: 8px; + height: 8px; + background: var(--vscode-button-background); + border-color: var(--vscode-button-background); +} + +.timeline-node.is-selected .timeline-dot, +.timeline-node:hover .timeline-dot { + transform: scale(1.35); + background: var(--vscode-focusBorder); +} + +.timeline-node[data-kind="now"].is-selected .timeline-dot, +.timeline-node[data-kind="now"]:hover .timeline-dot { + background: var(--vscode-button-background); +} + +.timeline-tooltip { + display: none; + position: absolute; + bottom: calc(100% + 6px); + left: 50%; + transform: translateX(-50%); + white-space: nowrap; + max-width: 240px; + overflow: hidden; + text-overflow: ellipsis; + padding: 4px 8px; + border-radius: 4px; + background: var(--vscode-editorWidget-background); + border: 1px solid var(--vscode-widget-border); + color: var(--vscode-editor-foreground); + font-size: 0.75em; + z-index: 5; + pointer-events: none; +} + +.timeline-node:hover .timeline-tooltip { + display: block; +} + +.timeline-confirm-actions { + display: flex; + gap: 8px; + margin-top: 8px; +} + +.timeline-confirm-actions button { + border: none; + border-radius: 4px; + padding: 4px 10px; + font-size: 0.85em; + cursor: pointer; + font-family: var(--vscode-font-family); +} diff --git a/plugins/vscode/src/webview-protocol.ts b/plugins/vscode/src/webview-protocol.ts index 723cdcd03..1b9e57e77 100644 --- a/plugins/vscode/src/webview-protocol.ts +++ b/plugins/vscode/src/webview-protocol.ts @@ -89,6 +89,21 @@ export interface ExtensionMessageCopyResult { error?: string; } +export interface TimelineCheckpoint { + id: string; + seq: number; + toolCallId: string; + toolName: string; + title: string; + timestamp: string; + filesChanged: string[]; +} + +export interface ExtensionMessageUpdateTimeline { + type: 'updateTimeline'; + entries: TimelineCheckpoint[]; +} + export interface ExtensionMessageUpdateSessions { type: 'updateSessions'; sessions: Array<{ @@ -150,7 +165,8 @@ export type ExtensionToWebviewMessage = | ExtensionMessagePathInfoResolved | ExtensionMessageCopyLastCodeBlock | ExtensionMessageCopyResult - | ExtensionMessageMentionCompletions; + | ExtensionMessageMentionCompletions + | ExtensionMessageUpdateTimeline; // --------------------------------------------------------- @@ -267,6 +283,15 @@ export interface WebviewMessageRequestMentionCompletions { requestId: number; } +export interface WebviewMessageRequestTimeline { + type: 'requestTimeline'; +} + +export interface WebviewMessageRevertToCheckpoint { + type: 'revertToCheckpoint'; + checkpointId: string; +} + export type WebviewToExtensionMessage = | WebviewMessageReady | WebviewMessageSubmitMessage @@ -287,4 +312,6 @@ export type WebviewToExtensionMessage = | WebviewMessageOpenPath | WebviewMessageShowError | WebviewMessageCopyToClipboard - | WebviewMessageRequestMentionCompletions; + | WebviewMessageRequestMentionCompletions + | WebviewMessageRequestTimeline + | WebviewMessageRevertToCheckpoint; diff --git a/source/acp/acp-agent.spec.ts b/source/acp/acp-agent.spec.ts index 576843758..5db3b8c39 100644 --- a/source/acp/acp-agent.spec.ts +++ b/source/acp/acp-agent.spec.ts @@ -1,4 +1,4 @@ -import {mkdirSync} from 'node:fs'; +import {mkdirSync, readFileSync, writeFileSync} from 'node:fs'; import {tmpdir} from 'node:os'; import {join} from 'node:path'; import test from 'ava'; @@ -55,6 +55,7 @@ const createMockInitContext = (): AcpInitContext => ({ getFilteredTools: () => ({}), hasTool: () => false, getToolEntry: () => undefined, + isReadOnly: () => true, } as any, customCommandLoader: null as any, provider: 'test-provider', @@ -326,14 +327,11 @@ test('AcpAgent.prompt - propagates API errors cleanly', async t => { throw new Error('RequestError: Internal error (500)'); }; - const session = agent.registerSession('session-1', { - conn: agent['conn'], - sessionId: 'session-1', - canReadTextFile: false, - }); + const created = await agent.newSession({cwd: '/tmp'}); + const session = agent['sessions'].get(created.sessionId); - const error = await t.throwsAsync( - () => agent.prompt({sessionId: 'session-1', prompt: [{type: 'text', text: 'crash please'}]}), + await t.throwsAsync( + () => agent.prompt({sessionId: created.sessionId, prompt: [{type: 'text', text: 'crash please'}]}), {message: /RequestError/} ); @@ -600,3 +598,82 @@ test.serial( ); }, ); + +test('AcpAgent.extMethod - timeline/list returns captured entries', async t => { + const {agent} = createAgent(); + const cwd = join(tmpdir(), `nanocoder-timeline-agent-${Date.now()}`); + mkdirSync(cwd, {recursive: true}); + const created = await agent.newSession({cwd, mcpServers: []}); + const session = (agent as any).sessions.get(created.sessionId); + await session.timeline.capture({ + toolCallId: 'call-1', + toolName: 'write_file', + title: 'write_file: a.ts', + truncateToMessageIndex: 1, + files: new Map([['a.ts', 'before']]), + }); + + const result = await agent.extMethod('timeline/list', { + sessionId: created.sessionId, + }); + t.is((result.entries as any[]).length, 1); + t.is((result.entries as any[])[0].toolName, 'write_file'); +}); + +test('AcpAgent.extMethod - timeline/revert truncates messages and restores files', async t => { + const {agent} = createAgent(); + const cwd = join(tmpdir(), `nanocoder-timeline-revert-${Date.now()}`); + mkdirSync(cwd, {recursive: true}); + writeFileSync(join(cwd, 'a.ts'), 'before'); + + const created = await agent.newSession({cwd, mcpServers: []}); + const session = (agent as any).sessions.get(created.sessionId); + session.messages = [ + {role: 'user', content: 'edit a.ts'}, + {role: 'assistant', content: '', tool_calls: []}, + {role: 'tool', content: 'wrote', name: 'write_file'}, + ]; + const entry = await session.timeline.capture({ + toolCallId: 'call-1', + toolName: 'write_file', + title: 'write_file: a.ts', + truncateToMessageIndex: 1, + files: new Map([['a.ts', 'before']]), + }); + writeFileSync(join(cwd, 'a.ts'), 'after'); + + const result = await agent.extMethod('timeline/revert', { + sessionId: created.sessionId, + checkpointId: entry.id, + }); + t.is((result.revertedTo as any).id, entry.id); + t.is(readFileSync(join(cwd, 'a.ts'), 'utf-8'), 'before'); + t.is(session.messages.length, 2); + t.is(session.messages[0].role, 'user'); + t.true( + String(session.messages[1].content).includes('Reverted to before step 1'), + ); +}); + +test('AcpAgent.extMethod - timeline/revert rejects an active turn', async t => { + const {agent} = createAgent(); + const created = await agent.newSession({cwd: '/tmp', mcpServers: []}); + const session = (agent as any).sessions.get(created.sessionId); + session.turnActive = true; + await t.throwsAsync( + agent.extMethod('timeline/revert', { + sessionId: created.sessionId, + checkpointId: 'any', + }), + {message: /prompt is in progress/}, + ); +}); + +test('AcpAgent.extMethod - timeline/list throws on missing session', async t => { + const {agent} = createAgent(); + await t.throwsAsync( + agent.extMethod('timeline/list', {sessionId: 'missing'}), + {message: /Session not found/}, + ); +}); + diff --git a/source/acp/acp-agent.ts b/source/acp/acp-agent.ts index be5c273f6..385d70953 100644 --- a/source/acp/acp-agent.ts +++ b/source/acp/acp-agent.ts @@ -45,6 +45,7 @@ import {createLLMClient} from '@/client-factory'; import {getAppConfig} from '@/config/index'; import {loadPreferences, updateLastUsed} from '@/config/preferences'; import {resolveTune} from '@/config/tune'; +import {TimelineManager} from '@/services/timeline-manager'; import {sessionManager} from '@/session/session-manager'; import {getTuneToolMode} from '@/types/config'; import {getLogger} from '@/utils/logging'; @@ -214,8 +215,9 @@ export class AcpAgent implements Agent { }; if (commandName === 'clear') { - // Clear the conversation history + // Clear the conversation history and action timeline session.messages = []; + await session.timeline.clear(); const msg = 'Conversation cleared.'; this.conn.sessionUpdate({ sessionId: params.sessionId, @@ -481,6 +483,18 @@ export class AcpAgent implements Agent { params: DeleteSessionRequest, ): Promise { await sessionManager.initialize(); + const existing = this.sessions.get(params.sessionId); + if (existing) { + await existing.timeline.clear(); + } else { + const persisted = await sessionManager.loadSession(params.sessionId); + if (persisted) { + await new TimelineManager( + persisted.workingDirectory, + params.sessionId, + ).clear(); + } + } await sessionManager.deleteSession(params.sessionId); // Evict from in-memory map if present this.sessions.delete(params.sessionId); @@ -544,6 +558,50 @@ export class AcpAgent implements Agent { return {title: updated.title}; } + if (method === 'timeline/list') { + const sessionId = params.sessionId; + if (typeof sessionId !== 'string') { + throw new Error('timeline/list requires a string sessionId'); + } + const session = this.requireSession(sessionId); + return {entries: await session.timeline.list()}; + } + + if (method === 'timeline/revert') { + const sessionId = params.sessionId; + const checkpointId = params.checkpointId; + if (typeof sessionId !== 'string' || typeof checkpointId !== 'string') { + throw new Error( + 'timeline/revert requires string sessionId and checkpointId', + ); + } + const session = this.requireSession(sessionId); + if (session.turnActive) { + throw new Error( + 'Cannot revert the timeline while a prompt is in progress', + ); + } + + const result = await session.timeline.revertTo(checkpointId); + session.messages = session.messages.slice( + 0, + result.revertedTo.truncateToMessageIndex, + ); + session.messages.push({ + role: 'assistant', + content: `Reverted to before step ${result.revertedTo.seq} (${result.revertedTo.toolName}). How should we proceed instead?`, + }); + await this.saveAcpSessionToDisk(session); + await this.replaySessionHistory(session); + logger.info( + `ACP extMethod timeline/revert: session=${sessionId} checkpoint=${checkpointId}`, + ); + return { + revertedTo: result.revertedTo, + filesRestored: result.filesRestored, + }; + } + throw new Error(`Unknown extension method: ${method}`); } @@ -577,6 +635,14 @@ export class AcpAgent implements Agent { return {}; } + private requireSession(sessionId: string): AcpSession { + const session = this.sessions.get(sessionId); + if (!session) { + throw new Error(`Session not found: ${sessionId}`); + } + return session; + } + private registerSession(sessionId: string, cwd: string): AcpSession { const session = new AcpSession({ sessionId, diff --git a/source/acp/acp-conversation.spec.ts b/source/acp/acp-conversation.spec.ts index 253b81eef..97ea66d06 100644 --- a/source/acp/acp-conversation.spec.ts +++ b/source/acp/acp-conversation.spec.ts @@ -1,3 +1,6 @@ +import {mkdirSync, writeFileSync} from 'node:fs'; +import {tmpdir} from 'node:os'; +import {join} from 'node:path'; import test from 'ava'; import type {AgentSideConnection} from '@agentclientprotocol/sdk'; import {AcpSession} from '@/acp/acp-session'; @@ -49,11 +52,15 @@ const createMockSession = ( messages?: any[]; systemMessage?: any; aborted?: boolean; + sessionId?: string; + cwd?: string; } = {}, ): AcpSession => { const session = new AcpSession({ - sessionId: 'test-session', - cwd: '/tmp', + sessionId: + opts.sessionId ?? + `test-session-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`, + cwd: opts.cwd ?? '/tmp', conn, initialMode: opts.devMode ?? 'auto-accept', }); @@ -94,6 +101,7 @@ const createMockToolManager = () => ({ getFilteredTools: () => ({}), hasTool: (_name: string) => false, getToolEntry: () => ({approval: false}), + isReadOnly: (name: string) => name !== 'write_file' && name !== 'execute_bash', }); // ============================================================================ @@ -1282,6 +1290,7 @@ test('runAcpConversation - ask_user coerces object options and returns the choic getFilteredTools: () => ({}), hasTool: (n: string) => n === 'ask_user', getToolEntry: () => ({approval: false}), + isReadOnly: () => true, }; const result = await runAcpConversation({ @@ -1322,6 +1331,7 @@ test('runAcpConversation - ask_user fails cleanly when no usable options', async getFilteredTools: () => ({}), hasTool: (n: string) => n === 'ask_user', getToolEntry: () => ({approval: false}), + isReadOnly: () => true, }; await runAcpConversation({ @@ -1337,3 +1347,112 @@ test('runAcpConversation - ask_user fails cleanly when no usable options', async ); t.true(toolMsg?.content.startsWith('Error:')); }); + +// ============================================================================ +// Action timeline capture +// ============================================================================ + +test('runAcpConversation - captures a timeline checkpoint for write_file', async t => { + const {conn} = createMockConn(); + const cwd = join(tmpdir(), `nanocoder-timeline-conv-${Date.now()}`); + mkdirSync(cwd, {recursive: true}); + writeFileSync(join(cwd, 'a.ts'), 'before'); + + const session = createMockSession(conn, {devMode: 'yolo', cwd}); + const toolManager = { + ...createMockToolManager(), + hasTool: () => true, + isReadOnly: (name: string) => name !== 'write_file', + }; + + setToolRegistryGetter(() => ({ + write_file: async () => 'Wrote a.ts', + })); + + let callCount = 0; + const client = { + chat: async () => { + callCount++; + if (callCount === 1) { + return { + choices: [ + { + message: { + content: '', + tool_calls: [ + createMockToolCall( + 'write_file', + {path: 'a.ts', content: 'after'}, + 'call-write', + ), + ], + }, + }, + ], + }; + } + return {choices: [{message: {content: 'done'}}]}; + }, + } as unknown as LLMClient; + + await runAcpConversation({ + session, + client, + toolManager: toolManager as any, + conn, + nonInteractiveAlwaysAllow: [], + }); + + const entries = await session.timeline.list(); + t.is(entries.length, 1); + t.is(entries[0].toolName, 'write_file'); + t.is(entries[0].toolCallId, 'call-write'); + t.is(entries[0].truncateToMessageIndex, 0); +}); + +test('runAcpConversation - does not capture a timeline checkpoint for read_file', async t => { + const {conn} = createMockConn(); + const session = createMockSession(conn, {devMode: 'yolo'}); + const toolManager = { + ...createMockToolManager(), + hasTool: () => true, + isReadOnly: () => true, + }; + + setToolRegistryGetter(() => ({ + read_file: async () => 'content', + })); + + let callCount = 0; + const client = { + chat: async () => { + callCount++; + if (callCount === 1) { + return { + choices: [ + { + message: { + content: '', + tool_calls: [ + createMockToolCall('read_file', {path: 'a.ts'}, 'call-read'), + ], + }, + }, + ], + }; + } + return {choices: [{message: {content: 'done'}}]}; + }, + } as unknown as LLMClient; + + await runAcpConversation({ + session, + client, + toolManager: toolManager as any, + conn, + nonInteractiveAlwaysAllow: [], + }); + + t.deepEqual(await session.timeline.list(), []); +}); + diff --git a/source/acp/acp-conversation.ts b/source/acp/acp-conversation.ts index edc7ff3f2..1b2803a0a 100644 --- a/source/acp/acp-conversation.ts +++ b/source/acp/acp-conversation.ts @@ -6,6 +6,7 @@ import type { import {requestToolPermission} from '@/acp/acp-permission'; import {requestUserChoice} from '@/acp/acp-question'; import type {AcpSession} from '@/acp/acp-session'; +import {beginTimelineCapture, finishTimelineCapture} from '@/acp/acp-timeline'; import {type AcpToolCallMeta, buildToolCallMeta} from '@/acp/acp-tool-call'; import {DEFAULT_HEADLESS_MAX_TURNS, getAppConfig} from '@/config/index'; import {processToolUse} from '@/message-handler'; @@ -393,6 +394,14 @@ export async function runAcpConversation( // Execute tool await emitToolCallUpdate(session, conn, toolCall, 'in_progress'); + const timelineCapture = await beginTimelineCapture( + session, + toolManager, + toolCall, + messages, + meta.title, + ); + let pollInterval: ReturnType | null = null; let isPolling = true; if (toolCall.function.name === 'agent') { @@ -443,6 +452,7 @@ export async function runAcpConversation( const toolResult = await processToolUse(toolCall, { abortSignal: abortController.signal, }); + await finishTimelineCapture(session, timelineCapture); isPolling = false; if (pollInterval) clearInterval(pollInterval); diff --git a/source/acp/acp-session.spec.ts b/source/acp/acp-session.spec.ts index 1b62e6651..6b0c39de6 100644 --- a/source/acp/acp-session.spec.ts +++ b/source/acp/acp-session.spec.ts @@ -89,6 +89,15 @@ test('AcpSession - abortController starts non-aborted', t => { t.false(session.abortController.signal.aborted); }); +test('AcpSession - constructs a timeline manager for the session', t => { + const session = new AcpSession({ + sessionId: 'test-id', + cwd: '/tmp', + conn: createMockConn(), + }); + t.truthy(session.timeline); +}); + // ============================================================================ // cancel() // ============================================================================ diff --git a/source/acp/acp-session.ts b/source/acp/acp-session.ts index 46b88218f..40a079560 100644 --- a/source/acp/acp-session.ts +++ b/source/acp/acp-session.ts @@ -2,6 +2,7 @@ import type { AgentSideConnection, ClientCapabilities, } from '@agentclientprotocol/sdk'; +import {TimelineManager} from '@/services/timeline-manager'; import type {DevelopmentMode, Message} from '@/types/core'; export class AcpSession { @@ -9,6 +10,7 @@ export class AcpSession { readonly cwd: string; readonly conn: AgentSideConnection; readonly clientCapabilities?: ClientCapabilities; + readonly timeline: TimelineManager; messages: Message[] = []; systemMessage?: Message; @@ -31,6 +33,7 @@ export class AcpSession { this.conn = options.conn; this.clientCapabilities = options.clientCapabilities; this.developmentMode = options.initialMode ?? 'auto-accept'; + this.timeline = new TimelineManager(options.cwd, options.sessionId); } cancel(): void { diff --git a/source/acp/acp-timeline.spec.ts b/source/acp/acp-timeline.spec.ts new file mode 100644 index 000000000..5a4029d48 --- /dev/null +++ b/source/acp/acp-timeline.spec.ts @@ -0,0 +1,83 @@ +import test from 'ava'; +import { + assistantToolCallIndex, + extractTimelineTargets, + isTimelineMutatingTool, +} from '@/acp/acp-timeline'; +import type {Message} from '@/types/core'; + +const mockToolManager = (readOnly: string[] = []) => + ({ + isReadOnly: (name: string) => readOnly.includes(name), + }) as any; + +test('isTimelineMutatingTool - skips read-only tools', t => { + t.false(isTimelineMutatingTool(mockToolManager(['read_file']), 'read_file')); +}); + +test('isTimelineMutatingTool - skips task-list and ask_user tools', t => { + const manager = mockToolManager(); + t.false(isTimelineMutatingTool(manager, 'write_tasks')); + t.false(isTimelineMutatingTool(manager, 'ask_user')); + t.false(isTimelineMutatingTool(manager, 'create_task')); +}); + +test('isTimelineMutatingTool - treats file and bash tools as mutating', t => { + const manager = mockToolManager(['read_file']); + t.true(isTimelineMutatingTool(manager, 'write_file')); + t.true(isTimelineMutatingTool(manager, 'string_replace')); + t.true(isTimelineMutatingTool(manager, 'execute_bash')); + t.true(isTimelineMutatingTool(manager, 'agent')); + t.true(isTimelineMutatingTool(manager, 'git_add')); +}); + +test('extractTimelineTargets - file tools return their path args', t => { + t.deepEqual(extractTimelineTargets('write_file', {path: 'src/a.ts'}), [ + 'src/a.ts', + ]); + t.deepEqual( + extractTimelineTargets('string_replace', {path: 'src/a.ts', old_str: 'x'}), + ['src/a.ts'], + ); + t.deepEqual(extractTimelineTargets('diff_edit', {path: 'src/a.ts'}), [ + 'src/a.ts', + ]); +}); + +test('extractTimelineTargets - file_op includes destination for move/copy', t => { + t.deepEqual( + extractTimelineTargets('file_op', { + operation: 'move', + path: 'a.ts', + destination: 'b.ts', + }), + ['a.ts', 'b.ts'], + ); + t.deepEqual( + extractTimelineTargets('file_op', {operation: 'delete', path: 'a.ts'}), + ['a.ts'], + ); + t.deepEqual( + extractTimelineTargets('file_op', {operation: 'mkdir', path: 'dir'}), + [], + ); +}); + +test('extractTimelineTargets - opaque tools return the git-diff fallback', t => { + t.is(extractTimelineTargets('execute_bash', {command: 'rm -rf src'}), 'opaque'); + t.is(extractTimelineTargets('agent', {prompt: 'edit files'}), 'opaque'); + t.is(extractTimelineTargets('git_commit', {message: 'wip'}), 'opaque'); +}); + +test('assistantToolCallIndex - returns the last assistant message index', t => { + const messages: Message[] = [ + {role: 'user', content: 'hi'}, + {role: 'assistant', content: '', tool_calls: []}, + ]; + t.is(assistantToolCallIndex(messages), 1); +}); + +test('assistantToolCallIndex - falls back to messages.length when none', t => { + const messages: Message[] = [{role: 'user', content: 'hi'}]; + t.is(assistantToolCallIndex(messages), 1); +}); diff --git a/source/acp/acp-timeline.ts b/source/acp/acp-timeline.ts new file mode 100644 index 000000000..891d3c64d --- /dev/null +++ b/source/acp/acp-timeline.ts @@ -0,0 +1,183 @@ +import type {ToolManager} from '@/tools/tool-manager'; +import type {Message, ToolCall} from '@/types/core'; +import type {TimelineEntryMeta} from '@/types/timeline'; +import {formatError} from '@/utils/error-formatter'; +import {logWarning} from '@/utils/message-queue'; +import type {AcpSession} from './acp-session'; + +const FILE_ARG_TOOLS = new Set([ + 'write_file', + 'string_replace', + 'diff_edit', + 'file_op', +]); + +const NON_WORKSPACE_TOOLS = new Set([ + 'ask_user', + 'write_tasks', + 'create_task', + 'update_task', + 'delete_task', + 'list_tasks', + 'switch_mode', +]); + +export function isTimelineMutatingTool( + toolManager: ToolManager, + toolName: string, +): boolean { + if (NON_WORKSPACE_TOOLS.has(toolName)) { + return false; + } + return !toolManager.isReadOnly(toolName); +} + +/** + * Exact file paths this tool will touch, or `'opaque'` when we must fall + * back to a git-status diff (bash, agent, git mutators, custom/MCP). + * An empty array means skip capture (e.g. `file_op mkdir`). + */ +export function extractTimelineTargets( + toolName: string, + args: Record, +): string[] | 'opaque' { + if (!FILE_ARG_TOOLS.has(toolName)) { + return 'opaque'; + } + + const paths: string[] = []; + if (typeof args.path === 'string' && args.path.length > 0) { + paths.push(args.path); + } + if (typeof args.file_path === 'string' && args.file_path.length > 0) { + paths.push(args.file_path); + } + + if (toolName === 'file_op') { + const operation = args.operation; + if (operation === 'mkdir') { + return []; + } + if ( + (operation === 'move' || operation === 'copy') && + typeof args.destination === 'string' && + args.destination.length > 0 + ) { + paths.push(args.destination); + } + } + + return paths; +} + +export function assistantToolCallIndex(messages: Message[]): number { + for (let i = messages.length - 1; i >= 0; i--) { + if (messages[i].role === 'assistant') { + return i; + } + } + return messages.length; +} + +interface OpaqueCaptureContext { + mode: 'opaque'; + beforeKeys: Set; + files: Map; + toolCallId: string; + toolName: string; + title: string; + truncateToMessageIndex: number; +} + +interface DirectCaptureContext { + mode: 'direct'; + entry: TimelineEntryMeta | null; +} + +export type TimelineCaptureContext = + | OpaqueCaptureContext + | DirectCaptureContext + | null; + +export async function beginTimelineCapture( + session: AcpSession, + toolManager: ToolManager, + toolCall: ToolCall, + messages: Message[], + title: string, +): Promise { + const toolName = toolCall.function.name; + if (!isTimelineMutatingTool(toolManager, toolName)) { + return null; + } + + const args = (toolCall.function.arguments ?? {}) as Record; + const targets = extractTimelineTargets(toolName, args); + if (targets !== 'opaque' && targets.length === 0) { + return null; + } + + const truncateToMessageIndex = assistantToolCallIndex(messages); + const meta = { + toolCallId: toolCall.id, + toolName, + title, + truncateToMessageIndex, + }; + + try { + if (targets === 'opaque') { + const modified = session.timeline.getModifiedFiles(); + const files = await session.timeline.snapshotPaths(modified); + return { + mode: 'opaque', + beforeKeys: new Set(files.keys()), + files, + ...meta, + }; + } + + const files = await session.timeline.snapshotPaths(targets); + const entry = await session.timeline.capture({...meta, files}); + return {mode: 'direct', entry}; + } catch (error) { + logWarning('Failed to capture action timeline checkpoint', true, { + context: {toolName, error: formatError(error)}, + }); + return null; + } +} + +export async function finishTimelineCapture( + session: AcpSession, + context: TimelineCaptureContext, +): Promise { + if (!context || context.mode !== 'opaque') { + return context?.mode === 'direct' ? context.entry : null; + } + + try { + const afterModified = session.timeline.getModifiedFiles(); + for (const filePath of afterModified) { + const relative = session.timeline.toRelativePath(filePath); + if (!relative || context.beforeKeys.has(relative)) { + continue; + } + const head = session.timeline.getHeadContent(relative); + context.files.set(relative, head); + } + + return await session.timeline.capture({ + toolCallId: context.toolCallId, + toolName: context.toolName, + title: context.title, + truncateToMessageIndex: context.truncateToMessageIndex, + files: context.files, + }); + } catch (error) { + logWarning('Failed to finalize action timeline checkpoint', true, { + context: {toolName: context.toolName, error: formatError(error)}, + }); + return null; + } +} diff --git a/source/acp/conversation.contract.spec.ts b/source/acp/conversation.contract.spec.ts index 0645a5e82..7c1838923 100644 --- a/source/acp/conversation.contract.spec.ts +++ b/source/acp/conversation.contract.spec.ts @@ -23,6 +23,7 @@ const createMockToolManager = (tools: string[], approval: boolean = false) => ({ getFilteredTools: () => tools.reduce((acc, t) => ({...acc, [t]: {}}), {}), hasTool: (name: string) => tools.includes(name), getToolEntry: () => ({approval}), + isReadOnly: (name: string) => name === 'read_file', }); const createMockClient = (toolCalls: ToolCall[]) => ({ diff --git a/source/constants.ts b/source/constants.ts index aebbec35b..8524dd6ee 100644 --- a/source/constants.ts +++ b/source/constants.ts @@ -40,6 +40,7 @@ export const MAX_SESSION_NAME_LENGTH = 100; // === LIMITS === export const MAX_CHECKPOINT_FILES = 50; +export const MAX_TIMELINE_ENTRIES = 50; export const MAX_FIND_FILES_RESULTS = 100; export const MAX_SEARCH_RESULTS = 100; export const MAX_PROMPT_HISTORY_SIZE = 100; diff --git a/source/services/file-snapshot.ts b/source/services/file-snapshot.ts index 2ed26d67b..5b246d4f7 100644 --- a/source/services/file-snapshot.ts +++ b/source/services/file-snapshot.ts @@ -1,4 +1,4 @@ -import {execSync} from 'child_process'; +import {execFileSync, execSync} from 'child_process'; import {existsSync} from 'fs'; import * as fs from 'fs/promises'; import * as path from 'path'; @@ -124,6 +124,38 @@ export class FileSnapshotService { } } + /** + * Return HEAD contents of a tracked file, or null if git is unavailable + * or the path is not in HEAD (untracked / unknown). + */ + getHeadContent(relativePath: string): string | null { + try { + return execFileSync('git', ['show', `HEAD:${relativePath}`], { + cwd: this.workspaceRoot, + encoding: 'utf-8', + stdio: ['pipe', 'pipe', 'pipe'], + }); + } catch { + return null; + } + } + + /** + * Delete a file inside the workspace. Refuses paths that escape the root. + */ + async deleteFile(relativePath: string): Promise { + const absolutePath = path.resolve(this.workspaceRoot, relativePath); // nosemgrep + const relative = path.relative(this.workspaceRoot, absolutePath); + if (relative.startsWith('..') || path.isAbsolute(relative)) { + throw new Error( + `Refusing to delete path outside workspace: ${relativePath}`, + ); + } + if (existsSync(absolutePath)) { + await fs.unlink(absolutePath); + } + } + /** * Get the size of a file snapshot */ diff --git a/source/services/timeline-manager.spec.ts b/source/services/timeline-manager.spec.ts new file mode 100644 index 000000000..ebb02221c --- /dev/null +++ b/source/services/timeline-manager.spec.ts @@ -0,0 +1,271 @@ +import {existsSync} from 'fs'; +import * as path from 'path'; +import test from 'ava'; +import * as fs from 'fs/promises'; +import {MAX_TIMELINE_ENTRIES} from '@/constants'; +import {TimelineManager} from './timeline-manager'; + +async function createTempDir(): Promise { + const tempDir = path.join( + process.cwd(), + '.test-temp', + `timeline-test-${Date.now()}-${Math.random().toString(36).slice(2)}`, + ); + await fs.mkdir(tempDir, {recursive: true}); + return tempDir; +} + +async function cleanupTempDir(dir: string): Promise { + try { + await fs.rm(dir, {recursive: true, force: true}); + } catch { + // Ignore cleanup errors + } +} + +async function writeFile( + dir: string, + relativePath: string, + content: string, +): Promise { + const fullPath = path.join(dir, relativePath); + await fs.mkdir(path.dirname(fullPath), {recursive: true}); + await fs.writeFile(fullPath, content, 'utf-8'); +} + +function filesMap( + entries: Array<[string, string | null]>, +): Map { + return new Map(entries); +} + +test.serial('TimelineManager captures existing file before-images', async t => { + const tempDir = await createTempDir(); + try { + await writeFile(tempDir, 'src/a.ts', 'version-1'); + const manager = new TimelineManager(tempDir, 'session-one'); + + const entry = await manager.capture({ + toolCallId: 'call-1', + toolName: 'write_file', + title: 'write_file: src/a.ts', + truncateToMessageIndex: 2, + files: await manager.snapshotPaths(['src/a.ts']), + }); + + t.truthy(entry); + t.is(entry?.seq, 1); + t.deepEqual(entry?.filesChanged, ['src/a.ts']); + t.is(entry?.truncateToMessageIndex, 2); + + const listed = await manager.list(); + t.is(listed.length, 1); + t.is(listed[0].id, entry?.id); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager records nonexistent files as created', async t => { + const tempDir = await createTempDir(); + try { + const manager = new TimelineManager(tempDir, 'session-created'); + const snapshots = await manager.snapshotPaths(['brand-new.ts']); + t.is(snapshots.get('brand-new.ts'), null); + + const entry = await manager.capture({ + toolCallId: 'call-new', + toolName: 'write_file', + title: 'write_file: brand-new.ts', + truncateToMessageIndex: 1, + files: snapshots, + }); + + t.truthy(entry); + t.deepEqual(entry?.filesChanged, ['brand-new.ts']); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager skips capture when no files are provided', async t => { + const tempDir = await createTempDir(); + try { + const manager = new TimelineManager(tempDir, 'session-empty'); + const entry = await manager.capture({ + toolCallId: 'call-empty', + toolName: 'execute_bash', + title: 'execute_bash', + truncateToMessageIndex: 0, + files: new Map(), + }); + t.is(entry, null); + t.deepEqual(await manager.list(), []); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager revert restores earlier content in reverse order', async t => { + const tempDir = await createTempDir(); + try { + await writeFile(tempDir, 'a.ts', 'v1'); + const manager = new TimelineManager(tempDir, 'session-revert'); + + const first = await manager.capture({ + toolCallId: 'c1', + toolName: 'write_file', + title: 'step 1', + truncateToMessageIndex: 1, + files: filesMap([['a.ts', 'v1']]), + }); + await writeFile(tempDir, 'a.ts', 'v2'); + + const second = await manager.capture({ + toolCallId: 'c2', + toolName: 'write_file', + title: 'step 2', + truncateToMessageIndex: 3, + files: filesMap([['a.ts', 'v2']]), + }); + await writeFile(tempDir, 'a.ts', 'v3'); + + t.truthy(first); + t.truthy(second); + + const result = await manager.revertTo(first!.id); + t.is(result.revertedTo.id, first!.id); + t.true(result.filesRestored.includes('a.ts')); + + const restored = await fs.readFile(path.join(tempDir, 'a.ts'), 'utf-8'); + t.is(restored, 'v1'); + t.deepEqual(await manager.list(), []); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager revert of a later entry keeps earlier checkpoints', async t => { + const tempDir = await createTempDir(); + try { + const manager = new TimelineManager(tempDir, 'session-partial'); + const first = await manager.capture({ + toolCallId: 'c1', + toolName: 'write_file', + title: 'step 1', + truncateToMessageIndex: 1, + files: filesMap([['a.ts', 'v1']]), + }); + const second = await manager.capture({ + toolCallId: 'c2', + toolName: 'write_file', + title: 'step 2', + truncateToMessageIndex: 3, + files: filesMap([['b.ts', null]]), + }); + await writeFile(tempDir, 'b.ts', 'b2'); + + await manager.revertTo(second!.id); + t.is((await manager.list()).length, 1); + t.is((await manager.list())[0].id, first!.id); + t.false(existsSync(path.join(tempDir, 'b.ts'))); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager revert deletes files created after the checkpoint', async t => { + const tempDir = await createTempDir(); + try { + const manager = new TimelineManager(tempDir, 'session-delete'); + const entry = await manager.capture({ + toolCallId: 'c1', + toolName: 'write_file', + title: 'create', + truncateToMessageIndex: 1, + files: filesMap([['created.ts', null]]), + }); + await writeFile(tempDir, 'created.ts', 'new file'); + + await manager.revertTo(entry!.id); + t.false(existsSync(path.join(tempDir, 'created.ts'))); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager prunes oldest entries past the retention cap', async t => { + const tempDir = await createTempDir(); + try { + const manager = new TimelineManager(tempDir, 'session-prune'); + for (let i = 0; i < MAX_TIMELINE_ENTRIES + 3; i++) { + await manager.capture({ + toolCallId: `c${i}`, + toolName: 'write_file', + title: `step ${i + 1}`, + truncateToMessageIndex: i, + files: filesMap([[`f${i}.ts`, `content-${i}`]]), + }); + } + + const listed = await manager.list(); + t.is(listed.length, MAX_TIMELINE_ENTRIES); + t.is(listed[0].seq, 4); + t.is(listed[listed.length - 1].seq, MAX_TIMELINE_ENTRIES + 3); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager clear removes the session directory', async t => { + const tempDir = await createTempDir(); + try { + const manager = new TimelineManager(tempDir, 'session-clear'); + await manager.capture({ + toolCallId: 'c1', + toolName: 'write_file', + title: 'step', + truncateToMessageIndex: 0, + files: filesMap([['a.ts', 'x']]), + }); + const timelineDir = path.join( + tempDir, + '.nanocoder', + 'timeline', + 'session-clear', + ); + t.true(existsSync(timelineDir)); + await manager.clear(); + t.false(existsSync(timelineDir)); + t.deepEqual(await manager.list(), []); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager rejects unsafe session ids', t => { + t.throws(() => new TimelineManager('/tmp', '../escape'), { + message: /Invalid timeline session id/, + }); + t.throws(() => new TimelineManager('/tmp', 'foo/bar'), { + message: /Invalid timeline session id/, + }); +}); + +test.serial('TimelineManager revertTo throws for unknown checkpoint', async t => { + const tempDir = await createTempDir(); + try { + const manager = new TimelineManager(tempDir, 'session-missing'); + await t.throwsAsync(manager.revertTo('does-not-exist'), { + message: /does not exist/, + }); + } finally { + await cleanupTempDir(tempDir); + } +}); + +test.serial('TimelineManager toRelativePath rejects paths outside the workspace', t => { + const manager = new TimelineManager('/tmp/workspace', 'session-paths'); + t.is(manager.toRelativePath('/tmp/workspace/src/a.ts'), 'src/a.ts'); + t.is(manager.toRelativePath('/etc/passwd'), null); +}); diff --git a/source/services/timeline-manager.ts b/source/services/timeline-manager.ts new file mode 100644 index 000000000..918d23b0a --- /dev/null +++ b/source/services/timeline-manager.ts @@ -0,0 +1,332 @@ +import {existsSync} from 'fs'; +import * as fs from 'fs/promises'; +import * as path from 'path'; +import {MAX_TIMELINE_ENTRIES} from '@/constants'; +import type { + TimelineCaptureInput, + TimelineEntryMeta, + TimelineIndex, + TimelineIndexEntry, + TimelineRevertResult, +} from '@/types/timeline'; +import {formatError} from '@/utils/error-formatter'; +import {logWarning} from '@/utils/message-queue'; +import {FileSnapshotService} from './file-snapshot'; + +/** + * Per-session log of before-images captured ahead of mutating tool calls. + * Stored under `.nanocoder/timeline//`. + */ +export class TimelineManager { + private readonly workspaceRoot: string; + private readonly timelineDir: string; + private readonly fileSnapshotService: FileSnapshotService; + private index: TimelineIndex | null = null; + + constructor(workspaceRoot: string, sessionId: string) { + this.assertSafeId(sessionId); + this.workspaceRoot = workspaceRoot; + // nosemgrep + this.timelineDir = path.join( + workspaceRoot, + '.nanocoder', + 'timeline', + sessionId, + ); + this.fileSnapshotService = new FileSnapshotService(workspaceRoot); + } + + toRelativePath(filePath: string): string | null { + const absolutePath = path.resolve(this.workspaceRoot, filePath); // nosemgrep + const relative = path.relative(this.workspaceRoot, absolutePath); + if (relative.startsWith('..') || path.isAbsolute(relative)) { + return null; + } + return relative.split(path.sep).join('/'); + } + + getModifiedFiles(): string[] { + return this.fileSnapshotService.getModifiedFiles(); + } + + getHeadContent(relativePath: string): string | null { + return this.fileSnapshotService.getHeadContent(relativePath); + } + + fileExists(relativePath: string): boolean { + const absolutePath = path.resolve(this.workspaceRoot, relativePath); // nosemgrep + return existsSync(absolutePath); + } + + /** + * Snapshot the given paths. Missing files are recorded as `null`. + */ + async snapshotPaths( + filePaths: string[], + ): Promise> { + const result = new Map(); + const existing: string[] = []; + + for (const filePath of filePaths) { + const relative = this.toRelativePath(filePath); + if (!relative) { + continue; + } + if (this.fileExists(relative)) { + existing.push(relative); + } else { + result.set(relative, null); + } + } + + if (existing.length > 0) { + const captured = await this.fileSnapshotService.captureFiles(existing); + for (const [relative, content] of captured) { + result.set(relative, content); + } + } + + return result; + } + + async list(): Promise { + const index = await this.loadIndex(); + return index.entries.map(entry => this.toMeta(entry)); + } + + async capture( + input: TimelineCaptureInput, + ): Promise { + if (input.files.size === 0) { + return null; + } + + await this.ensureDir(); + const index = await this.loadIndex(); + + const createdFiles: string[] = []; + const existing = new Map(); + for (const [relative, content] of input.files) { + const normalized = this.toRelativePath(relative); + if (!normalized) { + continue; + } + if (content === null) { + createdFiles.push(normalized); + } else { + existing.set(normalized, content); + } + } + + if (createdFiles.length === 0 && existing.size === 0) { + return null; + } + + const id = crypto.randomUUID(); + const entry: TimelineIndexEntry = { + id, + seq: index.nextSeq, + toolCallId: input.toolCallId, + toolName: input.toolName, + title: input.title, + timestamp: new Date().toISOString(), + truncateToMessageIndex: input.truncateToMessageIndex, + filesChanged: [...existing.keys(), ...createdFiles], + createdFiles, + }; + + if (existing.size > 0) { + const filesDir = this.entryFilesDir(id); + await fs.mkdir(filesDir, {recursive: true}); + for (const [relativePath, content] of existing) { + const filePath = path.join(filesDir, relativePath); // nosemgrep + await fs.mkdir(path.dirname(filePath), {recursive: true}); + await fs.writeFile(filePath, content, 'utf-8'); + } + } + + index.entries.push(entry); + index.nextSeq += 1; + await this.pruneOldest(index); + await this.saveIndex(index); + + return this.toMeta(entry); + } + + async revertTo(checkpointId: string): Promise { + const index = await this.loadIndex(); + const targetIndex = index.entries.findIndex( + entry => entry.id === checkpointId, + ); + if (targetIndex === -1) { + throw new Error(`Timeline checkpoint '${checkpointId}' does not exist`); + } + + const toRevert = index.entries.slice(targetIndex).reverse(); + const filesRestored: string[] = []; + + for (const entry of toRevert) { + const restored = await this.restoreEntry(entry); + filesRestored.push(...restored); + } + + index.entries = index.entries.slice(0, targetIndex); + await this.saveIndex(index); + + for (const entry of toRevert) { + await this.removeEntryDir(entry.id); + } + + return { + revertedTo: this.toMeta(toRevert[toRevert.length - 1]), + filesRestored: [...new Set(filesRestored)], + }; + } + + async clear(): Promise { + this.index = { + nextSeq: 1, + entries: [], + }; + if (existsSync(this.timelineDir)) { + await fs.rm(this.timelineDir, {recursive: true, force: true}); + } + } + + private async restoreEntry(entry: TimelineIndexEntry): Promise { + const restored: string[] = []; + const created = new Set(entry.createdFiles); + const snapshots = new Map(); + const filesDir = this.entryFilesDir(entry.id); + + for (const relativePath of entry.filesChanged) { + if (created.has(relativePath)) { + try { + await this.fileSnapshotService.deleteFile(relativePath); + restored.push(relativePath); + } catch (error) { + logWarning('Could not delete created timeline file', true, { + context: { + relativePath, + error: formatError(error), + }, + }); + } + continue; + } + + try { + const filePath = path.join(filesDir, relativePath); // nosemgrep + const content = await fs.readFile(filePath, 'utf-8'); + snapshots.set(relativePath, content); + } catch (error) { + logWarning('Could not load timeline file snapshot', true, { + context: { + relativePath, + error: formatError(error), + }, + }); + } + } + + if (snapshots.size > 0) { + await this.fileSnapshotService.restoreFiles(snapshots); + restored.push(...snapshots.keys()); + } + + return restored; + } + + private async pruneOldest(index: TimelineIndex): Promise { + while (index.entries.length > MAX_TIMELINE_ENTRIES) { + const oldest = index.entries.shift(); + if (oldest) { + await this.removeEntryDir(oldest.id); + } + } + } + + private async removeEntryDir(id: string): Promise { + const dir = path.join(this.timelineDir, 'entries', id); // nosemgrep + if (existsSync(dir)) { + await fs.rm(dir, {recursive: true, force: true}); + } + } + + private entryFilesDir(id: string): string { + return path.join(this.timelineDir, 'entries', id, 'files'); // nosemgrep + } + + private toMeta(entry: TimelineIndexEntry): TimelineEntryMeta { + return { + id: entry.id, + seq: entry.seq, + toolCallId: entry.toolCallId, + toolName: entry.toolName, + title: entry.title, + timestamp: entry.timestamp, + truncateToMessageIndex: entry.truncateToMessageIndex, + filesChanged: entry.filesChanged, + }; + } + + private async ensureDir(): Promise { + if (!existsSync(this.timelineDir)) { + await fs.mkdir(this.timelineDir, {recursive: true}); + } + } + + private indexPath(): string { + return path.join(this.timelineDir, 'timeline.json'); // nosemgrep + } + + private async loadIndex(): Promise { + if (this.index) { + return this.index; + } + + const indexPath = this.indexPath(); + if (!existsSync(indexPath)) { + this.index = {nextSeq: 1, entries: []}; + return this.index; + } + + try { + const raw = await fs.readFile(indexPath, 'utf-8'); + const parsed = JSON.parse(raw) as TimelineIndex; + if ( + !Array.isArray(parsed.entries) || + typeof parsed.nextSeq !== 'number' + ) { + throw new Error('Invalid timeline index'); + } + this.index = parsed; + return this.index; + } catch (error) { + logWarning('Could not read timeline index, starting empty', true, { + context: {error: formatError(error)}, + }); + this.index = {nextSeq: 1, entries: []}; + return this.index; + } + } + + private async saveIndex(index: TimelineIndex): Promise { + this.index = index; + await this.ensureDir(); + await fs.writeFile( + this.indexPath(), + JSON.stringify(index, null, 2), + 'utf-8', + ); + } + + private assertSafeId(id: string): void { + if (!id || id.length > 100 || id.includes('..') || id.startsWith('.')) { + throw new Error(`Invalid timeline session id: '${id}'`); + } + if (/[<>:"/\\|?*]/.test(id)) { + throw new Error(`Invalid timeline session id: '${id}'`); + } + } +} diff --git a/source/types/index.ts b/source/types/index.ts index 05a762245..0b4e57140 100644 --- a/source/types/index.ts +++ b/source/types/index.ts @@ -11,5 +11,6 @@ export * from '@/types/hooks'; export * from '@/types/mcp'; export * from '@/types/skills'; export * from '@/types/system'; +export * from '@/types/timeline'; export * from '@/types/ui'; export * from '@/types/utils'; diff --git a/source/types/timeline.ts b/source/types/timeline.ts new file mode 100644 index 000000000..3596baefa --- /dev/null +++ b/source/types/timeline.ts @@ -0,0 +1,39 @@ +/** + * Metadata for a single action-timeline checkpoint (no file contents). + * One entry is recorded immediately before each workspace-mutating tool call. + */ +export interface TimelineEntryMeta { + id: string; + seq: number; + toolCallId: string; + toolName: string; + title: string; + timestamp: string; + /** Slice `messages` to this index (exclusive) so the assistant tool_calls turn is dropped. */ + truncateToMessageIndex: number; + filesChanged: string[]; +} + +export interface TimelineCaptureInput { + toolCallId: string; + toolName: string; + title: string; + truncateToMessageIndex: number; + /** Relative paths → UTF-8 before-image, or `null` if the file did not exist (revert deletes it). */ + files: Map; +} + +export interface TimelineRevertResult { + revertedTo: TimelineEntryMeta; + filesRestored: string[]; +} + +export interface TimelineIndex { + nextSeq: number; + entries: TimelineIndexEntry[]; +} + +export interface TimelineIndexEntry extends TimelineEntryMeta { + /** Files that did not exist before this tool call; revert unlinks them. */ + createdFiles: string[]; +} diff --git a/test.txt b/test.txt new file mode 100644 index 000000000..c887720df --- /dev/null +++ b/test.txt @@ -0,0 +1,7 @@ +Manual testing is the process of manually checking software for defects. Testers execute test cases without the use of automation tools. + +Automated testing involves using software tools and scripts to automatically execute tests on software. It increases speed, coverage, and reliability compared to manual testing. + +Alpha testing is a type of acceptance testing performed by internal teams to identify bugs before releasing the product to external users. + +Beta testing is a phase of software testing where a product is released to a limited external audience to identify issues in a real-world usage environment before full release. \ No newline at end of file From 77979740e62452902edf3686800a5448f217ddbb Mon Sep 17 00:00:00 2001 From: AryanNandanwar Date: Tue, 18 Aug 2026 02:07:33 +0530 Subject: [PATCH 2/5] Omit local timeline test artifacts from the branch. Session snapshots and the scratch test.txt were captured during manual testing and should not ship with the feature. Co-authored-by: Cursor --- .gitignore | 3 ++ .../files/test.txt | 5 --- .../files/test.txt | 3 -- .../files/test.txt | 3 -- .../timeline.json | 44 ------------------- .../files/test.txt | 0 .../timeline.json | 33 -------------- .../timeline.json | 4 -- test.txt | 7 --- 9 files changed, 3 insertions(+), 99 deletions(-) delete mode 100644 .nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/d401b26d-26f6-4772-9574-edc9c325c9e1/files/test.txt delete mode 100644 .nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65/files/test.txt delete mode 100644 .nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/fedc889b-12b5-401a-816b-4b919e33b089/files/test.txt delete mode 100644 .nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/timeline.json delete mode 100644 .nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/entries/70136ff6-3264-4f26-8c7c-5c3389031ad5/files/test.txt delete mode 100644 .nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/timeline.json delete mode 100644 .nanocoder/timeline/b6d817dc-9f6e-491a-8ee3-e203a86b2852/timeline.json delete mode 100644 test.txt diff --git a/.gitignore b/.gitignore index 812d1c9d6..c40d5761d 100644 --- a/.gitignore +++ b/.gitignore @@ -109,6 +109,9 @@ agents # These contain conversation snapshots and should not be committed **/checkpoints/ +# Action timeline before-images (per-session user data) +.nanocoder/timeline/ + # Heap snapshots .heap-snapshots diff --git a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/d401b26d-26f6-4772-9574-edc9c325c9e1/files/test.txt b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/d401b26d-26f6-4772-9574-edc9c325c9e1/files/test.txt deleted file mode 100644 index 10af5be0d..000000000 --- a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/d401b26d-26f6-4772-9574-edc9c325c9e1/files/test.txt +++ /dev/null @@ -1,5 +0,0 @@ -Manual testing is the process of manually checking software for defects. Testers execute test cases without the use of automation tools. - -Automated testing involves using software tools and scripts to automatically execute tests on software. It increases speed, coverage, and reliability compared to manual testing. - -Alpha testing is a type of acceptance testing performed by internal teams to identify bugs before releasing the product to external users. \ No newline at end of file diff --git a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65/files/test.txt b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65/files/test.txt deleted file mode 100644 index 167cdbe06..000000000 --- a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65/files/test.txt +++ /dev/null @@ -1,3 +0,0 @@ -Manual testing is the process of manually checking software for defects. Testers execute test cases without the use of automation tools. - -Automated testing involves using software tools and scripts to automatically execute tests on software. It increases speed, coverage, and reliability compared to manual testing. \ No newline at end of file diff --git a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/fedc889b-12b5-401a-816b-4b919e33b089/files/test.txt b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/fedc889b-12b5-401a-816b-4b919e33b089/files/test.txt deleted file mode 100644 index 167cdbe06..000000000 --- a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/entries/fedc889b-12b5-401a-816b-4b919e33b089/files/test.txt +++ /dev/null @@ -1,3 +0,0 @@ -Manual testing is the process of manually checking software for defects. Testers execute test cases without the use of automation tools. - -Automated testing involves using software tools and scripts to automatically execute tests on software. It increases speed, coverage, and reliability compared to manual testing. \ No newline at end of file diff --git a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/timeline.json b/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/timeline.json deleted file mode 100644 index 92d15a469..000000000 --- a/.nanocoder/timeline/1295e4da-f635-45f4-9563-5de13db0e209/timeline.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "nextSeq": 4, - "entries": [ - { - "id": "fedc889b-12b5-401a-816b-4b919e33b089", - "seq": 1, - "toolCallId": "call_z0Ej93lHzNzn660I7oK2qi1R", - "toolName": "string_replace", - "title": "string_replace: test.txt", - "timestamp": "2026-08-17T20:08:12.299Z", - "truncateToMessageIndex": 3, - "filesChanged": [ - "test.txt" - ], - "createdFiles": [] - }, - { - "id": "e1d6b9d3-4ec1-4eb5-aedc-14dd40c4ea65", - "seq": 2, - "toolCallId": "call_Todel8faSjR2FRGVU0yv6QJc", - "toolName": "string_replace", - "title": "string_replace: test.txt", - "timestamp": "2026-08-17T20:08:16.774Z", - "truncateToMessageIndex": 7, - "filesChanged": [ - "test.txt" - ], - "createdFiles": [] - }, - { - "id": "d401b26d-26f6-4772-9574-edc9c325c9e1", - "seq": 3, - "toolCallId": "call_KZXnmWqP8UUEEUX4tEtSntsD", - "toolName": "string_replace", - "title": "string_replace: test.txt", - "timestamp": "2026-08-17T20:08:35.614Z", - "truncateToMessageIndex": 13, - "filesChanged": [ - "test.txt" - ], - "createdFiles": [] - } - ] -} \ No newline at end of file diff --git a/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/entries/70136ff6-3264-4f26-8c7c-5c3389031ad5/files/test.txt b/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/entries/70136ff6-3264-4f26-8c7c-5c3389031ad5/files/test.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/timeline.json b/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/timeline.json deleted file mode 100644 index 7351b77f0..000000000 --- a/.nanocoder/timeline/8adbbccc-d993-421e-9bf9-24e640c2ef66/timeline.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "nextSeq": 3, - "entries": [ - { - "id": "108000fd-f36e-44b1-9a96-fabe57200865", - "seq": 1, - "toolCallId": "call_8PZCCvV2Nujw2XENJfZ48V9d", - "toolName": "write_file", - "title": "write_file: test.txt", - "timestamp": "2026-08-17T20:01:25.100Z", - "truncateToMessageIndex": 1, - "filesChanged": [ - "test.txt" - ], - "createdFiles": [ - "test.txt" - ] - }, - { - "id": "70136ff6-3264-4f26-8c7c-5c3389031ad5", - "seq": 2, - "toolCallId": "call_q4FSQgII0EzHvrF1H7ISUEVo", - "toolName": "write_file", - "title": "write_file: test.txt", - "timestamp": "2026-08-17T20:02:22.288Z", - "truncateToMessageIndex": 7, - "filesChanged": [ - "test.txt" - ], - "createdFiles": [] - } - ] -} \ No newline at end of file diff --git a/.nanocoder/timeline/b6d817dc-9f6e-491a-8ee3-e203a86b2852/timeline.json b/.nanocoder/timeline/b6d817dc-9f6e-491a-8ee3-e203a86b2852/timeline.json deleted file mode 100644 index 16fe2a954..000000000 --- a/.nanocoder/timeline/b6d817dc-9f6e-491a-8ee3-e203a86b2852/timeline.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "nextSeq": 3, - "entries": [] -} \ No newline at end of file diff --git a/test.txt b/test.txt deleted file mode 100644 index c887720df..000000000 --- a/test.txt +++ /dev/null @@ -1,7 +0,0 @@ -Manual testing is the process of manually checking software for defects. Testers execute test cases without the use of automation tools. - -Automated testing involves using software tools and scripts to automatically execute tests on software. It increases speed, coverage, and reliability compared to manual testing. - -Alpha testing is a type of acceptance testing performed by internal teams to identify bugs before releasing the product to external users. - -Beta testing is a phase of software testing where a product is released to a limited external audience to identify issues in a real-world usage environment before full release. \ No newline at end of file From 17761f3505d3014f84ac1dd4957c7e13999f852e Mon Sep 17 00:00:00 2001 From: Aryan Nandanwar <116783328+AryanNandanwar@users.noreply.github.com> Date: Tue, 18 Aug 2026 02:27:56 +0530 Subject: [PATCH 3/5] fix: stub isReadOnly on ACP queued-tools test mock (#2) Timeline capture now calls toolManager.isReadOnly() during tool execution. The queued-tools spec mock omitted that method, so four tests failed in CI with "isReadOnly is not a function". Co-authored-by: Cursor Agent --- source/acp/acp-queued-tools.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/source/acp/acp-queued-tools.spec.ts b/source/acp/acp-queued-tools.spec.ts index 355f56c18..3881cf09b 100644 --- a/source/acp/acp-queued-tools.spec.ts +++ b/source/acp/acp-queued-tools.spec.ts @@ -53,6 +53,7 @@ const createMockToolManager = () => ({ getFilteredTools: () => ({}), hasTool: () => true, getToolEntry: () => ({approval: false}), + isReadOnly: (name: string) => name !== 'write_file' && name !== 'execute_bash', }); /** Every update carrying this tool call id, in emission order. */ From e49948ba654853a4df69b5bd25f8e5cf68d55a39 Mon Sep 17 00:00:00 2001 From: AryanNandanwar Date: Tue, 18 Aug 2026 02:33:26 +0530 Subject: [PATCH 4/5] semgrep error --- source/services/timeline-manager.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/services/timeline-manager.ts b/source/services/timeline-manager.ts index 918d23b0a..313000a49 100644 --- a/source/services/timeline-manager.ts +++ b/source/services/timeline-manager.ts @@ -26,12 +26,11 @@ export class TimelineManager { constructor(workspaceRoot: string, sessionId: string) { this.assertSafeId(sessionId); this.workspaceRoot = workspaceRoot; - // nosemgrep this.timelineDir = path.join( - workspaceRoot, + workspaceRoot, // nosemgrep '.nanocoder', 'timeline', - sessionId, + sessionId, // nosemgrep ); this.fileSnapshotService = new FileSnapshotService(workspaceRoot); } From 4f86b076ec40e8a8ad4966cb84efb409bd21249c Mon Sep 17 00:00:00 2001 From: AryanNandanwar Date: Tue, 18 Aug 2026 14:45:49 +0530 Subject: [PATCH 5/5] passes tests --- source/vscode/chat-panel-harness.ts | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/source/vscode/chat-panel-harness.ts b/source/vscode/chat-panel-harness.ts index b4a43989b..d02716c2d 100644 --- a/source/vscode/chat-panel-harness.ts +++ b/source/vscode/chat-panel-harness.ts @@ -1,18 +1,21 @@ /** - * Boots `plugins/vscode/media/chat-panel.js` inside a VM against a stub DOM so - * the panel's rendering can be driven and inspected from tests. Shared by the - * chat-panel specs; extracted verbatim from chat-panel-thoughts.spec.ts. + * Boots the chat panel scripts inside a VM against a stub DOM so the panel's + * rendering can be driven and inspected from tests. Shared by the chat-panel + * specs. Mirrors production load order in chat-panel.html: mention-utils.js + * must run first because chat-panel.js reads `globalThis.NanocoderMentionUtils` + * at IIFE eval time. */ import {readFileSync} from 'node:fs'; import {fileURLToPath} from 'node:url'; import {createContext, runInContext} from 'node:vm'; -const PANEL_SOURCE = readFileSync( +const mediaUrl = (filename: string) => fileURLToPath( - new URL('../../plugins/vscode/media/chat-panel.js', import.meta.url), - ), - 'utf8', -); + new URL(`../../plugins/vscode/media/${filename}`, import.meta.url), + ); + +const MENTION_UTILS_SOURCE = readFileSync(mediaUrl('mention-utils.js'), 'utf8'); +const PANEL_SOURCE = readFileSync(mediaUrl('chat-panel.js'), 'utf8'); const SHELL_IDS = [ 'add-image-btn', @@ -29,6 +32,7 @@ const SHELL_IDS = [ 'image-modal', 'image-preview-container', 'image-upload', + 'mention-dropdown', 'messages-container', 'modal-image', 'mode-dropdown', @@ -237,6 +241,7 @@ export function createPanel(options: {marked?: boolean} = {}) { } createContext(sandbox); + runInContext(MENTION_UTILS_SOURCE, sandbox); runInContext(PANEL_SOURCE, sandbox); const container = findById(root, 'messages-container') as StubElement;