From a81f6e2c62155a2afdb7c235e86358728baf124b Mon Sep 17 00:00:00 2001 From: Vijay Dhanraj Date: Tue, 12 May 2020 16:46:33 -0700 Subject: [PATCH] doc: Enabling ACRN on top of QEMU/KVM Tracked-On: #3198 Signed-off-by: Vijay Dhanraj --- devicemodel/samples/launch_ubuntu.sh | 49 ++++ doc/develop.rst | 1 + doc/tutorials/acrn_on_qemu.rst | 292 ++++++++++++++++++++++ doc/tutorials/images/acrn_qemu_1.png | Bin 0 -> 16514 bytes doc/tutorials/images/acrn_qemu_2.png | Bin 0 -> 16808 bytes doc/tutorials/images/acrn_qemu_3.png | Bin 0 -> 5714 bytes doc/tutorials/images/acrn_qemu_4.png | Bin 0 -> 7146 bytes doc/tutorials/running_ubun_as_user_vm.rst | 2 + 8 files changed, 344 insertions(+) create mode 100755 devicemodel/samples/launch_ubuntu.sh create mode 100644 doc/tutorials/acrn_on_qemu.rst create mode 100644 doc/tutorials/images/acrn_qemu_1.png create mode 100644 doc/tutorials/images/acrn_qemu_2.png create mode 100644 doc/tutorials/images/acrn_qemu_3.png create mode 100644 doc/tutorials/images/acrn_qemu_4.png diff --git a/devicemodel/samples/launch_ubuntu.sh b/devicemodel/samples/launch_ubuntu.sh new file mode 100755 index 000000000..40d84b21d --- /dev/null +++ b/devicemodel/samples/launch_ubuntu.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# Copyright (C) 2020 Intel Corporation. +# SPDX-License-Identifier: BSD-3-Clause + +function launch_ubuntu() +{ +vm_name=ubuntu_vm$1 + +logger_setting="--logger_setting console,level=5;kmsg,level=6;disk,level=5" + +#check if the vm is running or not +vm_ps=$(pgrep -a -f acrn-dm) +result=$(echo $vm_ps | grep "${vm_name}") +if [[ "$result" != "" ]]; then + echo "$vm_name is running, can't create twice!" + exit +fi + +#for memsize setting +mem_size=1024M + +acrn-dm -A -m $mem_size -s 0:0,hostbridge \ + -s 3,virtio-blk,/home/guestl1/acrn-dm-bins/ubuntuUOS.img \ + -s 4,virtio-net,tap0 \ + -s 5,virtio-console,@stdio:stdio_port \ + -k /home/guestl1/acrn-dm-bins/bzImage_uos \ + -B "earlyprintk=serial,ttyS0,115200n8 consoleblank=0 root=/dev/vda1 rw rootwait maxcpus=1 nohpet console=tty0 console=hvc0 console=ttyS0 no_timer_check ignore_loglevel log_buf_len=16M tsc=reliable" \ + $logger_setting \ + $vm_name +} + +# offline SOS CPUs except BSP before launch UOS +for i in `ls -d /sys/devices/system/cpu/cpu[1-99]`; do + online=`cat $i/online` + idx=`echo $i | tr -cd "[1-99]"` + echo cpu$idx online=$online + if [ "$online" = "1" ]; then + echo 0 > $i/online + # during boot time, cpu hotplug may be disabled by pci_device_probe during a pci module insmod + while [ "$online" = "1" ]; do + sleep 1 + echo 0 > $i/online + online=`cat $i/online` + done + echo $idx > /sys/class/vhm/acrn_vhm/offline_cpu + fi +done + +launch_ubuntu 1 "64 448 8" diff --git a/doc/develop.rst b/doc/develop.rst index a8d407e2d..3be64ec67 100644 --- a/doc/develop.rst +++ b/doc/develop.rst @@ -74,6 +74,7 @@ Enable ACRN Features tutorials/trustyACRN tutorials/rtvm_workload_design_guideline tutorials/setup_openstack_libvirt + tutorials/acrn_on_qemu Debug ***** diff --git a/doc/tutorials/acrn_on_qemu.rst b/doc/tutorials/acrn_on_qemu.rst new file mode 100644 index 000000000..7998f985a --- /dev/null +++ b/doc/tutorials/acrn_on_qemu.rst @@ -0,0 +1,292 @@ +.. _acrn_on_qemu: + +Enable ACRN over QEMU/KVM +######################### + +Goal of this document is to bring-up ACRN as a nested Hypervisor on top of QEMU/KVM +with basic functionality such as running Service VM (SOS) and User VM (UOS) for primarily 2 reasons, + +1. In order for the users to evaluate ACRN. +2. Make ACRN platform agnostic and remove per hardware platform configurations setup overhead. + +This setup was tested with the following configuration, + +- ACRN Hypervisor: tag acrn-2020w19.5-140000p (Commit ID: b0ae9cfa2b374d3faad9f890ff61e88f97205ac8) +- ACRN Kernel: 5.4.28 (Commit ID: a8cd22f49f0b2b56e526150fe0aaa9118edfcede) +- QEMU emulator version 4.2.0 +- Service VM/User VM is ubuntu18.04 +- Platforms Tested: ApolloLake, KabyLake, CoffeeLake + + +Pre-Requisites +************** +1. Make sure the platform supports Intel VMX as well as VT-d technologies. On ubuntu18.04, this + can be checked by installing ``cpu-checker`` tool. If the output displays **KVM acceleration can be used** + the platform supports it. + + .. code-block:: none + + $ kvm-ok + INFO: /dev/kvm exists + KVM acceleration can be used + +2. Ensure the Ubuntu18.04 Host kernel version is **atleast 5.3.0** and above. + +3. Make sure KVM and the following utilities are installed. + + .. code-block:: none + + $ sudo apt update && sudo apt upgrade -y + $ sudo apt install qemu-kvm libvirt-bin virtinst -y + + +Prepare Service VM (L1 Guest) +***************************** +1. Use ``virt-install`` command to create Service VM. + + .. code-block:: none + + virt-install \ + --connect qemu:///system \ + --name ACRNSOS \ + --machine q35 \ + --cpu host-passthrough,+invtsc \ + --ram 4096 \ + --disk path=/var/lib/libvirt/images/acrnsos.img,size=32 \ + --vcpus 4 \ + --virt-type kvm \ + --os-type linux \ + --os-variant ubuntu18.04 \ + --graphics none \ + --clock offset=utc,tsc_present=yes,kvmclock_present=no \ + --qemu-commandline="-machine kernel-irqchip=split -device intel-iommu,intremap=on,caching-mode=on,aw-bits=48" \ + --location 'http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/' \ + --extra-args "console=tty0 console=ttyS0,115200n8" + +2. Walk through the installation steps as prompted. Here are a few things to note: + + a. Make sure to install an OpenSSH server so that once the installation is complete, we can SSH into the system. + + .. figure:: images/acrn_qemu_1.png + :align: center + + b. We use GRUB to boot ACRN, so make sure you install it when prompted. + + .. figure:: images/acrn_qemu_2.png + :align: center + +3. To login to the Service VM guest, find the IP address of the guest to SSH. This can be done via the + virsh command as shown below, + + .. figure:: images/acrn_qemu_3.png + :align: center + +4. Once ACRN hypervisor is enabled, the above virsh command might not display the IP. So enable Serial console by, + + .. code-block:: none + + $ sudo systemctl enable serial-getty@ttyS0.service + $ sudo systemctl start serial-getty@ttyS0.service + + .. note:: + You might want to write down the Service VM IP address in case you want to SSH to it. + +5. Enable GRUB menu to choose between Ubuntu vs ACRN hypervisor. Modify :file:`/etc/default/grub` and edit below entries, + + .. code-block:: none + + GRUB_TIMEOUT_STYLE=menu + GRUB_TIMEOUT=5 + GRUB_CMDLINE_LINUX_DEFAULT="" + GRUB_GFXMODE=text + +6. Update GRUB changes by ``sudo update-grub`` + +7. Once the above steps are done, Service VM guest can also be launched using, ``virsh start ACRNSOS --console``. Make sure to use the domain name + you used while creating the VM instead of ``ACRNSOS``. + +This concludes setting up of Service VM and preparing it to boot ACRN hypervisor. + +.. _install_acrn_hypervisor: + +Install ACRN Hypervisor +*********************** + +1. Clone ACRN repo with ``tag: acrn-2020w19.5-140000p`` or latest master. Below steps show our tested version, + + .. code-block:: none + + $ git clone https://github.com/projectacrn/acrn-hypervisor.git + $ cd acrn-hypervisor/ + $ git fetch --all --tags --prune + $ git checkout tags/acrn-2020w19.5-140000p -b acrn_on_qemu + +2. Use the following command to build ACRN for QEMU, + + .. code-block:: none + + $ make all BOARD_FILE=./misc/acrn-config/xmls/board-xmls/qemu.xml SCENARIO_FILE=./misc/acrn-config/xmls/config-xmls/qemu/sdc.xml + + For more details, refer to :ref:`getting-started-building`. + +3. Copy ``acrn.32.out`` from ``build/hypervisor`` to Service VM guest ``/boot/`` directory. + +4. Clone and build the Service VM kernel that includes the virtio-blk driver. User VM (L2 guest) uses virtio-blk + driver to mount rootfs. + + .. code-block:: none + + $ git clone https://github.com/projectacrn/acrn-kernel + $ cd acrn-kernel + $ cp kernel_config_uefi_sos to .config + $ make olddefconfig + $ make menuconfig + $ make + + The below figure shows the drivers to be enabled using ``make menuconfig`` command. + + .. figure:: images/acrn_qemu_4.png + :align: center + + Once the Service VM kernel is built successfully, copy ``arch/x86/boot/bzImage`` to the Service VM /boot/ directory and rename it to ``bzImage_sos``. + + .. note:: + The Service VM kernel contains all needed drivers so you won't need to install extra kernel modules. + +5. Update Ubuntu GRUB to boot ACRN hypervisor and load ACRN Kernel Image. Append the following + configuration to the :file:`/etc/grub.d/40_custom`, + + .. code-block:: none + + menuentry 'ACRN hypervisor' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-e23c76ae-b06d-4a6e-ad42-46b8eedfd7d3' { + recordfail + load_video + gfxmode $linux_gfx_mode + insmod gzio + insmod part_msdos + insmod ext2 + + echo 'Loading ACRN hypervisor with SDC scenario ...' + multiboot --quirk-modules-after-kernel /boot/acrn.32.out + module /boot/bzImage_sos Linux_bzImage + } + +6. Update GRUB ``sudo update-grub``. + +7. Shutdown the guest and relaunch using, ``virsh start ACRNSOS --console`` and select ACRN hypervisor from GRUB menu to launch Service VM running on top of ACRN. + This can be verified from ``dmesg`` as shown below, + + .. code-block:: console + + guestl1@ACRNSOS:~$ dmesg | grep ACRN + [ 0.000000] Hypervisor detected: ACRN + [ 2.337176] ACRNTrace: Initialized acrn trace module with 4 cpu + [ 2.368358] ACRN HVLog: Initialized hvlog module with 4 cpu + [ 2.727905] systemd[1]: Set hostname to . + +8. When shutting down, make sure to cleanly destroy the Service VM to prevent crashes in subsequent boots. This can be done using, + + .. code-block:: none + + virsh destroy ACRNSOS # where ACRNSOS is the virsh domain name. + + +Service VM Networking updates for User VM +***************************************** +Follow these steps to enable networking for the User VM (L2 guest): + +1. Edit your :file:`/etc/netplan/01-netcfg.yaml` file to add acrn-br0 as below, + + .. code-block:: none + + network: + version: 2 + renderer: networkd + ethernets: + enp1s0: + dhcp4: no + bridges: + acrn-br0: + interfaces: [enp1s0] + dhcp4: true + dhcp6: no + +2. Apply the new network configuration by, + + .. code-block:: none + + $ cd /etc/netplan + $ sudo netplan generate + $ sudo netplan apply + +3. Create a tap interface (tap0) and add the tap interface as part of the acrn-br0 using the below steps, + + a. Copy files ``misc/acrnbridge/acrn.network`` and ``misc/acrnbridge/tap0.netdev`` from the cloned ACRN repo to :file:`/usr/lib/system/network`. + b. Rename ``acrn.network`` to ``50-acrn.network``. + c. Rename ``tap0.netdev`` to ``50-tap0.netdev``. + +4. Restart ACRNSOS guest (L1 guest) to complete the setup and start with bring-up of User VM + + +Bring-up User VM (L2 Guest) +*************************** +1. Build the device-model, using ``make devicemodel`` and copy acrn-dm to ACRNSOS guest (L1 guest) directory ``/usr/bin/acrn-dm`` + + .. note:: + It should be already built as part of :ref:`install_acrn_hypervisor`. + +2. On the ACRNSOS guest, install shared libraries for acrn-dm (if not already installed). + + .. code-block:: none + + $ sudo apt-get install libpciaccess-dev + +3. Install latest `IASL tool `_ and copy the binary to ``/usr/sbin/iasl``. + For this setup, used IASL 20200326 version but anything after 20190215 should be good. + +4. Clone latest stable version or master and build ACRN User VM Kernel. + + .. code-block:: none + + $ git clone https://github.com/projectacrn/acrn-kernel + $ cd acrn-kernel + $ cp kernel_config_uos to .config + $ make + + Once the User VM kernel is built successfully, copy ``arch/x86/boot/bzImage`` to ACRNSOS (L1 guest) and rename this to ``bzImage_uos``. Need this to launch the User VM (L2 guest) + + .. note:: + The User VM kernel contains all needed drivers so you won't need to install extra kernel modules. + +5. Build ubuntu.img using :ref:`build-the-ubuntu-kvm-image` and copy it to the ACRNSOS (L1 Guest). + Alternatively you can also use virt-install to create a User VM image similar to ACRNSOS as shown below, + + .. code-block:: none + + virt-install \ + --name UOS \ + --ram 2048 \ + --disk path=/var/lib/libvirt/images/UOSUbuntu.img,size=8 \ + --vcpus 2 \ + --virt-type kvm \ + --os-type linux \ + --os-variant ubuntu18.04 \ + --graphics none \ + --location 'http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/' \ + --extra-args "console=tty0 console=ttyS0,115200n8" + + .. note:: + Image at ``/var/lib/libvirt/images/UOSUbuntu.img`` is a qcow2 image. Convert it to raw image using, ``qemu-img convert -f qcow2 UOSUbuntu.img -O raw UOS.img`` + +6. Launch User VM using launch script from the cloned repo path ``devicemodel/samples/launch_ubuntu.sh``. Make sure to update with your ubuntu image and rootfs + + .. code-block:: none + + acrn-dm -A -m $mem_size -s 0:0,hostbridge \ + -s 3,virtio-blk,/home/guestl1/acrn-dm-bins/UOS.img \ + -s 4,virtio-net,tap0 \ + -s 5,virtio-console,@stdio:stdio_port \ + -k /home/guestl1/acrn-dm-bins/bzImage_uos \ + -B "earlyprintk=serial,ttyS0,115200n8 consoleblank=0 root=/dev/vda1 rw rootwait maxcpus=1 nohpet console=tty0 console=hvc0 console=ttyS0 no_timer_check ignore_loglevel log_buf_len=16M tsc=reliable" \ + $logger_setting \ + $vm_name diff --git a/doc/tutorials/images/acrn_qemu_1.png b/doc/tutorials/images/acrn_qemu_1.png new file mode 100644 index 0000000000000000000000000000000000000000..21952ca866d162520996bf723dbffa7ca676bb2f GIT binary patch literal 16514 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 X+=U}n0`PwWu%16vev&V3{O*4MLL^E% literal 0 HcmV?d00001 diff --git a/doc/tutorials/images/acrn_qemu_2.png b/doc/tutorials/images/acrn_qemu_2.png new file mode 100644 index 0000000000000000000000000000000000000000..70dc13bae1d74d17b565dd65a1e4d29a5e77759a GIT binary patch literal 16808 zcmc(`cTm$^*Dj0&6;P^l1Zi@EAW{rPAWBDpD7{BI2mui(p(KhTT|}fqqKNd~dlcy{ z(o29yM|ur}v=i_9nRCuN=e*~ccjlY#{exkCJDFtdwO7{K*R`${^~g}?3Ox@!4Gql| zJzY&B8k)1}G&E-fFP){X@EKUBQU9IsHPTV1DIMhdO?^1;df(ta4NXNn1JRzA`b_ss z*V31UhVjRrzcXFl`A#%6_f_>Y@0$eLZMC$NIvaRlw>-)PFQ4aD=KN%nFn_On?|dR? zL32p+%3rsC-F^SD#_?kGn=^b_Zt52iyn&@pKHc0^ZI-qq{&mZ&V!UgLklE5m0m{2@ zT1tNCD6BczM2yT*w#&}Y(7eQi0WQ$c{ObG^M}4Z70ebTimI-B)9a08$Kf7(eLThLs zmuYD1t~Hl&{CUr}qSwb`XR9kT$}9HCTU!P-wBFv>xv|s%QwACu^ZUHkF9H6My(e2G zck0`i0;*b=*9G@Cj=?zPWsOU(6j~aFk?J_D4O22#g{}$zcuu3`kYsUZ5+&z}(gf7i zBYuE#Rd6UvB>smQaKlbDNi3^x>Qp4S$(FDxn*2NhB#1FP<9VO=uBLPG#PK;uzml`f z=lJflx+K)9DL{hsQD*xbSfQkSc1#+JRWb^^)^1#0{xows^{)L^r+>ifPWt`#?$1jqx!o9v0IQSS${NB4W?+-n9(HZ=4P zDjK10G%`x|1!O4vL5uKp*NUWhQ8g1mF@Y`jck&-lOHXKLJU^@Ze?B`IMm?u+ znc2~kCz>a$@ZvZ;`|8xmD{C1Ri%Js!{9LG430I0>6*Gh5th^+4L<`X%CSfJ0jz1pu8)gSHzrVk)=vX9S) z2xrH;s8lm2!Sjk=8|2UJv-qUg5?+(Pz#7X6)r8({PB%Fw-SGkoS^V-=f#yox@%|(; z3c+*^emvUFoZe}(Kyb3xc6XRj54ag-L&%y_dsvKp8o44~euql{__q(u@T*Q-20W3|S{*o>{&_|WvZ1@<5oDJyO-k-NpDI{Qy4d6?j{Q>jDB z-SidMuf-a=u}4m|b$jk)WrgxxFg}5Hpm`A=-94)rJ|)03#Q z@iUN3=80%wPU~>h4|@p{uhdxW+53L~ej3mD+k}s(F96IQ2Bmdmtzt)2SV^~PwGQMI zpZ4?-@mAOV5juLFnWy{wsaHY2nhzJ%ceT9&^Cp}UTR z-sx{z4_ayT0Z)({T6`N-53PqcQ12f8@RD24m_BTlK4wd}QdF*!h0gWz96J@4lN;Bd2) z-Nk)oagDXxMIhZvyBo(l82`%qH&%jtTCaE5E+I8iVc(tZ`>G4eFsBHuTkGeCAyiYI z0FO{V8QcwP&MDpcf=i;5e?m%Q2XD4-S zhU>rWC8$1caIoW#D<~LcdCMRVuIPl?!Kwwn-l+Gdm!}LTQ9h{rpq*_mIphq)wIWvG zp=F5Pa~qVWGs{ronfDt-VLl|xWL<#T9rnxq&sR$UEAXufpmju*&(8j&iUhjqNMvp) zjPW703`lHOZBUvUOLoS@o)wbII?ZPzbRI9mg_lkXpHQ90b%4T6B1?XJSs>?UmWb_* z0{l7ccI`;-A)B{mRN?BSW%Qjtrn#ii&%VECe3`|yH?)2V8PZV&vhQFuDP)7nHJ_Ul zVN)`0l0bAZ{*F>hbKQ6*=wH$pd*o3bZ(*T8lsiI)nnS-wjij6> z*hCvcJP)fP@6K`xTFbq7+JY5Nf(tG6_!ee8UiQYHggmCW6itVD5DbpIZ#ABb=eoy5 z8o%pUrmGOkC48Wj`ZO4cSi`LV-^#!6u$S->SsvLaA3$2}q+G(UwWh~#y)&2r*(2A) z{es6UK9DSNi@|=q6~0qGl`-|k-%onI9g}z#bcM4nVlqYw6B5sd}KLV5zxMWr?%N4lT= z3i!3K8?|HUa#vK5ZlKhp=mdP|ZRAk=>f&SQ{Q>#4Y_AxRJYz)syNvt3XpJfDkTS!m zyPWm8A`eZ$j76Hc8_ryc`G?ArL+xvYV zBco*~Rjaoax|d1s2&}YMoTSoXV7){2{F4_7CoW0u|Fmg9x{UcK2u-hhY6l8QaQNxI zYS-;#mqNGF>hKL+A1kR88@;sz9_y-ej5dg5!Ia|njsTy7;s8Bc*B1N(`EE&$=mJ%uPa72uA|aK{Y82xxC0P?u5d_)qYqOP|F+*nIOX{6wugn)1<`k% zes|5pUVtm_Z3;v6x{?rPoyUDe^tJqs{wto1nJTwv0=6_9DSoG<>S&`|Pjr|FzfqC|iGamT3-1hYs8*mjT&S+(>3 zrJSo0a4gy_#6GH57+)9?Qm&?l!Z{{R(a9VwDq)mMR<~g~A1H713m?g?z;QD-Z|wv$ zmbqwS_Z12ZmAK5qem<#?w)_;fS5LTIrg5Nj{Omkkc37kB7{mb;XGe{ZA0y4`K);}0 z`=N?|exlU0{sNN#v4SX^1?Br|m(M8n2zov(1b=MWN8MOPDZYI_P<99d34Rb58|RD7 zi20UJ`E@_Eds;jubeUPE^qqCSbEE`XYsQakpS-HecJ}bJY|+aS?=F*eHDF$+Pbf99 z1C}RAEZZ=a8K9gr#7uoOCfIJq4788EI%cYf#L$%%hU#TIu+fcA>}Z%?rwloGB}yXXD&QmCGYvN6#4@D!b1vu zZIIp$v4n32N5iR;WTCoeVOA};7uFVc3?cnl<^GoW7gs=TrCrf@r9a=LRuDIvC9PuE zFet&bmF%l7fszm?!~ED88^BCD4w4vl4n8vAO;+pGu+c_ z@%re5{KF`T?Psl8o9x!%KcxYcZ@XO1JC2W|wwF=2KYzhQ-xbtsNfD~vS|Z>66? z(09H@#jzOOp;m?4nHy_P1_z(W*Wx_VitgoMV|!Y1L|3P?qtr<+2)O~P%_>VPFpBb8LZ_-R ztl0d!?$AVaNM!}YJV^jO!sn?H>t}r%U8R^JK{--l6-Ng?d!sk2_82R0Eg!bwPoJ?l zl|$_EMKPyv)wyG$U!4LtQ$I_a=t#UJauTi`=xGAgqc==W#S@jU;*lj)!O0H*nmF!j zkuBkOD6Mf2wPHw&7GDpZa6y6+Zl{T`c}oZp0kg-Jc{-jiqthv#=I%iy&fpxQy4nY~ z!Aj)oH4rc2j{JSepFx3UW}A~|&#!z;WzZa_I!jh0br zIzrObenOSi`ig{rfMUaPVVR<}81BD_&8B2%%dR($yiRn>}7%;_=Ke z%FN=W#=rAoeTs9F_$fVDT9Dr#BrR6V0ef3jwq{+PBQg)v?hq9CA)dYG# z)WV8Mz3wqF)bZA)(DQQFlgd!5Lc~4*WG+Sm!0T8OcEcquwkOaFXyZPI4b>{dw_YD_ z_@CzLOfFewKKwgGntvKy^--AL#BzF)G98-0gYkU7M*)<*nX-YrG2 zw+4sS;u(BUZ6e5(lot|=Fe971e-I43cJTj!r&`ZeslU%?6Zb z5Ybdfc7%WK6fD8TiQyXZm)2DUEcbPx?r*TFcs{Lr zve=irrgy2-=^EC>uI&LqAOA)wA`O>lhWTi8dDzL^1wEbpp*D=o*z|jjm!JS#Leqv# zRv?S(J}B@7@Mp9h0@L2vXsUm3m9p6K)cAm?p-tlBgyOi3&Qpvlk%92x(P1W;S!tH$ zC3t9H(6;L$eSv?DE zcKyBBSS$aC$`R8Om2D_?S?_pjQ;ENtLOdl_ch@}nUQdP;lPqvQ-fe9jDR+OFc?YvQ zs3GUbvc}Ku9PEd%3g}xD>M)wXObb;6j?&faI>l7MU2M#Z)4)QtC!7r&5?oXkii@Q3 zTZV8QBq6*vNm7$Wi|u`XlLwC)W!T?TiBH+HgIo^bc`il0Gfj1F0`=YuT*XKv!43kn zUxYq-@K&mHFcS7azvBs5zNXtZXWubC4PE4GpH8_tH@FEdNS@ku&2asBaNfO8r7E;r z2k@*M@dI|J6vVBHE}&+2#OhT#l>y&IX$Q8c+(H#5yjZQEwgjbp5BJmNux9^wR_}o^ zC0pckTHS^d^cK!kWWWW;<(>(F8mAP!>QWY6F)qIe69!8B7c7gJt%O9>7=HeNUv}$ z1j7R$L?&viH5(SK!tNxrO#~O@it`w30B$Vm=M{#CWJfj~=@TGlCrS!e8wVvhthwAh z#Gqz`4b#cwaWL;Vbvv2PPC zVhY}DPdxbk9U^FO0!xIY$BWGMGl@Q$GADbFnEvolCvg4m0PY0 zWE4vq4%r`V@~3L%hp&C%W|Goe2F`n#s%5%5EOhY|tPu(ikPdsZkAQyD&nWUPF>QHD zzm4MyUFXWga@O;YN&1IERvgat-SQyNJgiL2EL7^cBF!CR1qIYFHF`N;J^Z9j1K}>DTL)Q?j27%MDz4rg{KV-N{C5C|8va_Agt^cF}YoXzw@G6`% zijo`evh65bS>nz*tCNaoJD5)Gf!w?JHAwYQ!&eefzxT9z>M~tG(etdlNOm@$zn-Zi zt|n&HaYN-Q=;x=5J0+1}lF@heIwTSevY60(rBsjVR1!^ho`2@_>Ho(-JKdzXzt7*~ zkAZArQ-*s|KO?+z_K|3<#qz({vVq+~=#MlN8FrNnbKfvB%qiHnNt~z_>FSE@(jprZaR)rLqo8zpJAfZU znto=Uir&HdAQv%vdsDPuR+q}nLKRNGIsH_aA25$R%fLM{T<+BCfPzGuO6+_tt+g~I zYj6W7PoXtsw2p{|?pPiZvPN_q+8V<>px&(cAY4p>x%MdJEg4LOXAf3vEaDRFB$ZiiMP=exy)>Nu z!nDN-<}Ox<{c?j{S5t~r#1gnFE)KfAe}k4M+2l0hI>fy$SZM@sqnWhjjhyJbHR?NX zKO#PwuuEi;?IcxTEKFCMsw>JG#opL3u*Z%-JUy*)@FPI74*ND}s8e@fHFuwXQ3kc* z2%T4kJ?14~ClEZ@2m&9@-{JmQ&E3D;UQ!b1jmE1bIrj+$8z3| zMB6PirIoY}&dE7wA(0hiMLYLHH<(bAA|TN+nb-j&QQ2BW%Snv6f@K>@1vw7e_hu@^ zKjB@Jb+HNzl?;U~mN-u-zJGdY2=f*n01BtnzLhscybj&g&zrV5X2Xd__4ahfu5p?` zHc=EaSmLvT4i8dB#0X%V7BTd%l{{)aGFEAj9bowb!*XCXW<^Bbb91JZHST$&R`jbsV{)sfsormw-M&fmw53 zmLC;S1o2Ha)vsP?WwT0P-<)9;27IsgbC^$KoR7i+U|d;e!*#ARpG2HLP8T??0^AJR zzGV5y$@{%P zP+@R==?|_6q8ma6&X2}@We~}PUad-yKwh0Vl2_wRdAsl?68FZkfJ=#N6RgIc#5t<} zx|etOz^TWRL(eczMc|skxdu=9j}Tok;m7^AzHLZF`!>Xp#stWR89-uG2E8B4j@`So ziq;w#h^}|_F51%@Tl&Jjnll&TSsf6Oo#G9XZPiw}yn0e6W3S@U@O05n53%T2o;w>K zGTXOdal&_?|2KlVj9+`e{-f1O?P(e!J9-vtvb6G|AWjs$by3ga@YPybos8Mn%3@r` zt(SLgu!(vz({{4Vp$><>%rV;KOxPzAMbn2E<^FwX;wWL^bGV|}s-BvX7ZdSw{kFEI zb=JTokY0|8$@zTVDf@9IB=&Ad;5J~c;5T$Xv^8*`s8B&~K>+RU*$WsBm^DH7JNL!92suz~^ zZO!#Qqu_QOnZ#eZal2EBl=JB_=zW|dGr_hn%AYI^LzUEm)S{=VnHEj(<-s zuFfB6)S&BRwoOsg`21F%Lfim92uSeOB2hllLssObQ;!GZL)nFi&ovP}J|4inQ1&D4f_*(7ORVQ$XUY1PDh^P)ZbmQq@ndvDgs?6%`{)+oZa_uDk0=r# z$W#E!2s)thy1x(fi$YuD!Z}1sI^dgOm?YTE(-`<^R}8kZKQFY2)f*=)I8w{GPz%m= ztuoV63LG+7lhJG|WJt-S2X1QZ?ITBw1r#;5H(6U;n7`dF@vgKgdp)9X=XS zUiue5Id0?`P*E;sM9xVY&r`}h#PE3>8fV)4D>t_AkiW!Byp;~8cEO@Y0d^eT3=*~e zJ`JjYb&v7k`1=?x%ABK{4s|TiTxk?^Cj}kf8JS3U9GJ^leqdXLPYildSzJbpBz-K`%u?I~ zoh>bUw>)KD-=bd)`~&BKsO z55+CKW1}kK?ksw7paa%j^IeYt93Y~8Pp&@Z<>@irpf(isheYH!5@|%1-w|4ahEZ$r zl-iOouVSFUThdb-r0hNmS7E%wmsKULv!H{_?U+f;+5!o*20026sUtXKdYhjJiT!lt zLpMR@+}~ZUFGyP}e2_tuv7r&d;E}iTkjLWR5$@>7;3jn>V1=fI~il9!fKl^r#ckx%4=@JNR=rYxwDJoFC$iG{@s#m&Wi9 zHXRA+m5G#cFi%&=jFo1#lF36hHlvF*8!jF|E6}VkD7}TN@k#;o`v<-0b+B>zDd<$Z z5-iISUjV2kqrHD_}|b{A}AqAez&iC@qi3%ORf*CN?-I5cD5mmUM0ybFVc-cSz9eM+c*o| zIOJD8e|_NuHtr?jjkBtzo`?k{2H7Z>G$i;7Mhae;DOd|%$}6;qXA^pI9dBSg0jBTMaln5v+uPRovKHs?^~Uq7^Rp+RRI*p5Xx zvI98q{iKT#Pkj~VjdkrLxR67g)B4w`y|K*&KjVfW;Z10Utu(u{`k|pAVxCL(ZfD6R z=aFEbm$a`S1O=virHKD90<``D-_S%o++Y0YV}O>`sYZW{$B2e@C+>C#u@0zw=a3hD z*S;z1Odf-686Ub_W1YKobsBdE(q$`(R8M*ty&kV6qt~>H9gS*EpzcL5 z=)sh!?kDtlQF}vmL=W8$4*3o_^BpJ(iE|ISQ*YMVm@s8c;ga15mD}WP(8HfIb_;g>v!-|F0@@n0$7}FaW$^r-_D4GCM{jgjX zl)}&w>4;#+rE(to>V=+?`$`Mg91S|80}si8*CS*4s;B@jcQvG&{8eA}9fp^*Ih=fW zdc(;moLe021}ym&c$8O<>}@RsamJ6`_i!UaW(PN#veO{sv56Y^P~T6|!(T42$l6Ao ztG)Fq3yUkJ#TDo+SV#1Q7!^xLn3hO(sQTIba;>W6lMLI~QM>}vB1}rlx~T{GEJ8wI zTB6o?%55EwTF)Tn1f>IeTq{Eid|NF|39c;@_MD(#D-ch)0dI_%nNp=yxH8&Zt?~>z zPM2_0pPqrQI5Ap{vTK(?(~hVF;O;1bmyA!$+4$?e%1|!K#=$D$SUx=cvfQK!nA4l7 zt)!HFD)he>Z~uDwA`_ve57w4kM88Ch&gi=};87h#i;L>ssZR|3Ng%xx)6`SfP^=lj zQYPcWHwWMM2Cq&zTnG-chcz{OENuDvSE+2LK04;GSPHlNu=y9eDOsh)+SSO4tfco= z>;+xZdbS+Gds*jjgpkOY3Nx6q-U8-TA7TOWWv;uGQ1l!98-vCODy+8Onh!=~dA_?o z;Znlc`9G0!Yj57+j$L@|RCmvD|Z77 zWsf1z8XvUI|4K~5iC0%3c|yfh=Yi>nfeFMHa>Q0&%J$-_2jrn@ckABC%QA=Qyq}#g zqmwNWFvWZFN2Iih4yh%10%pM<*t*{Pt?FDW^M79R{v|Z|bB`lmmsO$%3WyeV3X(M5 z>%&5)1)kxR;0r!Mt-t&;gA9?q=Bhd|^+2amPc)OsAgG>)ADNd_hj+^!oa=N_SLkgrxWu*Y9SkMR}kfckKC2 z#Suo8W1(ubjKZA6gD|tRY*?kmm5AqJaj`vNUF&vn#=O2_#iYsC!qj%L+KvMIP-o;2 z+T(eO%1uNTWp<;A2BLq`gRwX|Mnwwr+G=7W8_WrXaTTYIOz-|QYbQE~`Olm7WDXxM znoKPG^0Tj!qpW-Aj~Qi5)%9yBiF)?BdmILawB8l#43Pjj0G*A8wp!az!+mTHApK)e z2CFPT?Zfs0l^-8@*fi8ajWNVDuAm3qI>%!+?aw?HVDtn{PywduUD8JIo&CQkF}|6I zyMhdi2;s+57k6eS-Er1p_w|niDnip#)B5~lf*no~CSdDPduk=r&|u~t+v4;IH@Wzk z;GSW$#a*Zp5fZdNLP~F$vd9XR7CWQj*7TBcz*)%~{4Sh9E6B5oe*v=xW?#wY~L__G~Ase=y6{L}dvh^Lq3uY|Q0HGcC$<6yz8FNudSr=SGgFD+ZUtq%J>Y4(QSC4~y;8lD3O3Vl^TR1}xZ zDE^+Sr#^dms_s{$Fwe<+%zp%N(eVUn^y9I|WiBd?#*YPj6y)tN84fG#k!PuC$Y%Ac}1}XSHSu{%o$6;=M!M;d&gDAxVb@J1_p(AzwV(PY`0k{!^0P z<#2%0h*-_EYRA$0Kpdr~cDK+{tqeFME zi^jT3Wwz_pZ0k36=Z4sfgVh&l4dx_ABppZ=pOKBlzZS{9vonKg2G{{7kyBkpNR%l~ zoqj1c=%Kw4C81e*e|%r5@OT#^AGE11EyPe8nwNGy*+)y{`KP5f_Byh`$uj6lHPdVK z!90ERf7B_2z^B0Q5(OXC&%fjp_nOliCKZ%A#>SjyY}>QwJMn-U{##vUe~sWWL^7&X z;7M^+r*ASWuWeQt{GoLr3Zu{?c*#3{edqlz;kWBlw^amKbb#yw2GV`oH5Qu>Ir5*_ z4EpMNW`K5oyd8X1v>XWnF9d&K0x5pjq_bt-FI!*4R6wbCDJ-7A*|Egu3pLHHkYsMD zQtT>dNj$6c1y)CJ^eIbJp_-`;OBA2m?UPGYDs}ikg!q*dhG3qm z@T$v?g_Aizf@>ASwX;fUBJPSZVH;994t_~^$+uaC zwha_B;-+r6eFH#>$K=ipALP4d7$h=o$~)X|17rw1(AARtS$`1HI5iFmFRf95WNr5? zR<=$_;zSv!a)#BZ+*7F3#_fN}PO>OBJKNe}ye)d!8(5lS9w7_s1p zoU_ba9G%;1Hv!}ZncdphX;`+(zP8Y+ zJ?dKymg}o31RbapXrOi8euphu<`ZKSztWnSZ<`T+>Ux@#hu9$ZXGR--Yc;>5rp@}F zos&O}4zr#%T01Rd+Woj({V3#NAUE&2m;tR02^{LDVL8V-_H^avfL%XFWW?L^PsBz% zWTjmOnwS})SoswEA%9ZSa5*hY&K6}J(K$}hjZBRj`5`H}8TAq9o_l0D zQ*=k*5E-Yini{gv8u&fUH*l&Sr!@P5fYpzYx$9?8cvqery?mFf5b%eQ=>YbPN7{JW0{v8nub|oY^Pc_11L7 z&FXu#e{*oJ%0z9uQaZe-cZjWM!WJ+_5>B!eSiQCS7cuY%t{9Rz-v(!o58bw7hI*RZ z{@Ll(37Jk+Q^P6N{#E%aB@t=}*PxO~ z57gnJN!dh>cbebcFEGDc2`cAlKH86z2ayb%T0$M6tGgG#0}i1t+Jq9VJTIX;MjFtS}o^v8Fzeu2Tw^0slB#IHCbW)MV+Q)KZI!QyvcSR+C4@#e$`32n# z57FgKyof>GicqQlU@*=59U;?lTFP0)0>9B=%69m9p(c606`3rO7I_yc{a)8tUKx?M zHj9`AsK(_{WemAx=0d+mux6Yj^J@0cs84w7P!o&IBBiOy9>B6*WY~p;#F>-8bkzCr zXN_&oQ?ndLGobNyGAnu>s>n5DYGcWM!9Mu*>BK41s?b8@w1P0}Z0mj%4!uy0z2m4F z#Q>uTyb!{^ReRTb+9G80CeiOke40w)W9bFm+MRbVJ_QArYx3>o4P8Dm&WoE>VOjyM ztDZ@Udn`@Q6IhvD_KXnu)g2m?>P#*uO!%00_v+(JK*IK$5~AE}aLBXwZ21UwRUc_a3zQf6H$ETZ?Jkhp+Y z!&Yl8P6p0lz#${MB2Lc}39?#QEP$smw~X|&L0&aJ2J&3jEaN)p7YsuVL6VpZ^t2uP z-$zj(K?OF#4T#p(-6|Y#rK-;YwD6BP-hTuYv8C0$Z&g60t_8CMqD8u0dxB@#kjm!J z#U7-#_3FF9Wy_6K>RC;z{B4Y?&gruVcCX^fgc;m~bpk5-MhqACfm67nx$`^~I__AU zDme^id>o+a7B_skXU*`;DhDTk+{#F*0oxV-81V4=Lv2789dQf?NJE%pzX z`Kwq$OB4mas?^{dLBeJB4@o%%zm^{%1U-++ipMF1lEQ4hp)tu|qbAP~C}Kf#?LlqH zIyU)GK2i$-ZPPf6`m9!UZJGItz_8~5pHlMb3Rr`~C{EXS`N#ARv4wu3m@UXfM69ZT z;tTYkII0ekXLAj}cf`y<^%;bwaHSpA>bDQDh>!MoPM zp5(ksQQIO=J{;cicwI2Wo`iaXgrK4VfrKy7WoOVjrPK@0k+!|WeyW6QDr3eT3lQQ<)U&ydo)-M{L-AiKsX zk5vj{+f%T0WnUX9N)9SVh2~#WFhbs5e zCD5J%`w3V0idW0QaT~_kXy5;Y7`&u@4R!+D{(e^J8hh-;IvFKvR_OSNylB;=(>uQeLW|^*c}MM#Z%GC@7&$j9N~9 zvxy8}jm!1p{a<`vP%a7ZYQt>I*VdIIMk=L5ZaK>I{oNAx>Y$i5b!KFM>^Vl?%yDJ~`M zw_@#{Icdl8#NYd?FaIB^KkdpN({SDkLD0q)vG;M@C9jK_39sv|lTx6!QctFCIn@Q@ zL3<&RZ(#c-&)Hem`!KPE0nQo9~Wud=jxK z^4?@Y;G0F#QiV!l>C+3`T5~e#2 zD*X7P#oT@lq?>8p=jcd3aY*XP9gJ{goS?c?*pgfr(C{-x@sGU2wMJSxr?>O(08svT zJMj9*2!0fxy<{rseG54w*5EH|2-|FRMpF}l&5<%wVyW)~6ljCIXO1g-=-9 z6&{D!NH27^w=NgosV2UrG}yIQs5MoKwvadKuwlUmatSFb%H z{}QG;ld2rqV0G_GE4_m(x>m*4$U108#YZ~-bdKuEUSE-wnTR={72g)3@U++av& zbJ5GwVP>L{ zksWG4rG1a{meswc|F6muq#yQ=Mm|e{Ef+kCE`T4acUH?wvVhzik>3tql*0cM1R6EA ze@krr|2|xmN-^K<0+O-6rL)MldH8K;|A^$dwj|CK1mpipOUpWLj^3GH|IFo@1i!6Y z3xiT{xLjXXX5hqg8k!KP(?cfW4|q^8VU`kmWfKWM#^I3U2tzp670T~55A+;WG19od zPOwtkv#yi5dr68!owk+cdtEIMu)o!E^y47wGUW10!f;UU8z8xl@=F_s9`CduqA9!5 zbrisjvYYC2X;f#^*KoVDdwb9LG?Q#@)X3mY*8nbQb34&AyNRD{J3e(KAy;u3(fdam zU}BL4;rR`h)n5TLCul3`sYZGn8oGdiEM%7}Lzr+vyB6)OTOkvxRv^ACs;P#pemOkNMwAmT%%qcekCW*HA(@5|JT}W=A z_Y-?qCvloXhk6$R1Bf0A&Y5I`&!hc#P1fg;a+n zmENh!{VWbEv7ol?q#Ol?Iyln5KC9iP<{MO^iP;s`!q9%rS#1*8Go3Ri-bby@&2gly z!l-xKT+gWovwo{8CYx}UWva1(WyoG3moq*)U{fe$(J7{}=Zc_$#5o$fbI{PA->^5r zo(*KD`#ASXDx~iev0567w`Fkl@3*+Br?+u4{2!1 zUaHK=|21tvfp;vWG+%KlVaC$P7xW%7vK$(;eQw``2Aci;Iy(B{V%!|6A@CQ8+s5k< z9JWLy8Z)paSK}t?yc{KB6h90W=sj<2{wdrTToIpkskF{d$zh~S_6$u3JJIUKwA`GX zRP=F)C2!1I9eYRwV<}zq<9WlhUZ@lohkh@Z~tSc4)^l7V!Qt zJ!v=f-dndL|JRrP`-edPi?gUJf9tDh?9#OUPRm{w{~gDH*`I)uDCYd}cMdXKt75Z$gC zEV1nFllR`IciyM}hbi}*nL9K0&hMVzy)mzK)hWoB$p{DtC^R)x3w$KNt_3;NDhgxz?hN`Q=bdpEZq%66qwv-licD+%& z$NhgwMPh{S#+x_T_M$j`xX33ZlPi8S6WkW=9Uw%0jgc|oxJSC5Vzn7HEk_3`};0$VR`)Q z6Zw~C)Sm875F>!O)x}9Ds?t6z9TJ4f`Dli$2Ii%vonO2Vt~sZh)&254nr>L_E-z82 z2!)7IkS<)jsb8*mZ>l1z!X-do3n)gCoAlw1YiEN@v!pC&Yb1RNSsDw!pJR=sDqBCe z%x)2n*Cs%qmXIf5%3a=$ZS!a9>exs`H#q9JbTFZp9V#4W_3$(!gL$hS#;q2rraM>v zqFV!{wt}vSECcH`eWd%^4|^h_wA}R%Ir|1zUp^1@(a|1_Ulw*kSu{~;_RBycZj`uSod7D z=OHkCO;mUB*Smq8gxxU2g4r_>qPomfR1sfnlO$ZfW;ry@PiigPMaGseA8_ z=W)KgeA7J|)TnG*^VB#<(JH@r0okex6yaGRBJSxd=`}~o>3q8Rq>67($}1qQ@el%)vFE& zO@LZ>vmU>m42gh%PU!eIQG5Npu=kTuJ?+M+N(cIY)er~d>-$s0wNl*m(aHSwb1fDy z7K#rQG^RkYm(eyqfprVVl^b^aGLir^GlWXTrf|V7SNdCH`6|K)yERhWhiK5sl8_3& z6z#GLJrotD9GMh1&KIx%!0UOBcB4Pa8*aJO`nweYPWs?po*JTyOCizKJ6Lq6{{e-3t+Yi_<4sJcAK z=nAKkL?tFbR;!*6WA{@mU08l{lqMwhhW99peSttdCls{syMz!*6PCf&j=}z7PvK%L zHL4nh-;yoOLlysd@^^LNt=pC1K!0URlI0SSl~2#Syl&qBjD%3T@<+X``R|z8`p~jH zm;yLp`^$V^y$TmY36)Q^Wl<&L{m}%UEqe=~7-O`}CpMYBI5P4uv3o4hP&@x(Z;!Z0 z`O0!Ev&mz^%&4L#(Ibl7Lx%mEs6680JlCwM-ncZ7eYY98XRv;=dj{JE88$VzDUs?5vEW%DGS`zU-!ge+-(LorvQ1g_#5t95?fW7wntXVRq0_sZBaOVvjOYf7s5ykK`v-- z7pz+M+6xuPf@uBy1h&$?m?{U)#X2Z=&`&X?Ba|MLU0HLyiW)_oIWoUwNS|~qK`Yjn zA&JuND0y2_R&5Rcwmmm}lWzDB`rN17J>`z(V!MoP>#e&?rX58T(~)|5qcZ4k~_;_+k^EsIbih}N(>Bi4VIHuG{H#ZGH@d-t-0qLCNQS`aOg(`>%{ux-ez^jc@R zF{FMfnt<6WzjjV@#>$S zK|~T(@|;U%r@WdOWvqLA&pvzXp;&_jG6sMmy(ZO(a&A6(4zjB;(H*`59X}7gCZ&bO}U|xeUMWBU4RnNmPMJ;C(@YY9TD z!is=fP*$Cl%5)aUqVUqy;HT`2=I32wzCz1mJQ;n~&FMj`PuDRMIl5LpcR&V8FjmD7 zp9$$o_V%_|D{N{+nl~~*+Y^GqlfU1shRI%K+UWOHS5#%3J1Ly#ZKRr=X$Uknvz8SJ zPfiT1->rrX%lcOsIKCU}+`X;5?-G=x<93022jwGDrmiIzYp*;qUAko1-O9CiKEmZ( zCb|5?g9L3hvO%ORJ0K{zr}&aGk?W#oHUla+9(gU%43ua+;!t_PANH$Vo3gTNn0q)9 zRb@VLF9xSs#9cs?_8f}q<1%r~{q(U`w{S-#?yuiZzj-uCS#Za%k3!F+vP#ZNr5bP7!Bh%*M#OSuO6LGNEO>F_$ zG-=UIv3%K_i+MkfC$WI|vDHHoev2h^e;IHVDBec=Js5(_8GAr~)II_m8B*}FDo9O4 zFEh{q-&3C69w7O8U%-83kA5L}Nzi9TUrRX9E5y$%>*8>li(1L&evBz5-@wJyWI26~g3!V^wyz%%%mN{xi`Grq`%^PhMocta0j!-H>@Xe58Wq(8lSv~=lB6oD%O{Vm!0 zt3C7TPySQ;J1ftogQ(wwJMq>&4SL^KRqxu4T{Wh1Qyf6m+P76n(3iJoo&)N0*(EY7 z_=HJMtYUYG64g%fX4DfN#M@GDK{0E-=u_Xq?P(dKYJ|-`J4rK8@oxAbP;~U>FpZKa zk^+Qf&%3Ag95Z})$)L>zPQ6~&T49X`DW{?2luYNQ^RzpIkGT?k#EM#YqFHwi{nF$; z6l*}4TLY0YCi=zcBioo7pt{x2T>b=7J7r(*6@Q{E^oIaccd$I{;>XN3MF3vC%T&(w zvxg*MP4J;kUY7SP7gL$ftAzIZW1V#wi1(eeH%vnPK6D|Ke-oS8S|3doAYu4`E?yN=?pKD@U#1!a?f~FGOPwS zcroHYc$!--Sy!z$x+ykabY4Y~Y2BYd^3a5CwfyH?*>sl4*i|9JPEgJ{Yq^MA}ZJ)e{e zGO5DGG`Vo@kozOS2s75fr&0vpqX_x(M{{0I>brz($Y`+~o-{;3FFU8?`lLiECc~5; z!MT(Xz+fwJ)+3n*laV|rJa=qI25)40i6IfgD4drnAK*LBXu^_bw+R#=H~kR&RYf{J;#a8Ue|cizvB*+pi7f;OW!& zOrH;VG6hq-d|5G9pFG~DO^SBks1dR{RVtLDy8UyVUPy{{XE5f~K6CAEY8dMdBb%u} zZ)$^p8=pI&%&kY%3?`V5Uj9QIk6Y&r6Ayp$>3@*-f9d%RLN#_xZx+yzV#zqeleqpr zxc+~e#!ln577~XfBPhT|1)sDew?cd%;WU{)SFXj&jgo&)tIReDm_IRasq}c`bH^ex6vp=I2R(JbQSA8x?LYoN=r1kK zgQ~nT# z$4V*%Nz1_Pp9}70R96E%zuEyVo>Abnx|=XBZZkG733lxyDv3#c?Tam?)uLqIJfpA_D_l7MbonB$<;~#Jum$9EH1g+wwk@W3y&r`rT;5& zj`ihD!$g6_zbAsvJo54TSY2hh-sNCz>C6LFd#y{;(tjx7R`xYk5np+akXkmYN7A9j^Jr^Ho%GR;?T*d3tN~`f{#-Z?w z_-<0ISl8vCy5(C-R17QtKQ)TG)cu3UvG1^#4Q)Hdk?LcxF!dHxY@;^w{IjUl z0`&;S3*VKzTKsXpCHK?ZY|L?9xee}=<@%?qEPg$zT-j-dn&S7-WWdDawRYmwY8Pgh z1=DX7yBsio1eBOqE%=K}@aLmZ6YktN=t@7jv)Z|gUTI4zR;a;PAB-*G7$t&(e0R%5 zWL|T3IA|=tes}i#YzP0emgsfx+Mp@z4lejed>(MjL|Yqd zRVOae{S!x2_#U%T?j+>yKdg#nfuIi#-K8ypv`+=4UHhfk$_)D6HCbAqow8@{hhE0} zxZ|3eDKj;r6?p6jfnS?DxqQB@;%24V?Aq*soXjHH4kr?^CZVAJMzNpm?8k%QTZjf)H zU$w}1zEJcy(PUYFHKn{7^XLu@z;omyvPfQ!1CK*}k@$o3TEZ65XM^uIVqE(VNljATNO%`{ys{s(H8IrP@ zzVh`_U_Bmukl6WE&-TpmVm(T|c1-&2H~pt;SytvAy4K9+ksi2_tD{;+nDV*4FxL2} z9gbfb-)>t|7ZFH5%Gb?x^IwK*4$e(<9z@Y*OG}@fMTw+L3=2F+Zx}CM_=qG9+G~I} zeC>*f32ibPb6Q|xs;Mx7T3|<}Pc|Pi-CcSbHRmS%jYmiLw*d`g+>w1K0rbe2OWa<$ z!?5OZUAoZ?ZbmA-$a^#pyhO{l&yflpRn-DFk98&Qex^a+*#;e)mWJSDI8~a<2D^@h z$$=drT!D-d6Y_1B6EJlV+=2ro>HuPWG*^NcU;5t7l62fqY_4(iwinkCFzBh* z&W~SNqE!|!xO~ZZ!4O!6BZnOk7bDzqM6M1dX-DF1bUw%j(P!I+(_Kt<^Fz>xlzhf^ zuf^-q*B6GGth8j-*Y%SVcDM_Yc^@&UXU8kNcK44X6d=SZ!z z>Y#s=DZTL1eFRH3DD%XmT}E2OjfmF4{x$EK=d)0=`m%j(^}Q)3w)oAGMo-H7D#IX) zB|r0q$wpt39}=@Sg%Q1nR)O}mO>deRxRn#A9DlaxA@wNannGOC9NG8koNa0yx;|g* z*q&%^p|Q{OjyhjlO^c4`O@K^FSg$L&ank8LZ^1azZ8rNhiG6u|N9+fU^~|Cicvlf* zILIXV<>NqX_uK?v5r3$D9+#zD6PonFbyUg*qqy4MFKFvtqL0S9UZmIRRPN1ar`xhK zs#LF`su&SOgjfp)QuY~cWXqd)G|BnsYD)xcE(Z2HDVLucvk6b?={d!* Z145{cB#2nzZtB1UnyR`gHA=Rj{{?FXa##QW literal 0 HcmV?d00001 diff --git a/doc/tutorials/images/acrn_qemu_4.png b/doc/tutorials/images/acrn_qemu_4.png new file mode 100644 index 0000000000000000000000000000000000000000..0843e6fce69c5d2eae24724faa72c440b6bdcc2a GIT binary patch literal 7146 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 av>NvZiXW*%-YSd&AZ}j2)*m~2{l5UxgD8Rk literal 0 HcmV?d00001 diff --git a/doc/tutorials/running_ubun_as_user_vm.rst b/doc/tutorials/running_ubun_as_user_vm.rst index f0d6551bf..54a7cf628 100644 --- a/doc/tutorials/running_ubun_as_user_vm.rst +++ b/doc/tutorials/running_ubun_as_user_vm.rst @@ -60,6 +60,8 @@ Validated Versions - **ACRN hypervisor tag:** acrn-2019w36.2-140000p - **Service VM Kernel version:** 4.19.68-84.iot-lts2018-sos +.. _build-the-ubuntu-kvm-image: + Build the Ubuntu KVM Image **************************