From b10f3abd0ee3f446ec3ea12d1545018a047ac743 Mon Sep 17 00:00:00 2001 From: Peter Steenbergen Date: Thu, 31 Aug 2023 10:53:35 +0200 Subject: [PATCH] Start getting the documentation into shape. --- documentation/README.md | 9 ++ documentation/architecture.md | 54 +++++++ documentation/boards.md | 54 ++++--- documentation/images/Double_copy_layout.png | Bin 0 -> 34899 bytes documentation/images/grub2_menu.png | Bin 0 -> 3089 bytes documentation/kernel.md | 8 +- documentation/python-packages.md | 127 ----------------- documentation/roadmap.md | 150 -------------------- 8 files changed, 102 insertions(+), 300 deletions(-) create mode 100644 documentation/README.md create mode 100644 documentation/architecture.md create mode 100644 documentation/images/Double_copy_layout.png create mode 100644 documentation/images/grub2_menu.png delete mode 100644 documentation/python-packages.md delete mode 100644 documentation/roadmap.md diff --git a/documentation/README.md b/documentation/README.md new file mode 100644 index 00000000..e141ca10 --- /dev/null +++ b/documentation/README.md @@ -0,0 +1,9 @@ +# Documentation + +## Contents + +- [Supported Hardware](./boards.md) - Supported hardware/ board specific information. +- [Kernel](./kernel.md) - Kernel versions used. +- [System Architecture](./architecture.md) - How the system is build up. +- [Features](./features.md) - What is included within the system. +- [Building](./building.md) - How to build an image yourself. \ No newline at end of file diff --git a/documentation/architecture.md b/documentation/architecture.md new file mode 100644 index 00000000..d04e3443 --- /dev/null +++ b/documentation/architecture.md @@ -0,0 +1,54 @@ +# Technical system architecture + +## Disk image build up + +The system uses a so called "Double copy with fall-back" architecture. Also known as "A/B (seamless) system updates". This system guarantess that there is always a working copy even if the softwre update is interrupted or a power off occurs. +Each of these A/B copies contains a linux kernel within it's root file system, which is read only and compressed by utilizing squashfs. At current time the rootfs disk usage is ~300MB. + +![Double_copy_layout](./images/Double_copy_layout.png) + +A synergy with the boot loader is necessary, because the boot loader must decide which copy should be started. It must be possible to switch between the two copies. After a reboot, the boot loader decides which copy should run. +A seperate overlay partition for all changeable files is used to make the userspace system read/write. This seperate partition can be overlayed over either active rootfs partitions, being it slot A or slot B. A factory reset can therefor also being easliy obtained by resetting that overlay partition. It will then again start with the files shipped within the read only squashfs partition. +All docker containers and OVOS framework associated configuration files are stored with the users HOME directory which again is a seperate partition at the end of the disk which is also auto extended over the full size of the disk at boot. This is done based on the availability of free unused disk space at boot. (Any boot, being it the first or any consecutive boot) + +## Boot system + +The system uses UEFI boot stubs to launch the GRUB2 boot loader. The GRUB2 bootloader takes care of booting the active system partition or can be used to boot into rescue mode for both these system partitions. + +## Partition layout + +The partition table is written using GPT where possible. Boards/ systems that do not (yet) support GPT, a hybrid system is used. MBR to be able to boot from the ESP bootable partion and from there on GPT takes over again. +The disk image partitions/ partition table is build up as followed; + +- ESP (EFI System Partition); VFAT formatted, 16 MB in size and containes the UEFI stub and GRUB2 boot loader. +- ROOTFS-1; Compressed SquashFS filesystem partion, 512 MB in size and containes the linux root system Slot-A including the kernel within the /boot folder. +- ROOTFS-1; Compressed SquashFS filesystem partion, 512 MB in size and containes the linux root system Slot-B including the kernel within the /boot folder. +- OVERLAYFS; Ext4 formatted, 256 MB in size used to persistant store files. Mostly /etc, /root and /var/log directories. +- HOMEFS; Ext4 formatted, 64 MB in size out of the box, however being extended over the unused disk space. A minimum of 8 GB as disk size is recommended. + +A visual representation looks like this: + +```text +------------------------- +| ESP | +------------------------- +| ROOTFS-1 | +| | +------------------------- +| ROOTFS-2 | +| | +------------------------- +| OVERLAY-FS | +------------------------- +| HOMEFS | +| | +| | +... +------------------------- +``` + +## ESP Boot system + +The system uses UEFI boot stubs to launch the GRUB2 boot loader. The GRUB2 boot loader takes care of booting the active system partition or can be used to either switch/ roll back to the other system partition or boot into rescue mode for both these system partitions. + +![GRUB2 boot menu](./images/grub2_menu.png) diff --git a/documentation/boards.md b/documentation/boards.md index 313d84a9..5a5e6d06 100644 --- a/documentation/boards.md +++ b/documentation/boards.md @@ -4,54 +4,64 @@ ### Raspberry Pi +| Device | Status | Board | Supported | +|--------|-----------|-----------|-----------| +| Raspberry Pi 3 B/B+ | Works | rpi3_64 | Work In Progress | +| Raspberry Pi 4 | Works | rpi4_64 | YES | +| Open Virtual Appliance (QEMU, VirtualBox, VMWare, Proxmox, etc)| Works | ova_64 | YES | +| Generic x86-64 (Intel NUC's) | Works | x86_64 | Work In Progress | + +

+## Unsupported for now, but (perhaps) possible in the future + +### Raspberry Pi + | Device | Status | Board | Supported | |--------|-----------|-----------|-----------| | Raspberry Pi A+/B/B+ | Unknown, most likely under powered | N/A | NO | | Raspberry Pi Zero | Unknown, most likely under powered | N/A | NO | | Raspberry Pi Zero W | Unknown, most likely under powered | N/A | NO | | Raspberry Pi 2 B | Unknown, could possibly work | N/A | YES | -| Raspberry Pi 3 B/B+ | Works | rpi3 | YES | -| Raspberry Pi 4 | Works | rpi4 | YES | - -

-## Unsupported for now, but perhaps possible in the future ### Hardkernel | Device | Status | Board | |--------|-----------|-----------| -| Odroid-C2 | most likely possible | Not available yet | +| Odroid-C2 | Possible | Not available yet | +| Odroid-C4 | Possible | Not available yet | +| Odroid-M1 | Possible | Not available yet | +| Odroid-N2 | Possible | Not available yet | +| Odroid-XU4 | Possible | Not available yet | + +### Microsoft Windows + +| Device | Status | Board | +|--------|-----------|-----------| +| WSL2 | Possible | Not available yet | + +### Khadas + +| Device | Status | Board | +|--------|-----------|-----------| +| VIM3 | Possible | Not available yet | ### Orange Pi | Device | Status | Board | |--------|-----------|-----------| -| Prime | most likely possible | Not available yet | +| * | most likely possible | Not available yet | ### Friendly ARM | Device | Status | Board | |--------|-----------|-----------| -| NanoPi M4 | most likely possible | Not available yet | +| * | most likely possible | Not available yet | ### Asus | Device | Status | Board | |--------|-----------|-----------| -| Tinker RK3288 | most likely possible | Not available yet | -| Tinker S RK3288 | most likely possible | Not available yet | - -### Intel NUC - -| Device | Status | Board | -|--------|-----------|-----------| -| Unknown | most likely possible | Not available yet | - -### Seeedstudio - -| Device | Status | Board | -|--------|-----------|-----------| -| ReSpeaker Core V2 | most likely possible | Not available yet | +| * | most likely possible | Not available yet |

