From f429e1461a876a4a47598966b4b16c613a7c0161 Mon Sep 17 00:00:00 2001 From: Mathijs995 <mathijsdejong1995@gmail.com> Date: Sun, 30 Apr 2023 12:28:07 +0200 Subject: [PATCH 1/4] Added Sphinx docs --- .gitignore | 3 +++ README.md | 4 ++-- docs/Makefile | 20 ++++++++++++++++++++ docs/make.bat | 35 +++++++++++++++++++++++++++++++++++ docs/source/_static/logo.png | Bin 0 -> 89690 bytes docs/source/index.md | 14 ++++++++++++++ requirements.dev.txt | 6 ++++++ requirements.txt | 23 +++++++++++++++++++++++ 8 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 docs/Makefile create mode 100644 docs/make.bat create mode 100644 docs/source/_static/logo.png create mode 100644 docs/source/index.md create mode 100644 requirements.dev.txt create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore index c6335cf4..b9ea8d08 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,6 @@ dataset/ # configs configs.json + +# Static doc files +!docs/source/_static/* \ No newline at end of file diff --git a/README.md b/README.md index cafb3bff..4d8bef35 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ Using this rich data source, Nocturne contains a wide range of scenarios whose s <img src="https://user-images.githubusercontent.com/33672752/174244860-65865e95-0592-4279-ab5d-f40842092cc7.gif" width="250" height="250"/> <img src="https://user-images.githubusercontent.com/33672752/174244327-51f98409-4afd-424e-88f5-29892e89d796.gif" width="250" height="250"/> </p> --> -![Intersection Scene with Obscured View](./docs/readme_files/git_intersection_combined.gif) +![Intersection Scene with Obscured View](https://github.com/facebookresearch/nocturne/raw/main/docs/readme_files/git_intersection_combined.gif) Nocturne features a rich variety of scenes, ranging from parking lots, to merges, to roundabouts, to unsignalized intersections. -![Intersection Scene with Obscured View](./docs/readme_files/nocturne_3_by_3_scenes.gif) +![Intersection Scene with Obscured View](https://github.com/facebookresearch/nocturne/raw/main/docs/readme_files/nocturne_3_by_3_scenes.gif) More videos can be found [here](https://www.nathanlct.com/research/nocturne). diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 00000000..d0c3cbf1 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 00000000..747ffb7b --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/source/_static/logo.png b/docs/source/_static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c7c26e1d79c291d031b1e52cdde87870c723b0ce GIT binary patch literal 89690 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	qzj0-JvDR5Tf&-!$ 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Ģerw)JfL|2;4AHuq;|&K%8|>l={iZ%g@e zrQ~=VMbJh0y%>!K7H+Ws*0sC4+@y=*n)m=sZ}c0ade(>6mQ-K$Sx=4i@hlAcueso( zt>#F^von@*`k=O9^jym@Jjxa5v^@uIy$VTYY0GTNwc_*!_Ew{J2#TRg#%n%&h)<=R zrrHFct5C>?>AdZEVJ59LCEL104L!P8@3C~dj!AOhe9V&Z>+eTE@5LoRjUs6rcR__T z+j=8eA|{C>qj41#yUlcsEYn)~(W!)SLZ`$giFY3T8$8l4re63y$RDrnQ>n6NY-ot8 z$u15tJfF<6Exgn8{Lz31U^|A>y6kk@Z7or4i+kJB#O{8YYI_{9DM<EZQLRnd%S^6! zq8rokK-&RH(H9?jNj=3SfKI=X-UZ{WEUU6B+7#c#_7<|LY5Z>1v2ni@;tEOa>X6Mw zzy}Opp<#sPWa6aD_{`<|M|lD*Ze-DJ6bK)(<iUtfD*^kMbzAU|w5oNQ$P`ZaQ?tbz znS*%c4?1?yBrSaKZbYP_g5U}@_7X!bh60G6)I3B~Rq7=%QI*0=H&T>cke3oO?K67m z9VkeJb@){mJA*h!(!EA9C{St;QwT+z89w)EMSMz%JKBU}+b5}~{FMSkCb!>c#=_4T zfrQ~r8ZAf)Jsa8<2t*QqeEeN3^C;f)Ghe9-;&SUx<rU4&^!f#Db39LZ=2heFS*g$D zc7K|Q^lO{lyY#OW{?BP#X@iTm;NkED)qR8B#uvzSe_{91+^a^7cL4F+c~fJ_%wzMH zvZ|ABO|~vorAJ_Mo?b=;F~gElFpIun)s;w+!{@!oh3Cf~Eu)FTXN`GK#8p^JdVdPA zBu^2F$iS=9KNqi>WE_K21Xv9JIUSNRE~W(Dh5fMw!nx6e0Tyi1`0SD-a0L@B0Sg84 zPG8H`RHNA&?IaqcY+~(`ePZ;efq$yycHpP1v&nj}N#<^Kz0@STzUONxsh&}IzWgrh zu0Csi9XF}4B<OaXxP7i_%ALR@qw8noWX8x9Mi&VX#&k!5k86A(r1K5^7(DVLk^luM zrLoo_JEM34<YI^u5E!8L?!|7mCO;z7gX>=p;$di}<pP$udGu2EoT%jNb<CfE)UG-5 zUBJ)$!K+xrHt2V<;5Dbj+KY~f7o8>dl&c4@__h8OH{n|pc6_spl-<eX?-e}%_>d3q zJD7!UR|b<0I!c9xE-oUjWhNhev1U~{%0ISiDTG<1#&ryD(uf9$lCaVUQzoLQ95V-f z3`NvR6pQ~A3M)~@{*H`NizbdP#rTsf^JY-Lp9A%^n+eT<jxX+8+fqs!({ug`oe`X- z8ypzv_0qX>J^{{6weQW5T}qS9iZkTl2Imkfy(^O$W;^2DM1#b)=kNOF04(oh@@APB zvCGaG{Mr5|h!$~u&fGT@nAOXXDOUrfe#oCWCY5h*=}>BE$O<f1W`4mYF&Stll;JCF z1{rZuOG=YU19r8s%`#K6>Bm0q>bjh8QgisGn0EI@GT@%-ssX1yk6*N?typyfZWUb+ zV}ED+uITUHRbL-hn~U@>0$&XV^*b5U;7Tk~_1ZmF5Z*Z2tgl?J9w&Zr*=Fqh{z0^v z2p#`H9Dy_nIb7UX6H_!)UEK6LMxJRqKr`xzhr6QgiRTNatkfskr4BnKdF_R}$0w-i ze28SkaE`tIX94skWGu~Dj_A>Lqz$Z@B{)er0_zKOH&g)FI5>YUQFY^anyeaCLOe!x zh_rY?M2U@Mv+9upD&Cr}2#nJFQu`La&`|V4Y)3};Voz4<htccOytlqg=yAfv3wpfZ z$=nTGZ{Mcphvl;T#DiA)E%ykqb`j9EY%MlfbzPRkca$w@W-1U#T3K6}WL!;hBK^}* z?Rwe8reL8-MNj87%(mO~&G%GcrK{XCsNjmgB>U70_-;_npb-xf=Kl#+D-t%F;TNLF z^wj4?b8ORD+L9qBRlSwgReMD1{OJC*t@Fv9m(<aTG4-+VFHRbHebNo6U33x9;^fk3 zy`xt^HPKKFu_QPyEbWiE!jPY0ow(~3c^cy|j<#|9>92SkRc(l~7kr{)j{bO?5ks(t zrh6gDs?$H`q!DZt%Ea)^tz{D7;T=^)%<R~W5E`_pM|?9DrC*@ca-lC_CZzb0NT<y} zK`qTn6F=y6*+iM9<aihKg;tr|8eh+3Y(X-^sNGBl|4#SoQ;IFfmFBs!Tp2a+LhCfW z`Ib;XU_nKFUP)Pr(lY5G7`^Wz4{cIWN(y%-ZhBf5)XzFW`d*~Up+M14r*O1i<^<TY zU*S*R<xse&cV}KP#?@a-_U=!^!48Vfb=Ek8dRKq0&H|pcoD%4GCPE+3UmY^=KfPGP zT@V$S5o(Mzb}raoicks{_}2>G8Iu_+?H#pQnY#3kZb-A@pa)B8eIG<4LNDz-)ZLJN ze2FCHj}hpxA=cRYjLByO1<`dl-gU~9Uitm2e#}DCeY(Zn3T4bHCN_wsauOvRXQx34 zL1{i>$3kcXz50{dgH<7kBZA;?qc{KJc5H-clu-3G(-=TaZqlWz<k;5tI+cOBsaByf z_~epzN7p3X{6mE9C|AYM-JJF?QTK%8bZOqV<xO@QUng6F=1SXx6@qUzyKh$6vyaLK zVMUA!<UNxCU!?oZmQrfZ+X7!clzoZsTnsxZAyR{y%d;ZmkZvNk&J#ENw3O^E3~BjI zlPFSd*?VW0wsl5~-0&mB>#(K}B3Z{p)M`@6YMoaak58@+l*qz7oLl6FY!UJag3VU9 z6)gc9Iz!MKd}%(#B-LEL^OX2m6^ILeOJ(SjFirm{db63HAiDdynsM>G#!4-k7^x>k zdPKo8n!=LA%Cr|qb6Jvpgbtp@R)luTbn1MyT&TO1L2A2jtxi)?Nj|cY1lwb#UNM4@ z_DE0qwoF_#ffB2cenCii&Xl5mUhI_aa#TlCjdACl>sd3WsHZllGYTp%6i5h3VPh_} zLix()K<HZawrPL7JrG${#>uCiH>~%lI>z1k?MV<<T(A_}(7j1tj!l4sFVIfZ%N>u2 zv-0XHv26;WNEm#xw%!w@c$WIgq_0OWRrn$|Ez#&=m-Xe>L!OP;fV}F702A|gc7^R- zKJTD67bnwQF0W74T|r&ZkM^$^#z665q7=Sutx0q`BNMurDg`X*M?6(~KPpECGfUDK z!rz5Pnnbst$pG>JFz@UdZh{pU&sNx(?>~xB5cv`MZw+@r+r7AIIg%ONUR7=dok7yG z0Yb<_g8yh53A0;J)VKy?soIpe0FpqL3jC_?q)1Bws*o|Jr69d0EA&6WTvFMMg;pd8 z`BPdoPvKt|hcpfPQvpph$?FS~hRvE-wxS*Dt)s)mmpSsYmQ6yeuKANSN`+u*kXoLF zJtC<);jxQYdBL6V8{IRwOkc&L{1pSusOn-pqQ|n45%1v6PY^?d3hT{Azvbj$)w(jU zkz8!Ggf4dWAUwTWwaVA+(NhQq5%|?(497OeZ&olu*02c}_~Pr5ZjZ1c(<4r#8K|6> zvFb!7#S_SOz~;EG3&T2*DZJn6OzMj(Ihou&S-hiqM_Z6BK&dQlut(_V6-cv04zUNI zd!|4(Bj|}@P)TGHPx0Vm&KW@cnn-eF_LFFys<j;rwlKMIZ2%wTh;I)D;!S<deyJbq zIjuiqx?tXJsgh9wUzD4bJB)s)SLGjDfe{g4QP@-Rvofb&>_EHbOyjtnGSJ-We103( zvv6{R(THZUrPh$c(J#jgPESY)Hk6&=w7zXkkc*lv1KoE@t=%6)2j&JU3&6nmF<y`Z z=+A4N(HAOPf>@Y2ygd8*^xvII_LmdUN|u{ZJx2@KdUfx4p$}?J-g*+4>O|WvdLmD; z%F!QuS<HRem-i=@D;dF0K#wS-0N{LQ-matSZ^gG7_5mJ4EnhdjY@t0Dvd~V8%K}6d zbpCyxlt6$Xi0K**d5ojbA1OiPmgN-Dl4rQP5=-C2bD6^?yZuu(!^;P~BNqt`Quj~R z?CP$bTk)m&4XAw5X9S%cVoN^kCGBd?&aZVre%tqdw=-~d0}@%#u`ZHeRHd=PfRGM6 zd@XqbuATrXw|4&nKTPEgkoeLz;$b$7jofsU_$Xvx(q_kXn$!_+dBaIe68zMHr}0r& z?QMYIrH2^A-5#{bExybkWMlR{u<6&35)Jjp{7sh2a1<#b9{p!|lx@XEXFw^|k$`Z- zJS=4{_F?-^cUO@w8i~=4anT=6pt)k3IyDp1`7$w9Q^)V1r-9sF;SHC+EdwxRN(K7C z5tq^3F+t>ryw&41py^sP0;oLOJ|tEs(|Be?>NPY_N_Kj}^7tH9cgrRMD7jn9uGL_e z`KBN~_P{X;pKq%y(Ld0Sty^7S%bBpcG-z{GsXq-<_`JggZ8N*E>SUM<{Z!#p*h2c& zC0(GcE^{V*sZ!Wp1>O}55>yPFFT3S2+RLN*gD3?mup?_Mpd&(A0Y7ic_L|d0bILt> z&ff!rxS$V=t6bRlD3wWybcmw1D{`f_xC+$;n9I!E(__=W#mss^DRJ{{i4E=Q&ab3K zY!aub$qj#=)RwDNjYl%mn6x}E8pkvF@I3yaUTI3<n0s92B;oD8$n3Q2kMhShc_bcH zZge9c0)PEnzu_xVO->WON<P!~JC*omG?EpJvuFdyUFa+!8FwCN;Tcg(zb#&Ex{S?w z6T`TN0l~_Xa3T+$vF9VFR0dcit+xIUtoWI0{g<7B=btA+qDkS|NH>&Qv^dFLHHXxh zj@<hMRnFqQ1AW3-t7iu5xR8zne^BQ&X?()nMJVGsKD0(iB>4IxS~^HnwoXn)fFRZ{ zhWb~ju6Bk9L9FokEeymER$7eC>@FDD5p$QU39c3!E0R~a+B!Y5!8@v`jk*a-cRfj^ zCL^9%2LETqCMT|g9jE(<r-HZU*C`lo%9EBEqP0?Fv;%T!X<viFnF54COT{>NRteCz zuuhmKqc5YwJk>+BouWtkDUVr=WEz}-ir4F^eCp4*kDNjgfY`G`e;GZ|f|f!gImREz zgvow48YwtiPKi(eRxW0)s%s7JbukUKmTI|hkz#)<?R08Yn*>W<`^;EiY?o7EraS+- z%X9eBrm`!Kuguk&uxHvVWi0XaZ!XOyG@|F|Hm2^pAjZ(@6dK3>*H98+p=o|wE0)9S z<2=#vx4rv<=UhEh<(gZA4{K_i&&hai=R{IF?08x0X5^MGAMsQ|VjR^|6&~tF`Hm|> z)(z&-Y77Cz;2;qC6CZF8ot8ccjtpUF44Z}EnDBR(jD`H1bR!mjzxr%`x8ZI<p5b^4 zxDB0`OilVcO8Zl*Sl(c`UuVVu4fC9Cb={6rIfw=Z7MiF0?D`c`H;xC!-IX%<#@)g> zkP;c9GWm9rftHN}__rf0_uf;kGY4)seTD22^Xvb@-kL9Yjb}1&HjvuvO{IRS6GA{L zJ%Lc@=F~LV)1}hxAkmJNcXUciJ6^_Jem3(un%gTCc~VaWl<%RXZpTestZ17HfN9Ri zIq*o$@)&z!7x}1F{6FFz_$cG}mrQ+kY{Q{&JkvHTbsL^o{EEAxVB?~zbvM0bJUPPm z;PqRAGp-AzxuH#OY5Vaxe=$k>PB;tv@9k6hbI>jzA?#=Ce8899HfIg96Oq({*=2uM zUmKe9o`q+iW_IhlZabH`ZCb=qT?PolA_jrdjk<oC+3}T=fU^<hUUC?th}GnT&ll5- zmHgFN)y8VcOCt293lQKJznVr+p8S{!EnVg=a@O&<>BN;#qw-@ltvkG}=&#Xsp^<P| zYZp@<^;6`ON?vstycwKGuWVr?I<+oow%XGoXY%`b^6&-;Rfar{rzfL}Sa>vpt0vLB zlE$y{_NrW*J?-{)Xj2Lijj(y59%I@{V;+61l|qI89mDwW4+lR-w^&+A4?lEp-ki6T z8u>!2Apn+_ye^gb5*<Ih|9GWZPrv(tKy}hkhYgDXcGqua;f@lPd5nA55a>Lw&<}5K zDuS+WFYd8;$jEoATcfS^FLPDk!G4K*(d>f1>*NHDL(bIdf$*jvT+F-p$RZjn+AbO- z|4E?w9o{$lA+LXG%t>n@A<#M1;qFR(h-PV~aFr}4>yrhFB&jO64scd~d`W<0RT$AT zH7yv*X{7|FFiO=~CIoX3f<d)XHO}mRyS%z2s1%mtM1SsRvhZ&-`qg59>D?}OcZY7i zgU6gs{4>Q5irfbkiXPv^WOgbDJG*blavJW;+pCu{wF(j~b=1|951;NZ`}+D$-y0fE z!L3optwL_$a&v~QYWlxEYwrWZVCwOD3(9)OF_d%J0wx-xGDxq(8I7$;e&8L;J4$8S zd8^!brkB%)-T?HiU485c;c$8hIUC8=>EPLOD3%KR1HwV8mc|Fqup-SRe^-VO8lBSM z^u7JjY<2#QXf`6oiM!_79XtkdZTiykLSK-{ch-<q2*tR*8bh01IPbEj9OLJ~E6We3 zJ!<`Cew{z65*iT(H+ikpev@o=4|e5`=_S_xjxPB2yFaXcpfi(5D3dN6r+MG=g!7D( zYF!IHpVf9ol$n1mlTe(5qpq#JNRJqZ4iikxg&eot#^pWh35`@b0fvmAVqgSW&6SZ- zP!wqXN|!v71@N51>c?o;^yVV;ZAWXXC$#r|KkEMH@cgpT!r;P1?JtW8HBPY+1(cyD zLE2y04!%;^zi16>d|X}GLt{3qV>E;Ee|hoxqThi-?EAtZc?JmuCB#l3Mbv0`lSuJ< z2Qf=VQxm65y)puft<81Z8RVz-13z)2^54%EvM<Q!ILN|k2IGH3g274c4acABzb@)3 zM9{$yZh7uBOz^VI+jl}|(G!p&0ynX1x}9=sf{Lk*3v_AO*by9}2%A8RZRI|Dk@fCp zg9b|r#Yzx+V}M^82j<^@ssB7B#6m(M$ncUL#KggY70Y`C_jVB~;O1&XZ2_ujomw^U zO*RKE>}+jUvy!(uv50$1f<xxtp7{wX91@&xdK)3LRnPm@Uijore_FmPxaViSXTIet z!!IN(i{8co=3oobu53r1_4q@90YIwa`{0SAfy0?%P(nh!tRJIpOHLTFlx(NR?Npf> z{cM?9d1CamE)YzP4F#jHcq(OkhYD*{$P2xE->$Qjz(_tMT-N@>M|G4`D%a^6<R2zP zdiDW<&uRdRU>9&?dc?2#&ko2GON}WTWWNV?Z@ek+UawWhxolO47*2#I43sB`??mF6 zD3(V!Ss;Z{J6W(G>`N-|PiDtjWP4*-FI1@+X^7HL>cz{CbkoN_kD|gXB}Cz|TWz); zWc7jJKQU8Nip3)J9zFVM<~G>+^>SxBJj~y|X`m^_E7~Ol0pzv^f_L(NB)LR8x$#rl zdocmzM$)xK(Xna9+(>~&q?l7hN;GHPjmX;U5rS@Er!N_ZDIlMHvY6~&KYu4YqGM6R zX>kcH)*f@t+hYr7xFG*!#=(F)`OCYF9Sr?zM4lR_X_W_M(N}<z2;R?G$>?TI2Ztm# z?%)vo@7iZ7N1fcuVdKEf^<;+AXFpYhrtYfl!q>z%wE6s1bm^F@V)v)K?-hT1)?Z3s zzC`R`u1F{<raszSIrR1&f70&?A<jH9NER0(?wA5SMLq?Y?x=(`;j$nh-PZVU->&Pj zIxbJ}v!x`D>A4FeW3xC0{q)^PYm@Z;FMNE2mX?-Q-dDRL0k+a;v}(Lg`%&>UfM+m4 zGoq%ot%`a`8ULfv<c+G>3nP4MXGL;E9Sm7-RgU%?$yfO%cbRGI!9g@KW|I-xm$zt< z#V&82v#w{m4)9cKSZwTl0pdcY2_;U9P=B?x;QJOT1U+P3@23Yfzz}hGQg1cJ|M<h; ziw15;@D*?`ec$>Z{bz%opHZ*K_z&+Vo$ziH8t&{b(rZ?wjWYRK?B%CgCzoy=TV@vl z*hm~W_`~+~LF}jw!jQ;Y3J-3ZC|+7{LAz32HB|n7qy{!nKXK}p1_zIk)(7w02D8@c ztEaykv=zQhwpPYVS5_UB9a)vmy{@Mzt8KKo9IvaasTHrgEQDuX*`vIduey$(3J)Po z4y>jVo=q+u)C@V@%YOo%ERt@3)mxBiBL%hZv59qQQZiO34l<WGeTMh2n_}#p@{7Nb zX2$8d+*0kO3-HnjJdP-sg7IL}>+5y}CSHt}xt7$ni3N^EvMlke=#71$C}Uu5_#T)~ zC5#RPV+HDMr4Fewoqq^8-$ad05}%5uMkyU0NlDxL3O~V!7ZA&kfzUan0v{Z6cNI(> zXeh}?5>Et>!b#`B9)hjF3H+8KH;zXjzTJ`K_^SyAzCsF0>zIW0>5-yQ=STOCs&jSv zplR0#Ke8M+QwhVl-uhkg>SxZ3FI`CR>#F#?<_Qm{cd(}8y^Vm^)^G4L8JJGFJ0IY& z5J&XnT#`Ckyg!(liE87OBY_U_DN1pZAZBlG16v4i;}bIb01YORS<BN*gnTHtv^pv( z38c<Z_=Ca9oMqCUo}Qm_cMgn6?DVUK&H|+#11GsxR+pYhE~^5xzai`NYr9QV@mA_# zF&Qvo>pJ-BdR-3O75O)la^Bd;VC(+IadWG`>+u>U<SPkG&H#QCfKn;dn;Od*qJ;$i zlsIue4ma#9*YH*6tNUG8{BDL$kxrGI!w}fh&U9azF*FSKwfO6zlSy?Yni1V5r=?@C z;)4-|T_W=*YBByt6wj?o9f&0I?KUAk9wb^dATfo8H~BPTsT$B;8m72lUT(BVF8yQ; z%b5p;Of52w;_`cv>JEeqyflH4G#RSB7%7V>VG0d)LnSm@S<u&7$Y=VRY)y?ADUr3T z$i(EI)8mVKxLaXdF|HnmJGeW{kRy7~m~$XH%ZwSi%F{?N`XjjR?rO|zT&x;o71zm( zFrw$dOXQ)_Spge2E%)L;<5~QOFeXe5v@<Y$?s3sUQ-sEV5F_D%beVGjoGu@mp{Ul} zci$lLzEKOvS;jVf&Q<Ywdr>eoa`JqGh^a>*KiB48)OXtorq$0K0VQ^{n83X{rF98U z&&@AV*v5Tm`pO~c1l4rVB*h2kf~4HdX;=jVDhnWLfa#B+sHXdYEQDSjE(1Lz!Au=O zovRYGM<E2TkR)6}Q*Olt40Z1d2ykKRYc-MN<^y<N6&36gNbur^Gij3IR_A_YQ(p!n z7L@rahTId!EgsV6^zIE`(VPEC=r)fb^sw1?^Wr+auwFJdN?=Ms0N(@!PB(%rlLj(E zkRMKU_+?-0D*5`2cxj_np^0#vwXl9`7d$v{jm8B$48D4*-!MhGF8=yMbxW2tY9RCa zOsezYwZ{9|_48ZM5KHFtU+u4@huws$FBFbEz|(ks@LUm%7Y;|j%U7Wv^90rGGV~M8 zH7>|-dilS8PDhdSe3FYsmy3~vKG@?9xl@aaQ@R?2CHp!QV)KZXVC4PyxkC4VAXsjT z<OD9i@q%E`OTpGt41CF8soSYcCnS1J>q7y|qV#%1DiMwOMAw=h>cUS+-Fn@}&Cq=A z1ye9Y_t#i+;1n4&XsxlUQx+=SI|)u!nPerBwYZ<;M<+SnH78QLwdJ$B>74EhChb<o zZ8r+!A-!@wWthQAgoXmUt~0OZtqqu}`5)qLNX%D2neDsK1SC&FO(Ej(tk9G5Mqfl8 zGCpkOeG@_gJslr3O0m!8E7hRxI>bpTRIBEnFXNm{84gKE;h#?D%m&eYHvP04YF#GR z+EieJ*++hOsVYkG@s@cNz(VgE69{1lcN(V@*ZSrSTTt4nC2nZHSnmxRrdRm2O4}07 zVCpldrc{)X#$#d#lcDvRr^ZVxd;;~5NK6oHpreTXbc<SRZtE+1hn?xWrF;sqX}oid zljpwbSwG(fDrJmdv0`555<h>e*hCaiOZ8%m+f1vWAhGG=ag}0wigLb}G?6K<=#4K| zjgl%-rttbwX?xhX(9P+KP*95j_lw2t?QM5GdlXE5B9qylNXW`;FGS$*cU;{5$S{>y z>|Pa$Je%7KC21n}0-!0k=!)9yD+Y|dzDS;3;fAr3>e2siD`ZJ}yz0)|9=z*vSe^qt zG5BME0=M2vKmb#i%%xJw{Jgqlkn}8_XLIM5P99h3dwQNAWt!^X0=tYwcfJznm0RkN zJ-&_iDz7(K;BfZajKB|ED%41(-zzB#HngqRPq!?#*W5af1Q}o_3|pA7J2BZKd6u}j z=friR`EQ+y$Q;(MB6oYuQUp6w*Q$<~g^OOUg0qD)absSWXVIXmEkmBB<j?dyUf>Vc z8g;_81tr^`o(q8#MsACS=+?}Y%vqhY@}9}Vm>WEzf?pARQ;8wcyuT){?x_Icc?6&k zcMy{&P5=9tG@Ac+3cB;v3y3t8gNlfkxk!PeHHl{IwHy2##)e`g4<gIq255<#dfyL0 zjNTpY`+(0!_BgmO=NJ-C@vD0-MOWO5D4})aDh^=HZ-51Hs@;Ff7!=ww%{8_=cx&%; za)Cj>_;wtAjw2Ogl8?Ixb`=WwH>|Ac-{E6={8ch*qGiSwamqd#^Dx&t%P((s78Sbc zQv$JCe;s)30c;cjDb>w3@*|nVfa3Uez+>AHFD8VTVH;YB-~EXk_9`7Bq0KpGR&+aY z0=B-lYg_2P2fy^`$*!HiRht#~3t0(6W~Q>3I-gLsoQ;^%UnqcG!nx4IK1+mYD6Qnh z2-^QvWz2#^i2A?ap~wi=FxxoF!{pPw;|v=Qb>$11>qX$(USxKXxUi5kS5V<+Ys$=A zbs;B+NZy3A;qed^AFMN+C5ePV<O`=yU15k7w#?87&scDEM=A!B5JKJJl%1`#DBXk@ z^NI5R`7%3bH{Z^yUkhV-gJLn!*(>i+HtWv~J3a@5!A5TElCf&ho4x9Xp`ZPd4dEz+ zj$+6YVAv9CR5c30k>c{5EbL>d!sU))?i<EB$lPX#q%dbU#@^Rwu1<(5cL?k&|2h>n zk(|;hv32(mSOR<$3YcB$$+za6Hya*Vf(^)U6G_QardKSM5f0=^CkaEi{#5AL;8gXY zX{)89eX3GBqurj(V8^o#pO1;F?nA9KBZQ&n8VuI&Xr9?!O{#yRjUd`ZfM5eF-2sDd zbi+5MiRFyJJ0?=SrMo^Rh2?W1sL68L*8)a9-<kx74LXxa3)<HZsJ?K=QbG&-Vo?l= z>bfFrx*^pDAtjR9YuU3C?5}^|$97wMf~w$^5zZ91QdU2v1^sWa{Kz&5{U7BJ_XeFd z?35GDc*^RlMSP;CXk5o-eyE!H(xt<CHpL()YG~qV`9WYSrFi#=46etBZ1-g^(bCma z31Y>0MLL#TEK1$kgN6dfDwarQ{|F(>)jh(E0kjRDNP!uG{DJV0e*f)FE2*LiW{OMX zWYPeGOuf7}4VP&F@RyV|CNLbAc;Ta$>58auX)QC+e2eobq5p)BX&#PD_uy(@<iX^( z%hQTkn|040%hQXi?k@<k2V*_6poyv<IlGL=JfmLH@&F6p>oFHHO4nA@>DPbzv>W^3 zypeuCixfNC6_<N#9}X1%Dk*U{dp1NZZ%(fHIq8rAxSg`Z-95?JH(b5L%J~EbxI~UE zP-#*l`+nKW<wT-b`c=8Zs~BvTog9yOoVO4D{{E#&L{_OyOvH0Ge|F{JvqH;@<o<2i z@Mr%gxBLnNk1msmrL3QJ?uS!Yxe>_&ax@~Iyv?uf$S%`caLqi2^*$FdJ-Jo#xCCQE zI`9Dk)rDrV4Aukf*XtVQGG$}YCUW~RU$T>+%^?PI=}N{4Rqpn{{xqJa+e$0+(enR8 zb{IIc0r&G<>dd#av^)u=qKC%@YmLj7&c!#PcB=#xP7V_h%s=J@(cP2re7qj1yZ9-9 z?e1x5k6kJsDmr3OMs5hyAJOAKplvn@ls-#cqRd98Yu!m<ATCOq6#dVKjehcP3TY() zTF7|2+`<0LRe?3Tztm&yCH5bUrY)-@-xYtUBi`yv-nFZ9SKwf;yMG&PG(%sg!G>^5 z%M1vPZ+~*DR23&j7y9zk3sEFj(c_?yIjIuM9uArki1e0;l0E7k4vrGwbI`uHEd4jt z@@Ga3Qx)F@(<%}QozzWF8Ch7rFr9dcBLj&XG&;CzyDB=L%6}!U(l%a)X3u$Wa<LNa z#JI2&5V1|JmeG~|nt8~2#RVJ)zO`=XleL6-5T1r{+QU);e;p|+0=_*)kGVsxCQJ&h zdd_$Lvk)4{B~;Djw$;ToCAsv<4uEMS!5L($le+`>K7{d8oy$pW%<hEz1&!nMHZjEK zp47IP+G*zGTXIMMc62C3>-7WXFxyNTdvKlR{q60?AJk5)2Ysb=8=q`MF2OQlghlE9 zePzZ^u%b-6O4FsWVYbPfZ{@P<bKQNvKCX02fzZ{1;-p6aK@tY)VlcGyDd59?O*%wW zf{BshB89x#moU~qY_@s5^?@NESPqb39To0KQAu@oA}s8-^4ALHg8IKt1O@eQjWNa* zEhkrWDp}p#oKbJGdy*Z$ITyxKx63dsxtd9zp>B}suvL!v3*K+`w6J|lpBDy5C=Z=r zJYq?^ym~?1pnFL0mh4vLIG#P^tBz#eN0u;v<AESrDm?W5Z1YH&yLAwU+tMh#M3eNr zAhxTSZ%{qQbCyl#V|jhKsk<rIt6*)wWr%**>Dt=5+`%)nkWg5n3;G3@|IqpctPvIC zrU=kb<p6eecJ@+U51kOg*p~kF*kC7w4H4f~KG7j>3_4NHh<QWiay$AEwNGu+baFt` z&|LAFmV?K~bG6>gW7s}tPY#S+-WR6Sp=5Vj=>Tp|O*5^DznC%*p^;D{DATmkmyGMN zrp1JunmJ@<W?q4(Z%4tJ1RY-&IR4uUQc?%?XD;+;QxtO^1m$K-mh*V>LmbPr;sUvh zOh2=;$%AXvbRIJpp$p#S8E|#;*<Ct?QTICmZJD8)z?v8#T?hI4%*;+_ZKaveTpe#L zapRZpO>l3_^!xCD!vcrf+J8<Q4%UCa&0K54r^>`)El>|mIb9F%jr9j~>sZ%htw=17 zBpx-I#GWe=DE+(mOB+ceegl{4m!STtG6=dQ=95*@w(H{Lxkye&m(}LBw(rPW-59zI z$Dyl^4@!$4cFCo0Q2dE<|F?cU1o;b@uT&BwtE$yVamP&?wJIp!$0a-s3kQL)Q>;HI zNVN!yoafZL9VT>3b=vyXKYPurSEuOrZYJnYs36$3wYNjb<!@SPb?-8whwmnxaG)Z1 z#Qm=}@T>5*;*gZGsJVC!yLY9E=kcV$xJ|kZN$<oQ(c7<g``P<Zna#ecQ%irvr>d*W ztWzlSaqZq!wN0(dYUz7bf|*Y)ps`w&_)r)1(C1$oh7i#6QuH{j%_G76r0{ekU<3Gu zgt_ex1sfH(cDXY|4dO9?ni+)g@0V0YkE>c9i&rZ@A--Pbpwl8gK}O(aAVM8Z)b`{w z?U15SVE8^EvpbX<ke|0JKXA6QAo1;=D^BHrCQDLkH6M2Y+}FP^EP(sxtxk1A*K=ri zGdven?Pu}!UOV`8F30Mvn*oSH(35meUNvzST|^<3gfp>AGLxF>2ndEacKHZtbXTCe zhfP;WZ*$^sJ04QQ6iuE+$Fl0t1fhe(I9Sl?VeG;oz_Rn-Vg-wBzU*N?^Fxg2;cx)G zQoXO!HxgIu+U3B4pbX&FSrT=Yn{X3Y8=9YreSkQ$_Zmhd=Z2cfc=fWU`?c6NQIw1n ztTq_m{g@7Za(vcef*yXi%7ynt>Ux5W1{NF?Bq1Kr>(W-#cpLY>9NQ@_8P6ncXsG=6 z=`FIU^|o1Hs8OjIF3j=y+u3=Ll~&j8HAGS=81?VFkpfGq7*fDQjxbQ|b4&lYh2l$N z@VvaR3x;DSh(%(JfX5Z~qV2u%!IEY*JOb-=b5*~7zQ0J{hItL^b)~jQpK&sGyZ<&G zc1mH|`2|$===k^5y@;NS5RM_kLHSfg%3}?Wgv#o_{AZl=#9+|ps_r+B$MWtcdaW+6 z*3uo~q}6DVE%(6Ep*9%mzdu=}SboHU{~A~1<l%8DR|GK0cRxIm@OHxBUa_H^57zgL z1D86-fBvLi%_mulM~(LqH)8!WAPoOQiJUe%#^Q0lzJ>5lt=HsjBhx&Myaw-23(?om zr`=U;M|AanmCbrB!qw=K*0mJf^s@ux^suL6mk`x9J?~CxHAdEe8@5M~AOzwQa7vtD z2z+72yZD9~;=G~;xCg&Z;YMDzl#r8)b}VyPuD<=xbp(r$K&t)u@o4eL4KWkHXYB-h zxG>^!yU5`>2g`TuCS<=9jA)8lP8Vnz(6wE=*h-?x3tBCt<tC5M!xt7&xCP=WciGsU zy6n2}w-7cs-Q~Nip!xglPSgqz^XM`up<XhMWJ;fT=|b3+{mW&;;8fK`O&?chyzc%S z{Lbn;9wPQ#bsGho2V?7huT%Cq*4g-x_X;mU2l9q4)Z&4JC+sxq)X&X+yD5GfA>_Va z7El_D`)fEQ&0l=UAK&D4M>5yE*ZO#6KerjrlnO`w?~M1{koSZNTX#;HUioC5XcdVT z!{goSlqRpgo&m?eg1281_iG!Pnh*?Lv{W4|3@=_n<J$`uPE%b-f@x%uWycj+2pvC4 zT)%W_I?>#^kleaS=Cs7~9ETnr=$0kl1|~PD{cED=LSIZUeRA9-xK)~_TiR5x!Mi8s z0`!|IZL)1f&{xHU5_t?q`60U!KTU=1#>+6WOt=zcW1YiI5yc;Fu_Erkf@{9lnS!ID zA}aFBv;vsy+1|%M;!noPl)wqW<vVavVZ>S3=D`mQTK%n~P6=!(FaKZsm8FK<ly{kn z&QZj4U-|7$$RU!0goKp3U#?NjK@pqFty%IzyT;I8*ZH^D6<DhqUU?Hs4cCu+7>xob zu(V)3o2@p*%kces;$1RUX%L2Uk&LmaDhw%ZW6IHy)eh}5n6AH4F4yx1tWAoSp;4j9 zVwt@H+uZ;*E4%OVCy3H#R330$d(vkQfwwBd9JF*38X6}D8O!Sb>n#~Vf`i}kk+$WB zpT|T;KNgjG7`T<0**=b~Y`nRW59Ej1n2-<p^&g5jz<js2$L@O3@T<TOkrJG1-MbKS zH(iil3cny7^7J%?qoBizmh?2K*PZIpwBtU|ErkXB80nogfeOR_&Xi){(^?_?REy%Z z33X>BQnqms@=X>2kFV5!1{Qqcp{pesb7yQKiuh?-5d%e9<9XVj+prrRIE1j>82+<< zwopO225~G7hWIm+^$|VA9s7y+Nd$CG{>1g`tozhOYa~+}%w^++xw*o*Ix&*FEnVN% zQ_9El@yXGwn1s3yKYbMpd}ByUepS?3pW7{Y{rNy)4*$4WnBvbksf#PTT)V!ND+Sd8 zeps;wem0zmJ`+>sh<=onl_hn`=Y8?>Z=NXp)j{6uE#`{StqKw#^XtqOPf{wNnUxZ# z|NFm2D+Y{z*>~CfZ;Ur{?f?oSUR`g(uk(v_jpoVF(tonNuB6Dtw%LMEXybXf_2N{= zF_g%FwaK;;vBMhKUb0Quyre1QL>s{FXT8UJ-*@06SUrR3ujJ0i)f5!q2{nvph1rYw zFsU)FX&HOpu?~w)kv9G2XVTPiE0PFc=*Hv@u$QFqqrv2k+wQZ0)#OP(cfDNGBo^b+ zomn}ewcXMaV_{of((0oepE%%v8VP~WF9e-7toKsnXMB%^^*F)ELl(jY>O-EzJL}~> zDg;BJiXDbEqgtF0YYo|FJPi>yO%*kxyOe2cv4gyS!5<si7(|!0!Z|53bIBnRr~JE? zEUYhZ@6(uW-PcKXFf(Dd?YJrdjH2#YG`ud%F4IBp7?sut{{7(AVK+7B*B>zn$5UFD zg}ZZH`w2Z~@^#w+0O{|aB4m8Ob>BJ3>8B}v;zjb_C-4&Z0_G|w2I>_@E#D=pXRi<8 zAZDw4UE2AfjPd+KWUH4O%bIvcR@22C_Ko6#xgnuFBm~CN+BzZB$R4<#W`U>tWbl4# za5Y!$GdJt>0+xzuM!s(-Vhbh?jYx&*zX&^COqozQ4i}#XI_3?&Cm&b;VtS4pD7zG? z3Rr3CX_wgjt|6_@@3%*iEJC}q0E(AiT+Qk|MoD=a;mCWF$leKqiR&;=m1!6h)BdGQ zD%V)j=c>ZMJ9<<zIIXQgI<DCgE93nsjMOLk#i&kGfaBPy%{9-b!@sf5$oAIcbmC;P zY~g>k)guY&fOkt_)tm<Q2%2Q*L(pW0lKY=v5ayF$@*hf>+Y_+b2BSrWV@L-W*o0li zC3OZyG-B>JD=kGiUhby^%PkTI({ixb-`y>T|BM^{WVAqn)s*_x#*4YEGJJnWhx*xb zZ|<z2&0{Yw7%*ea#2z$j)w9FtT1Cr#Ooa3GRp+_0YP@8exLU#w+IZECH+-#yHVuzu zr^X|V2UrD)0K*HfdryhM0<LvtV_5a+mme*k-7W{Pb;kKBU*maFDXlL3J{V90U|g?_ zCy=znw}Zaax~#%1r$>$X@+wolx3ZBk5utG<yJi7+3UZ!3F1Uxxe3vJ%59;2hPgW8_ z(V%Lr#UzWk9+E(C9E0?Rs)*B}g;<D%0g1@Mis1w?52VIhDVYMY>v0#p#y>wA^HD|? zF)WDJ4f{|%<=udS;%&(_aUe2Q%ztKwpN4zrd(N*cBv|BSgEO-n0<@AK8LJLF`zroX z=Hbk1z2BYrV477L4$vagCAs$ASRG+G2uva#FR`?YmGfklJ|lB!RPMf$#pR8f?DU>m zj2f0gjaPws9n8%|p&Nd4i*^Qg1>wSszSS`lI3&pQo<*^2D8~g}*5g`J&{Z;wPtUH} zPy{7%15k)#K;M%@@$m~FKdD@V3{;}uk0Bf$rPoLVz6jmL7MPk1-jw)rgOvjI3J(n8 zvT}voX0m!~lUkUr^=%lES}b&2G-DTFn^VYA%;H&w@dn}7;pjqXS#arpy%}*;Gv^Kb z?SR*ZD$z-vfm1xjZ>tW0bE`8yFoF*5v>$%W#N+#eQ>nA{H63th?0(ul6RlkB#&-pN zl}#Nm!`ZkYe?6q+i~eQry?^jRHI^>V7G?|uX9hKYt9fL6<JPA`kj(8>HHbc>tP|~V zQf{<{BUQltL*}bCNL?jg1YJzV%yxF(1UgYb8h!lhQU$Y>O<A23Rim4TpM7fw8eoe< z4wm&;R$l0g_&EOA@%$T#-wk(kYpZw*RfoPdhJOueNk!DA4+MKqY`kQ^>SZKe&dEmi z1}gIM%I!UvUhZ=dc&V>mrAtdekxca+TEH)>%>y)}kfMazx<lf=;d5j3ILD?i@?ki; zli6+stlnh0-r+7jU|smFez|7jUjLc9^{^;CN{@JG@><bjICv%59mL-JnOZ*V<;9{1 zv8fi4Nyi&79?Ck&7xe%@vDu(XzdIT1{1)PA?-8ys;9wB5HPDT9%l`S+&8gbI(*$$< zE}tY&t)({J83Zj}tLp!CUbqi)sFnp)WgW4?cm;#k2O18Z3u7q0LCTNDd8DW*zX5cl z9g<$VZ*`k#ZM)VDXso|0-<=Td^*+7l*6h68qu2--^0@284(8VeJ<*~ugQRPa8M;t6 zPa8htp)r0QIHWpO%}&OO|I+U$k)z5SQx3k34J`mcgG@m(gvlP#6uCZjJ#9n<(>C?v zi^fvaQY5XaLK(xv4PwF-79S+ox}s6colTA}J<7)uJvxF{VzyRHM#-d2hHxN*x$9$X zZ6n319-!*(bX+>H^GYoR^g|JzIi9x<Xc1#}E{lj(PT=07ONG$!F}^2EQC<uxTth8K z)G_+oS`#nq>vB%xv28qkIwa}?#p{YJ`!m6NLRCeQ-goeKaJX@Ni%o+My3je0ZAgTN z6bESRrK}d(p1lZ*UI`7s$0KvAYnn#9#w||0m3MWmm)Oc}l;DS~t-+~g(V}J&q2~1k zLM4Rh+1gfCfDy@60rh>i3kFO)z_Y|?{BQEOc$3fR8!v;450@Q@NB~;{H&jCIMQT3R zQ%6nOM-MQ+J*t0foeLg4Q#i^B>zarEgF7B}Y;f$pwj}b7rWJFyRYm!w_?qJ96nBzn z+uKjfuvT%`$qYmG9d^1ieP@q4#SM-hOl!JYrNncE2Tx5qrr6T14P6o9t*|CeEA73@ znNx2HQ}nsBKAFDc5a7@A(Mi-_uF<vPhxWSU(~PW*!Ak5Ih6*?emmyevXxX$*!-bX< zlw@vkp6PY#a8PJsRWd+CUz8mo4gZKG4M$5@&=4oe0uvy~$|`?0mDx%fRmlKpTFutE zgR*d!KD5j6c^9^iV|Ri~$Ht<mwr_bt7auZs^wMN%ep&up<}=H2%O!WYeU<HyUo|{- zdCbZeUZO66kYBa2h69g+aC(LC4>RHoXhG>5x#Mmw_T|-adkkdd`#+Jt8wG!{l}R`; zJXpvd{Rk1?epL2@g|hJa-VU9J0yBZ`#h2t#v(34bD=x_76Vh90nfGB~%Ag8JOvv1H zOPQ;|v-o7`6=Ale6W#iI^3xzynn3e-+-Gzi^wfz7`NtIBM{IYnt}3O@s+u&srKdR) zg{d5at#WueCcFjH2wH}i)wYZBCn@~7rcZL?(@<*kg|7FnCl+;Zhrj0;4X9w{GZHoK z&J*4r?toFdv9B=hf}bz>GZG>l8yis^Y<Q4)`tQ5%q+8E2uBpxkes&;}lLXAkq>LE) zX5U=Hd{qZ)z0tv<5VE>PXFtsrBY`}@g|ST-vr3QmO+GO@h`!=Ze}4b%PvMp(KKSh^ z6#XzTl<%4+qxxn-2_Rt+_7=2rR>4*twq=PikRUZyA>uc|P{W2bVwF97D7&g_zP4-r z(~lO77am`Y5fA~@bRjRrH+)NGnxMU?OlrYc5@)@jIviZA(F^|_OI9|NlN|2iCu*#a zw%VugrKzCkv=u{Rr4Fr4&hFrYJUK$OV6b>i@yqMRdne1EVo@80Fv7Vqitkul_`&r< zhI)~_SG|#djaXm94xv)zm)Y$1)(Wk9yyfhY69EUwrj9y%qNY$YRJ`cM1N*o;mCR{4 z<))V?_PX20;=RKmV#v$hbX;jl)eJ-|h9q~y6|>u=W3weoi_yqQ+r)7NK08T*6<x1^ zM!-mty<bBI-YzYz!Sj{D$Yp-$-a+?6a0gOoP$5Y&H7fBL$!t?-E*;g9*Y(OeyhU8< z4QbD%io%=v9r@eZk2&i?yaU1jhV`D!xQt%@c0%IGr1AzKmv#at%b`gx3}`HB5P~Eh zeNK}Z?nkba`Bv5s11BW2U3?}>0xhxAqmy3yY*$S0FO$<qIwI2YxKj@c-EWPgZHZY= zlrR)P6U8eGE}0~OR)vW-=|+fZxw!57Co`T<a?hQ<otrzWrQq|-1$2nka#g?qCZlaJ zoSSeCHq-lx0zm5L9W`aQo78TGSU%u581t&F5iMW+eip<*M-Oe4n`~Q|xf8fb>KO#W zeGCjo$(u0}kicgT*?m~)e$^4#C-S-w+TnW!SLi=-236DQ;w0mu^jydB&Gyoc9R?FK zYV!!K#3f6`=}Zq|2mu99W0%NWKHDt>Vp!q+`~@(9uLP9#L$QP)lh8Yvv5sKC{?ftd zQRA`MVT9VI@O5<J*`q~PT=x2-Eoz;eR`8pB*DVyQ#kv=2*Bq<85YGf5%YoPP78GFU z+xt?(N`w=jR+@lrCU*S|xAkfne|Hfia+T2D1*^<XWAD8HyEp!A4U$1zG@fwC4Ap9l zI@?Rs=cdP-B)9LXZ9$g~dox3o>mJNvgCE(VX_64cONhgm@1doD`JgShxQw5Z73?I1 zP^OB<SIk+p+@czABL=Ff%uCLD{s?)Qht${FukQmd{Pa9r<~Yv2fWyNRZ?S*X`E*qN zX{)~ZwoVRVTY_AOE%So`CX)zlDTfdxaLI=56>>-NtOQHDmYK1=$?Y7VBp2JU*CC|U zQ88W8C>zD?Wer1`Z1{y|ne>te)U@-1dB50E06W6Nl1+S$*g!Wbltx|w7sej$<q8Bh zGhvy^A^#@<(PZZnipq3YGu{i#)7I2)D9@jE55sIXqmExPORlf?ZuzajtzKDT$iRp7 z?g;Fvz_<#5HXh0pCgLOoePWQ)Mf%RUSR|PtDeAY~DzQ7@S!0>*0?VQ-Y!c3@*Y!AH zK@T{>Hpxr=mt_{-dMDv~BSAHFhTZ)zAaz(HS@m#XWl*P!)x?ybLP+hfns8NV?<11s zyAKS>QQEFGRcdcw(j)y;KAAkOAV8~E%)Ps+W-;<HMW5DsK8xOIpDEy}cKJ(RU*J`_ z=UJk``%QP@vubn0FH7>kuSZJ@-FsMzOJdP%pD7cDVh9p>y53N(R*NJ|?N)T%hpfL1 z?@JITGPwDP8X^Mw<`%}}zO7P>I~|Nf;uC{>pXc8}RTIeW=Mwy+)!kd>rGc*`j?&Q; z@e~EXPZkyNjA5NVkH^_U+S=qpJPOj^hIPNeSqkv_J=d<m8ZXGyeM3kWY@iIc8%T|6 zW_a#}ijmihj%#Cpl+tT@gVb_gIyRM(%S768Pmw~GOtk#m;(l#zBElKgWohvp#J7N$ zX-1u0t=oas*m@nJsyIUEiSne=AighowwOa?kLfeITGn?}wcy-q4*8{W7$JJy^GOAO zU?-W`Nz1jK5dV2iGCgn)nx9x~F+abA$8Rz;=f|!{BIWTtpNv^@nKSH@1{%!=NUxt< z!70g}&EdQ)-lF_2<0UVLw{Dsk8w%AQ>K7P0Nfe>d+l#buY&^cOln@7kzs<*IY<WL0 zMV(0Udt#zgbT9yiT1cEjpkC^2$DsR*j)9x_kx^u`-RTlw!YoDVxmRqEYrFIy3j|C2 z2F{Puna+LBB}}&t%eU$^$O+@t3At+&LWHVda*JNpOi+d+Nx~9SYj0e$q5Y!-w-=~A zfn7GLC93&Un}nV(!w@Ec%{UNI;3f^#cpUdSl8eJYU+i#JXZ2`Nba$}yJy85dlhcO& z;^y{H2;iP@BXMK>oeejDuBrVX(OJ-YCAP8i1&QLf_2KY*oRPLX5%!;Ov9p&d(!#l# z&M|e#hwo0`F{S0XsHr|*=y)aYsEv69a3&;ra>GSmQM&TR(zlvW*a%QYK|FG0XE%Ax ze7EgcK`;Kgq1P{TXvkFHvzGYqQ>e_suYj4d^MUYI2y(a(J6>ox0BK4eOSunXRprlc zk4f|b#bOpFSzxXjjoPm8^mmFl92j54RSs*LRF7k}``YeW4qbeyKZ_O>4K$E2{ytvC z{O`w!yf*-0{&!C$u5v!YP^B$ed+0xkzg1Uuaf8a>h6xKKg%F)a!EHkU_N?-|P`pBC z%PT*8JZYq?a%X3^7ZB{OQ?swzi*u&~f!kH7oVgKYEV)r`APgl*ch@@+=$V?xYhJVR zc6;E|{N?&!GUcP9HER!(NFlQ)j7X_NI)|0+p9&%4{u-KwkE?Ai^!iWjd!`zpJ&<J9 zTyS|qX53>m!nH`q@~E6yJjiojFG;i-vC(ZN*d%dr{SV$#1^dP>pU@9KQu6oBY`EK3 zQfq5%9ERh)>s0N=2vh*Rv=mE{&rV09>M~}DKnHAGuwL#o7GXGkk3z)@kW^!x8zqU> zg=rbI2+3m+jW<QlUG%ImH%EanHzz)c3_|Iasppf2u4MuLWh)cCIkYNfj+>#HCJtHB z5<(NLQD6N$r`StaP#gVpp!y>vZ8|M;qMr%!7n6?8>Fvi%{l%)-z>H#n(}o$@nE6=W zmz_G`xqe(cX{q)1#N{@RC0L1|iI}gpR%MYQgz#z<6hNd;tRHw9&{lu3+DjlA^gg(p zyAAO~brQmp1|qHydtrs|E_=i&n^_LDn$#GC@GL=ia>sMVbNQHe@V3v=AMAR4-JA*7 zG0ot~f8OdB{6Q}X&<d=*BF3$TAGN9UhbWA0R2-j&Oz}XS5{J`tXis6#p+3py&~?Nd zJ|=TNJB)S+ki@g3{V{A7=QhnkDY<n`HUb+q#JYdKRqOJ|QQwu|gI41^^h#vi2z+IK z2G5CQ9xdZSpbuFw!ZAR?O6pw7lRV<fuHY5f;)V_m6CLAtGITQ8Mh@FbV@u&kVOWN` zAryf0(>h6#0v9Dl^0iDn;aq;*TT{eyCf_DXD?gQ(u|gsl7(+^m(8-Q4iwsPeC$2Q$ z@2%KEe{<2lwz+d?Dc;EqITq{X3t=y8=WBsUe0yT(U_bZgTgN`bPXep)tT*N=Cr`=^ z&0nviG-bcSss5x-BC6Myh8FFACLC@Zs-NW7NzL2_Nf7z7^-C=dFo3*aQAPxOE)jQj z8DXG~saByE#<S_0^_@!zLb1ODVxtHZaz`~bA_ctgd7XP-^}nJ>5*VqaI+8*5*@&!f zb}%DhT0_Rb^tD+2A5CW&7uEl~eLzY&1*DdgPQOT}v^0oxgOaku(%rdqmxOfJx->|a zfOIG<AhmQ!_&@ya*Zq)3oINo!pPB1=PkhKt>Cr;we`s%U&VReq*^hT6-YL~)%A?`X zh&UiaP9dI?Io-5!M5o2fKi<h&rVp&}HQ7<NaJ?)c@|(QCwTog?qSUF>3nmieYj|!r z?zH@a!Q=z&q|vi`e!f|6j3M-vH=UN=JeVx%7G2_sB)!GT#(Vr`&wgG2{CXSy^zB#* zRcdiBdcVJrl;O3IaNO-FsfT|fBUX_tKYX><FKZ#$pV=r(+_gY<IHqbiC|>kuhI2cU z)Y|i7k!|y&HGm`wXq_SwHXZ(76f%RgvS`)kYL|6o_`>B=K0q}u<QNwT1%6=747IRG zyxzA9!2H4VoVm9ck?7*pA#&>VqIM$rQMk+Lr@`ION&;>F)Q)`8P~uO(vuIY^*Lr2? zKQ83!P|*2sBjlOg_UAMv8b3unirLArsGrcq-niW))Qs?%yixBLhn_2?lg!h8BJtKH zTB#pyK9lX;)Z%-NZ$s3_eLqVmb?jl!p&Cv1gB*MlzCv*Y<C{7OzaClDQ$4i3Qn2Ce zaFBAhDK)PDG7~pa(K(;N`t(6=@k3p+S8eVtZ-ydJW3wJ(2wUkoSRVi6`@VV@BsmdP zJ6vH=ySpA;nd<Dx4RXpF@*r|4eg<+3{qR?2xt(>1Y2?dp1%rHj@D`lV>NaUu%YW=t zQM!F53v?r!vTpkVn?zO&ruy~yvn4^o>5F?VOGV|EQz@Vy=qpq&l_?wT1SU^%#VO{# zFuUSaXyZ4&*h1UPGVOPLHdIEG>aFtomNEjvKl6^l>Gm^e$whoAntzq6mfinn0lW_p ze&1J7Z1F=pItZOGq=$fEE~c}&xiy$cVf)@~Dt+#Ax8HAEGrppalqVu=48J<_Vi!nQ z3@(@3<5tLP5VfV>;rz~2X59uN9;<eP&n^FQ!2jub3pVO@?hJ+*B-RPGj?62Sw--1Z zG%bynHyyYAwGvyfy!^fV(ekUv(7@1$5y7i%e&!!9dbfmFTwfS$y}bStLPiixGV8qP z<N2#A;E%3~sW@|^>s|T1Cq+pmopawBDCXK(dE`;2_)M{m)O*%j$v^DWft?=x%V*;# zK`4JzB01sYrz>47OcqRa|Hf{^s8(tsjI{s=RoI)oUq#Q7-?9-_<vTe@L)%}=(dJaO zKbAGoIJUIS8)Uz$urzXD$a0rRN1x~@g*EpRieZR}d=1bBr7>x0^~=3Yo<4m0f*bvs zI@}h+qg8-{eQ-zUrwXYyz8+)ev{Tz!#6gZgrMZ!yS&jnt!S60hkI@VxZWu9}AsDa? zuTs<*8$$8YcL<k#I>@HdnCHjwNEB5XZ~1&B++4#QKd^w$VdRb8fht{u6|4OqZ{5;% z^2(Wl^^D}HH8HfhlT^PG`%WhKZ$0}vrOcOGYQv(lC~k2)3wwI+!!(dyeQX2ku2D_w zdkrdR=&zy|otOn>#@@QD`<$$-@Bd`9y!x+gP10z{*63IyKsVpdCTF$rH;%c$<q@=d znyn;lL@tsg<Rdv#``*=(xFxV<gax+*!<*@LbHq~Pt1SoGJp=5#IGuaKP6p){m`2va z7fLc1`+`hqGJMlRD*PFam1e+Xg%f!&SUSksMMN9Qov*`CXQ0J!Eg{BXcE_z-hn#XO z?pntBiQEkou@~?7cY(>`wSD5>u(L?!l9awYpNmKkvYsvd7z=V&zI=SJoC2G_GJCPz zuwZcBFrS4Ot=wH+w)<%l(7K?b;;g*AI9XBSfk$oa)Ze>&W#bgenx@Gw)#?WC__XGO z$aLc0wcWVall@@Vrw_%_mnNZ<i)r{{85R~y(a^~!Zxq(b$ne6d3g6eMPQC?Y9f|{J zMdsnYRhlDtcNOk+z=#qNi?WfqV#JA%TX>7;o8>^vO3|f#1x*NE#q#7qdZTyhj_Jd* z-;Fo$sCno=XPBmRNiFkoUil=4EbQWbTQmxd)x#uSeS?{-L-svh#+JI!$hXb^Ppqde zHF0+>we`_!ufF+&-ZlJ2U&>n-3XrILCwG|%#=as^ZaWrT_m!;CO?@~UAOU=>^+S6V zyZteHF9!KF>>>Qz&Dp66JCzj84=(kuS>?7aQ31h}p{o=dS->Ip%kTD0R7p1#<{s(P zGB~8>aA#R_7W?O+b@#m^h%Z#G2)U7k;8AAPvMr@w@03!I-Wf`YIqI*2p_^WPg5l&T zBA3oW{Pv2lpvvfsp1!D5G;cj)bv{)0IShz*S(tH(>hLv&EPSyys8gCS76bOU>$`Nb z9P;LEoICi+7v>UW>X<S7yGxJqd&ES9IFCu3ZxNy0AIKFqo<}vpS3gcXzW7hib+LoN z+%AD6e8NPySF<diEoIdp|ErEsx+#93O&)Y^?e<Uyyo;N&9Yg+g%xJ#At^-2ly#2#O zY<p-*>eWK6A(I`$y|Qi5uCpSc@%9i-!N|oTK0H&CO;Wfm8D3u}ee(bdP(A!|aiUQp z0VuMiDY4%s)!$0!zeN<toSFKH_BFKMSF$&(_<>j;;*uOD!{5G?HWNq5C;5`oHNkM? zBFXl@i>It6)u+l?M3ruVY&R5hznS$#Z`vaY{g34-a_$>)|IPPDHn^m8*xurJZ)G<P z(lT>7QVOs{LthPPs8P<(gL+(LhG|(Kl030%rZX?=YGZLxGlozO<(xc8zW?V)8xOo; zi^M^#3a0RH+FkcoQLF8>vYR|Y{GHfMX9rHjXYjn{@W$&eE2R<Acm^DmGAH0Pl`u7S zW>`~!RBun0jph|7>bzUxwq3jdlGx#~20KeQ=Y@(4&-a4Sg*-QwZ^GvEhqhlRof#69 zh&1W;)W>Jf@Z`v0oDaSTS>^vIIw92YA|hl4m=I(kG;0aS10*DHJluxyi&~$|2P7T; z4RhXA95B^aP$w01MSZ*@Ksdb-kXgICFRzx*Oq2gSJ*}OM&1dH5k=lTSBFDl<C}xa2 zD-n~Ct_xfpT;rclhZBy@wlYjpnHwGbtoygYKW1#SaV-aDp1q2$yT5vaEf8S*_&1_$ zn98kbH`Hc69zCJ$Uzjoy=QQ^}AxOY*-q_d{SBEtQb>oUlt@$h3gT=Jf2}BQ$gzJ$R zF`GR4pN|b-nQ*@gkF=8>>a=*@qr`}4s&lo6UMF_%SrK-F=@7PmqsOd0>_yxv-q{XD zP<fUFN5K@*>6Nb|jxX>$jiY24f=x7`Y!;C*DJSS%TM+8)-)nG0i)LFFtv1Z2#w{+M zwt*JY;_k0iciO9~!=&!OStIL*FP>E4P2Xd&eZhrQIy?rg#)i~6GX`AKo`n!FWvZ+) zlC8xG&$g}<rwn8mLyf8rw)-dJlc&J2&e4%?v;w$UP%LeKQ~5uhsd%saO+6IFgwsdb z{k0H(6L4`+UTyZC0XO^7)}(SHuk|ksyWz(#733c;88}=v^&Nvui1)QhwWi^<Sh-m@ zKJ_=AFdo>0hyK{@kt#ILs&73hfmzD$>eKCiB|ZgRJC|UK6=N!K@LPqH=S$ywzur4u z6J%k@QWU%~`=Ys_ki=k*4d|+h<m4Ih8$v;z;|@nHd=I7RtJvtjHDSJ&^L>|k6URL` zr={mY_)ew3*w+)?Jd)eRSFJR+X)dc7K%dXRABJTPzBDvJs#cnag6F@9XzL%*LGwjE zGS$O5-;U^xrDwMtDnns`{s@NKaozw{RglNsa?Novr@ELGNkg&Q_c951eB~AGZZ1=u z!>2Usq2~h))KGM0NZ#-=e+a!bOKI+n`05hFGc3Yk%?;}j+Wtbaz8z=a!gmO-4d;yJ zskO6sh1L^rzNQ`2Egkoyu7<m5HB-og@X(iEav~lm^oCpI*hO9wt669-yo!|Xx?U{L zT{3;XH(6rxx9Ba=#|j4wSe09zS`7mv96%#rV3dN|iW}sPr=j9)f!%&~v!uhXgI@>M z1r|FBAGt@zf3I&sd6nhAy{H9yrVV%7nMirVYaDXl5XF%o5aK^&wLyw?J?1f{kusY- zo7FWT3GJXOcQ`7=_qM6X#&0_Lo?yRZyoXogmff*Dc^vm%(Bv6vHx0+TX+R?LfVFp7 zqH@x~Sb9Vj+{g6!=TchZ6@*=6W-IsmW`NSMGZ35qzU;K3c#L`XkIJ5*#Y%~+O`EpZ za2{A_>e+rEDXDl!D00_&5G>!GQj$PG?5mM4?e}fsY^H$;%%Ze(+)L_-TH=`%K7jn0 zKmdF8TXXXyz<*)CsU$yNqnutjepL09`f#3-Vrxf*0gqxXyfTi`vm$P4T%C9Vl$f=9 zahK)xvXpYeD*8;Qs0}CaBZk9^L6?Ec1)9O<A!=%g+W!;Mf-LU-*rYYOPDNed*&Lr@ zJDwrEecn2E_g;EJAIxjGebDWRb`wmSoLNlGbHwhN2D*-f$}CqF@X7ZRtcDQ$<@yC{ zZTjzfgph&@U0U;PZFVi8OeUfc!VoF19movo&m(#>zX~oi{^I2{N=?h_X9L|1(F-Ho zQNe8}u+{5aQI<U6slT_l?+T*vUi@5Kq?Cm9OZRq5Q0(;RIq%}vX5H7q*C!r;ZHp~B zBYADHwKagSOZFGZK(|r%XI(nCliY3LfE!(vM+Cl-u_@)ms=J!rR0;+v3EX&+<Ue4H zl^HvQmHWW(X2lUn@)^A73D}k597*6Z$Q?$k!$=`xRtjDtet8Us$N~|oK$Pe;b!hvF zsc(37h&6BYjc4w^K{+f0){0ruEU4kGQ}F$$z@gam8ux~;ca^T(cVD5t;<um{D>gFU zPai)*m4>5D_-Tfq%2#eiE4pJGu%_wHW-Hy-NbdfP0{~))Yd`x8z;-=i%+Qes`w^Fi zDj=CM^g~vA>j#Str47fvdM1pPf<g>ca8WCbINicTiu&c7rR|sAf#0B=3FP3McMIg8 z&xUtiuAXmqTzwy2ILIH*3OkXqh`qje^oQn}F;H+B;9$iNC^HtWx_~b4dK2^!0vB$i z*qf{0L`9x6dQGjbfxQaN9#5*9;(a{H@a#W(HMZv=c-&jKM)C+pXgg1VX>j4k5!xfP zdorKXa>OK|C7?mdq(iSYHe$!MR}AA=bhM#-b4~B83(mmLSu$0$%;1bL;ilpFLc9QZ z=;3?U0K;9K9jBqJiy1k9-nG26JSy`#N_}mSRjeXAbgMSdcsDUg%gQ{8xroqW6-Dp6 z9_xf7oRv^qLf#y;fc)@3C;SO@N9y01r7059r$S^U;4c`oZ)ntHB!!?1u&T&?A@>p5 z!5u~JF(Sxo>ba+c$PB5a5sxwyx^`~~2lDj0H)!$0&KF&(#(~H)qY|cb3w?<-o#}H7 z`JVpJ%=PAQaQSd5ker_JVu$HzhVlf}7^ym$s9O$sLH?Z%6rUAy^NxP4g}vtqz2-{% zI(IBN&<Mv3J6@|=7{(vdr?ec>bxf3%_ocwz_!*lq{8Keuxuw)oezjL}ad%0Tw#3gO zMeK1WPhe?r%E_t9a9;LH`$8?mw;Pe5qX(ck%s$ha+%le&otp$A8|(BDFbT;E!EM~_ z>TD6NBDX~)J*EG0dB98C7<m_t8LQrTZ=%-%8O;t&cqMtw0?ySMEpGQTJ-!}MMn;g% z{Mg{7H;AQ##AduiQ%r_q+}d@2+s1&oKgtU0RSShpiJD=&ws<xxjf|VfODyQDw5j3L zU3FN1cW%7lYJqVgV{3{zUC`BY%otQ(=JFS=P1Fh934Z^KRJ$g_MZ+sR@YJh<`c!LP zc@BVp_m*8IZ(UP>eM51%!MDvR>EFZPn=y>BbdBUQe!Nj%3)ME%{1!Y&-$4T*0hw9E zt0S1xIf8IfTs51xaM6_Gi{9`{{-vE-ki7w*UWAH8$ex1mS~W@?+d{F2`_RS!y%TMw z%2D4puH{5VB1yELd=)---ji)M>l<bw`wGwc=u@sfc%gHEjb}K7wcm2!Y_X3m*(Ad& zX(nmI6`Ah^9mT*OT4|+N13iDXfQh5l=FF&gW&g?&CF;Y!A!4T-lUbsSAS=rrGeSFs zGJEvrQ;oVkbajxAjfSn5d*glY$F#w_Lpzg*qI^*qLE8r%aqM=(=}JVc7f))!TjF5~ z)Jh#5Vf;Y45#)bkIrj+!Z`bLGDj*QdaR{5w{cA>O`bufEeCw<>Sf4G8YfAB{S|JKW zRL+gQL<c>Ndn~AOgS!R7qIE1NQ){q|@27ahUrqeydP^C##we^@e}W@{72<_P2eiXY zc#<fYAwn(&I2t%fKI4n4x6oBrpV6anma*F*-pJ9VqD0Ke4Ow@~e=>jn=;S<=%*2e+ zP9J<Z537vBUgw3fd*4D6#r%mUbs}F=p%$lm?062U&c{RFAt(NQeK%q<2c|sP(ECBB z75ZxcU$aVd>qGGFCzX5=pSN9qH*K?U>sF*h?r2hC=d<UYF9KP)QSaXJm@Xx~8qNO- z^gT<D60MX7kzj@om`xnsed94jmt}!ergN|3)-VC^qt-P{hF&VS+y=^^7azw0C|G~_ zl_S};(Pw6!?K-IV!bj06Z4?V_n{jb+pKB(eQTEkm%6XFNwr#9mC3A(9Ad8`k-12<Z zRql+XOPzJd^b~*pv-H^+y4JWieY$q<*~wtVDnd!klgYknEdU7$yfyHGg$1S)vU~K! zfm7a`m8iUqSj45_yvCdI&F#Z0J4<VyNm&NySP`S4!G{({R#?@`a}f8OUu=!p@(&5v zvEJ>ZD(~>jUrg_feL)*#%m%pK6wmF^<HK25>6lG_pC=P)2~HaphhY_THQdQ%s4FEZ zR3P&+>%aNinwB4;VjHs6w%;((1eKA-PRK(SBh%Vc5;0!3Pt@|}J4EF&mP$SohJ$Na zOfo3`BI^ea3I*OB0X&lE0zbcGF<G}K$cpL$kGDZ(?mO#*y$**12|Ql2Dd1>i$eKKA z4gS71-BSt4<vjP_Yc>dj(RZduf>9&s!}YLVgRYB5GXHR>J5t?yaThqklUKD^#Dtez z`bBN#Tb^6ydL+JoL5fz3;K4r74bgv>p+EEm`<+4%%*trLMsW<`f1lbD|7dQujH$R~ zp!VHPXujllYceb^iyg;e%*G-OsO%a18z=SNIjF1)(Xa9b{_CmRUX_nU5P}*U!aIvD z53GVVT_m~<@{!`~$0!v{4YBb{OajH&P8Y0f{AZFB!#h06;5Q=SHJouiW}n0DW+p*2 z_S#t9exF$&9I&xx1`@hY3}-JZXZO=E7K}d;SyMl1Q@QLL=;Y*uiD{GV&}Rt9ClNff zi1yD5J~4)^?-qM&Nr$$ZuGcs-c+42+yAM^OFRxS@yQjRqU*QpqPy}4JA4aOtDsLPl zS<REgov85ZQ8no=sum5?hF5kCoBZzLxY|n}@YDoTTnLMOEE3cGV5WJe?Ed86j(LV^ zKk#yk97-gd_!R<T!BQ7aLEUBY(BNkz8VqGD@MbA8L|CTzpzm@=3WRmkAB+Bzy^VF) z0O3bz49Wg?gw)A9+f9^Yer5jb^t5SV%wt%>A<+3s_RIBx=2jQpl%a3YKob$kdw{%} zkd}XK2xj6->6QQl=I;o&-Z(DH0+(>l*y9VvWrnCy%X@m-N`1phhChpfK(wyb48_KX z3VopeY%4XNSqG*!#}Vgcy_|B-yFQdZ>I-MVU{w6HI;)sCy3i)hJArL@ziU^MqE}O+ z6EXV?+_pEsFY<ShDdmb>1)LFts0|#xyDol*UYAl&__z15lW<vadJ8CLD{VsiDgpQY z_gHDBFznbO@Y+(=LxlR)eu~7>HTiM1yY(b?&@%at?P}Vw!C&I*Gb^(>l<AS?fsloH z3L6jAs{3982OCo-llf?YD1P3BLbc_Q2!88owy;hBZ}&{n5n0*u5~vw2XVfZkmBAF1 zhUtP$u^C^-bvXgepZOrMxo~Ru#AH8Z7-o$dV@JB1+?t>&5lHW|Eo9R7EQgNX@j21c znM#}~(mueB{jpdhxcUK4#O`?QvC&bQH8zpatAVuPAd=&{%iq_+<qd~EuZhqnFg`wh z--VS0h0pNy-AQ_U(rUOw6v>eb>yw0D<wCV|RvSH+C~AnK<fqrTZD2KF&?>E>7k3$p zfH!lV=*(Y(VCh<{xTL<Yo93NcPvk25#_c2ov7KR-ezel2(N{r0QVwQk_LN$^uNHSR z?>26;t}qq}ESeJ=FW5gfJ6z({koJI6I!(G{F>SP>0`)E1PYlrD1@!nFC}ko>N>q@J z6lF?p<X9lN#VW{{3zdU<vS5Dnn;nx~Mil9HI&Viclp%pC*$1+I`v>Hi#OOdGk2Mt{ zv5bhZSd8@tTD{Q!X*}s=ynTN&WE<F5jfSpXGI}i1<_L|(DiV%~O?FC8Mk2WF$Apuj z$2e(UZ3oL?mGEXkr%dW)7^!CFeFlb@V8Ftc%=@W-_lfSFo})kY&A2H{QVTq|oRB`R z8gp$397gS!V6!WIWX6qp)+#kkE$q4`<p}j?lOmp!t19fUNE9dA{mQkwgFnO~^DH0; z^2puglnJWRTO<R@cV*K{%H+c^=n5x+^ZM_po+bXfNfhAY`?Y8y{+@2V@!!==@fomr z?(CnbN4#q_WpIXL2+XpH$Z2`$fyjWP_1b-m8#}hK%c-_w=6M~f5kmtUSO9?N{&&~C z4LCv+)*b+Xm#XC5($pxH<O!;gYG6)32qGZ~M42Dgk*DvPJs;%nZ1O%)d@8*VbY-~A zjS136uOz|@PZoRBZsN3+R|lznCm#4_)S?tPW$Ma3?-{WwV)79$8<8*r_ZtH|TZoN+ z4;w6~@P;XWq?;^tgNFaUj?TB5_-(JIOz^;A^+&~+hMf5V&aV@n1WA<`(BEMQYAiN- zd>%p}fj>?m*UnCU%Yn(~TH6?rw4qe5KH}MN0^t6s?R;M(|BWelghfH%o81&0VCcD} zCjE7@lj9<kxk7N-tlYwt$I<Zum=DX_+pfSwbr*F8y{O87gG6D86IpPUe9)D^d7*RO zE@Rq3_^(pjERN>!0QAh}^$BDx2Z_3~0SP_{9M~dZ;@o-pzBqd#!W6c+x(4ob7>uTM zEtigX4)hbKFn{=d{8x2$t`8ae4xR5j9&Z}JAx|0hy4*iLesgnn0|0&I-Q5PM>?ohF zzmhzCE_VhHmTZnCcZI^EiktgSv?@>OdU_UsfJQ|4hf2LSd&NcQIxFeNKuwa_2<@GA z$ZkYAQU{2y!9qmvTm0d-zomcuk=Pv~_$q8$T09&PMA70%nGE;8yBc9ESpwwW2Z1As zl4r!;XCtqg@D=x~Oz<R|=(HHqBCIvW!&{+78u>wU&R?qmr^U6bWgEIfm9B7@iiL10 zq+^TL79i&&$t<2qob)_9i#5BKeKPsLklzl(r6QFN?v;*&h2)T_D+U=O9<+0C5$x+x znkY_KlOp+)xTX|fo$oo6FDxpP&4yO=Df6pR=juqtRon5BluDg78_pYulHw}^O0$?m z|3j<)*}@KL;WWWDmLXdLTne<fcZyXsdj~0i<}s+#>TN*aw!MK9?nmS2UsFDs)ckax z$wnZ7P2?GBIYJ}AE?=A9ec=&*v}Ri!7I=!n>S`zDxm=F%&0>?H8J4bvovY-+nO^I7 zqF*}mv;!#|Hm08{j6qxT<bItdE)QQKrTE(S0YZC{PCJ<W#*Mp)B3MgQSM%SFW*;Nu z=;)}?c})~{)Ve}5nOeL4Y^9^g+~~b?IAZb}0iNc4o)hoLW0&b|amxW>^%j>^H?KY? zN`^5*G|ua-0gm#8+2gj^=t#<|iS^}W!%rdp8~ATl%}XH7{uh8frRGEx3Aog`p3PRW zWAjxhK{pqec~(SNsZp$(PdHyTcePWk{ZRxgSZo65AIWGT43Lh!g12P2J6S&k;KY0g zp8kL_$>RFqwPY4mJny34-A1<)oGYuI8HbWguuyLDbD(0(;>eecX-EWNEPcnNV8};g z=BEtQRv0isJ75oIz(B2@t-|;IbO_(M+1veGcM|;#HY`?8@8kX0I}oiTVC1z>LK*|^ zy2Bq9lZG`wCrmI3rN3x^5g8#k1lO6_rukussaW^*DpZ<h#6*wzWlS4a=pmg{fcPtz z*Y*v+R6lQg>uV^zns4``=RZjpAwP<g_v9^@UAHoc-;yF2Skf-;Pz4G<cYt>}tq3jQ zC$8Y~c1#xxaV_SVJtfl4K$g(5*mKSgV?sdcThja?DqlE29L1<f{yg8P2vMszl1Kfv z$#R2D3FCRb&hs&&^uY%#0vbxG2|%kK$Nj<W90BmVexXS3>2<M$OD1>v3*cQM_|X0) z2uRn*{uS9c$B+oH{;Y(VNSns&c=*9S$$xWp*MyDwmmf*^gE5P;$pKA8mXui~kz^T~ zM*!}#mpZh*S4(!d%B>5sBYC2_Uh-ps@KL<uk987Z3^2FOPC(;)P&(}iy#KO64M^}( z%XQDrq{igPQn>VOoTqizt;wsQcTH3IsBuhu`%`V2Dh+^qp*Xvg;g)*iM!_PApb{q# z5NXCkG<bhV-Sl3UkXH`fo)9=Gbj{g@#gz|{C~^sl8o#ZotRHyS6Hko(NQ)}6?aEq> ztF*>8pe83_B7g^0To+Ygcpbu|D9y~7xn5Pae9}?W6`;&0{h7qde37_{aF$*+h*?LO zNUd6#tO4rIsvH4JT&W;#qLZgSCv=Poi^@BvmpbM3%<<MYS6d!6+=-;6QCFJ!6?DOP zFhG<LEu*r4Ca{1e1}gwj%TtS6n!&vqj4?@|D7RGui&h}7w4THVTh7#dVux%QgQ<_n z!J$}$*?&3AcUuZ$QIf^*!#2q`3X{c57yKqxfr82G2M8<WIH)6}><B1eK*DIup3Gj( zHYjvW(aiMx$bF+WN%xI$CO))A*+he{vN`ZkqG8&*w$17ve+nvPNeJMtr(X7_rwm!l zMVF4_JYP>Ll4%<LfEg32B-ZNaU)mfx7jJ1sV!&YuMd-;TXVk2^&#Ik$=MDHFtie}S zs7F9A>8QIIP%8h6xC;limC3ra;JUpi{AA2h1dLe+HH9?1F_Q+wY&Pg$_=bmBVASX^ zD|<%nCTi4VF_p?(l~f@JxkzT$Y%kU2`!Ea=yq8yj|L!(2cJqCCiqnSo^{T83zbbzF z_N|mYjP-Yh#k)P%E8P>l3WDS}D(na5)D4X=<!n$zlL|&HmR?hIt$LOH%-=2gf9=)A zFmSGtkyu4GOU0EO5=|L-qNfG6D?)Z%xp5y#u)~^)i&g-$*e@znjbyPf87=TG)yx;C zOqy`R`S?}6h?Jrb6itjV+1?&t^|8$hout#<l)#%v?H{fxo=jEWErcy{!_*7|A&GeS zgberUGv%6*z2XrdVfCQg#sqXI*m~!`QcLLm$m<cMx}k&V!Nai+`XPLJ?}zYie?N}K zs5s^nmyp=2&8)EL_74)#?)Ed6g#3N4A}PY#d}=haOC^RiXoB(l6OB}tCptKvx-Ko; z<Fc{3LTkT5MS<UbX^=H~enEBfB<$hKL&rs&&2Uzo|B=I$J?Z#jopgkkt+hzboLwv7 zU=iaAK}}AGG+<}{oC62hFR?ex;yi^#QS^_yMp&0Bcn21db}xQ5%5lIrzd7teq*GU6 zYh&y%+`mMlG`J&i86?MhDPxlcyv4(#eCUx;`Js^|6!xPsqV&uW;jX_hWsvQ7!PfXM zb70JKV<6|7$@gV@Yr?%&Y)P)*NQQTh;}Yd^;|<x~P9&lIG8j?W49>zDI0=;G_3_0o zIp;N9_Bo-)di8Z7C6tG+<UQDzOQ(4-s1-!rGG#-sXOxtwXJfNSgNYK7X*NI5O`U%h zH_jAnP5(43@Okr;7%Gu0O7gDXaHOL#^~oeXGe6Jz#9(7RvRMSW0@CWmfs4Q2ruY=x zXkzf*#r@VeoU2jBMx4V(^?iWJx^jlB6dT%hs5ECjg9i~MUjGQ65!FC^L2ul|v!5%1 zVn%Na-}GZ68ev<{qO_~|MgduixQE-&6f(_B>M9ejZz))vxY&wB>cBi;jgqkh$12v+ zkyvSwadqbd!^384Mbnilt%Z@WmAO*_lZ7mta^Dgpsdr;6kqX^^L}e<C4Vrz+mZe(c zBKo;La51ydOy%aw>B~6O*U9fNrO-%P$tVU1f{W#2+)3^-dFQ>_E%R7y>LsukN=p)3 z6PV=s>r1Ko8ki%>+X6H*6<OvQFVf?CP)kT=#7Q)(gtcnrA_+z^x-M9%mTt05M=n8; zSp%*eGU@p0+qwm_S&cM79Dy}W*IGO+0VA!n6k`Lurn`2&n>nf5<$hvQGo|l=nUi!9 zXgZ9{x&^xKAqo|fy#AXM5=R(heB~`Kz(T9=0=+!BG~<suS;XdvERW~WDm%P4D+0uz z8gep?o1R};@-7|d2Mp4*FlbsiFeNb+2@H%bD<=QPP}8*h!6EsrbIL$tox4P7AajeA zf8qLJ)1||5d>%!kkP=LWOlFwPzgUr1N>IU^Y~>w;EwPGoiurs{d0wY^Qg!YdmyknO z1*?p{UjzKEG6h-RmBDiCTvp3AFUlCsNioBRUY#->OAj+i*`VhSuoGEIm$6`>-9p87 z@OB_Qej4E1S1Zo?;9b_ysd=h{+%Bm4QHv>X^tHtdR!~B2e$t^ILcIuHWjRUJ1MgyM z{W#{6iQ`sCvT5$H+dU_0fB<Iwml}k{fdO|l5h$fF_3V>4S32F&wqeDgRuH-sB^gw= zIwdtC3EPrE#3D1}LP#znZu4%`AJ0O7cra{;7%M`8im<9rQi*FQVb}F}D^-6#)N)ob zo={pPQl!_FeU4CCVg)Ojse#Gcmi8*ssg~WfT3$Fq4{Dp-L;j6RL5ZB?!?J`A3pp9{ zUlvI7kEU9^qTSakcT<Yos*xpr0U5Q3$vW2^$8I9gfT!{L$8s6rdK!j?znJV=?5}iH zTxwbIaE2pw_z?t&4l4a;+`9PMHaB*GS9S>|+~v_@X!OCJv|=2mw3GUd`vdF^If8Zx z<Dse38lzR{0V_kk54q7ZT@||v*@xH&Ipm+)Tn$(MJZwhTm>r)_^;74Y9>_wk6FfQH zD^Cv8cIOL_IRWT+-fqCP;-6m!L9#K<bGwfHk5isbG;iL9mV~0lA8n^!?k-8~x00es z@{DkVr5kkmwD1Kr(98C2Txk{98!*An`GvmjrOEkAc5_NGOHilRCX2Pe#xS$y+0jaa zrI*)-{du09loWH|rYj@yJzRb;n$N}Z#Jsjjq?qZ?MnfHJy;~fTWL+=|>^xj-kfRH@ zv1lR!Eq6bxW7M%5R>yoYH;tB|S#Qxd^KW^wSLf?)UWo|I{owCL5G2E)T|8Gse>^eK znD=Fljuz9B;ds)Q#f$(YY8o#JeX0geTCmXG;7wReU_k@SEoq!;#8fHK!N*}{{XpW_ zJ5kwkV{VSQvy=3YL2}1Y^S*rI9$S$9(2h}`_rEW2=w&}i2NcC|v0i5Vs<llm3F?#8 z%h&N6OZw!VjA=yQbN9JG9lC^(9Y)$}#e|8_aEm%I8$No6GIDOvw$;o@4rx4Wv}l_6 zX2Y-Pex%?&I%(O)Qjt&>Ag~k;)pT~;&ftR|F(`mhoraPkB!l4x^9-O*w*pnr-q8u| zVI0|wbWUVQY<t37Eo1$L^9pEsmlU=DX^Vqf#?;$JeD#ATKjdfZ6Oo()EwQjSz8{yH z$1Tyl=wJ1^aU_kNgixN-yx#wJf+fYaaXa-dmBnpW*-0(laS1+@YdVrQtCwjw)$V&G zt2}wY)2Zt$x$8*P_g|?KZ5?-Mu?)`hmwk`7JkLpSzF%9|cuPy>Mh!^l_#9xp1%}|! z0T1rwPEVvSPmr{lN$s1@{;CDE3o}lsOnB`FN=V9o_`UALtxVOj(fwwRKj_EEaVeA~ z#H|9mT&*x+W0xw#^Gdc5sjLNSN(OaGQs~Wm5Z|uJ$<|lHc^8WtGT{CUN3L#HrF#H} zbHL4$Q``D9kF=By3LqKO@3Y}cU4~^kz-TJqF&L<W!ETI@)DoNID89k9xEtp>i8~qt z$nu`{kh`H33%zpKPeoXDF%`#Q5kHt>=bk<5+KBR6`}p~~=2+yacf8)8*ChJjuR;*@ zdH}(}cSj6r81qPpz-0aE?sCPXwJcbOm}Hm3h^EzX3^zI48#tt~v8RiupE4GG;K$GI zgs#Si9j=j;!$<lX3ANe;i87T@vkvOAlWJR@sED5!f5~%T6=|rWeaQZkI$50=+&i+9 zfT$%(hI1fnY>G-I>1Yf9IC{5!*6DskWJNkY$lguF#t)1wn~}a}g7Ann<alkRrd~3G zAEJWnyU7EbpTG_22w8qdoEeVomAqPE==s8QX+*B<qQ`*Sh!RZU;2_sE*Dw^T=1wsv z=WuqYa;?MqK6LnlbPl{8hga2&`{&uZucP#@^DA569~0-m(t$2;loCIiPM!$%#dwUg zH{&m0tL!J8{67=<2Ji|SWe^SnEcQPkrCbp`pgv2&Vtw1-pDO{H>`@X_V~t4ZXQgn? zl&gqD)P9e=sI7T%TkclEh3Dqi)LB>P$MygpInLNrLEft%L)5KX&7^6&8TqJ*`Rtcy zo<ZCjfh8449y;{ZxklU6TM4;F^=5$=DP@8SN*)de%mNwg@uNQV?``GHqwEbHKgw}w z@df?Oye4pvIrNH4-&E|m6!^rJy4f8hDk~3SLrWbMp;|Wb2Xrg4mRGg2R2(!)!LF6P z1@*WC9t}IJpA3D=<`%I{8A`$|2s=OgRXrWD<J2ANJI;!TYhAt<@{U2JxAk*B!#=&Z z#SeHvLp!(i-|V`;ux{EahKyRG7P<-wD(?Wd&VRaSvpjHi=6Jd9)?dtnp=btdse`3x zG9R|ica_ItwzpiD4kyXyDc$pEQBA3Rsc2p%6ASl*u|FUr3a27BN=EFh=u@5Hj6|>B z(*iV>g(YCPr8o9%QXBF#tkGiVp%$ZPOSWoTDf(8YM5L4e3d3B>Zz7XJ3Mjozw+*gR zI(cbiSkhWMdGUM5OX@^fb*E>fy9-qbsZjMrJ1GgqSg<EBr_~J%Y?G})e>^1ZxazEm zv4v?%%7I>iy-ysF3MkRz5Ik5fQdiXi1`xv15DIeO=3Tz}Ywcw%e9+FO92y5Y=&I*9 zkUreB3XanWm(cql#}gAEP`V@cEHs%Bj%GnnmATQDNbiOB^?eB4i@%c(WX4Zl(d4fK zI(hR}re7?RdEPxY?YC2&?^K-bQx{9Eify{12080`zEFz6s3%xBcv^6w3w{E%RL1d~ zR(jr52ZwTB5R)3gzcc}%6^d&3A<EX)oYyBe_R4e*R7D6oS`!VbhP^?(Si$u_g9MdN z_<`21qfe+NecDE2umyC(UOgX;Fg0<inM+UxI1e^*Y`!LC2%eBs=QIYDBd_<}3(r=y zt53q06l+>M(L=&gwoX&qcO7tn(L3;N_EAD<Dc9ZuQKpaKmoiwteb!+LAa0Q$c=-1n z`RQxoK+PBf{1{wnYHHeMW-gO_A&a7a8-L+DZc#Znyp-|EIvL43LZ=hb<32!THcA14 z#=QKm3C$6cUs`{Hf%6RC5jJHGoJM2$-Cl1qp|(aQ1)A>2x6<ku=&C%9Dl+@G=8x&c zk2^`67wV=d+zp|EfxgTTat1TbZkUY~KtQ?V&QU)4$_dLE3BHxpq<#W9x&YIWDI2u! ze?DdrQf<7Nd1i};>N5&<<w#v7Hv}(CPlKA_R#aIs)XcB&Y*qc6MOl+RwsTw<cmI3m zsD#Y4c^mr%-8T7&(*aECTxNehQNT3uumOa&%3;iJ6%2Ygo)$;+<U(0hWO;H;_!{k4 z&`5l?oH32xHx>_T+Tq;JaYfNKAENDgoVpORTBo_j+G>XCA886w@>S_-%()vkD$jiK z!WlKYu$fPn^HsUGzVp=i5pz9e5wb*Dv+@5Cp5Ff$Kc`z7oncih4&lQa1?c1@#Fa|{ z<<W_kSBNDmZ<_TF61U&D3>x2N=j6!cb(pyr6sPNr<n21}r64AMF81-l#uniHf|kpg zK%ID|0NRt`9?R(-H8_j#85E^_Ne7kTQZMCs|LXF;-^!tld6B>0KXp4{*XzDE$DDOa zI^s27Cgwd`=lF*lNVJE4Gru63zYt)2KBsk=J77ebr+D*OBcX<An1@&{SCr?casPRX zy(4_kPa(+C$hmIN>ylX*M+SLww)2&bEXHTdN0IC4gsmD5G+{LijDWAX=N*$YIOAYq zP1t1oLi+MPn3(b%-f++7?yb|)ebI_49xm9{h(2J7*APDqD~TWl|LHOtuHfcXZv6U& z7TH^ShXv!Oq8!|R2g+|~!)@vd;N*B_6_w@G5l|2NnSL~LnX<ra{%l&|k||zaYTkeN zW?Jkun}4VrxU$>qTf<rbW%}c9hNilqX6gupU^GiGO|>!=a}nqCfw~0t`slm}_-EyR z;G=!P(wFv2LW>;ve-8RRTauRbFvh*0m$)c}U}dCWVyrx|g9ZyEt6n%DUpWWRiBedb zTkxqXmbga(p(HE<WugG2`<XjpHS24ogW#G$2{s;pEIL*|TDE{7dweY6xo9kuwy1(1 zyUqltDr=MTCF(|d8ny(cy;T&Fpa0h9pIHPYl_@9(eZVIq7{-p$LmMIp{lGso_))Fp zf{;K(!|v+^jYNzS(SOiJI-<q^BE{r4WqSh5PS^<iONo0t%Z#lm)8ReeeK>`iA97Kv z$?qsyar^u@pe`4(V+i}Vw=ptPsu~WcNmXZdU2=pV#5Rz8UO6IyZP+;tz6sE*X>m+& z+jD+8e>0+Y0F#!F!=hvb*cY$<%J}@HNsQ6|E`!7=X5Ef`1mI%Zx4Q)y2?+#Ll$20O zrJ}zKEC+l0$)qa~rJ?AQnfRl}M@c4fYV=+Pg9G`M^?+t95ze6#_E1oB!N1>mXGz!o z(h&!nXAy5YWP}_Se|gb{B7foL7oe%v+8fXZ0k|q17Xx~IEnsfngcpqdvr%M#%4?7^ zZGkH%n*f3r+*M>+PUqXS+1t_hUxP3W$ELycuF=Tu(8KixZ`(!yoWc9{>J90TqB(_~ z#-{VqKvuJp)s^d&Q$o^tnK`o=_dIMj@73|+G}iW(lhaJdhhTT5=WxW|2fO@4L~YN~ zzJP{El@wMB4A*J~sN;cVsdTkJ8`}5iApMa%jR`eZ^;SGZc`!dp4!p?P)5Rb;{iWB~ z@`!3CU)H%CnxgXBJMv_~!Nsk<&s-O)E$P|WFLhkP?SI=Lx3X37WI~JULz_rNC;QcR z4)3a+NW^&j>d&cE_V5>8>=mP@B##4hb=6mMW2=(hXC)U`SJ~%nZEa)n6ei5{z|w^6 z`|~M!sXzw4FsZ0IZ4<qsWHI`v3Fb&J3q+7z`y#kN2w+47qhL>GG3pb|(u8!P*!`3% z!wpW-@^PEFmlBgm)SY&4YgDw&v?@OR2LR;98(p^)X8+Sk0y_5ef`}pQS#3QrbZRjN z3yC%uT|_6%^KAKcrLI55=G^z=pb=*07s^{gBQ%K(%Sq)1xI;GF)mGF8O)abyTi)D# zFVHEHS6q$ch$JL6ZnFjw-H=G6&_D)ap)Y9nmBLsCZ^rjn3M`SDI;)$I-LG@yhVz8R z5z}{~pn*Z4{xWL-M{Uj3KD7$1(f?TdDfM#PDdlt$jK?k+S%Yp-W$Cwyii&8~T5X|- zDaCPtZD`epf;9X#Nfj6s8m+jQC0^V%U?*K>J$%^Liv7GK<(3mGKU_VPs`NsI<I}{D zlT&=o)(Dqw(+fG&f7ix;6niz<_BDP}37jWyc6zjP(~i&vnj1cyCftcZurc`)@DZ<x zyY0Vm1%=-hF`z;9QW8XMCBTl%zrFyF9S*fHg?#@j1K7ok>h=>T&U!Le#9MhFcc=LB zk?5D|3N%q1BPxW^xY<iFXl6HyBLSga>M7`<e9;lpa{=mEc%z{$q7h$aH|_(lxtJ@` zX<b<%#8CK$lFz^ZJe6a1D&VT=Y)>O_S?PzZcJdA_?CjIh8^ptqn&nq*vA_-dZ1Qnk zS7tyckW-=hWmgZq3=4I6#k&D^9&lHX?|NX+!N4bw4K4b8I7xQMkjGzCkC=SPu2*Il zgNJ%wf0qaQm)fh4qyzB1bj)3AusN7<eRBQz64-;%R+lVhoa75Hh@R@xS?v}_f}j{L z2-+kWUihZ&mn4p83gNoySy(JApDqCoITp&V{w_Z0H#C^h8bF^6k5WONg|D8UTAc6> zEmVN<X!fYQoyxIOQP5ajs$;fQeyP|N^bs8%`Cxu)I)3YfcjbxypIXA*n9~qQz|3*& zo8A*#%KM}jE57Cz{l8QCjMsSnlFX2C_A2|Oy*p6^XQvzR*UDFUAla!<pr#md4P5|3 z^Jj&O>k^riskOa4L&SrOKef$B1I&$wNMGy`3}zJfV?E=MIvZwc{4~qDwe9t1n&D~m zV>`FiIt{)2%M3|f|HLkic1t3bFrBr!XVQ71uQ^qSJq|)6Ti*Vgl_Ml5tRUg>8C?mf zj_)q&NhC*^`ZpVM=%KVLbP$;+_1M1Zy_**??X=P5uiaylELLeZCA<}v92V03AZeE} z&hGZU<&aDX{60)(2An@o6kI%EGA*-Bdhx>|?tjx44C$U&#AN$y<$f#5ABwKAUPMst zK7<vb7qR-2A^;@sgNaF6hI0kqc&K#*fG{KtTTqQWQ5MLCKO`wZGS}krZ!=78ScV%Y z)-)e&=(Cw%xc!Aw0gV5v<u+x5T#%;BknjK5)5cSvXQqWD!-Fk$=gjmzmzP)Zn1KOw zscJeG@$#|_=Xf%}_)KtwtCUUZN8k_vv9D=&Ml2Z)8rLfIY})NRP$Ea=1#|;WWFwn$ zAdH4XqTxK9eg1@Y9Dd|x!}2Ee{p<Lsimsi>yaP(jtmMvzyK9Zvj~B0FdeG5iZWac9 z?9~9}pzZEo1K{b!Py`!mizSHb({ya+nRq8UzW&dCIFA%3jXVvI)$1d95x|%Z3=o;@ z!lMa4s9gH^_%tFHROAaau}|O`yuG+-tEUQD$TzXFCXPq?#Mq?3$|RL-FnQYQwrsiZ zHL!In*@sJ;I4R=8ZKZWhmBPpx5bvrJb>>ah)*9UwYS}Lhi?GSW(2A1bmIc)b8o(vp zGnkk7ntmwkc5d+qCRUOG@8;{bYH$ABu1aqCRaa4wl%D?LU@O&QXe8xqCY@VnzeSdq z%@aL!mHdu;=9C>RT($@I)A>x9=GJV$GbZVgH9i4dVe;bini#Poo}9k`=kAj|m;kZ5 zvB8TM{Y9QQ(+OJ`xV!6(mC1Qd8D>L9wb)*IZ33yVGx*XqcTwl$X8||`n;mII+(#6v zU(#P={`%NmzSc<+@t&RRatTlHY6U^-I%#+Jl#n5wwdgLbe*W&cHt|7<gF6id266^* zDPIxJpS^lqKmHgkZ=P=vLGotMrlqAt{1TafSX;jx$s-juG@HZz7!mWOOI%b~zK{>w zD{Yl32i}J#<I4>~E3P1>QW8#qD=~9Sc+_Cf^dA1neuA6E5w<oo{0LJ7$Yg@8UheI} z#~tT`*9Q@dzpzldXvTG)1I?g0=Q5t+eBi+Z1z|Ph>enr!*e%H6MD>(MyY1!*zXn!H z=+rbZ$)HBQcQ@(2TRTo~>pXHAyh^Y)<c^X4fbH(?j=s-<$3xBm!+nh_p#(ghGFsHS zk_jcGIJD<eK~VlQd2ni+3Yhu#VnmVVs7PHkZRWRcqQ8OricS4An!-d1n1ul6vEZVG zXXL>K2|-vh=>ueYx<xjg4AMD!1Le4|VmWz_{=@9l1VF)S^TbmIVn836C@jZj@!&Ig zaO2yas);-j_|omA`EtV#EjwTO2wC>sIjg4g%KdUXYBXSh3GQp_<&YgC8eeP@obb@+ z`!+epZ!f%nI_e}i2<VQ<eB0fsUUvUR)Z^g>kDM*~!clo;GwUG|b17adxxUU3<3S=X zUMt~yh5qvCAUp#H00Yr^$#CffZ9;AIGIG?q)dZN$()+PPS&+YfUY)T=iI1n6lA;k2 zx&ojPMTN^nXgxuDDSR$}>PxiduX34L4y^;5H&P<Y|HlgZK>Ru2LL+VwD#nZdir`1h z7wMi`d1|VjQqh;3F<Sc|TLRR_>J-W0yfe|jg_vYFTjA&0eIQ7}dZRPr11R*T)l*9J zB0AZ}sOqTos?FL+YBzyrsvrk{)6mhS1Jw#{|9d_jswV9Z4$gu*YX)|C+b<8jI+_ex zlTLs`=r8Z?o_i!Zx4a@!30sew`U1S~3M4?rUsoq>3VlMR%LYdtCgRv7&{9T+UQ*FA zU<=I0C(cdaDMcUy5aHS?#{44Iz+>EJ6D|R>|6v_@*)=)#Q^5MK6#%v}ZmyEBZ`JO8 zI8Z)>P<%u1oJS@(kbE<HdRgdE>%!vg4Y->KQP(3CjXP|th&{@NJ1W(eIp)QV#tyAo z{jXA_Wuo)Ct5m^nQv8$vmXisuQw?@1CK|{|;lBe5A=4G_KPoxz0B2e`vqD5ue!LJw z%WKU3Gy<g|cO<g8O$*cEzh5-mb}EtXWtx#O?DfL$5rCucn<iW7J=5ookZ*EN9jY7R z;oIjKe7HqyBMgbMEMlqd8dC3*NeTHX_;k%t)y1|VPfBZsZaD>P{L(-W<7P6t;E)K} z=VxVK5Va>1CO{?%3kf0|$@3YH2)SwY6i9xVv|eO7<fiQdWWhf#FA`9r0j*ZY7I~PQ zK_^8XkmoaNfxcv6JMjq%?0mMp{i}&kF*TK%%5@L>(5*mdc>0+_5U-QJq~l}pG(wSa zJ3gymX;&3_=28B+8CJ~MzVT(fF@SjXDyC<g;n(G9t^HCKTtQ|^94Bw(B<egxEM~RQ zu!9L$OgVp-RaUo+y|@;&kb@FI{tQ+%Q#a9UTnO~(fGneZ$&sDTS@}u}z3e&a`s^pS zt<t#Z!c|o{Cmmz#_CM2=j4ub;+j-_M5?S|j0(9`P9DrtAozAHW60M^)qj9YLTD6iJ z_;7=Q2wQi^c${90H#$Zt#fn;gb<geIN%IIRbM(By?|(6Lhw?lhz@Z~lksW#8VQIyN zLgdiZZ9#@zi~Xn79zbT0N){tMn8c#ObIV=U=R@~`{n1UT0g7Z(y&R{Ec^jERGQGy! zox&+}9FL#m+B)0!eNc>VjkTkZxZ%HhkAUb}ZgZaX&L9xi{Vb;EHIw;p-jLgwga#~6 zu|B4R>iD~|u%0!ym!v+R6oq`UxdlOoCm(20%R>>h3M`O>8*Ak7t4R||Ub3PTF&3|^ zj1Pd6Mm`GoS+>j&c|f(2EQr>e>^`AMT;nPE;W`xqEp+lx$Y9qD_em_#B%9KbED{^~ z0%zfDTN|kO)tNU?F)-v3bpTu2G4@T;>g{Ryxg?sCffBlc+CKj)%tSo$wCtiU(3`1< zE-Zg=qG$)<z*7Uo$La3wu2U#)h6itG4)BGNz}Xj+ILU&)$oEvW0Yc%JD-uxxu03F5 z9Txxp-jc#84HPSBd9Z%XF?xRYYZDWb;BXUpU`vR&8&J~$vXO`&eaj)#<kj0xQdTK5 zq}1p)$r8Elq+@)T`6~e!jWk5U^V`fzd7^h5QNi{WF8X_H1ld0CU<-hXZjue=hWIT* z!||F-1s0g+@z@0Ly8f#R;||)ocMLAF9?BX9low-SMvaBS@2VRbw4S;aBD=Y6?{LR5 z*9_}SI}JBaXWXPk7WYhisO3&JU*ek|p5Tv~uB{y8KJwlXleSoVlmTL@WIi3K+#L7Q z$yNdVqhiK|m&-!irDaD5(h7W$x@|$W$Yw>4RbNyj<J@to;0-Xf#7*rsKqIlK=Ih)$ zF_(sx(8Zs^jTm*Esrqm~8je2c(Ni!6{~z2?rwD%bBRL?}tP-1h%G6O|RwTPBd;S6n zFEJ+U_Vw6PO<ws%60$$qEH1DUVLK|1>h;Z{xxV$<qCqU`agQ^BMX6b|M$P~Jq*KE2 zYID@Jh%<j;Gc$Zs^>Po5uN1YNH#r!kaTKSkD)4ZdL5+;<NfucjS<b~wlCSxl-#zE6 zdZUI)A^`f|OT}Qua0E<VP|%(aw9#Hs?#2MUO?|c=?3OV<q9}O>8bZ5>7#RLJ?e#&z znRHJgh4?W=z}99OR?K7*Gt4cmP>lZNC>;x=sHZ%S4Xp_mb-lcEy}Gzv)hlqQz(hE8 z^W$xZiM~l<J^9iza(!Lh(HL*L)Xg~$bx9&6uV$D{hQA!+T5o^rEv4SxYkbRP+X+cL z27^C9EXw^~Eb;<o3J2Ge_)H{P_WB+A0(ZkNx8fVY$o*=uoUIAX2JXpk8k}QTsC7bZ zZ>=+v;TFe5I-^+fyIBgw2|W0dSn)>{c)hXQy5J$#@LpjzfEV{PS}?`NW7QVmLmb&U zF+)a=&-#47`BId;K|vwfR(>m^OX!ROgWp^%*h(CI=M)lFxoo5>Ok;`ei6R^^Aqk-9 zU-#oxA*lkTR905vj7JU^1D{uKg-!a>j#ws_iG3Q-*dap+MpZiM0H!%S3}G3=Xyejw zcR7&h<-axvkCZ2wK4o36RpJJ3&mw_29xEnOoON&r`TsR_<?&E{QD37hWseY9hDd}E znz64l)~sXAQqow9v5j4}vCr5dTlOJKlae(dL?vWrknJ~?u`eOsr{D6v@AK#LdG5XE zx#ynmx%b?2@AtZ3{2IvN;}sDWmfAQ1=!|~NLW9}(ir8;q4b@&Sj3%769mK^M`;@LL zD^pQ+r}Im3h<j-16uGs2V?8e`(7Bb+Tek88-#BbHLpmbkwLR&y_s_s5JG;v5<F9Kx zvVXoko(D#MmLE9s61#XL5b=QKC<I8ovioqFAul7tn#6q<cP*7L=*xjnyolN8aTD~F z9td2%cP-p!b;L~Wo2BergKN%I*6bn~_eQILnmKGt-~4%olh%kq6Hjxvdt;~f;rD)q z7)0pt@@9SL@9QVd3wrXktM-RO8%a^q(EWG#mc}><yH;*u@WJ%vH|WMgB1@tJPNMbD zk;LgAoM?KdJJ=U9gdGdEdrE0;_h8U|c@+l@K5JYz7HL>rLR|Fdf$V&lz8|^Dc~0Ov zCkO$4-DER2jdR_a%9{3}@<_I*v3(<ZvOVkBK9GL~$wMAK;INUl2&^d67Oxuc&@(io zCJNo#Hy66nB{v60)(z=SjoIY1x3J{1D{C+kt#}hnX@55^R1e0~N#3;e9;JuRJM#H6 zXtmMoii4Vc*IcH4n=fX{Z=^o_nyY>Wexf~ft;x6ccu)B^aHA|*>F!<5Y5-hZ5~xe6 z*-PrSly1J~_UkkFhMFa>7P(p{RQq<k{E;lw>Rpn&?g62Cz1lTjc8MSZ(z4%Tw&&lQ zdh5bSN|+k=u0NFflwa#claQDgH8(fc-tVkXIUg?KR%e)wC}k%I7#-Ce>k`*J<kKMI zk!A0ndLfo0P!1V@m|{Gjl&0~xRcHVFh3vty&Yyb&x46Pf)a-+T6cQ2=SVOqy#{qh` zi+$!VaPz71ET3Lp1^M{(nIETlRStIh%JImbGBx56M8!-Fpo3*VYq%FxhbcU93*TJH z*{zfwH3+6zdQdZE-I`)Sg7aE|E%v2)vcl3eb4zTkSxY%2NnF9tCli#0Yx00BA;&A~ zr+u~Te=)_bcD#uiFhfhSvKvl%BQA(c?g{{c5)xT$lFOVz8!NfyFBwKR7oQ5NOcbxI zDUT7HbltTr0iAbIc7H;tU!1gGa1^jVe^n!F*w?M1oMmJJs6}XUR|K>c>An}?r*K2m zM{jjunlMGQwWe<0*WaHu`(5EV)7nx&a`!zx*kI(6b$hQrgDFg#@)?q(RvK}r%tcMT z1G)?q(`LWh<zDXJx>W5>=@6_rNk-3G{gK)pl2LT87i984G=1umZVfk;K-uJ#2Cd;` zt;J|W?c6)}$;LdZ;Ms6$7YXVcip$kpUfmPtY4V;iOM+VB+ZthHS%i%i>dA)6SmVbJ zBY_7Vjm|zy&vSF#1L%6c<w84(l9jBM1<-}!L;b%b+5A2bS)^Wkso_;T9$i#PJK^H6 zpxN=Jbnx=x6YZGC(0lPra%2&;x?k}c@Z3eGkjVXot>wJa8Tb&<aTj`PtBg{lM83AR zGFy74n-Be%DJ>AD_jDIG(;>@xOj(pL){m*sw78#Kf#uu=DaKIr|E$<Ze<&S=x9y*9 zXB*(BPr|bzVLrts!CE)?*yL!mh#3m1N33G$FCTngT4#0YF0g;r5%GHSg=Z`Oi?><V zJx<E@1$SgM(Ii1L;r!9%G|~`S<O)8ov9r#mG1ZPf`WMC>2<4~?K1y{6Su%eAz(wJU zesZKMLLwSkDiJNIcx9>Vr@>GB+~$#;MD*yg@Nkum*Ur+{Ip8kQi$KO^PY-XN@evqq z2NV7F^{dm+!Wa{Of{tjiL1bl|7-0Yfy>H2F{8N0BJ$F<zBCgW_hdjYxFp>~Rc1vTD zH_O(kfxf;Ic7xR^Q{48VjiH>w0eL!Jo7}iHbq@F0R<3@~C!uYSpTeOMEqOb>e4cUZ zohoH4PaBESlJrB1lFq4^c2Fc&#Pg(#T4p>byBVd4Bt0zheeuO_&|LW4uhr`kIfBrE za6fFzL~q|Nk!{!{AnV6$j?SP4{a<t$I<8N&GqrZ(uEIpLV-EE9uq0=^9m&UuqVw!M z<CtAD2V4&>A9@-j@4IFpTRlLvj=%Lbchty$*En#zLhP$(RfuSQNYX^%tJjiDqt>rx zF4uocj=rZdk$osgJlXn_#6Ge({GF-OyF2OH+f2$dG#QBLplBRNziK56Kj{cc)G9zQ z#fDZm^xd=3Wj{OGk)Z4^b+}R;74^%%-0VbCdFumq^Ye$Au8%86Di!BsuUQP-hLt|M zO+vK|7gVa|s>Y!p1xQKV63GXA<{D)({kbw#K{w%|$yE_6_?EHn`Vvl7rQ1@uy*q?q z=k#<uefn}qE%P~*Qpyj5xGY;iu1f>rRYT%c$2ek5o&I2BC@FX(*zo!c<Mt7m4?n{g zE{DjGe_F`fI1#|hUWh;**(~qbJTPLmFLS%xy^)54Hb2n_VKbxU-nDS{gQfS^CIU9~ ziAK_5rye3L?JfOtj!#O3U!)^?7jst4c!_;KG7C?Vl$7SNBreuULYb*Ta$+_37+RIP zs6z$)yOkT5PFt6bc0oRDoCSLUFe)@P0451x%;hm{a~&}qd5Qx?R?<MTAtW9M>P8Td z|D3J_lKWY0+jMh$qKAefe3H4X>D;-Y33?dE>fPrP_SdM<DA+DqSZGzbT>H07uZbEb zGQcp!WOO9zbFBb+6pVRsti%(<ZpR&Pt1G~l;dH_5u1}y`)ol=fI2_@cYO`6+d9=s# zMmK!aMH-6c%JR?^QVmT2k1QorfjgniMI#I;M3Y8isnb>su-am!i+7o16<joWIO9F} zZAqq?rJXX1S@{!bd1!w!gfS0C;+7tj{8PCY14t~U>Fo5FD`3%9*XyA3vY}~fL?F3A zc-3_AqO1%^F^r-(0r?4ROm*&AifS{T{dOVdxlyT?8=pm;FkU7=6NSHzG<4l>%lv5j zPmKZ~-~xU-K9?%@-0C_(zhuRIi^X^Sd5T;_^lFt`^&#NL>8$HL=-r+@a^SO$ecK{0 zL4B7|*h6|G!a3N!GG4c@qIkG;5wJGo=a^>k{BETh6CMe+q4*R@O?{KN=a`_|QMBiD z%j7>-a(iaMIMK10e=zj#o?6tHC6(nf7%KgGC}8^-PUb=X^)dlv#(83puXHVTnhJK+ z`SV|V4`BsK=Bg`SICtNRj~l5)ssO~cw&NpnrZIW3x1jzQCK!AWoThnHm(a>QuooC6 z#@tY*v%Iq{1@ATRF>V=zH5+b6EMhp$>zUxPll0t;!CF_rTAf!wTD;uAF!@`SR~qMM zMF9qCSeJA5`__zwBp(!`(xLq!aPHv6;j0XHN&h##u{~kLhqFvN_b-5@V0koK0=SGa zBM4Sckl7f{Y7`lJlb+P4ja6mt0Drzy*iX%zWs3XO4JKUp*n3$V71wSNzs~=l7^@MR z4kq3jOcQVt=;wqm%f@mL@BBMp0Z9rVpiNp?<L1rwOT(gXU%SD{hiw42#NFoo30L=Q z(z+uJ%~sP!Yvr^NO>Pnf4(GKXop&A7z$$-EqljBuYzYqlX)9fK-A=*0QZ0{Nz=Azt z%<{}KD-gir|7{e2_X?-rrbwO^t!ZWf63XVfAZ-0&?us*?OjmdMm3e{PilMQXM*jc4 z))#0?enh1ka!>bW?rF+M0vvLJ6^}c5s&8jj&D-0nD;uonwEpx~<47UOC=1mSWXeUD z^ESy{>qGrDsYzB}*=@UjphYOB@BJZB^7PRY#)YvIZvlzLSrt20WD!gvcS4&5$=D6Q z96qG!|8)#txaJ8tTYEFd*sqv5H=r?DH;^%P`-0!e;nrpsmuF<Z@>w&!-v<heo>#yL zNdLY!iF&+CS5?l(Z(o%+!Jk7gE}P=IMjVh#vq~=GaU)u~D?pCuonmb%dx6*RQN;4( zy=!Yb`DL<)N*J2rnOh{)$ZeV8ne<(#Q1DT(P9IWTcCc(cBYoLDU3&#;Cxm?Sims*l zO}c(-f-GLUClgy!IJ&%aeXnGm2b*Ea2^lxV?oz+n4&7lQm}>K=QE{r<-Koe8vi=L8 z=F5?kmCa~T&hTSMb-p}vc<9f;$@zIC&bff?r2CXYwt`0yEfX&mJX!B)H`e6m8SbNK zX6>cDBlcL?XT|goAl7OJ$kNl+%@zDN?cX^av>XsGbpmr~FlEhsKbuJaXYQ+neN27! z*)m>dfnG+V3gNUR;c7AP+Q29FEnbf3lFI9U=f>*Csu+kAueB|d5v6t$zFg#1JgTl( zg9w1agWXK+ewpvp^4Ag46DP3lMvCdQ>JN>q#-ze7PJ*qK)Q`;9%N57#T%_G4^39>^ z#Z;$tA(pv6%zvxxTYdM_{_T?4Z7_<>bm{O4V45YWa#)5|>ql%e=ui(lTi`eAlE&?< z#-isa`^{RH<JoRvp-MUNg+(?@NS@gf0=VB1eZTd~q!?cqz%cG`2yC5kdE1GPd}^{4 zsKqgd#jZ~^NC!UObWthvO-o(s0W-_*PMDr|nBRb2Q@ArGHFo0`#)E=jq&7m>cH&0u zJj0U%E*}X^6ew%1vyy)J0m25M?`{W`{=u5j(C>4L0^4$W3zm4^2HhwlC$CXt%vjqd zz=INXFcYdQ5Y!yRxxvG}2AGJ-o%4K;-;?<r!7ghj(K#e`zUmOHTyL!Z2;bvBYX!iN zYLA#KWV|wCSoV8&$qnAigq_W?@{i1-J-~GSOJCWA_-tY4>gMU1(UWC)&-2-81wFc- zBqT{#O=8uLXfGHCGbq|mk0@QN@R*4Z#M#NP@&11i(SXT9$_p_f(!({>I1_U0{%0O> zc(hvMSsJi<VW^dR@ul?e^U+6Wj-T3so*;{8^2(rk@snVIA)0YxC7<NX@uF@9#}blG z)!oz|zhc2o{=KnQsnMNO8<vpZca7xOnvp+0V1GV?GTcenuS)#tV3%rRQBl!2Nb?*1 zLFPqB%VL-xx-`-d*~8a)FW{D&pah}(!q=*!S;7&GibvfJJ^n2<7@--dw;y1Ql^MoH zCOjqcMaIFbJmrlbU)2XS+Dygq-gL;xkN-53pz?wL`_Mx5&F6aaabMtsB}UMV{(M2S zLR9DYU*~d~=4gv~It>>Xp{SJhG`?Of-<}ZqZ3Cot0!_N$g4RPi+Sh7vCn@H(Zca6j zL5x4f25-<BVkPmLZa40T4nF+S^Ix6((cIJ%ww4E#`zkkN{T`zcd5Zdbah-St36sE{ zl95Y}+MLGdlIw3%sW9~Q6cU9=P(DU}ol#$GOdDT%2D@l_3ePrPFgLkEpaq88Msgvu zy_l=&lH6_}uEKZgih1w+qkEw17{bl;$=MN>3v>h_+=z~24Mb-sQ|6Xhn$BPxI8-wr z9Yf=2lIF2;G@bOXqXSl3P@3mcd*51~82;yR05#m>3jYM<Y49DL`qvBn1JWvGz_&he z&({<G@AdbNKjk;SJ{|pk<-d!7g#2>Bj{^S#Ye2+ZNzfT}ND$+}+||Gt3gCfj8fa9j H*+={jSM`+S literal 0 HcmV?d00001 diff --git a/docs/source/index.md b/docs/source/index.md new file mode 100644 index 00000000..4cdcae23 --- /dev/null +++ b/docs/source/index.md @@ -0,0 +1,14 @@ +--- +title: Nocturne +--- + +```{toctree} +:maxdepth: 1 +:hidden: +:caption: Quickstart + +self +``` + +```{include} ../../README.md +``` \ No newline at end of file diff --git a/requirements.dev.txt b/requirements.dev.txt new file mode 100644 index 00000000..1ed05872 --- /dev/null +++ b/requirements.dev.txt @@ -0,0 +1,6 @@ +pre-commit==3.2.2 +sphinx==5.3.0 +sphinx_book_theme==1.0.1 +myst_nb==0.17.2 +sphinxcontrib_bibtex==2.5.0 +sphinx-autodoc-typehints==1.23.0 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..f59764e5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,23 @@ +hydra-core==1.1.0 +hydra-submitit-launcher==1.1.5 +ipdb==0.13.9 +seaborn +imageio==2.10.1 +moviepy==1.0.3 +opencv-python==4.5.5.64 +gym==0.26.2 # 0.20.0 install failed +wandb==0.12.15 +imageio==2.10.1 +setproctitle==1.2.3 +tensorboardX==2.5 +pytest==7.1.1 +flake8==4.0.1 +pydocstyle==6.1.1 +pyvirtualdisplay +ray==1.11.0 +dm-tree +tabulate +torch +sample-factory==1.123.0 +numpy==1.19.2 +jupyterlab==3.0.14 \ No newline at end of file From 8c386c0b9103d3bcb6bf5d33ad04e0c75e90bf22 Mon Sep 17 00:00:00 2001 From: Mathijs995 <mathijsdejong1995@gmail.com> Date: Sun, 30 Apr 2023 12:34:08 +0200 Subject: [PATCH 2/4] Extended Sphinx docs with proposed skeleton --- docs/source/01_data_structure.ipynb | 294 ++++++++++ .../01_data_structure.md | 61 +- docs/source/02_nocturne_concepts.ipynb | 529 ++++++++++++++++++ .../02_nocturne_concepts.md | 78 +-- docs/source/api_python.md | 9 + docs/source/changelog.md | 6 + docs/source/coc.md | 6 + docs/source/conf.py | 140 +++++ docs/source/contributing.md | 6 + .../data/example_scenario.json | 0 docs/source/index.md | 27 + docs/source/references.bib | 0 12 files changed, 1089 insertions(+), 67 deletions(-) create mode 100644 docs/source/01_data_structure.ipynb rename docs/{tutorials => source}/01_data_structure.md (85%) create mode 100644 docs/source/02_nocturne_concepts.ipynb rename docs/{tutorials => source}/02_nocturne_concepts.md (93%) create mode 100644 docs/source/api_python.md create mode 100644 docs/source/changelog.md create mode 100644 docs/source/coc.md create mode 100644 docs/source/conf.py create mode 100644 docs/source/contributing.md rename docs/{tutorials => source}/data/example_scenario.json (100%) create mode 100644 docs/source/references.bib diff --git a/docs/source/01_data_structure.ipynb b/docs/source/01_data_structure.ipynb new file mode 100644 index 00000000..ae4e9caa --- /dev/null +++ b/docs/source/01_data_structure.ipynb @@ -0,0 +1,294 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Data format of a traffic scene\n", + "\n", + "This notebook dives into the data format used to create simulations in Nocturne.\n", + "\n", + "_Last update: April 2023_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "\n", + "cmap = ['r', 'g', 'b', 'y', 'c']\n", + "%config InlineBackend.figure_format = 'svg'\n", + "sns.set('notebook', font_scale=1.1, rc={'figure.figsize': (8, 3)})\n", + "sns.set_style('ticks', rc={'figure.facecolor': 'none', 'axes.facecolor': 'none'})" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Traffic scenes are constructed by utilizing the Waymo Open Motion dataset. Though every scene is unique, they all have the same basic data structure. \n", + "\n", + "To load a traffic scene:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Take an example scene\n", + "data_path = 'data/example_scenario.json'\n", + "\n", + "with open(data_path) as file:\n", + " traffic_scene = json.load(file)\n", + "\n", + "traffic_scene.keys()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Global Overview \n", + "A traffic scene consists of:\n", + "- `name`: the name of the traffic scenario.\n", + "- `objects`: the road objects or moving vehicles in the scene.\n", + "- `roads`: the road points in the scene, these are all the stationary objects.\n", + "- `tl_states`: the states of the traffic lights, which are filtered out for now. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "traffic_scene['tl_states']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "traffic_scene['name']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pd.Series(\n", + " [\n", + " traffic_scene['objects'][idx]['type']\n", + " for idx in range(len(traffic_scene['objects']))\n", + " ]\n", + ").value_counts().plot(kind='bar', rot=45, color=cmap)\n", + "plt.title(f'Distribution of road objects in traffic scene. Total # objects: {len(traffic_scene[\"objects\"])}')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This traffic scenario only contains vehicles and pedestrians, some scenes have cyclists as well." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pd.Series(\n", + " [\n", + " traffic_scene['roads'][idx]['type']\n", + " for idx in range(len(traffic_scene['roads']))\n", + " ]\n", + ").value_counts().plot(kind='bar', rot=45, color=cmap)\n", + "plt.title(f'Distribution of road points in traffic scene. Total # points: {len(traffic_scene[\"roads\"])}')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### In-Depth: Road Objects\n", + "\n", + "This is a list of different road objects in the traffic scene. For each road object, we have information about its position, velocity, size, in which direction its heading, whether its a valid object, the type, and the final position of the vehicle." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Take the first object\n", + "idx = 0\n", + "\n", + "# For each object, we have this information:\n", + "traffic_scene['objects'][idx].keys()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Position contains the (x, y) coordinates for the vehicle at every time step\n", + "print(json.dumps(traffic_scene['objects'][idx]['position'][:10], indent=4))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Width and length together make the size of the object, and is used to see if there is a collision\n", + "traffic_scene['objects'][idx]['width'], traffic_scene['objects'][idx]['length']" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Heading is the direction in which the vehicle is pointing. Since the scene is constructed from an ego driver's view, there are timepoints when we don't have access to the heading of some vehicles. States that were not observed are given with `-10_000` to indicate steps that should be filtered out." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Heading is the direction in which the vehicle is pointing\n", + "plt.plot(traffic_scene['objects'][idx]['heading'])\n", + "plt.xlabel('Time step')\n", + "plt.ylabel('Heading')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Velocity shows the velocity in the x- and y- directions\n", + "print(json.dumps(traffic_scene['objects'][idx]['velocity'][:10], indent=4))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Valid indicates if the state of the vehicle was observed for each timepoint\n", + "plt.xlabel('Time step')\n", + "plt.ylabel('IS VALID')\n", + "plt.plot(traffic_scene['objects'][idx]['valid'], '_', lw=5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Each object has a goalPosition, an (x, y) position within the scene\n", + "traffic_scene['objects'][idx]['goalPosition']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Finally, we have the type of the vehicle\n", + "traffic_scene['objects'][idx]['type']" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### In-Depth: Road Points\n", + "\n", + "Road points are static objects in the scene." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "traffic_scene['roads'][idx].keys()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# This point represents the edge of a road\n", + "traffic_scene['roads'][idx]['type']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Geometry contains the (x, y) position(s) for a road point\n", + "# Note that this will be a list for road lanes and edges but a single (x, y) tuple for stop signs and alike\n", + "print(json.dumps(traffic_scene['roads'][idx]['geometry'][:10], indent=4))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "nocturne-research", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/tutorials/01_data_structure.md b/docs/source/01_data_structure.md similarity index 85% rename from docs/tutorials/01_data_structure.md rename to docs/source/01_data_structure.md index 53eea7b4..c45eed6e 100644 --- a/docs/tutorials/01_data_structure.md +++ b/docs/source/01_data_structure.md @@ -1,15 +1,15 @@ --- -jupyter: - jupytext: - text_representation: - extension: .md - format_name: markdown - format_version: '1.3' - jupytext_version: 1.14.0 - kernelspec: - display_name: nocturne-research - language: python - name: python3 +jupytext: + formats: ipynb,md:myst + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.14.5 +kernelspec: + display_name: nocturne-research + language: python + name: python3 --- ## Data format of a traffic scene @@ -18,11 +18,12 @@ This notebook dives into the data format used to create simulations in Nocturne. _Last update: April 2023_ -```python +```{code-cell} ipython3 import json + import matplotlib.pyplot as plt -import seaborn as sns import pandas as pd +import seaborn as sns cmap = ['r', 'g', 'b', 'y', 'c'] %config InlineBackend.figure_format = 'svg' @@ -34,7 +35,7 @@ Traffic scenes are constructed by utilizing the Waymo Open Motion dataset. Thoug To load a traffic scene: -```python +```{code-cell} ipython3 # Take an example scene data_path = 'data/example_scenario.json' @@ -49,17 +50,17 @@ A traffic scene consists of: - `name`: the name of the traffic scenario. - `objects`: the road objects or moving vehicles in the scene. - `roads`: the road points in the scene, these are all the stationary objects. -- `tl_states`: the states of the traffic lights, which are filtered out for now. +- `tl_states`: the states of the traffic lights, which are filtered out for now. -```python +```{code-cell} ipython3 traffic_scene['tl_states'] ``` -```python +```{code-cell} ipython3 traffic_scene['name'] ``` -```python +```{code-cell} ipython3 pd.Series( [ traffic_scene['objects'][idx]['type'] @@ -71,7 +72,7 @@ plt.title(f'Distribution of road objects in traffic scene. Total # objects: {len This traffic scenario only contains vehicles and pedestrians, some scenes have cyclists as well. -```python +```{code-cell} ipython3 pd.Series( [ traffic_scene['roads'][idx]['type'] @@ -85,7 +86,7 @@ plt.title(f'Distribution of road points in traffic scene. Total # points: {len(t This is a list of different road objects in the traffic scene. For each road object, we have information about its position, velocity, size, in which direction its heading, whether its a valid object, the type, and the final position of the vehicle. -```python +```{code-cell} ipython3 # Take the first object idx = 0 @@ -93,43 +94,43 @@ idx = 0 traffic_scene['objects'][idx].keys() ``` -```python +```{code-cell} ipython3 # Position contains the (x, y) coordinates for the vehicle at every time step print(json.dumps(traffic_scene['objects'][idx]['position'][:10], indent=4)) ``` -```python +```{code-cell} ipython3 # Width and length together make the size of the object, and is used to see if there is a collision traffic_scene['objects'][idx]['width'], traffic_scene['objects'][idx]['length'] ``` Heading is the direction in which the vehicle is pointing. Since the scene is constructed from an ego driver's view, there are timepoints when we don't have access to the heading of some vehicles. States that were not observed are given with `-10_000` to indicate steps that should be filtered out. -```python +```{code-cell} ipython3 # Heading is the direction in which the vehicle is pointing plt.plot(traffic_scene['objects'][idx]['heading']); plt.xlabel('Time step') plt.ylabel('Heading'); ``` -```python +```{code-cell} ipython3 # Velocity shows the velocity in the x- and y- directions print(json.dumps(traffic_scene['objects'][idx]['velocity'][:10], indent=4)) ``` -```python +```{code-cell} ipython3 # Valid indicates if the state of the vehicle was observed for each timepoint plt.xlabel('Time step') plt.ylabel('IS VALID'); plt.plot(traffic_scene['objects'][idx]['valid'], '_', lw=5); ``` -```python +```{code-cell} ipython3 # Each object has a goalPosition, an (x, y) position within the scene traffic_scene['objects'][idx]['goalPosition'] ``` -```python +```{code-cell} ipython3 # Finally, we have the type of the vehicle traffic_scene['objects'][idx]['type'] ``` @@ -138,16 +139,16 @@ traffic_scene['objects'][idx]['type'] Road points are static objects in the scene. -```python +```{code-cell} ipython3 traffic_scene['roads'][idx].keys() ``` -```python +```{code-cell} ipython3 # This point represents the edge of a road traffic_scene['roads'][idx]['type'] ``` -```python +```{code-cell} ipython3 # Geometry contains the (x, y) position(s) for a road point # Note that this will be a list for road lanes and edges but a single (x, y) tuple for stop signs and alike print(json.dumps(traffic_scene['roads'][idx]['geometry'][:10], indent=4)); diff --git a/docs/source/02_nocturne_concepts.ipynb b/docs/source/02_nocturne_concepts.ipynb new file mode 100644 index 00000000..151b0f9e --- /dev/null +++ b/docs/source/02_nocturne_concepts.ipynb @@ -0,0 +1,529 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Nocturne concepts\n", + "\n", + "This page introduces the most basic elements of nocturne. You can find further information about these [in Section 3 of the paper](https://arxiv.org/abs/2206.09889).\n", + "\n", + "_Last update: April 2023_" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "from nocturne import Simulation\n", + "\n", + "data_path = 'data/example_scenario.json'" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Summary\n", + "\n", + "- Nocturne simulations are discretized traffic scenarios. A scenario is a constructed snapshot of traffic situation at a particular timepoint.\n", + "- The state of the vehicle of focus is referred to as the ego state. Each vehicles observes the traffic scene from their own viewpoint and a visible state is constructed by parameterizing the view distance, head angle and cone radius of the driver. The action for each vehicle is a `(1, 3)` tuple with the acceleration, steering and head angle of the vehicle.\n", + "- The step method advances the simulation with a desired step size. By default, the dynamics of vehicles are driven by a kinematic bicycle model. If a vehicle is set to expert-controlled mode, its position, heading, and speed will be updated according to a trajectory created by a human expert." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Simulation\n", + "\n", + "In Nocturne, a simulation discretizes an existing traffic scenario. At the moment, Nocturne supports traffic scenarios from the Waymo Open Dataset, but can be further extended to work with other driving datasets.\n", + "\n", + "<figure>\n", + "<center>\n", + "<img src='https://drive.google.com/uc?id=1nv5Rbyf7ZfdqTdaUduXvEI7ncdkLpDjc' width=650'/>\n", + "<figcaption></figcaption>An example of a set of traffic scenario's in Nocturne. Upon initialization, a start time is chosen. After each iteration we take a step in the simulation, which gets us to the next scenario. This is done until we reach the end of the simulation. </center>\n", + "</figure>\n", + "\n", + "We show an example of this using `example_scenario.json`, where our traffic data is extracted from the Waymo open motion dataset:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scenario_config = {\n", + " 'start_time': 0, # When to start the simulation\n", + " 'allow_non_vehicles': True, # Whether to include cyclists and pedestrians\n", + " 'max_visible_road_points': 10, # Maximum number of road points for a vehicle\n", + " 'max_visible_objects': 10, # Maximum number of road objects for a vehicle\n", + " 'max_visible_traffic_lights': 10, # Maximum number of traffic lights in constructed view\n", + " 'max_visible_stop_signs': 10, # Maximum number of stop signs in constructed view\n", + "}\n", + "\n", + "# Create simulation\n", + "sim = Simulation(data_path, scenario_config)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scenario\n", + "\n", + "A simulation consists of a set of scenarios. A scenario is a snapshot of the traffic scene at a particular timepoint.\n", + "\n", + "Here is how to create a scenario object:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Get traffic scenario at timepoint\n", + "scenario = sim.getScenario()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `scenario` objects holds information we are interested in. Here are a couple of examples:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The number of road objects in the scene\n", + "len(scenario.getObjects())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The road objects that moved at a particular timepoint\n", + "objects_that_moved = scenario.getObjectsThatMoved()\n", + "\n", + "print(f'Total # moving objects: {len(objects_that_moved)}\\n')\n", + "print(f'Object IDs of moving vehicles: \\n {[obj.getID() for obj in objects_that_moved]} ')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Number of road lines\n", + "len(scenario.road_lines())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scenario.getVehicles()[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# No cyclists in this scene\n", + "scenario.getCyclists()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Select all moving vehicles that move\n", + "moving_vehicles = [obj for obj in scenario.getVehicles() if obj in objects_that_moved]\n", + "\n", + "print(f'Found {len(moving_vehicles)} moving vehicles in scene: {[vehicle.getID() for vehicle in moving_vehicles]}')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Ego state\n", + "\n", + "The **ego state** is an array with features that describe the current vehicle. This array holds the following information:\n", + "- 0: length of ego vehicle\n", + "- 1: width of ego vehicle\n", + "- 2: speed of ego vehicle\n", + "- 3: distance to the goal position of ego vehicle\n", + "- 4: angle to the goal (target azimuth)\n", + "- 5: desired heading at goal position\n", + "- 6: desired speed at goal position\n", + "- 7: current acceleration\n", + "- 8: current steering position\n", + "- 9: current head angle" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Select an arbitrary vehicle\n", + "ego_vehicle = moving_vehicles[0]\n", + "\n", + "print(f'Selected vehicle # {ego_vehicle.getID()}')\n", + "\n", + "# Get the state for ego vehicle\n", + "scenario.ego_state(ego_vehicle)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Visible state\n", + "\n", + "We use the ego vehicle state, together with a view distance (how far the vehicle can see) and a view angle to construct the **visible state**. The figure below shows this procedure for a simplified traffic scene.\n", + "\n", + "Calling `scenario.visible_state()` returns a dictionary with four matrices:\n", + "- `stop_signs`: The visible stop signs\n", + "- `traffic_lights`: The states for the traffic lights from the perspective of the ego driver(red, yellow, green).\n", + "- `road_points`: The observable road points (static elements in the scene).\n", + "- `objects`: The observable road objects (vehicles, pedestrians and cyclists).\n", + "\n", + "<figure>\n", + "<center>\n", + "<img src='https://drive.google.com/uc?id=1fG43NvPCzaimmW99asRdB73qY-F4u-q0' width='700'/>\n", + "<figcaption>To investigate coordination under partial observability, agents in Nocturne can only see an obstructed view of their environment. In this simplified traffic scene, we construct the state for the red ego driver. Note that Nocturne assumes that stop signs can be viewed, even if they are behind another driver. </figcaption></center>\n", + "</figure>\n", + "\n", + "\\begin{align*}\n", + "\\end{align*}\n", + "\n", + "<figure>\n", + "<center>\n", + "<img src='https://drive.google.com/uc?id=1egNkFArE-n4cp6KbeoQyWeePiQ28jYYE' width='300'/>\n", + "<figcaption>The same scene, this time showing the view of the yellow car.</figcaption></center>\n", + "</figure>" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The shape of the visible state is a function of the maximum number of visible objects defined at initialization (traffic lights, stop signs, road objects, and road points) and whether we add padding. If `padding = True`, an array is of size `(max visible objects, # features)` is always constructed, even if there are no visible objects. Otherwise, if `padding = False` new entries are only created when objects are visible." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Define viewing distance, radius and head angle\n", + "view_distance = 80\n", + "view_angle = np.radians(120)\n", + "head_angle = 0\n", + "padding = True\n", + "\n", + "# Construct the visible state for ego vehicle\n", + "visible_state = scenario.visible_state(\n", + " ego_vehicle,\n", + " view_dist=view_distance,\n", + " view_angle=view_angle,\n", + " head_angle=head_angle,\n", + " padding=padding,\n", + ")\n", + "\n", + "visible_state.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# There are no visible stop signs at this point\n", + "visible_state['stop_signs'].T" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Traffic light states are filtered out in this version of Nocturne\n", + "visible_state['traffic_lights']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Max visible road points x 13 features\n", + "visible_state['road_points'].shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Number of visible road objects x 13 features\n", + "visible_state['objects'].shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "visible_state_dim = sum([val.flatten().shape[0] for key, val in visible_state.items()])\n", + "\n", + "print(f'Dimension flattened visible state: {visible_state_dim}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# We can also flatten the visible state\n", + "# flattened has padding: if we miss an object --> zeros\n", + "visible_state_flat = scenario.flattened_visible_state(\n", + " ego_vehicle,\n", + " view_dist=view_distance,\n", + " view_angle=view_angle,\n", + " head_angle=head_angle,\n", + ")\n", + "\n", + "visible_state_flat.shape" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that `.flattened_visible_state()` has padding by default." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Step\n", + "\n", + "`step(dt)` is a method call on an instance of the Simulation class, where `dt` is a scalar that represents the length of each simulation timestep in seconds. It advances the simulation by one timestep, which can result in changes to the state of the simulation (for example, new positions of objects, updated velocities, etc.) based on the physical laws and rules defined in the simulation.\n", + "\n", + "In the Waymo dataset, the length of the expert data is 9 seconds, a step size of 0.1 is used to discretize each traffic scene. The first second is used as a warm-start, leaving the remaining 8 seconds (80 steps) for the simulation (Details in Section 3.3)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dt = 0.1\n", + "\n", + "# Step the simulation\n", + "sim.step(dt)" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Vehicle control\n", + "\n", + "By default, vehicles in Nocturne are driven by a **kinematic bicycle model**. This means that calling the `step(dt)` method evolves the dynamics of a vehicle according to the following set of equations (Appendix D in the paper):\n", + "\n", + "\\begin{align*}\n", + " \\textbf{position: } x_{t+1} &= x_t + \\dot{x} \\, \\Delta t \\\\\n", + " y_{t+1} &= y_t + \\dot{y} \\, \\Delta t \\\\\n", + " \\textbf{heading: } \\theta_{t+1} &= \\theta_t + \\dot{\\theta} \\, \\Delta t \\\\\n", + " \\textbf{speed: } v_{t+1} &= \\text{clip}(v_t + \\dot{v} \\, \\Delta t, -v_{\\text{max}}, v_{\\text{max}}) \\\\\n", + "\\end{align*}\n", + "\n", + "with\n", + "\n", + "\\begin{align*}\n", + " \\dot{v} &= a \\\\\n", + " \\bar{v} &= \\text{clip}(v_t, + 0.5 \\, \\dot{v} \\, \\Delta \\, t ,\\, - v_{\\text{max}}, v_{\\text{max}}) \\\\\n", + " \\beta &= \\tan^{-1} \\left( \\frac{l_r \\tan (\\delta)}{L} \\right) \\\\\n", + " &= \\tan^{-1} (0.5 \\tan(\\delta)) \\\\\n", + " \\dot{x} &= \\bar{v} \\cos (\\theta + \\beta) \\\\\n", + " \\dot{y} &= \\bar{v} \\sin (\\theta + \\beta) \\\\\n", + " \\dot{\\theta} &= \\frac{\\bar{v} \\cos (\\beta)\\tan(\\delta)}{L}\n", + "\\end{align*}\n", + "\n", + "where $(x_t, y_t)$ is the position of a vehicle at time $t$, $\\theta_t$ is the vehicles heading angle, $a$ is the acceleration and $\\delta$ is the steering angle. Finally, $L$ is the length of the car and $l_r = 0.5L$ is the distance to the rear axle of the car.\n", + "\n", + "If we set a vehicle to be **expert-controlled** instead, it will follow the same path as the respective human driver. This means that when we call the `step(dt)` function, the vehicle's position, heading, and speed will be updated to match the next point in the recorded human trajectory." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# By default, all vehicles are not expert controlled\n", + "ego_vehicle.expert_control" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Set a vehicle to be expert controlled:\n", + "ego_vehicle.expert_control = True" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "> **Pseudocode**: How `step(dt)` advances the simulation for every vehicle. Full code is implemented in [scenario.cc](https://github.com/facebookresearch/nocturne/blob/ae0a4e361457caf6b7e397675cc86f46161405ed/nocturne/cpp/src/scenario.cc#L264)\n", + "\n", + "---\n", + "\n", + "```Python\n", + "for vehicle in vehicles:\n", + "\n", + " if object is not expert controlled:\n", + " step vehicle dynamics following the kinematic bicycle model\n", + "\n", + " if vehicle is expert controlled:\n", + " get current time & vehicle idx\n", + " vehicle position = expert trajectories[vehicle_idx, time]\n", + " vehicle heading = expert headings[vehicle_idx, time]\n", + " vehicle speed = expert speeds[vehicle_idx, time]\n", + "```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Action space\n", + "\n", + "The action set for a vehicle consists of three components: acceleration, steering and the head angle. Actions are discretized based on a provided upper and lower bound.\n", + "\n", + "The experiments in the paper use:\n", + "- 6 discrete actions for **acceleration** uniformly split between $[-3, 2] \\, \\frac{m}{s^2}$\n", + "- 21 discrete actions for **steering** between $[-0.7, 0.7]$ radians\n", + "- 5 discrete actions for **head tilt** between $[-1.6, 1.6]$ radians\n", + "\n", + "This is how you can access an expert action for a vehicle in Nocturne:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Choose an arbitrary timepoint\n", + "time = 5\n", + "\n", + "# Show expert action at timepoint\n", + "scenario.expert_action(ego_vehicle, time)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(scenario.expert_action(ego_vehicle, time))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How did the vehicle's position change after taking this action?\n", + "scenario.expert_pos_shift(ego_vehicle, time)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# How did the head angle change?\n", + "scenario.expert_heading_shift(ego_vehicle, time)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "nocturne-research", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.16" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/tutorials/02_nocturne_concepts.md b/docs/source/02_nocturne_concepts.md similarity index 93% rename from docs/tutorials/02_nocturne_concepts.md rename to docs/source/02_nocturne_concepts.md index b76382cf..3477d6cc 100644 --- a/docs/tutorials/02_nocturne_concepts.md +++ b/docs/source/02_nocturne_concepts.md @@ -1,15 +1,15 @@ --- -jupyter: - jupytext: - text_representation: - extension: .md - format_name: markdown - format_version: '1.3' - jupytext_version: 1.14.0 - kernelspec: - display_name: nocturne-research - language: python - name: python3 +jupytext: + formats: ipynb,md:myst + text_representation: + extension: .md + format_name: myst + format_version: 0.13 + jupytext_version: 1.14.5 +kernelspec: + display_name: nocturne-research + language: python + name: python3 --- ## Nocturne concepts @@ -18,9 +18,11 @@ This page introduces the most basic elements of nocturne. You can find further i _Last update: April 2023_ -```python +```{code-cell} ipython3 import numpy as np +from nocturne import Simulation + data_path = 'data/example_scenario.json' ``` @@ -30,6 +32,7 @@ data_path = 'data/example_scenario.json' - The state of the vehicle of focus is referred to as the ego state. Each vehicles observes the traffic scene from their own viewpoint and a visible state is constructed by parameterizing the view distance, head angle and cone radius of the driver. The action for each vehicle is a `(1, 3)` tuple with the acceleration, steering and head angle of the vehicle. - The step method advances the simulation with a desired step size. By default, the dynamics of vehicles are driven by a kinematic bicycle model. If a vehicle is set to expert-controlled mode, its position, heading, and speed will be updated according to a trajectory created by a human expert. ++++ ### Simulation @@ -43,9 +46,7 @@ In Nocturne, a simulation discretizes an existing traffic scenario. At the momen We show an example of this using `example_scenario.json`, where our traffic data is extracted from the Waymo open motion dataset: -```python -from nocturne import Simulation - +```{code-cell} ipython3 scenario_config = { 'start_time': 0, # When to start the simulation 'allow_non_vehicles': True, # Whether to include cyclists and pedestrians @@ -65,19 +66,19 @@ A simulation consists of a set of scenarios. A scenario is a snapshot of the tra Here is how to create a scenario object: -```python +```{code-cell} ipython3 # Get traffic scenario at timepoint scenario = sim.getScenario() ``` The `scenario` objects holds information we are interested in. Here are a couple of examples: -```python +```{code-cell} ipython3 # The number of road objects in the scene len(scenario.getObjects()) ``` -```python +```{code-cell} ipython3 # The road objects that moved at a particular timepoint objects_that_moved = scenario.getObjectsThatMoved() @@ -85,21 +86,21 @@ print(f'Total # moving objects: {len(objects_that_moved)}\n') print(f'Object IDs of moving vehicles: \n {[obj.getID() for obj in objects_that_moved]} ') ``` -```python +```{code-cell} ipython3 # Number of road lines len(scenario.road_lines()) ``` -```python +```{code-cell} ipython3 scenario.getVehicles()[:5] ``` -```python +```{code-cell} ipython3 # No cyclists in this scene scenario.getCyclists() ``` -```python +```{code-cell} ipython3 # Select all moving vehicles that move moving_vehicles = [obj for obj in scenario.getVehicles() if obj in objects_that_moved] @@ -120,7 +121,7 @@ The **ego state** is an array with features that describe the current vehicle. T - 8: current steering position - 9: current head angle -```python +```{code-cell} ipython3 # Select an arbitrary vehicle ego_vehicle = moving_vehicles[0] @@ -155,10 +156,11 @@ Calling `scenario.visible_state()` returns a dictionary with four matrices: <figcaption>The same scene, this time showing the view of the yellow car.</figcaption></center> </figure> ++++ The shape of the visible state is a function of the maximum number of visible objects defined at initialization (traffic lights, stop signs, road objects, and road points) and whether we add padding. If `padding = True`, an array is of size `(max visible objects, # features)` is always constructed, even if there are no visible objects. Otherwise, if `padding = False` new entries are only created when objects are visible. -```python +```{code-cell} ipython3 # Define viewing distance, radius and head angle view_distance = 80 view_angle = np.radians(120) @@ -177,33 +179,33 @@ visible_state = scenario.visible_state( visible_state.keys() ``` -```python +```{code-cell} ipython3 # There are no visible stop signs at this point visible_state['stop_signs'].T ``` -```python +```{code-cell} ipython3 # Traffic light states are filtered out in this version of Nocturne visible_state['traffic_lights'] ``` -```python +```{code-cell} ipython3 # Max visible road points x 13 features visible_state['road_points'].shape ``` -```python +```{code-cell} ipython3 # Number of visible road objects x 13 features visible_state['objects'].shape ``` -```python +```{code-cell} ipython3 visible_state_dim = sum([val.flatten().shape[0] for key, val in visible_state.items()]) print(f'Dimension flattened visible state: {visible_state_dim}') ``` -```python +```{code-cell} ipython3 # We can also flatten the visible state # flattened has padding: if we miss an object --> zeros visible_state_flat = scenario.flattened_visible_state( @@ -218,6 +220,7 @@ visible_state_flat.shape Note that `.flattened_visible_state()` has padding by default. ++++ ### Step @@ -225,7 +228,7 @@ Note that `.flattened_visible_state()` has padding by default. In the Waymo dataset, the length of the expert data is 9 seconds, a step size of 0.1 is used to discretize each traffic scene. The first second is used as a warm-start, leaving the remaining 8 seconds (80 steps) for the simulation (Details in Section 3.3). -```python +```{code-cell} ipython3 dt = 0.1 # Step the simulation @@ -259,12 +262,12 @@ where $(x_t, y_t)$ is the position of a vehicle at time $t$, $\theta_t$ is the v If we set a vehicle to be **expert-controlled** instead, it will follow the same path as the respective human driver. This means that when we call the `step(dt)` function, the vehicle's position, heading, and speed will be updated to match the next point in the recorded human trajectory. -```python +```{code-cell} ipython3 # By default, all vehicles are not expert controlled ego_vehicle.expert_control ``` -```python +```{code-cell} ipython3 # Set a vehicle to be expert controlled: ego_vehicle.expert_control = True ``` @@ -288,6 +291,7 @@ for vehicle in vehicles: vehicle speed = expert speeds[vehicle_idx, time] ``` ++++ ### Action space @@ -300,7 +304,7 @@ The experiments in the paper use: This is how you can access an expert action for a vehicle in Nocturne: -```python +```{code-cell} ipython3 # Choose an arbitrary timepoint time = 5 @@ -308,16 +312,16 @@ time = 5 scenario.expert_action(ego_vehicle, time) ``` -```python +```{code-cell} ipython3 type(scenario.expert_action(ego_vehicle, time)) ``` -```python +```{code-cell} ipython3 # How did the vehicle's position change after taking this action? scenario.expert_pos_shift(ego_vehicle, time) ``` -```python +```{code-cell} ipython3 # How did the head angle change? scenario.expert_heading_shift(ego_vehicle, time) ``` diff --git a/docs/source/api_python.md b/docs/source/api_python.md new file mode 100644 index 00000000..0d2087ee --- /dev/null +++ b/docs/source/api_python.md @@ -0,0 +1,9 @@ +--- +title: Nocturne | API Reference +--- +# API Reference + +```{eval-rst} +.. autosummary:: nocturne + :toctree: generated +``` \ No newline at end of file diff --git a/docs/source/changelog.md b/docs/source/changelog.md new file mode 100644 index 00000000..1097c1a6 --- /dev/null +++ b/docs/source/changelog.md @@ -0,0 +1,6 @@ +--- +title: Changelog +--- + +```{include} ../../CHANGELOG.md +``` \ No newline at end of file diff --git a/docs/source/coc.md b/docs/source/coc.md new file mode 100644 index 00000000..8ec8c907 --- /dev/null +++ b/docs/source/coc.md @@ -0,0 +1,6 @@ +--- +title: Code of Conduct +--- + +```{include} ../../CODE_OF_CONDUCT.md +``` \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 00000000..8773bd9c --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,140 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +import pathlib +import sys +sys.path.insert(0, pathlib.Path(__file__).parents[2].resolve().as_posix()) + + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = 'Nocturne' +copyright = '2023, The Nocturne Authors' +author = 'The Nocturne Authors' + +# The short X.Y version +version = '' +# The full version, including alpha/beta/rc tags +release = '' + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.autosectionlabel', + 'sphinx.ext.autosummary', + 'sphinx.ext.duration', + 'sphinx.ext.githubpages', + 'sphinx.ext.intersphinx', + 'sphinx.ext.napoleon', + "myst_nb", # See: https://myst-nb.readthedocs.io/en/latest/ + 'sphinxcontrib.bibtex', # See: https://sphinxcontrib-bibtex.readthedocs.io/en/latest/quickstart.html + 'sphinx_autodoc_typehints', # See: https://github.com/tox-dev/sphinx-autodoc-typehints +] + +templates_path = ['_templates'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +intersphinx_mapping = { + "python": ("https://docs.python.org/3.8", None), + 'numpy': ('https://numpy.org/doc/stable/', None), + 'scipy': ('https://docs.scipy.org/doc/scipy-1.8.1/', None), +} + +bibtex_bibfiles = ["references.bib"] + +autosummary_generate = True + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme = 'sphinx_book_theme' +html_theme_options = { + "path_to_docs": "docs", + "use_download_button": True, + "use_edit_page_button": True, + "use_fullscreen_button": True, + "use_issues_button": True, + "use_source_button": True, + "use_repository_button": True, + "use_sidenotes": True, + "repository_url": "https://github.com/facebookresearch/nocturne", + "repository_branch": "main", + "launch_buttons": { + "colab_url": "https://colab.research.google.com" + }, + "home_page_in_toc": True, + "show_navbar_depth": 1, + "show_toc_level": 2, + "icon_links": [ + # { + # "name": "Nocturne GitHub", + # "url": "https://github.com/facebookresearch/nocturne", + # "icon": "fa-brands fa-github", + # }, + ] +} +html_static_path = ['_static'] +html_logo = "_static/logo.png" +# html_favicon = "_static/logo-square.svg" +html_title = "Nocturne" +html_copy_source = True + +html_sidebars = { + "**/**": ["sbt-sidebar-nav.html"] +} + +# -- Options for MySt-NB output ------------------------------------------------- +# https://myst-nb.readthedocs.io/en/latest/index.html +source_suffix = { + '.rst': 'restructuredtext', + '.ipynb': 'myst-nb', + '.myst': 'myst-nb', +} +myst_heading_anchors = 3 # auto-generate 3 levels of heading anchors +myst_enable_extensions = [ + "amsmath", + "colon_fence", + "deflist", + "dollarmath", + "html_image", +] +myst_url_schemes = ("http", "https", "mailto") +nb_execution_mode = "force" +nb_execution_allow_errors = False +nb_merge_streams = True + +nb_execution_excludepatterns = [ + # Slow notebook + # 'notebooks/Neural_Network_and_Data_Loading.*', +] + +# -- Options for autodoc ---------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html#configuration + +# Automatically extract typehints when specified and place them in +# descriptions of the relevant function/method. +autodoc_typehints = "description" + +# Don't show class signature with the class' name. +autodoc_class_signature = "separated" + +# -- Extension configuration ------------------------------------------------- + +# Tell sphinx-autodoc-typehints to generate stub parameter annotations including +# types, even if the parameters aren't explicitly documented. +always_document_param_types = True + + +# Tell sphinx autodoc how to render type aliases. +autodoc_type_aliases = { + 'ArrayLike': 'ArrayLike', + 'DTypeLike': 'DTypeLike', +} \ No newline at end of file diff --git a/docs/source/contributing.md b/docs/source/contributing.md new file mode 100644 index 00000000..da286b8e --- /dev/null +++ b/docs/source/contributing.md @@ -0,0 +1,6 @@ +--- +title: Contributing +--- + +```{include} ../../CONTRIBUTING.md +``` \ No newline at end of file diff --git a/docs/tutorials/data/example_scenario.json b/docs/source/data/example_scenario.json similarity index 100% rename from docs/tutorials/data/example_scenario.json rename to docs/source/data/example_scenario.json diff --git a/docs/source/index.md b/docs/source/index.md index 4cdcae23..a0fb8a2b 100644 --- a/docs/source/index.md +++ b/docs/source/index.md @@ -10,5 +10,32 @@ title: Nocturne self ``` +```{toctree} +:maxdepth: 1 +:hidden: +:caption: Tutorial + +01_data_structure +02_nocturne_concepts +``` + +```{toctree} +:maxdepth: 1 +:hidden: +:caption: Reference + +api_python +``` + +```{toctree} +:maxdepth: 1 +:hidden: +:caption: Developer + +contributing +changelog +coc +``` + ```{include} ../../README.md ``` \ No newline at end of file diff --git a/docs/source/references.bib b/docs/source/references.bib new file mode 100644 index 00000000..e69de29b From d318bf96a445dd0a99b8f95e8b2baa9107c15f5f Mon Sep 17 00:00:00 2001 From: Mathijs995 <mathijsdejong1995@gmail.com> Date: Sun, 30 Apr 2023 12:34:49 +0200 Subject: [PATCH 3/4] Added jupytext and pre-commit notebook code quality checks --- .pre-commit-config.yaml | 20 ++++++++++++++++++++ requirements.dev.txt | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..2e8dde80 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,20 @@ +repos: + - repo: https://github.com/mwouts/jupytext + rev: v1.14.0 + hooks: + - id: jupytext + args: [--from, ipynb, --to, md:myst, --sync] + + - repo: https://github.com/nbQA-dev/nbQA + rev: 1.7.0 + hooks: + - id: nbqa-pyupgrade + args: ["--py38-plus"] + - id: nbqa-isort + args: ["--float-to-top"] + - id: nbqa-flake8 + + - repo: https://github.com/kynan/nbstripout + rev: 0.6.1 + hooks: + - id: nbstripout \ No newline at end of file diff --git a/requirements.dev.txt b/requirements.dev.txt index 1ed05872..dfb3081c 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -3,4 +3,5 @@ sphinx==5.3.0 sphinx_book_theme==1.0.1 myst_nb==0.17.2 sphinxcontrib_bibtex==2.5.0 -sphinx-autodoc-typehints==1.23.0 \ No newline at end of file +sphinx-autodoc-typehints==1.23.0 +jupytext==1.14.5 \ No newline at end of file From 33c47cd0cb715a7cee2b8cb3015da6e951c0cb0b Mon Sep 17 00:00:00 2001 From: Mathijs995 <mathijsdejong1995@gmail.com> Date: Sun, 30 Apr 2023 12:35:56 +0200 Subject: [PATCH 4/4] Added Github Pages workflow for Sphinx docs --- .github/workflows/build_docs.yml | 53 ++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .github/workflows/build_docs.yml diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml new file mode 100644 index 00000000..d835d5bf --- /dev/null +++ b/.github/workflows/build_docs.yml @@ -0,0 +1,53 @@ +# Workflow for building Sphinx docs and deploying to GH Pages +name: Build Sphinx docs and deploy to GH Pages + +on: + # Runs on pushes + push # TODO: Update to push on main branch only before merging to main + + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, cancelling in-progress runs. +concurrency: + group: "pages" + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - run: echo "The job was automatically triggered by a ${{ github.event_name }} event." + - run: echo "This job is now running on a ${{ runner.os }} server." + - run: echo "Running on branch ${{ github.ref }} of repository ${{ github.repository }}." + - name: Check out repository code. + uses: actions/checkout@v3 + - name: Python environment setup + uses: actions/setup-python@v4 + with: + python-version: 3.8 + - name: Install dependencies. + run: | + sudo apt-get update + sudo apt-get install libsfml-dev + git submodule sync + git submodule update --init --recursive + python -m pip install -U pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + if [ -f requirements.dev.txt ]; then pip install -r requirements.dev.txt; fi + pip install -e . + - name: Build HTML docs + run: sphinx-build -b html docs/source/ docs/build/html + - name: Setup Pages + uses: actions/configure-pages@v3 + - name: Upload artifact + uses: actions/upload-pages-artifact@v1 + with: + path: './docs/build/html' # Upload HTML docs only + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 \ No newline at end of file