Further ideas and discussion open at the issue tracker: #4 diff --git a/documentation/images/Double_copy_layout.png b/documentation/images/Double_copy_layout.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb0d302567480e8cb9c984d7cc14baa03bbd2ca GIT binary patch literal 34899 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%0ATBv>PKDXrwcH||9E*^u~E;hc= z=MhPXtI4);r?t7x=V-(Yxd4olrPJ^gzL9o1ZDk;nJm90ryky4WS4RVLjCrouNVaw zk~v7;R~qL!?6oqBSxbx7pP=T-(dK%?^a9vtniJz_NUDCh9q0|09xk9>qZDZR40^eo zexNhrj4&R1KV+L($<|(3C_SvDCUCeG+!QTh!;oQOH*sW#RW>vGe4OTaNi6 zjW6&yMJaV-e6Wt&Aa8a03_qDjDQc4N>{whZHj7albLS61RTcQ^uA8qwvR{1C%-ia! zh(36&dg=4$&pUt4C^hcpu2?a{KihCygOoiN;Zj6g_JTjMU6O9iWBKrv;BH_7if#YX z2Rj~jaN?0C?`E;BT`kI^;;O`0#{1iP+n8~0^O(C=p9W{?1LWP&@M`+N^0oO)TcWoY z_XxU(?5Jc$vm1X%TI#?fSHcRLS6q#h8OSOlf=f(U|F*vNuJwSNtH6z>DKl*E{66x{ zNC~I4{KrAJ>)00!2~IwbA55d~zh2EyzMM~aRDBr*md&cg+4}bBem<^{y+#l_&%ReC zy6h&jD2TND_G&^QbuNY3y-`&8y`#f{P_;FCgoG^mhpH}d^n!-r(VJJvFkg+@`QFmXh6l(g~eLv{A%Vfv=` z82i%am!ri!5hfLHFr^nwa_euz)7!1A(eY%YpYGtR-n;jQvu!zQYt_aB3H{$+s`8r= zx#fH86{Vpu$S#*sJToL>qQA)MBBwh1bLWwb=6#rh5_rA-%JWc3qDYE@!Do$GAkys1 zCPSxyNEyY5;ON@BP&w}1dlc<1w~D)x%Vr149Ms$6^IN49`;%;>>j{n}--f|}UDUm> z-9WdwR?3~XK+_7e-xdmdy+S@mEpq;^@bszJ5TSE1d4&$~89mOLpUo3CtsR=5tLgWe zI8sEx+zgLq{zUHDLgsgC6uZf-=<&G9;R`*c=~v1NA^5AKhPLJev)2Ol=SNQY7qinW z-uJs~OER-54$!C^WB(DlgkZ1$^bW}4yRT8X+$0_M9b&MF;0*Xxfjjc@9N!6Upd+k5mHDfOI__B!IqdfrUo zgSFe=u^S_vUIby@a%VHj80Hz1(ca_5z+fCO#q`>J5XuDpxI8?cq>=o$ z*o&Z2AL-&&B89MUksEtgn_j+%RBBJH358;%mAhb=_rN#&!1|GdYZn0j8CGPz<@9+ z`8g-PW~uXK*IisD;*-y}I-1XPm-~Zb1wPA6_$$9q&T-5Vn8_a*nyB)&N_r%#Ni(ZZ z-P!HVlWo6NLAd*3Pl-&b@N@O!D%&u%qUycD`Y%lC-}&3tZVxM7w5_muQm#pPW-1(VqLWWf5TNREa52YvCA2)ELz;m}v zy;j#}m=RwHj0?oxx>{dYK~UzI+}Yn>Xmn>;j-1}u`kje+iUmoZW- z5ONK$`Df5H)& zlpX7SKZ5Tye*BENM7S{#zaQ_dT@e%CtE=|98=D!aQWURR(U^p0{2{GoGCU2x1VMrH zL;pL+$&Hd}q%c!zFGjXfn~aW#$=Li&uc^VcDeYk zAq(Ph^-tEO-w=GeRs7O>PvD&^xT6Ag{yV@SGKH!`($Z}sB{X#3l1 z5`#A7^|NfI`3f&KY3zgbeyFOG+;=)o&P(ZQ2Vc9b-^N!l0v^fA`fn>~0};cnPVBTa z?nJZ-UMaG8;#kWRP(nE`e%>nhU?4btE3h6xnewO*_+Clh16<;-2vKYQ_MYv7nJP1? z!#)7~q58z!Cj(uiCWuRXRc&5&-%%REt+Vz>hhA^*O|eycd&BXQJy~AUHXp!JRzbR5`Er9Cpz& zT(5@3wXWc(dkKH{eKmol^kcc7mfA0wIsp>$I5H-}^vmYYTbY~JJ#s|r$()J%KxH#a;P|VR@b6+U!nfA>j-pr4? zWGd;0;h0xq-`A=$J(}K;etAZZCv(;*v*P!%WHHsg%%5I%Jsl!R`D5%1)P6}#QK!^T zE(&_2ox$b{FCK^?pYU_y$1~>E4YNTcCc!0vwL&ZUQ&B3>F|cCd%;|O-&MJAJpjO*b z7Pls|E4I_E^~=k%Xy^q6^eHx6e`$QMM0|kcSEqAuMbzuKKFhzXWSN+B>D_L*lJmYi z@q&F4FubgZ;v|Cv>{{t|baBQMtJ)4Nll)m#9R4cA#GzOvP1i16tYx?E`+Jk&t+@Pf zvkuO?*?9Xb0#o9%bx%^7tF^~r4K03jDPP2r+T>Dx(V{G49`_nPZYFZ4=N-p>tKzRW z$CE$vD=d?w0LOC`=;&4L@ zdsvd5!#81=FGr;%yY%m8BG;WuxICacJt*&SW}Z#+KfjSdOuM6J31L*H4VjFR+4#Qv z1JpnS{rbRPO1{p9Gqb(RuhkmhA&W>p?*Q4`a4KGoTFv}+bh=i}K6rT>`-kK-E=7;O zb&YzK45jxPOyS^5?=^~`yg};{II6Wt?T}O;)AdQoR^;7|lSSGkTOyaxC6t@@t69lK z=OV_lmUre~7j{%01e}u!|0D&Ax`{^n{jN^+O-7H;*i4)A{z5jwDfsQi<>6u7{jT)r zy0`C@!X&k}ntvpOv_B6r5fi3wt56IO(oMoaMwxrf#>KIn81;0oBedM7k^`Idea7v0 z#?$`b12p}VrxV`(mF`|3KdE6?R}iG9AZ94m^l0TgK;KNnp1?2dbJ0D_=Y>9bb4z%r zS8xS+v>J(B54c52gsq}u79-Vob^bb2sd!UugIIIg(MvL(^Q<~^%x}^pO$Yehshz$_ z-T8FqOMP>Khh5FaqFQXDg zUO^0Iy{3)^dM+!a}vE|I;8OU*6#>in8k zZ7nAcksP#j?d>#`>-l_1>k_DE=bB#i8z%4#Mbt$v9L-+RAdl?#2`}XTbZ;r zfp3#t10&Je8_;@gS!01IC9Co=7ZUaQBDbm z3p;%L?;xaO-n^=y2n)(IEVU}gf{D{xPb6E7@b5*jM!K%)+O{kwrTp@=?{Dz&( zfbrS2$2+pyygy2tpTirTyM!8My;DdmS zw*`(>E9C%HUV$xmFz*!M?)2nWc`37xFB1MAlrzmH-b9biR5hzM)4{vt<8G_wMP9Zy zcpmkltEX%>7E`vk;h^j2B1HM7BdM*_R62>qimZnM%)*c9Vjv62hmGxPrw8IK8^_qP zZT(`?V-&dw3mJJ|8=hnwMom*ASTBK`Tl&2`J-f}#%R9OA0_F96cY5c{rMw;w6BV_j zn&eS3jfZ^I)K5qP*p*v*V>cIhiaTGrP7wG%sBZMgz5djcsCr@LaQ(g5xV0iu&vbar zd|@gdN)h|RxHCftO8jcwJ^r33=OEUV*@ia&hw-Cn*ASKm=LFC<`5c)nZHw(vm{;bn z&0hbURa@G3B+|w1@~k1BQ!n0RGQ*=}O@mJkqESUtmf^6ip(i8>Ds2nXZc`ktzlOCi zRp8KVhFBal0@M~i4YvA{L-s4Jd57DLS{$I5WT{`2TNOpQ#=9JM&CklCE=3TX-5jq> z5K;g}{<=8g2+WRD2ik^~ZaQue$#)2Oj2IHB;x#1fUPOsZ*{AVg&|N*#)1Whqm4SiS zGC?ddmwcNNIb#I^-SnMrhXS`Fx53IQWWB$YLF@G1vdIO)JS(8y*qkBv21h?v7Fa@w zh8(_1DOEZXx7qMu!|=RUbPmOq*WJovd_FyByX&J_@`I{Kt0-ZFW=f#?ArF``y##Lu zvD?6JVf1t8qyO{#d-gN~Xh@JIKwFOc`(8Va`H7yNE?Yd9vV9{n!*FR8mpN@JOe1^s zS^xWRu;^xu+rkIxcHqX9z0Y%xduBhqX7S&Cwo8VgIH(V_FfI#KTPd8o#E`BPLlDwy zjAHSGY^sw_lkaMGfASTTL>Vqzy(hUpF;DWIiKL=wmPz`_?c#}(-NjVXACIKwm6+8m zt7e1=Rqzc|Mv2*Oddq}%H6qi|D?yTU&(!GW>@O)A%}-vYZMN!^Kk@Uuy-og-t=NOrn^X`uXo$VRr;&S3G_H8Jl5Lq|1oQyN@N{Qw02gXICUo|Tb%Xj_bMusMo--VjHT5xf!OuUMrtQq1K z`fifG1J@L`C)If>%AO;}JcrKLoGos1y{hIe%CL2bbN{Rb*4d0@&+|t85TJ|K<%DQ= zh$w7BuHZw}3Pl4IWqFbjp8|z9adbQ-;yT9dfx|yYoQ6ZNmb1IH2>AaZn7GyxZ5NZw)j_BmSGmTsC7cX-F-8J(~%vXpnAo6;sS|VokCQS zJS?SXS5I9ctnYHMMg~>OZW$^#McqIQTFRC?9NikDZp1Yd3U2Cb5CmrFIx?>3>3+%w z@L4;i4?NtJDt7v{V@e%kj3aW{>DZ<|pY0jm-n1q%ecc4&E%KwfMk=(u5-NUd-|i+i zIjt07Lst2DC!+rENl3PKtwq#UC^Gw49f$@B@@Jl#G5Uwx?t?1_2UHk6DP33K>@EPY z2*Qdb07fK!Hdub?IBeDQCvtTWV9F9YaMZbbGoD3i?GO>U&XuJ_0r4eY!1iBjp*|;b zw=GXa6hIvz?HFxlU&VK?dCg32y3)2SxM7E^jDR5;=EOR?jO4Z4;vTton3&9)Y0FpftDZ}E0;BdY z^avUzCKix0y*6fb0yT?+#S3NJe9n8}~-ke4mFks^PR#OswwZGMl|HEc)7V>YAmn-4n6JuEpom*-4ndfuoD;e}-| zYw}Yr_9He&>~d9%>}r9!&eQ9CQ(d6t;l()RXyt0izi`!FiIA%eEmEqzY9*Z11g^R$ zupF5;iP`ARhBknL zMnQYCh)VBnfLeWS?(+gz;rZ57K=k{pMLaDB6w-yg!`~C=7>zQkm@#@!Pc?sJ$6>w- z_?(^%6V^I@Cw!^BAsSxqm@!qRu)Qf)M7c80awq?*-j#7?_&|J-SI48(n>8LJG@K-` zuGKsXMmP#l8N_b7lX)@{JSRRb7c2o2&Y_Ky)!{~ep{n=e+ z#_-IIL`=P|DPifGB}ykB-Nvg=5jpG*TxpBQYN7!jd0tlWS?dB?{&Xdbtgimtx|czJ z^$;jQmi|>6{oK}K(3mkDSAvVDx+~XjvoZi`=*Kc z5(1&C#f4-~ml)hGngTPTwi^>1&I+wm+oYG^fv7U-{?g2?E7OZpYXS|ntjppYs~C}+ zf5)_Lnp{|v8f|c^B1FGhnw}NE*nJ(VTZ?U4cu{egmez$ysE6F2C4c2B`;92&%3l^^ zb%$`S4iEV_Z;I~ml%6XuOkb5IG-45%`WqwGMPb+#6sDYVqv zbFsd4I`rv$i@jfUa0J^pM3~jd9A+B46ux!}nTkMxoq9kzdMVQPw!#HBFmmyk}^n*wIY7n#Gq^=_7%XEJa97G zt#ynBPb|7yS*2)}Am3KBYYQJd@BN!x9z2@0=cF93uF>+8Wly>PXb7>)65!<^53n%Z z+qL(~uJ|!IY13!cCW0FW*u+m=)L?txyH>+qpnNT^z;aT?I{=E_MO=FShu87AMIq*l77? z6Jna8T~}5Qwmw~6L_efzQacwRueEi?^sNm$YB`fw!q+y?NhBd#=8jmC4zs1Za#)j* zv&TV76d@a)ekQyU3SLhsoF8vU7pR2f9h_`5bkjS7G08T=lfCrlPpLd5tV_0ZXH$ZD zG-e-ZLS&R55iuAs)2O}0Y&y07wR^wHD>1dIX#KKA*i{=fpTv2JT1U^2Zke@Y=se@0 z>mtbJ%;3^o>#+=G(wvYyesU5i^4L^M0m=llniz~ZXbGT7c|Wt+dmC}afiJF1J7`F1 zMgGa}%-un{uHK`Ign#|Cobir)zYX)vsW_vZ)AF|?%p#h#Au9cOussW5^QX(1v4A^H zh`m7TG-e{DQB`EN0Y1bN`4=MU>`Jr3wf3B)5$!nbN9_7;xgCc&59Ii*ilLP?QFwLe zQ}w7j!u9aO66u%5-K$>i-4+13!>5PW`D`aag;|QC^acwcDSSU*m;kbJg{dtQ+Rks%8OW|lT3*W0CtS?i~OKM?)v!d zwpZnrcQ#%5g?T(x=~K!~#osA2542gnDEtB>`Ayw}WfE&{S?U-vdw5KUbV9V(Px&?^ z>!nJt9sBwOpBK1sVPU;a&*Pd(u#UwPewzBN8YyVVc@0;Kn{eb(LCXhBsO=ws!qLX< z#KQo!5DuPV5Tv6u+T++)tjStCi`euK3ecxB9bNZ@__nWeoS_qSVwQfR)p8#*Bt$1kTj$_gsyE zc7*Qh67H4M>X%_Rud+2r&5!daRICWBYaXY^^rF{WX#-Z)R~JdgO94OjQQqTq#2D%K z5MJ5coC-W6Mjpuw6f={UeH&Yf>-~AYsFs_g`4>X(d|owdXky^xr{VuY5{N3OP=NBq zOpt5H>h|nQev$n2=K(vWp8lmgQDc)uel14V%+QjM@#tMs3?P zTT`lzM-RLCp#fF~6YPZ=NJ^za4bV=Ul8!da<}0kb6CUG=ZB`eJ9X*Q9+D>q;L6^X> z98N;g+ma9LZEW0D=r6gl=Kyn6bJgC^=5}uEFOk*LYgc-!n}+OW0OuoAuw}>ZY}*&3 zSP8I>GCPSAym3!B1asJ*e=0n3>g2*vSND(lG89d`u4lkm_R!@sf7zf0j6uR>K=z+yq^oFR#20bXju zbL6n$CF1p$1g9$hbr-~F61TV`^pYw1)xi!~j=P6`h*65D+3MD)|2@1iAqw(o&gUR4Vy?>5pe^)qTrT=!#w>hOan`sd?`5AU+!?Ass*i8Cl*Sn% zpS1B*(JoBh>|e%yZ`RhSK#yc9{=-7JzNQ$|&O3ZAA7!0Wdh>aM^0OOXZAbIZ*g9MV zGE5-$0UU-;CGZ~ZuRG4K4j%ozJ?$>_8@k(Hqzg9m;YmPQ#;<@4le^9Hm`e}i`*7+d zojOEo-ZL#C}@wz3Z|8lt{>)j4tE zCQ6^sI0~5wi2L85=5{`Bz_ODzgx?aWZ@;9$iMBF`yRun)Y7@{@bzwD2ENuRKmK;0X zAa3#56*~PdCcI2`DtK)iJ>SL3T5y;byzI`_t6;l*Xejc_vHiD@FT(ck-n~0q>&uo^ zI0F5{<0;^aoc}Z>yvX~n;y;Z4lJWmrSAl<*{ogwe{5#FllKc1gPg)rKCp7=n=HNe> z>_4ITzxPzweB595NK@K;g!g|CVdDB~0^x9-?-h+o-=7bWgve>jeP{dj!bXqrSLlZi zK5D-2W+dOwNPgMxq!#MZ>J>D)JcF$ZaygAb40z=|#Y9GpY_ELMol2dSw*{|m()I*r zp9&V?1NomW4(R`MaUl4oivz;Hx{SRpVca!}) z)Bh`m{+r4Ejp_e}=D#%bpG@|j(0utvL;ula|AWc?SCgp%e*E28;eSNI|MHUm?>(TU(MZ_4b7XGi@K zYX9o1;`rvcM!6i0xqhCW-d@MsbBm{LDe%rA33{2LJ}Jk?$Lfz_@O~w5XMSq=5r~Xo z>N%Jx=I2;q=?Od(Q&dpE1heTWVSjn`>J?l#1=h@`o(7%=cUN$}2v|N5zzekH5*Y&8 z+Qew(le)*o*lr$asR3}!9b`Qz3hrkcp74eg-4#ZC&oD5a`l67F`Tn2U{yM0Q zuzmQ&2^Jh$C@xhf?(R}rTBJg8NPyz5!L>+B(NbIs1qzf<+zDQs5?q73rVt>=S)S+n z{^obinRm`V=P*Mi$z<=n_R@QIulutZ0A#@V^6Y38Atob}0T=`TDZGq-_zVCk^b8Nj zK7981G1vxxBWPSV0W1A~8kj%Xxl2ub3wQw-3LnG5p4^ZF?*Yz1hLp!=fYWgYSWXXY z{#3V&*`hD8-j>U-hUb<$5PS=w0Q|7N60fMdTmWESBruP#6V%@lT7Z$5WqoLZZrLPM zR0^N&K6z@=Dj&+Sao(ulDx#1ib7}FeSidiC?{8lMi49Y}A*?sr=il z>#2UlEo|eN7Ok!AN zUjhOWk&)#CYxKv8-h={+;@?)=j;~@1Z%ut`V+~>>;P~2s_4`P2SFH>QMF7{pX;@=l zyblN1DL?F|D-yZhzf}BU^v=kLIf8=43;;;%&eeYfP!^STlYH0LSf^X@q8UYtOq!(> z6&3%7A9FA5zdDTH1=l~1WxbW`7JZMah&f12mv@m0D%Soe*k!%ca5G7FO&Ix;Zpy%h9ulwW%p2Q)`>F&SP)#= zMRB$l9I-(>uq*(BQfY%^7ju~D1W*vuRW{Vb#Ka=jBS8R3;cwBKN4Aq?zpixtd+>8x zKtvOflWRCil9H2K05pq_;o&Oy#bwUTAHAHO3 zBDv!qtUjT}~ zh0p*a03$;l0YR^kF814UknxtK1N;VX<6DA@h{H^xcVGXa6i0cL@= zqNBC-(?YFmb^!qa$v@Gw0frj^a25dBB=6$Me@An@%?{JQ&B2DXjut?W>`wg-1zhlTfjWcj zL}{wbIN*5z-KQ9#;#j`9X|40ipbPkTww4T$@IHPFAUbk@FuA3%0QjJyxZ5cksQk}~ zX7N|nrDYlYq-Vbjs*B#_5du((9AI1R5}jxO%u+O>;)oYP$z};S?B&@??BzA~V64nI z9pHx`tL=1+69E9tZR$_vGkzJMxpnId6&9obrK#}kkC#7j=hH;(?ov_Z;8LGQM1KAZ znET#9wtO~_wO@Z%A#U*8dkGl+r+#Gt$t}K$1^}$=0qG0S&69J6{B&`rbs!~a!%Z>) zY6;*{8UUB*r$KcwVgB9v(8rG-mwWCR1e`5_fxSjFHcA7^$Olk4faDqkkN=~ywQK<0 z5Hgr9UP$8E(b4hqeF<$_TU#&42@1XM=;+8L5FZ#H%_J@akXtN=vou=#&J#kH02Ikj z=l`l_Zeb`(wm&=YI+gj*aiJ*{NU`kT2DNuq59Fh&- zYTm(3WO4EE#w)lV*0Vo&5DXxHgaD*a!1cLRnutyNqgWXw0JQQ4P-r;X|F8|rV^kM6 zU1`N_4NUWZtmx_h81bipr?~x85Ky+r8AWmcoXYLkfZlyGl>y@B7F8tX z2sAO48GEnBKewK#+Imm707%&m49NL5pQt~HHxKY1E`|R(1{D(%@Qq=Dq30wVqUGf! z0RUz+#v2Sv^#t!FMb6Ozxfp=-5H1E_c>&w~(1n}GTpo6emFj;54D+_uaelQ5*y~ye zyyfBJ$0`II|H%T^4!6bfHeWP)^4d+5ngY83KtY1jw>v~7-8dplNQ<%jBAR-8RN-sgV0jr%0&aX{C%BLP$r%lQTmpoaYgP&$la z_J3qCbIMm2Cr78JI*OnE$fsH8mzp%E-5yU|ob&hwFmJdGhFb>#3N#RTDk}RyIC_+C zu9Bkw%LBVFHLQ&R5NMTvryj2lz5>86)?-C?fYMU{)CybBop|Y^h`8I2Oqc8|Y=8k2 zfaIX}+l&B!XuY|W?-Ch!Gmd+Ca0_|@f=RE^k{p2ASO89?U9A1-Hr>{_nD5tbumZ(C zH{@=7U>KvQ?cpSFlUFTpj9`R?t^*TA9E-hy2CH;^&^d*<5MiG;@(-k#8`O# zoqpWSzWi<)91(>Vk&egXTqjw6m&a(%=*5>;kJ%rFN9EFSF4oGBw>lQ_D_#rA{Awcm z#HhH``JIdGPQ622y~NY)weYAFO_Ct&>Dpk0#mU|R;q}E1|M&0TpBgua1Ox;ymTrr= z56hOEUt!p}h~m|!-q}!o!{`isv$zFE0a!RQb91#9FYb$pC3SYHe9z1K%@YOWJzy^K z>C>krVD?DEXOseD-kn!*fnP!bKpFBLN(2uc*8W)Ph*Z#DcUNg`7eBU5N*@QKMozU9bsG9 zO|VxJzY1<09r!!fef_^qg#O<;e*x;9%D&13!{#ah1-L2`^hw3n8~=&X2EYKeU6q{U2nrdCleI zX>`Iza(MjcecUF~bDw(EK5_RWPRb0WZO(x}HeVBn4StL`2nUg>H^sjflzy;EFtvi) zoE^^L8#Uer?D0+_iI|B=H8uV)y&){hY2i+r??lm?}Jhi z^N0|8K3|T*kY)`nyyjrhE&Em=ZtUuQ5~=Jf90>&CcG3kUZ+Bo{p=O&8RmamaDCxXD z2+FwP>AEF#)FZV{leg=Sk;9J& zYA}b|2D)js2HH!_@=q5FtK*R1oCH5Xn4oCK7-$z!9`+!LYBZgn7>8cW-fur z>fkQ20Xy~XXDB2{Ndu~`g`yc4RNZ-JR;us0WG3ac(GZI8$zeTAyjn=+N=i5TbcOjT z(#EeqjVKeIw*4JleM9?B5V$Ol3yqha$og51XMISO=!A>$X*=R9@2($z#L7NL9>XQz z`%r|_e4qQ|DJ~1-V=JG9@UKd{xhP-9M@=IHxVzXy^tZ4UwzjSOmNwemOA1zdvamS~ z#t87(CedP82*H3I#l7&E-!C6IpS5rQ`7-GnKuu;t`D|}(jUVqp9?DrgZI3JjveAB} zh}y!5U>e)SMN^ox?vf@71k&+p-h?QlKRK`BH_>H;`E?=eV2Vro>#b4JsqSHOqxP+o z?mT!g?d8W6NP_t0*W;j=gu}vj1!eXh6DWu-ruO&JKM8TL$`upGKvOWRi7wy>Zug82 zNiN>vO{4d4k5kT@Unw8Faellm1{Zm^*Gf69m`o=SHpUxvl(Jv_>31j!X^RBLY^q-==atbnUFuU$$h{ss;yn^oiSlPfWk=g&w_*NOq z5aNp|)TP(I+I|U;)zL|SSCR^VmEuojB#8EX7;5%{*=|T1Q>e@cxgJqf#UdN|6qf8@s?CtlBRqRI z$E%t}B!++s7mkPdK|E43O-I=<9lUFog7uvJU?!c7E3@Y@*5R(ZuuL;W*ItEcuzUd7 zN9dk*5eDf7vjv^o)C5uhB4uoomF%_lfC{C)`tiH^7NRbFEcUgnygEz*b#oq+PgBGs z;|-fPEQy!b{$S$doqG5%!Ooqs{0|GeE48{TN!ehIh9CljA;WNr7RW6|uNa(eR7yLn$zLgx;B6EXC74ip*>9$alAP$9ZTkY@51Ec5CDK4$edk*)Zt@;PBTq>HxqjhiXAOgFk>1%;=EqZLB zq2m;KP6Zal`RpekY-Qylum*)iqv^HfR1eEwpl+oIb}Y{e(gP-u0>#^U^Cf z6+?kof0v^u=?(4}Eu)eTG*BbId8i1?h2E@3+veNb?QkBx<8S=3jJlFKECl;ivs@%s zQp=K4#)hZC+v5lXTComZYaZ0jG}e}20}5ym%kCF~{f+IidZb{eC`h{^Py;*-(i!H- zAN-JM8YjDGiTFA6noSrw`4#a3!KOzn;U8EBLJIs!BL@LtI(Hoi_y8znV%;GK+0qM@ zex1HfqizO9VrJp9IM_Xr+?1rHFWNX0X8V7ykXgG@%7)M!mMN)*T9^rZeSH1TJf9@2p?9pXi@*} ziJ)9UErMCOvM-3HE-jGdHQP)QnJKQzSFe#{;6KM6gNx>=Q-5&V4hLx?iNb8y+Vl2u zKXTg}67j==5ev>w#hA|fKFYk$$&>$hjk83|4o$&=6IpOFNf1eF>XefosRisf68&-d zd{crRzOvX4iZIAed^7hTrGn+SIymVZ^=~Wjr!}}S-j2kmiG_R6>U0sL+4?ye*e(M+$v3Eu#NwTS}~FS)2}QFbu6fY zX>srAfGcuNl6bDCTbMZi^fd%*_>x=woxF(hMUK;jTq2|>mekIH zj-;%g$olCUtv~IbJaYS}glO3LKbpTOx4PrbkJn?R)Vk#?S#sV-#=ki|fls|N-1hCY zo;N7%B#5<*s-9K}j@Ww7zOZ?$(AQ9@y)O59PI|3Xut#0%Z@)akH~_UFLV%x&zT|$6 z^1F1I@c|#u?Bw zpL*1mtU}P$LT5gn3T@w7(N*mmsq81Rd|P$zuABFQGDJX9`edry<_)6!RiQo4QheR5 z%nU{=)8Oh847*YtlF~%2IRDD=(A6oS>s-=TcsA>U_NmyZwZz9i?M^5?TQUpt4=#vm z*IkSrK7EMGR*2FWsndl*d`ntLwrF_lf20CfO%+rlhDO40rWZ})@ z(7r$<{#n`UpDcdTlwyP(2f`1wk9gL(zwT26U%rD5(H7N!+GTR>G>EndFTqJ{Aza7@ zZEQX|gO;g{A?a@2cQrEJ?V6q~DsSD?)zRVyPR^E&^05E-R%S|Q!*0Gmf6}0O-)1`a z^DC(XD=`O(9Wp#YJnnnlRo!AebMLU=f>#cXSuA?`e`ZA~4N}Vb$9IJ^D`WpsAp2PC z!ELctf{@gEAvO;4xc23tn6wnW?VGl$3C*4=8r@p~3OEb%N%1Jn_p>#%6wCGl_#Zx$ zJciqVOe}Bq^Toe`7oM#AW*3`njeeH7PTW4n=-JF_p`VJ0wObY36FHQcJ@=#SW9OK) ziWjQ0G#qUmx!Dk{=~$G@mdqIPn-$Wh9TZA!p<1743WaTJX5q*O*fPqc#RTbBj;bSb z3+0_@yLn+!S~7%Sq~Bi`({gE&Ca&P@MkH8YEgckVwl3CR?w}i+;Abi5en3p!8u8#O zqM3M?JoFnHdii2=l7S@S6$`UvxD|0FoW%fkB1JvaUV~InSU(ON#485dLvY+U5aDDO z7Y#n?5`BYs$8$M;=VM_7-l$s1^4;g}a(8Hgf-Eheb8K`SwI#XE(nY3VkH6BcI_s>U zbzfOF5c#Z9qbKLP+3q+mhPmV5#+B1zVL#heR?xsp;U@$#R)V24lH;Kz6fvf!zTX7! z1S~ilR6k3ytd5eRe9iVXGCwl3NexgiKF7^etEUv>ZZjSIGq5vyzROdP?x?_y2BgGY zmzyO1Fekq-%efcbr)#YK>WUedfYUf%1nYlcpfAZphQ+Z+@}P0BP9LxEW`=BRzifTZ zk8ACVY{zTNQ$E`4MrA>x2MIqjd9P z&z894^PW6rdq~39e3^PP;(}To)z8vvH+Kf^r!1r_gxwPi%_!*MAFL_Nlqyt%FuHN4 zphf=3MP!88tV;TW_h(%qpzTucppPPyVp(kp76fcl)Eb?6n6;$XRoja=HSwz15eXP| zeuO68TStq2*BP?9Zz8{9-b6vWgSC5n3MeD$7nPOr&tpClDykJaej{EIFpX($_PjRU zO)5^YbNBvNOlbVMt(Q|^<@NT&Fq#Rh}z))zCSUC=nvoMKE&gCLwSW z0aD_v*i){TWjpFiM@z20 zP40Jy$L?fCUC)Z0$zf%>r=Ja&lidshVNkVrLxb)N zQNW7-woOCFU<71q49xfjuu}e6ncn>%NTHxdx4_K3hE=$;uWzsi!De!_-Pba zl+1r6vZj>NQBr;gqxM^`UW5qaGdc#vK_%*_*!d!qj8UOty5e$1!VZ=ODKgLzI)Pur zGVhthWJo>ypesCQma_P*1hLf-KhB|T9EU~x?xa=V#0#35>F2-PPKjH!h~2WJ+yv?t zNr$697TXvG9=91n+P@Etw9;OR;WJ)z>}Q)^K0LI?hsdRof>pp(%y|4xVHiv0z3JCK z?`ZQ<99fyJa7m=%JW+xwSy4Bwi$Jy<16i$)1tgNvSt*CB#G=ThFNu$SEh) z^kZNe*57)Cw30cEzd62w=|JpP*C+RXQ4Lr( zwH6Y~MNBEaDrZ6P^pH)Av1eKsaXYZ@kU^%ve`gStDJ2?}K_>{q6vez_Q1%pfM*$mj z@e|4KKZ;2n`z%F|t}Bc;nm0?MJR5Ck*Xv&(3`AK;Q#pMA=hwfsqQ|rE`qCsbYvSpG z-Tudg?Gfl4iZbL|@m~GwtLhUkg&7W~O>1O2Oe znf;5`pu@l9A3@{cT2|UGT-^L^oncDaBI1$TJtvzDQU0t)kyk#gSD1VjGCCZcd}4~P zL(ffm+(qRy`@%LdhI}hmRasXALJJ$rvn1jt<(@Ytbg>+&VPQASmWM-3-qjoW*pmcl z2acHV-mklE4cEG{&%PQh1PBZ)OmnDL7`pnSN}Lcd-X;+m_5;D#U(;gLFB^@G^@TD| z8A;~w?5;m5dMriMLPyX77&5X85}hW(^GnlXSFb8L9(qu-Z`+~%YhRjOWBVb}S{{*& zq%gydS%(J!On#yuG1dH5%~mWFY2a1CcPT-VLYWU*C^VTT}XGiU0;u zmi_Rrfhim4>ng%y(U8f)cF3ZVTJ2n~uIlW;VtePy)rg^B&aF^3fs>(1P7!Cu`iUo` z7FqEj8m9A>US+bE=L|B!L<lHn$_^KhPAgXLNnL- zchb<(#>5ecitw}qpQ?@0L~qqJvwdY-r<)v#iohJg8H=}Z(h0Aw)7;tQzb-sMEr*Dw z1`1HryFKadijQO>xIE@OjGGPh$osc#5lt`HUNPWcUh8LITUKc}Y;kxle7do-ccWEt zBfl%vPmb45&J$Sv(9P6jgOjzianB-bZPe4CKBb4{R46Uz9(cn4^d`AL%?cA<(7nRMWu^(nffz+d?K&gxOe9gqi@QjfYwWQ>73E6yb`Qx$ zGiqtc;I<&0AGI(8rmqW>q_yjQry=7F`^Gu};^_2f-#aBrB@ZSx#|ujbIoeAF$@ef{ z3qmOMzn)rIn)tFjhZ%Mho4z?z+?l^=wiPYeGzTTU3hvWc35FQDUAJT;46F0GAG)FZ&|XZ3Q5Tf?h~;;wA{W_eBf?cUpCzl&O4>3`in^eF+ZVlCba`^C5DRBZzP z6b2LDiSk$5k+tGYmF(NrYs~*f$0LJV$|&2T2l2bg`NpPIvi0w){_Mh|+0qB!$`AMK zG~`g1(~>*bWG;i(1KZVy>idDP=QkB5MIp~lV5Nfa>e|osrc29C^TL+8eR2WgG^V_l zr>#1(2B0Jky;WYjao=TbyEzmIZDKjAi61*D){Ji~HeF;-*0)Oz)9jtW)O9`1XV$%# zVhw?6`5Yr2Vx4Ap1|T#=FP?%Yk}KrNAPw*SQs6Xm*hqnjIN|V ztt0(0L%y6Er<8H-a96lxvnPA@QHtmaXP?&x*VKJ1aH^a3+wj$2d(;covXtx;y#5r? zBXbi7jOL*F=D8b$4)M^o$5-a>l7puY;oqg+zxV`tAAe=`{ew0BULPj*!wi}yKCbNV zcXy*po@joV?U?N<;iNG`$*d9Q^th4EubuM7Ves@Fcj~FFaT7DK3J=Rbhd;YpdkOnq z7PH#m_rJ_~r=o5P{z30|x`iD26#CeI`D~=ioV#-xkTdjxooJSh!*2u~cfn-yc7iLD z;y-syk~GaN-|SCLdRCChIMt4xHy;|cxs0`>3m`d@%6E8XYn{EhOB zr{AdhKEuI>bCNIWtsYfkYjyX>W2L8B`EXdRw17)AbKsredVWzG0ghI68mOAIf=o2S z@WV#*LMe`fAl)(jr>$@6FZ+0%Fi@W?-ipw*QT@3)q)^A-ucR3<*&pVV|FXCZyAT&* z#J*nCaFQZB92g3Epu!{mz|F~rwJCPjILCNBn$Li|1DWotW&6cmvuW;kbX7Qp{+;(J z0MB~UAdI8+ChQwnRXAVMkkOF~zjB3hyy(&3j#t|^`Ewp>^h9yiMcdrH?3-^+CPksO zcwWmcX)Q*vg@qIwdG{!VYNmtL*9v`FAZIRi4_jh2*XQq?>^={~{BZcT@b5+-WAAy{ z$lN5;^0nnerBfyH$|M|~qC7czI*5stRg5^|^>+Rj#~xaPXbLQ>OjKfd|CnLIHvuY?J>_y?3Y zzo4t*^OoIs*VBnhv_;cwOQg*|>xqzuZ&HTd}He94pQOFB+Aykpvx3 z-4m##dGe`!jIs~Q6B4WoDmw^->S%U+ zDa~Z^CgC_iL2YC+*>Na3<|e-B;Gs06Q%=XcBY<&yqEha_XRsE{-X&F4w$z(GRGv2cd;4&(P~7L7(=#wAgHWj4-!pU9pRz4(Btp z;mQ)Wkp865yXu9vyCwLo{HO1kEI5HN49;9m>}Z+@n;$1?91?pUw+u4%hqfN=Hc^1h z1RiN{pK1KO3av>I)O8j8^(XT(s(y_y|K54>XL(o(X%I{yel_@y@v#r}%?8X*&hm*g z=5p|F2UgOD%jT@PU2oFszIW0F@0$pr^SAOlh(S2}57{MD{FTucCyf?$9^}$&uxVZ+ zdTc~eJ@7Xv5`v#iGH5;8!j#EMk{iIl&#bWf>DNcRH?1-%g%F{s$Q5wCQI1nVQnJ3w zlC&h=*?Vr~ED@`ZCO<+Gdi)xxXkX&L&U36UQQd`cYKQebgKqS`9_pS3l_#^E%VxMO zBgT>BFCGgbe{ z0ljOExq6zVvz-<>wt24X0xocOCz(_0Za(EHU)V+AgGCfY5H6anekmLq48U+9uE zy^Up@o4Hh7+6M1Ad-QZk0ULaWHIV52Hp*4rao{zWADYGU`z}%x`_)JyA825FAvRpg=K$>;IK2Q|TWr$YY-7sQKbhGt&C37R*lXo9-PO>_kUT?v! z%4&5}cGbB!9_ce5@fMDKUH)C7X7dT*zngGLb2{_~B$eM~35qmB2J+Eh(C{5%OQo}+ zDMFO{rd#$tTTIc)Zhz;okTgY7BgDclI8Qp3O8H*l#JtK7+%GzQu?xAn7GK4y6V_hJ zZol%ttO5JOmRD1zHoe&@xRLAKl&m-gAME{7rz6=TW6m?NuB=7#JZfcN2v0Yf{A+zz z18N($^Vyx`Vo|9Wbi{DN*j&QwVrKe^UsA=^nRWBZZ-s*Hp9mWUZILR#vSY{LeG91~a^Zd9!0pIVfypMj}J% z=R)ENZHazeF0Bs4>ie>{ZJBj47HE(RE+`rMA9Ana($)T!<*`Vo*5WlEIwtMC8QweK zD}nv>(cTxw!BQ?R*x(@ttkhZJHkfw7YGZ_M^~cjBd|Vwpab)LjexQ1 zA@r8a3uTjO4P|`DjtP!v-Q5k0;;S@0-0_FyjB!`!ox8RW`Za!bjXY zUT)k;kD+{t5fRh_H67m^0N|O(DQq&4ALnUm{_Y(fAZ|L00U^V3o4{=dstVsB;8Hoo)X9)$E@+?oo88mHyP)Bh_k~ zeu&n;9NTLmPu{aH=jklk-dnN;bZ!LO=rOSW+0|dprs?8)>4Y*betj2Y))V`5pu^mq zw?Er-1Z6OC!)6)5rDTpA`I9i2ZEl#X@6Q)065W{1_G+`yST*UKN2If)sHdItl+~SX z^Fnfaqrs12s|r-?pO#n+t?0$KueV4e8cp^CVEaE+yL;9DL81cK{#ofCs5MQ0zsJOO zpqaCwsH1hw#strQ-0wGkpKd1t7bV@jc)D78|1gJze!|^nk-%%7VqFf07Ox~oCdF!{ zh4|lttNs34&vLLz0D0nMWXfpP+)%KuwB;KGnR?>LfQp=2*$CCuzSf9XqJEp^FOoA! zQ)RnGJ9vOpttyPN@LLGPrqN$Ur`2Lu(m_s_APaEYMQoc5mGaQ9a7&G)^q!^Pv?C(& z8MC-d{0iltHLnK=0S{N-F~&x08e(ybw`ezzUDqyDy#>e;tD~=Irm}NRogcjOzGUAQ z^LU95)onE0IcL7rS_b}!fX7-KMGTkIz({m#RU37a(29qytWGClx&1JgwFSa65&tN~ zLFF_1HOc|3bO$D$iQ&L~efCho$j@$cdyS1=sz@}zQGxat=``Vb z9L+cclaDsv#So*Gm3teS>18f7ST$Q9lVO+Ss)80aqAgxdGEwZUZN(DKXWBXYkJyd| zO0J5QR&a_fUA>`Q8Ea!dNLMAw0gII!QmjVI2NH~Tw9mzqtqu$G2&8<3Vk zmL$!eOnhs1kXvhH3r#(|#!vFQ6q0|^fHH0XWrq7B5FApkh4>3jp6b>w&+ZEsXx2wj zE@Bf77LCac7C?jzG27fu}#6O;gG_k)u^5dBk|+q zKbaRUU^hK++duGyW^ZAExTQy`o16TuvJl#h!Ez3Ixyx)_h|a$d9bwZ>h(OcKcsBnY zfrDi`iu};UcuJm@i!6*|qMfd`h`2fz0nsn9K9e8)v$_^z;`X zH#vKR{4r-4ak8WvdpvG{TwUR|2}^&l%ZV52%KCz5y3bAYc#dI~8^_DHPT=Y*hF;F^ zY>?EC#qzO)hxOffW=^R5NAJI8bqPZoz$Kt~>O&KO0XxSKNDx2MkNSg&kj%xl(CFN_ zMqoMQ5=d049hQ5FB!7Uz7jX4r7%7!l*Q-tmT z2oktKleLJiJfr-kk?c4*IPQ(J1pD}T3}?juw2h7W&;-Zuw?mR$`G;LeANx)V51EM~-jW@D@CsT@Nx23gyIV6^yoxV{oi2Oaw4UpzmZAbYaG- zh`PV#f;(C9*Q6|2R!blCNE)Ih2HF!0m6Z^f|D-DUEe|cG3u2$KVNTh=Hoxe*8tmA` z(Ea$Dys4}Rk~k(=oaZ5!~V#0 z)IEn##yxt!cq1^B(8F{<$oiaF{fx-xUPSM(B61Q{LGZun%+gX%3kz=#4MmkDo6fSH z9krJ4C=)r7Hhy=@vZ^QW#6=2<4@~}97pehKg60M0lOcGt&@4Q<%xL#%;~v}`QOm?G z-Cdkxa1M;Uc11j=j73G>3f$7QHwjOTvb_8N-Yf~uMd;-`EWn=m+k`-Yh72MvhN)0* z&4maBL+M2|JWW5%?Gn}aQ_R~?!$n@>PBpVJNfLR%&`AT@iw(K?hY(rTUA@SU)p%Qz zm?te+|DFi5Hw~3*{yJNBg4xQ*XIz|?_rp3*`*;g`?tgj_oeZPQ8uFlu*hOMX`z8NGY!#xFQhZum6qYqOiiL;uRvW#(C zvx4`Z4ay{oweLC?Nz0t%iM;(3_9+w!XY#9J2-mJz47|%V5n;N5+Teh8;YjQf08feP z>7TU;SHQG6AK=qVkSAeYT@{sUBA0ed)|=D5LBp7|>G6k$Bf=D;6f}CQ}k5NBhZIA=SKB6`uIAgbElBu_3Bx_}jkR zwV7lP!(Bo+tG}xJQHSi-CIV}F|I>OT1-o(&i%2Vw3;G7P zyJoFqYolW!kowBcb(*GblaP`OH`)5k zProlObHbm(%GmUE@)!8iZnlV2=?6~W&3BR~QsBYR!P#63`b#Q`YkySk@z2=NL5LW+ zX-P{kawt^f0ue{?6K`1vlYWMp>~)p{dnYmR*d!wIw@9I!1&?PXV3w1V zLspNBJtvOn)+N2Jkod=4dpIXPG3Evx(h>x%!0p~F7VU^>MH{w4l=#-bx&`(`JU@UU zJ+@ihN=@gJo?Xgzta{tmPE{`a+hWJ=2#nW3gi#hMC!f70Lw=ShX8 zu`%x3rFWk1i-bOsh4qpy>Cx=!(gp%lla z*YiMz&qLr1mxfvLxVZN^n{+$mq`cpZlN1-kr z>g@@YU_}m!RSsK4_Rj<){c@K~6&IxI<9OsaDNp#}q8aGicqp&VeRSX%*Np2%c^K$E z@%VOqn#%P&n2K_$1!r9|h@1|owX*GCAUiK3B$ph$08(ZT_NAU;BIMp^JBuHI3)4s> zOW_Rg3?~!_?j44g^q?hcL^BzNLMdi?dBXQ)O?_z2@FFIRGufAT?4`-^gR;?A z5j`kq8aL(tH0n&-RHj{X8kyb92sPw%U4Sm7zVTU`1YDA^+=YK7z>qhg@ z$`@34{{xP_rrRQP`N`Qf0kWg=BrlEI2a&W4x3$5n6E@XrJ%M(T(Br~2eGPi-WH97p{{5$V?7qUX;jmY7L z8c=%`i`je8Zl58#^$!PqhyqA`w8KyTH(d@sCyKsYf5DCx!7ULPpg~7h57Ic{Ye+*!0cc1tKGOI`acz+tDzo^st;a@L&IMa3)3S+k}Gu!)fy1H!l))y#D<|T|95# zlzucnG;IRs*g%|Ty9I2(j9cY5+>9p=uzO$09fJ96ivnaMNs{|Z0teb#&DE;&auH** zjQd4Hc27@FHW>VF+W*?|7whOu#^7%5jknmkb;zNZN+@-m9G;eW=$z!eac;@EsTTFA zv17boZ#8!ZE$xRd>##|fUFynkzkqCw;Y+-)!y~&4bb4qtQ3ILKYB5M|X}-QFnL+P0 ztSlJ#DEcoYU0l^}XS{KhMla8}s%fy4W{QtFU7MhXij85D91HK|Q;I~{N{(jj)+T(; zhL(Ce@#I+@7noypjo)Ifn#zpy7iSHa#3!kfCo&=4S#+(xTk7irj_Q3jiVb|<88`h1 z@O_o(ud;3Q+jETMUz0(jnWedRSD43vf3@lRy=fyRu?g6<4wL7Emb|6> zgo-rN1(t0pWEHf}*g__!uA!e<6vU-a@+tzQ+CzX_)ay(sk?E8-0jR!|A@22*A zd2v}le!yv=&%vmqz&hPun6E?YtowWFiT>Ra_l~?__}1p&x?wTD4wh-ZJu62PS-c$& zoV5z;39~Q~Ebf%-tncS~VOFshs2a?__!7C5CVb22C!`x5JCnDI^#hhe4yLB`>hZ{& z{R-?BV|=^8mH{<0l zh%n_-;CS-HIQ-@{Z0?;E96r85FDwJM7=O;hWeAxlZ$0g`g>^jYn`PqS9&Q&!HiTy( zFxopzB(9+QICvR4>*K3@DezPwDrmR`AT@N}lr;f1*o&7$xSy~gxr*!zw5 zlp<9S16h*o39=v@GUpk6BWlcKCy)2Wf;04KskBx1z}ChZIo7{+AmPT7V!%EV)~XD4 z=BfnKom}dQ8WdvgsNcB$ z-NWkZ5kYCl@5~d+@7wh3Ym|X~GeVG8%3N(&UE^eIwN-;qVCPG0Y<3+=T1@P8ln_Dh*KOq92{qZ|49137x({q4F3;D_y5Ju0fB?4*W{Z_6|J?tc=G}uanzn^s+1`~ GL;eq?CZWUt literal 0 HcmV?d00001 diff --git a/documentation/images/grub2_menu.png b/documentation/images/grub2_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..69e1457d49b9e8de4abaf373aea435b502929b62 GIT binary patch literal 3089 zcmeHJYfw{37LMZJtPH5@XnbMD(Xmz$VR$RZU3n}j0wX9Wh>>ytF+$`aL3!L66r%!W z6fsED6uuAw0Ynot(W^%B5g@COfI&z>ga9D~gpk+0w>Q>qO>Ncw+`sFIZNjd2n5@0TLZ!g1S^z4nAtwl%CaK!>w_#XBRxFGkHBqPK5QYg61RkG zArKlEHfY>87XIBYJ9Y(Hu&k^M08mCCB>IaYE&MM>x9&|R5bQ)>#*A0gyT1|$Hs`km zY}u71*OUuVl&=>B7Fw^{>8!NAo8u=UZ?SIq>F+2>RPp4-y9-;aXlb)GVAyW3*>1Ed zVs}l*n{ZkT%{r>TS9~+%9OJJXD(r zF{A~r0F;9ymB_B1Q&E*GU*(JHt61@XIGQ^}<}D+ihZj@wr-sNuU~lGceZo+@Z;EZu zCogCN@8E?@76(4|RI$OBhO@kW2e&}CE-dP~4_4c$fblAi2@~7kd8}#2ppoDq?FKXE_nA_W<#~l>JBJ3*@!t>0AFPB(>(_j*Ih+tCn1V{ta-8 zLg8hsLkCD0neH|)pxY?Pwr@^~Gc2}-2P8$mfgyXkqP=Uuoe!5Fk!m72GN%LRhLar$9yVAAZ0#=a2@~zqKLgWL zI9iE81+c*fdU6S;N&qBro#uP*H<(RmRF>TSv!@S`8~7VZAd6Y)kB`H~$zr?5Agua8 z(QDG1trN)7_orS;W3L}`FKU1OPy8CnaHbudykTJUre>8i^U4w;eCeB0VO2r_nm%Sw z{k#EaG}8K}*nK^8P7fCgykINnTVoNVfnlVWeYAr*+C}g4-#_xKU@eXPF1YRVL40_W zT$bw9U)T?6zi6R53)c||ba>nWm#OEQ6jb6%SPmi#bV-ls#uS{5lgAQ9sWjm@4b}$@ zDe0)K1o6o8R;d(OOqDSMpC)>Nz{__JIBSk; z0N*br3Q|3ZS+lW27)8Apo$Sg6_i5*i0&#Y};Q&UNLKxK9g$25K#*n^#48Dz*VstdG zsa_k`>cnfSK^Yy$BLAtm+Sf6hd8@%5_bUY;OieZ#s6-Jq4-?__{6USg4PeWVbFgsX zEa25C%W$0lshER_9>|}KIhk?2gRZV0=>`L8a1nzW@c464-8n#DN+W6E!ttI0BsdS> zjRonPUeSBOg)i6fdMyA%%NCbsm8r?g@#CXspj3;iiM8;{6&ITDQU;WaIhflmXF^FB zMF<+c%qW<{W>Ag06F-r|bxwYt7{3PKTmSJDzJ}my7X1GY;iAz}9!@U!-@=hVuPb*; z)3B~B5&MuL>cm~vigxr~hc2{RDGXV$|7K5mg`uuG7G_(QRB>D)mDy$Fu*=aQ%)d>J z`0T6bN#BBJ4T;SK2yxd4sLLjcjb={2lMz|KR&vx8hy#HP_uh9Lv$< zq)CSALMrqdBt7sV|YsXo%05oWJ?>Hhp^lG=T&|899Zb2?iT{DS>t zs!L(Cnbxz~nOqNn|H_27Bl*#oXT4*s(=BPf0wz7aZnydH%y!e_5waK!IM88q<< zQG>;`b2$(t(7#iP?nsU3g6zgrH78s?QB9~r1 zf8I_1IS*r)CrLtJ9HvT#HLld4ln3%pT4Rxa@H>Pn=WZHkT{kLTBYS%FB&@VEz9N^&ES@;z z=;^5UJ`mr^)tc5kiLEs4=`AdVM%g&F+TAyW+4>=At#BvqgokvYc{MYF0Dc!nV!(E3 z%|83os?2cIY!7_R@QCk&T=~e5A`#$Gm@;$h{-3v5+}})L)d_*% z1TFZcrb7|O5$uZHR-0Hiam4Tt(QBiZV%N-&k*4Y=vxguJ@FOpTX`6>jWOo@MYI5uo zybyk5*WBBN>SZq?8QJ}`oH2VH#X~Eb%9J*b$h~gMyR;fKvg@2%XIONIcyBWI1LaM1vT{>n-$hP5 pAYA`Qmb(1eDu25&RP+#;v23aHGArfGOO|$>uq`k&fa`Z4|6dhPtxx~} literal 0 HcmV?d00001 diff --git a/documentation/kernel.md b/documentation/kernel.md index 6b866788..9419d443 100644 --- a/documentation/kernel.md +++ b/documentation/kernel.md @@ -1,6 +1,12 @@ # Kernel Version + Linux kernel version used for supported boards.
+Default kernel tree: 6.1 LTS | Board | Version | |-------|---------| -| Raspberry Pi (3&4) | 5.15.x | +| Raspberry Pi 3 | 6.1.47 | +| Raspberry Pi 4 | 6.1.47 | +| Open Virtual Appliance | 6.1.47 | +| Generic x86-64 | 6.1.47 | + diff --git a/documentation/python-packages.md b/documentation/python-packages.md deleted file mode 100644 index 68aa8637..00000000 --- a/documentation/python-packages.md +++ /dev/null @@ -1,127 +0,0 @@ -# Python 3.8 - -## Default installed Python libraries - -The following Python libraries are installed when Mycroft has been fully booted and configured; - -Package Version ------------------------- --------- -adapt-parser 0.3.4 -appdirs 1.4.3 -arrow 0.15.2 -asn1crypto 1.2.0 -astral 1.4 -beautifulsoup4 4.8.1 -bs4 0.0.1 -cachetools 2.1.0 -casttube 0.2.0 -certifi 2019.9.11 -cffi 1.13.1 -chardet 3.0.4 -Click 7.0 -colorama 0.4.1 -colorzero 1.1 -configshell-fb 1.1.18 -coverage 4.5.1 -coveralls 1.5.1 -cryptography 2.8 -daemonize 2.5.0 -ddg3 0.6.6 -Deprecated 1.2.3 -docopt 0.6.2 -fann2 1.0.7 -fasteners 0.14.1 -feedparser 5.2.1 -gitdb2 2.0.4 -GitPython 2.1.11 -google-api-python-client 1.6.4 -google-auth 1.5.1 -google-auth-httplib2 0.0.3 -gpiozero 1.4.1 -gTTS 2.0.4 -gTTS-token 1.1.3 -holidays 0.9.10 -httplib2 0.14.0 -humanhash3 0.0.6 -idna 2.7 -ifaddr 0.1.4 -importlib-metadata 1.2.0 -inflect 3.0.2 -inflection 0.3.1 -ipaddress 1.0.23 -jaraco.itertools 4.4.2 -lazy 1.4 -lxml 4.4.1 -monotonic 1.5 -more-itertools 8.0.2 -msk 0.3.14 -msm 0.8.3 -multi-key-dict 2.0.3 -mycroft-core 19.8.4 -netaddr 0.7.19 -num2words 0.5.10 -oauth2client 4.1.3 -oauthlib 3.1.0 -olefile 0.46 -padaos 0.1.9 -padatious 0.4.6 -pako 0.2.3 -pep8 1.7.0 -petact 0.1.2 -Pillow 6.2.1 -pip 19.3.1 -pocketsphinx 0.1.0 -precise-runner 0.2.1 -protobuf 3.9.1 -psutil 5.2.1 -pulsectl 17.7.4 -py-mplayer 0.1 -pyalsaaudio 0.8.2 -pyasn1 0.4.7 -pyasn1-modules 0.2.7 -PyAudio 0.2.11 -PyChromecast 3.2.2 -pyCLI 2.0.3 -pycparser 2.19 -pycrypto 2.6.1 -pyee 5.0.0 -PyGithub 1.43.2 -pyjokes 0.5.0 -PyJWT 1.6.4 -pyOpenSSL 19.1.0 -pyowm 2.6.1 -pyparsing 2.4.2 -pyserial 3.0 -python-dateutil 2.7.5 -python-vlc 1.1.2 -pytz 2017.2 -pyusb 1.0.0 -PyYAML 5.1.2 -requests 2.20.0 -requests-futures 0.9.5 -rsa 4.0 -setuptools 41.4.0 -sgmllib3k 1.0.0 -six 1.13.0 -smmap2 2.0.4 -soupsieve 1.9.4 -source 1.2.0 -SpeechRecognition 3.8.1 -spidev 3.4 -texttable 1.6.2 -tornado 6.0.3 -tzlocal 1.3 -uritemplate 3.0.0 -urllib3 1.24.2 -urwid 2.0.1 -uuid 1.30 -websocket-client 0.54.0 -wikipedia 1.4.0 -wolframalpha 3.0 -wrapt 1.11.2 -xmlrunner 1.7.7 -xmltodict 0.12.0 -xxhash 1.2.0 -zeroconf 0.23.0 -zipp 0.6.0 - diff --git a/documentation/roadmap.md b/documentation/roadmap.md deleted file mode 100644 index 95b74b24..00000000 --- a/documentation/roadmap.md +++ /dev/null @@ -1,150 +0,0 @@ ---------------------------------------- -**MycroftOS - Version 0.1.0 - alpha 8** - -ChangeLog: - -- ~~Ondemand governor for both RPI3 and 4 (instead of performance)~~ [DONE] -- ~~Fix: MPV not compiling because of missing LD stuff~~ [DONE] -- ~~Update to latest LTS kernel and drivers / firmwares~~ [DONE] -- ~~Update to latest LTS buildroot (20.02.1)~~ [DONE] -- ~~Update to latest Mycroft version and dependencies~~ [DONE] -- ~~Addition of additional packages for the near future~~ [DONE] - * ~~OpenCV~~ [DONE] - * ~~espeak~~ [DONE] - * ~~Python-Numpy~~ [DONE] - * ~~Motion~~ [DONE] - * ~~Mosquitto~~ [DONE] - * ~~Squeezelite~~ [DONE] -- ~~Add the last bits of the LAN-MAC address to the hostname~~ [DONE] -- ~~Update spotifyd to latest 0.2.24 version~~ [DONE] -- ~~Update snapcast to latest 0.19.0 version~~ [DONE] -- ~~Update respeaker driver to latest dev version.~~ [DONE] -- ~~More microphone support~~ [DONE] - * ~~PS3 Eye~~ [DONE] -- ~~Cleanup buildroot:~~ [DONE] - * ~~rootfs default overlay seperate~~ [DONE] - * ~~device specific overlays~~ [DONE] -- ~~Look into animating the boot splash screen, showing progress during boot~~ [DONE] - * ~~Add and implement psplash~~ [DONE] - * ~~Update all services to update psplash~~ [DONE] -- ~~Change the wording on the splash screens;~~ [DONE (Removed)] - * ~~Safe to reboot -> Safe to reboot / Rebootig now~~ [DONE (Removed)] - * ~~Safe to poweroff -> Safe to poweroff / Powering off~~ [DONE (Removed)] -- ~~Make use of systemd preset files (/usr/lib/systemd/system-preset/-.preset)~~ [DONE] - * ~~wpa_supplicant@wlan0.service~~ [DONE] - * ~~wpa_supplicant@ap0.service~~ [DONE] - * ~~Enable any other mycroftos services that needs to be enabled by default~~ [DONE] - * ~~Remove all systemd (enabled) symlinks in the external packages~~ [DONE] - * ~~Disable any newly installed service by default. (/usr/lib/systemd/system-preset/99-default.preset)~~ [DONE] - * ~~wpa_supplicant systemd file can now be placed in rootfs-overlay / patch to be removed~~ [DONE] -- ~~Fix python-speechrecognition package. Do not copy flac binaries~~ [DONE] - - -TODO: - -WiFi: -- WiFi does not come to life after setup with new 2020.02.1 version (found cause: see systemd preset task above) -- Add 5G support to the wifi system (Country setting most likely) - -Enclosure: -- Implement initial framebuffer drawing GUI - * Look into showing the pairing code on the HDMI as well (look at mycroft's system) - * Look into showing the IP address on the HDMI as well (look at mycroft's system) - * Look into combining the wifi code, the framebuffer code and the enclosure code into one system. -- Move over / Integrated the WiFi setup into the Enclosure code. - * Change WifiSetup splash; MycroftOS-Setup -> MycroftOS-WiFiSetup - * Have a look at the wifi scan to exclude non real SSID (“ID List”) - * Figure out how to make the wifi password box to be able to show password (eye icon) -- Enclosure code for enabling services, halt, reboot, etc -- Enclosure code for pulseaudio control (volume mostly) - -System: -- Systemd notify and Watchdog support to make starting/stopping/restarting and failures way more robust. [WIP] -- Enable (hardware) watchdog support. -- Include changing the hostname from the MycroftOS settings skill without messing up above MAC addition. -- Look into the msm error/warning "no package manager found" (there is none, but just handle the warning) -- Included volume skill can't be updated - * Should be changed to pulseaudio anyway, but... - * Check if the included volume-skill can be updated, via offical git commits -- Avahi zero config publish to be set up (pulseaudio, mpd, snapcast, etc.) -- MycroftOS settings skill to be able to setup smart speaker services / software -- VLC Framebuffer video playing support (if not accelerated, check omxplayer but needs to be created as audio backend within mycroft) -- Add and make configurable, where sound output has to go; - * BT Speaker (A2DP) normal (Use a bluetooth speaker as output) - * Bluetooth mic/speaker combo support using HSP (use headsets as input/output for Mycroft) - * Airplay (example: SONOS) using module-raop-discover and module-raop-sink of PulseAudio - * Autoconnect trusted BT devices as soon as it sees them using: module-switch-on-connect from PulseAudio - -Documentation: -- Change README with all new changes [WIP] -- Update / Complete "documentation" folder and docs - * Building.md - * Boards.md - * Kernel.md - * Python-packages.md -- Instructions / Wiki for most common and different aspects and functions; - * Installation - * First run - * Configuration - - Smart speaker functions - - System Services - * Spotify setup - * Squeezelite setup - * Snapcast Client/Server setup - * Bluetooth speaker output setup - * Airplay speaker output setup - -Cleanup & Maintenance: -- Fix / Check all Buildroot package dependencies (SELECT and DEPENDS references within Config.in) -- Cleanup buildroot config file - * remove / disable any unused packages that might have slipped in while testing / debugging / etc. -- Make sure all Skills from the market can install (python dependencies either available or pre-installed) - - ---------------------------------------- -**MycroftOS - Version 1.0.0** - -TODO: - -- Add an first initial GUI system just as Mycroft.ai (QT5) - -- Cleanup the kernel config - * Remove unused drivers and stuff (DVB and such) - * Separate default config into systeemwide .config - * Board specific configs as overlays - -- Implement easy (OTA) update system (RAUC or SWUpdate, not sure yet) - -- Support for more devices / boards - * OVA (Virtual system - Virtualbox) - - ---------------------------------------- -**MycroftOS - Version 1.1.0** - -- Build precise from source at build time (0.3.0 dev version) - * create buildroot packages for all dependencies. - * create buildroot package for precise-engine & runner - * create buildroot package for wake word modules (including the commodity ones) - * figure out how to give back to the communicty by allowing recording of wake words easily - -- Support for more devices / boards - * Rockchip boards - * ReSpeaker Pro V2 - * Odroid - * X86 / 64 - * etc. / ideas - -- Implement first initial WEB frontend/backend system for configuration and all - * Backend for settings, configuration and update - * Backend pulseaudio control (Already available project as quick fix, but needs to integrate with MycroftOS system) - * Frontend for possibly accelerated browser hooking into the Mycroft GUI - -- 64bit support for RPI3 ~~and RPI4~~ [WIP] - -- More hardware/microphone support - * Google-AIY - * Kinect-360 - -- ReSpeaker Mycroft LED pattern which is blue-isch and looks like the logo of Mycroft -