From f36a507c93bef0afbe94bde9d59022d982fc69a0 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 2 Jan 2021 10:03:24 +0800 Subject: [PATCH 01/87] Update env. --- os/Makefile | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/os/Makefile b/os/Makefile index 1d13cce..38b3c40 100644 --- a/os/Makefile +++ b/os/Makefile @@ -22,7 +22,13 @@ OBJCOPY := rust-objcopy --binary-architecture=riscv64 # Disassembly DISASM ?= -x -build: $(KERNEL_BIN) +build: env $(KERNEL_BIN) + +env: + rustup component add rust-src + rustup component add llvm-tools-preview + cargo install cargo-binutils + rustup target add riscv64gc-unknown-none-elf $(KERNEL_BIN): kernel @$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@ @@ -66,4 +72,4 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build kernel clean disasm disasm-vim run-inner +.PHONY: build env kernel clean disasm disasm-vim run-inner From 8522c2f4cdb242fae7a4be90e22071f0e1e5b279 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 3 Jan 2021 16:05:04 +0800 Subject: [PATCH 02/87] Remove meaningless sstatus::set_sie() when initializing. --- os/src/trap/context.rs | 1 - os/src/trap/mod.rs | 6 ------ 2 files changed, 7 deletions(-) diff --git a/os/src/trap/context.rs b/os/src/trap/context.rs index ce076fc..d910d4e 100644 --- a/os/src/trap/context.rs +++ b/os/src/trap/context.rs @@ -21,7 +21,6 @@ impl TrapContext { ) -> Self { let mut sstatus = sstatus::read(); sstatus.set_spp(SPP::User); - sstatus.set_spie(true); let mut cx = Self { x: [0; 32], sstatus, diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 46e113b..e939bcf 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -10,7 +10,6 @@ use riscv::register::{ Interrupt, }, stval, - sstatus, sie, }; use crate::syscall::syscall; @@ -41,11 +40,6 @@ fn set_user_trap_entry() { } } -#[allow(unused)] -pub fn enable_interrupt() { - unsafe { sstatus::set_sie(); } -} - pub fn enable_timer_interrupt() { unsafe { sie::set_stimer(); } } From 6011a6a943255f174adf11fb395b831f10e8b102 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 3 Jan 2021 17:02:34 +0800 Subject: [PATCH 03/87] Flush icache before returning to user. --- os/src/trap/mod.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index e939bcf..674181a 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -86,6 +86,7 @@ pub fn trap_return() -> ! { } let restore_va = __restore as usize - __alltraps as usize + TRAMPOLINE; unsafe { + llvm_asm!("fence.i" :::: "volatile"); llvm_asm!("jr $0" :: "r"(restore_va), "{a0}"(trap_cx_ptr), "{a1}"(user_satp) :: "volatile"); } panic!("Unreachable in back_to_user!"); From 3851c2d5616a7fe09e0c28013d6a8ec954b45f64 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 4 Jan 2021 16:05:15 +0800 Subject: [PATCH 04/87] Move some variable name to task_cx to task_cx_ptr2 --- os/src/task/mod.rs | 12 ++++++------ os/src/task/switch.S | 5 ++++- os/src/task/switch.rs | 5 ++++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 009829e..4a98094 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -49,12 +49,12 @@ lazy_static! { impl TaskManager { fn run_first_task(&self) { self.inner.borrow_mut().tasks[0].task_status = TaskStatus::Running; - let next_task_cx = self.inner.borrow().tasks[0].get_task_cx_ptr2(); + let next_task_cx_ptr2 = self.inner.borrow().tasks[0].get_task_cx_ptr2(); let _unused: usize = 0; unsafe { __switch( &_unused as *const _, - next_task_cx, + next_task_cx_ptr2, ); } } @@ -99,13 +99,13 @@ impl TaskManager { let current = inner.current_task; inner.tasks[next].task_status = TaskStatus::Running; inner.current_task = next; - let current_task_cx = inner.tasks[current].get_task_cx_ptr2(); - let next_task_cx = inner.tasks[next].get_task_cx_ptr2(); + let current_task_cx_ptr2 = inner.tasks[current].get_task_cx_ptr2(); + let next_task_cx_ptr2 = inner.tasks[next].get_task_cx_ptr2(); core::mem::drop(inner); unsafe { __switch( - current_task_cx, - next_task_cx, + current_task_cx_ptr2, + next_task_cx_ptr2, ); } } else { diff --git a/os/src/task/switch.S b/os/src/task/switch.S index df668f3..262511f 100644 --- a/os/src/task/switch.S +++ b/os/src/task/switch.S @@ -8,7 +8,10 @@ .section .text .globl __switch __switch: - # __switch(current_task_cx: &*const TaskContext, next_task_cx: &*const TaskContext) + # __switch( + # current_task_cx_ptr2: &*const TaskContext, + # next_task_cx_ptr2: &*const TaskContext + # ) # push TaskContext to current sp and save its address to where a0 points to addi sp, sp, -13*8 sd sp, 0(a0) diff --git a/os/src/task/switch.rs b/os/src/task/switch.rs index c5fe5f4..867fcb1 100644 --- a/os/src/task/switch.rs +++ b/os/src/task/switch.rs @@ -1,5 +1,8 @@ global_asm!(include_str!("switch.S")); extern "C" { - pub fn __switch(current_task_cx: *const usize, next_task_cx: *const usize); + pub fn __switch( + current_task_cx_ptr2: *const usize, + next_task_cx_ptr2: *const usize + ); } From c33c0f8aea758fbde4c36e4f948c7b11cfdaa4d2 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 6 Jan 2021 00:19:10 +0800 Subject: [PATCH 05/87] Update from previous chapters. --- os/src/config.rs | 4 ++-- os/src/syscall/process.rs | 8 ++++---- os/src/timer.rs | 9 +++++++-- user/src/bin/03sleep.rs | 10 +++++----- user/src/console.rs | 6 ++++-- user/src/lib.rs | 9 +++++++-- user/src/syscall.rs | 6 ++---- 7 files changed, 31 insertions(+), 21 deletions(-) diff --git a/os/src/config.rs b/os/src/config.rs index aac9579..113a350 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -15,7 +15,7 @@ pub fn kernel_stack_position(app_id: usize) -> (usize, usize) { } #[cfg(feature = "board_k210")] -pub const CPU_FREQ: usize = 10000000; +pub const CLOCK_FREQ: usize = 10000000; #[cfg(feature = "board_qemu")] -pub const CPU_FREQ: usize = 12500000; \ No newline at end of file +pub const CLOCK_FREQ: usize = 12500000; \ No newline at end of file diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index e0bdeba..23eab1f 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -2,10 +2,10 @@ use crate::task::{ suspend_current_and_run_next, exit_current_and_run_next, }; -use crate::timer::get_time; +use crate::timer::get_time_ms; -pub fn sys_exit(xstate: i32) -> ! { - println!("[kernel] Application exited with code {}", xstate); +pub fn sys_exit(exit_code: i32) -> ! { + println!("[kernel] Application exited with code {}", exit_code); exit_current_and_run_next(); panic!("Unreachable in sys_exit!"); } @@ -16,5 +16,5 @@ pub fn sys_yield() -> isize { } pub fn sys_get_time() -> isize { - get_time() as isize + get_time_ms() as isize } \ No newline at end of file diff --git a/os/src/timer.rs b/os/src/timer.rs index 7522e70..92d50e3 100644 --- a/os/src/timer.rs +++ b/os/src/timer.rs @@ -1,13 +1,18 @@ use riscv::register::time; use crate::sbi::set_timer; -use crate::config::CPU_FREQ; +use crate::config::CLOCK_FREQ; const TICKS_PER_SEC: usize = 100; +const MSEC_PER_SEC: usize = 1000; pub fn get_time() -> usize { time::read() } +pub fn get_time_ms() -> usize { + time::read() / (CLOCK_FREQ / MSEC_PER_SEC) +} + pub fn set_next_trigger() { - set_timer(get_time() + CPU_FREQ / TICKS_PER_SEC); + set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC); } \ No newline at end of file diff --git a/user/src/bin/03sleep.rs b/user/src/bin/03sleep.rs index f3d9f31..8341123 100644 --- a/user/src/bin/03sleep.rs +++ b/user/src/bin/03sleep.rs @@ -4,14 +4,14 @@ #[macro_use] extern crate user_lib; -use user_lib::{sys_get_time, sys_yield}; +use user_lib::{get_time, yield_}; #[no_mangle] fn main() -> i32 { - let current_timer = sys_get_time(); - let wait_for = current_timer + 10000000; - while sys_get_time() < wait_for { - sys_yield(); + let current_timer = get_time(); + let wait_for = current_timer + 3000; + while get_time() < wait_for { + yield_(); } println!("Test sleep OK!"); 0 diff --git a/user/src/console.rs b/user/src/console.rs index a826b8f..ac80117 100644 --- a/user/src/console.rs +++ b/user/src/console.rs @@ -1,11 +1,13 @@ use core::fmt::{self, Write}; -use crate::syscall::{STDOUT, sys_write}; +use super::write; struct Stdout; +const STDOUT: usize = 1; + impl Write for Stdout { fn write_str(&mut self, s: &str) -> fmt::Result { - sys_write(STDOUT, s.as_bytes()); + write(STDOUT, s.as_bytes()); Ok(()) } } diff --git a/user/src/lib.rs b/user/src/lib.rs index c072ef4..122aefc 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -11,7 +11,7 @@ mod lang_items; #[no_mangle] #[link_section = ".text.entry"] pub extern "C" fn _start() -> ! { - syscall::sys_exit(main()); + exit(main()); panic!("unreachable after sys_exit!"); } @@ -22,4 +22,9 @@ fn main() -> i32 { } -pub use syscall::*; \ No newline at end of file +use syscall::*; + +pub fn write(fd: usize, buf: &[u8]) -> isize { sys_write(fd, buf) } +pub fn exit(exit_code: i32) -> isize { sys_exit(exit_code) } +pub fn yield_() -> isize { sys_yield() } +pub fn get_time() -> isize { sys_get_time() } \ No newline at end of file diff --git a/user/src/syscall.rs b/user/src/syscall.rs index 8e4ff50..1b23a48 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -1,5 +1,3 @@ -pub const STDOUT: usize = 1; - const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; @@ -22,8 +20,8 @@ pub fn sys_write(fd: usize, buffer: &[u8]) -> isize { syscall(SYSCALL_WRITE, [fd, buffer.as_ptr() as usize, buffer.len()]) } -pub fn sys_exit(xstate: i32) -> isize { - syscall(SYSCALL_EXIT, [xstate as usize, 0, 0]) +pub fn sys_exit(exit_code: i32) -> isize { + syscall(SYSCALL_EXIT, [exit_code as usize, 0, 0]) } pub fn sys_yield() -> isize { From 3ce58c3aa81255a1f4f005c18fd82e014cb4d163 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sat, 16 Jan 2021 19:26:02 +0800 Subject: [PATCH 06/87] rust-toochain --> nightly --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index ae054b9..bf867e0 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2020-11-01 \ No newline at end of file +nightly From ae751d62f270079c4aefdf5f13b886ae2b7e0778 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 21 Jan 2021 00:16:33 +0800 Subject: [PATCH 07/87] Fix os/Makefile: Support macOS --- os/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/os/Makefile b/os/Makefile index 38b3c40..1732b23 100644 --- a/os/Makefile +++ b/os/Makefile @@ -25,10 +25,10 @@ DISASM ?= -x build: env $(KERNEL_BIN) env: - rustup component add rust-src - rustup component add llvm-tools-preview - cargo install cargo-binutils - rustup target add riscv64gc-unknown-none-elf + (rustup component list | grep "rust-src") || rustup component add rust-src + (rustup component list | grep "llvm-tools-preview") || rustup component add llvm-tools-preview + (which rust-objdump) || cargo install cargo-binutils + (rustup target list | grep "riscv64gc-unknown-none-elf") || rustup target add riscv64gc-unknown-none-elf $(KERNEL_BIN): kernel @$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@ @@ -59,11 +59,11 @@ ifeq ($(BOARD),qemu) -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) else @cp $(BOOTLOADER) $(BOOTLOADER).copy - @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=128K seek=1 + @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=131072 seek=1 @mv $(BOOTLOADER).copy $(KERNEL_BIN) @sudo chmod 777 $(K210-SERIALPORT) python3 $(K210-BURNER) -p $(K210-SERIALPORT) -b 1500000 $(KERNEL_BIN) - miniterm --eol LF --dtr 0 --rts 0 --filter direct $(K210-SERIALPORT) 115200 + python3 -m serial.tools.miniterm --eol LF --dtr 0 --rts 0 --filter direct $(K210-SERIALPORT) 115200 endif debug: build From 251758316faff1b0cc8e9c8ab4dc83adf75ce2fe Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 26 Jan 2021 15:32:51 +0800 Subject: [PATCH 08/87] Fix k210 CLOCK_FREQ --- os/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/src/config.rs b/os/src/config.rs index 113a350..2fea79d 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -15,7 +15,7 @@ pub fn kernel_stack_position(app_id: usize) -> (usize, usize) { } #[cfg(feature = "board_k210")] -pub const CLOCK_FREQ: usize = 10000000; +pub const CLOCK_FREQ: usize = 403000000 / 62; #[cfg(feature = "board_qemu")] pub const CLOCK_FREQ: usize = 12500000; \ No newline at end of file From 05fd1c8f85922d36a45f7e0c7c3affad6d16436b Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 27 Jan 2021 07:29:16 +0800 Subject: [PATCH 09/87] Do not clone KERNEL_SPACE in mm::init --- os/src/mm/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/src/mm/mod.rs b/os/src/mm/mod.rs index 0118b19..04af2e1 100644 --- a/os/src/mm/mod.rs +++ b/os/src/mm/mod.rs @@ -15,5 +15,5 @@ pub use memory_set::remap_test; pub fn init() { heap_allocator::init_heap(); frame_allocator::init_frame_allocator(); - KERNEL_SPACE.clone().lock().activate(); + KERNEL_SPACE.lock().activate(); } From ca9bc7078192f8d8f753d16e178428bf1ad98f38 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 2 Feb 2021 17:44:45 +0800 Subject: [PATCH 10/87] Update os/Makefile && Update rust to 2021-01-30 --- os/Makefile | 16 ++++++++-------- rust-toolchain | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/os/Makefile b/os/Makefile index 1732b23..b55c71f 100644 --- a/os/Makefile +++ b/os/Makefile @@ -7,13 +7,13 @@ KERNEL_ENTRY_PA := 0x80020000 DISASM_TMP := target/$(TARGET)/$(MODE)/asm # BOARD -BOARD ?= qemu -SBI ?= rustsbi -BOOTLOADER := ../bootloader/$(SBI)-$(BOARD).bin +BOARD ?= qemu +SBI ?= rustsbi +BOOTLOADER := ../bootloader/$(SBI)-$(BOARD).bin # Run K210 K210-SERIALPORT = /dev/ttyUSB0 -K210-BURNER = ../tools/kflash.py +K210-BURNER = ../tools/kflash.py # Binutils OBJDUMP := rust-objdump --arch-name=riscv64 @@ -25,10 +25,10 @@ DISASM ?= -x build: env $(KERNEL_BIN) env: - (rustup component list | grep "rust-src") || rustup component add rust-src - (rustup component list | grep "llvm-tools-preview") || rustup component add llvm-tools-preview - (which rust-objdump) || cargo install cargo-binutils - (rustup target list | grep "riscv64gc-unknown-none-elf") || rustup target add riscv64gc-unknown-none-elf + (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) + cargo install cargo-binutils + rustup component add rust-src + rustup component add llvm-tools-preview $(KERNEL_BIN): kernel @$(OBJCOPY) $(KERNEL_ELF) --strip-all -O binary $@ diff --git a/rust-toolchain b/rust-toolchain index bf867e0..a08f00d 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly +nightly-2021-01-30 From 04af18cb475369d77600158c48fd9968de39e1de Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 7 Feb 2021 18:17:00 +0800 Subject: [PATCH 11/87] Bump rustsbi to 0.1.1 && make config of qemu/k210 different --- bootloader/rustsbi-k210.bin | Bin 73536 -> 75068 bytes bootloader/rustsbi-qemu.bin | Bin 65480 -> 103288 bytes os/Makefile | 14 ++++++-- os/src/{linker.ld => linker-k210.ld} | 0 os/src/linker-qemu.ld | 50 +++++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 2 deletions(-) rename os/src/{linker.ld => linker-k210.ld} (100%) create mode 100644 os/src/linker-qemu.ld diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index 5a9fa7d1a253dcc2396c86a01af7e8cc407c8268..e696137ab183ea5129e14e86ba980af53ae025d2 100755 GIT binary patch literal 75068 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 Date: Mon, 8 Feb 2021 11:26:57 +0800 Subject: [PATCH 12/87] Move kflash.py out of proj. --- .gitignore | 1 + os/Makefile | 7 +- tools/kflash.py | 1452 ----------------------------------------------- 3 files changed, 6 insertions(+), 1454 deletions(-) delete mode 100755 tools/kflash.py diff --git a/.gitignore b/.gitignore index 5711843..3327607 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ os/Cargo.lock user/target/* user/.idea/* user/Cargo.lock +tools/ diff --git a/os/Makefile b/os/Makefile index e9292ed..e7aa6b7 100644 --- a/os/Makefile +++ b/os/Makefile @@ -58,7 +58,10 @@ disasm-vim: kernel @vim $(DISASM_TMP) @rm $(DISASM_TMP) -run: run-inner +run: tools run-inner + +tools: + (which $(K210-BURNER)) || (cd .. && git clone https://github.com/sipeed/kflash.py.git && mv kflash.py tools) run-inner: build ifeq ($(BOARD),qemu) @@ -82,4 +85,4 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build env kernel clean disasm disasm-vim run-inner +.PHONY: build env kernel clean disasm disasm-vim run-inner tools diff --git a/tools/kflash.py b/tools/kflash.py deleted file mode 100755 index d4cb1da..0000000 --- a/tools/kflash.py +++ /dev/null @@ -1,1452 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -from __future__ import (division, print_function) - -import sys -import time -import zlib -import copy -import struct -import binascii -import hashlib -import argparse -import math -import zipfile, tempfile -import json -import re -import os - - -class KFlash: - print_callback = None - - def __init__(self, print_callback = None): - self.killProcess = False - self.loader = None - self.print_callback = print_callback - - @staticmethod - def log(*args, **kwargs): - if KFlash.print_callback: - KFlash.print_callback(*args, **kwargs) - else: - print(*args, **kwargs) - - def process(self, terminal=True, dev="", baudrate=1500000, board=None, sram = False, file="", callback=None, noansi=False, terminal_auto_size=False, terminal_size=(50, 1), slow_mode = False): - self.killProcess = False - BASH_TIPS = dict(NORMAL='\033[0m',BOLD='\033[1m',DIM='\033[2m',UNDERLINE='\033[4m', - DEFAULT='\033[0m', RED='\033[31m', YELLOW='\033[33m', GREEN='\033[32m', - BG_DEFAULT='\033[49m', BG_WHITE='\033[107m') - - ERROR_MSG = BASH_TIPS['RED']+BASH_TIPS['BOLD']+'[ERROR]'+BASH_TIPS['NORMAL'] - WARN_MSG = BASH_TIPS['YELLOW']+BASH_TIPS['BOLD']+'[WARN]'+BASH_TIPS['NORMAL'] - INFO_MSG = BASH_TIPS['GREEN']+BASH_TIPS['BOLD']+'[INFO]'+BASH_TIPS['NORMAL'] - - VID_LIST_FOR_AUTO_LOOKUP = "(1A86)|(0403)|(067B)|(10C4)|(C251)|(0403)" - # WCH FTDI PL CL DAP OPENEC - ISP_RECEIVE_TIMEOUT = 0.5 - - MAX_RETRY_TIMES = 10 - - ISP_FLASH_SECTOR_SIZE = 4096 - ISP_FLASH_DATA_FRAME_SIZE = ISP_FLASH_SECTOR_SIZE * 16 - - def tuple2str(t): - ret = "" - for i in t: - ret += i+" " - return ret - - def raise_exception(exception): - if self.loader: - try: - self.loader._port.close() - except Exception: - pass - raise exception - - try: - from enum import Enum - except ImportError: - err = (ERROR_MSG,'enum34 must be installed, run '+BASH_TIPS['GREEN']+'`' + ('pip', 'pip3')[sys.version_info > (3, 0)] + ' install enum34`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise Exception(err) - try: - import serial - import serial.tools.list_ports - except ImportError: - err = (ERROR_MSG,'PySerial must be installed, run '+BASH_TIPS['GREEN']+'`' + ('pip', 'pip3')[sys.version_info > (3, 0)] + ' install pyserial`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise Exception(err) - - class TimeoutError(Exception): pass - - class ProgramFileFormat(Enum): - FMT_BINARY = 0 - FMT_ELF = 1 - FMT_KFPKG = 2 - - # AES is from: https://github.com/ricmoo/pyaes, Copyright by Richard Moore - class AES: - '''Encapsulates the AES block cipher. - You generally should not need this. Use the AESModeOfOperation classes - below instead.''' - @staticmethod - def _compact_word(word): - return (word[0] << 24) | (word[1] << 16) | (word[2] << 8) | word[3] - - # Number of rounds by keysize - number_of_rounds = {16: 10, 24: 12, 32: 14} - - # Round constant words - rcon = [ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 ] - - # S-box and Inverse S-box (S is for Substitution) - S = [ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 ] - Si =[ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d ] - - # Transformations for encryption - T1 = [ 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a ] - T2 = [ 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616 ] - T3 = [ 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16 ] - T4 = [ 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c ] - - # Transformations for decryption - T5 = [ 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 ] - T6 = [ 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857 ] - T7 = [ 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8 ] - T8 = [ 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0 ] - - # Transformations for decryption key expansion - U1 = [ 0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3 ] - U2 = [ 0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697 ] - U3 = [ 0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46 ] - U4 = [ 0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d ] - - def __init__(self, key): - - if len(key) not in (16, 24, 32): - raise_exception( ValueError('Invalid key size') ) - - rounds = self.number_of_rounds[len(key)] - - # Encryption round keys - self._Ke = [[0] * 4 for i in range(rounds + 1)] - - # Decryption round keys - self._Kd = [[0] * 4 for i in range(rounds + 1)] - - round_key_count = (rounds + 1) * 4 - KC = len(key) // 4 - - # Convert the key into ints - tk = [ struct.unpack('>i', key[i:i + 4])[0] for i in range(0, len(key), 4) ] - - # Copy values into round key arrays - for i in range(0, KC): - self._Ke[i // 4][i % 4] = tk[i] - self._Kd[rounds - (i // 4)][i % 4] = tk[i] - - # Key expansion (fips-197 section 5.2) - rconpointer = 0 - t = KC - while t < round_key_count: - - tt = tk[KC - 1] - tk[0] ^= ((self.S[(tt >> 16) & 0xFF] << 24) ^ - (self.S[(tt >> 8) & 0xFF] << 16) ^ - (self.S[ tt & 0xFF] << 8) ^ - self.S[(tt >> 24) & 0xFF] ^ - (self.rcon[rconpointer] << 24)) - rconpointer += 1 - - if KC != 8: - for i in range(1, KC): - tk[i] ^= tk[i - 1] - - # Key expansion for 256-bit keys is "slightly different" (fips-197) - else: - for i in range(1, KC // 2): - tk[i] ^= tk[i - 1] - tt = tk[KC // 2 - 1] - - tk[KC // 2] ^= (self.S[ tt & 0xFF] ^ - (self.S[(tt >> 8) & 0xFF] << 8) ^ - (self.S[(tt >> 16) & 0xFF] << 16) ^ - (self.S[(tt >> 24) & 0xFF] << 24)) - - for i in range(KC // 2 + 1, KC): - tk[i] ^= tk[i - 1] - - # Copy values into round key arrays - j = 0 - while j < KC and t < round_key_count: - self._Ke[t // 4][t % 4] = tk[j] - self._Kd[rounds - (t // 4)][t % 4] = tk[j] - j += 1 - t += 1 - - # Inverse-Cipher-ify the decryption round key (fips-197 section 5.3) - for r in range(1, rounds): - for j in range(0, 4): - tt = self._Kd[r][j] - self._Kd[r][j] = (self.U1[(tt >> 24) & 0xFF] ^ - self.U2[(tt >> 16) & 0xFF] ^ - self.U3[(tt >> 8) & 0xFF] ^ - self.U4[ tt & 0xFF]) - - def encrypt(self, plaintext): - 'Encrypt a block of plain text using the AES block cipher.' - - if len(plaintext) != 16: - raise_exception( ValueError('wrong block length') ) - - rounds = len(self._Ke) - 1 - (s1, s2, s3) = [1, 2, 3] - a = [0, 0, 0, 0] - - # Convert plaintext to (ints ^ key) - t = [(AES._compact_word(plaintext[4 * i:4 * i + 4]) ^ self._Ke[0][i]) for i in range(0, 4)] - - # Apply round transforms - for r in range(1, rounds): - for i in range(0, 4): - a[i] = (self.T1[(t[ i ] >> 24) & 0xFF] ^ - self.T2[(t[(i + s1) % 4] >> 16) & 0xFF] ^ - self.T3[(t[(i + s2) % 4] >> 8) & 0xFF] ^ - self.T4[ t[(i + s3) % 4] & 0xFF] ^ - self._Ke[r][i]) - t = copy.copy(a) - - # The last round is special - result = [ ] - for i in range(0, 4): - tt = self._Ke[rounds][i] - result.append((self.S[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF) - result.append((self.S[(t[(i + s1) % 4] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF) - result.append((self.S[(t[(i + s2) % 4] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF) - result.append((self.S[ t[(i + s3) % 4] & 0xFF] ^ tt ) & 0xFF) - - return result - - def decrypt(self, ciphertext): - 'Decrypt a block of cipher text using the AES block cipher.' - - if len(ciphertext) != 16: - raise_exception( ValueError('wrong block length') ) - - rounds = len(self._Kd) - 1 - (s1, s2, s3) = [3, 2, 1] - a = [0, 0, 0, 0] - - # Convert ciphertext to (ints ^ key) - t = [(AES._compact_word(ciphertext[4 * i:4 * i + 4]) ^ self._Kd[0][i]) for i in range(0, 4)] - - # Apply round transforms - for r in range(1, rounds): - for i in range(0, 4): - a[i] = (self.T5[(t[ i ] >> 24) & 0xFF] ^ - self.T6[(t[(i + s1) % 4] >> 16) & 0xFF] ^ - self.T7[(t[(i + s2) % 4] >> 8) & 0xFF] ^ - self.T8[ t[(i + s3) % 4] & 0xFF] ^ - self._Kd[r][i]) - t = copy.copy(a) - - # The last round is special - result = [ ] - for i in range(0, 4): - tt = self._Kd[rounds][i] - result.append((self.Si[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF) - result.append((self.Si[(t[(i + s1) % 4] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF) - result.append((self.Si[(t[(i + s2) % 4] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF) - result.append((self.Si[ t[(i + s3) % 4] & 0xFF] ^ tt ) & 0xFF) - - return result - - class AES_128_CBC: - - def __init__(self, key, iv = None): - self._aes = AES(key) - if iv is None: - self._last_cipherblock = [ 0 ] * 16 - elif len(iv) != 16: - raise_exception( ValueError('initialization vector must be 16 bytes') ) - else: - self._last_cipherblock = iv - - - def encrypt(self, plaintext): - if len(plaintext) != 16: - raise_exception( ValueError('plaintext block must be 16 bytes') ) - - precipherblock = [ (p ^ l) for (p, l) in zip(plaintext, self._last_cipherblock) ] - self._last_cipherblock = self._aes.encrypt(precipherblock) - - return b''.join(map(lambda x: x.to_bytes(1, 'little'), self._last_cipherblock)) - - def decrypt(self, ciphertext): - if len(ciphertext) != 16: - raise_exception( ValueError('ciphertext block must be 16 bytes') ) - - cipherblock = ciphertext - plaintext = [ (p ^ l) for (p, l) in zip(self._aes.decrypt(cipherblock), self._last_cipherblock) ] - self._last_cipherblock = cipherblock - - return b''.join(map(lambda x: x.to_bytes(1, 'little'), plaintext)) - - ISP_PROG = '789cbcbc7d5c1357d6007c6792c924080a0e1890d82201a2acebc38a4aab960d428862eb636b85ea56171d10b5dacafa416dcb4a48263122453a60c0604bb182b25bd71535ada8011569edf787623fb4688080a2420522cac77befcc04d0769f7dff787faffec2ccbdf7dc73cf3df79c73cfb91f33f1e0dd331f5ec300061efdb7695144c4a64541f0a746bfe9161c00363b7bcca6dd2f44e8d4588c2e069bab9b8bc5ea62b1385d1ca6d169b0785d3ca6d569b179ba79d87cdd7c2c4197802dd02dc09ed53d8b3da77b0e5ba85b88fdafee7f8b576d2ac52336794780c500747c077f8b31f884bfc5387cc2df62117cc2df62317cc2df62023ee16fb1043ee16f31099ff0b7580a9ff0b758069ff0b7d8033ee16ff128f884bfc59ef0097f8bbde013fe168f864ff85b3c063ee1cfe283015617532cff9b0c50f85117f537bc6f53a8ba93c2fc40343636ffb5a08db12b7dc635de0b0e9a4eff8ce346bc6d2c5d84e32b7dc6375a7058371bbfbd49a9ee1c2ddafb0e4e4fc4f4477140efc041f6aa89d86b20287013088a40ef58baa4c9a37574fbd88e715de3ef3fd157d658de54d97ab8fd68c789ae93f7cff4cdbd1edf9cd0b6f0f60b9d89ddcb7a57f4dfb8ded27cb3edceed5f3b7bba1ff40ef4ab82306f55888fb76ad2446fd5943f79ab8262c6aa429e1fab9ab472ac6a4afa585590ce571592efab9af4beaf6acabf7d5541b5e35421df8c534dba3e4e35a5731cac1f00eb07c0fa01b07e00ac1f08eb07c2fa81b07e20ac3f01d69f00eb4f80f527c0fa4fc2fa4fc2fa4fc2fa4f6e0a0d9a7e2fd47bba87d117a79710e06ed0918501a57723364edae4ed37bd2c79eeca1b2bf1bf95fd6deea61b9b2429e529f1a92da992ade55be3335a323cd654ae49587b73adc71b956f24bc79f3cdd1eb0faf5fb8e1ce86d17f3ffcf785dbef6c2761df4c413a6f7222e6639aa8f32183b1b1a660dd5852895126a58e2243305f5388ce970cc5fc4ca13a3f320c1b670ad38d235598dca4d2c9c94998bf6992ce9f9c8c059826eb02c8706cbc295c379efc031668fa832e909c82294c53740af28fd804d31f7513c8a9d813a6a9ba27c8ffc19e34fd8fee490ac382d038010047a9d1a3696cebb8f6f11d4f7405df0febab6c3cdc74b4f544fbc98e335d67ef5fe84bb8beb0f985b6c4dbcb3a5774afea5ddd7ff3fa9de65fdb7a6e3fe81ce8be171c01f6f4de0bf69ebea71f2f93947b548e3e3cf6e8b813e34f3e71a6acacbcbcb2f2f0e1a3474f9c3879f2cc99b9fbe32b12feb1f05f2f5425da9655afb0dfd8df5271f31f77fef56b558fed41f5809d97adb99fbb650bc995f24830b02c02c099551a22945f74978bfe8d037ce5977fdbb47b1ab803ff8e9d6e0b06c09a8def409a969d1cbc72eeaa1babf04d659be66ebeb159925a9e1abfba65b524a33c23fef596d73dd656ae4d5877739dc79b956f26bc75f3add11b0e6f58f8ea9d57476f3fbc7d6cd0d1a01726fe3a71ecb4a3d35e88fc35725cc88990c4d09ed071334fcc4c8cea891a3fe9e4a465931f4c1e3febe4ac65b31fcc7e62ca99292bfe38f0c727a2cf44aff8f3c09fdddc8df191346d52a93b192dad7001426351a39e349aee65c4456c028bbcbbed166f94937ca42c19d3c460d95972020314c1b45848d85713d9429b2b805c04b22851ec715a2402b8de0da369b2c027cbd439ccb9b98c595b55d78deb3ee561f547ddb0088fbede749db98b68b100d45ad0030b09b25893ea88f933a1bd5fb812f82b4b66b472584789bbae217a1006049bf661eeb9181fbec5d026be56e8cf0246ae5e0c06db066940df2397624034efa51f27686743547c4fd27eb2c05cfd276b7ef29a5742cff6f7c722d3480c53159d0b34f50c5e3947688bea2b0be909c771f8f6d9e78b75a1812602d05d2740a04902749a4006a6e8669cf523715d7ef1bb53f7740e280f9240f90109304d76164188b4dd831f7d9769171d242591c409c0104a4060d76d3c35af7fc353c3cc13e8f996cf5ff32da4a6483a448df2033906e918775cbc6b314502bc9ab0a9a79a1ea363fd301d8476ea9ea2cf2802e0cccdfcf8a224bf1cc7130dbf4bd9161ba24aa421206507bf4bb5ef5a8c30ce961e57d39baf8040528ab0ef80d8d7b4021efbd43dc5ef6eb0454a61ad7952d49f5292ecb5633ec5da4900ce39f18c46d2ae1477027e541b3b6f40192256f263ce9ab4e74be840d2cd5bdf9863dfbd087f459f7dbf5817865aa6375f86adc23ec5073230f56a3360c7c156df0978f74461fa233de038ca5c028c0471f453fbb6f4b0f6fea44ac3164d7087a44be9db09e44d0050e20f8ef2f29d75a5b969825bd6bf7f46780b6ad069428577f5d57f6b266a2c119c5ea7d5a17ceebd7175be66b2f01eb4ba50f347e13d39b558f327377cca3ecd0c373cad48e6a475b6eb582d27b7fb25aea3eff3124cb88e5de2dfa4aea3823e5595d032c8bd2b9f29cb49dcdd4728e148223c39d859aec3ba783ea7622e166fd670b991aec33c97b37e2adb886fbe9182693490d39385fe645d982fbcd57ca24394f27dff52b19eab3dc75589dadfbf833c7888a7887455fea02db4613ec1ad85da704304f060187e3c817b3cc1e77aad0ea03155822e3037058d2ce643119d40d22ed0d227d2744208c28ccab6a59bb54acf4e604d22b0fdf0c926318075b9c60413cb73255dc11d539ba6352a27bcefc6fe73596af6ea49d2a9c67c8d203f5f107142d9032cd4318a19403de5fb89f9b064563f92350ebbf831eced4a3f37deaccbbc6cbab1667de2964a840348464a6ccd776e3916d2756ed8e5e9658d0bbb5ee8486c5fd6baa2c9d814d69770bfd23c75e73403eb01bca95100b78c82e3999353206b2f4f96a4dcd83c775bd936fc8d1bebe6be52f60aa6590971b0aede31b34d0fd4274df4a6265066b21a4830a124cc4c6fb6024a068da36d14f89659c8044a6420dbc2ca65b88ead3684c454cb9ec6a2f75eef5b6e9b90fec27d6aaf044fec5ad6b1aa955a7613937f0ee5dcf39fff237b257f5d59ebc5c6857d2bda8dede54de186a9e6a3e61339abf6068e0a0cb6eedc39917e4f065a92e3a15720597b63dbdc37cadec0dfbcf1cadcf5982614d1062d8bd52083f62d0a63c5002fd4d27732447a9507b861c936e56a794e8b054e1b00253770dcfe214fe9d709ca8d0970d426b9397e88b58821eda125d1c5d5e662f552db87ffa57e7f9252c26329d46cb0b3e41151f479413f740534924f91d69965d6565b9c40de0380287e4f26b29ef5e0873c3e2df93b21a4832fe854256795958963c28c1719374dea8f8edb20de51d1e7adb0e5e80b1617d227d59b103b7c1369c93747623f91f128f6b0d7ddd8116e96f40e5656f68cd6208c124829872b6deb6ea8c9e85d5fafda6ae986cfba199bf6c557c306aaf79c0097f22c1097fec2ea4db3e50d029d8ab3caf0c431efa31e8f7e943253fa30366d3a8f6dc9abbfc5667c95c7c6e35a3de64f36269e9ff5f65f7d3a3da1234a2605d083ea8a1487629506229e85da2ad32c6c97f4ed47f3f0d30620580909f408bcbbc5487f59e253acbc90e75bf2ff5a4938037c46e28a67034d72902dd7b1fe9f7f6951665500ff676bd36a49badb092047462bbebeb171eee6b2cdf8b61b6b31cd44a4ff490e8b73c037c5468a413e4999e240b985dedb027c5b154d3638bb9c2950fe530cda6c8a56ffa63a3bd2466f2f497b702bb2dfe106c106cc310fc9558d3a9811de52ad0401dc29f59f052f62d68d64de2a553230fe899f182fd3c863112f684c5fef0744f50428237fc8b39a9cbfb27b4851ed3b7e5a7a6dc313706001453afb584b1838692989dd961edc11d69ed02ae95ad874d272d430d5106ece3689ea0ae1583080d0220ba3af3f00ce92e8791cdc203f85fca737bb406ed29252914a0664398483ea768d11f4610f169a9f34bf590f4b58a70a28837a812ee9c3838a18734e6f030f536a13f8fd0f2c34b3f70b1b2afbe2277dfd1238c61a48791da4fc529efe422aa08c0c382b41ef5bc00dc9d5b7f5f597802e0cf54b54df0ce672cf6e60633ebacd32c4b455e4f2bc89aafea480bb6cbd6b907ebb073727edcfea02fc9c31776dd95a644d451a09389437511378450e989c6ab2437d3bafaa9ec43267e8545bba09496654ad4daf2d00a2f906484795538589e67f00e6caaad27a61de31b04a16b9b6176093a1cd12d5b2c55fe19bcb36f2d8e57590b7c48156cd4a5e2a453762b6446e39e4b6f91f30f38571b6220b3f6350affd1eeadb79288362ac8cfc264f14df041298b912f4d605564996bf8d8509a35eb1e5b408f65d0f79130c7ba987bd3fcb3dbbe188208df0d1d20627609230fb0e772bd7561ecfce8af16109b5d847037d457efe6e2d4b668945623fe8efca23398fd1b92d1dcd50480a04d9eae761d577047fe113997b7ebddf99ca4b1be477903b57fd23df73e247615c9f8e9248012531e23a8dbc1b9534cf164a9e146cd16cbe46f315b94b8ae6f75982accfd069dc584b7f853601ea3d6b943c2597406849d859f350a9fa571e834690a9a069f22ed8a6386e062b0eea97f7c2329979bae71aa659b1e8f62f8a45fd3f21dd42165929ce0716d4ea07e474812aafeb763dd49704260220dbbd5f8cb9b5f0334e2311f471324290708fe7a0feee27df07c8be1050efa047c0d1947c1e7a0350c2a03feac94b80a31ff9fdd093f5a4bd9b718a38e225b4d84711355ec35e3bfd90228f7839fc9b0784f20714f1b5579d8dd74e4957a5018bb342cb423b6d82342349ae321980a88e04539b08b1405b6f59ea75489da43dbc696aa390e7ca4e0d4e15f03e44140ad2d983e82a89a1039b81cec9684b6a271e549612a037299a817eb396363981399e7ebb01ce58fd362b0c3a108dd60632c6e1dd3c60d6d6424b5ee3458feb0645b57046f56cb3b192afbdfa931c3e97fa50ce11af54fb33b1e1263afd1cce66b840ade3f47576ab64f0999d27f7783a3c9d31a46343c380cf0dd80fc939f54e095aebd9b3272dab1cfa6736e849da8012fef613f0097ffbc5f0097ffb45f0097ffb71f884bffd187cc2df7e009ff00767f7eeee31ec1e065cca65f71018f717bf94bbd4c6ee5101be0d63b6332becc19eac5af984bce83d8ef473f7f7d996a697b7571aa63265d0533376093235da52cfcd4f47cf3432da334d0affb2d4e876b336faeb53f3c2fb0862eafdf0aeac35f9ce30c13667f93f2b1d8a3263f52af128264777570f3d01d64506153b2942ec21c8b6875e2ec6288b4a443f4702591af40cfcbb00aab12d2353de9ba79cd4e511c64448cbdc734040ff8b3ed70fc5fd5f38c1981734cf4a85f739e51b259bc3989694541491f03af76b25b38316a2c4ce4a13438aa095dc3018c954a833fd90a5086e94405f4ae97f1c2803ea80328200cae9f03789f050ce81cf2002578610f8c4789d06c6ac1e8265ba619173de7a97a28f7f4b73cd6914defae634f16fa641707f4e2ba2154fe1a49e9ba9627b2c7e0045b4be3c55b1cff0d682e914caef0be90e3eed007c9ae870d717d27785f201771f84f1e89f334ff799d022af67fd7c6ce1bc3fa75d9a023dbd90ae1758d2b058f954d70bc86b5646885f10eade95ae21e20f08be71e91de97a59fca76e4ff936a39df349aa4db14ee7d46991b6e81b082c20bdecfec58e6f5b8d7de55d5fb65f6efab17145dfaafbabbbd675bcdafe7eceb49d6866bd545fb2a1ae1e8d9efe690f40b954801e4b7ac3114da0b3487f4ca35b802da0c1a849b2dbcb8c87342b18617d6207ed45841144b5c79698c45df4a6bf60cb76499315eb7d17d15d15617171c74be8af0daa6b4c9851807f47915cc62430e51645a3901346fb13ded53bf7aa090d5dec0150295f521392d9a68ff2c0caad91a3acea2a8345ad7c6a2f38de77a8741806b4f627fde9d21f0fea4fca80fe9819d4cafaaf941be94d56f0a3714eb2e7ebbab0446302936da113a15c435c957bcdbb9054299faa04db7a75da968df19bcb374bb6b5ac8d5f57be4ef2ca8d37e7be55f6169e796343342383f219350a64e9127471d4825135cb6da815d169d44a5c5cb9c921f31a10417e4993d9ad64109d2df1a637ec93c2f7799f5e142ff25c5f2d2ec1bd72ad5e041cd509e0a6a5fa7c8188eeee024468b5f800466590eae5e7ca514ff839f809bfe67f6b914fc26990931423bdeb4ffad88e686017dc1ac49ea3163c1cf47ad6fcec7c9be7fa578de1c2aa4d4d3aa2a22c8dca70d9a83452aaf46f028a76f1d7772cd58663318ac6b8f3374d370df4a67e70d3244d8e365e66a2859a59db5e8a2b4b9bf0de4be7fd934fc211e1b8bd37d26bdf10b7757d9da7c38c6e1a83322b4dcb3b3dd7bbb99f1ccc6bbbcb856835db14ebe9e60a00c7fecdab38bd691fb8690883ad0954feede5b8d9268b5a91fcd27934facf3f1c1ec520c9d26f26db6e9ae87bffc07e3455d737e04fc1b14323576d6cc0714ba5c1115bdad37c5c5f0df95f6d0698a65656586df50804e955f4829f011ae915dc3843c805a53f669e5e65bce6f64a5f7939ee86a1da648a79f9bc22f9066ab91a4591617dc35164c2fd855de13b0fef64c5c40b581cb1a0ff2fe6f660e6b7f1238a1e451f430d396400fd4fd3dfcb8021f907bb3e4986d16f3e047af9648c36656017991798ecbdf3776121709e1f75dd3e21ddd85ed65ade84a2c217eea3987145fbaad6d54dac690b9cb71a71fa0d17ce76918336b49e86bcc32e0bfe6fada216d3fc5e9c58b69e8b13616ce8b873ac2fdc2c8ce44a96dcf8a4a50d5a10f3a7bfd28d1631db301de85428560894cbc16872a105a4b11272901ef73d00af9955f468935891e2bfde774da7b5cc5274c7f756511a95260745ce95a55443018c253a44d867f95abad929651b5280d564123d868d20073335b4ec18f04f49b7464a2c6afa853a8ffe2846253a26c32dcdc87e12b768fc98b77f4a7fbc00f1f30529ebf4058aa62a490180811e501e6db8c93d4f36b4b269e3c0ae3bbb6e96b4045bbc1d6ea9ab79115a67ecd2e96f102dc04ada8803707e5713b413463c0de721654ec93e1803aafdf89c2e989341e6db59897a094b36928ee6962eb62104b39aeac967ecbeebe97912a0585370b7e46615d90426db661a66d82d2d9082d3271ab9e7f1138d0826d8a248639d72a070ee83b83a9e147d6406f48d96715e7a4c1598a852132a261e71a36acf058e23552d124c8eea3f7df9475f9a82bcf66ef76d058eac3b810d103a36927200910de2589526a9da9a068a5b3aad12117acb57355fcb5c38ccdd18f942cbac1dd18c68fa0e8c0e100710a1ecd6192046dafc80ed8902f43e8902e161b5f7067bf3e4887711aeef518e4444a7c0992440a4809a82898ee500f68df383b4732f8834ed55f76be92f9ce1fc8c4b9a503d8a24dfcca27de9fea4c85d7fc1c20a66eda4f7f5f85362315e3664979233fb93c273e831dd41f46606a3adb3275afaa480ddd5be5354e10926bec779a0a5ce9df4b8f57256feac887e871ca7b7c9b0c4022ac51764398576b6eb21b43f4d6f75018ee23fbbdee24b9c993077a34bc1e53ee57a6b4925956801f9f1f4f50b6236310d588d4651a0711c081c370e8c962cdc43119241ef55b47f9d84d05a2f87a9abc635008ef3a8fe9c86b3d276ef56d006eea41fff269e6ebe00ac9213442df4ff90bc5c006c623dc4d822c944397e7c8e0be66c25d3ed1401e54502e5656ddd7d365185598d17c8a536ef75b4a40ef8aeeedceb78a56140faaac6e69be2bdbe736fd58e3d6afa2f4f88786956ac89240b40d99edd7715bc34db9ca7b8a7dd799275fa03cfbb9eb7144ee59171d81fabe8cfa410b2643592ad9216c51a54c7a77a9a21e0748cdcf795fe28c7db2d8d5ea7f355bc6c345f6baeaa345db5136999e4ac82fe8ccc5d85c7f5333de0cc40efe9f1e0da389ef657eaad8740a7a5259ea0565b056d5db495488ddc5901961564fa55657c00223d1ea823dfa804df0e8d6be35f2186806e18bdd38427f4543c07830bb104344a91446a4cb5498b85ef953be1d806bbd653ebc6f3ba7a24ed5fcae90b308771b623534bbf9a2462b4cae9d0f2c1f12e49ebb44642fb4e375b0094b44f9ce221fdf59f70a68acc89f9f83d0e5fb86bb5d9aeb7e500cab07320a688c9a9cd531e7b080ec45799724081b3e09623c3f433cb8cc286e6f8535baaa145c104bb01f9cc69e9c99e0f746790471dbe87f6ade3d6a3f55a0238726d0304d16fabaa3f00f6e54492753082d8a7a5efd4834a13bdb1d9437f81000cc910fbf31a061c379d03d0966edd02cbf22f8e2c617b3240bf8ddd6a1aa48c923ebaa35ea2af2280fe2803f4760213d9194c7f86c04567185c544588f41f31229661c4ca231940f41133a83c9604941fb930e52927a63cd220521eab17293f4ac395a7e422e8718a95a7c8c12db6dd2bdf27df2794a7ea071cb7202d4dce9eec2cfade017195b10ed0db2fe1aca66750a7ed97d36c378c1d224d3d40348f849a5c0fc22d4a4062576d91a66ea08f87796437a45c091a8043de037ba4d336dbe5cd9cff399f8fa4639f13d2f3f8b463c984f4b25663fb54c3a3f3d25126a03d3ea525f9d159275488cbceb1953ba735b9e3c0b254fd4cc320b4b0386bde82b1a3c48354ef8541fa419408cd64d443d9203f9ba589a05f53fa006009683e7b81791c378c4a47c1d9ecd5ea3e3a69ed0cde2a988cdeaf5499fe8015a5d1d21e406d710e46174a5309f3c4dbe9d62a591ba0bd7bc414310aa72f1c12ff68ad32af8de1e5338361db0280f2d86ce8c51a061399e09d6c6f00a86a5b8b29e74c1f14e4f1ee013b7d712d56f45ac92b457715b7ae196694a17d7a66279d2f09d64f170f5619ac6ad14903a0deb83898b0973692fe55322d462b7a3c5812b6f965efb8a23525eb29897990da29c614778b6e516496984ead97b2928df8b726baff02502497b42a524adae1bc2ca21df5e218316b12e3fec9450eff9422a7ff9aa25b55a6140c512e6f00689de1759ef228ac2485c9a96a4bc394c7a66389eef8ade99be38a35251d8af5255d34d902908d86f8441abb62237c1795dc1745c1b13089c5457de9f632e88108a3f4d35a3b7d61ad17ea2b472f23c6509f11fd886e16d1dd58ef41911b713ab31e40fa5a217ded14a2fa354435ac812b9215d715298a66c51a455b514a95716d4c663c9153659a8ed11b2f8faf5a7b0b205aab98148c6d19070a9a8bd26a894486f726049e6f77f7a4b101f1ec6a35e44087fffa22d89b1eae37b01dd14ad41b462ce67ba4873d2ae97bdee68e344bbf7cde46abd7c94ad617ad71f765a80f77eac5bfdb870df5e0b77df8d6fc47fbefb5dff93bed5f1f6effc2751bec45c7e020f458e9f09d0e9c68413014490cf65aaf59e82227d03fcd0cb2bd9f0e5e2cde508568e4686ba99770b46daf17fb27fb5ff74ff16fe668a3eb718a84fe334960be7481c337adc0e9ff4ad1ad32c6cdabe4f5d871ff35fe6dfeebfd6f73749270d44902ff14d1498a458a4edfcd302df2edaeb5559a824d1bec6e5a1bab37d82f9a275455b5b57163e3f6ed3e3c8de2d070c354c6922403ca7f925f4b9a2c47382b5bc8cf07281ffa075f97c4e69f53d49425e32968b717d59a6ad0178662109eb3caa57be8f90478794da5e5e55637148a0632f95502180fdcb6a1d8d3bd8abbb049d2c5ba48ef4ac354c334f309b3f93384cd1c8fc50b12fed6a3b5f57e21185abffcd298602c5b3b776d1883569684f521e2117af8faaff727a138880eec06fd19fd021637658cb08e31afb5df866a096b6063dddc38cacc34721cd94fd6b8391294339223ce338f7204f341168735a5b58435551a76d0c1ad12684d03eae6cc373b7919516322391c5d3929aa65d91e13f8f80edb4362e63b07b42535304e13a3382d73095a2b2fe356cbf37398cfa6acd77dc19271240d2dbb7bed063cab9c231623ee2843c48075d9fa514f14eb61bcc6458a26c0a78bb9b5178a044190cf93e81d4e184bbb71346ee4ca5c7240d42b1629c3c400ad2e2bbe57acc734a707b9151f17299df1933bee3c6033e760da7c87ffa297ce77da1f919932f230e45029c7f3e5233954ffcf473934bc767bbc168dfa48de64dd5d8f4e3df07bb5e3ffc3da11bf2a7c1d51b7cfc1c33c52d2364db31e08efe3b0f9cf950ef7b7d463ce9a707371bde7eb6128fa5f4c80cca5027629cc5def8653cffc3d8e374e471c9ff296ee53774e4d24cc91f0b4d7fc826851fac3b1108b3d981c6e958da322abd1fd56f32d0f0bae0dd398ec89d6471318b4228fd648f5165e3b280b298a61d15a2ad212e87300c42dfa1d893791063de7ac1ff28a34caa26e403fd7083e5a4a2734425fe7d17d83a752321b4487203d7ba244ca5231a07f944817ad41fdcdcf29ae57c44d787bcefae273735e82cf14cfd775f18827fd49fa44a82d13ba41897a8b964e7549a3487510414626b90091f3c7affa3358936bbbfffaee3cab85c4d0daaa7f23920c248394254a44bf44221fd417d5cf77cc6b9db25e591a829dfee6715e0605215e7e6cf37c1d8b6760cb386c39dce818dbdd53a2fef817d832e3044bb57481538cea4fb0b14e092781994bfe64d77fcc608e9db20ed1c704f0ca511e9981cd963d1da3d3fa384a9e7ff9bc6379d05d14f95f342e3472a3ac2d1d5a3bc9b45716cf961d5277daddebd409ad8fcba0ba1e491636fff8b961590cfaf5ff92c5c68f86252cab0941869bff136c8d7d78e46bda1f1df9619b38d520e98231fc0f286e9fef12e42b05f9d3449a218d255dfd910693bab328ace04f5999bed3c4f45fd13e8c403ffdb81ce83443ab49650847b9c531bebbaf8ac852bbf3b34ae1984de8c6872193df1341c8fef82ab259edf8aee701f2ad59a3b1b860151ffbfae55a5aa0d7feaff2ca95368453b78b6df20506a705faf2d097ad2c894d6066431a515af94fd34141bf97129a421b6d249e402719c29ac20d870d9276a17f89fae3d057318a07e597904f5ae7645dcd8391c61ee0bf5af4148131e6742b3de113f1498bb94d64130f16bfbd7bdd494bd1abfe77bc6f5190a6a216ce639ad5d0c4fb8ada3c1841b63b81608f8b77d1ee1dc9c6b660666eca8d64645fe5f70607e1ccb1c8bf059b57785d7f5c3c68b902e177b436e6be7dd8b26b1dbdd34fa6ffc8087d763f4cf9d147a08a6801bb52197361f3498bff3a7a825462b98456349aafd2729b447e195230e3f235eef9cce59f8bee14dd24e6f1d4214f5de17050d2fb14d9f1249de212530d51805f3360b455967ae09dfa4d1e57737acf152b2907568b1cbc4d565a8a68ca480eee86b8a0377037df46ccfbd0eefdaaf75dff9bcb6dd4650bf0d1d22ba19fd3900602499328502217a2e2f03d2c1f1517d549186d60924a1d0999a1485d9e67419cfab7f3db5d7776df2c68f3bd5377fa79a8ebf5b03e8a8a29b48a92560fa80694e3845131855651b81c17ccc98051310ba3620aada2b4d5dda71a54582059cf47c5304af15f9d6e75dc720e78c2a898f71186e6522d9c293e2413dc3345a9549829b468a650253c3a53cc480f6b3ecccde6c16d92dbd30cf4cf30d66a80f35da904208bcddc6549a09e7030423ad31d7d8c2d5bedf85fa2ef57ed3369446a6f9e2cad388fb5c178fa2c825434c248276b72297c172b1a31cdcde48494ca14af95fc6a38d23e4917d23f73ce5483f92b96dc4c2a1a15ed8c56f1b55b9f9036bd0822a02516e6899eb2d47073985bf3ce61b7853933689babd3caed26439bb5dc6e710e422fbce2ad53edc826481ba5edd01a49394f244df1f53b5ae61cf26b866c880cfb14c1210c720e034aa13d5ca57f085668ff0d473f2067ba395ad33392a3e48cdffa6b7c4daede41729abb5e63ebc87aa63ffd7e3d61fca6ba6ba96f3e327e531fad85fe8f262c0da8efce29488e337f41d608d34cd3e37ab4e737bf0d49226c6f991c6280f15df8c4d27c5279981c70dc760e4c6db20471b44d117ccb5eb9065986504638219625ec4d9904b8361eaed14b483bcb52e59707072949cb3a4c63698096a89a5c35f414f61a050b9f294dcbb65cb287bbfd58198fa3d4e1de89acb9278735a15df9ab82ee7c884e63629a6f6c01e9173bbe6c0f371f36cb0f70fbc37d96039c3d7860ec2bbb5fdef56debe5a6a3869982bc80f485c68b0c0fa97928e07dcd7288b3f3a388f9964af8b6b3f221e5e18d8b3e32702b2805c9a213329060b212bd3072954d76c700ac5986d78a1d13e6f7cb0fa1bde3f92a268eaf1fced5f74d163d2543f12e58dc3df36bab490ce6f645df9fd92578462b443365b0e4e9afad4cd7e0b4f6a9ade11d7c0958beeaf5b3197846d9d655abcfa686377eb92391318708f4a75232191e2376bc13f79022762f1678a5a7e43380a582df4b3b6911559100d797688a36e43b645fe85ba0edd6462676e3f4eb97c18179ba5b251b26e41575a2dde006bcd956054b441026708704446ee9c6ab1a60fc230122fa672926fa84009464a3887a7d1ea07dd10efd468220fffdeefe310d03a9f6ff7f5af834aff8ab82f98c36a0b4dad483cf86b81c6f5d1e3830cfec74b732fba56e7cf7fcd910f35963f5ff4bdc9fda96a72f6b15cd96e02f74bc3c57146e84767514286b9ced71533ddbe0548bb417003ac5b6b02bb1ddd8b4a20949d851837e9611f33997395d5f2f06e69cfcfa9279315a3adf29d9369d7e518dcd16c7c594245b4789c1819c03e7f475e741716d02935dcc43ef3bc741bfe714b30410b9f359228b80dea0033e4994476bd404ca0ff4100326e7d0ad44eb81d2895a47bef341e67464f5018ea0fa673b166c1c0c24bb06cb4cf46231d069678b5dea6d3608b9dbd987f02fb1bb5bc99cb5c536fcee58a0fe4dbd743bd7b2711dc678e8eb1e0cdeee2d499ea8c5420ee4d0d94efcf7f75bdc94644e772cc81ae8b44f65e44a6e9fb8b56025a60d8df59b7768dee4855692e867075c63742a7afb779895ecee45a7dae8e4fbb8952c7c403372ace0baff593882e41d9c9188ea7a069f79afd306e11e2238c7aafb0310aeefba1dcd4409d7bfecfbf6fee52ec9ede0b61f3ba0d7689ed6c4ca309cf2f81a673d80a82c8d32c9c1ac267d1d098adbf8b9c5636dcbb6f837cadf90bce9c59de25b84d366e403cf6cc48bb357cf349419db6c7aad4e845f53e298b8d6aaf4ecc4fb93ced47cd99add4e492270374e7466625bb3084252300ec02e6c8390d7718a2cc569aa793465527130709e9b4b198c20fa1afd130910348ae6a834180942e8e86b684d0e5aeb47b072387c9a3d791cfe6a8485250d805e4c82cca49335d1068996d6920051d9cbd1c792a564b811e2f1284b638d723093c3c36859c96e093dea9227ed28f766255904ed75692c7dabdcc3318ab8837a0e7dce0e965884435fbf78a28d1ea5c168b044e41857f72bc28de6cac9a5fc1ba2b713f7b1f12939f8c2ce8d231c9150ed4c836383ebd78dd229eed38cd77fd54eb00d97d3afb8c07069e92fbf6acfd43c63cfaef9a39d95d448745ac7844b5d65ab59d338100de99640ba1dbe755dac298c4b8f03666d28848c90d0e24b6359895ae278f252d3a1f813e7e9174940684fd6c8b4d428c89d12a7549a4cbf44405e7d8d4712a56a25de299ee22f58f423a907210e92f6b8349abe510e39d621a1b16e4fe877900e7977a3bbbfa8978c5606611791347109875c83e597aed5c2f6b0507d3c1c6d827940cdf003b7f77a104b72959eefe301a5bf43cd3e276c5b9a3cdf46206b80ff67cad41f3e7d50aa7697ce7eac34ebdf11fe17872299e413c441423bc51f6207d2e45adbfbda335cbb0ce4286a15b6a8be6ed36bc4509e511a2f5e6620aa15c9e8fd4ceb33ef598d24a0250d8021f5175c83ba1624d71a5bcb6a4672a2fd926d42fa99a639dee83ce1d4ae69f767f69d6c3cdb7aa13dbae95e98ba93f709ea0f6626461ba699fea7c2e989a9c6808e315b1e5e89f573305acecf9fe42ae7bcd8f2867254c6bdff93fc0003b9a5255abaa807102a2eef03e70775b621887f906518e84f24e25f56eb54dd83e8aec509d3bf545d9e3aae85dbae97d5dfdc421ebdf2605d29f72c6f2e45255c9b53c87731d07b8fa74f7b29dc58b67a076d21d07c9ffa9130f6a7510fa0e68cc0dafd5011475b7bc42fabad46d720e7e14fbebc974ef81a70341d70eee59eff228b86e8ac208b3080d680f8f3bf9e7174800d302a8e8a3fb8f6e8b4c76dfd490786fbf52fb20003acf46b82bf61b609d2b2c48ef98435210e571a368580235e1a7eb6562fc1fdb0fc48a210b769c7201f31247249377e4f058ee8f21cb72b06f89527e10cb686ff899e324a85f99dc67ca88cfb634e5af4f524086e9d668051bf30f757a49fb48435e93f22c161c39cbf3ff5c6f4ad53d64f5a13f137497b76d1a456849762e200bfaa854e99859b10afee858223f272745aae7c31ef191d582cac115cc34a79b8c3a6b3460e8e2b0f4d9cb683af615ce43e658f95224f6caab99291172298d414defffab21d7960d35a4f1866093e58cd95b9ab2f0a50042dd46fe07d30990cfa607b910fb58efeef3e58d0f78ffb60b250e88371f56faefaef3e58f285ffe483d59cffcf3e58cde7c33ed8a3e754641c5f679a8e1aa71a2b052f33b5cdbd129a7c87f3d8f8feb6fe06ee861baef1d6301c68791cae79082eb96d043ec76ff0fd3c84af6504beebbfc1f7d310bea611f8aefd06df8f43f8ae8fc0f7b3fe1a01d05a82a49d1d8806b9daa9067af78078570ca10dbcb205047ed70cac57ba81b54183b183dda4f5521dc83553afdfc702c788007bff3e16fdf66cb90dd03b7e11edd3300b69c68ecf345532478d7cabccb560a340d18fc3ad967eaf5b18b8e28c9a968c46a7e4ff8cf6b3de961e2dd21f9702a87ff30e5baa886ea0af2340e0133300415415d66155ad1f01742ada71ae79808abd37486d7912509b28c0fa3d05bcdae8bda371733c3dba01ed7083069c89a7c735006bd10ecc7a6547ccd1c28083d622297c97c65cb2eb26d5d91da6d103270a9547fcb061edb9f0e4d6a6f18d6502e5a99f09dc3a441171c07df21ac6b902b77273bc10aff63811af688c0a841ce239b50550033ca7223739c03ec82d17d69f4368ab9c6900f18a252270c439e853c9cee02cb111276269e2cc237c23be73f30dd40ff32da8168b652fd9d4e6bac7b946412e1cb6d032917866a1fe2902dd31da331354310d20f2f227e81e51561d08344a8043d33230c25e780ff7b7f9bcd0dfbd23fb3badf0397be60c382b2657e0313e320d3a6b37cd20442dbec18c3b52a588ac07d959136b2df57f45762c86ee41f092a6e1b65a64423b12415a0bca929f5f82eaa213974a5bc59aec2cf90c0fb46e15939d155a67b171e729628ba0bdfc771a6f87a32da210d3a05e553f5869c07db3e5d86e2fcdf25d42ccfad0e67a805b4da4b43aa91b8fd28c415c0cb9918c4ef4572575e17353221b2af02a57055ed488694a9a782b8a6c33531be33395a12459121d3a33fd35b7befc625932ead370df8623b4fa127784c668e9db158095878228e84d47172a62b8b5bd5a84357309c4aca5ef56000fc2068161f41e0be7849c80faa25842b3cd5a748e87599ebe4563143413bc05231fb14ee3c1f054942ec0e2e5fb21d744225f4a0abca9a444353b2e0ccabc0a9480bd7bce1496ccd51f24faa82d3d98f5b209637656ef2907552de3b089a4b2f4529f075900665af461649fb5c1823139d5b00397f29441ae3e22cc315ef270a709d346117f5834317ed762769c0a54ee51969e18bd2b9650e5c3fa273c1d7ef503e5c9fced1e8aecc02b4df4ba0ae835778cc95c42afb6e1d97ef20ab452a8f2e8d59d2c2c8ab149fa40ff388471275969d9925774cecd09e8c1e1f49d0ac9f01ad1c2a6171a11a6a986fe247a8d4dcc925924369f7ebb1baf344479fc61112b03a24042c671f75b4b492c1777ec35015a5a88622e52e0988b98ec98f074ff881d996e9d7678f5165f17cda035a77eee84f33de8ad502612b74980673039d3a20c82febbc5044eee91a5c154300994212440f72544da34b59fc346004f4ae22d46bc39bc07ad9a112ac7f8fa01426bb9006556d712cdee69005124f09c69b14982201e6e654d02e6a2b8d972410a58e3eae7294990f8844517af3c02f11f83fe5f582de9d87b6100d5807ebd64a6e5c5585d58f1d9fea8e641260d4a70d6bd0a6d04e299b7986eaec0918f654d5a02c693272d3bc92815f03c096589894763bd240fdda11ce632ac71b302e07e50e23cb7e9a20b3d876491eb3b1924ae323971e4bfc8ebd15a8c495b697907e2dd05c34e0e663a65d18ae845a4c7d3e9923e74b326a163613baa7b6fb23a02f18d2a6800330ba2c820106c898b154d26812e84da23c6b17728bf3028410573b1c9ba30df73149925dd14a58dd894268e70b7cbb7a9551fe5da2ca265f53bd2a636e196b2541bc4175d1057732f431c61463cd871af828cd8b47b7e843228041bbe79339541376fa6c2b1ecd4d2372a46e382049221db74b3a0fe31e693966c531419b748f1975eebd55ccf9fb2b350ea652ef5ec50ca5ae807baadfd36772a14dcb6d60da56680abd64fedee94069cb67e3354b604cd58fd4b864a5351fae192a1f22d28ed7a7ea89cbbb577f7f9a1f24294fea570a8fc004adb0b6d3649dca29f976566580b8fc3feb8b6f7e65dcdfdfcc7ec2c3edf5a5807d01eee6d9b3b7d096ccba8b3bb53cd203de38ba1b26eb032e39ba132028bc9f861a8cc0fc3325287ca42b128b26f3075a874064cdf1f5c3954ae81e98ec19543e54b60ba71f0c050792a4cd70c1e182adf02d35983ef0f9533300d06df1f2a2f44e981d0a1f20328dd173adc2b946e9c68e722fdd60adc3dbe5aaf91e38ba04be211a64c39c28978b5eb0292740ecf63259f5fb8cae12f4978acc6c55e6e5414499ca434d40aa991b28152c3b28152c3b28152c3b281528fc80687f5d9860ff9917f04ebcb8f607df911ac2f3f8215a578895932542ab432542e48d850392f51cff33c4d7c4ca22eb79de6f31f93a8c447242af111894a7c44a2121f91a8c447242af131894a1c92a0a1725e82560e950b123454ce4bd081a1725e42de1f2ae725f4fda1725ec24287ca05091b2a3f8ed2f7270e950b1236c43d5e7f8b4fbbd3bcfe161f8ff161a0378056ed057fe5e3c91a61eff9c96006dd30d069dc770cf6db58b40ae4a890209f27900c1dbcaaa51b9d38da957282a87a15089567e6118e28ed15909937c1519cb3cf397407f71bf79708782942ab378a862f6cee14897d611f7ac7afda902d6fd3d2ce8ab021dbd7ccebc690e55b9c6b46d2d66cfd224ff11dd20a3e779f19c919ebcae86bb60de770fd77fcc0f1a7e485cc0ce8af92ae2791d4f5e67d9157f2ada0157f3d6dae455af28bc6ee4e233985753b602bbface5ebaf386d46f2c620791bc3d5bf166373972089d340896be6724e9b4b5620498a223b07bbf9d1f82b778fc7457640bdf94518e115282fe6119c3f5f9bc195a19228121bfc99c39329bf24d480e38b212d6778edbfd6cf8ded9cd861ec53cedd3e8e604fcdfd2df653677b8f8fc47e6aee48eca7e2511e2a432d101857e342fa6977d9c896ff79e1f9e3a8e5b7b4c32dafaf6738d8bef8dfb6dc7721fff4c896fbe247b6dcf718f6f60b1338ec73168ce8d767329e9284980c948b30a316382a2f5eade6a8893deb57bbb536bf1be2587fee8b2a3e0fb574565ecbf22331473b0c33a53eb31ac95cbe966e479e052f73a6f3c33287244c383fe44768f837252ed35cb543cf19174a7ca3ea7661d0233f38f2fccac226e82113dd1ea15f98b534e8f6e4bef0331fd3f03b4741e72bcd090cff9e7cae9259289c5b2d9dcfed18f23b54b5958c1b06e82b0dc16ef89a4ae411f2f0f17c5ecd4758e8a3fbfa36d857d121133068b3b4d4b65e60fd3e0eb05d5d2242c688035ffc003cb303514d8811ddc76d3c743d38afadf90d34b4dd62a815f3bcb498c6da5081e5e638729cf785b92b03c60b75a4fbab11b74493c598781e98e7c6815a42789ed98185225c8418b361021ff7dfe62c4b7bc51437e7558779ce234b13dcc8f3df1d858dbcf714db476846a6456d324d1d4fe52226877e9b0cc334d71bdc7708158b904f686d9083dc1c4615b9a41b60a11b6c68fc043ffb3eea7dc95f4fe7e4960ee796f6f0b9d6062db83a023aa8db9d4f62bd23f24befb9f3ebc172fb08f85fb9fcc5d68628b00fb63f7b49373e6324be0e77791aa81b89ef8e3bdf02aedb08c1a226ffe86ec504747699900b7e40b97db148ca030eba734b1bf85c4429a342e7059eb7b9cb1a2fa1b253da5e6ee40f2ea0b6748f2142ad723f80a42210ca049c95b892c0250cf842b8e15cd384f27efe2b8a57326deed51d3e0f51d46c73dfa273e791d83776f7ea0e478df6ba3bddc8a73bdde95ff834c48399edeebed7032647f715a6c9af17faf43316cae3be6e776b5ddd1074c363d0353ff0d0a7623fb6fd16daf91874e36537b4dfefe0763d060dbe77434f1e01ed7e3b5435c2727ccbc7fbdab53b62d1a9427714740f460fd9597c597dda8ed86813d1cc59b817ac0d2ad85afe5766ade5045abfed49e1f351047eea5b29c48260a2204cf1b95cc84194d2c254db2f0c1c517d1ac1ad4f0cafbda6e94f5ad0b74a4ab468e4d81e17a0f35b70bee5b4e492589dca5caf585b7c4eba21dbe29eb1f7e5f8681d7b9d038a95fd0dd2d4661bee47255dc284f5d3bfebb4b30ae9c27a10c890203bcb77e595042267cb4f0573d1e972fe54f917420dd48ab2945cc6d7ac7b4358fb583aabb0281653a173253b62b150c8174254df3d287a8a00fab07918db23c19b07309532a81514c1989de3c3872d2f76dad0f762ace21383e88e7fb839b8239011835c2ddd5d815bf6a05348615b2909186329e4d6ddff2eac77e9792b99958b95166a69ff1e1cda646b8f98af61dc424922841a9a3785fdf72cc1d6eec44aa11d2fec11b0c76fa6241b0558e675be4f4ca6701ac08495ce6c9ada08713739bd71b9b0ee1d8ab1d196008d28ce6d25c12fd9a97800b5f4076cf692e378d9ea40dfe9a06ca335a90e50f75d6302f7d4039b6b0cc87cdb62e1eaa74517eba36460b6a44e1d98180f4415f51e986a9b5559eef4e0df978f787f867bd71fa8f7a0327ac6048e8b07ba50b6590394e5362ed7671fd2745d6877319f438ed285f6162b0fda3c3ed7224842fa79bdb28cc48ace45467d0d02e52aa0c953965678c6e429cbe114adba527f45cb7db1464565b85c57ea8b1660aa746bd16757e058a27b8457606cbc5b5454cf9f86e17926a1294996b7c0df549e679a75c26dc0cd58696a287fcecab114f76387642cf4a5e842c54ae5619b94fbda8b9cc0d12a19334fc7ca3f8191b6f4e017f43e3f922d84325e84ce644d5a72b848542505fa49b14037896d9d0494c114c64ab3f0aa1d72d1d922e5479f00e5a92b00d2825799eaf140f17170928994dc07d26f8399694d82fffb2078359c67b95d9be6cf8473690ff81361eef360fbbbccf31cfbfc1e0eb7bde6b947dbf67fbced23b0ed6357008a94c153beb1d6cb3dd8ed01452cf26c3ecd53706b1c313e5e9aa155ec539dc84a04a1b9c2066b14fd6fedd62d799933e6fac5e42fcdddf15591963b990dc7023dafd41768a3c8dec14c79efdb05f5df6bb7e4c1515ac0957c869e2af82c5ab00d8e5211972afa0ccd9cc2aa1fa78dceae9316425be4e0fb77ae869f7fa70ad141d0b3c2de1023fb54b0c209829def1b5e2545a78004ddeea07c6780326871244d4367774f0b36f06e9905ad1509b607a6507d94c39f8f0e6b4a68e4f6fd843b8a208e8554ca6d9c5fd61e6d61e27d1d7caae266b4c59fae34d04f3600f931f4c528c3ade8026972409d40f572658478e84469560f5af54d60ca52f0b5fc0e5370238f47d582a80db62846505b7a54a0cff1287da309815f8e4acb0e3a724629ba9f4f423f3649d1ecffa9e2b6a213dd32cfce52a416bd52d25cd456f48aa773d72dc5ca1d9d0ca9b80eed64aaff5a457ad14d5f67411acd96832267110d6be099f222c70e1aea0bb7aa66acd069679aa01553ef5a45ef3d00b2e52b353ab6ca548147122e889d515d9738d8fa012435c23adc07c335f26fa355e1ebf16895eea4658703adca293f22015a23e46abe57dfa7d37e6147bb8398f67fa29a3d318893db938ceaf644b9fd0f61af1ed92d44238346058dcea6c9eacefe2437ec69873b862ced9a70dd7d8612b864b787ce53f60ab2f2501f9505f0dd8ad44207a355342b9f0ac574716ea82c171a9f30065fcbaf5dfbafed7fd131563508f9d6dc66ef7ff10b9b70e3bdf3d13bf18d5d6e0ca5ed01754377fc9f425f9819e921ea3bf99d0d74aaf45e88ba53a0b373e8ab34adc3d407dd1aa61edc11fcaebb6eeacd7711f5e291a74479ca6ef9afa50b9b00a2f8926da8fe4dcb79384286b89d2529fd8343bdbdb5a177f80cbf7b2736a1b1d280b82bf06be83b0ce09770834fdbd01ab06023d42d8a35b4bc1757a4f4cb154df4bc0ed86b31ec3dfc41b947b4e16bc39811f45d1f3a972e7c4923e8469b5dbe07ed5fac1e8bcee008769712bcf3a04d68b79d97f713fd4ba24d878dff2a6ff0d48571bbd60fbe8f2dbcc168910e2927bb8e71b37c45fd316ecf19bd7f481e45725582665bc0847179071a8e0abbed366e3ffe0806321319cdcbb168b71dedf61e35fd4be51ade6d8f2d74c88f23fcc70f734fd5a5c35c6dce1790fc13edb6676749b574713960780fe1839e7feaa03fd49f74dd8ebe41caef2407376e4223ce9f234ee36765ed3f4a684a3e1dc67c272d3e6968cd19cb2f4b46dfacbb12ab7b074fc1e54bf298d550179f8a5c72092f889d5548c11908638bce61f957623f39c75b3c49136a45188fea11df6578fed1b2c653b26661e4e911503739a8212e9b4afb13673e72a2a1484bcb5bc43fc7069a5c8372d4bf909677d1597edea76a78977b569225433c2d234b3030dc6ef271bfe611edfd7508ee303a41f0a88e6fb1f3b302aa2dc0bf8ba2d9f0f6a9add39a366d1447b8a511ed7b95a5cd4dbbb19a971e63b7b05fde6369e46c7d53e612213a6de367b6a16f453a396b2e47a739554ba3a1cdf5200a68bef7aa8f8a5b2a2d994965c9451c77a16db7f8bf06ff6bfb6dcbd38d4d658dfc79b765ade816fe8aa6558dee7bec35d7c37304dada28dfd9c2dc52915b6629a22d1fa39dfbb61ccb7819da775f4c90458e489319f8d27481c45719a1c28a68e8df8d7709dfff00575971966795b8100fdfa95be0f7ece58230861925b4f33e6b30e08ea29c4108835789f7e27205ec89e7ae344b20c49e336afd688fb092556e3d7db7dcbac26d51de95fbc9d0fee0ab61c2b7b9c03e3ea72ec39dd368e5730ea4bb736af65ae4dc79dbf86fe19c69c2f854457cf45e65c41b98309f66a35e8a669809d43361fee5f2e84d1560878325b3e0acd18dc3a7274b9841e4a887f8b2c244779bee678330df65a159fbe3fa85058ae48f5ed34799093add2596a494273f7ac60e5fbf52b02afaabc2bee15ba8e67197823ec6d5735c6fe841dc3d64ffed093d543b3b0b7d5f047d5b049d9045a730467e5f44d0a8f3686616f0ff0de1a7df21c7b3e343851136155e867a1b6e0ef494436d3061f4584f09cfa3b4c8489309f8d3670cfe34718e4915e4f412cb145608fee797421bdff2d2a8fd13fafa50b0a580f6a6773bf8364daffa3a102739cef223f29d057a1aac2125b7caf42256126b0980ad99cd53e59510a7c7ce549d0a7b8e5ed787b39e50863c8b45722817d4a89c70cb3f00fabee09a2a722708b69659a31bf551a340097dc071b9a03fa9a42678af3eca03b0d0333df51a9ab7e19b67a4ec073cba7861b17ea60c4009bdd70088e778bac8b468383ef9e788e7d0098f75ccef7f8b049df7e05a794d7fda84e9cb7301bde56770b9a0a066be9d6572c15466aadbe7cdd09ff022ca52751729c64b24d8c92d65a9a2e3b984fec42840779503e5917f00b72cad2e5c58c84335a667a7e94fe412bbe939af3a9c3dbf12cf85da84f14a449cc39e43bc3b645b9a7eb1d5d855d651defe65d3b78d897dcbeeafe85ad5b1ba7d5debabee9b7807a800f758932f5e449acbdbe99788fae86246ab8ce805e81b402d29f16bcbd74ad6dd7863ee9b656fe26fdd583f7743d906f455a08b16cb07686c429e43de5aa42904f3a51574e5ce8255a736d1371b8094f6a461cc26ecd037eea6a09e471a76e202bd0b234d2a4c340b7aa6dc98cef7615e89de05c7115f9823df0747d7ebc3236cce3f3eb6c077367743659564afa8ca64045f424a27d617a5c5886716f8a72d2c2872d2be50f2d28a9c682507695d95e9017eb160557124518947172e2b54a496bc56d2a88c988f9524c3be7aa0952fe52c578a978d0ef000eb8cd79857dd5ec2c1ccf12beddc1c316c7d59e883f271a5a6126a44f16702fdcf4417faaf9cb39d21e70c2a56f2967cd8ee96e6b96b69e7a25a85e78475815928c63ab53dff3354b75f8eea9eda5eecd8942c8e403f1ecff274f4bd13f4f5136481f92fa01cced9141e043297b24b35226ae9a780ededdd8e85476e3b04d865dd223a4b86ce356ea7737b71463b5a764d8eee27b0e6801a6c812e2ef4204dc8a4ee9bfaa5d958a895640659d9d7359101bda0ca7c48dd66a74999849543bcb28eed5e0b6ae31c75641fdbb04094f9e29fb258976b7be4e6cd18fbd343d1c7f5146a47ef9410dad1e215f2a5bb5893bc06d3b2e3fe007e78bbcadcabee1ff7b136f2c21b18ddd2201162d0a29d92c37b4ae61eb6649b74f38905a76da815d9827d36af4f86be4bb88da72ad2b70b9d86ac31e76db1c93e67e5e701fd2589be73b2dd4b5b1bb7d6aed312dae7ed282dd3a6dbf8fce76d949f01d0af9bbdfb0374f1d48b045ef59219ef4fd2b16d79ba772233ccf8052612c685c8c7a0df22b1700bcbdc1fa4d32aa0869218cbb40e865b22493226f225131e9961c2ab8ca4889593f85c13ddd7002a2d1409a19d10babb015aaed641985340e085794b7755457580e59003bd7fa697748ca6323603af73322dba7b458b6f7a7a69e9d1373d687f0f406574a1b344a206e023a6e49b017f2fef86bc5f9e096bcbd414d9b8dd2b8bfeab0b98619d07d25c2d2d7920a5090f69e68b2c2c639b5e04994bd038fc49b732f75b39e5db235a9e1b935b5cb3a9d417fc8733d9e37aa1a40480bad389c604c33213c2ec422b37b8cb97d13ac6b9bab038a26c85b1d9c6361900168778996e27e216fa62f15eda4fed1307268af3ed937fbc6d9f31c0977e684f1d60ec8476df2d76eb66106cda7756e8eba89b52d857d14d69b009e914bb15f656431b4e406ec581952ca595032287d05491dd6a686945f4d91e295ac742377fccef55257e00d0a8474ecf024b76b19087b9e7cc3c5ee28118d23be6018e78c8f23cd4231eb27238de57481c416171b0373879876d0a019da7834d310f28d200d6da824d4bbfbd6adff660a2f853fb4ad80baf2c9dd6319abc49b97c41adddab4668037b80c336c807c02f8e967800222ea034346ec3805716c2a7d3ae3d1e1ab7e5c16d1be20be201165f1bb7eff470eac3e3bfafadf7a0b6f6bf48416dfd7716b5ad77bb2ebc6d17bb146aea181927cdf428a4a96f8bafc9afeea264484fb104bf83b5e787eebccee3f581825a5a5500b9c3dd933c7d9eb59c0714a7a331098efadfd7d1f73fe374d4f0fb3a7ad10235541379611b46ed9003baf9928785415a7a60e5b09662504b193bc569e981115ada18fdb8966ef88d96c624ace4b474bea0a56b052d9d3f82873109bf27cdb4d8036c0a1aff1fe439330963d9cb629c5d22c67b776ddb154914e0910623d4d61378155388b350efcb0a0f17d0dd06406871f9c93d992f62bb235d06b0321797875b285f0bd0ed4652b69c3d511093572e8e6c6a029c362e23a56c922f2076405d26efff995ed4e1e1d665f455153aefa604cab7f9a6842efa2fba4c4a055d762c72fd0a35cecc49b0ee8198cef210f3ba4cad5b0664b685c6305e2709d758a4edaeb1508ac7baee63714f733a19bd639ffdb95f278ab7d99fbf76dbbeed575e03bfb1a50e6c784c03390a73380dd4731a58fcff8d067278198efe3ca88145bfaf81088ad3402979835a170e428fff170d14938d54c6784103b936749c069a380d348ed440844fa7fda19ad7409e03d7ab86a5684bf53d15d4b2242a096a999eca706d67258d7f6ecbcbcca72fb400e2eebe5b281a9ad0067363e88b2d38138fa9be1d471111b197f202f605920d3591972a00da55c742cd5f31da4da572b4daa3c53457edb5dadbf097b9a4dbe68e69bdbea07c6144ba7b68d562341ccd58f37b1419113b9b70a9237d3f0054b76b7b7fd2bff599bb5ef08bc91dfa0a419c4e7bd536bca2b398201a11e536320b042edd82f5cbdbf2a08d18a353595fecc6282200500590b35b9ac760bb7dea2842f6d456b14eab2ba5c7ca70a8599f0fad7548ace412411777cf9acd54c0797c624d14a906bd798466a11fba6bb9553c7fd73b2445746ca7b6746fa7e41a51e612a47503be4b7335b9c5e7509ff995117e9d0e41a2f9354b1499d40d65dd3526c0715ddefd9082923221af0ae6c9196e5f21b892db879c4d54a8d13784d197c0310d7feb476411fccaafd01a5b8c8f4e23ac2071abf6ea52619dfdd00e7ace86fc73d916d89f64ceff4ac47cf8b2b4cae05679015a638cab9cb00badd67819ce187c9a86d770327d59f974500e7dab6c4bb3cd5d4f5eeeaeb7f900aa87d636bd0cbab86833bdc780f330aa0f7888900f26ec12cade333cc203d6321d5c84981971b6e5ba6d64ea07fb8474743fe24cd3d42efe8e84e0d7d594d0d3bdc38dbb5e896624edeefbafea513792d17d01c53af42d3bfe3be8c3df459f6628beab0c91004cf3fbf64e5f418c3a6ce6bef1b982148b9e9680ca9d997fd14f3703fd6c19c012cc59ba102be901e8af2c40b166a7384686be07286eededc334dcca5488182cb7b1f27070cdb22b76a13151d8cdae791f0b253c1c546a7fe692eb76cb112efa68e8b55118f69372ba4f88724e7eb0f2a9894ae5f43f29954fad9c78d830cd3c334719a10b5146c42895739e9fa89c9e3e11a627b60cde7c78c75569164ec9c728564633671a798cc967c25bb3dbb26fd33b65405f2123f29d0b19be24e8e294004238fd92d5adaf106ef2370cddce67c41ec20dde537acb635f392dea02a886f095d3835d1ea8defb39c5e74ad6bfef2847bbfa355c9c54e3f5e9ff89b966dd922901c2fbedfea4e876dd41043759cbf65460f4be1689c81282d1f34989086221727c6e3d8e21e8d43086a0b61f8d09c6f2a13305357f096fd7437e89a66321ab52f5d3754ad1d39852ffb42e58340b0bd6cfd24d14cdc626ea67eb824473b0a081b756649ec984dc0fcdce2a197ba633bb37fb129610bd2bbb3dbb156fc4fbb29bf0f60403452ec2f55a31283e475b9dd26a8f901834a37c99a18c988229a7bf8c5db69ce93d9c14e389be4f77f2d23e2d7dd50976fb7034f1d6ea0a4d112f529ed8b81b69d5a6242cba9dc3e678cd1b3cc792be603f8979f42fc73bb0b8430b429fd35f24017f2b8d95941294a414b79a3c06024d2470dc6a89cb96cb4ddcfec0afbd689f33169d1b20c4b9b685c2773582262a52a1243409b2b52fbccf5d92f5a4626d74e38d8cdc73d969c55fa13b2bbaafa814b11a0bc10eeab59d1e6627fab6fe7eb2d3a32cedb81d7d9beeaa4daf1a05268e8aee70349003e8065d74079512077ad1f7e4f11fecc1696569fa04123024fdee455c347514a42b07b0e346e3f4771290b9c2ea351accca896ed2d867bf5d2d6248fd45d760b5d71d60653cfaa79a1c5b4f0f4437f9d974cfd5c1d6c4d203f6b234bc03cfb0eef4e867c8d9a65bf86cd34d80eaccea083479f43b36dd1ea8859006f0b1ad2c4d548f66d02c09edef026569b07e1043426c0893f899a1f21aa11c95c112dc0795634f43fa73407417ea1de2bdd2b37334b680790ed362cfe916e89ea564ba31278df4621b76c7288aeff4b09a2420fa3e76c18aeecadd67b786009473a643577f36c3ac82391971d2335d1fdfcdce38bbb5dad8a0a6977d2dae9d27df01c7492abdbf6fe1e125ca084f6ce1d640c60f5432d4184fccf1d59549cae93f83a37b4ef4565eda17ffc62efaeb729c979993f785f5976301b5af79abc3e23390e4e8211d87ceb2924e0f65c4cf808947b5bfdc1ae3c9484ef41e4e44dfff3b0af1d05f5f780c4bf21184a571228fc598f1fe39df0084c13c84c1fc9f30740896f49f0843cd040987a13c83950029bdbb4132b2b731f3fe9ff6de04ae896bfd1f3e936d121605230404351871a1ad55e3be50628188556aad806b0b0e8b581565116d4bcb164258448c8a8a0b5ab77a7bfdb5a61a2b95c50db555ab15b0b65a34026ad5caad082890f739331308a35deef2fe7f9ff7ffdee1f3e599b36fcf9c6532df73b64e3e1054a0a5df9fdf550c6d45b8ac812bf66bf4dda0b493aff6b12eed0aebd2b2a9d4ecc6a984ca9854c693461535ab868e774830136fd46d1c6fa1d019723d24432ac4f1de71578cb88f46151c6d3950d95bed9543bd63ecf2e42517e158510f1ca77e85c02130d15420723f10a25cfd00e1a7173fb18a115f13ff68c1cfadcace74a97e4297f05be8f0dd70f818b46c1cd61ea23fa33dfa44016ffd45fe785b44f9daa21807790fcc24c4cf8fd23654a5512785509a07eff7d34ae31f3711fda9beb62b4dc9f662a19ada5abf12e27480f0c4dddfe0bf20a582ef668b9694c2bd1cee6d6d519291ff922d8a30ea13d3d1b18a89b6d20f6ccd7ad296009d1d6d8b4aeea68dce46250f32252c4ffd86d78f309beddb28088c7818814f5563ce7d2afb840a66f88d38577a729940a6a3f9f167a9aa1082b9979c65f247bc910bfa9fb2973fd21631e563e605353bf6df3df06076a9464d3937f21e465155e40b621c7cca743de419737ff7649251ffec691bfd0dbbfe99187a15be42dc6023251d44981b40a5dfc34faef0136c17de1fee878aa07eae195f29d4f4461d23d5762f1dd553f8323d82e03d97d8d1e705a30afd1ebe664ee79850a3657d084cd9e4b65547db42a894b64138b7c41bd48667885a678f96666ba6e9a3040e4b17a50c2c7994da7a6129351bef19d92e534e794a97b0a4952ec19a678356682eb3b3a4b2ad535dd9deb49aad9f3c463bc92fd645116cbd8716e036f0ba39248bdd5b7e85eb4d8ddafb47a6e78e3240bca271cd78d6cd84ad3078371764e0af07f6fc7d4ba49bb6cd7c2ec7bb767fa40db4e565cdd1c74cac68ed902caf5cf644af95f8b48b92663657c90732bc322e6b166918579fdf8e27fa276aecbc6e1a32ead180c4b4d3307fc92c244954f2f893bc9fdadb4286e40ec9a26c9a9c9346e39c8ebbebf5803d23e0bd2951f716ce6e60725ab19b3f4e8b087f7fcde58c7b1aff9beceefd71d4a4225ed642c85b86bfe69e65078a85d05a3d4f27e21db4a8ee648fe38975b5f87736fee926742052aa7d623e5acbaf7862a678150e52d11a3ee558e1703c915fb1177d9257d71e992585d6196fe3a5ba368f5afb8b7b420875f23ea2bedbaa68195798d16a1ef5a3f4c9d336a9d041206d7ada3dc58f72de8326e2af32ba6bfc14e8a61d1e8fa86a11f48bc5191b54b47ea206bbdd6aea5a752f29d960374ef3a99f543c54545c7f98271535990bb524ff93ee4dedc515877954e05567c6fca47d954c2af2b0a316ee75de4214934f7c4aee14e7aa09a1faa196f25313d2c49e88a89814559c5b8fe0a929859e0034a8e411336ad425ea2aa4f49371d346144fa8938e126fe09124bad82b7b7631f1c6a669aae2b69092c741873ec93bdcde784848e75f6214da7cd2fd5afb78ad5a659a4bb6d71edb931899057d2cbf58db8a1ec048152aa0b29f617e8960692eb5ee1972cbed0dbdb76bd1d2dc5cff79ae4f347a718a9d545c6ebb483b232350b3a299fdfaa711ebbb97eef847540184869c6f320d59147d4c0af119ec3e25a84dbff0d2fcf1af01888fbf8f5aa1c19a70198767daf38de31f494e09d5e3edf7aa16fd3827e4e816ec4e3f098c7b80e34d6861c8e7b022a948860ed6e2efa0864499161598c34a712aa675bfdcc635a6ac7f80888154d01aa1eae2f1a8f1da02a2d8de48e86d4245c78a866b4b320e1d129269ea26b350845be0ad4352d2c36e532ddd6b100d765272981d8cb67c9c860235a1dd87c67e733c0af7db4b4aa96fa7d26d52974b541c875629805897893cf61d8fc212b71ce5bf8618bf7aabaad0be0fb498c007ef08414c3365dbde4e79c3346b0de4ff51f7de4575b9b9a5383f9a690da590d3e905fcd4a8e29cfb3efc0a19b23fa121352f79d7a4d2330a936375fbadc4f1dabf11e3c9261e2ec7e043c2572a8d78de33eeb1144604dc3fbb562c88da68eaf741bfe898476ffe04b644c433f82f9080bd624d3dfec2325e205f10459c5424d7a39ba51b4f5c2ae58e2cf9dfe09185d1b214359ea5f81dc523c683263c62e0d1415731c94d3ad796dfc08e1bd20f9e752f2fe5613bde4d76867333515f41a6e15e56e1d2605390488fa3ef95dcc77113fd756abd4d3219c4faa567a121fcb1309e25b7f19666d03b60317df116af6c134fb8add8de5345bc71f728d817d1fd6c13debbbdcdc8cdbbae02c7af517f6ac4396e7cc6cdf17563678eefb2393e5bcae48ea44aee77c6b495ae05acbd2917295b3c32213e5d1a183b3e11bf654bf4676a48a76e39c684d7ce2fa753bdf95c3d2db1aaa7242393ea7c633fad46fdd511a1da945eef2c515379f536ad36d2c40ff0d7f8fc4ff2eadba573c723a9aec94cb9d8f2f42b7a22dd39acf398cdff49f71fdaa5ba7ab3b45bb9d3522df146b1fd1015d313e0563fa785f43e80d9f594569b4fa7a6bc24153feaee394d9958c8c7b109bddcd8f8a93c5b5e6a149e8d53bd9ef2a84c924fad58c2bf95b8278298a294b4f8786758be8a967f9c1a85634903ad4ca948c573da1a434821dfb46c498b77f6396d90512a29778a8cd2273e4349ae0c2b5d3af70d786a5a90c9c9b67d472976fff499307b6c35aec74fec1b7ac62007b149632350d8bdd51db7ff9cc7318ff22eaa448a11eec441985351d5072cf3b4d6c3cdec9acd9692093f8c4c3cbd42da9d70de1a285b89e7b99901e593cb47bd9f0365bf84c3db31e1bfdf6709fff8f023363c09e1570e48cc58a1ef06e127ab20dc0a08f7ea4fe574b8c32d072ba9ef8e74ce0f99319d4fb90be34589993d7008d5682f089177432f9a2ea2aa82675be63de09b19a3cca2c4250f587d7f0dcf1bf13eccade84088903cda6259a7a9ecac566acc9ab88d72152ec5b3bd6b21d4693581358fd292bd32a22645a9ec14635adb8f472926b4b65f483c4aaff95eb0e2637e656ca19c848b703c6e92a7662a582e2b9fb2f58d21211712a5223ba210fab2515aea84175f96488fb3a31423602539f43ef2de74aee530c4373c87faa9ba47cca398ea8204fafdf088725231f46b84579b253057a57efab16b7affa07a0b17ace9a11a3b3c27baf45a30e5fb9d33fb3cbcfad74b5ff480ea257c87293dd6f5c04443d45354999732f07c454694946f47e0b8a00620ae3f29ff5d28ff1c291f629a4355db088a6da6ab366bcbdfe83ded407060a28adeaffc6006553157a2f83284285881e73e91038e6e5e67aa82d6c7f155748def36946f268e0fafba15b0ea7e9db84ce7406ac7273a7271a2fea46326d54310c883b5496a08f576353a1eb220eaabeddef72f24e67f631d63cd0d98af4c4fad8479f90c5c62ddd74c4d0bfba8c81c93e2cb44e228b40435ff7c57fdf811f4632ace47f9b8cd5aa7d23a58256e262e6714e68a1035f773fe5258890c0961de0b7c4de0fde70ec2ba046a7a3ea73cd5503f9371ba0fb3a8efed51ca94e2ac792a2a64bab07c1aaca48299b6533bd12b29a8abc0c483197a58f150c7e73b611d38ba19d7536ff5901c6ecca1972817e1247abd9328f031d86c22f22f1ac80062ebb4921c6aa36d0fcac5be073653bf85102559a0e5a7182d5f7ff19fd5f1b27394543881d696b933368d97cc561593efab4ab2a9992da8d05682a879cbf8b8b5e6415d7c48dcf8fd77244c7b9c82e77b148eed8696fade16a5a8e7cc1e2ff1528d873ed0142c373dfffc982e7b9d67daec14ef8f9f0e7919d5473894793a124a55246e1bba75af9fe9aaffc740ff87e4400f533e6e48cedf8f51427b9ba4897ba2162432f5722bf1f97aa1ae3fe85aff5f41fd7be172f0a28ab5f3547c35f4ec57ea117e7f43cdafe1596ae43efb04a9ec0a336408f2f2f375d4b5c72bfb12ea7700b31ec66f234894e29f1aa59a8cfbf5f5dba9c98f04ccb851b2d9f3506a54dbf83699774d7ea92c81de37a4014a39f43384fb53baa43f5bf4b8c4d29f1e00fd976724e6f480fe77f4901cfc5c620d639e4cd3b4e6a7f829679eccd3f78f16e0770625a07343724c95e79bad4becb39fea2bec8573a929851ec61f6b3f2e93903cacd5db82cefafb13fa04e84793853d85fe25958a11dfa2a32d5803aabbead36eca4de8acb7259cb12696db2a8e3cc39af8f5b33fd544f94e68df1e38a4651c28b4796a6677c4dbe6597e20243051f1e55c265792a39b159fbf4454d1fd6cb92df4b35ddb6f6bc45d1cd31642f1f933743aca3f4a9a634be0fdf7b9b930fd587f24a6e6dd36d3dce96daa80ded368edccb0b5f4ee3eb3f9384da687df7bb50452fd0531a91ecc8e36329aeb590d9afb7931527cf912a3b973af77ed6fd6bd72734d8ff27107b3a719997ac3e1bf30a6264e4ac47ba399e6257f5e3e45b60aafbba32fe12704d7fe8544360fe7b3788a1139c87bdd4e3a9ca9b2fa40177d5f6db2137e46096db3ae692ceb6e1f63cca3ffd141aed86709fa2eced3e493bdaa11b7b66a44406967b832c392af2f24a6d4a75642784d17ff99096017837707d8dc7607d664b551bfbad9dac2fc23cc492af9c229e651f7fb78d74929417ca118e331adb150d1b38187dfc07be906b9969c4aabf684e7c5315031342550e1d4c0dbb24a31217fea90f492db5f870dbf3daaa6e4fe1689f77def66bcafa5f765ef9f52cb983d17e4535323fb45be2cb6ec062bcfda9f4e4d1122da86c9f31ac7f2b6996921293cfcae605385f5b942835c99587c26a741bafc1144e0000d7f2c312d6d44ca34c8e99bcc1eb55ee9cc2f32bbfd86dc1f7e67d46dd1632654e864a6071f28dd48ed8c9c1499365adbf756047ec34aca15139afa6c5427f951efd65a7ecf51b1bb44042605615e1b6613d89f913a8d46deeb15634e39f0f791c384fee39deb9072e119bc57e530c5984ab9ce9f925d41697bd4c382562bf6570cc56d2e21bb91eb2a8e1630f1fa4dc831b1bb6004107ef38df39707dfdf9fc5b869c6e15f43e6dcb1fc7afeceed21596c2e26b0f32632ed2b1209df48fb52d7776bcdf3dfc531f108478585c9bea7bfa49f94eceb26796cee2618b0ce142069a52436286d74ba9cd2a889a4b1613d1b8d5b7c7b86b78da60a06f215bbfa138d55fcbd8261e39d5f22d2fe968e96e7110325bfa66ed8e26bda98d89266d4f5356514b4be65c4dff8fe509ab6d77758dac8748706988ba4d4076b5237dc2c1d02ffcf965a4e2a62ce28c2bfee78651d481fcefede55f3393e3fbc9157a87d6c969235dda9c8261e3e4350134004b4cd19fc06251d2bc49c1aeeaf40f4371ca2749b01192fa31996f7e7a3da42f6eb4c3d1b5badf52429e89271023a5780f7ba9be78bbf5d9d75920a2191fb4c6a6a13a2b22208f750fc36dfa546916c84de6795b15f8625c6a2fe26972073127d2a34bdfbb24ee8b718e17d3520ff8cf6cdfd9ddd969956edd77112ddd4ae27d1d1f7f43974fd32ce59be847e805d0a0542f47bf1150da0776466eedfc69a384033299a39af504ffa1112a1a2afb0ddd4bb913e41e32db541d488f8552264c868443a52b1e634c2e7a862bfbb397ec37ec7af620b6610e4aba3fdb13b7d5a07f8e143fd51da3a24f4a3165623cc59d591a6350c07402ff2c35f8608c356f0ab45489f20439bca31534cdf381009d336ddc5cc3fc59a3a745ca61395eb4d7d2a5b5393dfca7b60d48b2208429d563d00b96d2009b760914aef24e251578408734770a8e332e98a81a85cef7a0f9f31a4c87f8226c95a9c557a93338e03a7510b2b653f4440ea69552494c2ad2a03bd95a7d85edfee569001bec16fcf46bafc745a5503518b4cba81f6b3b61e49ab3390c99971f783314143e8481c8f627b75bbc9ada95de12ea419161a420aee2d32da2dbf1ad16e3db0db4da114624ef1c77b17ad92b5381d2e480b56a3c3058afc46549ea67f224326696dfbf3fed6e7617febf3b8fe084715a5cfd4100a370229dc09942f1c214e92f2abc5a8c5b9c54558afd82e6a376d723243fba80dc2069456294406d113bafd0ed3ed877fb155927b79fcab039021310a1d2f905e25095c77fa1092c02d74b4e0788162cd134857b1fd49fbb4d2b4104f02ef77242d90f125bfe8494fd0147e48ad59526fdab2976e61a15fe77986ecef676d92bb7ca7fe845b5023d1f1bbbedff5d2349927d1f9cb3ef52329680b51ac013d83347644b5c992a0c4b530320a09aa57936048ba65af6279b3f0ac9e0c478a1e0224d59c34af72e5870cc6a5829634f5fab4ddfaf768c51a21f22bd593be482fdc45603f64bb69abb1bda154af8d408ab550c34edcf058ab134a7b2fc727c7e093cdbc74072ca71a3e0a78d0c14cf8d52bfdaddaac8ef386927fb373e870fb073f84406921048fcaa9e7e9d437fd95a206c40f1621e12d0707ef0df8cef51e3c15ebabdbfb692ca7a0e1dfbb85be113f26cd6c346afc1d4fb405a7a86ffa29491c92442e0ede05f49325ae43a3d24d1115ade305dff99c35422cdb8dad4b4a57cd9cdfa575885f3bbfa944b53b43f1ee8b4ccde33d843c89fd5a4b6dd4b7e3701e514932e8755cf1593c6397f76bc66737e35d6766dc09bebd5f37249dba24b41b6ff3b9cf0c5d8aefb12954c514bedbec00541e542cfc8ad77bca789dc6674a3ae5efc52f0c1a816e86146b1a79af6c11de518e5c83b6ee4babd611811ad5b8eb396c7e2e941bd32ab05dd8588b5dd1e9b346c65fd2084db6c536f45842a9e5d79c9a33e5234c5336b51706f9a2723a85de01c5822fd100487713cf3a5dfbdb845fe75e359316ed5c8477ab39903e31a0dc68890d1dbf39e2668729f468d288bbc6b410e81fac182eba8b98f546f85a78b4a15f87cd944a1e3df9fbbe345904227ca51264435d2279fd34d63a3740a3b2ec7077ccc4ef6f4eab0e478dd5f83f8e4d7302874a2b0847f83bd1011a21ebd7e7a02958d73ebfb4834973c4a37f837100d4061bd76726fbfe2d69d5bea8b149552a25855d5ad05861fed8fd6c6ab297360d746588262d6420da74fce68a4aba45f9c103d18ec836673d1985a8de55289aeeb9b6de02ddd952dfceee14f0b34a1846e23eaddebcca49e1588930a3d6c20ba65ac62e1ff0787fba8da65fb3a8d5c2b62bdbcaafbe8d0a65ccf909fa0d248f3a2be2291c083ab5843cbdf636a27a548b06d0b9da74a18353f498691d0f7a47288543032a2f9590a66df5ad161fa1eb3bb852956905b791e92ad9e1263f12dd9016d29f084bfc0a4af71805952a1c6fa2ac8c16191ff7eb22c55a189d363f6e77fc45d183403b353696981e461b35eab6201b8da24783e594e14ba78c58db99fd95b0ae8fd279a78b5af7a71fd00dcf3a9ac56ade0d989d4af0778454f55ede8ea81619757ca050afed8fee0a2c6d50d0febcc651efe22f165113f57a4bcf42a1a483e1178ad7de3da9741b87593eee3e944d93400abd135b3799f37ca464329f4aad77a62635f508535369f52e52723a9fcaa8771e4d12c949a3679d11aa15eeb7d12b6a9e6c18e9727b966f5a703ae1418ac87e050aa76ae45e46a9e4fc593e38d7945d134aab4e270668f0a94b2d96dd0fb4eebefc605f62aa8f7e830cedd980fbfae57952d1233135f930d20cfcc2cf0def7afafda91e6921be041ef971bfd29087c782b49070c2f0a41eda93caafef416d9538ccf3e587a41319e49e82b46a12b5e451eb49076aaa9c60734036759e3c92863578538565a7f9d08f85921d518a2d021831a9cb03bbe337de4d6645fe6398c1faa29b02c51a3c529bb63e6e9f76885bdfaa639a808463f8eb2a2aa59e27251d48537efdc3d15ae4836b282c11d7d060a8a1c164cbb1aef566af16c97a93370f8dc65f91914ddd679d81581cb08b2bf8772593c00509c0e5630811e54692c995c6e7fd3a825f4732e090146a70c0067e10f4e9e57836a27010210d597ec8d4d7e6e11e4d67cb8626371ea28224302b10a04bc58afcfe448b61ecf21977f8733c51bfe621e94c7f1b7c7b4ecd709dd4d69f1f08b37db6d60ea7cdec8f9436fb3b4fa63fa4cb9963a9c308aad297df4f3329fed63246f778ef9dd3eec9e0adda194fa8613dede76139dfec127df612f30e2b2225800a28429d36352b35011d7146a7859c15f4d3b4f5c43aa3701e2b64fd44bd55ba7c79bf86010f026b67dc14354eb95bd57aadf9c6e35b781fe9f483ba5159acbfa4dee5173496564e9ebd7f994dfcbdf029d1fba36d16d5bdefffc19e0f441f4e8327a49f25edf789531734fd34e51dfd5f917e6207cbb166adebd982089ac72ee9788632069fefd0aa35aeb51dbdc39a61672de9d624d23b9130ebc7442a7b17ef66a262530bea1851f2761b997885828eb492031a3bc688fd3b8c8a4d1284739565a9b7847e1a3b07766d1ccf9fe981d2667af0a24fa68578f00664b77c931a22954ce1eb6def09145e4f797a328b6fd1e1447356bad4aebc3d650abf329d909cb7735883d87727d4394d267b8fde490b392798a269e969b8f7d46237d724dbd27a4ee3eec08739a14ec8ce553627981b56cc59a7135dd6e2a760e706c2bf4a237660f36ee89883383689a04fe65de874dba639867b7a1823ce75f48e6b9482229f574ab3b4b3c4a6b5f5ed1def7526e41f727798e562caac6f67c2b45db3c4139aabccdee533d648f7e13c3fe3b0e5fd5a06344e6908ae15b5053e987177cecd1badb79aeb1eb36762b1ba219f273c75ae4337ca46df5b36257e7fbccdaa7bd15316ed5f64f35edd07fe1feef970b09576a0d90484e8a769615bcbf3ae25348a1c7caa43cb96edd7594294c5509b248261e73b4eb408e9d484e4604ab7cb1d34c1b5a5f3ac9998bf97327147982cfe7c42e737749c22a3fbb434a1c5e23bf9a52f8c9d1a51f376a746c8dfc6da80b5824a1140dfe98176665399644f5e885e9bc597668356ecbfc72bd1597ab128b3980d5936843f2f0ca91625f532d84de5a785a8209630de717267c18c74aaae1529af68f9937aaad664413d58f4c6c7c7cea1436f06516f17f172908da5662674baf90ca05e2fea96340287efb4ad192b7650acd1219d84350f37398d6f7171d08bc2f847b5297efc2a35e8eda55cd39627ed299e86919f439f3c85cfac9d24a4a22fac7b7a3d6bcf8f34a4c7abda9cab681ddc033a68d18e9aac0e0decc368e0398da5b435098319add2d6dfb3d22a26e70b0da089970e59692853eb9106db5d3ef38f5934d4123bacb06e295c25c8e9d82a2821ae01d51ab64e5f929432ba391b7fa379fd465349b69e74900c79942a7b79799b4c3134057fafe95165bef64c31c2b19f6242be5c3162988762a8cae3d66f75bfdefbe561bd7fcdf0c7254fbd407bc7654f4ad79d1f13a4511717d4a38da77e3ac57cb398fc8562a8442476c811b3a92ec964ef6a5ea5ba099d356af7b25c3595f3d4f9922f9563830ac96766bc5b7d613a8cb0339b905e50c44b1ba892658abd2d2c372f583b31fdd25a939bb0071e45735c32c50aaf0667b67f16806e8989296e05b01a0e81b99733ccbd7e10213c8b6fc9532d52383688937ad949609a8a79d2bbd878093e8432f524edb6c08cc2438cdbb211af43dc9bda7324628b1e0cb09364b2f745284792e9c2a6e9097960ede5e635bd725c2004d39fac4b9b5dee265b0c69d92dfe1f6ab304ddd25842d5bc44c984efe06f3aa89e367836c453881b7ae4aa076451854fd1786d3ac23b2b8dcbc26fd9a53645bc4fd5d4fa96506825fe27e00feff4af9034f490da0d9352b37d08fa974f30278d93daa9a4c2fed46c9b77fa653075e597bac0726ef7ce18e44028e4021476e89af6ad636932425c10448f1f1f53df931fe5b830f5b27b2d5b4a0fc9256a9e70829d6b47591fe647156aebc5508f76782dea7da721513750358d29e3679bbd2facebe520b173b53068cb3e7fd9c5527f45f78e47a5cdde2130b4b5a07fa88bb56da824979af648d051a7f5859b2444e10f1295be40c2a32e930e29ea312ede05788ebc51c2aef292eb4630798cc864b54aec793ec7d29e5acbef6a3fe0338024c53946558e64904b5d2efba4dca242d6d86e91446a8ff953dfd6f10aaba621698188b7459294e65d006b27bc2b6a30bd9f4c4cb1d60833b7c3f4cc0de7a0314fe1d084be2ac5a3966ab48e2c3776ea02712a473244f396511644bff7fc88cd85eb7e9dc58f8fcbfe1c2a4bd283e2091d185f111f5a34a6d357683bb5f6d36e1df12a53d42e124ef9b7d5412f13a036adab6fb773b5d42caa1c2fc8456fd91544d1bf8d664ae7f74626f7d63a7816ecb0668346ba7eb57d79a21b39b0e9abedb8edd8fab8044f029d1b4d1c9b83ef848b0b66d37cebb80268537dcee2543bd748cb9b75640a28ba60e7daf1a6dd4cf916f11c5c0f6ad6f5b2cc0d8af21d24eb7a1decfc4d3066bc200749e7b92353f6a66f2e49a695b2e55f9c637966ce5a4a8ceebb36429ebbd12b18c7866e84d1d453782fc79509e1176dd1413b9b8e3a7a003d5df7b4f91eddd3667b38d2736497866e06cd441535eb739e5d2f31fb6d75d1290863f98eee648eabb8179bf64983e62b150efb55b99e7cf484bad828b2f84b26f6e7f271ec2184230e4db93759bef5aedcd20bf7ea173222331e6a2c6984be9252d4994a72d9b00796d094b8097568c257af1c82323ae69ad264618e98e3d491c713d0d758e272723ce46e2325c37ae0be5e775a2351b80e733c85df6ab834b55796a64c33bd5df4c4aa7c46abf21db62adfe189a56c7ebed54cfdd448ebce86fa73f30db89f645a3a20fcec45dc9be55beaf76a8babd46e7a5b5a484ab7add95ffd0a4fbf25ef5f88d934420f59eecabeec742f3b01b1dae60e54b836d8c0486dfbe05788c32eff576c4bfdd2027da6d815d6ed4c7e3e3339a43febec397d44c3f6ad71b1d69cd0379246e01eca5449b677f6b63e7b2c3aeb37992de3ee94a96dab0ae663566fee28a9bd8f8352bb952808a19f05750eeb3bc26fdc1d654e01c16ada954951d48c22418e649c65b67299f215f2d648b02e2fb0cc745e6774b9c33c697c3acc0bd497ec8acfb6f04c5b3f6bc1ee4c0f1af1da70cb781cd670d0523b353b71d93503db0e75e47f77676feab3a5c3df27963b9f4ff0d3cad6e701763461caf92ad4078c2711470b75123e1e013e110f935a46815bba62ad4e454d7f0a2360b99ba35a9ad36236bddbb4cd494d25d78b6f69a5a21a9e5e98ccc7dff9b4c9f0575fd2c426929a6183bf60e5e32fb684fd5b0e768c4e9b3b7359936fc94ff2a68efc6eeccc65e82eeb5c96f54f5397bb6924f4b787792ded7f37da75b41dbac3d4d56e6f8befe4e2890da6a936ebd22aee9af5da816d985f849fe25bf4773e9aec1d4daf1ca51c2a787cb0a3596675754838107f61647f50d81fe7bcb294aaab053b5c82b10715c9d5c8de5848f6448aa267480f65beacc56525eaa5e474c1d87dd20c19a204d5e8a0f681117f07a721715c49cfce1bdb6469a7a17f4daf43a6f79eb62b9249e8be35e4b0fd8775bd77b6b92a9225885fd162c6bbf62bb5012a53457d3bcc5d363d157b6ea142044821267a288a6cd1655dda5e5b343e3b8ab07f49d15f22ca574bb515449aa74e4425fdd27132badc5531f453d1658de54d70d92ba951f915065d806ae726c5e7a3897e9a349881f14710fdd246a478f0c7121e696353e4fc7184bcfdfd773e28f9a0cf87ed8bdf5952b204e66e8ad4648da7a2ff57227a6fc052cf97a28d785c36499b5299baae459883cadc7b9ac5bd24e16c3fed21153c5eb6330a664ff21497ce1954d1dfa5368494b86b99ab95ad354984f7f09ed74dcb709d5ec67b14f1f4a2ef78f49783dd2bee9becabef5fd66948ba8d325ce92f5f4d4ee47d895aa3a632ef217c2a0675251de67702bcf7383fe2987bd8d8e57662ef1af7081b8da8d532bb2bfb06af1509bfcef7e862360fc959f82dad50786b197e7bc48cf5b51473c7f7f38b863ab8a9725c8c083fc773ab8252cea5a945684b39df4f84f0fe4eccdb5d5770d1715cf0f97513923a77acc2bf55e57e73e443bd6c2c3a5a90498dbd29f41ddfb33fe1267a6cf610d988347e1dfb7a663a9e57f4f7247c4ef52ec23bb0ef60f7040dd5ee6b0d6b20fcacdf7bba846d34e1dd8c1a8dbab35bfcf08e7e1392f0eee21b6fe698989d838c02948cd3d7870827e94f3e361b9e1480fe0ad168d1a38fbdb4d4cfa705caba3d881830ec1cb6495a3d24dde916d3bf91f63914c34f924fc4a1a5a2a2562f2d0eef50e6e05358e5af2acc1850f6c5b69e65469143729b73639e5154f35a655e5b70cada545942defc3c26a7e33438a78ecb4b1af119eeb805bcaf789f2b4f2cd46ae507ef1e7e70b4e178cbe936ef6f9919c6de60afdb5e8f32a9759221192fa38cda51ec6e4445829d51f8c93910ea08b1ed87274f084f9846889fb18467d846728ed9235043263963db8867de1b287d05e648c29348c2c8f6bb9c31ddc1f43fe28c59769249bec172c696d1b53237ad5a4230bc317ca2e4fa6fd28c3a626bbd5e88f0d3984cf765bb159f7f8a145f7f8a5c6bbf502be42da82dc4fbd1fcbf6126aba2a885f73b0caa47039e6350adf3b130a8b6a0df67505dd058f64d285b4cf5601854a9893483ea9185415533d58a4175ff2f32a842e8eff0ef776550759c0c7b9e6550d1f55214e0d5dab186ffe65f6650ddef6050ddff7f9941757f41d40b1854f7ffcf32a876b9fe2bfca95b515df853b368fed4dd17f2a7caae7abd883f8535e66833bbaa0ef857f953d6b1c8fdfe15fe141dc3232606a47a317fcabab42c7f8aeea9eaaf3dc79f0a78317fca3a95a2717fc09fa2e38daa7c8e3f15f062fe54e773e733f239fed4c64efed416f41c7fea32e64f59851f66cd9f5af387fca932c7e7f8533a2bfe94d4f67d532acd9fcaaf7f3fc6a1a8fb7f843fc53cf1595ed739fc29a6d77993cb9f2af0c5bbeef82660fe14732f48b0e64fedb0e64f31e3dfb43fe64f31b1f45f8ef953ccfded6556fca98d7f993ff533c39f829a67faf337f6a7532e983f2561f9532d88bec7aca8f5e42e0b479697f0cf7064db42a8e47f9949b5fdd9009a3fc27ccd1ef0b22bfb962f95e5a68f2f50d37a3a8f6652312d30a98349c5983d6826d575999afe6efa1d2b26151d76e0bbdecd05fef43eacb31926d59eae4c2ae6edce449a4945a78afab34c2a26572f7730a9e4ccd7837f894925e9c2a462fa0d19cba4a2733af02d0e938a7966fb7098544cbf25c5bfedb14caa6e7fc0a422582695c38b98549b7deecda3f23b98543f6ff5609954d7ff4526d50f7f814935ed392655d47f8249157494786397ebf262afec309a471540f3a8e6d33caa369647e5c8e1513df8a7785413383caa299807c5acc476606ddf9fde9547b59ce151e5ec627854a7052fe251316dfcc48a47757d91358f8a717ffca73caaf57f8d4775ac0b8f6af69ff0a8fefe9fe051e5d03caad9ff091ed5b017f2a878899847b5333ce6d1af3f5af3a878899d3c2a5ee23fc7a38a38f86ff3a8e8bea6def98f785469233a795403d83eb948ed956dea26dc526cbfde8778e3ec518b7de827ff511e159d3b6db77f994745872725ff3c8f6a13e651e5d6f794a8a9d52fe251e9d35fc8a3cabbd2ae4fb7e6516df3b1f0a82efeb8e777795438362b1ed5ea0e1e95eb531e05bd109560e1516dcdf1cee8f8b5d0eb775854cb318b6a8f76bef1b60dc3a16aeb69c5a14a7e4c73a8be28bd6db3c32ccc1ef66327836a0d694aff3306153d53c30c2ae684bbed94731706d5643cd35d38cec2a07af53906151d1e33a898f08510fe050caaeecf31a8ac6788c91b29372e832a8661505576615031e3d7df680615ad0bea5ffe8c43d439e393af855907cda0baf72f30a83ae329caa57a320caa42016650ad717e11836a338f195ff70e548c8095e4d0fba864dd9e2e0caa37ab0bfce8df6d3c5fc411b14a2f8372c70caaf2119841758f615031f3911fff7ae97d522957864175ef5f62505de8f81ab02809ca4f33a8eefd1506153de7f19771195456f1ad84f27530a8f4e8771854c7690695a3207001ac4e6ea91906152ff1abedde8f180655678cc971304fc10caa3e0c836ac7d74c4dd7767b9e41d5194abe0cf4e32f30a8b6a01731a8accaf31ed4cf1f31a898f9a0e8390655f98b19549d31a3484a66c5a0ca5a8719545a5f86415560db8392d9f7c066864175ef9f665075a614fa2ed5836150dd9b7b795d71fa4c0b83eaca6354982df84b0c2aabf69803cf771706d5bd99c582cd3e5bb79842d6dc7a017feafbcddf322d76eab7df7d369819fa4c863f859f8de7f95356e59961cd9f3af44ff0a7acf423f0dfe14fb1fd1d531f017f953ff58a357fca8ffe5df7d68bf85338f61236f6a2d7ff127f8a7e2e4f5f7f9e3f65a56faf71f9535bd05fe74f59b5ffb87f8e3f65d5bea35ec89f62ca39c5b31ceb8d4680b5a6aa40f17921c2bca6922efc29abf61bfe97f9533f75f2a7ca7d9fe34f95cde45715b0ebbcb3983bd5992acd9fa235d7f38c853f55883af9539db9f119fc62fed4ad28963f351ff3a7987577f871863fb505fd2e7faa0af3a7acf45d61b2b7f0a72ceb6e1feac5fc29abf6965bf3a72ce1cade4df8fa42229547a677c97f6f980361e6547edb3d5883ddef644ee9059839f5eb7dcc42c2ec11d1e3c0dbf83bf3e1e9aea72604e8ea0b42e9b700b6ee33e79dc45c8f1dd9bb2fba2f3ef40d668ce85b1e77bf904ef346e69222f7c5e2d0de5bdda753018d6867477ed06b63efcef3157ab68d9e77b293c1329a007fbabd08c7a8c9def4cda76a6ad363ab5045e385373b7923ccd95c9dae3ee6804b6d334f19ad992aec6e62831edbec2e65cac2fe1e7946f4d82bfd707a6bdca69b847f9626b5006a41d688144502fcbd87d8bd8c39010ca7e0468a50fe793df9a83bd554cfb89663d6083e2b59c89edb6ed09ce231ac02b666c67aa53b9de78fd298a564b260f9e63067eabd0a815eb40c9f8ddb7a1a594e5780d51f9ffab502e1932f2ce7bee213263acf02c1bf582826609f429ea96f5d2b3ee302eef9109ad7624cf163d24bfea6c5e8bea8f7f2c056cc08c0cc8019cdc18fe73c7ae7fe823b91b717d51cd43db8c81f2f425e5943d253a61001b96f48a652628988ffca4944519fdaf2315f27919c7cf6a260badd62f7d0e2f4425e6e5e610e09fd8b3b3ab7a1f8643a9f7a720515a6cb50717a7f58cf913ed1157b3433346c79bdbc729de8b7f64fe9d64b0ab2309814472448b14b82544569e36c117f6c3652d9ce36da2d8ecc6042d624315ca126238410d32126ec2204df456e2d4e5fa7520cdd45f89e74b397a042810451719f120372c5a18b32aa2c6b1bcd3cdf3d9b95924d3ec5dabd2aac4bde5bf139f2389c264f71a405e9cc3875c2cfc262b8b56ad2fb3bdfe77d70ebbd498b772ee62dc1ac86019833c5e8a5d62b57d560b7d862f67979a411efe7e811a5bf2ae427c9da42cad3a4df8bf886e63b48d9dc489fdcdd98d796dfb696da043651fbd0d87aa19a9249f9ae4594930956d515a837b6d9b61051eecd88ea750a51599588da20a67d2b47d7a0711ad021f583d2b85017f44a11fe428a5a7387875d898bd259cd3c9340dc8e6d857e948b09cd5f2d397d4cdff023d63c7c12af1ced582885bcb5b9d079ab16f1952b5d08e56f90b74419c1e6ad970b6158f809a272c5229c4a4b48ef7d94b38c30dca940a68de2764a2a166177fd111724a9573eac4014ea26a00ac5885a07799d4b121a757e397336725bc8831b1af5f5522ae80e6a0b696b69349a6e45b553eebf21d3d23dad296ad347a75a6b8d20378b5bef1a4d31bf81dd4da3c9966c097a963239c8f8afe558a7fedfcb71efe5c18f236f5b9eabc0d619cdcc737530e770d66f83b16eb4cdd4ff88b5a33cd9d0f40b4a19fc2047fa63233fb7c22b0befc44a096ac5d2906bfcd502bfbce5091adf0b3d85c21f72bad918b2f722622a1170689fa17e17f24aaf3df169d900963b8a4e139e52d2c9ac1795f1f1fb40fc959494fc8eef96351a15934d3e8675be8421e431ba9ea3ece54b347c70cad690fd379f69ec9e8ff2e3105a2814249516a68f6e35f45c8788290da5867a5fe28713fa0201b13fdb7eaa2ac074826c4e0a51a5291fdf8332482b6da004ca15b5a84eabbff6943ff1b89b5084f36e87cff6d057fdc457deae43cb1384ea409950383b475f30010d5f8f771e7e19fdb0fa9df56dce63fd9593e7127ab113a2c2ab1c64a3f03901fe1159a2831bd64d3ab8213523c5979892f28670ea5823bedb9f2d99ea683444ad23765f1c56d68f2d77f261c2530fe59692506efc857f60134f2afa8e5fa81d858a45553e4ad96364a8fa09e1bc180a5ad1f2443f5229dcebb3bb34928d21f42053f625a56eda51adca75f761a67ab75409e9482e4a6174a2024964af5605ec30e2bd5b093fa17a6229be93a87b97daabed4b85ea1d91de32c2afcd9998ac0af0886c0b4972d6579244c3eae3ce2db995b99ab48f5cda720db54282821e294eee8a5edcb378b2fb1a1bb2a0a5d2b448faae0d4f5f45f20ca55308c3c1df90f2fd7ba825cfa051f30b57778735040f1948334f49fecc3364f8f3a5d784bc920da33653094f616d982af32ec0e1c76dc7312ae3ee21431384ce955ec371f279ca2613e24987e80d9a7a88e11e4f69730d6279c2d3570b7947371c2ea01aeb11de3779dc66fc7bb3f406c96bcc533655a25499be52c03b5ad098230d11f0127294b678df650dcfa0a985780a78fa99b6bc7e05473bf75d5e2fad06ffebe9723db98d941ffc8294da7ac230ba9ef0de365e54e613bb59b9229818dfed3bd58c0d06f3bbc830fa2932c47d8494ab4fa0f602e5387fc2d03dcae77281a1db4355aab372d4056418de44786fb8b6c130fa0641f81a56bfe343ad682294dd2eaaa423fa2025791829337ef6512e8576d794f8188c1791a1a40419b44f7c085feaf14524fdd20995ac371cae44a30a0c4baf104ab242a5975541c86ad528527a6524df501f8598fddca7adbd94775828957d89cee751734891b45a8634d952a7c7fc1ff2cee60993f323db9c4f6fa082bfb3933625a291788fe8685744e5dc15d8aba9f4bb02fccdb6b4a90939fa53820a8154ab86f235c1fceda8d673df9ccc01e997b50bb43a7fcab6ba4fae3f655fdd47e36f92553f2540cb7ed81f9c79ddb83f735529251323a9568b7e309a7a8bdb715ef02ed34921336449b2fcc85539a737ec88906a6bcd544035ca4d933a5de1cfcf95868c405b8b756a2aad8597abd667349aa9ac1684f75f4d0a3a9a218d9e8dbcb49b8a4dbdc4ed84dff95293084becebba51e8ffe93de99344d44feb719c2d8dee2e0f4a937c97d74f4b6d90f0a44f9af07ed2c4619ed45861c6bb49f72b70dc076e2e904fa3d6dc66eca735b9434e83d57ca9bf33126669fc0c19953e52d287a42657dbe9858ff86e5ae829ce55c2fc0609366d3354d623a5d315783eabd1b45c7a1ffd5c65c86da44f4c40bb2b744c2e56b7e0dda7335aa0cf9608f4898d78f7e98c6a01e6ae2a0fed455e05de9a91fbdc84642bfe424019b40ba54ca6320f23bd1889c76beff8185c6e23437d33626227d441465caf7a5283ced2f5aa97c188f01389705ab8fea1256c45c7a5d183d1c42ff4b26abe7dcafc5cfbb4147f13121dd727ba22530e5976dea8acd5a2dee56c0ed35be8bdab5bd07af88fcf0df128daada6dbac7234c23111ea14ff5387c1ce45dc7edeb82312a7d3e6dc72d8ba07293f6c7d8aed8c9adffacb51db0cfd651eb12346fa3d8c817df557457ce90f8d7ce98d277c436310323c0946d299957c65dc6fc46aa1b4ef48b45a240daa8219473391d27fb3ae3cf7ec6a7d9f51885adf4c18eaab884d2669601f1813a42a8f08bc8a958a403bdc870ca3dea9e946ad158b95e0c7f557aae789658687b50495d22d5e5f50890e643c5d4d9d2605e5eacafd98553eccf474db810dcad287c4d30dfa82d388aa2617ef88d248a4e006bae2951414e894e49490abafec83f4ed00e746bee1612561785845e8839da02e3c77510e2778741a79dd165bd2786b9f893cd1ae515f905d5fadc71a73a11edaf8119f3a51cf930a90c0758ba1200329ab1e22c3b6d5e8529ec1fb3b88b39a3054d5a1634618f95aa5a05386ea27089e7671058230e2f1e46d1fe53ae8ffe169b7f84ff14f31e2bc607365e9aa8b540fbe58595b4b383e38ada3f2cf84e29aa2b2c905fa822ac82b7581747635260551bdf6a215db0f6c3078ff4c3cd9f074f5699da391d29e11e0ef6edc32f12fa990e393a484cef1595228055d1c2f14aa0c21dd09e5badd48d9f77fd0fc1ce56b358432e636a1bc2a24566c1fb5d130ea67e2f88669a5d4e633884e378d9c87d33dad9b6d1c2f7ee443d7466e90d14d206ec5dfb628af68607e4a899b11c42f1e2f16aa94eb8510632d618999981c6154dec6e66454592aed26859cd59a9509ed68762d2e25e5c017504838834e4d47be4cb7e5970f09832603e90b60c6f93d39bd2df882739bf383d5296a4d80f4c94768f6434a448ec1bf02a6fc8dea7b82470985b3f4d59e7c4d36fef66f2d496d59889475109f48142cdd5085a8d745a85ced7aca80edf4a211b8757744b7b90695c2cc69fd99f614f5d9524a7081f7749b32bd12190e3f2494ddaf809e98f9fa1b7d106e9b7fe8f4c17d61340e30e69f84fe71c31544b94ad03f745f14419fb9ee0a32b949dadb82dbde29d1ad574bfc31239ed29d9c62ef4fa59c9c426d104c913e69677aaa297a4d208c0295d0660756077c9a7f12fab38db711e52641a00781ebd5d33e93a8a975b791c9958951afab3713ea25466a768d0db55e2cc2cf8489242f60cd773219bafdacc23d9af2b59f0943469d8ad5ff094933472627e4acc86afbcc243c7199d1857a11a30b7faebd4b8c269b131718cdbff44f69b2a6b45393977f4339319a4c3ca0d69f1941b7700a3986d1a7589d53316871efbd4899f75095bbda50026d9e51a5c29a1cabf32c35e9ceb4625d4e1948f7d66f3689a438f7be98cf8904bdb72a679991458f95e1820e7d335437d231e25116b7a421a3da27c1684a3dd38c677ff83ba31f72938c6ee950a64efdcdaca7f5b7986cf451ae87f056fa9ba29e566aa5bf62467f0d89b01eda463a2bef804b2d94ab07df8672108ba89ec20152dd6db374ac2b4af123de342c2d8531b8db20a9735fa40f31f3a5054e48bf6205f22e005d3e0ea362f6e3fef82483c7fd34ea943bfa154f90a39f74d4693355b8a7df5becf908585b53023c0c413fc00c4ba51cf52bcc202a7df2f3a41b609c9827a24bab4c3fcc945678c52756176d54c63421cab17b9fcebc6c2da59f1489b87f972765f3429ee3a9ce6784ea21e6c5ea4c3d841734fe3ba25302898073ce6daee5ea61fbe04959cb3c292642f82d76c56e29816dae52ac73f3489887439f2b823e37edac7b5248a00c9f430a73f3f555f0147923989f475412b9a9d4a6bb282837c55f724ae35fe24cf811013b229242da9ca4c1246168fc0a1d776a585d992b4cfbc8b50566aa9e04731640e799e6bc45f8bd86d206f47ef49b043caf3ebd73e8933e6e90226596a5260209a79c58dd2bf884107a3fc6b256c2d34de467c64fc0f03cea5485088ff7f9db943d4f2243f035149463e8730e51bea324c592d7548519ae88d63675b5006bbed33665df934859790329375c00ed008d1b550612e6734157d0b063ca982c64ead5bd39e0d80c4b7a8d6e308f5f05fda4df3365cf2c9412087d669e2ba373ef42afe88f77f180b8c510b733c45d77a123cefc634c7f67d09df5b9b9da942fd97058b3226f7e31d683f3a5f8e96834621b8f63259a7179ab8a356ae87d7e928eca30e339cef0829b067cf28ce4a73623ee5140cf0e61795a77bd34c5ff7c29731fababc5ae01e761ee21417acd6a74e8b0a9b7a4dd6443ded2d70f44230fa5046efa167aba8dd0d3d94a10f443927af330e8ed4c8557da4d1249bbbe3e043dc9101e02bdd8b8f0a75a83492cdc1ff1a569fbc2cfa67dcd9c7fa1dfe0841c23cbd34ead959275e607b036863917da5d77368f507ff52b7e732025e1c979bb9a379a44c9527593f995ed5f9dd20beb0815f4a98705fa2a19b1e35689ec6cde5958d94c92fd90b73c316580dfc091db9505f56876ae63941bfe855c54ed63a8aea6df826f2a1f4fd6f8ccbf24f4f728c26f2554fe71726734bbd4b213c6d8f3f88b16fdcc463e355388705f804fb4a0cfcea05b2df45a7e64a1b68e3f5ebbd7a710d620301f945d41b08e0a4e72965e1111cbf36ed2dfbae2bc6852f5eb1ff31bf37686137ed773f197afb02253a7f89eed480dd7023e03049f0082cf5891217c1e4efdc7d1393807f9dfe447e9b5649977813ec417c5f684beb3c8c394a28ef8c9929be44b6e90dbafd4d4c57a744caddbee463af1f1ba59d9f336c265af28936cbf0bbdb393d9002b4bc2b7d138f8a410d6b4a3f93757e338bd65fac3cee8873c8fa8b5a2d89e49328f88a4e024277d908888ce9b246bcbfd215798dadeb321f754eea6e37145cec8b2d3022e8b47548a3a4976c8f8db00dc923b16e2771d42be34b3d92cad6ae4b7e5ea0b4622652249e8832af9d7735b5c70e90ccd32226580becf4844658b9d977f24edd6cd67dc367cb60cf56385e4d3e3b9f8ac6d9efd85b61069b79a8f09f5fac93a3f7c46329577d82517fae0c32e9beaf48db042f1a3d276a37c92b8884f6f96ecd3a94d054f5aa3ab52d4d26e8f3e5e3f595aa0c56f4990b01b7d9e10ffa1735bf00d67fc5d3236e7a651ce0f514a051ebd08ffa4106942fbc7c3d26638b5e47de43c3ff7ad5c2a47dc33aec805a52653af97d9eac9b256eacdf66ed8b794ff1d9445c93fa1c2bd849bb01ba2ce4709dcc423117e7b21d96e28e84628ab1fd2f3f61ff20c30cf399f4704367c232d90217d4222ccf2379dd7f951b9876d72fd3493a98cc336509e044b791c49cb793744607e51e3ace2cc7d98c12f305c7582391225fa0db9912305ca8db548b9f02aa11c8360862c26fc8c7a59029da2f4ea05580d92c45a21a4aa4e99ac6f4c44a635c2fb2609f950dae482ce1e33d45712443df6fb7763ee455873c8a07dae7af2f17ba6b5627df505fe5ae1f55c8dfae6a66bb2f379b82e615e510ae38e71e23f3cc85ca366f2d81bb5a5d83e65f2f2632647d19d1de4a163267b515d2dcc93741760a652508724e798f61b5c24519b0aebda975cd3df9985661fb29c4783cf114df1871caaf5e2357c7ca2a8573a354788c60b927d18bd46fb5079d24c37a10059de135b87f94e88c350ef08117e27ed952ebadd193274172a278a88a291cb07d48a1e1c48ef77374bd31912095f949a7c074e8d6614333c899e38e57ba153c2f787dbd3e74fbe8c325ad95f7b9eb68550924634dccf2da8d247a8ab5b864f4f24fc6a4bd9b2b129d5bcb05cc99b714ad627615b8779f4c2303e055dc3148ca6bf9f89dd48e1d05e69de99bd7f61ce6685de1a6209b5c7b1402edd1b115b3efd176afc4e9f39a30f875718f72ee58f11e3f987bf52c8272c3960c24ed29b7a46b4d2fe0c7b174fd2dc3476cd2712bc289f65395df3b9254ce1d088b644281ce17fc0bcf29f02143de16e9ac2a911fd344de10cf7cb1532f8bfcafdeed76113ee6e993fa1f6eb08f7075f2f716ffc3ac1bd2d351912418b279acd9f01ae01867b9bcde9806f017b7ccce6fd80d3800f01f75566f32c90aac5d1514b23c2e511b1b131b11e3668aeafdfa420f57cb9dfd2f88858b9ffe2b0b885f26931e11188bd2ceeb40b7618278f5e1a1d2f4f088b8d873b08149bb02cfe85fe16c7c42c43366c3c094b17862d0d5f0c295b05c25a1a131b210f4f58b26c9cdc33cede06bd1e961017211fbad273e8b0518b57be2cf79bfe7a87099c516c44d45ccfa1c3c3e70ff28c1b2c9f68e5f3f75cece92c44fe9ef320cfc8c12fcbffd019c7e03204d1f5cd9593df7ab1bd457e37fd8fdd77bdf6c7ee455718b98f95475859c6caef587995957758f98895a892916256bab052ceca311cb30fc73c9995d359b98c952b5999c9ca35ac3cc23197b1f20c2bef70cc8f38e6668e195575358b396607d6ecc2ca411cf3508e790cc7ecc3314fe698a773ccb338e6508e7921c7bcacaa6b7daee4989339e64c8ed9e17b363e560ee2988772cc6338661f8e7932c73c9d639ec53187b272212b9339e64c56ae61e5e71cf3115696b1f22ac75cc331dfe1981f71cccd1c3362f55ccc4a39c73c88631eca318fe1987d38e6c91cf3748e7916c71cca312f64e532566672cc6b38e68d1c7364fc503996fed3e5f1114b96c5c486c54647c461fb6172c67d382b95ac1cc1ca91ac1cc5cad18c8ceb882f2e6c0574c7d0f145c7418f1c47d726b8b3f18675f80b8b8d4a5812b1343eeed5d888f884d8a5f215618b13222cfec32cfe873fe7dfda6364189bbf30367f616cfec2d8fc8559f2d711cfdb2fce1f1b4f1c1b4f1c1b4f1c1b4f9c259e31ac1ccbca614359398ca98f3196746676d6abfcf5b0c58b23626977365c3c1b2e9e09f77e446c0c76981c161bfe4a62742ce4105ba1d830b91cdbcf60aa282c3c3c36220ef21cb78cb17f3b3e8c7a4fbe2c861efdc01cc5daab17c72c085bdce910cfdacf5c181b11166e653f94b57f5166e10275a0dd411d681937f4d5c86538dd2e95f86a646cd89208ab6ca038365c577f0885b1e9f9272ca5e2a36396feb116807f369eb0e1bf17ae6b005007c6ff08568e64e528568e66cb31fc45f98b43716cf838367c1c1b3e8e0d1f67093f86956359396c282b8731f5c5c613cfc613cfc613cfc6b36f0c3bceb2b29995f2b1ecf3cacac9ac3c3d8e7d7e5973fba83f960ba099dfa3db83a997c8b084c5f1f2c888786aa19579714c58b8b57b5c3c4c9b687334a840142850f4d2b8f8d804baca69fb25d17161ec54af3332b882e5833c17270c86c9d638b9951f9c00d42e15b32202ab7458bcdc73e898c52b87c817472c1d87e7452f638d1e475bbe0cadc0d88587c5878d63e75f717444e33c8785bf1c09b1c5e33bb7b94397b013404e5abf970fba60ff5e465e947a97f43b2b0ffd777ef5dff955d7f9ce7fe7575dcdffb7cfafa09318af1cb6c4cfaa3b7a33215e1e13295f12b124267695bd0dd38dbc3dfbedd75553a732fe954b42acfcc7ad8a7b376225ac89293c1e87cb17ac92d3ab5acfc5e1f2c4e8f885782d8997a15dfaa317a41bb4342e61190ceef1b88f5a158763c3718c93870d9de88957b861c358391c4b0f4e8cffe225628480632db436f078ff66225617f9cf78e6ff659f2b4733edf9841d57a7b3e6dbe3197994959b2730f229eb6f086b064d41048007e0f785fa78ed732404880024400c90006c00b6003bf0630fe806e80e70406bf88e207b407829c89e209d00ce702f03b8f45d835c01bd006e0077406f401f405f801ce001e8075000fa033c0103000301830083015e8097002f035e010c01bc0a180a1806180e50024600460246014603c600c602c601c60326002602bc01af017c20af2ac8e72490af83f405e907d21fcaaa064c060400a600de004c054c0304829f3701d3016f0166403dbc0d7226b805411cc1801030cf02cc06cc01f35cc03cc07cc03b60f72e201410065800a000e18008708f0444011602a2c16e11e03dc062c012c052400c6019b82f07c402e200f160970058014804ac84165e05781ff001e0434012e023874de86340322005900a4803a443180d2003a085f832013a4016201b9003c805ac06e401f05f3e60edd04d480f5807f7eb011b0005808d804d10d7664021600b602b601b603ba008b003b013fc7d02d805d80dd803d80bf6fb009f02f603fe06f80cf077c001c0ff003e077f5f000e020c802f0187c0fe30c0083802f80a7014500cf81a700c500228059401ca01c70127002701a700a70115803380b38073806f00df02ce032e002e02be035c025c067c0fb8d2174f8dd6c0f4620daa065c05fc003574adef26f423dcff04b80eb8016df033c81af07f13700b6002dc06d402ea00f5803b80bb807b805f00f7010f000f01bf021e011a00ff00fc06780c68043c0134019a012d80a780678056401ba01d60ee4b770033d8aee46d46f49fce9a67e27f57e69bcdb7008f00ed00bb77cce65e8041803180c9805980858095804c4011e0734009e05bc035c01dc01380e85db3d9193000300ae00f08064402560032003e8039805840166023600fe04bc071c077801ac043402bc026d46c76018c02a48799cdeb00fe703f00100c88047c04580dd802d80f3802380db8021801fe6f837c0c10c07d4f802f6026a03f201c100f380eb80ab8076805382f8034001300c1808580f701ab01fb016580ab80fb00310579063c0608c2cde63e20c70166002201a9808d80cf0127018f001700556cb8db009f08b33910f00e6001600d600fe021a05b24e40550c2ba79c37d157b8fdd4bc07c1950071812056503b9089001780ab001bb5e518cdf87567162390fecb30047001bc1ee6064a77b1dd88d8a60b08005b643c883d5a37eac54d012af58de4d8c0e87e981f744f948f98001722bab0913e56318dfb05859b600e6161e13e541aa1933df7d7be69bd3df1dfe3bf6c3de1d69190f3dfa052c85057774b87c59586c74fcaa7eacfd8a776171b5e2dd0509911e1303836042c35eafe2d45f9d1e1bb328828235fef0a1c3c6befa5ec4d2f0d855f111ef26c6c4be17b72c8c8ae8b07a252e3e6c6978d8e298a5701bfedeab8ba317bc1a1e1b0d8bb6b857f14f03432836de4130b3f10c1fccbcdca7f345bf09c1cb3b58a825ca3dfafdc7d28f8c8d88888d8f897b3506e6634be36357e14cf883e58c996fbe6d29e70be65d9d59b49a4fad9c1916f7de7f385ff110651c5b33092b67c62c9b1e1b1d831b07d7937c71745cfcd480b767be1bf0f6bb7ed3a6cf9c3d48be6ca56fc4e2b05511e1383353c17d6ec2cae971b101e1f3e583e58351bf95a0ab803eacf45fd5691ec002db6133cf0a4300a11f30580198c722f0fd4e33be9fc7bacfb1c2ba0fb14ec345f0787cb804ec25e45ca23fb9c87ff312ff2f5f2fa740df9fcbc0dbea1ee36172e7bd2fb8cd63dd83412e60ef3f0379f02fc03a5e2e4ea633d23d15fab174c66c01d76f95555c07b2baba796533725176a7dde7d97f9c3637fd399cf47f4a61ec9c53193fad6cfa8b21ed2f01ed0087d4cef4b1bf6556693e62efb1fdf3b37dcbd5fa5a5733dfa7abb9fdb580407ffa2e7a69242d035581b45c1ac6bc271b3a6cb872c4c851a3c78c0d5b408547445a4276daab26bdeeebe7df61cf4a39e71acab9e481618172ecef9580a591f817d35572265c5723026fb4f4f30ca725d48cb9d5dc6c7e64ae31979993cdc88cda512b6a468f500d2ab3ac55201ff2d68b277628524cafdcd87ee1f219c1f53d576dc253bfb97cef1f577a7806dc7e65d48837df3e70e13dcfd71a373ef9febd59c41eedb1b2906bbb53f7ec3c347c58fd15c13f4cc3bf1fbedcfdb2e2c7e10f03d6cc19ebbd53fcf6b3f620c7fca7635ddfa73c5f1f56f6d98425b76efc38ffbb27860f3f2bbafd75f887fedf5d0ff2967bf55f6050576f54bcb6fbeed8dd03ef7dbccfebb5b9b6ff9892b2fb81cb8da8a3ebc6fafdbdcf1717d7bdb6bcd4f0a96ed5c2922153e7de9c76b264ddfabab3af4d9b38f1c3a3a35eb23fded67a212cdd31f1dbbfdd7e2da87cdfae401f69d889ef5f8a70bd354b66bcd4f09a4df527cb2676f9d7fcdaf96fb9d7334edbb357b299b65f11b176ca94e4d79ca69edd5c20cfe2cd083de999307cd18c0b9b875f18346defedf9134fcd1f9fbd6ded9cc5332e4ccf6e1834d13e426697909291b0e2ece469915b9a674dff7ae6bc886f4fe777db73a0c8d5f4897f1f8df15efb46b735c5d7736fb46c7df6cb47fbdf7a7d246f34f1c5a8c5ca98d33fe7dc4d3eab3eaadfa76a9efeccf3bd8ae5ef954ea8dc73d11cd077e5f1ef3b7452fe68eba1652fedfbfba9add15df554507ad66df5088eee22f9d725ae5c3be4b3c5ee393b7446f8bc5d11ef793babeb75564e7ff3ed8059208774719dfefaea2f60ae738c4191d53dc6742bf31eb82f61cd47409e64efbb1d84f9e35f8075bc5cf43fc4c88fc0df975f32660bb87ec758c5e55cdcd56d2d6bbe6c65eff2f51fa7cd4dff28277d6fd66e259bee3bacbc7214fa43482712107bb0337decefaa55fab3d8f4b13dddd87fd29f747a18842fae77b93cd3a1eb25e8b8580b157d112fb818f749f4c57bc1855de57fa44cff87ae5ddf9acd185f03b6b1083fd769c6f7db58f72d56d87301d6638f3afa4ee66516c1bed32298774c5e42f6fda8a0b38fc5575923fb5ef909fb7eb3a9abfbffd72f8295dd94e7ff36a2c792bafb3784c8f67f3547ffbdfe7bfdf7faeff5dfebff4fd71d765cb5c8668e143777952e1c398823c770e4648e9cc5910b397225476672e4468edcc7914738f20c475ee5c83b1cd9cc91e296aed285230771e4188e9ccc91b338722147aee4c84c8edcc891fb38f208479ee1c8ab1c7987239b3952fcb4ab74e1c8411c3986232773e42c8e5cc8912b393293233772e43e8e3cc2916738f22a47dee1c8668e143feb2a5d387210478ee1c8c91c398b231772e44a8ecce4c88d1cb98f238f70e4198ebcca917738b29923c5ad5da50b470ee2c8311c3999236771e4428e5cc991991cb99123f771e4118e3cc3915739f20e473673a4b8adab74e1c8411c3986232773e42c8e5cc8912b393293233772e43e8e3cc2916738f22a47dee1c8668e14b777952e1c398823c770e4648e9cc5910b397225476672e4468edcc7914738f20c475ee5c83b1cd9cc91627357e9c2918338720c474ee6c8591cb9902357726426476ee4c87d1c798423cf70e4558eb45c66f31fbdeffde7afff747cffa9ebf5ffcbddd77ec9b46b4961d7f675f995d5ab078cacf9e93f23cd5d2efc5e43f5f6eb01017f90c33f73672ecb7ba3ce9899f7463ecb6c3aca95fcc05bf6a711fdc5ebff019e470e55' - ISP_PROG = binascii.unhexlify(ISP_PROG) - ISP_PROG = zlib.decompress(ISP_PROG) - - def printProgressBar (iteration, total, prefix = '', suffix = '', filename = '', decimals = 1, length = 100, fill = '='): - """ - Call in a loop to create terminal progress bar - @params: - iteration - Required : current iteration (Int) - total - Required : total iterations (Int) - prefix - Optional : prefix string (Str) - suffix - Optional : suffix string (Str) - decimals - Optional : positive number of decimals in percent complete (Int) - length - Optional : character length of bar (Int) - fill - Optional : bar fill character (Str) - """ - percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total))) - filledLength = int(length * iteration // total) - bar = fill * filledLength + '-' * (length - filledLength) - KFlash.log('\r%s |%s| %s%% %s' % (prefix, bar, percent, suffix), end = '\r') - # Print New Line on Complete - if iteration == total: - KFlash.log() - if callback: - fileTypeStr = filename - if prefix == "Downloading ISP:": - fileTypeStr = "ISP" - elif prefix == "Programming BIN:" and fileTypeStr == "": - fileTypeStr = "BIN" - callback(fileTypeStr, iteration, total, suffix) - - def slip_reader(port): - partial_packet = None - in_escape = False - - while True: - waiting = port.inWaiting() - read_bytes = port.read(1 if waiting == 0 else waiting) - if read_bytes == b'': - raise_exception( Exception("Timed out waiting for packet %s" % ("header" if partial_packet is None else "content")) ) - for b in read_bytes: - - if type(b) is int: - b = bytes([b]) # python 2/3 compat - - if partial_packet is None: # waiting for packet header - if b == b'\xc0': - partial_packet = b"" - else: - raise_exception( Exception('Invalid head of packet (%r)' % b) ) - elif in_escape: # part-way through escape sequence - in_escape = False - if b == b'\xdc': - partial_packet += b'\xc0' - elif b == b'\xdd': - partial_packet += b'\xdb' - else: - raise_exception( Exception('Invalid SLIP escape (%r%r)' % (b'\xdb', b)) ) - elif b == b'\xdb': # start of escape sequence - in_escape = True - elif b == b'\xc0': # end of packet - yield partial_packet - partial_packet = None - else: # normal byte in packet - partial_packet += b - - - class ISPResponse: - class ISPOperation(Enum): - ISP_ECHO = 0xC1 - ISP_NOP = 0xC2 - ISP_MEMORY_WRITE = 0xC3 - ISP_MEMORY_READ = 0xC4 - ISP_MEMORY_BOOT = 0xC5 - ISP_DEBUG_INFO = 0xD1 - ISP_CHANGE_BAUDRATE = 0xc6 - - class ErrorCode(Enum): - ISP_RET_DEFAULT = 0 - ISP_RET_OK = 0xE0 - ISP_RET_BAD_DATA_LEN = 0xE1 - ISP_RET_BAD_DATA_CHECKSUM = 0xE2 - ISP_RET_INVALID_COMMAND = 0xE3 - - @staticmethod - def parse(data): - # type: (bytes) -> (int, int, str) - op = 0 - reason = 0 - text = '' - - if (sys.version_info > (3, 0)): - op = int(data[0]) - reason = int(data[1]) - else: - op = ord(data[0]) - reason = ord(data[1]) - - try: - if ISPResponse.ISPOperation(op) == ISPResponse.ISPOperation.ISP_DEBUG_INFO: - text = data[2:].decode() - except ValueError: - KFlash.log('Warning: recv unknown op', op) - - return (op, reason, text) - - - class FlashModeResponse: - class Operation(Enum): - ISP_DEBUG_INFO = 0xD1 - ISP_NOP = 0xD2 - ISP_FLASH_ERASE = 0xD3 - ISP_FLASH_WRITE = 0xD4 - ISP_REBOOT = 0xD5 - ISP_UARTHS_BAUDRATE_SET = 0xD6 - FLASHMODE_FLASH_INIT = 0xD7 - - class ErrorCode(Enum): - ISP_RET_DEFAULT = 0 - ISP_RET_OK = 0xE0 - ISP_RET_BAD_DATA_LEN = 0xE1 - ISP_RET_BAD_DATA_CHECKSUM = 0xE2 - ISP_RET_INVALID_COMMAND = 0xE3 - ISP_RET_BAD_INITIALIZATION = 0xE4 - - @staticmethod - def parse(data): - # type: (bytes) -> (int, int, str) - op = 0 - reason = 0 - text = '' - - if (sys.version_info > (3, 0)): - op = int(data[0]) - reason = int(data[1]) - else: - op = ord(data[0]) - reason = ord(data[1]) - - if FlashModeResponse.Operation(op) == FlashModeResponse.Operation.ISP_DEBUG_INFO: - text = data[2:].decode() - - return (op, reason, text) - - - def chunks(l, n): - """Yield successive n-sized chunks from l.""" - for i in range(0, len(l), n): - yield l[i:i + n] - - class TerminalSize: - @staticmethod - def getTerminalSize(): - import platform - current_os = platform.system() - tuple_xy=None - if current_os == 'Windows': - tuple_xy = TerminalSize._getTerminalSize_windows() - if tuple_xy is None: - tuple_xy = TerminalSize._getTerminalSize_tput() - # needed for window's python in cygwin's xterm! - if current_os == 'Linux' or current_os == 'Darwin' or current_os.startswith('CYGWIN'): - tuple_xy = TerminalSize._getTerminalSize_linux() - if tuple_xy is None: - # Use default value - tuple_xy = (80, 25) # default value - return tuple_xy - - @staticmethod - def _getTerminalSize_windows(): - res=None - try: - from ctypes import windll, create_string_buffer - - # stdin handle is -10 - # stdout handle is -11 - # stderr handle is -12 - - h = windll.kernel32.GetStdHandle(-12) - csbi = create_string_buffer(22) - res = windll.kernel32.GetConsoleScreenBufferInfo(h, csbi) - except: - return None - if res: - import struct - (bufx, bufy, curx, cury, wattr, - left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw) - sizex = right - left + 1 - sizey = bottom - top + 1 - return sizex, sizey - else: - return None - - @staticmethod - def _getTerminalSize_tput(): - # get terminal width - # src: http://stackoverflow.com/questions/263890/how-do-i-find-the-width-height-of-a-terminal-window - try: - import subprocess - proc=subprocess.Popen(["tput", "cols"],stdin=subprocess.PIPE,stdout=subprocess.PIPE) - output=proc.communicate(input=None) - cols=int(output[0]) - proc=subprocess.Popen(["tput", "lines"],stdin=subprocess.PIPE,stdout=subprocess.PIPE) - output=proc.communicate(input=None) - rows=int(output[0]) - return (cols,rows) - except: - return None - - @staticmethod - def _getTerminalSize_linux(): - def ioctl_GWINSZ(fd): - try: - import fcntl, termios, struct, os - cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ,'1234')) - except: - return None - return cr - cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2) - if not cr: - try: - fd = os.open(os.ctermid(), os.O_RDONLY) - cr = ioctl_GWINSZ(fd) - os.close(fd) - except: - pass - if not cr: - try: - cr = (os.env['LINES'], os.env['COLUMNS']) - except: - return None - return int(cr[1]), int(cr[0]) - - @staticmethod - def get_terminal_size(fallback=(100, 24), terminal = False): - try: - columns, rows = TerminalSize.getTerminalSize() - if not terminal: - if not terminal_auto_size: - columns, rows = terminal_size - except: - columns, rows = fallback - - return columns, rows - - class MAIXLoader: - def change_baudrate(self, baudrate): - KFlash.log(INFO_MSG,"Selected Baudrate: ", baudrate, BASH_TIPS['DEFAULT']) - out = struct.pack('III', 0, 4, baudrate) - crc32_checksum = struct.pack('I', binascii.crc32(out) & 0xFFFFFFFF) - out = struct.pack('HH', 0xd6, 0x00) + crc32_checksum + out - self.write(out) - time.sleep(0.05) - self._port.baudrate = baudrate - if args.Board == "goE": - if baudrate >= 4500000: - # OPENEC super baudrate - KFlash.log(INFO_MSG, "Enable OPENEC super baudrate!!!", BASH_TIPS['DEFAULT']) - if baudrate == 4500000: - self._port.baudrate = 300 - if baudrate == 6000000: - self._port.baudrate = 250 - if baudrate == 7500000: - self._port.baudrate = 350 - - def change_baudrate_stage0(self, baudrate): - # Dangerous, here are dinosaur infested!!!!! - # Don't touch this code unless you know what you are doing - # Stage0 baudrate is fixed - # Contributor: [@rgwan](https://github.com/rgwan) - # rgwan - baudrate = 1500000 - if args.Board == "goE" or args.Board == "trainer": - KFlash.log(INFO_MSG,"Selected Stage0 Baudrate: ", baudrate, BASH_TIPS['DEFAULT']) - # This is for openec, contained ft2232, goE and trainer - KFlash.log(INFO_MSG,"FT2232 mode", BASH_TIPS['DEFAULT']) - baudrate_stage0 = int(baudrate * 38.6 / 38) - out = struct.pack('III', 0, 4, baudrate_stage0) - crc32_checksum = struct.pack('I', binascii.crc32(out) & 0xFFFFFFFF) - out = struct.pack('HH', 0xc6, 0x00) + crc32_checksum + out - self.write(out) - time.sleep(0.05) - self._port.baudrate = baudrate - - retry_count = 0 - while 1: - self.checkKillExit() - retry_count = retry_count + 1 - if retry_count > 3: - err = (ERROR_MSG,'Fast mode failed, please use slow mode by add parameter ' + BASH_TIPS['GREEN'] + '--Slow', BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - try: - self.greeting() - break - except TimeoutError: - pass - elif args.Board == "dan" or args.Board == "bit" or args.Board == "kd233": - KFlash.log(INFO_MSG,"CH340 mode", BASH_TIPS['DEFAULT']) - # This is for CH340, contained dan, bit and kd233 - baudrate_stage0 = int(baudrate * 38.4 / 38) - # CH340 can not use this method, test failed, take risks at your own risk - else: - # This is for unknown board - KFlash.log(WARN_MSG,"Unknown mode", BASH_TIPS['DEFAULT']) - - def __init__(self, port='/dev/ttyUSB1', baudrate=115200): - # configure the serial connections (the parameters differs on the device you are connecting to) - self._port = serial.Serial( - port=port, - baudrate=baudrate, - parity=serial.PARITY_NONE, - stopbits=serial.STOPBITS_ONE, - bytesize=serial.EIGHTBITS, - timeout=0.1 - ) - KFlash.log(INFO_MSG, "Default baudrate is", baudrate, ", later it may be changed to the value you set.", BASH_TIPS['DEFAULT']) - - self._port.isOpen() - self._slip_reader = slip_reader(self._port) - self._kill_process = False - - """ Read a SLIP packet from the serial port """ - - def read(self): - return next(self._slip_reader) - - """ Write bytes to the serial port while performing SLIP escaping """ - - def write(self, packet): - buf = b'\xc0' \ - + (packet.replace(b'\xdb', b'\xdb\xdd').replace(b'\xc0', b'\xdb\xdc')) \ - + b'\xc0' - #KFlash.log('[WRITE]', binascii.hexlify(buf)) - return self._port.write(buf) - - def read_loop(self): - #out = b'' - # while self._port.inWaiting() > 0: - # out += self._port.read(1) - - # KFlash.log(out) - while 1: - sys.stdout.write('[RECV] raw data: ') - sys.stdout.write(binascii.hexlify(self._port.read(1)).decode()) - sys.stdout.flush() - - def recv_one_return(self): - timeout_init = time.time() - data = b'' - # find start boarder - #sys.stdout.write('[RECV one return] raw data: ') - while 1: - if time.time() - timeout_init > ISP_RECEIVE_TIMEOUT: - raise TimeoutError - c = self._port.read(1) - #sys.stdout.write(binascii.hexlify(c).decode()) - sys.stdout.flush() - if c == b'\xc0': - break - - in_escape = False - while 1: - if time.time() - timeout_init > ISP_RECEIVE_TIMEOUT: - self.raise_exception( TimeoutError ) - c = self._port.read(1) - #sys.stdout.write(binascii.hexlify(c).decode()) - sys.stdout.flush() - if c == b'\xc0': - break - - elif in_escape: # part-way through escape sequence - in_escape = False - if c == b'\xdc': - data += b'\xc0' - elif c == b'\xdd': - data += b'\xdb' - else: - self.raise_exception( Exception('Invalid SLIP escape (%r%r)' % (b'\xdb', c)) ) - elif c == b'\xdb': # start of escape sequence - in_escape = True - - data += c - - #sys.stdout.write('\n') - return data - - # kd233 or open-ec or new cmsis-dap - def reset_to_isp_kd233(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW, IO16 to HIGH --') - # Pull reset down and keep 10ms - self._port.setDTR (True) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- IO16 to LOW, RESET to HIGH --') - # Pull IO16 to low and release reset - self._port.setRTS (True) - self._port.setDTR (False) - time.sleep(0.1) - def reset_to_boot_kd233(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setDTR (True) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (False) - time.sleep(0.1) - - #dan dock - def reset_to_isp_dan(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW, IO16 to HIGH --') - # Pull reset down and keep 10ms - self._port.setDTR (False) - self._port.setRTS (True) - time.sleep(0.1) - #KFlash.log('-- IO16 to LOW, RESET to HIGH --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - def reset_to_boot_dan(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setDTR (False) - self._port.setRTS (True) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (False) - time.sleep(0.1) - - # maix goD for old cmsis-dap firmware - def reset_to_isp_goD(self): - self._port.setDTR (True) ## output 0 - self._port.setRTS (True) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - def reset_to_boot_goD(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (True) - self._port.setDTR (True) - time.sleep(0.1) - - # maix goE for openec or new cmsis-dap firmware - def reset_to_boot_maixgo(self): - self._port.setDTR (False) - self._port.setRTS (False) - time.sleep(0.1) - #KFlash.log('-- RESET to LOW --') - # Pull reset down and keep 10ms - self._port.setRTS (False) - self._port.setDTR (True) - time.sleep(0.1) - #KFlash.log('-- RESET to HIGH, BOOT --') - # Pull IO16 to low and release reset - self._port.setRTS (False) - self._port.setDTR (False) - time.sleep(0.1) - - def greeting(self): - self._port.write(b'\xc0\xc2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0') - op, reason, text = ISPResponse.parse(self.recv_one_return()) - - #KFlash.log('MAIX return op:', ISPResponse.ISPOperation(op).name, 'reason:', ISPResponse.ErrorCode(reason).name) - - - def flash_greeting(self): - retry_count = 0 - while 1: - self.checkKillExit() - self._port.write(b'\xc0\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0') - retry_count = retry_count + 1 - try: - op, reason, text = FlashModeResponse.parse(self.recv_one_return()) - except IndexError: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to Connect to K210's Stub",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Index Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - except TimeoutError: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to Connect to K210's Stub",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Timeout Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - except: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to Connect to K210's Stub",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Unexcepted Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - # KFlash.log('MAIX return op:', FlashModeResponse.Operation(op).name, 'reason:', - # FlashModeResponse.ErrorCode(reason).name) - if FlashModeResponse.Operation(op) == FlashModeResponse.Operation.ISP_NOP and FlashModeResponse.ErrorCode(reason) == FlashModeResponse.ErrorCode.ISP_RET_OK: - KFlash.log(INFO_MSG,"Boot to Flashmode Successfully",BASH_TIPS['DEFAULT']) - self._port.flushInput() - self._port.flushOutput() - break - else: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to Connect to K210's Stub",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Unexcepted Return recevied, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - - def boot(self, address=0x80000000): - KFlash.log(INFO_MSG,"Booting From " + hex(address),BASH_TIPS['DEFAULT']) - - out = struct.pack('II', address, 0) - - crc32_checksum = struct.pack('I', binascii.crc32(out) & 0xFFFFFFFF) - - out = struct.pack('HH', 0xc5, 0x00) + crc32_checksum + out # op: ISP_MEMORY_WRITE: 0xc3 - self.write(out) - - def recv_debug(self): - op, reason, text = ISPResponse.parse(self.recv_one_return()) - #KFlash.log('[RECV] op:', ISPResponse.ISPOperation(op).name, 'reason:', ISPResponse.ErrorCode(reason).name) - if text: - KFlash.log('-' * 30) - KFlash.log(text) - KFlash.log('-' * 30) - if ISPResponse.ErrorCode(reason) not in (ISPResponse.ErrorCode.ISP_RET_DEFAULT, ISPResponse.ErrorCode.ISP_RET_OK): - KFlash.log('Failed, retry, errcode=', hex(reason)) - return False - return True - - def flash_recv_debug(self): - op, reason, text = FlashModeResponse.parse(self.recv_one_return()) - #KFlash.log('[Flash-RECV] op:', FlashModeResponse.Operation(op).name, 'reason:', - # FlashModeResponse.ErrorCode(reason).name) - if text: - KFlash.log('-' * 30) - KFlash.log(text) - KFlash.log('-' * 30) - - if FlashModeResponse.ErrorCode(reason) not in (FlashModeResponse.ErrorCode.ISP_RET_OK, FlashModeResponse.ErrorCode.ISP_RET_OK): - KFlash.log('Failed, retry') - return False - return True - - def init_flash(self, chip_type): - chip_type = int(chip_type) - KFlash.log(INFO_MSG,"Selected Flash: ",("In-Chip", "On-Board")[chip_type],BASH_TIPS['DEFAULT']) - out = struct.pack('II', chip_type, 0) - crc32_checksum = struct.pack('I', binascii.crc32(out) & 0xFFFFFFFF) - out = struct.pack('HH', 0xd7, 0x00) + crc32_checksum + out - '''Retry when it have error''' - retry_count = 0 - while 1: - self.checkKillExit() - sent = self.write(out) - retry_count = retry_count + 1 - try: - op, reason, text = FlashModeResponse.parse(self.recv_one_return()) - except IndexError: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to initialize flash",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Index Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - except TimeoutError: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to initialize flash",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Timeout Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - except: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to initialize flash",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Unexcepted Error, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - # KFlash.log('MAIX return op:', FlashModeResponse.Operation(op).name, 'reason:', - # FlashModeResponse.ErrorCode(reason).name) - if FlashModeResponse.Operation(op) == FlashModeResponse.Operation.FLASHMODE_FLASH_INIT and FlashModeResponse.ErrorCode(reason) == FlashModeResponse.ErrorCode.ISP_RET_OK: - KFlash.log(INFO_MSG,"Initialization flash Successfully",BASH_TIPS['DEFAULT']) - break - else: - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Failed to initialize flash",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - KFlash.log(WARN_MSG,"Unexcepted Return recevied, retrying...",BASH_TIPS['DEFAULT']) - time.sleep(0.1) - continue - - def flash_dataframe(self, data, address=0x80000000): - DATAFRAME_SIZE = 1024 - data_chunks = chunks(data, DATAFRAME_SIZE) - #KFlash.log('[DEBUG] flash dataframe | data length:', len(data)) - total_chunk = math.ceil(len(data)/DATAFRAME_SIZE) - - time_start = time.time() - for n, chunk in enumerate(data_chunks): - self.checkKillExit() - while 1: - self.checkKillExit() - #KFlash.log('[INFO] sending chunk', i, '@address', hex(address), 'chunklen', len(chunk)) - out = struct.pack('II', address, len(chunk)) - - crc32_checksum = struct.pack('I', binascii.crc32(out + chunk) & 0xFFFFFFFF) - - out = struct.pack('HH', 0xc3, 0x00) + crc32_checksum + out + chunk # op: ISP_MEMORY_WRITE: 0xc3 - sent = self.write(out) - #KFlash.log('[INFO]', 'sent', sent, 'bytes', 'checksum', binascii.hexlify(crc32_checksum).decode()) - - address += len(chunk) - - if self.recv_debug(): - break - - columns, lines = TerminalSize.get_terminal_size((100, 24), terminal) - time_delta = time.time() - time_start - speed = '' - if (time_delta > 1): - speed = str(int((n + 1) * DATAFRAME_SIZE / 1024.0 / time_delta)) + 'kiB/s' - printProgressBar(n+1, total_chunk, prefix = 'Downloading ISP:', suffix = speed, length = columns - 35) - - def dump_to_flash(self, data, address=0): - ''' - typedef struct __attribute__((packed)) { - uint8_t op; - int32_t checksum; /* All the fields below are involved in the calculation of checksum */ - uint32_t address; - uint32_t data_len; - uint8_t data_buf[1024]; - } isp_request_t; - ''' - - DATAFRAME_SIZE = ISP_FLASH_DATA_FRAME_SIZE - data_chunks = chunks(data, DATAFRAME_SIZE) - #KFlash.log('[DEBUG] flash dataframe | data length:', len(data)) - - - - for n, chunk in enumerate(data_chunks): - #KFlash.log('[INFO] sending chunk', i, '@address', hex(address)) - out = struct.pack('II', address, len(chunk)) - - crc32_checksum = struct.pack('I', binascii.crc32(out + chunk) & 0xFFFFFFFF) - - out = struct.pack('HH', 0xd4, 0x00) + crc32_checksum + out + chunk - #KFlash.log("[$$$$]", binascii.hexlify(out[:32]).decode()) - retry_count = 0 - while True: - try: - sent = self.write(out) - #KFlash.log('[INFO]', 'sent', sent, 'bytes', 'checksum', crc32_checksum) - self.flash_recv_debug() - except: - retry_count = retry_count + 1 - if retry_count > MAX_RETRY_TIMES: - err = (ERROR_MSG,"Error Count Exceeded, Stop Trying",BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - continue - break - address += len(chunk) - - - - def flash_erase(self): - #KFlash.log('[DEBUG] erasing spi flash.') - self._port.write(b'\xc0\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0') - op, reason, text = FlashModeResponse.parse(self.recv_one_return()) - #KFlash.log('MAIX return op:', FlashModeResponse.Operation(op).name, 'reason:', - # FlashModeResponse.ErrorCode(reason).name) - - def install_flash_bootloader(self, data): - # Download flash bootloader - self.flash_dataframe(data, address=0x80000000) - - def load_elf_to_sram(self, f): - try: - from elftools.elf.elffile import ELFFile - from elftools.elf.descriptions import describe_p_type - except ImportError: - err = (ERROR_MSG,'pyelftools must be installed, run '+BASH_TIPS['GREEN']+'`' + ('pip', 'pip3')[sys.version_info > (3, 0)] + ' install pyelftools`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - self.raise_exception( Exception(err) ) - - elffile = ELFFile(f) - if elffile['e_entry'] != 0x80000000: - KFlash.log(WARN_MSG,"ELF entry is 0x%x instead of 0x80000000" % (elffile['e_entry']), BASH_TIPS['DEFAULT']) - - for segment in elffile.iter_segments(): - t = describe_p_type(segment['p_type']) - KFlash.log(INFO_MSG, ("Program Header: Size: %d, Virtual Address: 0x%x, Type: %s" % (segment['p_filesz'], segment['p_vaddr'], t)), BASH_TIPS['DEFAULT']) - if not (segment['p_vaddr'] & 0x80000000): - continue - if segment['p_filesz']==0 or segment['p_vaddr']==0: - KFlash.log("Skipped") - continue - self.flash_dataframe(segment.data(), segment['p_vaddr']) - - def flash_firmware(self, firmware_bin, aes_key = None, address_offset = 0, sha256Prefix = True, filename = ""): - # type: (bytes, bytes, int, bool) -> None - # Don't remove above code! - - #KFlash.log('[DEBUG] flash_firmware DEBUG: aeskey=', aes_key) - - if sha256Prefix == True: - # Add header to the firmware - # Format: SHA256(after)(32bytes) + AES_CIPHER_FLAG (1byte) + firmware_size(4bytes) + firmware_data - aes_cipher_flag = b'\x01' if aes_key else b'\x00' - - # Encryption - if aes_key: - enc = AES_128_CBC(aes_key, iv=b'\x00'*16).encrypt - padded = firmware_bin + b'\x00'*15 # zero pad - firmware_bin = b''.join([enc(padded[i*16:i*16+16]) for i in range(len(padded)//16)]) - - firmware_len = len(firmware_bin) - - data = aes_cipher_flag + struct.pack('I', firmware_len) + firmware_bin - - sha256_hash = hashlib.sha256(data).digest() - - firmware_with_header = data + sha256_hash - - total_chunk = math.ceil(len(firmware_with_header)/ISP_FLASH_DATA_FRAME_SIZE) - # Slice download firmware - data_chunks = chunks(firmware_with_header, ISP_FLASH_DATA_FRAME_SIZE) # 4kiB for a sector, 16kiB for dataframe - else: - total_chunk = math.ceil(len(firmware_bin)/ISP_FLASH_DATA_FRAME_SIZE) - data_chunks = chunks(firmware_bin, ISP_FLASH_DATA_FRAME_SIZE) - - time_start = time.time() - for n, chunk in enumerate(data_chunks): - self.checkKillExit() - chunk = chunk.ljust(ISP_FLASH_DATA_FRAME_SIZE, b'\x00') # align by size of dataframe - - # Download a dataframe - #KFlash.log('[INFO]', 'Write firmware data piece') - self.dump_to_flash(chunk, address= n * ISP_FLASH_DATA_FRAME_SIZE + address_offset) - columns, lines = TerminalSize.get_terminal_size((100, 24), terminal) - time_delta = time.time() - time_start - speed = '' - if (time_delta > 1): - speed = str(int((n + 1) * ISP_FLASH_DATA_FRAME_SIZE / 1024.0 / time_delta)) + 'kiB/s' - printProgressBar(n+1, total_chunk, prefix = 'Programming BIN:', filename=filename, suffix = speed, length = columns - 35) - - def kill(self): - self._kill_process = True - - def checkKillExit(self): - if self._kill_process: - self._port.close() - self._kill_process = False - raise Exception("Cancel") - - def open_terminal(reset): - control_signal = '0' if reset else '1' - control_signal_b = not reset - import serial.tools.miniterm - # For using the terminal with MaixPy the 'filter' option must be set to 'direct' - # because some control characters are emited - sys.argv = [sys.argv[0], _port, '115200', '--dtr='+control_signal, '--rts='+control_signal, '--filter=direct'] - serial.tools.miniterm.main(default_port=_port, default_baudrate=115200, default_dtr=control_signal_b, default_rts=control_signal_b) - sys.exit(0) - - boards_choices = ["kd233", "dan", "bit", "bit_mic", "goE", "goD", "maixduino", "trainer"] - if terminal: - parser = argparse.ArgumentParser() - parser.add_argument("-p", "--port", help="COM Port", default="DEFAULT") - parser.add_argument("-f", "--flash", help="SPI Flash type, 0 for SPI3, 1 for SPI0", default=1) - parser.add_argument("-b", "--baudrate", type=int, help="UART baudrate for uploading firmware", default=115200) - parser.add_argument("-l", "--bootloader", help="Bootloader bin path", required=False, default=None) - parser.add_argument("-k", "--key", help="AES key in hex, if you need encrypt your firmware.", required=False, default=None) - parser.add_argument("-v", "--version", help="Print version.", action='version', version='0.8.3') - parser.add_argument("--verbose", help="Increase output verbosity", default=False, action="store_true") - parser.add_argument("-t", "--terminal", help="Start a terminal after finish (Python miniterm)", default=False, action="store_true") - parser.add_argument("-n", "--noansi", help="Do not use ANSI colors, recommended in Windows CMD", default=False, action="store_true") - parser.add_argument("-s", "--sram", help="Download firmware to SRAM and boot", default=False, action="store_true") - parser.add_argument("-B", "--Board",required=False, type=str, help="Select dev board", choices=boards_choices) - parser.add_argument("-S", "--Slow",required=False, help="Slow download mode", default=False) - parser.add_argument("firmware", help="firmware bin path") - args = parser.parse_args() - else: - args = argparse.Namespace() - setattr(args, "port", "DEFAULT") - setattr(args, "flash", 1) - setattr(args, "baudrate", 115200) - setattr(args, "bootloader", None) - setattr(args, "key", None) - setattr(args, "verbose", False) - setattr(args, "terminal", False) - setattr(args, "noansi", False) - setattr(args, "sram", False) - setattr(args, "Board", None) - setattr(args, "Slow", False) - - # udpate args for none terminal call - if not terminal: - args.port = dev - args.baudrate = baudrate - args.noansi = noansi - args.sram = sram - args.Board = board - args.firmware = file - - if args.Board == "maixduino" or args.Board == "bit_mic": - args.Board = "goE" - - if (args.noansi == True): - BASH_TIPS = dict(NORMAL='',BOLD='',DIM='',UNDERLINE='', - DEFAULT='', RED='', YELLOW='', GREEN='', - BG_DEFAULT='', BG_WHITE='') - ERROR_MSG = BASH_TIPS['RED']+BASH_TIPS['BOLD']+'[ERROR]'+BASH_TIPS['NORMAL'] - WARN_MSG = BASH_TIPS['YELLOW']+BASH_TIPS['BOLD']+'[WARN]'+BASH_TIPS['NORMAL'] - INFO_MSG = BASH_TIPS['GREEN']+BASH_TIPS['BOLD']+'[INFO]'+BASH_TIPS['NORMAL'] - KFlash.log(INFO_MSG,'ANSI colors not used',BASH_TIPS['DEFAULT']) - - manually_set_the_board = False - if args.Board: - manually_set_the_board = True - - if args.port == "DEFAULT": - if args.Board == "goE": - list_port_info = list(serial.tools.list_ports.grep("0403")) #Take the second one - if len(list_port_info) == 0: - err = (ERROR_MSG,"No vaild COM Port found in Auto Detect, Check Your Connection or Specify One by"+BASH_TIPS['GREEN']+'`--port/-p`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - list_port_info.sort() - if len(list_port_info) == 1: - _port = list_port_info[0].device - elif len(list_port_info) > 1: - _port = list_port_info[1].device - KFlash.log(INFO_MSG,"COM Port Auto Detected, Selected ", _port, BASH_TIPS['DEFAULT']) - elif args.Board == "trainer": - list_port_info = list(serial.tools.list_ports.grep("0403")) #Take the first one - if(len(list_port_info)==0): - err = (ERROR_MSG,"No vaild COM Port found in Auto Detect, Check Your Connection or Specify One by"+BASH_TIPS['GREEN']+'`--port/-p`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - list_port_info.sort() - _port = list_port_info[0].device - KFlash.log(INFO_MSG,"COM Port Auto Detected, Selected ", _port, BASH_TIPS['DEFAULT']) - else: - try: - list_port_info = next(serial.tools.list_ports.grep(VID_LIST_FOR_AUTO_LOOKUP)) #Take the first one within the list - _port = list_port_info.device - KFlash.log(INFO_MSG,"COM Port Auto Detected, Selected ", _port, BASH_TIPS['DEFAULT']) - except StopIteration: - err = (ERROR_MSG,"No vaild COM Port found in Auto Detect, Check Your Connection or Specify One by"+BASH_TIPS['GREEN']+'`--port/-p`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - else: - _port = args.port - KFlash.log(INFO_MSG,"COM Port Selected Manually: ", _port, BASH_TIPS['DEFAULT']) - - self.loader = MAIXLoader(port=_port, baudrate=115200) - file_format = ProgramFileFormat.FMT_BINARY - - # 0. Check firmware - try: - firmware_bin = open(args.firmware, 'rb') - except FileNotFoundError: - err = (ERROR_MSG,'Unable to find the firmware at ', args.firmware, BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - - with open(args.firmware, 'rb') as f: - file_header = f.read(4) - #if file_header.startswith(bytes([0x50, 0x4B])): - if file_header.startswith(b'\x50\x4B'): - if ".kfpkg" != os.path.splitext(args.firmware)[1]: - KFlash.log(INFO_MSG, 'Find a zip file, but not with ext .kfpkg:', args.firmware, BASH_TIPS['DEFAULT']) - else: - file_format = ProgramFileFormat.FMT_KFPKG - - #if file_header.startswith(bytes([0x7F, 0x45, 0x4C, 0x46])): - if file_header.startswith(b'\x7f\x45\x4c\x46'): - file_format = ProgramFileFormat.FMT_ELF - if args.sram: - KFlash.log(INFO_MSG, 'Find an ELF file:', args.firmware, BASH_TIPS['DEFAULT']) - else: - err = (ERROR_MSG, 'This is an ELF file and cannot be programmed to flash directly:', args.firmware, BASH_TIPS['DEFAULT'] , '\r\nPlease retry:', args.firmware + '.bin', BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - - # 1. Greeting. - KFlash.log(INFO_MSG,"Trying to Enter the ISP Mode...",BASH_TIPS['DEFAULT']) - - retry_count = 0 - - while 1: - self.checkKillExit() - try: - retry_count = retry_count + 1 - if retry_count > 15: - err = (ERROR_MSG,"No vaild Kendryte K210 found in Auto Detect, Check Your Connection or Specify One by"+BASH_TIPS['GREEN']+'`-p '+('/dev/ttyUSB0', 'COM3')[sys.platform == 'win32']+'`',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - if args.Board == "dan" or args.Board == "bit" or args.Board == "trainer": - try: - KFlash.log('.', end='') - self.loader.reset_to_isp_dan() - self.loader.greeting() - break - except TimeoutError: - pass - elif args.Board == "kd233": - try: - KFlash.log('_', end='') - self.loader.reset_to_isp_kd233() - self.loader.greeting() - break - except TimeoutError: - pass - elif args.Board == "goE": - try: - KFlash.log('*', end='') - self.loader.reset_to_isp_kd233() - self.loader.greeting() - break - except TimeoutError: - pass - elif args.Board == "goD": - try: - KFlash.log('#', end='') - self.loader.reset_to_isp_goD() - self.loader.greeting() - break - except TimeoutError: - pass - else: - try: - KFlash.log('.', end='') - self.loader.reset_to_isp_dan() - self.loader.greeting() - args.Board = "dan" - KFlash.log() - KFlash.log(INFO_MSG,"Automatically detected dan/bit/trainer",BASH_TIPS['DEFAULT']) - break - except TimeoutError: - pass - try: - KFlash.log('_', end='') - self.loader.reset_to_isp_kd233() - self.loader.greeting() - args.Board = "kd233" - KFlash.log() - KFlash.log(INFO_MSG,"Automatically detected goE/kd233",BASH_TIPS['DEFAULT']) - break - except TimeoutError: - pass - try: - KFlash.log('.', end='') - self.loader.reset_to_isp_goD() - self.loader.greeting() - args.Board = "goD" - KFlash.log() - KFlash.log(INFO_MSG,"Automatically detected goD",BASH_TIPS['DEFAULT']) - break - except TimeoutError: - pass - try: - # Magic, just repeat, don't remove, it may unstable, don't know why. - KFlash.log('_', end='') - self.loader.reset_to_isp_kd233() - self.loader.greeting() - args.Board = "kd233" - KFlash.log() - KFlash.log(INFO_MSG,"Automatically detected goE/kd233",BASH_TIPS['DEFAULT']) - break - except TimeoutError: - pass - except Exception as e: - KFlash.log() - raise_exception( Exception("Greeting fail, check serial port ("+str(e)+")" ) ) - - # Don't remove this line - # Dangerous, here are dinosaur infested!!!!! - ISP_RECEIVE_TIMEOUT = 3 - - KFlash.log() - KFlash.log(INFO_MSG,"Greeting Message Detected, Start Downloading ISP",BASH_TIPS['DEFAULT']) - - if manually_set_the_board and (not args.Slow): - if (args.baudrate >= 1500000) or args.sram: - self.loader.change_baudrate_stage0(args.baudrate) - - # 2. download bootloader and firmware - if args.sram: - if file_format == ProgramFileFormat.FMT_KFPKG: - err = (ERROR_MSG, "Unable to load kfpkg to SRAM") - err = tuple2str(err) - raise_exception( Exception(err) ) - elif file_format == ProgramFileFormat.FMT_ELF: - self.loader.load_elf_to_sram(firmware_bin) - else: - self.loader.install_flash_bootloader(firmware_bin.read()) - else: - # install bootloader at 0x80000000 - isp_loader = open(args.bootloader, 'rb').read() if args.bootloader else ISP_PROG - self.loader.install_flash_bootloader(isp_loader) - - # Boot the code from SRAM - self.loader.boot() - - if args.sram: - # Dangerous, here are dinosaur infested!!!!! - # Don't touch this code unless you know what you are doing - self.loader._port.baudrate = args.baudrate - KFlash.log(INFO_MSG,"Boot user code from SRAM", BASH_TIPS['DEFAULT']) - if(args.terminal == True): - open_terminal(False) - msg = "Burn SRAM OK" - raise_exception( Exception(msg) ) - - # Dangerous, here are dinosaur infested!!!!! - # Don't touch this code unless you know what you are doing - self.loader._port.baudrate = 115200 - - KFlash.log(INFO_MSG,"Wait For 0.1 second for ISP to Boot", BASH_TIPS['DEFAULT']) - - time.sleep(0.1) - - self.loader.flash_greeting() - - if args.baudrate != 115200: - self.loader.change_baudrate(args.baudrate) - KFlash.log(INFO_MSG,"Baudrate changed, greeting with ISP again ... ", BASH_TIPS['DEFAULT']) - self.loader.flash_greeting() - - self.loader.init_flash(args.flash) - - if file_format == ProgramFileFormat.FMT_KFPKG: - KFlash.log(INFO_MSG,"Extracting KFPKG ... ", BASH_TIPS['DEFAULT']) - firmware_bin.close() - with tempfile.TemporaryDirectory() as tmpdir: - try: - with zipfile.ZipFile(args.firmware) as zf: - zf.extractall(tmpdir) - except zipfile.BadZipFile: - err = (ERROR_MSG,'Unable to Decompress the kfpkg, your file might be corrupted.',BASH_TIPS['DEFAULT']) - err = tuple2str(err) - raise_exception( Exception(err) ) - - fFlashList = open(os.path.join(tmpdir, 'flash-list.json'), "r") - sFlashList = re.sub(r'"address": (.*),', r'"address": "\1",', fFlashList.read()) #Pack the Hex Number in json into str - fFlashList.close() - jsonFlashList = json.loads(sFlashList) - for lBinFiles in jsonFlashList['files']: - self.checkKillExit() - KFlash.log(INFO_MSG,"Writing",lBinFiles['bin'],"into","0x%08x"%int(lBinFiles['address'], 0),BASH_TIPS['DEFAULT']) - with open(os.path.join(tmpdir, lBinFiles["bin"]), "rb") as firmware_bin: - self.loader.flash_firmware(firmware_bin.read(), None, int(lBinFiles['address'], 0), lBinFiles['sha256Prefix'], filename=lBinFiles['bin']) - else: - if args.key: - aes_key = binascii.a2b_hex(args.key) - if len(aes_key) != 16: - raise_exception( ValueError('AES key must by 16 bytes') ) - - self.loader.flash_firmware(firmware_bin.read(), aes_key=aes_key) - else: - self.loader.flash_firmware(firmware_bin.read()) - - # 3. boot - if args.Board == "dan" or args.Board == "bit" or args.Board == "trainer": - self.loader.reset_to_boot_dan() - elif args.Board == "kd233": - self.loader.reset_to_boot_kd233() - elif args.Board == "goE": - self.loader.reset_to_boot_maixgo() - elif args.Board == "goD": - self.loader.reset_to_boot_goD() - else: - KFlash.log(WARN_MSG,"Board unknown !! please press reset to boot!!") - - KFlash.log(INFO_MSG,"Rebooting...", BASH_TIPS['DEFAULT']) - try: - self.loader._port.close() - except Exception: - pass - - if(args.terminal == True): - open_terminal(True) - - def kill(self): - if self.loader: - self.loader.kill() - self.killProcess = True - - def checkKillExit(self): - if self.killProcess: - if self.loader: - self.loader._port.close() - raise Exception("Cancel") - - -def main(): - kflash = KFlash() - try: - kflash.process() - except Exception as e: - if str(e) == "Burn SRAM OK": - sys.exit(0) - kflash.log(str(e)) - sys.exit(1) - -if __name__ == '__main__': - main() From b520ed2597992c56449e527f6eb4507315032d0b Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 14 Feb 2021 01:01:20 +0800 Subject: [PATCH 13/87] Fix alignment in os/build.rs --- os/build.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/os/build.rs b/os/build.rs index 792fe3c..07a25c9 100644 --- a/os/build.rs +++ b/os/build.rs @@ -23,7 +23,7 @@ fn insert_app_data() -> Result<()> { apps.sort(); writeln!(f, r#" - .align 4 + .align 3 .section .data .global _num_app _num_app: @@ -40,6 +40,7 @@ _num_app: .section .data .global app_{0}_start .global app_{0}_end + .align 3 app_{0}_start: .incbin "{2}{1}" app_{0}_end:"#, idx, app, TARGET_PATH)?; From 87e30fdaa82db89e16beed0f5d8da25c9b0c356e Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 24 Feb 2021 03:48:55 +0800 Subject: [PATCH 14/87] Fix overflow bug when ceiling va --- os/src/mm/address.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/os/src/mm/address.rs b/os/src/mm/address.rs index dd25b63..90ec3aa 100644 --- a/os/src/mm/address.rs +++ b/os/src/mm/address.rs @@ -69,7 +69,7 @@ impl From for usize { impl VirtAddr { pub fn floor(&self) -> VirtPageNum { VirtPageNum(self.0 / PAGE_SIZE) } - pub fn ceil(&self) -> VirtPageNum { VirtPageNum((self.0 + PAGE_SIZE - 1) / PAGE_SIZE) } + pub fn ceil(&self) -> VirtPageNum { VirtPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) } pub fn page_offset(&self) -> usize { self.0 & (PAGE_SIZE - 1) } pub fn aligned(&self) -> bool { self.page_offset() == 0 } } @@ -84,7 +84,7 @@ impl From for VirtAddr { } impl PhysAddr { pub fn floor(&self) -> PhysPageNum { PhysPageNum(self.0 / PAGE_SIZE) } - pub fn ceil(&self) -> PhysPageNum { PhysPageNum((self.0 + PAGE_SIZE - 1) / PAGE_SIZE) } + pub fn ceil(&self) -> PhysPageNum { PhysPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) } pub fn page_offset(&self) -> usize { self.0 & (PAGE_SIZE - 1) } pub fn aligned(&self) -> bool { self.page_offset() == 0 } } From 2486abe7ff59e4a939441d36927850f310387420 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 28 Feb 2021 06:32:26 +0800 Subject: [PATCH 15/87] Add Ubuntu18.04 docker --- .dockerignore | 1 + Dockerfile | 40 ++++++++++++++++++++++++++++++++++++++++ Makefile | 8 ++++++++ README.md | 2 +- 4 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 Makefile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..df3359d --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +*/* \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ac784bc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,40 @@ +FROM ubuntu:18.04 +LABEL maintainer="dinghao188" \ + version="1.1" \ + description="ubuntu 18.04 with tools for tsinghua's rCore-Tutorial-V3" + +#install some deps +RUN set -x \ + && apt-get update \ + && apt-get install -y curl wget autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ + gawk build-essential bison flex texinfo gperf libtool patchutils bc xz-utils \ + zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev git tmux python3 + +#install rust and qemu +RUN set -x; \ + RUSTUP='/root/rustup.sh' \ + && cd $HOME \ + #install rust + && curl https://sh.rustup.rs -sSf > $RUSTUP && chmod +x $RUSTUP \ + && $RUSTUP -y --default-toolchain nightly --profile minimal \ + + #compile qemu + && wget https://ftp.osuosl.org/pub/blfs/conglomeration/qemu/qemu-5.0.0.tar.xz \ + && tar xvJf qemu-5.0.0.tar.xz \ + && cd qemu-5.0.0 \ + && ./configure --target-list=riscv64-softmmu,riscv64-linux-user \ + && make -j$(nproc) install \ + && cd $HOME && rm -rf qemu-5.0.0 qemu-5.0.0.tar.xz + +#for chinese network +RUN set -x; \ + APT_CONF='/etc/apt/sources.list'; \ + CARGO_CONF='/root/.cargo/config'; \ + BASHRC='/root/.bashrc' \ + && echo 'export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static' >> $BASHRC \ + && echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup' >> $BASHRC \ + && touch $CARGO_CONF \ + && echo '[source.crates-io]' > $CARGO_CONF \ + && echo "replace-with = 'ustc'" >> $CARGO_CONF \ + && echo '[source.ustc]' >> $CARGO_CONF \ + && echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> $CARGO_CONF \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2e33976 --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +DOCKER_NAME ?= dinghao188/rcore-tutorial +.PHONY: docker build_docker + +docker: + docker run --rm -it --mount type=bind,source=$(shell pwd),destination=/mnt ${DOCKER_NAME} + +build_docker: + docker build -t ${DOCKER_NAME} . diff --git a/README.md b/README.md index 5083448..dd356b5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # rCore-Tutorial-v3 -rCore-Tutorial version 3. +rCore-Tutorial version 3. \ No newline at end of file From 5b0ceeb66a0e3d76b497f1b431e7c0fb830374e2 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 6 Mar 2021 03:21:55 +0800 Subject: [PATCH 16/87] Do not fetch tools when running on qemu. --- os/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/os/Makefile b/os/Makefile index e7aa6b7..9be727a 100644 --- a/os/Makefile +++ b/os/Makefile @@ -58,10 +58,9 @@ disasm-vim: kernel @vim $(DISASM_TMP) @rm $(DISASM_TMP) -run: tools run-inner +run: run-inner -tools: - (which $(K210-BURNER)) || (cd .. && git clone https://github.com/sipeed/kflash.py.git && mv kflash.py tools) + run-inner: build ifeq ($(BOARD),qemu) @@ -71,6 +70,7 @@ ifeq ($(BOARD),qemu) -bios $(BOOTLOADER) \ -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) else + (which $(K210-BURNER)) || (cd .. && git clone https://github.com/sipeed/kflash.py.git && mv kflash.py tools) @cp $(BOOTLOADER) $(BOOTLOADER).copy @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=$(K210_BOOTLOADER_SIZE) seek=1 @mv $(BOOTLOADER).copy $(KERNEL_BIN) @@ -85,4 +85,4 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build env kernel clean disasm disasm-vim run-inner tools +.PHONY: build env kernel clean disasm disasm-vim run-inner From 1c6c8757ee6ce7e6b0b6fdfdfac3b85352fe23ff Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 7 Mar 2021 19:56:36 +0800 Subject: [PATCH 17/87] Link small sections in linker --- os/src/linker-k210.ld | 3 +++ os/src/linker-qemu.ld | 3 +++ user/src/linker.ld | 3 +++ 3 files changed, 9 insertions(+) diff --git a/os/src/linker-k210.ld b/os/src/linker-k210.ld index 4f9d217..eaa2c9f 100644 --- a/os/src/linker-k210.ld +++ b/os/src/linker-k210.ld @@ -22,6 +22,7 @@ SECTIONS srodata = .; .rodata : { *(.rodata .rodata.*) + *(.srodata .srodata.*) } . = ALIGN(4K); @@ -29,6 +30,7 @@ SECTIONS sdata = .; .data : { *(.data .data.*) + *(.sdata .sdata.*) } . = ALIGN(4K); @@ -38,6 +40,7 @@ SECTIONS *(.bss.stack) sbss = .; *(.bss .bss.*) + *(.sbss .sbss.*) } . = ALIGN(4K); diff --git a/os/src/linker-qemu.ld b/os/src/linker-qemu.ld index 6b06e91..5baafbd 100644 --- a/os/src/linker-qemu.ld +++ b/os/src/linker-qemu.ld @@ -22,6 +22,7 @@ SECTIONS srodata = .; .rodata : { *(.rodata .rodata.*) + *(.srodata .srodata.*) } . = ALIGN(4K); @@ -29,6 +30,7 @@ SECTIONS sdata = .; .data : { *(.data .data.*) + *(.sdata .sdata.*) } . = ALIGN(4K); @@ -38,6 +40,7 @@ SECTIONS *(.bss.stack) sbss = .; *(.bss .bss.*) + *(.sbss .sbss.*) } . = ALIGN(4K); diff --git a/user/src/linker.ld b/user/src/linker.ld index e05a98b..7273618 100644 --- a/user/src/linker.ld +++ b/user/src/linker.ld @@ -14,13 +14,16 @@ SECTIONS . = ALIGN(4K); .rodata : { *(.rodata .rodata.*) + *(.srodata .srodata.*) } . = ALIGN(4K); .data : { *(.data .data.*) + *(.sdata .sdata.*) } .bss : { *(.bss .bss.*) + *(.sbss .sbss.*) } /DISCARD/ : { *(.eh_frame) From 171accfadd3827cce0c4ce0d348875c67c6258e9 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 9 Mar 2021 16:08:56 +0800 Subject: [PATCH 18/87] Bump rustsbi to 0.2.0-alpha.1[81d53d8] --- bootloader/rustsbi-k210.bin | Bin 75068 -> 78860 bytes bootloader/rustsbi-qemu.bin | Bin 103288 -> 108184 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index e696137ab183ea5129e14e86ba980af53ae025d2..58d1c1a7aab97a8253864fa22811a0c8334cb60d 100755 GIT binary patch literal 78860 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 literal 75068 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 U=Y=5&Z}P;@0ki5(aM>3A3l{tUGXMYp literal 103288 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 Date: Tue, 23 Mar 2021 19:18:12 +0800 Subject: [PATCH 19/87] Fix end_va bug in translated_byte_buffer --- os/src/mm/page_table.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/os/src/mm/page_table.rs b/os/src/mm/page_table.rs index 0ef37db..31f564c 100644 --- a/os/src/mm/page_table.rs +++ b/os/src/mm/page_table.rs @@ -131,7 +131,7 @@ impl PageTable { } } -pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<&'static [u8]> { +pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<&'static mut [u8]> { let page_table = PageTable::from_token(token); let mut start = ptr as usize; let end = start + len; @@ -146,7 +146,11 @@ pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<& vpn.step(); let mut end_va: VirtAddr = vpn.into(); end_va = end_va.min(VirtAddr::from(end)); - v.push(&ppn.get_bytes_array()[start_va.page_offset()..end_va.page_offset()]); + if end_va.page_offset() == 0 { + v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..]); + } else { + v.push(&mut ppn.get_bytes_array()[start_va.page_offset()..end_va.page_offset()]); + } start = end_va.into(); } v From bf53e6d211ccd91a25b6dc0e678489cdadc09a00 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 5 Apr 2021 16:27:32 +0800 Subject: [PATCH 20/87] Downgrade cargo-binutils to 0.2.0 --- os/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/os/Makefile b/os/Makefile index 9be727a..2a4b387 100644 --- a/os/Makefile +++ b/os/Makefile @@ -33,7 +33,7 @@ build: env $(KERNEL_BIN) env: (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) - cargo install cargo-binutils + cargo install cargo-binutils --vers ~0.2 rustup component add rust-src rustup component add llvm-tools-preview From cf7c2abaa606d1b00d9f326af0ef25d913dc7faf Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 12 Jul 2021 22:09:34 +0800 Subject: [PATCH 21/87] RefCell->UPSafeCell && TaskCx->TCB --- .gitignore | 1 + os/Makefile | 11 ++++++-- os/src/main.rs | 11 +++++--- os/src/sync/mod.rs | 3 +++ os/src/sync/up.rs | 27 +++++++++++++++++++ os/src/task/context.rs | 11 +++++++- os/src/task/mod.rs | 56 ++++++++++++++++++--------------------- os/src/task/switch.S | 27 +++++++++---------- os/src/task/switch.rs | 6 +++-- os/src/task/task.rs | 9 ++----- rust-toolchain | 2 +- user/src/bin/00power_3.rs | 2 +- user/src/bin/01power_5.rs | 2 +- user/src/bin/02power_7.rs | 2 +- 14 files changed, 105 insertions(+), 65 deletions(-) create mode 100644 os/src/sync/mod.rs create mode 100644 os/src/sync/up.rs diff --git a/.gitignore b/.gitignore index 3327607..c44aa4f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ os/target/* os/.idea/* os/src/link_app.S +os/last-* os/Cargo.lock user/target/* user/.idea/* diff --git a/os/Makefile b/os/Makefile index 2a4b387..5330215 100644 --- a/os/Makefile +++ b/os/Makefile @@ -29,7 +29,14 @@ OBJCOPY := rust-objcopy --binary-architecture=riscv64 # Disassembly DISASM ?= -x -build: env $(KERNEL_BIN) +build: env switch-check $(KERNEL_BIN) + +switch-check: +ifeq ($(BOARD), qemu) + (which last-qemu) || (rm last-k210 -f && touch last-qemu && make clean) +else ifeq ($(BOARD), k210) + (which last-k210) || (rm last-qemu -f && touch last-k210 && make clean) +endif env: (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) @@ -85,4 +92,4 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build env kernel clean disasm disasm-vim run-inner +.PHONY: build env kernel clean disasm disasm-vim run-inner switch-check diff --git a/os/src/main.rs b/os/src/main.rs index 145f50a..7879fc4 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -3,7 +3,6 @@ #![feature(global_asm)] #![feature(llvm_asm)] #![feature(panic_info_message)] -#![feature(const_in_array_repeat_expressions)] #![feature(alloc_error_handler)] extern crate alloc; @@ -21,6 +20,7 @@ mod loader; mod config; mod task; mod timer; +mod sync; mod mm; global_asm!(include_str!("entry.asm")); @@ -31,9 +31,12 @@ fn clear_bss() { fn sbss(); fn ebss(); } - (sbss as usize..ebss as usize).for_each(|a| { - unsafe { (a as *mut u8).write_volatile(0) } - }); + unsafe { + core::slice::from_raw_parts_mut( + sbss as usize as *mut u8, + ebss as usize - sbss as usize, + ).fill(0); + } } #[no_mangle] diff --git a/os/src/sync/mod.rs b/os/src/sync/mod.rs new file mode 100644 index 0000000..7729524 --- /dev/null +++ b/os/src/sync/mod.rs @@ -0,0 +1,3 @@ +mod up; + +pub use up::UPSafeCell; \ No newline at end of file diff --git a/os/src/sync/up.rs b/os/src/sync/up.rs new file mode 100644 index 0000000..849ac4b --- /dev/null +++ b/os/src/sync/up.rs @@ -0,0 +1,27 @@ +/// Wrap a static data structure inside it so that we are +/// able to access it without any `unsafe`. +/// +/// We should only use it in uniprocessor. +/// +/// In order to get mutable reference of inner data, call +/// `upsafe_access`. +pub struct UPSafeCell { + /// inner data + data: T, +} + +unsafe impl Sync for UPSafeCell {} + +impl UPSafeCell { + /// User is responsible to guarantee that inner struct is only used in + /// uniprocessor. + pub unsafe fn new(value: T) -> Self { + Self { data: value, } + } + /// Mention that user should hold exactly one &mut T at a time. + pub fn upsafe_access(&self) -> &mut T { + unsafe { + &mut *(&self.data as *const _ as usize as *mut T) + } + } +} \ No newline at end of file diff --git a/os/src/task/context.rs b/os/src/task/context.rs index 340bc09..d25cc2c 100644 --- a/os/src/task/context.rs +++ b/os/src/task/context.rs @@ -3,13 +3,22 @@ use crate::trap::trap_return; #[repr(C)] pub struct TaskContext { ra: usize, + sp: usize, s: [usize; 12], } impl TaskContext { - pub fn goto_trap_return() -> Self { + pub fn zero_init() -> Self { + Self { + ra: 0, + sp: 0, + s: [0; 12], + } + } + pub fn goto_trap_return(kstack_ptr: usize) -> Self { Self { ra: trap_return as usize, + sp: kstack_ptr, s: [0; 12], } } diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 4a98094..56eb239 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -4,7 +4,7 @@ mod task; use crate::loader::{get_num_app, get_app_data}; use crate::trap::TrapContext; -use core::cell::RefCell; +use crate::sync::UPSafeCell; use lazy_static::*; use switch::__switch; use task::{TaskControlBlock, TaskStatus}; @@ -14,7 +14,7 @@ pub use context::TaskContext; pub struct TaskManager { num_app: usize, - inner: RefCell, + inner: UPSafeCell, } struct TaskManagerInner { @@ -22,8 +22,6 @@ struct TaskManagerInner { current_task: usize, } -unsafe impl Sync for TaskManager {} - lazy_static! { pub static ref TASK_MANAGER: TaskManager = { println!("init TASK_MANAGER"); @@ -38,41 +36,41 @@ lazy_static! { } TaskManager { num_app, - inner: RefCell::new(TaskManagerInner { + inner: unsafe { UPSafeCell::new(TaskManagerInner { tasks, current_task: 0, - }), + })}, } }; } impl TaskManager { fn run_first_task(&self) { - self.inner.borrow_mut().tasks[0].task_status = TaskStatus::Running; - let next_task_cx_ptr2 = self.inner.borrow().tasks[0].get_task_cx_ptr2(); - let _unused: usize = 0; + let next_task = &mut self.inner.upsafe_access().tasks[0]; + next_task.task_status = TaskStatus::Running; + let next_task_cx_ptr = &next_task.task_cx as *const TaskContext; + drop(next_task); + let mut _unused = TaskContext::zero_init(); unsafe { __switch( - &_unused as *const _, - next_task_cx_ptr2, + &mut _unused as *mut _, + next_task_cx_ptr, ); } } fn mark_current_suspended(&self) { - let mut inner = self.inner.borrow_mut(); - let current = inner.current_task; - inner.tasks[current].task_status = TaskStatus::Ready; + let inner = self.inner.upsafe_access(); + inner.tasks[inner.current_task].task_status = TaskStatus::Ready; } fn mark_current_exited(&self) { - let mut inner = self.inner.borrow_mut(); - let current = inner.current_task; - inner.tasks[current].task_status = TaskStatus::Exited; + let inner = self.inner.upsafe_access(); + inner.tasks[inner.current_task].task_status = TaskStatus::Exited; } fn find_next_task(&self) -> Option { - let inner = self.inner.borrow(); + let inner = self.inner.upsafe_access(); let current = inner.current_task; (current + 1..current + self.num_app + 1) .map(|id| id % self.num_app) @@ -82,30 +80,28 @@ impl TaskManager { } fn get_current_token(&self) -> usize { - let inner = self.inner.borrow(); - let current = inner.current_task; - inner.tasks[current].get_user_token() + let inner = self.inner.upsafe_access(); + inner.tasks[inner.current_task].get_user_token() } fn get_current_trap_cx(&self) -> &mut TrapContext { - let inner = self.inner.borrow(); - let current = inner.current_task; - inner.tasks[current].get_trap_cx() + let inner = self.inner.upsafe_access(); + inner.tasks[inner.current_task].get_trap_cx() } fn run_next_task(&self) { if let Some(next) = self.find_next_task() { - let mut inner = self.inner.borrow_mut(); + let mut inner = self.inner.upsafe_access(); let current = inner.current_task; inner.tasks[next].task_status = TaskStatus::Running; inner.current_task = next; - let current_task_cx_ptr2 = inner.tasks[current].get_task_cx_ptr2(); - let next_task_cx_ptr2 = inner.tasks[next].get_task_cx_ptr2(); - core::mem::drop(inner); + let current_task_cx_ptr = &mut inner.tasks[current].task_cx as *mut TaskContext; + let next_task_cx_ptr = &inner.tasks[next].task_cx as *const TaskContext; + drop(inner); unsafe { __switch( - current_task_cx_ptr2, - next_task_cx_ptr2, + current_task_cx_ptr, + next_task_cx_ptr, ); } } else { diff --git a/os/src/task/switch.S b/os/src/task/switch.S index 262511f..3f985d2 100644 --- a/os/src/task/switch.S +++ b/os/src/task/switch.S @@ -1,37 +1,34 @@ .altmacro .macro SAVE_SN n - sd s\n, (\n+1)*8(sp) + sd s\n, (\n+2)*8(a0) .endm .macro LOAD_SN n - ld s\n, (\n+1)*8(sp) + ld s\n, (\n+2)*8(a1) .endm .section .text .globl __switch __switch: # __switch( - # current_task_cx_ptr2: &*const TaskContext, - # next_task_cx_ptr2: &*const TaskContext + # current_task_cx_ptr: *mut TaskContext, + # next_task_cx_ptr: *const TaskContext # ) - # push TaskContext to current sp and save its address to where a0 points to - addi sp, sp, -13*8 - sd sp, 0(a0) - # fill TaskContext with ra & s0-s11 - sd ra, 0(sp) + # save kernel stack of current task + sd sp, 8(a0) + # save ra & s0~s11 of current execution + sd ra, 0(a0) .set n, 0 .rept 12 SAVE_SN %n .set n, n + 1 .endr - # ready for loading TaskContext a1 points to - ld sp, 0(a1) - # load registers in the TaskContext - ld ra, 0(sp) + # restore ra & s0~s11 of next execution + ld ra, 0(a1) .set n, 0 .rept 12 LOAD_SN %n .set n, n + 1 .endr - # pop TaskContext - addi sp, sp, 13*8 + # restore kernel stack of next task + ld sp, 8(a1) ret diff --git a/os/src/task/switch.rs b/os/src/task/switch.rs index 867fcb1..fa75be1 100644 --- a/os/src/task/switch.rs +++ b/os/src/task/switch.rs @@ -1,8 +1,10 @@ global_asm!(include_str!("switch.S")); +use super::TaskContext; + extern "C" { pub fn __switch( - current_task_cx_ptr2: *const usize, - next_task_cx_ptr2: *const usize + current_task_cx_ptr: *mut TaskContext, + next_task_cx_ptr: *const TaskContext ); } diff --git a/os/src/task/task.rs b/os/src/task/task.rs index 8e38635..b08d82a 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -4,17 +4,14 @@ use crate::config::{TRAP_CONTEXT, kernel_stack_position}; use super::TaskContext; pub struct TaskControlBlock { - pub task_cx_ptr: usize, pub task_status: TaskStatus, + pub task_cx: TaskContext, pub memory_set: MemorySet, pub trap_cx_ppn: PhysPageNum, pub base_size: usize, } impl TaskControlBlock { - pub fn get_task_cx_ptr2(&self) -> *const usize { - &self.task_cx_ptr as *const usize - } pub fn get_trap_cx(&self) -> &'static mut TrapContext { self.trap_cx_ppn.get_mut() } @@ -38,11 +35,9 @@ impl TaskControlBlock { kernel_stack_top.into(), MapPermission::R | MapPermission::W, ); - let task_cx_ptr = (kernel_stack_top - core::mem::size_of::()) as *mut TaskContext; - unsafe { *task_cx_ptr = TaskContext::goto_trap_return(); } let task_control_block = Self { - task_cx_ptr: task_cx_ptr as usize, task_status, + task_cx: TaskContext::goto_trap_return(kernel_stack_top), memory_set, trap_cx_ppn, base_size: user_sp, diff --git a/rust-toolchain b/rust-toolchain index a08f00d..a14eedc 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-01-30 +nightly-2021-07-01 diff --git a/user/src/bin/00power_3.rs b/user/src/bin/00power_3.rs index 532829d..e14f1e2 100644 --- a/user/src/bin/00power_3.rs +++ b/user/src/bin/00power_3.rs @@ -23,7 +23,7 @@ unsafe fn main() -> i32 { println!("power_3 [{}/{}]", i, iter); } } - println!("{}^{} = {}(mod {})", p, iter, S[cur], m); + println!("{}^{} = {}(MOD {})", p, iter, S[cur], m); println!("Test power_3 OK!"); 0 } \ No newline at end of file diff --git a/user/src/bin/01power_5.rs b/user/src/bin/01power_5.rs index f23e3b8..1bbe734 100644 --- a/user/src/bin/01power_5.rs +++ b/user/src/bin/01power_5.rs @@ -23,7 +23,7 @@ unsafe fn main() -> i32 { println!("power_5 [{}/{}]", i, iter); } } - println!("{}^{} = {}(mod {})", p, iter, S[cur], m); + println!("{}^{} = {}(MOD {})", p, iter, S[cur], m); println!("Test power_5 OK!"); 0 } diff --git a/user/src/bin/02power_7.rs b/user/src/bin/02power_7.rs index 35bada1..8c50344 100644 --- a/user/src/bin/02power_7.rs +++ b/user/src/bin/02power_7.rs @@ -23,7 +23,7 @@ unsafe fn main() -> i32 { println!("power_7 [{}/{}]", i, iter); } } - println!("{}^{} = {}(mod {})", p, iter, S[cur], m); + println!("{}^{} = {}(MOD {})", p, iter, S[cur], m); println!("Test power_7 OK!"); 0 } From c076e419523df41fe6ada949ee22651129ed2a5d Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 17 Jul 2021 10:44:36 +0800 Subject: [PATCH 22/87] Bump rustsbi to qemu[d4968dd2] k210[b689314e]. --- bootloader/rustsbi-k210.bin | Bin 78860 -> 94904 bytes bootloader/rustsbi-qemu.bin | Bin 108184 -> 128712 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index 58d1c1a7aab97a8253864fa22811a0c8334cb60d..27987d6839be28f8acd13e816e4de1c4548debbe 100755 GIT binary patch literal 94904 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 literal 78860 zcmdRX3w%`7wfC7xW|%;Lgn&F0JtQVKoXQA6P-vx-w3AkEYt>$Q`?8%RJ>#R58tuf= zYCC|5!GeWG#MVboLZRciHkH&sYg-wpNuSrRwzaqIt@b1&F=)U96AT#O`>(zBo<|-S zZ~eaC_q9LCoU`}Yd+qhwYpuQZ-gz$9-h#_=ueqZrFtFdPX$>1^X;nRk+;d%SEzh;# z%>FWZ=ho)8muz})(_`PdJMZv?8E2Net_$3eqg}ShxUzts;5yp*Syq;{ zA-HSW-WhXOXlTV;%O%!emc_rKmG(fEHG_JaOTESB+eZqnXe^)Wpj=3Fnq(taPm520;UCvaBvuAQ_y z(7U-4y*1Q&?%SC|J!oG-d7OUffh?=o&A;RCRd22Gg5t)U0%LCu-Uyrpeye^tzsRzx z&GS7Toxcja&p4fB-4e;3%Fm&TRn7Pm{L-nH_$KvB`x<@)#Jjsxy});kxeva_?!dkSM*u+D|ET~6}?pb3M^N@ z^vl#QEm7*wFHO+lY5avVqFOBcCSc45PfIw>#au&w zmp#}#oMn|q_CyM<*sFunb>_p`&GmVJG+RL$IuDTMNl4yMIMFn~nV)54tk{qbyv%OZ zvaD{Kp3qmm?*guG{YPG8Xy&ddjo`bC;K0RpKk8->4!x1uV3ki`Q;d9fEg;CB69lvu zudp`cC%pV-eN#oEXQ|G zefDgR=L4(jm=Yl$#+NO}cSP`HW`oD_uq0SF1EQ-7F5Y`JS}+QV_ZnH&rb5@dFj7Nm zlY0Td)diQJ#(MyXPBk(LT}FZ4cnNAP##_88UdZh^>)mr)+Y2skyo73PxMaWQwX;he z{Sk%?%w!T4=U7Z%&s{rDfOG2V%8O@s%3YFgqNlF|b~fQl!1SSlBJtlP34A|dcV$^c z#Hj+yy&k}}6#so_XE$-7`2xeNpD;$69q7=Q*X)b{KT9#XrIN4isGmODn}VMcz|VAv zpZ_9xn{%LehJ5~WQvUS&Fw!e9(wW>x^c(0G&%T*x`wEmv7}`F~-|8M?&<_qQi!? zi09Z`w7CZVUBja0ku`ulQY8&R9JUGzkcWpxT&ggbA7L6;9;4qCQ%~_s zqi;Gmip%ulr1zMXyRsYIu3!QFoo-c{l74T9axn%f_lR=RksC5LdA4Wl2~}WZYpd(J z_YFh$A1OI%46GdTWi@!TOgWa7MqNpVzpkX)IOzxGrkYe%RhgWhJk4{VKk~eF`%sdx z^Y=vezy?h-P%|g3W_K&s?DLz;A9`V-XMZ6&p_W_d^(A&g!y;W7Mm}T0{#CKg) zH`ALQvnVXSdja1$_--M+^_uOGDtB_EyZ1}@zfYC|TM^dnnr0{3^N&=0k$S8YP@G;% zaQI0k@~FL(dV}2Wp-4W%i+=qyXNi6{My4j9@zW@BTjyn2ou+(CZT8~r9D3W1y5Y#7 za6|ivv->)H6_KrmqcGs_Qs4GO+-83Gx~=t?-NTXQ(9NLwTxga&Phk^}Y0r0(V+z62 z;L@PQrR@(TOQTh))NGXac(B2mDXHt93gBMH(4=LNUyqrcGp78%waRT!rz@&J4ZA6s%~lZg6B-TYZ>eiUxjgm zX6LeqY|qCQSW(0vu5l4Rmzk=){D|F8?UhIH-BG)LajZOomIp-3T~(i_+WDr9S**yc zi_mOt-}d1I_XO|bQI*#Z1f@Kbsu9=LOMKj?%AEHmXOm(ddj+8)(q8IGFCxv^WR^+& z75c8>kbdQvW?^+*AI;_brLIFWbwM-r5>yydxXEN(oABCol}^baiTUJ+9@LURqwN0sn_Bvj`mZJ6eMd$2lI zZuZC-HSnrEoR#vd581=HR<1=h_s%Ct8*2|5!U~bz(ngxIFhl5KKEKIEPvMBfkg%^8 z$M%@vh%scG5nnj7mimI4PQG?zlXIYvZ749VrZl2|MMAjC=8BV z^NgQX3Ta9&Erlha?1IFoVO3bJPMtCL%WypSa zldV6hZs0Mhn;T1h?Zm|!!F^<9RJ$3=<3r(ePXvY5m=1+=cw#7=-J_uh{Apq+;NQEA zVV8;(zu-P;GP@{b_BaLv$>)4gDW1kz?V| zhf>>c7N)`xdOfv`z%N*i$F>pwRcad+WG;yr@_`gSBh}t+_Vt6?S=wQxLxW*X9JFiw zefEf}ykOcvucEx}!P|ZVHdLj#$g`OueqN@zetKgBGc_bh@__f`0n9p{T3BkO9=62; zLuKKOkrqS??EVs(N1?%r=W+e$%RCmT>qHXjkDs z^wts_?o`iyF~$oo0s6Ykv|-IsxiQGPJKDxQ8T}sAS%r~ojIb7a@c`sC!?W2uJ+xnN zO&40u7^mgl6_%#un+EJ!DmVJ%820e&XY?+^Y``4bO>MfV&C_qU&43tf{X5!bj*!nw z&)w$#1gp;8$zb(=(z4b(nU>!sy##LcZRf_r`f7tXVCG&emA6)bw|32J)QHN03kFG& z5p#2SHfJFwU1kQsnMV&`R(FhEUq$M-f-hmCYMR?L`gmM4=l}m#*Wa~kT4N%Twk(z( z<~i8&a)akd<*#hl@ISU`N}PhsMr~K--jr|L@|(89$#3FY>6;ACb`4P*P1yy$3h21G zq+Njfj7DuSMRo93%&`AY*IHFw(nZ!?$uKwxGcU#=Vvl5BKzq-@EB~&^D&KQ zj=;q%O$>!~bdkk=(nhng#%pftsP9Hip}|8lUSwU^YYYl{N`H)WDchi-;R3DEy-VAR zl8m4Wm`LI+!;|X<@3~0^e~$Uu1({o95!cklxUT2OLVUHsh4_w(Ey8d+&m_)&vCK(p zf_TXNiTw=2e;(k!8J+=`)aTztEJ@pyy;u9N)Z)45i)%f9fHXTncK1NX{)Ob1u_rc2 za}C!iKr(KN zYh9K0{dKZ@(UEUkJ;IYiWDM|Z#VF}7jh6oMNaGJwV>A_Lk4H!)ZTo42q}A>ocwXY> zQTbQliobTYtsjFQ{+b}9ugS*ul_sT`el4!{p2~&P&b0KA=VW&`A89$7=h56Y z_!E9U`DIv%!HS)`>dPekJ@Cq^*0p+n5QBB#GETsUjAXl-yPAi3q^}<>v1`GXSh?~> z)VshkymM^C?%K^FGtaBJ*|Lv*G0Unm%TwNj)*+^5dQ;v6ZYAF^&*O31BRdY{T93vE zqUl?WVWYD+7czUCVCam%3-9;$s2+6#QZ{J3k_v@WEF=$BU|CI51o6w?(_9?5k)Auv zeDxfrXW_YVxk=Vqo-4EO`Y#>7Z5ea}&2;R?#>-e2>=c^8`eM>gb4gz_`eW($MX9gQ z>q*a(B|x+l5OzjXwgou?RMD|*#ebCAmUV30wuF5V{dsCz`i8M>X+KPD%Q-T-Ewb}- zgYYN?+|J7>K@h)<@;KX7m(2HO8b(`#L>6 zF3YecgQpebWirM^=?YnDy-KC4YW5B88}`kEyoi#(Hi|{reU%Zrw=80JsTs@3O0L=T z+?E9?WLNInXR+v*JgS*n|^Jl=mf>=BaQS6k#TS2V6e*5I+cFyU;9B?=ei6rRQY@do_A!z z3x@Yi<>l8uT)UzR&w!Mkum9-7wZRot(^`G}eAT}_T)Xy99F1k@LqDXr>Sh}&zc+5F z+IHgupMU6!kKDm{uvSpnLMk)2R50i1P4sShQ`jsIXIJKgnRlY1m1TG8e_=l9MEo|j zwdiBiTA`BezbEB0wU+(})uQ>NJ;MI2m^W`u%$t+=MI3{b$X;rRc~n2jk<mO<}AOk$}4J%A+d>AY-D}=*JOv04!nC9xgZSL4u$@hkFkEM2+E4 zgssYnd)8kXzh^`}C+OL^cH*A(&dK*2{qvZf8J~Ae)N|mfiF>wAjqaJW+nTP`y(q<^8^{wWGtXb! zsvQ+plJL@9jqb(pOm^XKRxHCj=xRXu&B4P}t!Iwz&j>DKA7(nu&bJ3^&4+7M7DQ;+ z=*op>hd3MByX+(fb9BM@KmmCBc+3=-5kSnRNc zn}G}gC+x;DlOYK`%sw@HA))=;F57UWu#H&ytPjZdBCo}jt5#%;zAdG`(&Z~!wY=aQ z87rdM(O0@fyrsD>t#*a4Vw~C)Tf|$cO?|?W5;7mhDgawjL}$sTV{%gzjL|izFs8O+ z!PZT-WAttfa<-{aG5!dYjHCPW~u9X;*yG_99au`q^{w ziS><%_{7?j&L`0=X?(I&(DbY0@`<2#^h>FH68-f#_~aii?k6l84x(CGN$*rIuZKs! zk}6ZGl*{5@R%OIte&N|bpL70{prD>bQk#X+i&!6e-HGF893a+R{S9u^o7*FWoc`tC9lS8l=l@ zZYhOybT$8mc}%~*Nv_sAtI5maXb#1uX%$MX_y-Go6~#f!lz*;2NaLaybh5AOCfQf$ zUey<6>`v5I?FGJyn*M7DhL!V08+pL$w_q|*iuSu5j_k=fP)f%u$TDta8-bf~SMj{U-i+{oQ%BEk; zQ_+{mURx;a=}O71@i*w5$VOvnatoU-rpg^r4thlnMVPLskU5_j4OwzNTScqd4si=I z@@Q3?+b^ZK3gvf@rOwd-;X_og9))!F`Xp?j_onJD*{^8DIW0B%Hi6p>skkNof@iQ5 z$D}O%mUY*d6+_XMRtC*9dc}}SRwq^rx!1C^6+`jPDl8js#gNPXMM5cNTIeZgT&x(1 zSePSVhCjn)h!d(6L-HGtaoEpe80wI;J3wETMMTWJFC}I!dWx?QV}NatSoM_Netb## z7_60J#}Jw?#xOc&E?U+Wrj8+SgYCfACf%jhI%bmf)D-cCTLyjbm~+;-9~2p_crPOF zJU-AIk=hLQjA)Ms<&Karfe{A$OR*d^n`V97(E_mZ2WlgQB_QOwH*}r;l&2ZVs z8mFu)yCbLDjec{EWFMV9FmH%f)z&9!ZTP?%XLJpcmD1c@SXJ}{=Zkfo0<2h4W?+V= zTC7Iy!ZY%R@vjRjO&c_Xg0%#*x5#=@9ncLnfa2F6-Pu}?;Wu}jKjiC8RVp<*BO!Z3ejKFe+Dud)?aW+G>fdK7KeUQ(Qc zHhrqi5U5Zrqtl^wYE$SkUC{nCNd(!%#QUr-fo-fwKT0yPjp{gvZ0`I$MF^c-{1R|R zoAHZVu!zq9vv`6R1L+cWBgehPcOhS{)v-U(o{Q{B>Vx!cwM*$qc$h(wFq&I17h|1s zL(o&s-jM~H%{T7}O?quNkbbv^E1@gPkar4yEQd?t@2B_~tu+Zt13l!zYnE}hf2Y}e zyM=6n$bB^5AMqdc4{%vPWRI2+4zkGJRj|g7WGi9-@7o%k{g0 z_vDrs$FK**V7dlQ8t}b+3-~GeCS-FKatsg|hkVX5UJ>iYf}Yo74Hc1c_Z*aLpJnt2 z+wDB~^yZErGTi6Uuf|~2bo!MsXTz+5oW^{{OyIBB*J7O9BfjgzcNwk7hnr>Y4j#Us z6?*!1v-s})9&PIOLh?97%wuNbtVI;_z+YDkgmt!IW1@fgSxP|Xw(53{&} z_e!gDdfXf;+hPopoym(~&Y zh#W=E>M|b_nG@g);s)9NKX`^XZa!J@l=Wt(^D8FR+z_#M_)k}vtr*cQ5&rVSPe`fw3AD^f^ntRgWz5uCQjp)c09<00 zE;vp7PPuift8jl|P8{neQ>x|>U8!v024iRyB3`8n_Sb4>POlKPJlZT#OKbJ+wv5Q# zn~kHGE0(gp(w;h$JUcs z)(f`8cg%PLR2TB?Jb}Ge`VV5od2(cX&{qfg^3#r%+F;&;ZSK3zyZL_f=>N`~({pa! ziu!(FaUNq{>!1;U&$EEDHwn9UXn`DVOaDG+P%DU>pWCpek$cUW<@;II)~4cY^re3& zuend|fxHBJ;ru&aIC~a5Hm{NM#&>LyOC2`(ecSt`MtKuxaUr<4q1*pO?D7ygUAux;E9VYT zjoqKdy7dl@QIRcX^e4Q?OtRVGareq|qw)JcSA|(F4n?=mHl2+CQ z#dbf$YZpA87cP|Jx#&NGJZk-2lzn%|jCE|qDmwml{{XWe{vO%Ne~&)S?*}&X-=W9( z{mISz_w*9+zP@`p|2?uqystkxo&OFj=J!Kc{P*Nyet#PIM#7q;xD)12!D*o>lEz^b zktzIuoS~PbTFPYe)1Hkc6Vda!GP4AkVZ=?`ik881XHyOMMDFF-UB>O`&|_@V)7+ix zIevC@&$aKBFs&ZlGvZ`}a_#bbvYjf!?nr~jli|nOM~jnTdJq@G-l;RS!JqDsd#rf( zm*A<|9Hv3tEU|+}@Kk&jQ-QSG@)efGJu;lartG847-JY&ly2@hlt+Sqlz1vLCO?X`iJVd9a;K7~112}sWEGc;KXxxL>o$Mii(-?^R#=}E;kJyWmzARr(c1k^ z)7pGl;-xDIrFA4p>+zuqyqXFXXz&hmpywrqs_ws&Pz9W~g39SgLe=4Ur(tUQ6T?*g zha^nee`VXA_`@zQ>ca9UrE+orLM&I}X$CMXu>a) zdt51klpEt2Q@>rrd=vTZ9HpdLr9`ZlA$~~FI+349ISds4cZa8XTO799;#Vol;jO-z zk@zNBuD&7LkTQzcGC{sIJi0QqhLG*169OFLZ&_kCM$|)ChSrH?F@nNZN~=*D@k?5a z(-GIO(j$P$mgmE-Q7!A4@J}2>bko`m4a#;aXdid7T?>(()ONwueQxabg>CPneWZY- zf}YAuz=~)qMS94FTUAZHm#n1>gPTOnGQdnvl&OGL{(_O=YpPqC3wRJ$%(6I|>OX`h zjEEZf`U_h!KHjQ7m+VQb z=89)4ebt{W(Ql2rnk&k%4;GfXTlwS1#$C-7V+d5K)m)?ZAVp3x>ARFHLLWaTvIu3l z%p%NE^<@^JPd&>lLb*0edptJ85VynMMvEg2flt!Y5|w%PHF{EcvCbNLLSC$h@yG9^ zCl%MQ8t4g>3l3;3A*Gakz%{`i?CB)mQFM^ssr&*1G35G=ZQaO>uiq_l5nQ>(@BGgh z&-&Z(&eup5UQk8IiE}c7wJfz_JQxQu`&Wv5gf%bP@*vk9cJ732)ylR)uT9hz&nk)YG)^&>p-qt!jhOS`Zmd1ht~`b++DH5c zyn%WmhA39vE3xyH_!#GIbj?S7oEe2k6u%2)8Y6{PKHkX|enoO>L$@&rf4K^>k%GH_ppQOe5CO_cigbzy zmm3-L0?JcD2lXzFxp7870e08$d;O$%|F<3>9pst}^Yv?u zzW^I+m9OQm17BbTtmN5-IbQdM?Ip+s<+TE=$kgVWIX7=Rl4EY`_CY6+E^y@%w8%9; zgr9f?Jk-bgAb|<-hBWFp=fzx0KDB;|GDy?Ti*Y4$kJ-DX6*$t!HsyHg^p$gsSXYM5 z0d_bWPP7&nB0q6dj;AQGpt*|Db38>$fp>EZqte_cb5IF>hMQyuna*yh%Uw!-O0mXt zhrU9bJ43S?mydS_%+jUFz23eG)}!98tRR2kB(h_~8l&(zgHLk|CAyxuXv`WTQ}9#3 z`RG+8pnrD|ZwwmFMMm`pSzEuKRx<@%*hYTqu3AVl(SaSDM?l8k$94&A^rne z7h#G-e}G?65$i$TeQ^%@6Z44mCE&Z4_gr8Fg~uiLX@UcJ1x1WYk8!lQEG1iy+eYlZ zi{{oOCQ^7Sp_?Vo$@O+?isCuKu*ky_y@WoO+7_2RD!Iz4Of6$x4PM5QdM;iKq?}iT zla$041dZa>c!FC+e_h2gqc8ABrX-Imy-a&y;sxVQUl5*^q|A$yD0SVLsrKo>GyqEB(VM!$K0bT4I#(C%ws5;^bOF6+9oh=H9Ca-DXF z<_@tB={6xFSV1aFv>A~5cMPm#p&zCJ{1&38F=FlqmY+4+g;qsBZj-T1ajMZ-R6^1P z&lY}>jHGN!37aB3t!0>a7S1*>59;Z1*|2W|glFs@9 zYZpq=OLHkcp44g-8K=>b)B;imcD&S=agkNyHh&QG_pT@}>1(JNnhBnHlG+b_oG{0D z)G&9lEK?g&R#LMrg|umz5?TRYT;@OVcLY;T0w&6abd|T%GB@b&#~En?-)1N4h$8IR zjmp@Z^Fm@ji-bCmsU(hgKPjPsQIe>nE&i@_X%o4a0>6%}S|XW{JTqP{rl@UwpSd<^ zwIQcdl*IR_c5Wc+9g)jshtE^9yQuF@$N|Ys1?JxWJ2eP1D#J4XyEqAR5?}ENG+Mwj zs=mwviKm_RrgTpFE+UVVJZ;oWTsVoDSWoZ=c4ms1_*~qkznIExR+glVSQVzxOUi6c zr zXj@P$v#N79=2MoEwtXxm?aw5oB)SXdN`x!Pr*sfOMPy8za@M76FSpr*I50)S$xf8* z{EXWve_BKXqGC=(G+^%GvuAJAc72uqZu;8X*Xj9v8|Qvh({9uX?jzih-c&n`^!GB3 zQ)icCDfR#geXB~Lf%>p7q-%*-Tgj)j705nLH{8c-D}^GP;c=POu-SqKgY1SSu`Ka- zdTcsBTeV2eRj_ z7We$P?0IvHdwyK@yxHQOm&l%{$GGPu7LR1QwU{A_En$da%lO$^!OsZ@$qw*UoL+lI ztaTD^kq_?|HZ}QmG8!XtJ`Z93^}rXhN0^4*pU1S_a>tF!Y_$wMn`kM8^Zh{93}Bv% z`RwCdQ#(X8U5T1CE%oyh)~vN?bDn*SYlaR`%@=_iiQnd8*Ux2}+D8GW%YKDx#(zdN zBZwMt&AR{ai-Hjvy3xb(|L+&UYTg~&sHo~!5RG^#-3{^e6~={+?da8NWAHL=?&BL#BKAT zIk2Al5;9(N(DhaSYh&r^*_uw*x^Kr8D7spu-+n^SRZzVA@#35p6utsPSL8J4472q( z^}FN=U`+5pk*{7mDC-8UB+Amty&T^js=MlY3cGunVm^h5=xU;E!BSOM{~p!-&jiPm zf46?#l1B0_>eDGaZI#CQ1=b4 z8F++hCi&I7qjb}l3t#4D!B)_(Aug_9&QeJv}mi-#n)OJ$M6n?!wma911 zLLNaZ7bivwSq?owHIw|>exJ|Xrtn`3INkQkTr<9%Y9{%${NCcJYV4sxz&X`E%r*6I zQq3g4hBx^ZJg@MXk2V(=3ZGl3rr=jW(Gy>fxm#sTT?d?QL*a8X)fD_HYS!FUKTGu< zU5K&IG88`VrJA|1*aAc1O|PRj%&*8kSOjj(r}}w zf>k$?_a){k_jbgY7-s7@!7R=%&6YL*?Gw0=Vx9Rlm0~qmSO}`LOO=v^zzPaB;x9}u4C&!sIYYHIJc0l&zZ7biDjy&#z_e>-K%W6sPG z))w-RIQNledWq*RO76Q@`kWMx$61w$U3db*=#645Se=k#p&Pa1#eZ>}Y%dH!CFu&BxF~z?P`SVm~unj;b zs?ccxl#^L*p2?Gz)VeYM0TTvOL=JeAW3 z1+}({Q#;FRO8Qzl{Kt&r{u9P2a1CM}O>{zvCS-ZK%x{6r_>a*20KP2dUCSc=ni~1h zisYH@^KphBPE!is7iq?6GR;TDu8G?>)go*OUij;Nz$LgruM_y4(&*(=RY(_PN1C1N zYX3;~t^VQcoBe~?CY?BG^!a?3NP5Tbmh^%g;*N}~Wq#ND)LI$K7Vq^eoQgdJ+}9UV zWsLkRk-c-9;L1iG9Yt@H_nweJA%UYc>i_iFl}mAC@_S@d`ki@l{$Dxc3_K-H)>;fb zZFH@&=!~^RIAw(?CdVwG{r{zADqr)cmWfgQPsij%E*3Ny&TAlT!d3<3Ge!UZ--(xy z{x!ti~o@_=ZfxJJ*49dT_9-DHTgj@8}+!eQ(u+(6~yf&l53nu@~Ddqp8vN zw_&#pVkqaR<4mGXAo$kpSgKC1v?^vH8Y!R=5XiS0PRkwpHv0bY-iCtXy^ZIN_m=j! zjBQsNABMN_Ht@=L?dq?N`*z%RX>ZV2$l^KaZ`D!Nrq@Bh+!4R+NM_BqeDn z*-lorY9qB2Go0fWGu)PnjXM^}(QY)woTt-w`qCkRyGhji;ACrB@0n~(ec5Dd#xIy` z%|I^KJeQWUj=i-8(_U-id=%uBz4iI)@o&LS7i$3QYt-(NerY3CokN6a2Xqql?&R9r zI;y?LWP6V!+C$F&+i0(TRD0i+?d?poSM;{p+cc`Z2V{HSO0>6VlI;nRQPnFb^R{9?WddM5?hi zc&@UICA1Np@XjT*cgN&OYkDT)S7POd^9IdgOSRXDH;jIU zpzy1VGwlM7WeBe59nBT-PYPZESCpC3)0bQkzdn&$C~#(dD($2g&ij~8xrLG|lIQ<2 z&Kemq9((*k8-7K~>0F{t;0aodfX5!r|;&_6^St?;FgiZ0X-ty(P!}Ak`32 z8|K3ZMGw@OTojFx`2K?Akm)H=sQ#3b8^jo#ey0QaqRqiVK;FUzGtYQVg{+V)tQByVmFx(aoudtq90M zCArpy7)m4l?)xJCj#ogh-?f~_RoIKpbgGgy5MRv3K{vJejMdm1Lh|v8?y1LiSeNf~x{kw?qhQuuXTeXi* zTP8+JxRAW8$z9QQSM`3$FIRC3?H_5AbCZreg9&)=SM;HHcJ(yR=7sPjy(ZriRf%&L zY%}}#eP;Hto=Em9?UC%BJ(29r4Zz!8@8)20S8n;PsRw1>p+!f3{@48z(7*4W>4cM}5M_5qY|?uyPb=O&ot!m_PNrAN zlTXm;TGD&gR~4P29b@F_&!g$oc2dfd20HQgcP8l+y7rx;lk@z!=@kFnThR&UhEHDa z9hwB4zL`oVXMU1S+Pg;6$yxCB=@hzH(W(1YDNjd}bkZvno#@7$biJqjY&4yM|B&+3 zt>~oVE@ zc#o1N?d{Xa$x?JOpO^CV$0VJsaz&@;6Qk)AZ5&Ofwr8b0{Z`S*!kz1iPS&hP?g2g2;rORAqehS^e(8+ZIasEpgav#~J#HhsVteuiRX`gB({uzdnTd|NuN#4M@ zTd{^lx8kf#ZN<5BGOYv#Mz<18YbE;m$+Y71jc&!dCKZ?H_*JQ`IG>zM zD|#1u=*kNV{*Wa$x{i5zd@n4taU3s9NP6fi>0Vf1Q<@hhxFEh}TrW&eJNlo}3llZr z|D=0iqK@;&b9!O7j`hNv@1=TSbE@l((h1aP1!pp|eckq5si{6IV-j>eQ?Jb{>EyAC z(K)x%xastkg!h>(OKwSwThxr-F?QU6OU1Yc{J58qZw!H-C|72+XHv%DC zcf*Krhn}T~L!q^?Ccmca&UVv(l)SSGKEI~pf*YS1nOF7n@I%#G=DBxrTtdy@`VR60 z_L#>)OOTUAF^ZKqvCWSi(R5qz$^kk4Z_4q1gfT867QHDE3m$)^7(e_`Iev;*aLFe} zjlXJ~@n0my&k+lePXJF+uG8a|EKu5QO3iSIjrc`)^!T5mb5yRh+;=wB;Ledddt@9V z;jc%vL}* z2R#1IG6zIu{AYYQ2;r6<=z($MAY_ah|MGFhe{5V15D}l~-D%^0b36`kHcgHLepWG- z0|Ni{Rvb|H5yn7h#HmO z^u25P_uacj+-KX;Re<={u4x@ILZ+{$FNF3(6thg_7v&j%50QA&ZT9d@SrmEgW$Oty zAqjahx_CrnkENWADX?h?J4~F7sf$&Qd-xl+!&cEwuJm&*#aDsbD8^jI9vj3Xyo?L#TRzG#7C$4xomkW<8{FXr4~WJRKM4ls)N zAAX6m`tdi5GVke`@+Rro!o6tX49gYOJp0+m&MWCCnDV@D*OU%lLFV(`U6~!;hM^NP zo1NTXRYj}Yo9NBdxi_4l=f#|yLATh@Z=+w_!hIn|5JBuOqxFJX@g8-ixB5=vRx#A+ z!_y4Ow)Yhqp1_~|J zJ%4T;#S_Dbf5bD`FV^t}k>;BGJAc^fon5tKw|42io_Uc|oTrI%%Mc^YvVLMG>g32e z3r5#jlB}cJ8B=F|vW{wJOke+rNUenDJlWTUqx(8Z(ebx{`PQ*@#=!H5WSt57+B%6k zSH>8_!5NI<_S^=~?=yA=NG`P7;D<5(bGfuYjr-n^kX8qSRJ zftEt@vEL3ELv+78{qo=!>*49JM#QehUc0u;#BP@n`w;H*{o9A;<*KtNmhmpi{2H;F z@%OafE`BRp`kZqs@_?~oZ1mN`d#bAbsLot1wB5$f*t|va7=^Gwx+Lrw~+FK&u7RI@2;R+c?!0vm>5h z)#qB>-TUoG7X8XRdBBcL4_1A#)%*MbtQ)+R;W_9li0;-NZNk&b;zsXRR|n^BxO;P+ z>B**&jNm~Zv{MG2eY^0y!ba}qDXM9o$*V2YjKiyg%Qjp|^=D9h`Z~3K>h}d3c56d1 zeBayrifG{&wO}95t6hQpDXW85ZCFU{%;a{KrL~jVF13@|?k+s9Mc%1#>^4`)aLMuP z1^yA_s=i+GhX2i-Ch60{h0^lApS=gnF8u!Q{9gMeb0H!H{9c}`8TtnA?x$>VaA-}@ zjdeFZGxYSyeWy!0{XNDj%zfR*i|0R;JN*Nz>zLLSv^$ps2aD%3MI6W&Q@`ZQPUy0R zI`1o7J3ciz!=1Wq6(ok{B)Yq$L}t{5{+pq|tSIxQaE5haR^++GmHV*AqluGdp3C#} zPvM=zSkLOknfE4@;qBM?E#0ZN3UAL}>v4g1#G2T2yjx_^t$uVCEop7a$t=yKekjwN zV4{=pL{6AE6PuxTK9z)xA)z^#-pTS$Cn06&h~Rt#qJqkj4m8q=Vr9gK8=LJu8xbW{ zVttqPSLa83H{<>)oKj3Xo|Rn?Scb9oVy?$6*mN>4Sw1|s;@)5(tNi4M)2Tagvk-Dj zq`XD3zXjRm;*RRk&^V7w1Wn-KiJ=JD{vedkzc;@H(P5j0NyM9>88ofsPHyosREznlt9;Qq1DI2TL|jkb9r zXhP?J2Df32f`$cw|(kL#b1>4b(`%&l83!OCTG<@q# zvUh!QPju)_(E{1-=FT|Ho zC~?NVzyO_^pz`>|XmJ{zf0$=q=Q)Z)cVZtX>zpXYLbuS+$dyha{Z3kmv{4Y6?X6Fn zr&GxgOB(jqA=73M9#UlG$UdCpZX+LB_WMiQLBA2NI+5pD9#2!GvS#~MhQ%66!onw9 zQoE~x3ABu};cek>?dz|4bGHUNyGFEjt?*OeDKwG36F7ma3S4zYs=iA31Id!;4ruO} zh#3(i0$VuQk>&^7vv$bDoW|`nD<0Tg@+2 zN^=6Oou~R3Y%><#%ROrb;lyhiv@fa8IE}2QX$L9miQ`n4;B7yh?<}*PC?|kRE>2`U ziDzp`TGo@W3-wn;))UTGHwIE7j6C8mG5;oWf)F7TUxlt(Xfby3Z(QB&tD1M?ye}e( z2)v8aq1V19jEno8mG)`0h~4{k9|@CKHQ)uX1A1a$`h5G)ziTh`RXnb?5<+} z9AAntI#;MM!oHTCyUJ}zAES8-_Z3LZ-WfASEoY)JYQFR_Iyqy<7zxY2$v${={b&E4W;7`LU@{mRCzLBXO{KU>0 zvf0`{)!=#3o#SJf4Ap}q>LfCG3e$SEe@IZv!mb{&r6g~i;c>AYlwLEClUh^i(zH9Y zaF#K1fXvF^r?~V?#%t4=lG-L@T5!&IHREYDqpwd~)5%C})9FvGNwWsoib<>S?f)Vw zfv90?s&hhc;sGKpJpdl!scuvH# z#8?AzKa|YDym}OGVsFsOKDrrY_7T#=6u%R52(sUNH&@**cHIgs6)2za0L( zn_JUvr??zh+2F{?>9vVlIdHyQ1?=xSbBkGZC+EjO1~PXbUyR=U$kQ6|4_4j8yKbds zn9Apn;kHiGUDMo;`;X*KMtycFe?;lDwJx&U-8Cs^aX65#iwIiG@bWAU>XD*O1DPB# zlyc{nFOIAHA>}Ckx|^$Y{&Qo3ikahH$zo>;yVb@*MqR<$rYl-Rl0!PpPuqB@A29(gx4A z45omC3?Gsax+&rH-JYesiaWM>mNJb=ZdgO%7EI;^S332{j<|o+EqCGzSwDok_z0t8 zxhgc?ElHveIv0KXZ?p+Z;__^xar#Lsp^^F~aVPS4^%xVpc31l~$c>o6qPL`D1iaNp zy9xch?5nO{Yk;%ZUv-Id@$e+dR#mTb$a~#r+I9IRtq>ZpzR02>TCcB03>;;KxVe|w zBMVW}Bt@`uB14@dIfLZGjk9HtQ#j?IhMOiOt@s=@#)+^`(__k_mNt!SI2lvsH!fu% z33xubQ5HGbW34hB}Hf<&xi--a)eg$U7qCo^BX+6MWGU?Zq;ELpXkHxKc=5s4`XvLB`B7Ui+@oB25`#F?sk4Je`hO_aUu`Mg=pOoasrXk9ir?bj!T|11xI+)pzc}%YPcz`#v(AmZ?iq}| zGPB9NbVaMz7+ir}$nr_tra-4qiZa{)h|_%46KcZiz)7K^Ors|{Hxv2nf@_Q}#6al%XU{OkIM>^?U9s5c0r6r@zfKobu_PnwTCMx4{R{P-Td*g7n~a!QB^<5Gk91=8*><#kfa9_>ACgC7^zpsh$QO4NEARA!M7IXq z^9h|V_wO71#0U8i12fd2NG0}{+li)o}JJL??G7b*9># z!L-@q!tM}384Wi8aO|2q)sm5YPKCsB^ctQ$i)FSu@)99Cv_j>(SE$fC<%}h}6E$C!})BT*1yZ$>B66-J2Z@$b) z*F~mLXBd!C`~czsJ_e+!=g{BP>GZ5!MI5r1vRoKW4SSeUV+r{tP7FEgcPQ$;415c! zBgQZvvb@o3Xd60v>sF(G4&>bEUln70So<2|);pjm=)6R-#r`kX2_E4(<*%mT|L`h_sUbfISOe<3TgJYq{;LxuzRq1@~-tJae&$-Wla;@0va ztWQ&IV`Nd##+p`^RY!3WK^yBZ#xraqCav1m#Qo1A;==>atlYoDMP8cxPbobVy* zeI@5>&3!Gjn#FSWF%d;n*2LtBYkTqI;z zi^qPXe%M@*mBWeHndl?b#s0Zl%71h|_hC2~J#))cAtT|9iCh4RCsx8I;XX=pak@LK zKUXjdn9dicm@?0F|B9*7)1KrRy@{j+`z9-ty@(T${!wsQuFhwotUS7Up!v0y*Nd~b zcijyxIAYVey7GnT3eJw} zGWiJXy3t!NVBQ8FnTkFtJcv| z88FBGoo!|X>yNw$TykIV?mka7!npHCNN#^sCH3u&{Kl-TDLHPONbH+BRcrmmEa6&x z+^!to%S69Q^H5qJR{_Rv5e!`nQQ}*gPtl_rmQ{0){fhsL-HElTQ;4o(eRLM?c`JF{ zzH`kRSKqn%%~xtxp1uCdhYsKVdLseNZ&x^c~`Yi?Zq@?+tZ zhaWlp(8&jePSiXw@aLKbj_#{@;0U-8wlB`U(n0A(34QV(QlC7ov}`o0w5<7<Q^xZ1Rj8m4_@s%dwJBX$RL>FJ_~anc(x zhLWu!HVv&-7TGB@huO$|S-Z%R#=0KaokG?_+sUG;Lj=Dl?CZJz_VbP(yQ%!xH8+*L z(tP8Zo*6f;?tGG+9BsHS5 zdmGcUsG-5*xF!Gno2IP;7NPaU8ZKtgo<-KWh|!Z}wU|@_U2wE2M0Y1%6FFw4wI}(b z=m8NSVt)PzwFjICXrp&gCh&8nZz?}))mhf{WJf{MJs$(S9m%?(h~0gpsd%b!(s*6< zY@9}xQPC1QJ9LV?aT9-CvF9SQOlX85z*RIKH}ww8@@&pJdKGSWd@gd>-Fl|ufD!pk zWJ|^2%+`^C{m0E&5&s*;o8O{u2C6>SdNG|TbqwWrJ_Q1SeHmi`KE%+^ z%K=G!$9DU<2u=d*H_p_J%X_`WDohp(z~$OfWO*uBk%?U$1{i&xowuGlq^OQtrz zdfcq~Qfp?U74w0RlwiHWxs5rt2%e#$O8hgnL$gGkxvnO=M_^?HcGd!#8I8_ce@Zb76mHnpUyrE}+65ucdq?``gBd87GF)MGm`+=RIhXAsV|kFyIg}P1SRiZ|k-WC???vKn3Q$%ym=ajC~3Zd&nS@(yztmh_G z7AR0`Xsm)bo-M7mAJ}+X4LRR%Ta(@I_ZT-UQzn!%X zt$K2dUwPH+$BT1_g|-cBO7+%Y74{cN@4!~F3NBx44Yfo4^so9&ca*wZD9brS zZ{@$svDQ+t9V^b5k@7{}$$CU^{r$og=~}*`6+S!J)MVRYExQ+98}11rZlSnGYGlEZ zD;KW9yXWM=*JoddboROKViNZ%vCcydA^Y3xWg58og;wuf!PMK2thvOykgFK^sveoi zrkxu9_M`YbjvBEaNv8njpNhKks$FMz4bz4-*K!oGYByzE!+yj(95#FC_Cb6F@%|tNf7oT5Al;JfYVK+t>QPeuX<g6nGgF=M*NO;N1iUP6v`Rp@4zTNWvZmGheQ5(`iFxoB_z?Gsy$Vb7l5j|0Q(- zAYx3om7DaG4{K$l7vWh#Gm@3(MhwTmYC7>xh2RPDiH*LTZn_bQBU7MQ;(n+bs#n)j z4O(^BQt9v86886Rxy3)YWu1R`%kBP=Ej2g|`bP48zyIz_wAsG*_>kMB6ZV`Q8Px%Q zVrIiRsLNO2O88*aJ+ywm3_iXqSl_V_aV0mh6F1N~0Ej8F-V3#{gi;(JKTO_|2Xz-q zjysBc+Ug9?X7jW>2}XLdf$P~eNyOU3Nj}mhOF2_-nT0+P!{*vFW=Qs=>k7LDu|7Y} z5ZEPg#JPDD`s@JXEWVHRw?r(Pb2fU1Mke! zFYKq2a46E9+BUqYvTB7R%gl zK}9jvwgaWPu*l@ONJiJF*kf-l#U6=Xut=drK(C_*2*-yPw4QnKz>;e3F|lR=E-vX@ z*#o#{HqNNOdHo#O&OFi#%x&udnH%$MSyjf0O&NCIrj;2P`+74j-{gL}Yt!W!?q{5g zD>k{xMmAlM;VK{ARI*7sZ!lwdhPI%8!~1s4te&yp^n)Gk-G`1mbM)zfeK;lb8rboE z*zq$W#=tt$IC_m~9Pyh*_YBkMxCOVO)#o50B<7p|tou&0JW_w82(z{qwvbrEn+b~! zbNKPl95E_dUm@(~way_)*+J*`V`W{;iEF3s#Jt{6wq%4lz>b#mk`j@o4 z;Ll_hvBMH&S!}mZZ@~5Nbe#TD7Ip=5w^r2mutZ8v*xuajiI3yr5^zELg|+ z5+l}W!&yXl>RUwC7bLiHl=Z+fVM@GJP)Pq$!ow2xeS!N-j(Z0#g><<|Uob88+YKkz zS{QSa4LPc=ei_xx74s;69jz2^#5xP{k~$4K9ZS(V@STWriVK?NR=qf;wS zY!6Wzq&{b3d+9XPF=N?Mviw*8gp6zay zBBBSZ0@!jmrC8mqBi2#`hX|Mg9v(OCdZB)j87VDwE1l-LmH4^oGqgnePSK1E1yWnt?0;ocrt|osL|DE{sU7?1J|0 zl(k&}W$nRKC=36XY!7R@+}_6s$}+P_tnE^EJgpbfGykSYMrxUY&6I8RydYM1MO)T& zYK0f8g=iJ0v0tTD13yu141%AA!A~Q0e}QMOcbDg&x4`?ncbB)rTaXRD%I?SP%_P7JG<1Vh@qlnoqh1I~~*> zB9GWZq_sjK#2%t)tuw?PB9GA}xYZ!(6?==2K`r(Wxm)L950RjD;jb8vdvK$2T;kCw z1r}>65#?-nqwVbdo(6CK%%48EPwc*W_ncNOuja(echB3WUAkw=?B#d4u_wmTjk&H?YYnLncK^GyyGRjWl^TFrM1g-N4Y#upTCT$MB)#t-__b1Z|de z`5f(vjpBYHqo2GzyDJZ8{4)kt@QDOrBscD2rb9OtB%{I;jQf$kCIxd&&0&}trR z0?fyly*w3iPS!(g0gAEVrZ=*ZvB&7Wh<<{yW#&}Revg)I@9;ao2Yle>E*pD7n-Bd? z^UK?1qd0HDP0)7Pea(MhX!TW1YKDhR&ntap3a%*N3NT#G%M2IW8Pt2H3EYalE6o!0 ztyAAbi*ft5Zcvy?_8nTLFr~kw`UXxg`y%f66@{sQ!>cIGSnm&;{<@Za|Np|-l028{ zHljt|h^r9X@1Ku*M=Qt^IobRVZrNJYByGbGBuTXr-NiIshB?=G1u|UJm~)fc=#COjj^jA@nSX_rus>t>+RFZ)!zIo$_H*{Lc02Cs8tK!T9ex{_Lc34} zzYRA3jo<0B68!cIB5k*2L4!bFv>VS-zoogC*ZQ^dJ*_XU_T1p1$mh@+`q%RpqwDga zHFM9$uldzpmW9XzLVN=f(P?5#CXY$z1vhCp+kxNt(oOSJi*hv3UUpaWZzO$& z6QlW_$^cS&D*PQa8twZu8uGWX#~5)r1)$2J@XBE^L!Y+EGQlB|!n*Y1ZAWFh#JeRezG=4` ze>Yw#o@WexVIKBJ35ju#%OLqap=Yg5#rL6aDlRz}$L5)}T9RLhGiZipK8Lp_;^efW zDWe;+F?{ecGrPhQB&!AGaw0& z6zF(Bj(gV;19I1w=9zOOUMZ(^aUlE(K*k`6`^&;OU9oNv&gYw zC2eruy#ak@7SMlF$aBy0bhvHotj)k*#*&Bw2#ZUcI_sVj!?z_ZaT zJ_#*OAwi$sls>TwIKzWpp>N8}RA>R8d#^=fsz3%cERQR2&OA<8Pf+#xl${@74pdLpD{KG^+_Q3N^qMndZ zbz|D43?r>da6i%i;9ijF_&4MCw2EPOWtc9a$}~^}|8dV`vDke!I3AV@`pZurCvJ6H zOi(6ncViog`X()IV=oBz7ob(DVY{EK0Dcp?kXBW&9umw&1Q5Aq>U}O~5=(i;`pP1T zq{{L@9>am$ImA-c+vs^Vpi8!HUBo(T5AK+5c9Kv5Cdxb(nn=5ltr7_jVg&Sm=m)@q zd=O>%<>gxQMG57IsJa~KZHjC$6WI(fdjAPvS5v)fi^4YBOl&;gH zjpEG4nZeMB*`2oV6Dk2S+2jm0$uP~Ugilz~eKd=RI3x5BLlZqh(OixTa})|15k3ZK zfb>YEgNQR}^2F-Rgi&B>alA zVy9sx#Vy&2T)SL;f2oLg@%Q7LoSoGHLf4Vnz}zISZ9N z>Z@>Bye84)6pi@rvG0-V7SH|f?!E**iYnXtR#jJT>5vYcg|HSN5CUZBPCAQ%k)gvX zAPR0M>2x|FkOh(so5M`D4nzsUG@Cjy5tRwiL5E1X#H7a3I zAm9I1-AYb=$F*@Ji3nl zjwoebF=~zZjI|?@)SU?*LA`8u-@1-SZQWTVB=)JhpyWuL08b42A^fH1wRA2PY4omd zOW}mjF=g0^otF+@h^|;y9I|9vUR2dqc|>$ih)c7&`K|6rIc-9Mj?*2AYKFeh#_yJy9~SkzrybS=BQV&!@u_-`3yiDy|=xGzrDzh^xnb@HBO zUD}@3vQtLwo(}hNOG#xzPa_S^BZ{0!ZR5OYw+VEtSM;#G6@@pdqb~KxtF-QE z4wU7EXdCc`8l=gkn7X>IVx&85WxGqCsfe=2~rCtCF(wc-^V71hc^oh0C3c-V~>#`LoZ%Pp@l^)OPbj3hhUf+E6K( zTUosrN%yLwQHER7<&zv(r=(x6qdU~rGjx?ar9*efO;28_lr;7xjAk`H0Uo)|w$2fC z;ZJQCt68brzO94ab(a(ko4$-XF;+`QLxsC7C8`tt%SHZjt+B2x&{kc`=rK`e2g$NN z{dn#2bwza@_{)X`>lSaw-sHfz(z>VFdZ{N3@r-X8?$5nxz=~gni*ikLM17-3Zi47SysjtqX2SvB=*Wk;R1q-hsso}JS%@63It9&F8McBs|HJr%pFqN>JE+ciy` z?g{AlL07ve?}&R?W!aXz)1~W9R<-?w)=BD%>fS9!Jw%9X%G;VieYu2acLSlk4$WM_Ew)57T;Xhc+z!DhB-DC(%IXgck9^MoAiGSx+pYMaR%cwH@_vYlb&Yr>XQ(rgFYK;6|T*p zAyn6VQ`SgAwQLz8ex*%U^rxxFw9p=!!qs`2%0TRX;u%9aO^K#cSFwL@PrrHOEVZo2 zxhJhWv8O7!O3A%3v&Uvr+ZAaEf%clFFP@Es8~&PH2sy$6Qgdg>JG%eK56b zOGKM*-n5y+wVQ}2YFmf7cdqp9FR6z!?9|BCs0xFV=J-!d?n!Yc&?>OAFW5r3!2QUF zO%yg(m44}4Gn`k%H20*kE!>x0i!;CD zWAvdh2GH2c&It%3Ru2beC?qf~0WwE$cow9@1)on`U*6$D5AW094NjZEMwfl{%3Pk# zMK=_0!rZ}p!HO@IZOGY#bsDTRpRt~bZdLN#c3JO+H=y_yCdK>E+QS7p^8exmx>BIE z|G$)X@=QpmC`<#lkcSU_7 zxK+Y%!&Cg*cSU`)A$RQ(-4U$x8s>3*#RoSVoQ?`7S85wtqqS@8n3dqv%ZALg3vU<) zBmdfT%56kGA4ab-_4MkHgtvDrF;c`69+Nb?(l^X^YzzsaIXy8_@N&9jA7-9&Vm_Y0iatXYcEH z@Jz<3tky-%uUDm1H9Q& zn)1mSB5FM6H3rWb&4v2J4sto{_03e zu@R*tT%0cMzt7F*?Z};&dvY=V(2i9TSDjp`&e@rnmf4;@0<%AZOS|N^d57IID{l~M zP5I(U0?u&?!i)-G%17e#;f74%>a_M5Z@b*Pey<&Ze!p!}mrmPT8?}zJ#bJ*vl!&FK ze}obbyo}2srEgO$HY}ZS55Fbv<3H5U)UKA^tVd2R(^#8iUCS^M3dt&-xJoBE_}^-c zOWdky?th|=<$Y{&pY5uyt$Vm9CC?|`l&Y>uNt}LkufZiOnk4kd6{pjYkjgGkuHYfP z`f;=$9Z%(d2>DJ~eoNNe|K_F-k8+{KR0u0y%Wzw6c60Z><{dw#H4j)Ll15E1u~zM= zh^lbt&J!cFH{#nhb#BqN@ypV86wB{)Ppjl}c6djHHJr^SB%j|Kc46e%X&p1q%sDj= z<5EbD)=tM@kNaGgnC96VN*p0gq_l0^4#y*6zmVM3p&oN6sn;ZiW?pv7IhBIwFLOg>Dh$VY6XURSeIM1~V2|vHNW}4eUI@N+& zB$wwojvwIZsXEJn1djS;cT`85c3e&nEaIOCT`|Rp-b)T!6Fk{-~6Svy5Tw}odq8BWQ&15w!m3Iz3VP>f9zyw1F?3Hom5(eeGB@anZ>fe&r6=M3>ydulZ4R)Rs`|Uq@*T zdh$ef{eR?fqSSv{Kb86)Tr&^e#$4{2G)uTNlp*ZWaW+?`XAYk_()wZZyi508c<^jSN7k7|r}A6r z{NA`^)6%*MkGO<4yU|Oahu@JmG4Et9|H~Z@O?>F&D)pkBIcYiVnQGTg`F&2|G+KhV zvg@L)YLesYX9-SN+2{H4DUhSDXLjJYMzi#rV z<#xH0){`67k2Ta+-Cel>K956eAR87r1~>5ZTn4n1z4pEE+Mj~gZmaRk-AkTq^UQS; zcy~XO{OwZ1ZDzOZO|C)tbCd%)ZNoQa!69?|`1)Q6*ej5| zc+?~gapA?&xZv}N>&r{MelIW9-eoV|>t9MwD84MsnWwUtoOrx?y=g^fQ1t<`+u=9{ zKUCabnr2yZRBrW-KAHfxx+UW16^~ZkK|`UB^~ihc6?`D_-aYOk!JaD_-)BO34Sk@;~Fp zpV-TanZo~WulzMv^E;ES%YR5&Ni(;4G)ANKl;ej^!cEya8TnkZ<`lj|k5#v-T92k9 zsD5o@Dm(zAN!#&5a;=B|uB(2{LSnJZModiy^+oHKe@DW~H~zJyu>MND#!1T8Xh_Ta z3zr@*i#ik5p~yTKH{opPl=_!Z=icl`>Kl&|&%tm~fBsuC@j~_24v&^tEBCbGR6?6# z$!9%Lrz5pkFO%)s))4j0SR?)WDdDnRoiTN10&VZ^a9lpXW5t#6I5$L{HfW>q4McEu zvJ$C}x(H637g0Eyz!_|F?l2{Vk@|zsrV(0XUm%aYWvz^;b*yTD@6$wtwHo5lkV`G| zE?n`zd#In>AjkZ4z4=o0n>Yzt=?HI7DH2EE)a;8q-hz?KCG`)m;987_T5@S9?02rq z(-00X{5@XAsA>T7sR1T2tuTkQQ1aG->5l?+K0M8r1_yXEo(G zT75g-O~VMS+uKq1CS7enU$z+KH*YVgvTZzYTPZ#9xzSctZE-h|J#_uNA4)`C=d>-4 zI{h~Bu6jPZHtHLcaA$ZM=8fWrUqxL+IbBxDscBo?iLu7rZFQ#=tJ?54P(p2W9c5?7 zVvjQFM6DKU^0I}SpH#lu^8|Xok581^2F!C4R&R%!ip~X@w6T4+PNAhxJIYfwN;EC+ z3<|ETPxu>3;cmGUZePFM9r{K20SysgzbZ{V=0hzTvaUE<>jyh73quZU<_=T4xy99C zEl;#x$*bA!Zh7qPOZ%Od6HZr$qm96qix+LH@A0VbHs#ekF*lSu-R7&wa+{(F2~adi zn(8S#sQL+-d|e;n=n}&HH4%H!BzvZ!Nn(H94$dZ4DZR7j{P`gBnkS!Zd0V_k91CFVB%i+b>!qJ=K+}h=6_jcxc?RyTVtz>H2C44!o zZ*q+i%KE`0cIXGQSn1CqmeQ|pRi3whFTY=<{GFLRWv?iDZK+Mjg5|WOq)|R+ZQX937Wlem&=Ec-V zyf13fh*~A318=x(RcRAh8`$@~vOl9dt9+Gu6U>VQqANew)k64Bw8(1o)gt{{UoA$y z)T70|^@cnS zec_vOY}KHKj8DPu z`ADw`kf^>x&O^Ri*WN zj|x?#rcGG8aL?uI#m3Z1vA(m7vuISDrQ&axr=qvlgp)Tnm#+yW&{vYUQtHA zt*8fhFEn457VU0uhkw`Al}+B-@7*66{xV(F9++RYhVHZ&?IFw7V$Z;OA*9fHHYDHL z5wgg7CM3&x%9vrsu7UEc=bF{Zo97$B`u;!6x6k4ZF@iPy8 zpm&F+#cLH=Qs^}H+@@8YPuA+)5k1dMc(aU@+e%5`AY{wEYgos~Gd&tBnvD>~^=Nxap>5_BZ9acn?;eyE z!n94*|2Scu70fPu*&_nD;$S`5dUL9A45O zQ=C`IN-!m7m%XUSS?J0s$d|J0Il0cv6sgdjpY4n;a@h-A(k;@R&fKh&l!;UCS}?;l zbMjqNVip$UIb#Zna_t#0(GGiIc0o*`GdriqRk$*ysL&CUms40+P*@aQT;y^@J2Q); z9r@#|an3BOGuDwAYt70?&Pa;M$Z;*m%5mmqj*E?s!+)7GHzy;yu&CxNDWR&R(;r;H z9L_BOUr$eGex`KG_-oX>UUYA^luUxz?s7TvmbfHWfmBqS;VQH{T+;F!*FvdanX@n} zw_v%fMbD3K{DnDLE-BZEpX+m66TdJgd!Zl0GJ9^ZQ_3uG7D@R9E-5R=CFSHpA(%-i z4J7Yx7YB@T6SYf^{`SnwYZdY5%VB&!OF0%T$;n3%CbAODD|R_o#JF-Ci=8eMrEIi? z=alkvFcT&qeSFNO`?`_-4tp+Yq?A5u39XS<9%PB*4iIM*j-Mc#IX z|9+i#ze-~HxJ$vaZ)JKgoX+ss2@2hdjf~!pVTs{LhGQ8{VmOuIDGYn%{9Je;le>iB z6%3a!d_ODM2PC~*VpA?E`B6fI%wb_~J?V*GQ0$TlvZOp`UP0kXDXXAR%C)bgL|M)X z#y4CJT`OlvuH6NmyqLx2xLBn}wCCh^S0l2I@yj1?hKzN9C_qp8b5JGkoH$iN|5HT! zWjw@nf$@3Uj=%n~(dOvbarWFL3+>Tyh@bSmlHWj?n{=nkg4g6fdVzdN%C%qt#mXd6XLzAvx} z+*5yMvl^HpO-B`!BImJsG+M6uNtcv*fdkF*bsr1!EG*X}+?O!A$mnzC#hH_+YIEjU z%yh(^GtU~2XFciW$|YCc?rVh8Qe z)9l5$t`}K4IA$nc-uA(Q*VI$r^fI03s#7F6s&rY&mx(d@w-2v8Z$7UVmheCY5Lg7C z^qjuwZTJ`I_3%x17Uny1VFI{FDN^i;q}W(U{z^B3ClGpTz4pKl4WvfrCq-tgbipB;3-|cWf-IL;FP01$E9JRh8E>}9!Y;+GRA+jXu&`IJS{BwRkGp^U z^Wz_uSWIty{8x7H>Ph*0?dO&2#Y}8Bx*ngu{VqU(zTonwA7Xa(@#lK?r@a*l^NVcM z@ASgVbgG2EywOk;9}OVB{u-NaWaqeI91ER}#Tb-}Gt1XpmXmS7 zv`l^SbItq!lMM7tcJxhj&Xz*EDB9CV#rfzm91HCkxlYMZkm>Z*`8qzc+*wggHt~vm z$1pvpk4)?QwG%QryZN7=UlKvlFP-Vwro4F8JZT81aE__6bq`12WF%kWDK|C3?u14=wI!}A%gWcWpf zKVew)pb|ft;d>YkWAbb(98P)q$O?D|d+zO*z4+U^6**IB8z?MZ;$rdZt`pzL>^V1o zaXv=l+tFTf@}0I7N{hO)c!{%cSx!+wp_f9(5$`>Vd{<5$#+L4wa*#%oZ&(~U^z=lL zL#~2C=WKhnQ+A(b6xcJn13tc0H_fY9{<2@dVdxQMQwXwJ>=_j-3%!%x-41syHzzya znMu>=POOJK5uL>1B?ah2red0&ZO`>d-siT5;os?QdhPOmQWuGA(0)nKDDD0(R<0v} z={V+3r~Q`Khon(``p@3SGa3n(znmD*!U4YgH|kG%pMTTLQp5`3`>X3mFbmV0Kb+x$ch_RDA|``{gMt@ zH%qRCIYkow7c91~lyb5p%-#zn@5Efn%*o6j<&rX;j$C`8Q?g?PkFNJzEsjL$6uT}^ zlDn!Lx(7Qv+s5K~eTch369KdG9Zu+0BrUP$(*?0i-$C@>UN~h1k`Qf{9f1NQ!j=|3 zW_sMu^eq9#tES|~+Ss4}A@Jfu)+BQ+>$e$pF+7LiT!!~C+{$nV!`do^Ut-uUuQM0J z@CAjL&O$mzbl7QmWH=?vFbc5tT!;d+(*?ewVu!<7gmPptigKYH>(UN%XR^JDR^~fm?5={m9OgBl ztpq6LJPUcH*F$htXusfE2v>+!B2+Z!v5;0O=!ycRsyUVx=Rjs5CZP5r=QUXZzrWm- zkW1U;4dkK*URT^T@>W3}E#H25ihaG~m=~XVM4@kDcn`z>u?^uD!tr#v78Ya{q3)#{ z6#LDFF7&!pO-LB9KmA_N=^WFUPd&;7#jdQR6e-^cZ&OkxT3GK^o=J1ZjFmF5-Ud?v zXJw&6(1rwNT+J*!T1NExmW922wiu}BgTrw0<*&ya=t1Wd-nHd9&LXTr_^&PJOX;@4 zLhsr#74&_sVozBpe!TOrVc#h9YyDd~H(!96GuBFqu!$0#XJ4^^(R@2~nUrTQTC6nW zHm1LK9yuIoQUBSWPW}5xfbaNnqx}niemXwUa`NTB(fH)gPuIWcoZ5#!4~EQHlDqQS zO$fyE=f}n@K~ebfXXY%+$wZN_lvX(l3-F9yz46g{@4bA|N0B;;vH0bbYfhmv4-2p8 zVia}k==WuZjIQna$ltJCDZes?YZ=a9_;H4B&~C5o4~nP*^&hviUV1C+X9Qi{UkyX$ zpnk@W(GMLg^inM6FJ~y^&^q_g?-YBy%J6Q64>MfD@PryA-hB+mGHhgc3d27}ukL;{ z7oO(NY&I_VYJ0{0YkPI~!&DuA{upMbpJh1D&B=#nupk%Prwibn7dS9B6=FjzDLT$~ zPn4EeEz3u)QhbCKBVEVxssGo^?`c$jK02>K7P>DV{u}zY{&KKYFQ=a_PZH9lJnUM~ zG2AXKDOiq1hgN2$iTLw<3mQ$|pMDWEx?b@=W7mZRxn9S~q|}c*q)o4AfNUQ>x&?H) zR`g@-Mf~`02k#_+KYbxcxAsD>1dZz9lim&cSAV$&!8_t={$A^cKi@mxq5X+J{X>up z*P+X6J%0K92yvE^%B4BI`P}DLswy7PU=OD4)j#euN|k0a#lH| z3FDrz0a`G2YYUF5|$kp{D9CCWAA0t5zM0D@+W~P%hXu5?LiG}$L%uQCJ zd1Mw8({;71LZ_38_m@B7I`X4IAJ9vDN~dd&{&Fm!i5qR=uXgi)1*S;Ta5PGW>sg96!`gX@}l<+D{$F{rSD)_)p50kN@N^@89*q{N;H4 zu>WM9{FCxTkA3-0$8W&g?HKvaYzqSGM(+z|N2pEJ_x4uY3fEu6yXaPEa9uNR9AWk5l4W?~4(K;z1Bn3i2MhoV1PlTU1`Gj6fT4h4fZ>3f03!e+0iytsfYE>`z!<<-z&JoO zAO;W%hy$1b7C<~80bm6r0+Im9fE2*ZfLj3L0TTeX0#c#tZP0Tf@GpQT0o#Dnkk`q8 zDS)YfX@Kc~8GzdXGZAMNU^d_mz#Q1&PT;%nY%XNX1Kf@9J%D=w_aS^gU_Rghz=NPI z0Hg!#fDC{GkO^?&c@`iWun>>~+9JSWKrSE;kPj#TEWz`ofI>hKzy(?{U>RUJUdF70VRM^KpCJMPyrq{pc1eK^40>X01pEm0jvX51J(l`1<-#R z0l$fTjCcT>aK9O_1+W#c4e%IbJq~yR@LRx>fbD?a0crqG0d^qX(|~6H&jNM=eh)g% z%#mGyI>2*)=K+5J>;}95coFgb2-pLt2fPH>3p&o&kw(DFfIk6V0sI;8D&RH1>wq@^ z`vCg^Zvx%|;7lHA0vrGw1iTG61UL-%E8rc#yMQBr_WL?|`Gw;TYgJ z;3L4tu+S$%9wYyS`+opF1^g3b@ELG3;-3KE>>s}8MMx{44bTqw9B>M78t?_+zX4|e zUjn`Yd=0=^LGlgYTfldKvw%*(Ily_q1;9nX_kbS&mjIUmI9o`%0Q8zPQ0d>i3spZ; z|K-4xRX*E!k975TOy^CszyG<@+2@xIUDu<2wm+SYDU|;ALyAB13B%0{w=;Z(;cpqf z!0^IpFF`E}OcdQs`8Z{_$NxlWE&P9`cRt`$v8!xTLi zFvZkxJgM*LqhIgy&ub@Cz8m{A*<5FSwrin0nYv2e4fog2olwg0O0$BEEbPV6eqk^D ze;YRZNIkvrK0K-9cM8K93|BC`jo}v=j;0L{SL{tn`Qg}%e0e7wKVp88B7wupuW%Dm zf z)Den(S&)>lFzxf`m1lS1Oj6O%@#Du|+al5<<+lVR`RxDbbiE|MHIO2ur;pVuM0zjF zd5g)VYwPs-hhI8hv9P=rgXjL`^gVm-wfj$%=g;pg_kOZAgm~w{DSuPS{jTE*HhiSu zbe6uv;+uho0{rQ8J&oEBnRSNtWdJ*!Z}3bG#)!K0YDd8lM=S6rY?Bivwji zhm{bYkdROh)p_5Srn4M=bto>NAJL_JF zKAJ8*=OR(4OqUR%&c9a^W*lC0!M&6sHK9oP5zHdPH>IjE#fvMGk zMy=KAg7pIfA`Bsc#y){TDx=W1uSplig^T_82%*1bAU}v35+(^_gt7d%fM_mOh~v%N z@A+MPo$5L5_xumyWz`j-OZSHrD<7%e5qtMNkF47;aL}iHf~L>-;Zk(Wt@9sPu=iv| z_4_z))5$No0{n?so3-C>u(%A z-tkSj`;ljMzWzqj!6WZ|@?TT7z4q>bBkxU}IqU9wA6!ti{?R`+G`_L_z`^6eVd3}B zKX?90S4m*r(tm!|Cum51!N5TaR{v`E3x9s~`>^oAL((SCoOREA^B?@xulF|n{pdeB zzUeG1del|CC1%0M=$PNX(D=r|_l|$|cN5y>gb$&tO z_**C1Hf+4ob!T?*+lSu&;G>T}ztTmd1;ffdQKuNO@q2*LD zs(6(~;52GYuzq$>U(H;Npc<&x30grT@PZ&1RH6`|=K6$+DMGMDEgCgK zWl(WKT)*6aoZ!;lA_NJyXp*#J#Imm7e%hGeae`zV8dS1QRkk%E zAav~}F-E*u!}sZ@E2$snGL#(aZxBnm#FEbpUj+&k)k31Kbbd(5%i5B^MkNV)b&@ts zYf!ra1`GG8?$wo)_Zz4W)6GzoJgk218AG@#?kQF2CnGfmQ7m~jxHQkWA~H&ir`4*G z*M$K>P$0nvkdQqd)s)wZ0el~okqhSgil*QYE|d@FBLWACgS0nsi-g7etNaK2-wj7~ z$N1y?CtNfBgvBZTE2%?ufxpP3qH=~&H&2*3>(TAof2Y>ytm7xl`|kY@R3ZJWiSzFM zb=~e4UQ1~1yQXUW_U`IOYv0USna=qQjROX1wEBRMaBFf(?XHhL)+KJ(SgXG4obPzcE`@&zw>U5CZhka5fg50 zI-rt(D8%h&(VR~)Jwq(Jf)y0O1 zL-B{%xzr@pbTLMy$7fDbrBNz_&MKsc{WU6sX7OfPnMsFRf zGM4PSCG$?h6rDcJHeibO&Oyngnl$|&Ve-^Op^sLtMyyh6L`fqTWDYEUBC9x{BSll$i}yRHtCBUrskErKUeHz?i_+~lUpgdC2v%uJ z*Hx(&i-CepWAvn#oYNO+^TX3h9uG0xt&1pGQ#x62PYeom&mL29bezy%#g{Hg!Kar= z$??%MRC;`tGI-LA@g;BGqUKcitM>7HX`ivGOv5~V$?l{gyPSAYIG4AjZO&Ej4t`>2z`b6y4^GDrWfFaRQbH(XE93u zj3G(BrsJ31`_t)pGdi~U)8~LT0dPG(B9on4x!&`c>^Y9X6cj=ZeG#KvC6SF{I(fiU zL;8l-3^qv3gTEdtjfsk_8B?$`eJo$wJa+I8&Ev?GnuP6L%?Xz|yOq;FWxXlTp7>m! z6G<`sh9<`jw5NSH_^D|fi|jLJ6+AWb$ybNYa(-}P7Wri8Y|?zaO=s zow!RP(Q`YvH|AnNOhd+T9LM7yHzgo8)W|tCyqf1Z)o^a`fcpbdbULn|io-|TIdP1z zJcyGL5nZK4m!;8TJW8R=DlH=D`TiWwC!>Q<@#rSG!Mwl)(6ERITnHbA?gOzQS<7hz zJwKSc8N3E?MnZV9Afj*4@By++styw5X?P%?4BfnG4C1D6Dh{GKEq4dUYYf^9j@JdK zr||u`Ba|MXgNMW$Bh$~ z^TW7hf{NF1YT>_-eQ2to@_4OU&vUWCx2j?h7P&~BftQd$PDsK-s3D|id48L~1#||xvhNvzJc6GZA3t{5R1I=aK3*5 ztMj}8`HJBzkjwM)Hskw($fYV$P;t*fKH(n=c#*RP zB?)nmWfN|~XWJ)m20mVg*2XOmr~%bn4JT+rWovR=7}rN5h;M0W7Q(3|Q93jh$Nx9< zQ3DU)=V~cs5w!xIIt3IXKIG5wohWP60d51*QgM<#QZ1K`niryBWTJr?xH)0GhDuwd zMgp)iY8Oq4gZ>z@2zRUM4tkG#szj}p*9=x|5=f%TtmXP}VImgRs$8#~#j|#%u*j_qp4u{;Vj|@K09`fXnE(I) diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index f293ced75934d33cb2585f729b62d019c954456f..0e61b8ea1c1e32ed9f23de7cf517d5dd89ebd4bd 100755 GIT binary patch literal 128712 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
pAUH%fehS5V9cLDa@0)nbyfdQ4| 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 U=Y=5&Z}P;@0ki5(aM>3A3l{tUGXMYp From 4388e6ddecac82ba9e0fd5fd5edc9da212a88f8e Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 18 Jul 2021 00:13:53 +0800 Subject: [PATCH 23/87] rustc 1.55.0-nightly (2f391da2e 2021-07-14) --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index a14eedc..2c78ef8 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-07-01 +nightly-2021-07-15 From 258516a3ca352eaf4004e6a47b0a8e7ab0097200 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 18 Jul 2021 19:21:16 +0800 Subject: [PATCH 24/87] Replace llvm_asm! with asm --- os/src/main.rs | 2 +- os/src/mm/memory_set.rs | 2 +- os/src/sbi.rs | 11 ++++++----- os/src/trap/mod.rs | 11 ++++++++--- user/src/lib.rs | 2 +- user/src/syscall.rs | 11 ++++++----- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/os/src/main.rs b/os/src/main.rs index 7879fc4..14eb954 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -1,7 +1,7 @@ #![no_std] #![no_main] #![feature(global_asm)] -#![feature(llvm_asm)] +#![feature(asm)] #![feature(panic_info_message)] #![feature(alloc_error_handler)] diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index 079d6db..f231150 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -182,7 +182,7 @@ impl MemorySet { let satp = self.page_table.token(); unsafe { satp::write(satp); - llvm_asm!("sfence.vma" :::: "volatile"); + asm!("sfence.vma"); } } pub fn translate(&self, vpn: VirtPageNum) -> Option { diff --git a/os/src/sbi.rs b/os/src/sbi.rs index 36e15fc..276c199 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -14,11 +14,12 @@ const SBI_SHUTDOWN: usize = 8; fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize { let mut ret; unsafe { - llvm_asm!("ecall" - : "={x10}" (ret) - : "{x10}" (arg0), "{x11}" (arg1), "{x12}" (arg2), "{x17}" (which) - : "memory" - : "volatile" + asm!( + "ecall", + inlateout("x10") arg0 => ret, + in("x11") arg1, + in("x12") arg2, + in("x17") which, ); } ret diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 674181a..e6baba5 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -86,10 +86,15 @@ pub fn trap_return() -> ! { } let restore_va = __restore as usize - __alltraps as usize + TRAMPOLINE; unsafe { - llvm_asm!("fence.i" :::: "volatile"); - llvm_asm!("jr $0" :: "r"(restore_va), "{a0}"(trap_cx_ptr), "{a1}"(user_satp) :: "volatile"); + asm!( + "fence.i", + "jr {restore_va}", + restore_va = in(reg) restore_va, + in("a0") trap_cx_ptr, + in("a1") user_satp, + options(noreturn) + ); } - panic!("Unreachable in back_to_user!"); } #[no_mangle] diff --git a/user/src/lib.rs b/user/src/lib.rs index 122aefc..1fae0fd 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -1,5 +1,5 @@ #![no_std] -#![feature(llvm_asm)] +#![feature(asm)] #![feature(linkage)] #![feature(panic_info_message)] diff --git a/user/src/syscall.rs b/user/src/syscall.rs index 1b23a48..ed3d16a 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -6,11 +6,12 @@ const SYSCALL_GET_TIME: usize = 169; fn syscall(id: usize, args: [usize; 3]) -> isize { let mut ret: isize; unsafe { - llvm_asm!("ecall" - : "={x10}" (ret) - : "{x10}" (args[0]), "{x11}" (args[1]), "{x12}" (args[2]), "{x17}" (id) - : "memory" - : "volatile" + asm!( + "ecall", + inlateout("x10") args[0] => ret, + in("x11") args[1], + in("x12") args[2], + in("x17") id ); } ret From cb7249f0e7d40339607b7a177fbad8fa92848df4 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 20 Jul 2021 00:07:56 +0800 Subject: [PATCH 25/87] Exclusive UPSafeCell: A RefCell wrapper --- os/src/main.rs | 2 +- os/src/sync/up.rs | 20 ++++++++++---------- os/src/task/mod.rs | 29 ++++++++++++++++++----------- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/os/src/main.rs b/os/src/main.rs index 14eb954..02e62a0 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -33,7 +33,7 @@ fn clear_bss() { } unsafe { core::slice::from_raw_parts_mut( - sbss as usize as *mut u8, + sbss as usize as *mut u8, ebss as usize - sbss as usize, ).fill(0); } diff --git a/os/src/sync/up.rs b/os/src/sync/up.rs index 849ac4b..642668c 100644 --- a/os/src/sync/up.rs +++ b/os/src/sync/up.rs @@ -1,13 +1,15 @@ -/// Wrap a static data structure inside it so that we are +use core::cell::{RefCell, RefMut}; + +/// Wrap a static data structure inside it so that we are /// able to access it without any `unsafe`. /// /// We should only use it in uniprocessor. /// -/// In order to get mutable reference of inner data, call -/// `upsafe_access`. +/// In order to get mutable reference of inner data, call +/// `exclusive_access`. pub struct UPSafeCell { /// inner data - data: T, + inner: RefCell, } unsafe impl Sync for UPSafeCell {} @@ -16,12 +18,10 @@ impl UPSafeCell { /// User is responsible to guarantee that inner struct is only used in /// uniprocessor. pub unsafe fn new(value: T) -> Self { - Self { data: value, } + Self { inner: RefCell::new(value) } } - /// Mention that user should hold exactly one &mut T at a time. - pub fn upsafe_access(&self) -> &mut T { - unsafe { - &mut *(&self.data as *const _ as usize as *mut T) - } + /// Panic if the data has been borrowed. + pub fn exclusive_access(&self) -> RefMut<'_, T> { + self.inner.borrow_mut() } } \ No newline at end of file diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 56eb239..5a85eeb 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -45,32 +45,37 @@ lazy_static! { } impl TaskManager { - fn run_first_task(&self) { - let next_task = &mut self.inner.upsafe_access().tasks[0]; + fn run_first_task(&self) -> ! { + let mut inner = self.inner.exclusive_access(); + let next_task = &mut inner.tasks[0]; next_task.task_status = TaskStatus::Running; let next_task_cx_ptr = &next_task.task_cx as *const TaskContext; - drop(next_task); + drop(inner); let mut _unused = TaskContext::zero_init(); + // before this, we should drop local variables that must be dropped manually unsafe { __switch( &mut _unused as *mut _, next_task_cx_ptr, ); } + panic!("unreachable in run_first_task!"); } fn mark_current_suspended(&self) { - let inner = self.inner.upsafe_access(); - inner.tasks[inner.current_task].task_status = TaskStatus::Ready; + let mut inner = self.inner.exclusive_access(); + let cur = inner.current_task; + inner.tasks[cur].task_status = TaskStatus::Ready; } fn mark_current_exited(&self) { - let inner = self.inner.upsafe_access(); - inner.tasks[inner.current_task].task_status = TaskStatus::Exited; + let mut inner = self.inner.exclusive_access(); + let cur = inner.current_task; + inner.tasks[cur].task_status = TaskStatus::Exited; } fn find_next_task(&self) -> Option { - let inner = self.inner.upsafe_access(); + let inner = self.inner.exclusive_access(); let current = inner.current_task; (current + 1..current + self.num_app + 1) .map(|id| id % self.num_app) @@ -80,30 +85,32 @@ impl TaskManager { } fn get_current_token(&self) -> usize { - let inner = self.inner.upsafe_access(); + let inner = self.inner.exclusive_access(); inner.tasks[inner.current_task].get_user_token() } fn get_current_trap_cx(&self) -> &mut TrapContext { - let inner = self.inner.upsafe_access(); + let inner = self.inner.exclusive_access(); inner.tasks[inner.current_task].get_trap_cx() } fn run_next_task(&self) { if let Some(next) = self.find_next_task() { - let mut inner = self.inner.upsafe_access(); + let mut inner = self.inner.exclusive_access(); let current = inner.current_task; inner.tasks[next].task_status = TaskStatus::Running; inner.current_task = next; let current_task_cx_ptr = &mut inner.tasks[current].task_cx as *mut TaskContext; let next_task_cx_ptr = &inner.tasks[next].task_cx as *const TaskContext; drop(inner); + // before this, we should drop local variables that must be dropped manually unsafe { __switch( current_task_cx_ptr, next_task_cx_ptr, ); } + // go back to user mode } else { panic!("All applications completed!"); } From 315e834762b8a1a6296b3ea16538c72ef5391096 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Thu, 29 Jul 2021 16:08:29 +0800 Subject: [PATCH 26/87] update to rustc 1.56.0-nightly (08095fc1f 2021-07-26) --- README.md | 16 +++++++++++++++- rust-toolchain | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index dd356b5..e97de71 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,16 @@ # rCore-Tutorial-v3 -rCore-Tutorial version 3. \ No newline at end of file +rCore-Tutorial version 3.x + +## Dependency + +### Binaries + +* rustc 1.56.0-nightly (08095fc1f 2021-07-26) + +* qemu: 5.0.0 + +* rustsbi-lib: 0.2.0-alpha.4 + + rustsbi-qemu: d4968dd2 + + rustsbi-k210: b689314e diff --git a/rust-toolchain b/rust-toolchain index 2c78ef8..bf867e0 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-07-15 +nightly From ffa94e149c5fa480650214467777c777bdb213e8 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 26 Aug 2021 19:57:28 +0800 Subject: [PATCH 27/87] Update rustc && rustsbi --- bootloader/rustsbi-k210.bin | Bin 94904 -> 94904 bytes bootloader/rustsbi-qemu.bin | Bin 128712 -> 161528 bytes rust-toolchain | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index 27987d6839be28f8acd13e816e4de1c4548debbe..c53ed1fc198816f8d4a0cfec958eaae3f2976cd0 100755 GIT binary patch delta 148 zcmV;F0Bira#KR3Y A!vFvP diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index 0e61b8ea1c1e32ed9f23de7cf517d5dd89ebd4bd..ddbf336ac1071bdfed06c14e22430dcea70069d8 100755 GIT binary patch literal 161528 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%0D){{#HSSA-Vg8Rf4pP&Ob_im`~PW(wq3b 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� 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 ICPvr!UzPdW-~a#s delta 53138 zcmb5X349er@;E;I!b{!@S3(H62uuguZM z>gww1>YhVC```UJZg2|mNJ)f9D@v1MlBGc_?n(M#NX)T?s#YOM8^5}}h>WZyQj*vE zOG+L58(ZDEH%J!|=|@97AW7N!lHjww*GqJf1SL|oIqA;fe^K#ob%@`}@2_+%8;}$$ zB^K_d%dw3$zA}_uUgP7x>~VgpX0Xz+%*S9ld8t;oT`w)m)A=uBtl4nq*hC9)8b|#W zWq;Yfm|b_ynaq09n!;UvD>g(W2Jx02LzD<(f%F}Cub7D71 zI~%=0A~>V`xcFzU1|8?_lH}X^?bk5vM#l7e_?xIx3aJBV4%A2P~Zq{ zk|eXL_BoVS1&CvS(%suYsS zc}rRByq4SE+V$GcoA+)w&~P|>l)_M%RaGC*=i%Q6;y(5zuJrdktGK%O0cs##IT-}P zV4A-4`4h!Bezx)LyKf{FtX$s~ETIMtm2KrrS~DSM+WHB~k-#y(RT=W7=M=1&)X>5) ze7-dWdP$0VXRE(trH7-Ezd&BX?HnT4<`B=n=}Y&Qydq$n&ycV1ZVuypi^I%&y#j$& z#&bm0Cw{9m6yC#u+Fs{C!(U~H1dR4EjJh7)$6=aY(bAxaknz3aEi^zbnbqi+-htz(D;jMj{5sQkcTg6joA zFC)yr7(vk6Ku}2ek;CNvT@du5FTKKFGF|{V+km2w@)HO0zAOlOfg$QG2-*q+g_K`7 zOj}qG^gP0h7cknJek)#A{>x#S>IFg1F+53vpx6DDqAR~rKK`|Jf}*tykpObG_^lbb z@*77~^_(EcVu&&XL7V;70$n-IVf3|vpl28!0i(SF1ckz`ge*bOlL%9>(iPDLpePh} zMf8jy=y3#k#g)+CfuK;>mC#dyAc`<6T?xGm1ckz`gdP_Jtzvjw3BBmI`srbmPzBCE zDkyrCA#z3Zg5L`0;a@ptwW|a{%NZh9LUn%Yd_C++$P@%U%<#Apdd_d%q=#Jztq=q) zV|X$uxEQsyKv4)Ln#{Y)eT0L(^B{r^?8TuZ3rGs(jCY~hmWd7@@TK=H884u$r-7&t zOk;s-(^3upSV}_~Rm!4R%(v{dlKp0AF7{^sBaLv2b zmtIuzN-tW$7By=rEEDdWU!$~wJ=5EECl&)}RxNA)?P(>5i(ozww z@`S*=@2}a3)=xQ<0>mbH+wN4lQ$EMPn!Hp-i>i%KI>D^z%Fb|ApjFvLN^;`1`Kn+! zMLZQ&929pbKVz3!-Uoxv#;y19Dp}gD^VNs{R(*%J7MEq~rngF(?p5|S?B8%G+`XZ- z!3o3SP$SWGh|s1AEG-_Ls@SF0sWfxnh-4544;>u6FeB*3z#*c~PBl?PIjUQny9Ix=-_B!}I%zR^p*dKCpAx3c=%i^jxB_*?s?=QpqK%YMgC7;g@kFe>W5#c>+aX#Hd^oiLjJt#z1h zO*k`dCgO3vHv3G>n>anO(8=kwMtZi_dI{v?Mfr@amn2UapEY_v)4R??87gU?B*l1F zNYBQtF)x^On^`dFT=U&YapItoG7U)t3XPnIr;}p}gXn2ret@=Xr zxjTZ@+9*k-p@)P;GbXuso4(|*%^faYX}x)qi>c{jUR%;0!Q{LIn+uphg43}sChsSr z*EScE8aBUnF?rwPwbd;VOmZF21ltsjNgC;53cfFT-RWX7o;6Dr3+{s3d2RD|5lq_O zaKrPoz@!dyF;)FT^!lxf$$rY*uy{I`Q`@V&w(Q>#OcGc%Pe{l#P3d$o<-X2g^S*L1 zX)Dc1Hy545m3M=n>0c2{+9OC4$K)h}S#!XQ^ygeP+omrwAS`UR(Aa!!#2Ofpl+#GDA`v7gO$9LDRc{ zi9u?2neW~bpuPS^lFd`54oxpw9Q$+F;f7!8gNB?>3Ge4--k{MH8cu)fV2*E1?6bc0 zu{EiDdD0z2M(CN(A4#mwn5;qCxPX{lZo;ZzjUS{l8Bez=`vcHB%o4_{eh%kVJ4fjVFfVF5I5TU@Hy_w=xZ$YM zf|9K;tGp}o)B2XYlIR!g%J)MzX`EdZ(7~QT53EvJ=ak{XldUUlX6EKw`$|_W ztqGDu5@TTvPHF1}Zd_1NI=DhPKSr;;9464=E1E5W6IcIHwb+5rk_}a2p6>Qr7i@LAw#NZ6 zPWab5P=6UQRw3A??(i>J^}>Y%*Pd&n^s?W2VQXn9rpPOtJ++SlLsc5u9;!@UvLevc z@L%4C#cTnt3KcNXfy(4YP$&sSr}pEnwI8B9;BJXhX$USy9Kz}U?VHv5I{lUTTW)+~ zam<#g*bPTEADi;SsXrF~^zQ7J?kPTg>Tgqio$%knUkZA2gCbo7)4LU>cSrcQhT|A( z0K-^T&^BsUOeW9@+Y)(2FsERBcA}S$X|q5<%i$z>6XcwMYdqfIgJJ>F zGNCnZF@tl@f7xH)v|-|u8NLeGn|gyeacexhd!s-8hVI30djKFZ5Y(1X@~)e$_EuP| z39aW?0ih+iuZND4;rRwz=!ju+wxl-#_H@ zT0Pbi31j8CAMkR!yC)Jhi@~qw_Q4uvo_ly`1rwfrDSZHh_`r{s*Zam35%1EFAEN+h z{N;gnS`#>i%*rKz`QhV6T@W7Ac>Tzjjd&?0@Fs>Q1yx zXbOhFq&>&g63#$z*;+jXx`c@7wPxz^5f|)WD8?%esb>o-Bf?k)4uIaS9PgdW`nLut`xC7Xw`Pa9 zSe+2x+HvzOzd@IU$k1dCIsz^1*m~+9;qtB24w0NVRwd`Hsv$#%bJ31No%1D#4#zPS zC~N5vn(ABi5lPG9uw%F)0ht4l%)VfGg*i{AK0?%l>50nQN;6s{E^6BOJV{TGJzTNG zB6E?MkUnrG6PE+ivK2;f2k+i0VNE-fPjTElIxn@)Vv$ldYCT4JHrI4Dop;otnO(4P zczE!{90U1P`}XYJ`Xi|jgmhq^W?`N7z1cB%4C-8xw{~l|H8B|O=xg!8c7OZp#qVL^ z)?}#1F;VtHAhQUkc~d4WV4I{Yr7OTTsFfjHNx6=;4X;TU==YvErJB=kfPiZfL<`Mt zfeGkkdW$VDXTfO+@5>psevopsVVmE2IJh7rrgvxfNX{rIKM?pgta!7+?Y@1qyd~sJF`7R-RKF((xKnfT)~7an>bHWH7x6UIAgVGHHib`BaErv`mKtZM9!IZf#335YZ~(hh~G2) zR@J7_i(~h2l9U7x^foC+TJM{;0YVe`Byxh6Hagu_Y~F<7R8mJtSN zmgzmP8173>s!2@~z$$dxgSZ?At|S7C96nQ%nkZn6^P*rwVK5eXC%_))8zI7;5rMVJ z`E*4hDtajH9U(#jjqM@g2Cj)c6ax`K8X-arMx-KLz`Z5#h(dfo^Lp2#6QnZZb6OPE zGNlE6C59`0?&Aq`H0)L2e1ac7)PB#!D!n00uFl8STf*n6QH^dUdQFw=@L|Hy4Lcj! z!n?TOa|t)X!+Yfuh(M!F1lF!rV9euPSWs1P zR`tVC6z4PGnK)kdyK^)`YUvy00&vHxul!05Z5wUs}Kv5$s${(UN>{ zb(NSRk`KEG_;<;0*hwhRc`}ER)r~WT^(OuKLO?inYpyvr_sY?r=t*8U2ZTi?DYouS z*jlN${%M(#ROp(Q!@PxjmD!m)bPTiNZEtc3%-fnj7Y?V#Fp-# z=9Ij#8LXEB|Hvs=a|Zai%$0#TlOw}3ay^5G+M8B0|! z*T=mwv@b61j1l>4U}We^ahwrjgV{V>Fp_Hkp(O+f?I9#LY!1jj6TR0w!HcRFAP$f(bq&tv7%jb>f`#OaL6;4?{Ha#nJQ z8B5MdJX26wgsulUi}NJE03+X@Qy|5`-?2gkV>b>NVG=HDZw(*u>M9lwVq-3UWPYGb zJrBA8@2QH{=NT+?%IfWRF(O$VO1h*iW~uj+hZ;KKz2Qy>hq4w`l>+1akrq~ydGW~U zX<&HajHQ&&Nw(QAGMK??+saeQQ3KoWinNwqGy9DiKSZ0yeN4U?=Q}l6XC>5s zOEuYoPT^Sfg&b?yVzx_XTo^B!2S-iu7?+uaqo3xa<<8|` zb^2jf{h!*{G5U2fgwdwY5VV~G)yzATA@ibG_io(z=A$HO3a@RR2z;?xW3E}fwZ(kK zJJ?ib#s(z`1Kkj%a3J6%6?T}AZ80wP3pcj?nBU@@q1zm24OeCBa30cG*cBhkBihbN z*w&ca#!NbsQ2#BPoW!@9v?zvrV}>?Q9n5kt`eo*gLZ> zonxFFE*%_A-qw16x8>u>_H?l8BkyLtTKhismHPG5mZeVYZY9L>Y4MtCw5V?Fcjt1<(XR=>0sAw39 zL02fT-V^c(q1l^x4V290mdLn#H6@uN85Z?YcHrFF(COC7msINEu7>^7z2QR~UcP`n z?TI+Yl_S8auuRg2^sQ_%Jb5{y(wGOiO!Q*EKtH;H45LGG zNdGvS)n7-)=a3O2xlLWoZEDF%I6UMQ7f#C9%*1)g7}oaEnjA8Z&t0{HZdpvSCNtHs zWBHy^D3yYtVUd>W}<9!ON$MkRnJyer(+u#3(@@1<$2K(W^Kgz16f$6OA`7A)-1xQen-6o2REs3 zaKnf<{t3D$i59R#apJ2U3-5yLHpEv^)%2^V{*8;)6Kc^Lc81%y==9rten^fYJqTf4 zg!3D=6j)PSgx)8VJ>esQz}576b+Is~}XOT1#?m?=rTBYh<;!@(>o^YIuJlZW*hkUxMEXv402 z+trP1?cIb&HBCBStDPV>cPxVi3`0)_O9ASGJcyZY+z3W8SXhnKuQDVOZrE>o5Dg3> zL#HmnX412${3)AaprhI=x9MD;FyG=C`8i3!om32{1UrHCBVDK=hi+u)k3O zh0KBC3o$GF3uq~4@)Y+k6@qNMOzx@GdTQ;NZmqMx{Y%x{zofbDUs|NrEvqmj-L1BJ z{&KGFDZ2*#;sOI+#b2F!k_G=Obig(ebGyH;45ot>bRR+HyR{<$zVw1fW9i2Ecg?(0Gy0 z*X()Q%d^WXLmaeiq5$o~9h>$OV*8vF2M(55`YxUkFiNV%^H#P;xI-*hZ7#n!6%LJf z`cEXqNo1Wd9kOPzB{(|kj2W1wDo%mC7oeS zg<*UF2kI>6nd^e}-T%lsbC^DT#yR26ubdA95}kF%Tw(*l4m`(cdZN;*IOx)|b1qoI zfa$LF`pzQLh)axP^41#6$KuZH!~V8jf|lCZW~MJEA9iWH46Fy7DZ#dcCk}8++q6X3 zkzM9>zTD}IS?$@Vq=5va)=C8@n=_PTrWZ#OBWMwC0A$P~>7_5U(Hp8RcsI&#Z|55Px zh9yEJ!l^3>^3x8j1dVudeRk-5Ja)Qf&6n*H>l zeOakiht%!eYSv#odNNbIs^KYMrITV~b77;(_8#`Hk_6j#R$DuQ*XF@i5ptz?{Q{*x-l?XB_3Dt#ed`LO4Gz2I2m`TN2wGH8|%JSS+@-HYs z<#2pRIqE`r^Eg!XaM)n;o;xLJ0i-qht?H0jKPx4TV@nm-dN`1GnP1JCei5fINl=*O z_GSFQPM6tO%DS?@hu47|G7q-0J-j-Sv^E4I#h|T=%o{G*$T@HGaOn0V7q9#orr-ps zl-7HKb8bY3V+L%#ANB@T?H29jTSwGq>!MvEWUdK`s-ME+2``KEQ@LN-_g6o^y>yaaEwJ@)A@m& z{E}I6c@aN@bpE0o9#Ov_BuGCHk(%{)^Qp^6aMr56;`P=0T-I!ulS@Nzg0`n&A0Iu* zr|b&+>}r?(Id9R9If6{PtXfIhtwW5EkM%Gf8&veAdc(o+5%7@)h?<=6vA_?0s~i(W zz2+HLjLBgwNA%31X4e&2uq%R@ zSkfA4CxagmTb>k(?XC)LT-78sU|vVsCXcJL-X_5}B+j`yE3c5Gc1ZmTtO`4G=0{+I zKXBNRoh($tc-9`4q-q@^i;ROIR)H&?s@Gk_u6XRfnhjTGa&hOr!E5WBNVjT@B-Mom z=%wZTVhdMsgt9UMHiaCv?E45?2s`4<0s6yidT>}RAD8D5_5Iul@@*7+6-+JI;iQz6 zpoE&gO_>M(#=Y~s8EbgB<0Mz|a1GZW>22i~zjY^C=)O1;@6;8@25}V^?8EY_iiGCW z3r7D9j54R%z8%AOmHL3Pobj6zlzrP?7gnoQFoH>b3{ozaq^!lU#{-9zqZ`^b?+Wj0 zIEZ0>)NbedFxdHi?!@VhM`CWB{T&{IK`1^xGIP4{v}?DnxHIP$SO|8Z+QI#eUt!`r zVjjIZd#Z(~)y8o5i28UTr|M=VCq|H_!_bFHgt>8gLF1bxwlYOv zEu|~av^K+dgjeN55Ry$$33tgHHt(%SF9=(cHp;`7ST!B*7br(=3MmKA4=MX#ua@4& zohrxSA^@8vI0$K$8Mrnjhv8OXpN4z0I$Xw~?#8W`=m&)ws)x<%t{pj=!O43g8q~fq zLW6ofXq$eMXraAj+SiV_Xcj1iH(1UoE?MUelTm`aRffxf60&FyE&5yLK+;vQ8O1KjSYRjaOSYHa)1t14@2iD3jn*(R(q;U0mCJfF@ zGiK(o-_{f6`LlrfU5(06EQGMwm_KK3 znH?M}#$bKK^kC-%qX<}g&ythMI)HA1L5%wk;}8t4401KbV=J`ZgeAE z#V65ayw>9G{}^4?b~Ap?&}2rJb3XQ)9TNC1F;AV7)`#`!yaO|D(FpVEX=6-#nrbea zHo>${DX36IepDpqkL^^eP|HG}Q3ts(;Ho6X9DjG$g7vS~1EnWNiCK+p^+bu;Z>K&w zO3Z@96(?S{;7p7aF)=Q>UvQfYQDXK>N<`%W&$bH*ll~rw60>MxXShQIjCu=8$y!1VU+w?f)Aj0~)Z2&n2f z-$@v!|9=U{dHBx+q&;w=fQ(0eC!pWUr@~N^qXlH_h!&916)hn3ZxI1u7@g~%RD#Yo zIDA~duZX=R=rV!aU({C_qBOWKNW3k{89kSZ|)p)~RLar6Ap=wwg@IM6&Lu*x^vQ^oPg-RAO8MFneN?>iYcD#nJ6 z2DpKR`O09K`fo}A`yYbj)R;}M`;QI5Mcp|5*9uHnWo2t{`DTA@!>v|4!Zpr1OM0^E z^YH*Je%}JWSM`ERzu;!l&3-ag5YZ8aMCiTsWqR|xWpkF#TY3Fs3!l1$@7s+{Sho!l zi<s2hC@U%J1DAfd@zQFs^m4?4kPxE z@p>h=-ypqd@%6DShZ~XhTz109)>31Y3)x>P@E|lKEHjf+mBOK8hr((aBVwD6npdrz z9>?^ssgL>G+N{akJY{j%l3}LT@^DyfsU(Sh(?!3TrdJl2j2iRU+QFvwY!Szn+iT-f z&%PdWDerox=(^4H+A-XsSwR%J^CbGY^hg@j&4D;B`oDp3}lI6pF#m=pGVmJY$4B-`Kg9_Uw>=He0 zjo`4WTpZT4C>&${7Y?hD;a~!h?{#rVMTkRCU1AQta2&UsZDC6m>qaFTTo8?h$F70X4 zFVaR$5N%4TMvUYN^oUTPWw7)!^)WsI)nK7d3<%zmFsooXG3_bWnbwpV_%EAYJeQ1^ zz%>mfAzaMSm(54@F!DEm`*?+f7Gu+H`!)A@mdRmzw2@FBQh48i@K zaCp&w8(zPaaIoalp|k@t5Jlj&|N2;7V@>Ue+cHS|^b_K?yBaz-z_q6h4jgg84207& zl@0#C_?CgIvNi?dw%O&ycw0E34S<-2$Z#+KITYsJ$wSTV`+OB*rDqmJJp)!vnUR)= zyurSN{nGlNYlfFw(c4J_g8ABG4b2sQ8M52bf|VEVK8g7RsSJUR$pWheb>B8}{|H?g zuv}UDsl#Z`WnIMZF7R#zM*t~63Fi(pKX{{W5`$BdBgi4f+4)AAFe{VHK5vT2q8@jZ zSl(<-d2?ur%~;As?b^Flob`-_e5*5xC&zW6A##2(?=N1#|CT;82cPbie`Q{E`Y4Z` zM2%*08=qq8MswzC1I@gW6h4{Nugvq$7#*iFE}o>fze7e0?ZO}S``rKJfo*nNV>7#b z+&p$hS{&#MBz$F=LxPhAk6j#lR5_&Vs$y5(;7Ur|`d-4n_{E%YLnhB$aCVwE-H;QP zfXKC7=3_UUo-47AFqSPM$XZ{na!PlNPe?HD(Hke8!+Lf)U_oNKnw!FPJTHx{x}4rA za9qa`wine4xISV=4QO(M+LP!vUy)Svi5n9IRbSCQ|0Wr6OoQYxH1Kbdavtl>`WCmu zN@v6@_~zpxhX&&R&tK+Q_hrQ~jB1*>=)R(g0><@4%nOFoo9s}adxOJO(s?`L>eemN znUdk+h^3hJgz6p;IaFw8xbd?4aH-+lBRGCzhC_x^ATPMYu(mO$#OZ|Vd@uq0mbs&M zaxN>AM`BqPM(_ocyw`==)p&HP>DzG2X6eYS2Yy_*5-!l_d zCFiiewRe7xW0in|M7n~N$y`d#Kg@m`uQLk=t9%p2Y*KD5SA3)SPc~s}fhtoByeaee_!{qi~rHz*F7%koaLsq zGC7;m|H$v*+>zDjCkshZ9$W?EB>(mIptUZ_2T=)%ILeye!>t!^8f3Yl0&}+6G@ES> z>CQ-I;&2ik5BNAW=AG+D#~DbYe1_Su{>(Xx@NbwJ4(ec(*0kn> zo58e`1q}YUPX77N+iAbJb>=gx)BD3F2@go&-V+MSYaUoVHk+9wejm+17St&?LtAuD zh--#n(SA!w?m#yD&NC6e2wnQaPYmIK8Ec3+|lu04n5UbSTj#xD;BH$Dj9umQ=om_!%JIhb3 zFl`BLR<|l`%25)ed>yws>9RC(vByrOb_QHaf6?2UzMnyQkAZ98E>ZjjF5g(WH-oLa zacE|HMd15-+Gj8s(ogkasaTU^=rx1M6xt`94DzUcIy0RNoMFS5akLB_WU-1Ekw{&u z1b3G=$A__CeA%NP7zGB4+Zx#KgZt(<`c64rK9ppPWK-6;djx=T2jb_g3^AyWx8&Kl zZE(+*M?$R5tWmSRrXl$F7xQ#F*=SHtcf4$HWFlFaf= zxoIcWw+ZRl{moZ4jTx7~XooCjpTAEU9{}{I;c)S2d?}~)GOt`?g%&as4+ zz3kE0&8u?YV7R7j?ABskNHl(%E0Ke4)*>GrP)Gym)Q;g3Hwo--6}EB0q?&84%V4&S z&jPqD3~m`_E0)5+JKV)(`s-Z$=z<}`v~HeOQCe1$I*JH2zXVPOe9PSDgWjey*O4*F ztdUlL-W^RA?-mk2>ekAins3AotzhG!9~HH~MaBbn#KmQi1KR)|*ru>U zSk@-@7;lr;9ciQf6Su~B`gsp2-9=luF4rFCaCJvnu*N|d<4ucpmYy^Um-$-~atER{ zW`|0UE9^c`^>8vSj|4Q9p^FHYXmu` zVmbCI*~R5xFhUL06ZYdHR$x>^VMkc3mT)VN%?0auILVqLcG!nOmpj6I`y5{dql38Q zvzV_6IE1g-e|+LXqFT|i%V~aaGw@o=gw^$hr73dr1%|(+lu81f8tUAA?yB|V7>L|k&w0d=$sh~ zmehOk7QeIxUQ$4`#(4ZSx}MKr`C9x{Wbrg8%feriA(aOqtq1TIftVO;SB1aes#kEY zu@~8ga-4b1{jgZ|!hg3nkXXnF;|(=9d*`Jq2B*?8LZ3F&hVt6Yq^olG?X~ z^1oqvyF47uUWl0r#i5v>S5msNf*ZY?)WH5ZH$_?%iB=`An%?E2m39N%vw@dOsq7)i zXR{gD_NLJGO>71-PNn&XTp;b3qiyQdv!)27v2gYbK~n}Tm(hDYWGG)$^hS=Z3=WZD zQDFc^Dcu49Q(1rTz$LS`%`ZZbSO7TJuoNp^FAy}tS#eMORdhfMnR#m469W0O5rG+( z{9a&fYXwhML}1dz)QTY)T=F3SQ2lg7Hr7lo8#Gp!TN3C5QkzIteC6(n)V+{@8dmq*ZBBUp|Q zTc|dE4kS4}%M@!9yo5fAk!B4^-c!N7t@8w+ltiasj1CE%KPVuN`RO|;Tk3K8oD zISzC|Cz)&zIL9{#j^{=?(Nb`R#P>*v&5)=z-i6pE0g@+YN4S><(r4mGS_YTT^&D&S z)e!(EfqoiCMg%#ja|LggN0HhGvv@r4Xw3x=)$D{Bz#!XZbIA5fB9Kx%RedCd$K+(4 zUgIOd(Gv5=X5)!UGDL2}tp^%8h9-fb`C9M>x!r@yD?V~j8tcG&r6A=hw^}`7zE*H0 z$F4nQ4j!AsxvIUGL*`w@;sOkn+GSobcJyD^l48|HFDV!;fJNKE7#Vj1?f+uEM}IjO z=qM^F>@>>{^oKn+BOI8UaC#hD z@U=3C8YlM!2dA)$Cq2m<%$IH(JI+FZs9)iB5|&Q(%Symse8<9fT6~|yYn^w@gxk-F zW01DbEWQ2O6#jQZ)IOZQ-#A6j;=M!s4Sd>STv4U3*{131$6-Unck|9ytOP^0;4|^H zTz;69wT8E&D*}+r;jm)OkMz?yN_#V1bQ;Mvr<9$|3#|R-(y|GIu@49fLY_h;9M{6e zFlJkmiB{DQOR4Hjs@t)NS0kaVe52%}Mi4 zjb$vnVctD&k~yq9c_edDtbE}IX;>@Ye4-z8OKt*q#^bGc-w>Y&Vxr9uzb z&XGlpy2Q3-Ph>mKNjEYhvc(N+hC-&B16SwpQIOv;PhFihk@XJuzS#Bx)YA&P8wTCre`pokb^u;~DuA6uCij4(hiPdc$t6o@O(D3w z7P4r!(d|&ie@H*jJ%wbN$2vwwjU#Cl+-qB&Q?MpKXZ-qnzjYs6wvT~}_Iz42x10ABJdeITjwIzg0Gq^qLYhkf`K0y3;Ql!vcT43adSo0t0mS&WRXS`unT>0u zS=II--yA^)+0a22Cq$bMUBioG>*a^)Ppq-$g^xqW^3}B`maApqUmJdV;n@>Qow?y( z8vg5Fb7HA6C;Vf>PZMr@>BM5WR5{-8!$aYiB9e7q(Gqy zf-)hrI#gbEA_2y)_=bev`a++ebCRrk=*)>O0dVGW_e7Tfo6v@dFiy*nPHO`FYNFef zb%171a=Vh@rNRNBefotbb)~gJ&UU-s+Mo{*T^S2#Cp!*5;_dJEohUOxqf7fvbjQ^epV&?!^MbUqf=$Fy>aON9&}GYG5b z@h4HCy~S^evP4(j*BP{BimU0;JG9SK666Twcj#qPU52G@S~-Xz&2Wv7s#X`BT!5*ZN+lSY@HLV^`tOfAN+`!f*F73&mJYU!!ybvC+2{)4j+J`v={ z{-6ybL4&sm(Plmj ztLU)P$T{Q;T%T_wne@BU$W$_wrmG}lL@Ezzy6t5@uAF{rJG{M=5b}i(ifhGq~{lt|70*8YGXJLd4&0<>llX%=^3Y!EDivd zQJ4tIAX)^QPzE5~K#kK$+G!laaUr8<4A)`M4^tetq;%0syTlw!hQuhNU!6{>$Uu6{ z8RTgaPrJ_`=fydU0Fy2XlCnnQ5=lXM&I~S#~x_pqHHuvm1zjcat1y zolS1xKbpRy=`+Z-3PyMHuKa}B5O$J{4cArtd``P{?IzssS5o=-UDZ3gR-m3bCWdJzQB%@yBis+ghEsx}+mNVU0^^|I639<>l}+`>Ued?z=whmY4ic?|a#W@6)%Ze8SF} zRF@+=KC1^$^LP2=O@N1|M8HAwABIzALGCxc#Px0makF~LOTNxebIaA(`7jC`zV6E! z|9dWcud1H%37^*|Vh0R=OlAbnXFkuOKynU4tbrZ>^Ew?lfzrUX3NSjrj?1`I(i-S5fsmlEufbZS%?F zSNC~-!sjlVd#j!UaUGOk|5{RABW-iV(v|#@E5_U}+8+>?dye5QR|llp=S|MTIV zagF^jpP(MF@w0!L)l+fseP5zG;Og%AJp*3-Zho3O9(G4nPkC8$jlZXZA2WOKOnAFK z(N!qBZEO#G-8P@6$t9@u!-}2(FWH(O-=mo=de4AYzu`;&#BH$ijvn|4uhn}tiE{h< zRXycjG}a7o@u=U8?!i;iP@mqTIN!khONS4atYiE;({XfIfRez+7_#7!S$3sSGXTC? z!p6!u4eLK_toOhtN?3_~Dwb^9>Pv^ml39s$3YOdhOu*+yScx$WOG1r44}5Ecm1tA3 zWd2ro9`7e!qE<}7qS>IA@F5WfBu~bYr%^9~K2(2c5|*q&y>tnhfF%#2Ub+MoVabw4 z&`Xz~@mO*SsAW#U8d(r94$DS>VxkL;W$?nNT!@8fpqt?F2tcO*%RYRQTEj>>?aCm% zXzENzSY}4LZJp4qhA1okg(O|RxOzWC!mEn)KqtO$0B@c!>vZ7nneI4k4MT1<-_o|| zzJxFw&Cxb|T&itXN($~po_{&9WT5zBg8?@uAj^x%z<`u<*halOljwXY$$ehf4*G1M5>s3tdU8|3NC<$IG#>0op zxAIk|wpR4_d;}U-Z+1W)owLI%mh-n0a(1{C`=CKC$SxKGos&<4mS6PtrFo zB9qdsD`0O{uw*8v^97Yge*6k}4;|~Z9kk!YB+sLnbi&1?FhRTMj>i1>PeiT#9=-iy zGR)&Fqt9GSPEC-{9RW(cM${VHX(zTds_4L3q)-M25?t-caI=c4h}$?LxQV&lyeET} zA(YjK51U1xw9{VQ6b{9QcpLRDx&@((4S2E^fl{X&c>R4{5t!w28h;5HIk|wba90G( zCKSzDrDW)NI}p88haV=(A1I>twS5NHBq?1I9L8Eh4_-<}a z!Zj1QcN}jYJGrMlJS_8QD5)x0Qug2_QMV_(fJ2r|a3S$I^_%q-LC%4FP51{Fwstg! zts5s`#~98yNve)J3p74LScXY)?mNAwVwFG+hs=etUuP0zZLoO-J9K~-Zz$nD*^G`y<; z@BT7z)TRrNI}+4It8^7|3>Uv<(n~%5-ta zX>iT3ya7IswCx7ymrYbT46pefcH7kU7yV|qZJcCDdLM2na~WwdJkH{`?hV0xEV|?> za>}XFtGSz&A|ni;whFH$y9jgR1j2zXLai^x#p4Ad&Jo&u6`7p14rOc1oNQepdNS4p zH`WY%X)y0sj-!`cO%#uG8m+vVWDl@5J-Bf}+55ULQ_z)9H(yPrO|pmKm$_C5RgiNr zWv~oB3pRg!WSs3WCtC=4KUJ;c#x-e{s2$e+1vnORhA%OTg_zCe?O2_gXLj(h&OSwIn;;S{dn7>l0Bl z2(5f{EqUMqn>EU~1TGSqUNRHDXXxd=v6TJ=q-fOaJiH}O5C1UzbxuOn2b_dh{A7rQ zZS7Ab$rtxhf8M>Zf!1jxYZgN*4}>jInQw@2wv!;nHBQ+NHs;n*L+X>^$_!c{af3rk zY=I3ToQwYe{LFw9Rfa)I*dFSc4!_aCvq`pU-vSSDzrJ(*d5f#t!(9!BHgv;R6hJ=k zMAIkmM1_n*$sdOyxSbdB!<}OIT1+S@7LK}Djd2mZcQy%loMhTCn+(cVFNVNEXhtaT zv$A(V=wV&i9oXY7+0aIr-O78Pvt|E>cFu34HTem_eq!mS&_Z*8Ij=aTsu z%b5stOseR)Z@|i&>GZL=xH`N37D~v+#x=NVf;%ZFR9p@k%qf`yi+Cg`}@ZCbuxn}cIXeDH)BmS9}hHeDLCo) zyxFaabN!#eOC%azO61R>?Vm^Hjxc8bStGbC!eTnS6N_feCu#JF>&P{Vap|A6k=ssa z)6F}YGM`NHXphsk7Le2g6>@mk18W6r3Z&ozYuO%cE4Am7)I8@P20X+|YBLeSdV>WC zAg>8RD2#h}pZ?fJGbK1HrAJV9=_U^MrU77vOH2c@38)Q=+OEKJ3PxHFXDYka1%Jvm$8TUC9lT5 z(sDmMxhu^)nJqYyhOSa+n90M7T}|>xZ}VP^D|s*4hUi|LfAe09C7dG(Vv$^WS;El5 zyV4k9iIN^@3+rb8jVOvP&e61+(3AZ;z3?V-ecAyujJ3V^<~GmM78F^qd*~N8k%<+& z`nae*+Ecv?U+z>KQ~(n6Lzaz)-B3&6@ZAFbNDq8_G(3L)#-k@LnGQ)wyhYVv-Xiu_ zw}t%!=8yHmi`{UgjSY|e0DWR17#DDT;ol5$AO9)cNB1m*TuZ64F?JF8ij24V@tev# z=ih)-K&DPy1uw?=R|(m^#rzSx1ZD#==zyEav|`P3Ld)LKE#>q6u;oB82PDKJ*;Kxn z1d46;xuMb!r$FizjYm4`5AlfbsE8%L#qf-mevPI_b1xJ#PBiro@x(Tk-a;l2*?I}9 z^M&oyUP3Zi;Ee}_|3$alN(ReLeKeF+e|kahoDaHRp|HpJc#2Cm_m5>Cf} zFmRoxiykkd-R0oCz_EJ%ZDdM;{VigEd+dS}IjLE4#W0vNMdgdX?IJCwz`si(> zpr5o+>4IcJR;GbVe;XM*5XzvRGPvppW}VS(f4=&5GCte68Al$r&}_skei~YasdOU7 z{y4qlb|Me6Z$g2=^2Febn-Jahvg|T;D!>LzTScF^9Zlx~`qu5RpxSHbSGSXO9_?ki z^bXiXsK3$;caRw#iO^$rkmvdGq%Ec|-ARUuwd#8M>78Wq=;cgNuZQ=1$~^Ej0a&Ia zEYWteW7Ya%ATL`iW7b?c=`Ql9M}3ffa2HDMQ+ntwaKF_1=%~BN&`d_HT!B2|Q-r1E zD;{cqHxCh=^G|x+-LT->tLbBRlgm8z6LjC*IKWzidwi9gX^r!ilzU$hh)=%_mZ1ET7Oz|FUg8yB-!`Sb@!5| zJnBSxeg%;|27D~4f|Po+eEP2nveF}~bb$fBf;yZoH9)9FCT%bPP8&^k7`VKQNBBXs z+aT-mY}nevtpzbQ_lB(+%6!1^2^RqFzqFs{*O2v#4`F%mn9BYE+VBI<$&-J$qwC1nm+WxCBG}JVnpS;`S>A}B} zM-alSZZDzBmJxF}gV4X?5b#6?OWTDh$6F2+Er-&Qhse;8pCdZ`)cmwp64^uPUF^t8 zhPV=|X*vx)<+TXa2kz7@e+XhA>O#8tA@b~BHsLCjYb4C}u{=!hw|7R!745m>67OBw^q$%{gEb|31jfFV>{X#AsqPQ|a1o`B9yG8deg&iYi_sP!l;UwiN$ zSk2f^`1eQp#-pIg&S$j11c%3Ip*NW1>w(4*z~w$z%t%uY;QPZv=S zjqkrPJ0GS$>&N(l4qi=C2O99KD*lhXR?LP>{(_#hnq=oYpGCbB%xdgU`8&aoXV)t% z(zYS!hi?_rE&YK+>jT=n8hxGj;JM-KJiGa13|14z;KjF&InGyj`vnw8c5GS+4F_3o zDcybR@ho;3Trd#o_a=Rfl1n_sPCDQ*GBpE~3ap83q=ZOx#babB{pN8Z)7u{>XLy`igsSvdPtoEh$c$8Y$+j7% zK=WPrDboV+4xkjI&piRt+V~sY^8~rhBR|%7*^^`}8E!Czo?QuBy!uq7mGa*jEXHLX z*iDMx*EX(uirgFHfs^+F3!{IZ&`T_^QO=jN+#-)xG$Aj+%oOMulIYSQ%McPq5VQ7~ z1d08yH1}aSY7DMP=5QrLSb&(pIXl4Q>)FujxKNXay&$JYTGXcS7I_&F%=U+pqltVdC8HO?#QtO|zZVkyzW4%^o@aou}YKRB7t|3MJ8PR#-D-~)p&0h=0*__fO zL20Us5_~9aElCq?Qg}bAO>5SY;nTSk`tml-7|dW~7!Wny4xcgf%?_-JfxO>ruhN+X z4>T8tIAmQChqGU$U4TY(9V@y{bkRr~X~DB(DDS$tKX2n~pw~R>vgnm~o9e!98`vT~ z^{mTcUA*WgOdUWZ$UP*;^|@_~=OpPP{rnzsi<84}v%CSqN`l-tf#x}?KG#F;UO}$c zMI${!jpuqK)r+@LpP}{8Ms)p?=$g1~@P^gysIEQ93UnRT7r0%E4~*HACe-$H-7301 z=Aw~S(3!P8T^|))ub{U>8`1T5qU$4W8v`!(w?}nd>uog+x20=^-}6Yy8cph z{i};cx}VB*JzXCZUEfd7s&mN=ej>X5FSMD7bHuoZ*3`KJTe43?8SbH*>&SV-nR2=x zqq1&;*;L*V!Y4PH%Qkdw?n-$FR6j267pgo@a=7N`|KJ^z?RGn`7Sgik$tiIR_JNMZ z@bj>z_rQH;c;+qO(T3s*Kafs&fy8^Pi)qOVXnPd8=mjzu0~QazK&l6+pMsr-k8q32 zeGV>-(kE02lWLD_(G6kp#z5_9JihT;?f4QOgOD9s`68K?AgvC!rooGXywv!Pe)J+3 z594XN=S8x>V?Ru;;V`eLF4Xt?zER3B;8(tzmV<9A_u5MiWG8yLe$ffk%4dC+` z|D{)LBn1%3X?%DiIZSe331;6nlTe`2cidO5WP(cB%uo!b;Z0=XaJGP3um|S(AyGjd zxNQhwELN|+PiF?np!k07C&k~T`J2Imk{+csn~Cj_f21=S$zv79x9D9mH+2U}#DGl% ztVHG8(G6snY__$@*4cSc+?rlDikoo4mtK#)bhZd4sJj$!A>DhLxPc9@uWUy9awpvE zt#H$5WM*prC{u;iSbtvg2bX~x(h_^q5c|x_n ziG5-wyX6iq+oJ9$d)W&T_`!MBf%6=ccCzQs;0yx3H{bItoAz|i6&MC-)Shr%`*1^d z;Z6mgVX9~igZLp+LPGxSUpQU9*|6O7!`Jw52eGzn^Pw7ePiW;$m8+HR1}78YIfsz+ z#{ZJ;#~Rp%L)4DH+2+C+z5|UHEUrGl8Oz?7PlS_=8#0^k+mm0>?S>Scx!gKCuDl7r0L!;9D)_%8;p^+F&JZN3u;*@ zJhB9g#Uo=adSEZufC_!t;>uN$1n*;Tj^I^OF$7;L_+7suoE2@GxU$)=@^sQ-eXSk< z0a7++yr0zg2EwcC@L`|=B++^uq{3?2zO8Zh=c>3Z*P8MBfLel-3oGBTI7Q6UHmn?(NiV_Z(`{Rq}h?nAHmicGweRok#UbLqerzc-^z zX#Rv94g+^EG|)hxxfNcJ00{t}Z*#bke>RC2mN5hju-o0kwBsw1IhrBY$~cc<=fSOi z&Y?6nibL30ML4uyiQ-Uei{eneDvHC(lR1?3MR91o=yF)QiBn$J7~#;4bvcx;a5=0E zbGW?qE{9q##-W5VQE!jpP(Anm!l83^6o>NEC=TWOqBt}@iQ-TyW*o9EwM8d$2rg!1 z42=~ohgDB<%JC`?9PqO-v^rf5CDrAyYB`6Cr7nl+?g)okSrmtI;s1q0drTCEQWocs z>3}>ZibHVbB3kOe_7~KKaR?uKWwSY=rS_Z1;j|02+g#@KC7kH8`y$L4a6%)Z7rDS( zEh?y9o>GU3+}Zz7gh(;U_a^ zJuLkBA(ZP9~=n{Cz$Q?Oti_4td+hs0z6^Cmsb(xc3*1BSZs7Qo4=ji{1Ipen| z=IqWW<_tB8Ip={W=B)olF(+cRk&!bV6= z&T^S^o{VBHjxonAq5T7Yq(;UmDaGL1-z;~z%p`Jm2@LL|1~lqc`UDr9TRCK z&!@{?BN<7BqN<<`K5)a(mC@IrB6*zXseo-kdDR@c`!zBIKOZbUBY=NRC)8R>Qb0N| zUdF=6eGvZOg9KkpW8;O--Z3=x4|wCJH{AFU7NP)s@EpiJLj>^IcYJcB1;Vl%0ef(% zldIc-;k=2R&SRC#)oP7$wGt4AjILG(x?0&0SBuqHPxU<3#eUn*MIP%i2hK_6Y1=Bi zgNcqQ_cF9~JnRq7NH6>#dudrqsNoQ9Nd_+1ynkTX=B|X&4V}vuzvT0*Mn4=bD>2;g z!BY6eUO(ehLECKj_!9TH@LfC3)21}e6XbO5hcAX?huEhhIu-6^q5sI5JFC$5!f<>k zXDSY!^<_2M!#$r*;T^9&ywy_LkxXBLAH~5RiuJGb{jkd7I z`DT#DZPCtm7_v4B!L!`Z*#PhQ!l?kbh>RtxIm-EFpRTTiuaj&KWzUEt|Ug|;* z#gxBHY{5ike-4f&CuSDb;1N!p-k{BgJ%tNne0HD_6$73+6bk>jm?KVp1rG)?<>-h~ z4u(>i&-er7=;2R19b?Qskw0sGG=DwH(b~Y0bTV&6-*b7W@Wt02z5g9++LfF&m>MVZ=3I0l zZ_-u&7vAI-f5%&dwepi$!*2vJGAj&g%AfJ3ZaL7%)Dvu67@kWAfBOF_I}-3Hi|hZ- zvPlRKau5=dK>mazgv}iY3K&_A4O9*h2_Q$=n1djMD+z*VvqCo_s8ymF6t!EbGzO#; z#UNT(PA{q)wpH=iAW=>WiWX|XzBlv!&E{v*>U`hsn|brzoNs2{%s>D8am>+_bwt)u z=|;Ol6wp&f0oBF>_B0A;qCr4iHaTTM{bfS#@ojS!Y@&1tH4JahvvSOdO_YN3)=BY% ziOt#7nz>(y=nBShA1HQ+LPR~A^*oexjFCG;DWVO1sjpoxeJ?)mXE_xmhPm0K4|C7o zdHL_vKGB2GZkq>Al1tH84qS?nBKio}e@c#!Bj91#1@cUS5BaAW8!vRF>eo3acAf*3Q=$KQiJ}gmqadY?l>>?R-)eQrH0d8-9E)Hv$%(L zopcTr4b+~8sT$s+lvbpc7h2#QasI+SIPf~OPaRQLGBSxNx1x>2`UkPPdS0m9q=8vhhGV8_)?wv6zb|N z3!~~$S1(&8Z19TSQC5TAC}QD-a-qowJP2=C)6GMzR*!vgspL($PuSpEETQ5sF^X#v8tC=!R+0#Bw+1(bWz1}`f+u0UpeWiVz zb-NxHANF$lDEk&Ys!zBBEb@WSdyC@O1aT8OIYu4a!!zBg*2zP@1e1+W;V$qE2V-Ag zghPm{2fi^4Ca}~9G*uM|?<%3iDrSeHQ-p5#`ZhvOn4}_NFA$N|vyw98q~@2@wF!YO$=PZ$6yc7N7tI#mldDJd8xH_ z)SWb-ZetF|w5a8!LNv0CHPzmXk*M72#U;gOSz99r)pzS&HIZ3U`ET~Bsj7oNuvhKR zT=^o%Tp?L^6&(L#^~8o=gQg@3s9wm<*oAY40?eewlf0_kPbPyOIR zsI0uUADd8i4$6}J@|t%qBvP_=CoNpo`#N4ahzWJK!`gq8SlA$lYZ%mNS0om`kK}{Z zevnwOZRCT6#|M~hj2+f$RHLYKz|tz}8@TT9-yBv4^5+k$-FW;e)y%gaRwL9Oxoa2* z@AboKclAGBe+YB`+b3Xe3v^e%^@*^GKvcvLd{W>hfs-qKUGSiRb>V~3={KQn&>)NP z7p>wqgzFg1B66eRScbPrCZd_@`Wl!PrW{dchdaf&?~Js30;ce{j;N0X z0v-;Hs`$*KYEruE4WVMe?G{q8(1f$-LG4wkVuAJ}!qzwWmZNHXq$oM)Z7?_(wHdsf z?>VZb_SE3!iF`dVZ*jndD3Ot^ocB2f89Dxpt1#M%CWY0Tk<#E*SY^iB_=014Mjpji zmf@!C#$#%Bk|P;j#4=xEGPC}R1Fmm}moo7Ek=&~?+k?~j50EWWHuAXRYIL~c8ShtK zL?*6{yx_Q=iTyjNg-QuC7x{Dzl!%;%1Y?OL3Cb zuWX61V-{)ep~b!A_et$9k$}nGD*jog4HZ784I*9ZQ15Aj6fKy1+D;oH!Rlr%Y)*it zIk$zxHL6fn%{qg2CTP0tRHMOkn=%2b*62HI$aI^dpncU`6GYYc(f(?TteWE)->SJM zH^O`)44VY#8E+im0AO8xnp0t-LBX zCusL=r2`*X4T7hcxZA)D`=ARovW_i*BrjuStBMC$r+gk@iNx`HcTh#xJ$pA_aD@n` zE$ycERkRLkxA)Q?U|rmL9&he9z?*D>Yptb5&KaUB?6yW2O$B(g(pelJ%@Jn>_a2f@ zwMtDp1Jx1DrkxKd`&yqZ-hJiS>PMniiqiwV_Vze=VgMP46s<4N>4Er&;ElD9a>9-S zu4w6>C%@%?)!viYQSI&h+SlHZ^?z#b#@gFgK&RK>j48_M%KL@2Uv8|ut84q(JD&8d zy+6@@@id9HEB$|owmrTh(e^~OueqZ6h_1s^=*4?Ofjl^TjuC z!3@C>q+F8OpS1HUpMn{Ozo6NSzWv^a5=&^=?mDvzzLA4^jsv#Xa;7tHld%Ci`P-kV z9{|t#&((zqTl6>S6X9{X<>FH=qHZGU*Lms}YC`8mN_sn=^o4p0AGk^ltIHYJD+v!H zGtXlWQIlVXM%AxBibWN^)h(_+9{B>U>^gps*B^sDYUnMF%XEEF&^fxuYl~)K`!@{U z7z!el%GFKAhzpH^)^ibVBleaL6kOlHp1L~o)YkLx;(<)*g3pyiS%!1+O5$0M+SF}b zurpgfr9Q&9Hp8tM*Lv=0Rx|P^is|V|`kF_b>TZ#${Z4irhaR`YEq)uFShh4S)1ssaa9vOC_0Yz~;asidIfD`D_e zw(6l(stwLyL{VKM^bTuzlnXtlY*o}lP=>&-pMd8!CP+!r74R`%s=U7yi)>xG$r;() z>6E$PU8mXgpbdQq4bQn#obNihpwKFL&?z;ovs30+P|I&QrG6Hup^U)2ajiuim+4k| zw*)QfS{1bv6|sVQb0L*nsHhAds?NR4uIMf2eu6*K0vp@?Kl0rzYGzm4h{n@VP+ho4 zTFI}psCmhv?gy9T6r?y;)|*GoZ87C_Ry)6A!B#ybTean8KItoUNLTYfi_ToZ*MFtP zO;j8SXH0nygH;o=8WCWFSEM9|4Jb3uOMmhY7O@eQ*_!9U1yft2XXUAMFvQq+F*`cN z`My)Om9~O+`WmiI$nwqL*h!i}LqdOO@tp7`cjH)i+Rp->3uo>%|I|lRZ=hR`nM4g4*)^oGv^WgL9ojD@9@TLsc;6tnO)>iMN~xaqjx-*3L7j?3U=TXRT;LqFvR=IqWcMvVUNT>I zLA?|qh>}ypm=^=b9m?y!QO|V|5w@NpV)wt`25?$wQ|d+aSRlSn(E4xn>%jSt{v(Gc zG@ZSozQO{_AXK|)I)C9uRZBPjz43I{Ae6JHQX%v+;W59>a*=&Ylm2>Vre0&b(S+-gYfNB;QU_VUfgcE3Y^y( zo2k)8Jk^u+$Gjo}AG+zO0+twRJAudgaP>;8h1UCbEMvXY8Z+kGa7iR&8qdgl4rVl-kF+&jTzNTN-P&qtZU}+_ zC^B%*!}r_*PHiYOt4Et3w8c(wDp8_5fq4;?KXi`>(!zOp05(zTVBV9l!T~}IYHem) zMD3J_QqQ3BA~W=rt^843ls;; z`vRL10v4^p2fJjbpc~k;4emqI*Wc;D7*kZCeo}v6cGn;8iX>!^gE*L>P zoLWr`v7|0{}?*iCR%U6H$<#9Fn z@@#scjR(y3Tn=FKEw#`4(p$Is(id!Kqjyi@YXVuan!>jQvL)$d>wMX?jlOItziVT2 z6~F_aKAl-2Yk0J2L}#{KjhKQh9B_xz_F#c5zTL^+4+eRg1`$E07dKrG2C}h&tRPR2 z37K%s9kKjmRX~Y+n(=t`>cw#jI5auD31f;ZSou&W=t*%4Rz4I|)T1aAJ`4YvGwM6E zboR$5_`a^plCF)F2YT&eS3QbyrjD+Q+@V|>9R-pR5!BGiqr0)4?9df{tQ)gTJaiUr zU!*~|iE=ph=>l=+>ua_lgw^)y*s?R%Y=d+;-lHhKC9RIjfRZ+?4q?mGCQk^{e!)K| zXsnj6?!m(Nnp74Nt|%@QWK&UM@ef>gt`22s{BSBu?>m#?U}g|*F@-x*_&%4)WBaom zVa7!Ad2@djAAA2=lzVv7p6GShb-x0ZLfLrjat8$W^_Gmhxd%(isVFKgpSz%Rc4bvj zF$`(p8av<&2jxQHvtn5$wctUX2*4!%ax_abK@{Jd%<_ci%VcH~p0pH} zS7YP~LoWFF!(+-uJU-?GyApo!n3j<~3UEH@*C={%F~VO4n79vvmmcx{=)sJ#UwXvf zNDrq6C=UKIK>UpiVD%dCIq);q4DtTb$pn0!A9}>6+WkZf1sp~iGeCTTAN+8@`703O zleja2m8EFK3zw8u1_J`zb1zCkff+-%?)v}>gG>T5K!=0K48KWJa&m9x=15kYvz|y`A0u4Q zOOl0x3bhiP6id9ypN?b$G7t@yw;V`@LXYk)3Nsm0X6RvlHIjYMe^}$sCBM{@WreLK z@}G!da5k=!@+Abno5%)P zXDq3%tg5_wZpNab1#^pMY2`&rsx&Ql?w@6I>TAVsC=59ZSEGmd)A`KSC0N-;h++Ip zKI?avvQ6^q1I$ZL{Mnhgnb{dd^B0vDWexcEvoo_ZapG9NUFCIFmOB(=d>iqk5KTv`PvZo|fh1+OOUR36GaFCV zV6_Q-Mdf#DEMIu)G-ithj39=Mh;S3&A8Uq`-)XQ483`srB+d^;d?Da)HZbCGDzo^( zPX*i{KX_1`6l_jPr$*6BHobj>7eAu|JbWj^Z$XOzp8!8&K^FoJm&NvYScMh?5+|+p z5fYDmVZ<*1oWB}Z0Y2RiJ>qdHHl|YzxM4U-A%bsCWcg$LQS|e}xfF2zazZ@i#0T_c z`8RZ~0|-#|jT!wGa5$!ncxMOrrvdNNiQc~YJ>b*Y(rN45KL8S5^SB{{&4BZl@yi|H zw|0Qv0r(rG76#R86d@)hzAT=F@Gpk2u*ilcIWADT(BZ<@nOA76Z_Sz#Ij+_d+(htI zf(Hm5Bj_P`>m12<8^Lmd%LvvJJVo#uf~^E&$_0O#a58QLSIh&2X0lk3_&SAqMjnvOV z+xF(R-mJ2G)f+OQ@iHAn1qsHMH{!qTB1L4uV%aJVg7pNq5V z{IN6^9Cq`YGT%bVHv?C`82%n^GECuYT>lG1fI|}95d5Nzg^;G1*x@KQbPw zcf`U9`VGvgTvD6`N@8ghu9io3%ZkDof^b4I!G|kn6)xV&ygicQE)g$lid`UOyjL#k z9_=9#oXyd}*J+i(0I^la@h6K|Z{~&tc{nV{)?79!BV?~kQdfZ916pi6BmOYpqWG*Z zmKJG@dLN=Ro}a?{h8d%d^PB-JtHy}_J95C!A0B6yZ`aAzy+ZIh!A^A&A51WmU{8W^ z1QQ9SN;p!PjqC=v$H!S9NrY;0N1!<=sY^-${a32!?Ey_@vDW z|6>8G9ZdXVkQp4#`!G8zi8~~nh2S89lL;=_fm7T7{?uqTlf4Zp%V<`BaOfCT%ie+7 zjbTe;-jQXSj|qb-gj!(Q6CwW2Uol%v!<#abZ3JBecM^0HeA^Izgu)*Y^cdn#Q#kRj zR0)E)1cyjiql_TLZ3HI~oKEm=g7*-NA-II#eFRq;;@41k-ELWcMuPhYej*^KINuT? zc#kAZBshfNB!c(o&@Jg!5`2c>c7pE`JW23B1jF}AJ`2GS2qAxEIw6)2Ttjdp!CeGx z%Zf`ERn1+f%YExUnV>GgI5?VYi%`cx*J=Na^kSni;!TC`AIp|@(NgbT zUR7GD6;_ru4IIaMs9`7mCgn$8St4*79mD61XT5u0?jV0ST!IrIeWXl_b-ypum@JE- zBm>0p0eC)g0xZPnSvvt{1oXT&fmN7}d;ns6J80nGaUk2B_y_J7{BZg+;^8ag;=IR* zF9v*uANn%Dqc&)yp9gr{mk_?joAG>z$Zd=8;um(1&?3O2;%v;Is)Kaa0Up<>_ViH1 z)ewQpb@@@*65tgM2>IHHtkm@QQL!&{ntB}redZ3pIKcBIcw$c1(_hV}w73g!T+xdc^yq#|@Id3ZNEtV+CL;Nb4X2#QVztS3Q3WJ!yFLPaW*T^cz);vc@I)^9Sjy>Gqz9J+6R#@gJFA@qnLYx- zv38inqCZjj8+KNfWYA()ed3PDoui5+D5 zBc^UTn^HfUWoZGo%kt>l`Zym~C-G8wP8!bQOsSu%{FNe>KmOMRGVUINO9?(ka1+5@ zV%3zZ*--J1zLX*q2C81Oi-c=|T32ATlp_#`U2 zzCP;kwYwz!-2@#3u_{sxjp;xQb$MWdodpwYYO_pYBIXNDpI`wmCfJ$=BG4z;T@=a3{fk5Iji`G-V!}#hj+SaDN83 z-ebViF2{kCBbz7jdWYz6GT}QBj3FrZa8H-8?gQ4JlC1g|tOj|+Hr0~^uW&wM%1@NA zj0m`iib!Sh<6w52S=R1Ti8@Xo90ICx$uWwtwmzLKP3UkNN(a4>BK2sRBJ0F)OV zlyEn}lLUVt7(#TJI9q~qd<8j_!O0VN90EgsR~EDn>xKUHLWvjWyz@#+w4y4lU%zw> zF53uxoz6^Q6QwtVpfR6RN!Qi8NCSdzr~nD+oX&3N+8h>LrTU67O?S*=QK~8Q94sO8S$^Nb^D@CMl1zb5 zbvn?iXK)3I{N8-ldq4w4;2eN1X`>|UB!kM^h9V Date: Thu, 26 Aug 2021 20:00:35 +0800 Subject: [PATCH 28/87] Update README --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e97de71..e28e783 100644 --- a/README.md +++ b/README.md @@ -5,12 +5,8 @@ rCore-Tutorial version 3.x ### Binaries -* rustc 1.56.0-nightly (08095fc1f 2021-07-26) +* rustc 1.56.0-nightly (b03ccace5 2021-08-24) * qemu: 5.0.0 -* rustsbi-lib: 0.2.0-alpha.4 - - rustsbi-qemu: d4968dd2 - - rustsbi-k210: b689314e +* rustsbi: qemu[7d71bfb7] k210[563144b0] From 37346c8d0f5a0cedbebae2d05c7998c579ee1c1b Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 8 Sep 2021 00:26:22 +0800 Subject: [PATCH 29/87] Remove spin::Mutex in frame_allocator and memory_set. --- os/Cargo.toml | 1 - os/src/mm/frame_allocator.rs | 13 +++++++------ os/src/mm/memory_set.rs | 10 +++++----- os/src/mm/mod.rs | 2 +- os/src/task/task.rs | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/os/Cargo.toml b/os/Cargo.toml index 588df75..f8cbacd 100644 --- a/os/Cargo.toml +++ b/os/Cargo.toml @@ -10,7 +10,6 @@ edition = "2018" riscv = { git = "https://github.com/rcore-os/riscv", features = ["inline-asm"] } lazy_static = { version = "1.4.0", features = ["spin_no_std"] } buddy_system_allocator = "0.6" -spin = "0.7.0" bitflags = "1.2.1" xmas-elf = "0.7.0" diff --git a/os/src/mm/frame_allocator.rs b/os/src/mm/frame_allocator.rs index c17385f..3415235 100644 --- a/os/src/mm/frame_allocator.rs +++ b/os/src/mm/frame_allocator.rs @@ -1,6 +1,6 @@ use super::{PhysAddr, PhysPageNum}; use alloc::vec::Vec; -use spin::Mutex; +use crate::sync::UPSafeCell; use crate::config::MEMORY_END; use lazy_static::*; use core::fmt::{self, Debug, Formatter}; @@ -87,8 +87,9 @@ impl FrameAllocator for StackFrameAllocator { type FrameAllocatorImpl = StackFrameAllocator; lazy_static! { - pub static ref FRAME_ALLOCATOR: Mutex = - Mutex::new(FrameAllocatorImpl::new()); + pub static ref FRAME_ALLOCATOR: UPSafeCell = unsafe { + UPSafeCell::new(FrameAllocatorImpl::new()) + }; } pub fn init_frame_allocator() { @@ -96,20 +97,20 @@ pub fn init_frame_allocator() { fn ekernel(); } FRAME_ALLOCATOR - .lock() + .exclusive_access() .init(PhysAddr::from(ekernel as usize).ceil(), PhysAddr::from(MEMORY_END).floor()); } pub fn frame_alloc() -> Option { FRAME_ALLOCATOR - .lock() + .exclusive_access() .alloc() .map(|ppn| FrameTracker::new(ppn)) } fn frame_dealloc(ppn: PhysPageNum) { FRAME_ALLOCATOR - .lock() + .exclusive_access() .dealloc(ppn); } diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index f231150..ad3986a 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -7,7 +7,7 @@ use alloc::vec::Vec; use riscv::register::satp; use alloc::sync::Arc; use lazy_static::*; -use spin::Mutex; +use crate::sync::UPSafeCell; use crate::config::{ MEMORY_END, PAGE_SIZE, @@ -30,9 +30,9 @@ extern "C" { } lazy_static! { - pub static ref KERNEL_SPACE: Arc> = Arc::new(Mutex::new( - MemorySet::new_kernel() - )); + pub static ref KERNEL_SPACE: Arc> = Arc::new(unsafe { + UPSafeCell::new(MemorySet::new_kernel() + )}); } pub struct MemorySet { @@ -290,7 +290,7 @@ bitflags! { #[allow(unused)] pub fn remap_test() { - let mut kernel_space = KERNEL_SPACE.lock(); + let mut kernel_space = KERNEL_SPACE.exclusive_access(); let mid_text: VirtAddr = ((stext as usize + etext as usize) / 2).into(); let mid_rodata: VirtAddr = ((srodata as usize + erodata as usize) / 2).into(); let mid_data: VirtAddr = ((sdata as usize + edata as usize) / 2).into(); diff --git a/os/src/mm/mod.rs b/os/src/mm/mod.rs index 04af2e1..bb04aea 100644 --- a/os/src/mm/mod.rs +++ b/os/src/mm/mod.rs @@ -15,5 +15,5 @@ pub use memory_set::remap_test; pub fn init() { heap_allocator::init_heap(); frame_allocator::init_frame_allocator(); - KERNEL_SPACE.lock().activate(); + KERNEL_SPACE.exclusive_access().activate(); } diff --git a/os/src/task/task.rs b/os/src/task/task.rs index b08d82a..47368db 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -29,7 +29,7 @@ impl TaskControlBlock { // map a kernel-stack in kernel space let (kernel_stack_bottom, kernel_stack_top) = kernel_stack_position(app_id); KERNEL_SPACE - .lock() + .exclusive_access() .insert_framed_area( kernel_stack_bottom.into(), kernel_stack_top.into(), @@ -47,7 +47,7 @@ impl TaskControlBlock { *trap_cx = TrapContext::app_init_context( entry_point, user_sp, - KERNEL_SPACE.lock().token(), + KERNEL_SPACE.exclusive_access().token(), kernel_stack_top, trap_handler as usize, ); From 71797b294c9c7615c7d70dbf94c2247810fce41f Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 20 Oct 2021 13:28:55 -0700 Subject: [PATCH 30/87] rust->nightly-2021-10-15,cargo-binutils->0.3.3 --- os/Makefile | 2 +- rust-toolchain | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/os/Makefile b/os/Makefile index 5330215..35049e0 100644 --- a/os/Makefile +++ b/os/Makefile @@ -40,7 +40,7 @@ endif env: (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) - cargo install cargo-binutils --vers ~0.2 + cargo install cargo-binutils --vers =0.3.3 rustup component add rust-src rustup component add llvm-tools-preview diff --git a/rust-toolchain b/rust-toolchain index 1c5af26..fd47275 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-08-25 +nightly-2021-10-15 From a8ccba1aed37176a5a98e464d05a1630eb4094cc Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 13 Nov 2021 02:55:14 -0800 Subject: [PATCH 31/87] Now construction of PA/VA only uses 56/39 bits. --- os/src/config.rs | 2 +- os/src/mm/address.rs | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/os/src/config.rs b/os/src/config.rs index 2fea79d..2c26236 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -18,4 +18,4 @@ pub fn kernel_stack_position(app_id: usize) -> (usize, usize) { pub const CLOCK_FREQ: usize = 403000000 / 62; #[cfg(feature = "board_qemu")] -pub const CLOCK_FREQ: usize = 12500000; \ No newline at end of file +pub const CLOCK_FREQ: usize = 12500000; diff --git a/os/src/mm/address.rs b/os/src/mm/address.rs index 90ec3aa..e6fc10f 100644 --- a/os/src/mm/address.rs +++ b/os/src/mm/address.rs @@ -2,6 +2,11 @@ use crate::config::{PAGE_SIZE, PAGE_SIZE_BITS}; use super::PageTableEntry; use core::fmt::{self, Debug, Formatter}; +const PA_WIDTH_SV39: usize = 56; +const VA_WIDTH_SV39: usize = 39; +const PPN_WIDTH_SV39: usize = PA_WIDTH_SV39 - PAGE_SIZE_BITS; +const VPN_WIDTH_SV39: usize = VA_WIDTH_SV39 - PAGE_SIZE_BITS; + /// Definitions #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] pub struct PhysAddr(pub usize); @@ -43,16 +48,16 @@ impl Debug for PhysPageNum { /// usize -> T: usize.into() impl From for PhysAddr { - fn from(v: usize) -> Self { Self(v) } + fn from(v: usize) -> Self { Self(v & ( (1 << PA_WIDTH_SV39) - 1 )) } } impl From for PhysPageNum { - fn from(v: usize) -> Self { Self(v) } + fn from(v: usize) -> Self { Self(v & ( (1 << PPN_WIDTH_SV39) - 1 )) } } impl From for VirtAddr { - fn from(v: usize) -> Self { Self(v) } + fn from(v: usize) -> Self { Self(v & ( (1 << VA_WIDTH_SV39) - 1 )) } } impl From for VirtPageNum { - fn from(v: usize) -> Self { Self(v) } + fn from(v: usize) -> Self { Self(v & ( (1 << VPN_WIDTH_SV39) - 1 )) } } impl From for usize { fn from(v: PhysAddr) -> Self { v.0 } @@ -187,4 +192,4 @@ impl Iterator for SimpleRangeIterator where } } } -pub type VPNRange = SimpleRange; \ No newline at end of file +pub type VPNRange = SimpleRange; From 7eec642398379d591bb0ffc194b0dfde34c83c7e Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sat, 20 Nov 2021 16:26:06 +0800 Subject: [PATCH 32/87] update .gitignore, README.md, dev-env-info.md --- .gitignore | 12 ++++++--- README.md | 67 ++++++++++++++++++++++++++++++++++++++++++++----- dev-env-info.md | 18 +++++++++++++ 3 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 dev-env-info.md diff --git a/.gitignore b/.gitignore index c44aa4f..aa359a4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,16 @@ -.idea/* -os/target/* -os/.idea/* +.idea +Cargo.lock +target os/src/link_app.S os/last-* os/Cargo.lock +user/build user/target/* user/.idea/* user/Cargo.lock +easy-fs/Cargo.lock +easy-fs/target/* +easy-fs-fuse/Cargo.lock +easy-fs-fuse/target/* tools/ +pushall.sh \ No newline at end of file diff --git a/README.md b/README.md index e28e783..e2dc4e3 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,67 @@ # rCore-Tutorial-v3 -rCore-Tutorial version 3.x +rCore-Tutorial version 3.5. See the [Documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/). -## Dependency +## news +- 2021.11.20: Now we are updating our labs. Please checkout chX-dev Branches for our current new labs. (Notice: please see the [Dependency] section in the end of this doc) -### Binaries +## Overview -* rustc 1.56.0-nightly (b03ccace5 2021-08-24) +This project aims to show how to write an **Unix-like OS** running on **RISC-V** platforms **from scratch** in **[Rust](https://www.rust-lang.org/)** for **beginners** without any background knowledge about **computer architectures, assembly languages or operating systems**. -* qemu: 5.0.0 +## Features -* rustsbi: qemu[7d71bfb7] k210[563144b0] +* Platform supported: `qemu-system-riscv64` simulator or dev boards based on [Kendryte K210 SoC](https://canaan.io/product/kendryteai) such as [Maix Dock](https://www.seeedstudio.com/Sipeed-MAIX-Dock-p-4815.html) +* OS + * concurrency of multiple processes + * preemptive scheduling(Round-Robin algorithm) + * dynamic memory management in kernel + * virtual memory + * a simple file system with a block cache + * an interactive shell in the userspace +* **only 4K+ LoC** +* [A detailed documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/) in spite of the lack of comments in the code(English version is not available at present) + +## Run our project + +TODO: + +## Working in progress + +Now we are still updating our project, you can find latest changes on branches `chX-dev` such as `ch1-dev`. We are intended to publish first release 3.5.0 after completing most of the tasks mentioned below. + +Overall progress: ch7 + +### Completed + +* [x] automatically clean up and rebuild before running our project on a different platform +* [x] fix `power` series application in early chapters, now you can find modulus in the output +* [x] use `UPSafeCell` instead of `RefCell` or `spin::Mutex` in order to access static data structures and adjust its API so that it cannot be borrowed twice at a time(mention `& .exclusive_access().task[0]` in `run_first_task`) +* [x] move `TaskContext` into `TaskControlBlock` instead of restoring it in place on kernel stack(since ch3), eliminating annoying `task_cx_ptr2` +* [x] replace `llvm_asm!` with `asm!` +* [x] expand the fs image size generated by `rcore-fs-fuse` to 128MiB +* [x] add a new test named `huge_write` which evaluates the fs performance(qemu\~500KiB/s k210\~50KiB/s) +* [x] flush all block cache to disk after a fs transaction which involves write operation +* [x] replace `spin::Mutex` with `UPSafeCell` before SMP chapter +* [x] add codes for a new chapter about synchronization & mutual exclusion(uniprocessor only) + +### Todo(High priority) + +* [ ] support Allwinner's RISC-V D1 chip +* [ ] bug fix: we should call `find_pte` rather than `find_pte_create` in `PageTable::unmap` +* [ ] bug fix: check validity of level-3 pte in `find_pte` instead of checking it outside this function +* [ ] use old fs image optionally, do not always rebuild the image +* [ ] add new system calls: getdents64/fstat +* [ ] shell functionality improvement(to be continued...) +* [ ] give every non-zero process exit code an unique and clear error type +* [ ] effective error handling of mm module + +### Todo(Low priority) + +* [ ] rewrite practice doc and remove some inproper questions +* [ ] provide smooth debug experience at a Rust source code level +* [ ] format the code using official tools + + +### Crates + +We will add them later. diff --git a/dev-env-info.md b/dev-env-info.md new file mode 100644 index 0000000..f76470a --- /dev/null +++ b/dev-env-info.md @@ -0,0 +1,18 @@ +# rCore-Tutorial-v3 +rCore-Tutorial version 3.x + +## Dependency + +### Binaries + +* rustc: 1.57.0-nightly (e1e9319d9 2021-10-14) + +* cargo-binutils: 0.3.3 + +* qemu: 5.0.0 + +* rustsbi-lib: 0.2.0-alpha.4 + + rustsbi-qemu: d4968dd2 + + rustsbi-k210: b689314e From 378e61f0fdc69a63309861895523870312716fe4 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 27 Nov 2021 01:54:31 -0800 Subject: [PATCH 33/87] Update os/Makefile, rm ... -f -> rm -f ... --- os/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/os/Makefile b/os/Makefile index 35049e0..505d37e 100644 --- a/os/Makefile +++ b/os/Makefile @@ -33,9 +33,9 @@ build: env switch-check $(KERNEL_BIN) switch-check: ifeq ($(BOARD), qemu) - (which last-qemu) || (rm last-k210 -f && touch last-qemu && make clean) + (which last-qemu) || (rm -f last-k210 && touch last-qemu && make clean) else ifeq ($(BOARD), k210) - (which last-k210) || (rm last-qemu -f && touch last-k210 && make clean) + (which last-k210) || (rm -f last-qemu && touch last-k210 && make clean) endif env: From ac136366fbe0a7a6b3e491d0ea4b05315732fb99 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 22 Dec 2021 03:26:36 -0800 Subject: [PATCH 34/87] Bump to Rust nightly 2021-12-15 --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index fd47275..c9f8682 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-10-15 +nightly-2021-12-15 From 76b6ba65ac9918a9b3af0fcbc5b139285f00db90 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 1 Jan 2022 01:48:25 -0800 Subject: [PATCH 35/87] Bump to rust nightly-2022-01-01, feature global_asm,asm->stable --- os/src/main.rs | 6 +++--- os/src/mm/memory_set.rs | 3 ++- os/src/sbi.rs | 2 ++ os/src/task/switch.rs | 5 +++-- os/src/trap/mod.rs | 1 + rust-toolchain | 2 +- user/src/lib.rs | 1 - user/src/syscall.rs | 4 +++- 8 files changed, 15 insertions(+), 9 deletions(-) diff --git a/os/src/main.rs b/os/src/main.rs index 02e62a0..3d06bb1 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -1,7 +1,5 @@ #![no_std] #![no_main] -#![feature(global_asm)] -#![feature(asm)] #![feature(panic_info_message)] #![feature(alloc_error_handler)] @@ -23,6 +21,8 @@ mod timer; mod sync; mod mm; +use core::arch::global_asm; + global_asm!(include_str!("entry.asm")); global_asm!(include_str!("link_app.S")); @@ -52,4 +52,4 @@ pub fn rust_main() -> ! { timer::set_next_trigger(); task::run_first_task(); panic!("Unreachable in rust_main!"); -} \ No newline at end of file +} diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index ad3986a..68d4221 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -15,6 +15,7 @@ use crate::config::{ TRAP_CONTEXT, USER_STACK_SIZE }; +use core::arch::asm; extern "C" { fn stext(); @@ -307,4 +308,4 @@ pub fn remap_test() { false, ); println!("remap_test passed!"); -} \ No newline at end of file +} diff --git a/os/src/sbi.rs b/os/src/sbi.rs index 276c199..c8ecbf1 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -1,5 +1,7 @@ #![allow(unused)] +use core::arch::asm; + const SBI_SET_TIMER: usize = 0; const SBI_CONSOLE_PUTCHAR: usize = 1; const SBI_CONSOLE_GETCHAR: usize = 2; diff --git a/os/src/task/switch.rs b/os/src/task/switch.rs index fa75be1..dd3a2d3 100644 --- a/os/src/task/switch.rs +++ b/os/src/task/switch.rs @@ -1,6 +1,7 @@ -global_asm!(include_str!("switch.S")); - use super::TaskContext; +use core::arch::global_asm; + +global_asm!(include_str!("switch.S")); extern "C" { pub fn __switch( diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index e6baba5..9bf0b1e 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -21,6 +21,7 @@ use crate::task::{ }; use crate::timer::set_next_trigger; use crate::config::{TRAP_CONTEXT, TRAMPOLINE}; +use core::arch::{global_asm, asm}; global_asm!(include_str!("trap.S")); diff --git a/rust-toolchain b/rust-toolchain index c9f8682..a8a6159 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2021-12-15 +nightly-2022-01-01 diff --git a/user/src/lib.rs b/user/src/lib.rs index 1fae0fd..5da90d7 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -1,5 +1,4 @@ #![no_std] -#![feature(asm)] #![feature(linkage)] #![feature(panic_info_message)] diff --git a/user/src/syscall.rs b/user/src/syscall.rs index ed3d16a..b009569 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -1,3 +1,5 @@ +use core::arch::asm; + const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; @@ -31,4 +33,4 @@ pub fn sys_yield() -> isize { pub fn sys_get_time() -> isize { syscall(SYSCALL_GET_TIME, [0, 0, 0]) -} \ No newline at end of file +} From 55cda2a855a8f55d2bb3acca129d7cf48b6e9e23 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 2 Jan 2022 14:12:31 -0800 Subject: [PATCH 36/87] User base 0x0->0x10000 --- user/src/linker.ld | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user/src/linker.ld b/user/src/linker.ld index 7273618..02f7b6b 100644 --- a/user/src/linker.ld +++ b/user/src/linker.ld @@ -2,7 +2,7 @@ OUTPUT_ARCH(riscv) ENTRY(_start) -BASE_ADDRESS = 0x0; +BASE_ADDRESS = 0x10000; SECTIONS { @@ -29,4 +29,4 @@ SECTIONS *(.eh_frame) *(.debug*) } -} \ No newline at end of file +} From 880656d6a09733023e0f07ea812104d0368aad30 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 3 Jan 2022 19:37:32 -0800 Subject: [PATCH 37/87] Kernel cannot dump now. --- os/src/trap/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 9bf0b1e..9eb0d79 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -58,11 +58,11 @@ pub fn trap_handler() -> ! { } Trap::Exception(Exception::StoreFault) | Trap::Exception(Exception::StorePageFault) => { - println!("[kernel] PageFault in application, bad addr = {:#x}, bad instruction = {:#x}, core dumped.", stval, cx.sepc); + println!("[kernel] PageFault in application, bad addr = {:#x}, bad instruction = {:#x}, kernel killed it.", stval, cx.sepc); exit_current_and_run_next(); } Trap::Exception(Exception::IllegalInstruction) => { - println!("[kernel] IllegalInstruction in application, core dumped."); + println!("[kernel] IllegalInstruction in application, kernel killed it."); exit_current_and_run_next(); } Trap::Interrupt(Interrupt::SupervisorTimer) => { From 3503a177acaf7a99303a8fd2192a455afc913277 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 13 Jan 2022 17:04:23 -0800 Subject: [PATCH 38/87] Now PageTable::unmap calls PageTable::find_pte instead of PageTable::find_pte_create. --- os/src/mm/page_table.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/os/src/mm/page_table.rs b/os/src/mm/page_table.rs index 31f564c..0315ff9 100644 --- a/os/src/mm/page_table.rs +++ b/os/src/mm/page_table.rs @@ -93,12 +93,12 @@ impl PageTable { } result } - fn find_pte(&self, vpn: VirtPageNum) -> Option<&PageTableEntry> { + fn find_pte(&self, vpn: VirtPageNum) -> Option<&mut PageTableEntry> { let idxs = vpn.indexes(); let mut ppn = self.root_ppn; - let mut result: Option<&PageTableEntry> = None; + let mut result: Option<&mut PageTableEntry> = None; for i in 0..3 { - let pte = &ppn.get_pte_array()[idxs[i]]; + let pte = &mut ppn.get_pte_array()[idxs[i]]; if i == 2 { result = Some(pte); break; @@ -118,7 +118,7 @@ impl PageTable { } #[allow(unused)] pub fn unmap(&mut self, vpn: VirtPageNum) { - let pte = self.find_pte_create(vpn).unwrap(); + let pte = self.find_pte(vpn).unwrap(); assert!(pte.is_valid(), "vpn {:?} is invalid before unmapping", vpn); *pte = PageTableEntry::empty(); } @@ -154,4 +154,4 @@ pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<& start = end_va.into(); } v -} \ No newline at end of file +} From 96ea0506b0461216c7a22fa807ece447d77ccc4a Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 19 Jan 2022 05:07:16 -0800 Subject: [PATCH 39/87] Update .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index aa359a4..770aba7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ Cargo.lock target os/src/link_app.S +os/src/linker.ld os/last-* os/Cargo.lock user/build @@ -13,4 +14,4 @@ easy-fs/target/* easy-fs-fuse/Cargo.lock easy-fs-fuse/target/* tools/ -pushall.sh \ No newline at end of file +pushall.sh From e3601918ba41c3a0a6177aa0a7c2a9b20c7ee4c5 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 20 Jan 2022 16:13:05 -0800 Subject: [PATCH 40/87] Bump Rust to nightly-2022-01-19 --- rust-toolchain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain b/rust-toolchain index a8a6159..925656d 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2022-01-01 +nightly-2022-01-19 From 3a120122baff660836c6388c404872866ff33872 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Fri, 21 Jan 2022 14:23:53 -0800 Subject: [PATCH 41/87] cargo clippy & fmt --- os/build.rs | 20 +++- os/src/console.rs | 4 +- os/src/lang_items.rs | 9 +- os/src/loader.rs | 14 ++- os/src/main.rs | 20 ++-- os/src/mm/address.rs | 132 ++++++++++++++-------- os/src/mm/frame_allocator.rs | 39 +++---- os/src/mm/heap_allocator.rs | 2 +- os/src/mm/memory_set.rs | 205 +++++++++++++++++++++-------------- os/src/mm/mod.rs | 16 +-- os/src/mm/page_table.rs | 16 +-- os/src/sbi.rs | 1 - os/src/sync/mod.rs | 2 +- os/src/sync/up.rs | 6 +- os/src/syscall/fs.rs | 4 +- os/src/syscall/mod.rs | 1 - os/src/syscall/process.rs | 7 +- os/src/task/context.rs | 1 - os/src/task/mod.rs | 37 +++---- os/src/task/switch.rs | 5 +- os/src/task/task.rs | 20 ++-- os/src/timer.rs | 6 +- os/src/trap/context.rs | 6 +- os/src/trap/mod.rs | 41 +++---- user/src/bin/00power_3.rs | 2 +- user/src/bin/03sleep.rs | 2 +- user/src/console.rs | 4 +- user/src/lang_items.rs | 9 +- user/src/lib.rs | 19 +++- 29 files changed, 361 insertions(+), 289 deletions(-) diff --git a/os/build.rs b/os/build.rs index 07a25c9..905e21e 100644 --- a/os/build.rs +++ b/os/build.rs @@ -1,5 +1,5 @@ +use std::fs::{read_dir, File}; use std::io::{Result, Write}; -use std::fs::{File, read_dir}; fn main() { println!("cargo:rerun-if-changed=../user/src/"); @@ -22,12 +22,16 @@ fn insert_app_data() -> Result<()> { .collect(); apps.sort(); - writeln!(f, r#" + writeln!( + f, + r#" .align 3 .section .data .global _num_app _num_app: - .quad {}"#, apps.len())?; + .quad {}"#, + apps.len() + )?; for i in 0..apps.len() { writeln!(f, r#" .quad app_{}_start"#, i)?; @@ -36,14 +40,18 @@ _num_app: for (idx, app) in apps.iter().enumerate() { println!("app_{}: {}", idx, app); - writeln!(f, r#" + writeln!( + f, + r#" .section .data .global app_{0}_start .global app_{0}_end .align 3 app_{0}_start: .incbin "{2}{1}" -app_{0}_end:"#, idx, app, TARGET_PATH)?; +app_{0}_end:"#, + idx, app, TARGET_PATH + )?; } Ok(()) -} \ No newline at end of file +} diff --git a/os/src/console.rs b/os/src/console.rs index 2bd5593..dda4911 100644 --- a/os/src/console.rs +++ b/os/src/console.rs @@ -1,5 +1,5 @@ -use core::fmt::{self, Write}; use crate::sbi::console_putchar; +use core::fmt::{self, Write}; struct Stdout; @@ -29,5 +29,3 @@ macro_rules! println { $crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?)); } } - - diff --git a/os/src/lang_items.rs b/os/src/lang_items.rs index 3f5462a..af3e515 100644 --- a/os/src/lang_items.rs +++ b/os/src/lang_items.rs @@ -1,10 +1,15 @@ -use core::panic::PanicInfo; use crate::sbi::shutdown; +use core::panic::PanicInfo; #[panic_handler] fn panic(info: &PanicInfo) -> ! { if let Some(location) = info.location() { - println!("[kernel] Panicked at {}:{} {}", location.file(), location.line(), info.message().unwrap()); + println!( + "[kernel] Panicked at {}:{} {}", + location.file(), + location.line(), + info.message().unwrap() + ); } else { println!("[kernel] Panicked: {}", info.message().unwrap()); } diff --git a/os/src/loader.rs b/os/src/loader.rs index 6d28474..1358c46 100644 --- a/os/src/loader.rs +++ b/os/src/loader.rs @@ -1,20 +1,22 @@ pub fn get_num_app() -> usize { - extern "C" { fn _num_app(); } + extern "C" { + fn _num_app(); + } unsafe { (_num_app as usize as *const usize).read_volatile() } } pub fn get_app_data(app_id: usize) -> &'static [u8] { - extern "C" { fn _num_app(); } + extern "C" { + fn _num_app(); + } let num_app_ptr = _num_app as usize as *const usize; let num_app = get_num_app(); - let app_start = unsafe { - core::slice::from_raw_parts(num_app_ptr.add(1), num_app + 1) - }; + let app_start = unsafe { core::slice::from_raw_parts(num_app_ptr.add(1), num_app + 1) }; assert!(app_id < num_app); unsafe { core::slice::from_raw_parts( app_start[app_id] as *const u8, - app_start[app_id + 1] - app_start[app_id] + app_start[app_id + 1] - app_start[app_id], ) } } diff --git a/os/src/main.rs b/os/src/main.rs index 3d06bb1..259a52a 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -10,16 +10,16 @@ extern crate bitflags; #[macro_use] mod console; -mod lang_items; -mod sbi; -mod syscall; -mod trap; -mod loader; mod config; +mod lang_items; +mod loader; +mod mm; +mod sbi; +mod sync; +mod syscall; mod task; mod timer; -mod sync; -mod mm; +mod trap; use core::arch::global_asm; @@ -32,10 +32,8 @@ fn clear_bss() { fn ebss(); } unsafe { - core::slice::from_raw_parts_mut( - sbss as usize as *mut u8, - ebss as usize - sbss as usize, - ).fill(0); + core::slice::from_raw_parts_mut(sbss as usize as *mut u8, ebss as usize - sbss as usize) + .fill(0); } } diff --git a/os/src/mm/address.rs b/os/src/mm/address.rs index e6fc10f..ef940b7 100644 --- a/os/src/mm/address.rs +++ b/os/src/mm/address.rs @@ -1,5 +1,5 @@ -use crate::config::{PAGE_SIZE, PAGE_SIZE_BITS}; use super::PageTableEntry; +use crate::config::{PAGE_SIZE, PAGE_SIZE_BITS}; use core::fmt::{self, Debug, Formatter}; const PA_WIDTH_SV39: usize = 56; @@ -48,35 +48,59 @@ impl Debug for PhysPageNum { /// usize -> T: usize.into() impl From for PhysAddr { - fn from(v: usize) -> Self { Self(v & ( (1 << PA_WIDTH_SV39) - 1 )) } + fn from(v: usize) -> Self { + Self(v & ((1 << PA_WIDTH_SV39) - 1)) + } } impl From for PhysPageNum { - fn from(v: usize) -> Self { Self(v & ( (1 << PPN_WIDTH_SV39) - 1 )) } + fn from(v: usize) -> Self { + Self(v & ((1 << PPN_WIDTH_SV39) - 1)) + } } impl From for VirtAddr { - fn from(v: usize) -> Self { Self(v & ( (1 << VA_WIDTH_SV39) - 1 )) } + fn from(v: usize) -> Self { + Self(v & ((1 << VA_WIDTH_SV39) - 1)) + } } impl From for VirtPageNum { - fn from(v: usize) -> Self { Self(v & ( (1 << VPN_WIDTH_SV39) - 1 )) } + fn from(v: usize) -> Self { + Self(v & ((1 << VPN_WIDTH_SV39) - 1)) + } } impl From for usize { - fn from(v: PhysAddr) -> Self { v.0 } + fn from(v: PhysAddr) -> Self { + v.0 + } } impl From for usize { - fn from(v: PhysPageNum) -> Self { v.0 } + fn from(v: PhysPageNum) -> Self { + v.0 + } } impl From for usize { - fn from(v: VirtAddr) -> Self { v.0 } + fn from(v: VirtAddr) -> Self { + v.0 + } } impl From for usize { - fn from(v: VirtPageNum) -> Self { v.0 } + fn from(v: VirtPageNum) -> Self { + v.0 + } } impl VirtAddr { - pub fn floor(&self) -> VirtPageNum { VirtPageNum(self.0 / PAGE_SIZE) } - pub fn ceil(&self) -> VirtPageNum { VirtPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) } - pub fn page_offset(&self) -> usize { self.0 & (PAGE_SIZE - 1) } - pub fn aligned(&self) -> bool { self.page_offset() == 0 } + pub fn floor(&self) -> VirtPageNum { + VirtPageNum(self.0 / PAGE_SIZE) + } + pub fn ceil(&self) -> VirtPageNum { + VirtPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) + } + pub fn page_offset(&self) -> usize { + self.0 & (PAGE_SIZE - 1) + } + pub fn aligned(&self) -> bool { + self.page_offset() == 0 + } } impl From for VirtPageNum { fn from(v: VirtAddr) -> Self { @@ -85,13 +109,23 @@ impl From for VirtPageNum { } } impl From for VirtAddr { - fn from(v: VirtPageNum) -> Self { Self(v.0 << PAGE_SIZE_BITS) } + fn from(v: VirtPageNum) -> Self { + Self(v.0 << PAGE_SIZE_BITS) + } } impl PhysAddr { - pub fn floor(&self) -> PhysPageNum { PhysPageNum(self.0 / PAGE_SIZE) } - pub fn ceil(&self) -> PhysPageNum { PhysPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) } - pub fn page_offset(&self) -> usize { self.0 & (PAGE_SIZE - 1) } - pub fn aligned(&self) -> bool { self.page_offset() == 0 } + pub fn floor(&self) -> PhysPageNum { + PhysPageNum(self.0 / PAGE_SIZE) + } + pub fn ceil(&self) -> PhysPageNum { + PhysPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) + } + pub fn page_offset(&self) -> usize { + self.0 & (PAGE_SIZE - 1) + } + pub fn aligned(&self) -> bool { + self.page_offset() == 0 + } } impl From for PhysPageNum { fn from(v: PhysAddr) -> Self { @@ -100,7 +134,9 @@ impl From for PhysPageNum { } } impl From for PhysAddr { - fn from(v: PhysPageNum) -> Self { Self(v.0 << PAGE_SIZE_BITS) } + fn from(v: PhysPageNum) -> Self { + Self(v.0 << PAGE_SIZE_BITS) + } } impl VirtPageNum { @@ -118,21 +154,15 @@ impl VirtPageNum { impl PhysPageNum { pub fn get_pte_array(&self) -> &'static mut [PageTableEntry] { let pa: PhysAddr = self.clone().into(); - unsafe { - core::slice::from_raw_parts_mut(pa.0 as *mut PageTableEntry, 512) - } + unsafe { core::slice::from_raw_parts_mut(pa.0 as *mut PageTableEntry, 512) } } pub fn get_bytes_array(&self) -> &'static mut [u8] { let pa: PhysAddr = self.clone().into(); - unsafe { - core::slice::from_raw_parts_mut(pa.0 as *mut u8, 4096) - } + unsafe { core::slice::from_raw_parts_mut(pa.0 as *mut u8, 4096) } } pub fn get_mut(&self) -> &'static mut T { let pa: PhysAddr = self.clone().into(); - unsafe { - (pa.0 as *mut T).as_mut().unwrap() - } + unsafe { (pa.0 as *mut T).as_mut().unwrap() } } } @@ -146,41 +176,57 @@ impl StepByOne for VirtPageNum { } #[derive(Copy, Clone)] -pub struct SimpleRange where - T: StepByOne + Copy + PartialEq + PartialOrd + Debug, { +pub struct SimpleRange +where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug, +{ l: T, r: T, } -impl SimpleRange where - T: StepByOne + Copy + PartialEq + PartialOrd + Debug, { +impl SimpleRange +where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug, +{ pub fn new(start: T, end: T) -> Self { assert!(start <= end, "start {:?} > end {:?}!", start, end); Self { l: start, r: end } } - pub fn get_start(&self) -> T { self.l } - pub fn get_end(&self) -> T { self.r } + pub fn get_start(&self) -> T { + self.l + } + pub fn get_end(&self) -> T { + self.r + } } -impl IntoIterator for SimpleRange where - T: StepByOne + Copy + PartialEq + PartialOrd + Debug, { +impl IntoIterator for SimpleRange +where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug, +{ type Item = T; type IntoIter = SimpleRangeIterator; fn into_iter(self) -> Self::IntoIter { SimpleRangeIterator::new(self.l, self.r) } } -pub struct SimpleRangeIterator where - T: StepByOne + Copy + PartialEq + PartialOrd + Debug, { +pub struct SimpleRangeIterator +where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug, +{ current: T, end: T, } -impl SimpleRangeIterator where - T: StepByOne + Copy + PartialEq + PartialOrd + Debug, { +impl SimpleRangeIterator +where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug, +{ pub fn new(l: T, r: T) -> Self { - Self { current: l, end: r, } + Self { current: l, end: r } } } -impl Iterator for SimpleRangeIterator where - T: StepByOne + Copy + PartialEq + PartialOrd + Debug, { +impl Iterator for SimpleRangeIterator +where + T: StepByOne + Copy + PartialEq + PartialOrd + Debug, +{ type Item = T; fn next(&mut self) -> Option { if self.current == self.end { diff --git a/os/src/mm/frame_allocator.rs b/os/src/mm/frame_allocator.rs index 3415235..37c0409 100644 --- a/os/src/mm/frame_allocator.rs +++ b/os/src/mm/frame_allocator.rs @@ -1,9 +1,9 @@ use super::{PhysAddr, PhysPageNum}; -use alloc::vec::Vec; -use crate::sync::UPSafeCell; use crate::config::MEMORY_END; -use lazy_static::*; +use crate::sync::UPSafeCell; +use alloc::vec::Vec; use core::fmt::{self, Debug, Formatter}; +use lazy_static::*; pub struct FrameTracker { pub ppn: PhysPageNum, @@ -61,22 +61,17 @@ impl FrameAllocator for StackFrameAllocator { fn alloc(&mut self) -> Option { if let Some(ppn) = self.recycled.pop() { Some(ppn.into()) + } else if self.current == self.end { + None } else { - if self.current == self.end { - None - } else { - self.current += 1; - Some((self.current - 1).into()) - } + self.current += 1; + Some((self.current - 1).into()) } } fn dealloc(&mut self, ppn: PhysPageNum) { let ppn = ppn.0; // validity check - if ppn >= self.current || self.recycled - .iter() - .find(|&v| {*v == ppn}) - .is_some() { + if ppn >= self.current || self.recycled.iter().find(|&v| *v == ppn).is_some() { panic!("Frame ppn={:#x} has not been allocated!", ppn); } // recycle @@ -87,18 +82,18 @@ impl FrameAllocator for StackFrameAllocator { type FrameAllocatorImpl = StackFrameAllocator; lazy_static! { - pub static ref FRAME_ALLOCATOR: UPSafeCell = unsafe { - UPSafeCell::new(FrameAllocatorImpl::new()) - }; + pub static ref FRAME_ALLOCATOR: UPSafeCell = + unsafe { UPSafeCell::new(FrameAllocatorImpl::new()) }; } pub fn init_frame_allocator() { extern "C" { fn ekernel(); } - FRAME_ALLOCATOR - .exclusive_access() - .init(PhysAddr::from(ekernel as usize).ceil(), PhysAddr::from(MEMORY_END).floor()); + FRAME_ALLOCATOR.exclusive_access().init( + PhysAddr::from(ekernel as usize).ceil(), + PhysAddr::from(MEMORY_END).floor(), + ); } pub fn frame_alloc() -> Option { @@ -109,9 +104,7 @@ pub fn frame_alloc() -> Option { } fn frame_dealloc(ppn: PhysPageNum) { - FRAME_ALLOCATOR - .exclusive_access() - .dealloc(ppn); + FRAME_ALLOCATOR.exclusive_access().dealloc(ppn); } #[allow(unused)] @@ -130,4 +123,4 @@ pub fn frame_allocator_test() { } drop(v); println!("frame_allocator_test passed!"); -} \ No newline at end of file +} diff --git a/os/src/mm/heap_allocator.rs b/os/src/mm/heap_allocator.rs index 2c7468f..b802bbd 100644 --- a/os/src/mm/heap_allocator.rs +++ b/os/src/mm/heap_allocator.rs @@ -1,5 +1,5 @@ -use buddy_system_allocator::LockedHeap; use crate::config::KERNEL_HEAP_SIZE; +use buddy_system_allocator::LockedHeap; #[global_allocator] static HEAP_ALLOCATOR: LockedHeap = LockedHeap::empty(); diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index 68d4221..35392e8 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -1,21 +1,15 @@ -use super::{PageTable, PageTableEntry, PTEFlags}; -use super::{VirtPageNum, VirtAddr, PhysPageNum, PhysAddr}; -use super::{FrameTracker, frame_alloc}; -use super::{VPNRange, StepByOne}; -use alloc::collections::BTreeMap; -use alloc::vec::Vec; -use riscv::register::satp; -use alloc::sync::Arc; -use lazy_static::*; +use super::{frame_alloc, FrameTracker}; +use super::{PTEFlags, PageTable, PageTableEntry}; +use super::{PhysAddr, PhysPageNum, VirtAddr, VirtPageNum}; +use super::{StepByOne, VPNRange}; +use crate::config::{MEMORY_END, PAGE_SIZE, TRAMPOLINE, TRAP_CONTEXT, USER_STACK_SIZE}; use crate::sync::UPSafeCell; -use crate::config::{ - MEMORY_END, - PAGE_SIZE, - TRAMPOLINE, - TRAP_CONTEXT, - USER_STACK_SIZE -}; +use alloc::collections::BTreeMap; +use alloc::sync::Arc; +use alloc::vec::Vec; use core::arch::asm; +use lazy_static::*; +use riscv::register::satp; extern "C" { fn stext(); @@ -31,9 +25,8 @@ extern "C" { } lazy_static! { - pub static ref KERNEL_SPACE: Arc> = Arc::new(unsafe { - UPSafeCell::new(MemorySet::new_kernel() - )}); + pub static ref KERNEL_SPACE: Arc> = + Arc::new(unsafe { UPSafeCell::new(MemorySet::new_kernel()) }); } pub struct MemorySet { @@ -52,13 +45,16 @@ impl MemorySet { self.page_table.token() } /// Assume that no conflicts. - pub fn insert_framed_area(&mut self, start_va: VirtAddr, end_va: VirtAddr, permission: MapPermission) { - self.push(MapArea::new( - start_va, - end_va, - MapType::Framed, - permission, - ), None); + pub fn insert_framed_area( + &mut self, + start_va: VirtAddr, + end_va: VirtAddr, + permission: MapPermission, + ) { + self.push( + MapArea::new(start_va, end_va, MapType::Framed, permission), + None, + ); } fn push(&mut self, mut map_area: MapArea, data: Option<&[u8]>) { map_area.map(&mut self.page_table); @@ -84,42 +80,60 @@ impl MemorySet { println!(".text [{:#x}, {:#x})", stext as usize, etext as usize); println!(".rodata [{:#x}, {:#x})", srodata as usize, erodata as usize); println!(".data [{:#x}, {:#x})", sdata as usize, edata as usize); - println!(".bss [{:#x}, {:#x})", sbss_with_stack as usize, ebss as usize); + println!( + ".bss [{:#x}, {:#x})", + sbss_with_stack as usize, ebss as usize + ); println!("mapping .text section"); - memory_set.push(MapArea::new( - (stext as usize).into(), - (etext as usize).into(), - MapType::Identical, - MapPermission::R | MapPermission::X, - ), None); + memory_set.push( + MapArea::new( + (stext as usize).into(), + (etext as usize).into(), + MapType::Identical, + MapPermission::R | MapPermission::X, + ), + None, + ); println!("mapping .rodata section"); - memory_set.push(MapArea::new( - (srodata as usize).into(), - (erodata as usize).into(), - MapType::Identical, - MapPermission::R, - ), None); + memory_set.push( + MapArea::new( + (srodata as usize).into(), + (erodata as usize).into(), + MapType::Identical, + MapPermission::R, + ), + None, + ); println!("mapping .data section"); - memory_set.push(MapArea::new( - (sdata as usize).into(), - (edata as usize).into(), - MapType::Identical, - MapPermission::R | MapPermission::W, - ), None); + memory_set.push( + MapArea::new( + (sdata as usize).into(), + (edata as usize).into(), + MapType::Identical, + MapPermission::R | MapPermission::W, + ), + None, + ); println!("mapping .bss section"); - memory_set.push(MapArea::new( - (sbss_with_stack as usize).into(), - (ebss as usize).into(), - MapType::Identical, - MapPermission::R | MapPermission::W, - ), None); + memory_set.push( + MapArea::new( + (sbss_with_stack as usize).into(), + (ebss as usize).into(), + MapType::Identical, + MapPermission::R | MapPermission::W, + ), + None, + ); println!("mapping physical memory"); - memory_set.push(MapArea::new( - (ekernel as usize).into(), - MEMORY_END.into(), - MapType::Identical, - MapPermission::R | MapPermission::W, - ), None); + memory_set.push( + MapArea::new( + (ekernel as usize).into(), + MEMORY_END.into(), + MapType::Identical, + MapPermission::R | MapPermission::W, + ), + None, + ); memory_set } /// Include sections in elf and trampoline and TrapContext and user stack, @@ -142,19 +156,20 @@ impl MemorySet { let end_va: VirtAddr = ((ph.virtual_addr() + ph.mem_size()) as usize).into(); let mut map_perm = MapPermission::U; let ph_flags = ph.flags(); - if ph_flags.is_read() { map_perm |= MapPermission::R; } - if ph_flags.is_write() { map_perm |= MapPermission::W; } - if ph_flags.is_execute() { map_perm |= MapPermission::X; } - let map_area = MapArea::new( - start_va, - end_va, - MapType::Framed, - map_perm, - ); + if ph_flags.is_read() { + map_perm |= MapPermission::R; + } + if ph_flags.is_write() { + map_perm |= MapPermission::W; + } + if ph_flags.is_execute() { + map_perm |= MapPermission::X; + } + let map_area = MapArea::new(start_va, end_va, MapType::Framed, map_perm); max_end_vpn = map_area.vpn_range.get_end(); memory_set.push( map_area, - Some(&elf.input[ph.offset() as usize..(ph.offset() + ph.file_size()) as usize]) + Some(&elf.input[ph.offset() as usize..(ph.offset() + ph.file_size()) as usize]), ); } } @@ -164,20 +179,30 @@ impl MemorySet { // guard page user_stack_bottom += PAGE_SIZE; let user_stack_top = user_stack_bottom + USER_STACK_SIZE; - memory_set.push(MapArea::new( - user_stack_bottom.into(), - user_stack_top.into(), - MapType::Framed, - MapPermission::R | MapPermission::W | MapPermission::U, - ), None); + memory_set.push( + MapArea::new( + user_stack_bottom.into(), + user_stack_top.into(), + MapType::Framed, + MapPermission::R | MapPermission::W | MapPermission::U, + ), + None, + ); // map TrapContext - memory_set.push(MapArea::new( - TRAP_CONTEXT.into(), - TRAMPOLINE.into(), - MapType::Framed, - MapPermission::R | MapPermission::W, - ), None); - (memory_set, user_stack_top, elf.header.pt2.entry_point() as usize) + memory_set.push( + MapArea::new( + TRAP_CONTEXT.into(), + TRAMPOLINE.into(), + MapType::Framed, + MapPermission::R | MapPermission::W, + ), + None, + ); + ( + memory_set, + user_stack_top, + elf.header.pt2.entry_point() as usize, + ) } pub fn activate(&self) { let satp = self.page_table.token(); @@ -203,7 +228,7 @@ impl MapArea { start_va: VirtAddr, end_va: VirtAddr, map_type: MapType, - map_perm: MapPermission + map_perm: MapPermission, ) -> Self { let start_vpn: VirtPageNum = start_va.floor(); let end_vpn: VirtPageNum = end_va.ceil(); @@ -296,15 +321,27 @@ pub fn remap_test() { let mid_rodata: VirtAddr = ((srodata as usize + erodata as usize) / 2).into(); let mid_data: VirtAddr = ((sdata as usize + edata as usize) / 2).into(); assert_eq!( - kernel_space.page_table.translate(mid_text.floor()).unwrap().writable(), + kernel_space + .page_table + .translate(mid_text.floor()) + .unwrap() + .writable(), false ); assert_eq!( - kernel_space.page_table.translate(mid_rodata.floor()).unwrap().writable(), + kernel_space + .page_table + .translate(mid_rodata.floor()) + .unwrap() + .writable(), false, ); assert_eq!( - kernel_space.page_table.translate(mid_data.floor()).unwrap().executable(), + kernel_space + .page_table + .translate(mid_data.floor()) + .unwrap() + .executable(), false, ); println!("remap_test passed!"); diff --git a/os/src/mm/mod.rs b/os/src/mm/mod.rs index bb04aea..bbf8bef 100644 --- a/os/src/mm/mod.rs +++ b/os/src/mm/mod.rs @@ -1,16 +1,16 @@ -mod heap_allocator; mod address; mod frame_allocator; -mod page_table; +mod heap_allocator; mod memory_set; +mod page_table; -use page_table::{PageTable, PTEFlags}; -use address::{VPNRange, StepByOne}; -pub use address::{PhysAddr, VirtAddr, PhysPageNum, VirtPageNum}; -pub use frame_allocator::{FrameTracker, frame_alloc}; -pub use page_table::{PageTableEntry, translated_byte_buffer}; -pub use memory_set::{MemorySet, KERNEL_SPACE, MapPermission}; +pub use address::{PhysAddr, PhysPageNum, VirtAddr, VirtPageNum}; +use address::{StepByOne, VPNRange}; +pub use frame_allocator::{frame_alloc, FrameTracker}; pub use memory_set::remap_test; +pub use memory_set::{MapPermission, MemorySet, KERNEL_SPACE}; +pub use page_table::{translated_byte_buffer, PageTableEntry}; +use page_table::{PTEFlags, PageTable}; pub fn init() { heap_allocator::init_heap(); diff --git a/os/src/mm/page_table.rs b/os/src/mm/page_table.rs index 0315ff9..191e1a0 100644 --- a/os/src/mm/page_table.rs +++ b/os/src/mm/page_table.rs @@ -1,6 +1,6 @@ -use super::{frame_alloc, PhysPageNum, FrameTracker, VirtPageNum, VirtAddr, StepByOne}; -use alloc::vec::Vec; +use super::{frame_alloc, FrameTracker, PhysPageNum, StepByOne, VirtAddr, VirtPageNum}; use alloc::vec; +use alloc::vec::Vec; use bitflags::*; bitflags! { @@ -29,9 +29,7 @@ impl PageTableEntry { } } pub fn empty() -> Self { - PageTableEntry { - bits: 0, - } + PageTableEntry { bits: 0 } } pub fn ppn(&self) -> PhysPageNum { (self.bits >> 10 & ((1usize << 44) - 1)).into() @@ -123,8 +121,7 @@ impl PageTable { *pte = PageTableEntry::empty(); } pub fn translate(&self, vpn: VirtPageNum) -> Option { - self.find_pte(vpn) - .map(|pte| {pte.clone()}) + self.find_pte(vpn).map(|pte| pte.clone()) } pub fn token(&self) -> usize { 8usize << 60 | self.root_ppn.0 @@ -139,10 +136,7 @@ pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<& while start < end { let start_va = VirtAddr::from(start); let mut vpn = start_va.floor(); - let ppn = page_table - .translate(vpn) - .unwrap() - .ppn(); + let ppn = page_table.translate(vpn).unwrap().ppn(); vpn.step(); let mut end_va: VirtAddr = vpn.into(); end_va = end_va.min(VirtAddr::from(end)); diff --git a/os/src/sbi.rs b/os/src/sbi.rs index c8ecbf1..2e2804b 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -43,4 +43,3 @@ pub fn shutdown() -> ! { sbi_call(SBI_SHUTDOWN, 0, 0, 0); panic!("It should shutdown!"); } - diff --git a/os/src/sync/mod.rs b/os/src/sync/mod.rs index 7729524..d1ce5bc 100644 --- a/os/src/sync/mod.rs +++ b/os/src/sync/mod.rs @@ -1,3 +1,3 @@ mod up; -pub use up::UPSafeCell; \ No newline at end of file +pub use up::UPSafeCell; diff --git a/os/src/sync/up.rs b/os/src/sync/up.rs index 642668c..c7b2c9e 100644 --- a/os/src/sync/up.rs +++ b/os/src/sync/up.rs @@ -18,10 +18,12 @@ impl UPSafeCell { /// User is responsible to guarantee that inner struct is only used in /// uniprocessor. pub unsafe fn new(value: T) -> Self { - Self { inner: RefCell::new(value) } + Self { + inner: RefCell::new(value), + } } /// Panic if the data has been borrowed. pub fn exclusive_access(&self) -> RefMut<'_, T> { self.inner.borrow_mut() } -} \ No newline at end of file +} diff --git a/os/src/syscall/fs.rs b/os/src/syscall/fs.rs index b02e087..5dfff5e 100644 --- a/os/src/syscall/fs.rs +++ b/os/src/syscall/fs.rs @@ -11,9 +11,9 @@ pub fn sys_write(fd: usize, buf: *const u8, len: usize) -> isize { print!("{}", core::str::from_utf8(buffer).unwrap()); } len as isize - }, + } _ => { panic!("Unsupported fd in sys_write!"); } } -} \ No newline at end of file +} diff --git a/os/src/syscall/mod.rs b/os/src/syscall/mod.rs index da41168..572b081 100644 --- a/os/src/syscall/mod.rs +++ b/os/src/syscall/mod.rs @@ -18,4 +18,3 @@ pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize { _ => panic!("Unsupported syscall_id: {}", syscall_id), } } - diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index 23eab1f..55856e7 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -1,7 +1,4 @@ -use crate::task::{ - suspend_current_and_run_next, - exit_current_and_run_next, -}; +use crate::task::{exit_current_and_run_next, suspend_current_and_run_next}; use crate::timer::get_time_ms; pub fn sys_exit(exit_code: i32) -> ! { @@ -17,4 +14,4 @@ pub fn sys_yield() -> isize { pub fn sys_get_time() -> isize { get_time_ms() as isize -} \ No newline at end of file +} diff --git a/os/src/task/context.rs b/os/src/task/context.rs index d25cc2c..e4f59d8 100644 --- a/os/src/task/context.rs +++ b/os/src/task/context.rs @@ -23,4 +23,3 @@ impl TaskContext { } } } - diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 5a85eeb..d3d9cf9 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -2,13 +2,13 @@ mod context; mod switch; mod task; -use crate::loader::{get_num_app, get_app_data}; -use crate::trap::TrapContext; +use crate::loader::{get_app_data, get_num_app}; use crate::sync::UPSafeCell; +use crate::trap::TrapContext; +use alloc::vec::Vec; use lazy_static::*; use switch::__switch; use task::{TaskControlBlock, TaskStatus}; -use alloc::vec::Vec; pub use context::TaskContext; @@ -29,17 +29,16 @@ lazy_static! { println!("num_app = {}", num_app); let mut tasks: Vec = Vec::new(); for i in 0..num_app { - tasks.push(TaskControlBlock::new( - get_app_data(i), - i, - )); + tasks.push(TaskControlBlock::new(get_app_data(i), i)); } TaskManager { num_app, - inner: unsafe { UPSafeCell::new(TaskManagerInner { - tasks, - current_task: 0, - })}, + inner: unsafe { + UPSafeCell::new(TaskManagerInner { + tasks, + current_task: 0, + }) + }, } }; } @@ -54,10 +53,7 @@ impl TaskManager { let mut _unused = TaskContext::zero_init(); // before this, we should drop local variables that must be dropped manually unsafe { - __switch( - &mut _unused as *mut _, - next_task_cx_ptr, - ); + __switch(&mut _unused as *mut _, next_task_cx_ptr); } panic!("unreachable in run_first_task!"); } @@ -79,9 +75,7 @@ impl TaskManager { let current = inner.current_task; (current + 1..current + self.num_app + 1) .map(|id| id % self.num_app) - .find(|id| { - inner.tasks[*id].task_status == TaskStatus::Ready - }) + .find(|id| inner.tasks[*id].task_status == TaskStatus::Ready) } fn get_current_token(&self) -> usize { @@ -105,10 +99,7 @@ impl TaskManager { drop(inner); // before this, we should drop local variables that must be dropped manually unsafe { - __switch( - current_task_cx_ptr, - next_task_cx_ptr, - ); + __switch(current_task_cx_ptr, next_task_cx_ptr); } // go back to user mode } else { @@ -149,4 +140,4 @@ pub fn current_user_token() -> usize { pub fn current_trap_cx() -> &'static mut TrapContext { TASK_MANAGER.get_current_trap_cx() -} \ No newline at end of file +} diff --git a/os/src/task/switch.rs b/os/src/task/switch.rs index dd3a2d3..59f8b1a 100644 --- a/os/src/task/switch.rs +++ b/os/src/task/switch.rs @@ -4,8 +4,5 @@ use core::arch::global_asm; global_asm!(include_str!("switch.S")); extern "C" { - pub fn __switch( - current_task_cx_ptr: *mut TaskContext, - next_task_cx_ptr: *const TaskContext - ); + pub fn __switch(current_task_cx_ptr: *mut TaskContext, next_task_cx_ptr: *const TaskContext); } diff --git a/os/src/task/task.rs b/os/src/task/task.rs index 47368db..036018b 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -1,7 +1,7 @@ -use crate::mm::{MemorySet, MapPermission, PhysPageNum, KERNEL_SPACE, VirtAddr}; -use crate::trap::{TrapContext, trap_handler}; -use crate::config::{TRAP_CONTEXT, kernel_stack_position}; use super::TaskContext; +use crate::config::{kernel_stack_position, TRAP_CONTEXT}; +use crate::mm::{MapPermission, MemorySet, PhysPageNum, VirtAddr, KERNEL_SPACE}; +use crate::trap::{trap_handler, TrapContext}; pub struct TaskControlBlock { pub task_status: TaskStatus, @@ -28,13 +28,11 @@ impl TaskControlBlock { let task_status = TaskStatus::Ready; // map a kernel-stack in kernel space let (kernel_stack_bottom, kernel_stack_top) = kernel_stack_position(app_id); - KERNEL_SPACE - .exclusive_access() - .insert_framed_area( - kernel_stack_bottom.into(), - kernel_stack_top.into(), - MapPermission::R | MapPermission::W, - ); + KERNEL_SPACE.exclusive_access().insert_framed_area( + kernel_stack_bottom.into(), + kernel_stack_top.into(), + MapPermission::R | MapPermission::W, + ); let task_control_block = Self { task_status, task_cx: TaskContext::goto_trap_return(kernel_stack_top), @@ -60,4 +58,4 @@ pub enum TaskStatus { Ready, Running, Exited, -} \ No newline at end of file +} diff --git a/os/src/timer.rs b/os/src/timer.rs index 92d50e3..048aa3b 100644 --- a/os/src/timer.rs +++ b/os/src/timer.rs @@ -1,6 +1,6 @@ -use riscv::register::time; -use crate::sbi::set_timer; use crate::config::CLOCK_FREQ; +use crate::sbi::set_timer; +use riscv::register::time; const TICKS_PER_SEC: usize = 100; const MSEC_PER_SEC: usize = 1000; @@ -15,4 +15,4 @@ pub fn get_time_ms() -> usize { pub fn set_next_trigger() { set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC); -} \ No newline at end of file +} diff --git a/os/src/trap/context.rs b/os/src/trap/context.rs index d910d4e..d073451 100644 --- a/os/src/trap/context.rs +++ b/os/src/trap/context.rs @@ -1,4 +1,4 @@ -use riscv::register::sstatus::{Sstatus, self, SPP}; +use riscv::register::sstatus::{self, Sstatus, SPP}; #[repr(C)] pub struct TrapContext { @@ -11,7 +11,9 @@ pub struct TrapContext { } impl TrapContext { - pub fn set_sp(&mut self, sp: usize) { self.x[2] = sp; } + pub fn set_sp(&mut self, sp: usize) { + self.x[2] = sp; + } pub fn app_init_context( entry: usize, sp: usize, diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 9eb0d79..6757721 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -1,27 +1,17 @@ mod context; -use riscv::register::{ - mtvec::TrapMode, - stvec, - scause::{ - self, - Trap, - Exception, - Interrupt, - }, - stval, - sie, -}; +use crate::config::{TRAMPOLINE, TRAP_CONTEXT}; use crate::syscall::syscall; use crate::task::{ - exit_current_and_run_next, - suspend_current_and_run_next, - current_user_token, - current_trap_cx, + current_trap_cx, current_user_token, exit_current_and_run_next, suspend_current_and_run_next, }; use crate::timer::set_next_trigger; -use crate::config::{TRAP_CONTEXT, TRAMPOLINE}; -use core::arch::{global_asm, asm}; +use core::arch::{asm, global_asm}; +use riscv::register::{ + mtvec::TrapMode, + scause::{self, Exception, Interrupt, Trap}, + sie, stval, stvec, +}; global_asm!(include_str!("trap.S")); @@ -42,7 +32,9 @@ fn set_user_trap_entry() { } pub fn enable_timer_interrupt() { - unsafe { sie::set_stimer(); } + unsafe { + sie::set_stimer(); + } } #[no_mangle] @@ -56,8 +48,7 @@ pub fn trap_handler() -> ! { cx.sepc += 4; cx.x[10] = syscall(cx.x[17], [cx.x[10], cx.x[11], cx.x[12]]) as usize; } - Trap::Exception(Exception::StoreFault) | - Trap::Exception(Exception::StorePageFault) => { + Trap::Exception(Exception::StoreFault) | Trap::Exception(Exception::StorePageFault) => { println!("[kernel] PageFault in application, bad addr = {:#x}, bad instruction = {:#x}, kernel killed it.", stval, cx.sepc); exit_current_and_run_next(); } @@ -70,7 +61,11 @@ pub fn trap_handler() -> ! { suspend_current_and_run_next(); } _ => { - panic!("Unsupported trap {:?}, stval = {:#x}!", scause.cause(), stval); + panic!( + "Unsupported trap {:?}, stval = {:#x}!", + scause.cause(), + stval + ); } } trap_return(); @@ -103,4 +98,4 @@ pub fn trap_from_kernel() -> ! { panic!("a trap from kernel!"); } -pub use context::{TrapContext}; +pub use context::TrapContext; diff --git a/user/src/bin/00power_3.rs b/user/src/bin/00power_3.rs index e14f1e2..125e670 100644 --- a/user/src/bin/00power_3.rs +++ b/user/src/bin/00power_3.rs @@ -26,4 +26,4 @@ unsafe fn main() -> i32 { println!("{}^{} = {}(MOD {})", p, iter, S[cur], m); println!("Test power_3 OK!"); 0 -} \ No newline at end of file +} diff --git a/user/src/bin/03sleep.rs b/user/src/bin/03sleep.rs index 8341123..7e43d9c 100644 --- a/user/src/bin/03sleep.rs +++ b/user/src/bin/03sleep.rs @@ -15,4 +15,4 @@ fn main() -> i32 { } println!("Test sleep OK!"); 0 -} \ No newline at end of file +} diff --git a/user/src/console.rs b/user/src/console.rs index ac80117..d37e867 100644 --- a/user/src/console.rs +++ b/user/src/console.rs @@ -1,5 +1,5 @@ -use core::fmt::{self, Write}; use super::write; +use core::fmt::{self, Write}; struct Stdout; @@ -28,4 +28,4 @@ macro_rules! println { ($fmt: literal $(, $($arg: tt)+)?) => { $crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?)); } -} \ No newline at end of file +} diff --git a/user/src/lang_items.rs b/user/src/lang_items.rs index c90d297..3aee17b 100644 --- a/user/src/lang_items.rs +++ b/user/src/lang_items.rs @@ -2,9 +2,14 @@ fn panic_handler(panic_info: &core::panic::PanicInfo) -> ! { let err = panic_info.message().unwrap(); if let Some(location) = panic_info.location() { - println!("Panicked at {}:{}, {}", location.file(), location.line(), err); + println!( + "Panicked at {}:{}, {}", + location.file(), + location.line(), + err + ); } else { println!("Panicked: {}", err); } loop {} -} \ No newline at end of file +} diff --git a/user/src/lib.rs b/user/src/lib.rs index 5da90d7..2e99ba4 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -4,8 +4,8 @@ #[macro_use] pub mod console; -mod syscall; mod lang_items; +mod syscall; #[no_mangle] #[link_section = ".text.entry"] @@ -20,10 +20,17 @@ fn main() -> i32 { panic!("Cannot find main!"); } - use syscall::*; -pub fn write(fd: usize, buf: &[u8]) -> isize { sys_write(fd, buf) } -pub fn exit(exit_code: i32) -> isize { sys_exit(exit_code) } -pub fn yield_() -> isize { sys_yield() } -pub fn get_time() -> isize { sys_get_time() } \ No newline at end of file +pub fn write(fd: usize, buf: &[u8]) -> isize { + sys_write(fd, buf) +} +pub fn exit(exit_code: i32) -> isize { + sys_exit(exit_code) +} +pub fn yield_() -> isize { + sys_yield() +} +pub fn get_time() -> isize { + sys_get_time() +} From 3731e844600a88d256e8917793b8e98c14f60a48 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Mon, 24 Jan 2022 16:12:56 -0800 Subject: [PATCH 42/87] Add boards/ && cargo clippy --- os/src/boards/k210.rs | 2 ++ os/src/boards/qemu.rs | 1 + os/src/config.rs | 6 +----- os/src/main.rs | 7 +++++++ os/src/mm/address.rs | 6 +++--- os/src/mm/frame_allocator.rs | 4 ++-- os/src/mm/heap_allocator.rs | 4 ++-- os/src/mm/memory_set.rs | 22 ++++++++-------------- os/src/mm/page_table.rs | 10 +++++----- os/src/task/mod.rs | 3 ++- 10 files changed, 33 insertions(+), 32 deletions(-) create mode 100644 os/src/boards/k210.rs create mode 100644 os/src/boards/qemu.rs diff --git a/os/src/boards/k210.rs b/os/src/boards/k210.rs new file mode 100644 index 0000000..cb97f76 --- /dev/null +++ b/os/src/boards/k210.rs @@ -0,0 +1,2 @@ +pub const CLOCK_FREQ: usize = 403000000 / 62; + diff --git a/os/src/boards/qemu.rs b/os/src/boards/qemu.rs new file mode 100644 index 0000000..98874fb --- /dev/null +++ b/os/src/boards/qemu.rs @@ -0,0 +1 @@ +pub const CLOCK_FREQ: usize = 12500000; diff --git a/os/src/config.rs b/os/src/config.rs index 2c26236..1fb18e2 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -14,8 +14,4 @@ pub fn kernel_stack_position(app_id: usize) -> (usize, usize) { (bottom, top) } -#[cfg(feature = "board_k210")] -pub const CLOCK_FREQ: usize = 403000000 / 62; - -#[cfg(feature = "board_qemu")] -pub const CLOCK_FREQ: usize = 12500000; +pub use crate::board::CLOCK_FREQ; diff --git a/os/src/main.rs b/os/src/main.rs index 259a52a..261122c 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -8,6 +8,13 @@ extern crate alloc; #[macro_use] extern crate bitflags; +#[cfg(feature = "board_k210")] +#[path = "boards/k210.rs"] +mod board; +#[cfg(not(any(feature = "board_k210")))] +#[path = "boards/qemu.rs"] +mod board; + #[macro_use] mod console; mod config; diff --git a/os/src/mm/address.rs b/os/src/mm/address.rs index ef940b7..bcddac5 100644 --- a/os/src/mm/address.rs +++ b/os/src/mm/address.rs @@ -153,15 +153,15 @@ impl VirtPageNum { impl PhysPageNum { pub fn get_pte_array(&self) -> &'static mut [PageTableEntry] { - let pa: PhysAddr = self.clone().into(); + let pa: PhysAddr = (*self).into(); unsafe { core::slice::from_raw_parts_mut(pa.0 as *mut PageTableEntry, 512) } } pub fn get_bytes_array(&self) -> &'static mut [u8] { - let pa: PhysAddr = self.clone().into(); + let pa: PhysAddr = (*self).into(); unsafe { core::slice::from_raw_parts_mut(pa.0 as *mut u8, 4096) } } pub fn get_mut(&self) -> &'static mut T { - let pa: PhysAddr = self.clone().into(); + let pa: PhysAddr = (*self).into(); unsafe { (pa.0 as *mut T).as_mut().unwrap() } } } diff --git a/os/src/mm/frame_allocator.rs b/os/src/mm/frame_allocator.rs index 37c0409..b7c909b 100644 --- a/os/src/mm/frame_allocator.rs +++ b/os/src/mm/frame_allocator.rs @@ -71,7 +71,7 @@ impl FrameAllocator for StackFrameAllocator { fn dealloc(&mut self, ppn: PhysPageNum) { let ppn = ppn.0; // validity check - if ppn >= self.current || self.recycled.iter().find(|&v| *v == ppn).is_some() { + if ppn >= self.current || self.recycled.iter().any(|&v| v == ppn) { panic!("Frame ppn={:#x} has not been allocated!", ppn); } // recycle @@ -100,7 +100,7 @@ pub fn frame_alloc() -> Option { FRAME_ALLOCATOR .exclusive_access() .alloc() - .map(|ppn| FrameTracker::new(ppn)) + .map(FrameTracker::new) } fn frame_dealloc(ppn: PhysPageNum) { diff --git a/os/src/mm/heap_allocator.rs b/os/src/mm/heap_allocator.rs index b802bbd..42a6d76 100644 --- a/os/src/mm/heap_allocator.rs +++ b/os/src/mm/heap_allocator.rs @@ -36,8 +36,8 @@ pub fn heap_test() { for i in 0..500 { v.push(i); } - for i in 0..500 { - assert_eq!(v[i], i); + for (i, val) in v.iter().take(500).enumerate() { + assert_eq!(*val, i); } assert!(bss_range.contains(&(v.as_ptr() as usize))); drop(v); diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index 35392e8..3ad2ac5 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -256,11 +256,8 @@ impl MapArea { } #[allow(unused)] pub fn unmap_one(&mut self, page_table: &mut PageTable, vpn: VirtPageNum) { - match self.map_type { - MapType::Framed => { - self.data_frames.remove(&vpn); - } - _ => {} + if self.map_type == MapType::Framed { + self.data_frames.remove(&vpn); } page_table.unmap(vpn); } @@ -320,29 +317,26 @@ pub fn remap_test() { let mid_text: VirtAddr = ((stext as usize + etext as usize) / 2).into(); let mid_rodata: VirtAddr = ((srodata as usize + erodata as usize) / 2).into(); let mid_data: VirtAddr = ((sdata as usize + edata as usize) / 2).into(); - assert_eq!( - kernel_space + assert!( + !kernel_space .page_table .translate(mid_text.floor()) .unwrap() .writable(), - false ); - assert_eq!( - kernel_space + assert!( + !kernel_space .page_table .translate(mid_rodata.floor()) .unwrap() .writable(), - false, ); - assert_eq!( - kernel_space + assert!( + !kernel_space .page_table .translate(mid_data.floor()) .unwrap() .executable(), - false, ); println!("remap_test passed!"); } diff --git a/os/src/mm/page_table.rs b/os/src/mm/page_table.rs index 191e1a0..bd09cae 100644 --- a/os/src/mm/page_table.rs +++ b/os/src/mm/page_table.rs @@ -76,8 +76,8 @@ impl PageTable { let idxs = vpn.indexes(); let mut ppn = self.root_ppn; let mut result: Option<&mut PageTableEntry> = None; - for i in 0..3 { - let pte = &mut ppn.get_pte_array()[idxs[i]]; + for (i, idx) in idxs.iter().enumerate() { + let pte = &mut ppn.get_pte_array()[*idx]; if i == 2 { result = Some(pte); break; @@ -95,8 +95,8 @@ impl PageTable { let idxs = vpn.indexes(); let mut ppn = self.root_ppn; let mut result: Option<&mut PageTableEntry> = None; - for i in 0..3 { - let pte = &mut ppn.get_pte_array()[idxs[i]]; + for (i, idx) in idxs.iter().enumerate() { + let pte = &mut ppn.get_pte_array()[*idx]; if i == 2 { result = Some(pte); break; @@ -121,7 +121,7 @@ impl PageTable { *pte = PageTableEntry::empty(); } pub fn translate(&self, vpn: VirtPageNum) -> Option { - self.find_pte(vpn).map(|pte| pte.clone()) + self.find_pte(vpn).map(|pte| *pte) } pub fn token(&self) -> usize { 8usize << 60 | self.root_ppn.0 diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index d3d9cf9..453ac91 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -1,5 +1,6 @@ mod context; mod switch; +#[allow(clippy::module_inception)] mod task; use crate::loader::{get_app_data, get_num_app}; @@ -83,7 +84,7 @@ impl TaskManager { inner.tasks[inner.current_task].get_user_token() } - fn get_current_trap_cx(&self) -> &mut TrapContext { + fn get_current_trap_cx(&self) -> &'static mut TrapContext { let inner = self.inner.exclusive_access(); inner.tasks[inner.current_task].get_trap_cx() } From 90cf5659aa56b4dc1db1db36bf20aa8c44dd4825 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Fri, 11 Mar 2022 19:11:40 +0800 Subject: [PATCH 43/87] update ch4:add some exception support in trap_handler function, add two *_fault.rs apps --- os/src/trap/mod.rs | 3 ++- user/src/bin/04load_fault.rs | 18 ++++++++++++++++++ user/src/bin/05store_fault.rs | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 user/src/bin/04load_fault.rs create mode 100644 user/src/bin/05store_fault.rs diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 6757721..022f3ad 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -48,7 +48,8 @@ pub fn trap_handler() -> ! { cx.sepc += 4; cx.x[10] = syscall(cx.x[17], [cx.x[10], cx.x[11], cx.x[12]]) as usize; } - Trap::Exception(Exception::StoreFault) | Trap::Exception(Exception::StorePageFault) => { + Trap::Exception(Exception::StoreFault) | Trap::Exception(Exception::StorePageFault) | + Trap::Exception(Exception::LoadFault) | Trap::Exception(Exception::LoadPageFault) => { println!("[kernel] PageFault in application, bad addr = {:#x}, bad instruction = {:#x}, kernel killed it.", stval, cx.sepc); exit_current_and_run_next(); } diff --git a/user/src/bin/04load_fault.rs b/user/src/bin/04load_fault.rs new file mode 100644 index 0000000..87b2fad --- /dev/null +++ b/user/src/bin/04load_fault.rs @@ -0,0 +1,18 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use core::ptr::{read_volatile,null_mut}; + +#[no_mangle] +fn main() -> i32 { + println!("\nload_fault APP running...\n"); + println!("Into Test load_fault, we will insert an invalid load operation..."); + println!("Kernel should kill this application!"); + unsafe { + let _i=read_volatile(null_mut::()); + } + 0 +} \ No newline at end of file diff --git a/user/src/bin/05store_fault.rs b/user/src/bin/05store_fault.rs new file mode 100644 index 0000000..d94f337 --- /dev/null +++ b/user/src/bin/05store_fault.rs @@ -0,0 +1,18 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use core::ptr::null_mut; + +#[no_mangle] +fn main() -> i32 { + println!("\nstore_fault APP running...\n"); + println!("Into Test store_fault, we will insert an invalid store operation..."); + println!("Kernel should kill this application!"); + unsafe { + null_mut::().write_volatile(1); + } + 0 +} \ No newline at end of file From 483ede54e4887a44a62a28ab0d243fa754d02fd1 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sun, 20 Mar 2022 21:27:57 +0800 Subject: [PATCH 44/87] add CI for build-doc --- .github/workflows/build-doc.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/build-doc.yml diff --git a/.github/workflows/build-doc.yml b/.github/workflows/build-doc.yml new file mode 100644 index 0000000..a48f147 --- /dev/null +++ b/.github/workflows/build-doc.yml @@ -0,0 +1,25 @@ +name: Build Rust Doc + +on: [push] + +env: + CARGO_TERM_COLOR: always + +jobs: + build-doc: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Build doc + run: | + rustup target add riscv64gc-unknown-none-elf + rustup component add llvm-tools-preview + rustup component add rust-src + cd os + cargo doc --no-deps --verbose + - name: Deploy to Github Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./os/target/riscv64gc-unknown-none-elf/doc + destination_dir: ${{ github.ref_name }} \ No newline at end of file From 76056c86263d8b06ac38190db42f7911d04824d0 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sun, 20 Mar 2022 23:51:38 +0800 Subject: [PATCH 45/87] update README --- README.md | 211 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 202 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e2dc4e3..5f27d55 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@ # rCore-Tutorial-v3 rCore-Tutorial version 3.5. See the [Documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/). +rCore-Tutorial API Docs. See the [API Docs of Ten OSes ](#OS-API-DOCS) + +Official QQ group number: 735045051 + ## news -- 2021.11.20: Now we are updating our labs. Please checkout chX-dev Branches for our current new labs. (Notice: please see the [Dependency] section in the end of this doc) +- 25/01/2022: Version 3.6.0 is on the way! Now we directly update the code on chX branches, please periodically check if there are any updates. ## Overview @@ -12,7 +16,7 @@ This project aims to show how to write an **Unix-like OS** running on **RISC-V** * Platform supported: `qemu-system-riscv64` simulator or dev boards based on [Kendryte K210 SoC](https://canaan.io/product/kendryteai) such as [Maix Dock](https://www.seeedstudio.com/Sipeed-MAIX-Dock-p-4815.html) * OS - * concurrency of multiple processes + * concurrency of multiple processes each of which contains mutiple native threads * preemptive scheduling(Round-Robin algorithm) * dynamic memory management in kernel * virtual memory @@ -21,15 +25,199 @@ This project aims to show how to write an **Unix-like OS** running on **RISC-V** * **only 4K+ LoC** * [A detailed documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/) in spite of the lack of comments in the code(English version is not available at present) +## Prerequisites + +### Install Rust + +See [official guide](https://www.rust-lang.org/tools/install). + +Install some tools: + +```sh +$ rustup target add riscv64gc-unknown-none-elf +$ cargo install cargo-binutils --vers =0.3.3 +$ rustup component add llvm-tools-preview +$ rustup component add rust-src +``` + +### Install Qemu + +Here we manually compile and install Qemu 5.0.0. For example, on Ubuntu 18.04: + +```sh +# install dependency packages +$ sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ + gawk build-essential bison flex texinfo gperf libtool patchutils bc \ + zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev git tmux python3 python3-pip +# download Qemu source code +$ wget https://download.qemu.org/qemu-5.0.0.tar.xz +# extract to qemu-5.0.0/ +$ tar xvJf qemu-5.0.0.tar.xz +$ cd qemu-5.0.0 +# build +$ ./configure --target-list=riscv64-softmmu,riscv64-linux-user +$ make -j$(nproc) +``` + +Then, add following contents to `~/.bashrc`(please adjust these paths according to your environment): + +``` +export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-5.0.0 +export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-5.0.0/riscv64-softmmu +export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-5.0.0/riscv64-linux-user +``` + +Finally, update the current shell: + +```sh +$ source ~/.bashrc +``` + +Now we can check the version of Qemu: + +```sh +$ qemu-system-riscv64 --version +QEMU emulator version 5.0.0 +Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers +``` + +### Install RISC-V GNU Embedded Toolchain(including GDB) + +Download the compressed file according to your platform From [Sifive website](https://www.sifive.com/software)(Ctrl+F 'toolchain'). + +Extract it and append the location of the 'bin' directory under its root directory to `$PATH`. + +For example, we can check the version of GDB: + +```sh +$ riscv64-unknown-elf-gdb --version +GNU gdb (SiFive GDB-Metal 10.1.0-2020.12.7) 10.1 +Copyright (C) 2020 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +``` + +### Install serial tools(Optional, if you want to run on K210) + +```sh +$ pip3 install pyserial +$ sudo apt install python3-serial +``` + ## Run our project -TODO: +### Qemu + +```sh +$ git clone https://github.com/rcore-os/rCore-Tutorial-v3.git +$ cd rCore-Tutorial-v3/os +$ make run +``` + +After outputing some debug messages, the kernel lists all the applications available and enter the user shell: + +``` +/**** APPS **** +mpsc_sem +usertests +pipetest +forktest2 +cat +initproc +race_adder_loop +threads_arg +race_adder_mutex_spin +race_adder_mutex_blocking +forktree +user_shell +huge_write +race_adder +race_adder_atomic +threads +stack_overflow +filetest_simple +forktest_simple +cmdline_args +run_pipe_test +forktest +matrix +exit +fantastic_text +sleep_simple +yield +hello_world +pipe_large_test +sleep +phil_din_mutex +**************/ +Rust user shell +>> +``` + +You can run any application except for `initproc` and `user_shell` itself. To run an application, just input its filename and hit enter. `usertests` can run a bunch of applications, thus it is recommended. + +Type `Ctrl+a` then `x` to exit Qemu. + +### K210 + +Before chapter 6, you do not need a SD card: + +```sh +$ git clone https://github.com/rcore-os/rCore-Tutorial-v3.git +$ cd rCore-Tutorial-v3/os +$ make run BOARD=k210 +``` + +From chapter 6, before running the kernel, we should insert a SD card into PC and manually write the filesystem image to it: + +```sh +$ cd rCore-Tutorial-v3/os +$ make sdcard +``` + +By default it will overwrite the device `/dev/sdb` which is the SD card, but you can provide another location. For example, `make sdcard SDCARD=/dev/sdc`. + +After that, remove the SD card from PC and insert it to the slot of K210. Connect the K210 to PC and then: + +```sh +$ git clone https://github.com/rcore-os/rCore-Tutorial-v3.git +$ cd rCore-Tutorial-v3/os +$ make run BOARD=k210 +``` + +Type `Ctrl+]` to disconnect from K210. + +## Rustdoc + +Currently it can only help you view the code since only a tiny part of the code has been documented. + +You can open a doc html of `os` using `cargo doc --no-deps --open` under `os` directory. + +### OS-API-DOCS +The API Docs for Ten OS +1. [Lib-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch1/os/index.html) +1. [Batch-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch2/os/index.html) +1. [MultiProg-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch3-coop/os/index.html) +1. [TimeSharing-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch3/os/index.html) +1. [AddrSpace-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch4/os/index.html) +1. [Process-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch5/os/index.html) +1. [FileSystem-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch6/os/index.html) +1. [IPC-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch7/os/index.html) +1. [SyncMutex-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch8/os/index.html) +1. [IODevice-OS API doc](https://learningos.github.io/rCore-Tutorial-v3/ch9/os/index.html) ## Working in progress -Now we are still updating our project, you can find latest changes on branches `chX-dev` such as `ch1-dev`. We are intended to publish first release 3.5.0 after completing most of the tasks mentioned below. +Our first release 3.5.0 (chapter 1-7) has been published. -Overall progress: ch7 +There will be 9 chapters in our next release 3.6.0, where 2 new chapters will be added: +* chapter 8: synchronization on a uniprocessor +* chapter 9: I/O devices + +Current version is 3.6.0-alpha.1 and we are still working on it. + +Here are the updates since 3.5.0: ### Completed @@ -43,12 +231,18 @@ Overall progress: ch7 * [x] flush all block cache to disk after a fs transaction which involves write operation * [x] replace `spin::Mutex` with `UPSafeCell` before SMP chapter * [x] add codes for a new chapter about synchronization & mutual exclusion(uniprocessor only) +* [x] bug fix: we should call `find_pte` rather than `find_pte_create` in `PageTable::unmap` +* [x] clarify: "check validity of level-3 pte in `find_pte` instead of checking it outside this function" should not be a bug +* [x] code of chapter 8: synchronization on a uniprocessor +* [x] switch the code of chapter 6 and chapter 7 +* [x] support signal mechanism in chapter 7/8(only works for apps with a single thread) +* [x] Add boards/ directory and support rustdoc, for example you can use `cargo doc --no-deps --open` to view the documentation of a crate ### Todo(High priority) -* [ ] support Allwinner's RISC-V D1 chip -* [ ] bug fix: we should call `find_pte` rather than `find_pte_create` in `PageTable::unmap` -* [ ] bug fix: check validity of level-3 pte in `find_pte` instead of checking it outside this function +* [ ] review documentation, current progress: 5/9 +* [ ] support user-level sync primitives in chapter 8 +* [ ] code of chapter 9: device drivers based on interrupts, including UART and block devices * [ ] use old fs image optionally, do not always rebuild the image * [ ] add new system calls: getdents64/fstat * [ ] shell functionality improvement(to be continued...) @@ -61,7 +255,6 @@ Overall progress: ch7 * [ ] provide smooth debug experience at a Rust source code level * [ ] format the code using official tools - ### Crates We will add them later. From 5946903948feb50f193f56e49646c010a966ba02 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sat, 26 Mar 2022 21:34:42 +0800 Subject: [PATCH 46/87] update ch4 with more comments --- os/src/config.rs | 2 ++ os/src/console.rs | 4 +++ os/src/lang_items.rs | 3 +++ os/src/loader.rs | 4 +++ os/src/main.rs | 31 +++++++++++++++++------ os/src/mm/address.rs | 10 ++++++++ os/src/mm/frame_allocator.rs | 10 ++++++++ os/src/mm/heap_allocator.rs | 6 +++++ os/src/mm/memory_set.rs | 7 ++++++ os/src/mm/mod.rs | 10 ++++++++ os/src/mm/page_table.rs | 6 +++++ os/src/sbi.rs | 25 +++++++++++-------- os/src/sync/mod.rs | 2 ++ os/src/sync/up.rs | 2 ++ os/src/syscall/fs.rs | 2 ++ os/src/syscall/mod.rs | 13 ++++++++++ os/src/syscall/process.rs | 2 ++ os/src/task/context.rs | 2 ++ os/src/task/mod.rs | 48 ++++++++++++++++++++++++++++++++++++ os/src/task/switch.rs | 13 +++++++--- os/src/task/task.rs | 3 +++ os/src/timer.rs | 4 +++ os/src/trap/context.rs | 3 +++ os/src/trap/mod.rs | 13 ++++++++++ 24 files changed, 205 insertions(+), 20 deletions(-) diff --git a/os/src/config.rs b/os/src/config.rs index 1fb18e2..eeda71c 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -1,3 +1,5 @@ +//! Constants used in rCore + pub const USER_STACK_SIZE: usize = 4096 * 2; pub const KERNEL_STACK_SIZE: usize = 4096 * 2; pub const KERNEL_HEAP_SIZE: usize = 0x30_0000; diff --git a/os/src/console.rs b/os/src/console.rs index dda4911..7e44bb2 100644 --- a/os/src/console.rs +++ b/os/src/console.rs @@ -1,3 +1,5 @@ +//! SBI console driver, for text output + use crate::sbi::console_putchar; use core::fmt::{self, Write}; @@ -17,6 +19,7 @@ pub fn print(args: fmt::Arguments) { } #[macro_export] +/// print string macro macro_rules! print { ($fmt: literal $(, $($arg: tt)+)?) => { $crate::console::print(format_args!($fmt $(, $($arg)+)?)); @@ -24,6 +27,7 @@ macro_rules! print { } #[macro_export] +/// println string macro macro_rules! println { ($fmt: literal $(, $($arg: tt)+)?) => { $crate::console::print(format_args!(concat!($fmt, "\n") $(, $($arg)+)?)); diff --git a/os/src/lang_items.rs b/os/src/lang_items.rs index af3e515..e8cf681 100644 --- a/os/src/lang_items.rs +++ b/os/src/lang_items.rs @@ -1,7 +1,10 @@ +//! The panic handler + use crate::sbi::shutdown; use core::panic::PanicInfo; #[panic_handler] +/// panic handler fn panic(info: &PanicInfo) -> ! { if let Some(location) = info.location() { println!( diff --git a/os/src/loader.rs b/os/src/loader.rs index 1358c46..855187d 100644 --- a/os/src/loader.rs +++ b/os/src/loader.rs @@ -1,3 +1,6 @@ +//! Loading user applications into memory + +/// Get the total number of applications. pub fn get_num_app() -> usize { extern "C" { fn _num_app(); @@ -5,6 +8,7 @@ pub fn get_num_app() -> usize { unsafe { (_num_app as usize as *const usize).read_volatile() } } +/// get applications data pub fn get_app_data(app_id: usize) -> &'static [u8] { extern "C" { fn _num_app(); diff --git a/os/src/main.rs b/os/src/main.rs index 261122c..5ad6374 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -1,3 +1,20 @@ +//! The main module and entrypoint +//! +//! Various facilities of the kernels are implemented as submodules. The most +//! important ones are: +//! +//! - [`trap`]: Handles all cases of switching from userspace to the kernel +//! - [`task`]: Task management +//! - [`syscall`]: System call handling and implementation +//! +//! The operating system also starts in this module. Kernel code starts +//! executing from `entry.asm`, after which [`rust_main()`] is called to +//! initialize various pieces of functionality. (See its source code for +//! details.) +//! +//! We then call [`task::run_first_task()`] and for the first time go to +//! userspace. + #![no_std] #![no_main] #![feature(panic_info_message)] @@ -23,16 +40,15 @@ mod loader; mod mm; mod sbi; mod sync; -mod syscall; -mod task; +pub mod syscall; +pub mod task; mod timer; -mod trap; +pub mod trap; -use core::arch::global_asm; - -global_asm!(include_str!("entry.asm")); -global_asm!(include_str!("link_app.S")); +core::arch::global_asm!(include_str!("entry.asm")); +core::arch::global_asm!(include_str!("link_app.S")); +/// clear BSS segment fn clear_bss() { extern "C" { fn sbss(); @@ -45,6 +61,7 @@ fn clear_bss() { } #[no_mangle] +/// the rust entry-point of os pub fn rust_main() -> ! { clear_bss(); println!("[kernel] Hello, world!"); diff --git a/os/src/mm/address.rs b/os/src/mm/address.rs index bcddac5..e0e88e5 100644 --- a/os/src/mm/address.rs +++ b/os/src/mm/address.rs @@ -1,7 +1,10 @@ +//! Implementation of physical and virtual address and page number. + use super::PageTableEntry; use crate::config::{PAGE_SIZE, PAGE_SIZE_BITS}; use core::fmt::{self, Debug, Formatter}; +/// physical address const PA_WIDTH_SV39: usize = 56; const VA_WIDTH_SV39: usize = 39; const PPN_WIDTH_SV39: usize = PA_WIDTH_SV39 - PAGE_SIZE_BITS; @@ -11,12 +14,15 @@ const VPN_WIDTH_SV39: usize = VA_WIDTH_SV39 - PAGE_SIZE_BITS; #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] pub struct PhysAddr(pub usize); +/// virtual address #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] pub struct VirtAddr(pub usize); +/// physical page number #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] pub struct PhysPageNum(pub usize); +/// virtual page number #[derive(Copy, Clone, Ord, PartialOrd, Eq, PartialEq)] pub struct VirtPageNum(pub usize); @@ -176,6 +182,7 @@ impl StepByOne for VirtPageNum { } #[derive(Copy, Clone)] +/// a simple range structure for type T pub struct SimpleRange where T: StepByOne + Copy + PartialEq + PartialOrd + Debug, @@ -208,6 +215,7 @@ where SimpleRangeIterator::new(self.l, self.r) } } +/// iterator for the simple range structure pub struct SimpleRangeIterator where T: StepByOne + Copy + PartialEq + PartialOrd + Debug, @@ -238,4 +246,6 @@ where } } } + +/// a simple range structure for virtual page number pub type VPNRange = SimpleRange; diff --git a/os/src/mm/frame_allocator.rs b/os/src/mm/frame_allocator.rs index b7c909b..d4320da 100644 --- a/os/src/mm/frame_allocator.rs +++ b/os/src/mm/frame_allocator.rs @@ -1,3 +1,6 @@ +//! Implementation of [`FrameAllocator`] which +//! controls all the frames in the operating system. + use super::{PhysAddr, PhysPageNum}; use crate::config::MEMORY_END; use crate::sync::UPSafeCell; @@ -5,6 +8,7 @@ use alloc::vec::Vec; use core::fmt::{self, Debug, Formatter}; use lazy_static::*; +/// manage a frame which has the same lifecycle as the tracker pub struct FrameTracker { pub ppn: PhysPageNum, } @@ -38,6 +42,7 @@ trait FrameAllocator { fn dealloc(&mut self, ppn: PhysPageNum); } +/// an implementation for frame allocator pub struct StackFrameAllocator { current: usize, end: usize, @@ -82,10 +87,12 @@ impl FrameAllocator for StackFrameAllocator { type FrameAllocatorImpl = StackFrameAllocator; lazy_static! { + /// frame allocator instance through lazy_static! pub static ref FRAME_ALLOCATOR: UPSafeCell = unsafe { UPSafeCell::new(FrameAllocatorImpl::new()) }; } +/// initiate the frame allocator using `ekernel` and `MEMORY_END` pub fn init_frame_allocator() { extern "C" { fn ekernel(); @@ -96,6 +103,7 @@ pub fn init_frame_allocator() { ); } +/// allocate a frame pub fn frame_alloc() -> Option { FRAME_ALLOCATOR .exclusive_access() @@ -103,11 +111,13 @@ pub fn frame_alloc() -> Option { .map(FrameTracker::new) } +/// deallocate a frame fn frame_dealloc(ppn: PhysPageNum) { FRAME_ALLOCATOR.exclusive_access().dealloc(ppn); } #[allow(unused)] +/// a simple test for frame allocator pub fn frame_allocator_test() { let mut v: Vec = Vec::new(); for i in 0..5 { diff --git a/os/src/mm/heap_allocator.rs b/os/src/mm/heap_allocator.rs index 42a6d76..07a53f7 100644 --- a/os/src/mm/heap_allocator.rs +++ b/os/src/mm/heap_allocator.rs @@ -1,16 +1,22 @@ +//! The global allocator + use crate::config::KERNEL_HEAP_SIZE; use buddy_system_allocator::LockedHeap; #[global_allocator] +/// heap allocator instance static HEAP_ALLOCATOR: LockedHeap = LockedHeap::empty(); #[alloc_error_handler] +/// panic when heap allocation error occurs pub fn handle_alloc_error(layout: core::alloc::Layout) -> ! { panic!("Heap allocation error, layout = {:?}", layout); } +/// heap space ([u8; KERNEL_HEAP_SIZE]) static mut HEAP_SPACE: [u8; KERNEL_HEAP_SIZE] = [0; KERNEL_HEAP_SIZE]; +/// initiate heap allocator pub fn init_heap() { unsafe { HEAP_ALLOCATOR diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index 3ad2ac5..32c91ed 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -1,3 +1,5 @@ +//! Implementation of [`MapArea`] and [`MemorySet`]. + use super::{frame_alloc, FrameTracker}; use super::{PTEFlags, PageTable, PageTableEntry}; use super::{PhysAddr, PhysPageNum, VirtAddr, VirtPageNum}; @@ -25,10 +27,12 @@ extern "C" { } lazy_static! { + /// a memory set instance through lazy_static! managing kernel space pub static ref KERNEL_SPACE: Arc> = Arc::new(unsafe { UPSafeCell::new(MemorySet::new_kernel()) }); } +/// memory set structure, controls virtual-memory space pub struct MemorySet { page_table: PageTable, areas: Vec, @@ -216,6 +220,7 @@ impl MemorySet { } } +/// map area structure, controls a contiguous piece of virtual memory pub struct MapArea { vpn_range: VPNRange, data_frames: BTreeMap, @@ -297,12 +302,14 @@ impl MapArea { } #[derive(Copy, Clone, PartialEq, Debug)] +/// map type for memory set: identical or framed pub enum MapType { Identical, Framed, } bitflags! { + /// map permission corresponding to that in pte: `R W X U` pub struct MapPermission: u8 { const R = 1 << 1; const W = 1 << 2; diff --git a/os/src/mm/mod.rs b/os/src/mm/mod.rs index bbf8bef..cafdbac 100644 --- a/os/src/mm/mod.rs +++ b/os/src/mm/mod.rs @@ -1,3 +1,12 @@ +//! Memory management implementation +//! +//! SV39 page-based virtual-memory architecture for RV64 systems, and +//! everything about memory management, like frame allocator, page table, +//! map area and memory set, is implemented here. +//! +//! Every task or process has a memory_set to control its virtual memory. + + mod address; mod frame_allocator; mod heap_allocator; @@ -12,6 +21,7 @@ pub use memory_set::{MapPermission, MemorySet, KERNEL_SPACE}; pub use page_table::{translated_byte_buffer, PageTableEntry}; use page_table::{PTEFlags, PageTable}; +/// initiate heap allocator, frame allocator and kernel space pub fn init() { heap_allocator::init_heap(); frame_allocator::init_frame_allocator(); diff --git a/os/src/mm/page_table.rs b/os/src/mm/page_table.rs index bd09cae..eb37634 100644 --- a/os/src/mm/page_table.rs +++ b/os/src/mm/page_table.rs @@ -1,9 +1,12 @@ +//! Implementation of [`PageTableEntry`] and [`PageTable`]. + use super::{frame_alloc, FrameTracker, PhysPageNum, StepByOne, VirtAddr, VirtPageNum}; use alloc::vec; use alloc::vec::Vec; use bitflags::*; bitflags! { + /// page table entry flags pub struct PTEFlags: u8 { const V = 1 << 0; const R = 1 << 1; @@ -18,6 +21,7 @@ bitflags! { #[derive(Copy, Clone)] #[repr(C)] +/// page table entry structure pub struct PageTableEntry { pub bits: usize, } @@ -51,6 +55,7 @@ impl PageTableEntry { } } +/// page table structure pub struct PageTable { root_ppn: PhysPageNum, frames: Vec, @@ -128,6 +133,7 @@ impl PageTable { } } +/// translate a pointer to a mutable u8 Vec through page table pub fn translated_byte_buffer(token: usize, ptr: *const u8, len: usize) -> Vec<&'static mut [u8]> { let page_table = PageTable::from_token(token); let mut start = ptr as usize; diff --git a/os/src/sbi.rs b/os/src/sbi.rs index 2e2804b..35243d9 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -1,18 +1,19 @@ -#![allow(unused)] +//! SBI call wrappers use core::arch::asm; const SBI_SET_TIMER: usize = 0; const SBI_CONSOLE_PUTCHAR: usize = 1; -const SBI_CONSOLE_GETCHAR: usize = 2; -const SBI_CLEAR_IPI: usize = 3; -const SBI_SEND_IPI: usize = 4; -const SBI_REMOTE_FENCE_I: usize = 5; -const SBI_REMOTE_SFENCE_VMA: usize = 6; -const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7; +// const SBI_CONSOLE_GETCHAR: usize = 2; +// const SBI_CLEAR_IPI: usize = 3; +// const SBI_SEND_IPI: usize = 4; +// const SBI_REMOTE_FENCE_I: usize = 5; +// const SBI_REMOTE_SFENCE_VMA: usize = 6; +// const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7; const SBI_SHUTDOWN: usize = 8; #[inline(always)] +/// general sbi call fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize { let mut ret; unsafe { @@ -27,18 +28,22 @@ fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize { ret } +/// use sbi call to set timer pub fn set_timer(timer: usize) { sbi_call(SBI_SET_TIMER, timer, 0, 0); } +/// use sbi call to putchar in console (qemu uart handler) pub fn console_putchar(c: usize) { sbi_call(SBI_CONSOLE_PUTCHAR, c, 0, 0); } -pub fn console_getchar() -> usize { - sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0) -} +/// use sbi call to getchar from console (qemu uart handler) +// pub fn console_getchar() -> usize { +// sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0) +// } +/// use sbi call to shutdown the kernel pub fn shutdown() -> ! { sbi_call(SBI_SHUTDOWN, 0, 0, 0); panic!("It should shutdown!"); diff --git a/os/src/sync/mod.rs b/os/src/sync/mod.rs index d1ce5bc..4743e31 100644 --- a/os/src/sync/mod.rs +++ b/os/src/sync/mod.rs @@ -1,3 +1,5 @@ +//! Synchronization and interior mutability primitives + mod up; pub use up::UPSafeCell; diff --git a/os/src/sync/up.rs b/os/src/sync/up.rs index c7b2c9e..039b039 100644 --- a/os/src/sync/up.rs +++ b/os/src/sync/up.rs @@ -1,3 +1,5 @@ +//! Uniprocessor interior mutability primitives + use core::cell::{RefCell, RefMut}; /// Wrap a static data structure inside it so that we are diff --git a/os/src/syscall/fs.rs b/os/src/syscall/fs.rs index 5dfff5e..0cbd0ca 100644 --- a/os/src/syscall/fs.rs +++ b/os/src/syscall/fs.rs @@ -1,3 +1,5 @@ +//! File and filesystem-related syscalls + use crate::mm::translated_byte_buffer; use crate::task::current_user_token; diff --git a/os/src/syscall/mod.rs b/os/src/syscall/mod.rs index 572b081..ee52f5b 100644 --- a/os/src/syscall/mod.rs +++ b/os/src/syscall/mod.rs @@ -1,3 +1,15 @@ +//! Implementation of syscalls +//! +//! The single entry point to all system calls, [`syscall()`], is called +//! whenever userspace wishes to perform a system call using the `ecall` +//! instruction. In this case, the processor raises an 'Environment call from +//! U-mode' exception, which is handled as one of the cases in +//! [`crate::trap::trap_handler`]. +//! +//! For clarity, each single syscall is implemented as its own function, named +//! `sys_` then the name of the syscall. You can find functions like this in +//! submodules, and you should also implement syscalls this way. + const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; @@ -9,6 +21,7 @@ mod process; use fs::*; use process::*; +/// handle syscall exception with `syscall_id` and other arguments pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize { match syscall_id { SYSCALL_WRITE => sys_write(args[0], args[1] as *const u8, args[2]), diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index 55856e7..a26fb3f 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -1,3 +1,5 @@ +//! Process management syscalls + use crate::task::{exit_current_and_run_next, suspend_current_and_run_next}; use crate::timer::get_time_ms; diff --git a/os/src/task/context.rs b/os/src/task/context.rs index e4f59d8..8e4f547 100644 --- a/os/src/task/context.rs +++ b/os/src/task/context.rs @@ -1,6 +1,8 @@ +//! Implementation of [`TaskContext`] use crate::trap::trap_return; #[repr(C)] +/// task context structure containing some registers pub struct TaskContext { ra: usize, sp: usize, diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 453ac91..ee36241 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -1,3 +1,14 @@ +//! Task management implementation +//! +//! Everything about task management, like starting and switching tasks is +//! implemented here. +//! +//! A single global instance of [`TaskManager`] called `TASK_MANAGER` controls +//! all the tasks in the operating system. +//! +//! Be careful when you see [`__switch`]. Control flow around this function +//! might not be what you expect. + mod context; mod switch; #[allow(clippy::module_inception)] @@ -13,17 +24,32 @@ use task::{TaskControlBlock, TaskStatus}; pub use context::TaskContext; +/// The task manager, where all the tasks are managed. +/// +/// Functions implemented on `TaskManager` deals with all task state transitions +/// and task context switching. For convenience, you can find wrappers around it +/// in the module level. +/// +/// Most of `TaskManager` are hidden behind the field `inner`, to defer +/// borrowing checks to runtime. You can see examples on how to use `inner` in +/// existing functions on `TaskManager`. pub struct TaskManager { + /// total number of tasks num_app: usize, + /// use inner value to get mutable access inner: UPSafeCell, } +/// The task manager inner in 'UPSafeCell' struct TaskManagerInner { + /// task list tasks: Vec, + /// id of current `Running` task current_task: usize, } lazy_static! { + /// a `TaskManager` instance through lazy_static! pub static ref TASK_MANAGER: TaskManager = { println!("init TASK_MANAGER"); let num_app = get_num_app(); @@ -45,6 +71,10 @@ lazy_static! { } impl TaskManager { + /// Run the first task in task list. + /// + /// Generally, the first task in task list is an idle task (we call it zero process later). + /// But in ch4, we load apps statically, so the first task is a real app. fn run_first_task(&self) -> ! { let mut inner = self.inner.exclusive_access(); let next_task = &mut inner.tasks[0]; @@ -59,18 +89,23 @@ impl TaskManager { panic!("unreachable in run_first_task!"); } + /// Change the status of current `Running` task into `Ready`. fn mark_current_suspended(&self) { let mut inner = self.inner.exclusive_access(); let cur = inner.current_task; inner.tasks[cur].task_status = TaskStatus::Ready; } + /// Change the status of current `Running` task into `Exited`. fn mark_current_exited(&self) { let mut inner = self.inner.exclusive_access(); let cur = inner.current_task; inner.tasks[cur].task_status = TaskStatus::Exited; } + /// Find next task to run and return task id. + /// + /// In this case, we only return the first `Ready` task in task list. fn find_next_task(&self) -> Option { let inner = self.inner.exclusive_access(); let current = inner.current_task; @@ -79,16 +114,20 @@ impl TaskManager { .find(|id| inner.tasks[*id].task_status == TaskStatus::Ready) } + /// Get the current 'Running' task's token. fn get_current_token(&self) -> usize { let inner = self.inner.exclusive_access(); inner.tasks[inner.current_task].get_user_token() } + /// Get the current 'Running' task's trap contexts. fn get_current_trap_cx(&self) -> &'static mut TrapContext { let inner = self.inner.exclusive_access(); inner.tasks[inner.current_task].get_trap_cx() } + /// Switch current `Running` task to the task we have found, + /// or there is no `Ready` task and we can exit with all applications completed fn run_next_task(&self) { if let Some(next) = self.find_next_task() { let mut inner = self.inner.exclusive_access(); @@ -109,36 +148,45 @@ impl TaskManager { } } +/// Run the first task in task list. pub fn run_first_task() { TASK_MANAGER.run_first_task(); } +/// Switch current `Running` task to the task we have found, +/// or there is no `Ready` task and we can exit with all applications completed fn run_next_task() { TASK_MANAGER.run_next_task(); } +/// Change the status of current `Running` task into `Ready`. fn mark_current_suspended() { TASK_MANAGER.mark_current_suspended(); } +/// Change the status of current `Running` task into `Exited`. fn mark_current_exited() { TASK_MANAGER.mark_current_exited(); } +/// Suspend the current 'Running' task and run the next task in task list. pub fn suspend_current_and_run_next() { mark_current_suspended(); run_next_task(); } +/// Exit the current 'Running' task and run the next task in task list. pub fn exit_current_and_run_next() { mark_current_exited(); run_next_task(); } +/// Get the current 'Running' task's token. pub fn current_user_token() -> usize { TASK_MANAGER.get_current_token() } +/// Get the current 'Running' task's trap contexts. pub fn current_trap_cx() -> &'static mut TrapContext { TASK_MANAGER.get_current_trap_cx() } diff --git a/os/src/task/switch.rs b/os/src/task/switch.rs index 59f8b1a..960b0b3 100644 --- a/os/src/task/switch.rs +++ b/os/src/task/switch.rs @@ -1,8 +1,15 @@ -use super::TaskContext; -use core::arch::global_asm; +//! Rust wrapper around `__switch`. +//! +//! Switching to a different task's context happens here. The actual +//! implementation must not be in Rust and (essentially) has to be in assembly +//! language (Do you know why?), so this module really is just a wrapper around +//! `switch.S`. -global_asm!(include_str!("switch.S")); +core::arch::global_asm!(include_str!("switch.S")); +use super::TaskContext; extern "C" { + /// Switch to the context of `next_task_cx_ptr`, saving the current context + /// in `current_task_cx_ptr`. pub fn __switch(current_task_cx_ptr: *mut TaskContext, next_task_cx_ptr: *const TaskContext); } diff --git a/os/src/task/task.rs b/os/src/task/task.rs index 036018b..6588ad8 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -1,8 +1,10 @@ +//! Types related to task management use super::TaskContext; use crate::config::{kernel_stack_position, TRAP_CONTEXT}; use crate::mm::{MapPermission, MemorySet, PhysPageNum, VirtAddr, KERNEL_SPACE}; use crate::trap::{trap_handler, TrapContext}; +/// task control block structure pub struct TaskControlBlock { pub task_status: TaskStatus, pub task_cx: TaskContext, @@ -54,6 +56,7 @@ impl TaskControlBlock { } #[derive(Copy, Clone, PartialEq)] +/// task status: UnInit, Ready, Running, Exited pub enum TaskStatus { Ready, Running, diff --git a/os/src/timer.rs b/os/src/timer.rs index 048aa3b..1948c6a 100644 --- a/os/src/timer.rs +++ b/os/src/timer.rs @@ -1,3 +1,5 @@ +//! RISC-V timer-related functionality + use crate::config::CLOCK_FREQ; use crate::sbi::set_timer; use riscv::register::time; @@ -9,10 +11,12 @@ pub fn get_time() -> usize { time::read() } +/// get current time in microseconds pub fn get_time_ms() -> usize { time::read() / (CLOCK_FREQ / MSEC_PER_SEC) } +/// set the next timer interrupt pub fn set_next_trigger() { set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC); } diff --git a/os/src/trap/context.rs b/os/src/trap/context.rs index d073451..420c016 100644 --- a/os/src/trap/context.rs +++ b/os/src/trap/context.rs @@ -1,6 +1,9 @@ +//! Implementation of [`TrapContext`] + use riscv::register::sstatus::{self, Sstatus, SPP}; #[repr(C)] +/// trap context structure containing sstatus, sepc and registers pub struct TrapContext { pub x: [usize; 32], pub sstatus: Sstatus, diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 022f3ad..56aec31 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -1,3 +1,16 @@ +//! Trap handling functionality +//! +//! For rCore, we have a single trap entry point, namely `__alltraps`. At +//! initialization in [`init()`], we set the `stvec` CSR to point to it. +//! +//! All traps go through `__alltraps`, which is defined in `trap.S`. The +//! assembly language code does just enough work restore the kernel space +//! context, ensuring that Rust code safely runs, and transfers control to +//! [`trap_handler()`]. +//! +//! It then calls different functionality based on what exactly the exception +//! was. For example, timer interrupts trigger task preemption, and syscalls go +//! to [`syscall()`]. mod context; use crate::config::{TRAMPOLINE, TRAP_CONTEXT}; From 139fbc637a4f878d502861fd739a1eccfba0fdcc Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sat, 26 Mar 2022 23:00:04 +0800 Subject: [PATCH 47/87] add #![deny(missing_docs)] AND #![deny(warnings)] in main.rs, and add more comments --- .gitignore | 1 + os/src/main.rs | 2 ++ os/src/sync/up.rs | 2 +- os/src/syscall/fs.rs | 1 + os/src/syscall/process.rs | 3 +++ os/src/task/context.rs | 5 +++++ os/src/task/mod.rs | 4 ++-- os/src/trap/context.rs | 24 ++++++++++++++++-------- os/src/trap/mod.rs | 14 +++++++++++--- 9 files changed, 42 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 770aba7..9fc90c5 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ easy-fs-fuse/Cargo.lock easy-fs-fuse/target/* tools/ pushall.sh +*.bak diff --git a/os/src/main.rs b/os/src/main.rs index 5ad6374..6494e1d 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -15,6 +15,8 @@ //! We then call [`task::run_first_task()`] and for the first time go to //! userspace. +#![deny(missing_docs)] +#![deny(warnings)] #![no_std] #![no_main] #![feature(panic_info_message)] diff --git a/os/src/sync/up.rs b/os/src/sync/up.rs index 039b039..e8ba20c 100644 --- a/os/src/sync/up.rs +++ b/os/src/sync/up.rs @@ -24,7 +24,7 @@ impl UPSafeCell { inner: RefCell::new(value), } } - /// Panic if the data has been borrowed. + /// Exclusive access inner data in UPSafeCell. Panic if the data has been borrowed. pub fn exclusive_access(&self) -> RefMut<'_, T> { self.inner.borrow_mut() } diff --git a/os/src/syscall/fs.rs b/os/src/syscall/fs.rs index 0cbd0ca..2fe02bc 100644 --- a/os/src/syscall/fs.rs +++ b/os/src/syscall/fs.rs @@ -5,6 +5,7 @@ use crate::task::current_user_token; const FD_STDOUT: usize = 1; +/// write buf of length `len` to a file with `fd` pub fn sys_write(fd: usize, buf: *const u8, len: usize) -> isize { match fd { FD_STDOUT => { diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index a26fb3f..e5b4ad4 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -3,17 +3,20 @@ use crate::task::{exit_current_and_run_next, suspend_current_and_run_next}; use crate::timer::get_time_ms; +/// task exits and submit an exit code pub fn sys_exit(exit_code: i32) -> ! { println!("[kernel] Application exited with code {}", exit_code); exit_current_and_run_next(); panic!("Unreachable in sys_exit!"); } +/// current task gives up resources for other tasks pub fn sys_yield() -> isize { suspend_current_and_run_next(); 0 } +/// get current time pub fn sys_get_time() -> isize { get_time_ms() as isize } diff --git a/os/src/task/context.rs b/os/src/task/context.rs index 8e4f547..d945c5e 100644 --- a/os/src/task/context.rs +++ b/os/src/task/context.rs @@ -4,12 +4,16 @@ use crate::trap::trap_return; #[repr(C)] /// task context structure containing some registers pub struct TaskContext { + /// return address ( e.g. __restore ) of __switch ASM function ra: usize, + /// kernel stack pointer of app sp: usize, + /// callee saved registers: s 0..11 s: [usize; 12], } impl TaskContext { + /// init task context pub fn zero_init() -> Self { Self { ra: 0, @@ -17,6 +21,7 @@ impl TaskContext { s: [0; 12], } } + /// set Task Context{__restore ASM funciton: trap_return, sp: kstack_ptr, s: s_0..12} pub fn goto_trap_return(kstack_ptr: usize) -> Self { Self { ra: trap_return as usize, diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index ee36241..0f548d0 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -6,7 +6,7 @@ //! A single global instance of [`TaskManager`] called `TASK_MANAGER` controls //! all the tasks in the operating system. //! -//! Be careful when you see [`__switch`]. Control flow around this function +//! Be careful when you see `__switch` ASM function in `switch.S`. Control flow around this function //! might not be what you expect. mod context; @@ -49,7 +49,7 @@ struct TaskManagerInner { } lazy_static! { - /// a `TaskManager` instance through lazy_static! + /// a `TaskManager` global instance through lazy_static! pub static ref TASK_MANAGER: TaskManager = { println!("init TASK_MANAGER"); let num_app = get_num_app(); diff --git a/os/src/trap/context.rs b/os/src/trap/context.rs index 420c016..527d1b6 100644 --- a/os/src/trap/context.rs +++ b/os/src/trap/context.rs @@ -5,18 +5,26 @@ use riscv::register::sstatus::{self, Sstatus, SPP}; #[repr(C)] /// trap context structure containing sstatus, sepc and registers pub struct TrapContext { + /// general regs[0..31] pub x: [usize; 32], + /// CSR sstatus pub sstatus: Sstatus, + /// CSR sepc pub sepc: usize, + /// Addr of Page Table pub kernel_satp: usize, + /// kernel stack pub kernel_sp: usize, + /// Addr of trap_handler function pub trap_handler: usize, } impl TrapContext { + /// set stack pointer to x_2 reg (sp) pub fn set_sp(&mut self, sp: usize) { self.x[2] = sp; } + /// init app context pub fn app_init_context( entry: usize, sp: usize, @@ -24,17 +32,17 @@ impl TrapContext { kernel_sp: usize, trap_handler: usize, ) -> Self { - let mut sstatus = sstatus::read(); - sstatus.set_spp(SPP::User); + let mut sstatus = sstatus::read(); // CSR sstatus + sstatus.set_spp(SPP::User); //previous privilege mode: user mode let mut cx = Self { x: [0; 32], sstatus, - sepc: entry, - kernel_satp, - kernel_sp, - trap_handler, + sepc: entry, // entry point of app + kernel_satp, // addr of page table + kernel_sp, // kernel stack + trap_handler,// addr of trap_handler function }; - cx.set_sp(sp); - cx + cx.set_sp(sp); // app's user stack pointer + cx // return initial Trap Context of app } } diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 56aec31..14fb76b 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -28,6 +28,7 @@ use riscv::register::{ global_asm!(include_str!("trap.S")); +/// initialize CSR `stvec` as the entry of `__alltraps` pub fn init() { set_kernel_trap_entry(); } @@ -44,6 +45,7 @@ fn set_user_trap_entry() { } } +/// enable timer interrupt in sie CSR pub fn enable_timer_interrupt() { unsafe { sie::set_stimer(); @@ -51,6 +53,7 @@ pub fn enable_timer_interrupt() { } #[no_mangle] +/// handle an interrupt, exception, or system call from user space pub fn trap_handler() -> ! { set_kernel_trap_entry(); let cx = current_trap_cx(); @@ -86,6 +89,9 @@ pub fn trap_handler() -> ! { } #[no_mangle] +/// set the new addr of __restore asm function in TRAMPOLINE page, +/// set the reg a0 = trap_cx_ptr, reg a1 = phy addr of usr page table, +/// finally, jump to new addr of __restore asm function pub fn trap_return() -> ! { set_user_trap_entry(); let trap_cx_ptr = TRAP_CONTEXT; @@ -98,16 +104,18 @@ pub fn trap_return() -> ! { unsafe { asm!( "fence.i", - "jr {restore_va}", + "jr {restore_va}", // jump to new addr of __restore asm function restore_va = in(reg) restore_va, - in("a0") trap_cx_ptr, - in("a1") user_satp, + in("a0") trap_cx_ptr, // a0 = virt addr of Trap Context + in("a1") user_satp, // a1 = phy addr of usr page table options(noreturn) ); } } #[no_mangle] +/// Unimplement: traps/interrupts/exceptions from kernel mode +/// Todo: Chapter 9: I/O device pub fn trap_from_kernel() -> ! { panic!("a trap from kernel!"); } From 9cfba2a4155cee74f933913b4020df9cce8a66a6 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Fri, 15 Apr 2022 03:45:32 -0700 Subject: [PATCH 48/87] Bump to Rust nightly-2022-04-11 rustsbi-qemu=5992db7 rustsbi-k210=1937341 default-mode=debug --- .gitignore | 1 + bootloader/rustsbi-k210.bin | Bin 94904 -> 38104 bytes bootloader/rustsbi-qemu.bin | Bin 161528 -> 66376 bytes os/Makefile | 17 ++++++++++++++--- rust-toolchain | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 9fc90c5..32f926a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ os/src/link_app.S os/src/linker.ld os/last-* os/Cargo.lock +os/.gdb_history user/build user/target/* user/.idea/* diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index c53ed1fc198816f8d4a0cfec958eaae3f2976cd0..158bfa4c6eece67bd9945abd10d35df86a29b9af 100755 GIT binary patch literal 38104 zcmdSC3tUr2_BcK_$qfmD2E#+7wh;=|tVSRNls*^W6fL{F zZU6;~jYwVF-T0!Iwyu=|t=+b08?5fuZQV+@{=e-P3{Z5ji{FC93i3a5=U!gg?tVY} z{rw-e9_Dq<%$b=pGiT1sqyak-Qd7k%DpM?>aaYw+Kjgo&Q0=}`dNW&9^gKd74nBQI z-Z8yvW^Zs`SbyTc%Ar-m?Hw1ozUjT#*VBJ_;JYD=6%rMyvZ&}NZSi-xGZ{;bB;2A> zN0lU>G^eDLFd{T+oIiiX6yPFc4X)> z&t_(2?fA9sH)nqnY_=dxI6@X5DhkT)o!RH#KYQTLq2S^A4rkYq-eY~u{l^DB7&P+ljd1=*^)mNVxeC~S6NKfbG?(Z)B_myi`e;mAd{rg}PzI((HqKcY*@q0BDb!Qjm z*D@DHMVd>J_nYHWQc_Fuf(uR-q-?RR58KeTAuYr9LRev2A+(G~NfAPnkGwCqH>^un z<}A~3b&n$SZIQ+mcsh*R&s|K8Pu-tNn*$z4Xe~PMY_O2t`qAyuOH(G%Fqp<&T~eel z2S~9$#5aJ37Nj8Xs!e{5ohI6`#}v`9&osB;u*s+4O%v7dmMOx~WSZ;X zOg@fRO@&GNP!|f3?L!A-pQCxm*%4sCHSE66+2zSOdr5tbmz{n4`-#6>>Kq7QF%I{h zw%6OJ?W=>3ojdftu3tM)g>*yOVG={1QYh-;_?Gz)q4bUNYr+2=_FdxTl|8F2wvSx6 z{>|XUt36jPU;3_FTV|JW$nH&3YHyCRd(jfL7bme#qowL;oYd|~%haBn%&w$qwUVRN zG%eS5sOd7fwo6URJhZ*w_t5r%U!m;>zd}0zex-H@{7UUG_&uE%-_wclr#UhHG$+RQ za$(GRQyizyi8Mzhr=U;HiZpLb zPDyS%BhtJ+Ii>Yu3F{QnT!$y8p^t*c(n1?1r^TI!A4}uvC#MyCm@<~ueQ-!R` zSf25~KE{jdmC0$SDQqk)bnoP} zxJJ`h8nA%4p!7}i{c(bi2Il`hH)fZRPL-)UKtNNW+5c$l5}v(=N{yi7q5`My&Xya zI1R1r4eOKiGo59@dhT87A{T5UbCcsfJy(tNRfo||V`KHfIHos=R@cU&x+FYvb6a(_ z3bTZxjST(zY<1ao3iGb^q(@cBO!udEmKw@N8$JJw8mm8zOA*%3qL`(#m&#UGx$p8E zu5|*X;&p%KA8Uf7_j)5~R5fbczGi6(caB>va8MM*bZnokr=O+tUL54KJ?_F7cde02 zz1=fk9Wm^Od}OcBWVU_>1$J|=>=1ADbhkN>Q_ft2k;tF}-baHT}qxe31t74SMy) zJVhh-_EKHHms!E;I<#F9c0U^uzJv;iI*dXVzl)s7o~b=~rh@tc`IesbrVaHQ+E#6gh*fVVuVVH3O33I zg8Rez5_?y61#vXsAcf>4ljo9zNZvwRLcn#PQ!ampHc3O3$U3qp^t4yub*Z5e882OL z2s+<{0Xg(1u6}?E#?Onc(CIx9M-*%B}Zl?h|RW zl2YY9ff_4!!#e&LlI&)tM^Pibr3NL1YgDtbl$Ie{CfPmWJ2ATn}v$j97FS=LPMMfU`xF;8mgn8)5#hkf7 zIkBDVpiS+S$^)E9dWdh+Lto)GZK_1xpGKC=IissAZBkO08zt}vk|sGQQOg5Sp)Zcd zc)K7?j_fjjRICDH1j8 zBV`z;Uck~kXT2^`Xp#%Bi@NqWzRaw{8ab~6BCp$O+y@{BKHcGYyL9I8B#oTc;y?OA zW%gxt<&j)77i$Z65Nqbr>7b+Qd0&g@`)H)3sHEuWjkbaP{q=okde3&9>sUSf%+PZK zDg9}E>wB}hwA<*1{}9Vk3U&qxmoT15)C|~8NDbQ%4!dV3jaDuTCF%drW>QPn2psnDfZQV z==u)7>c)H*QWkHlj;<|jQou~0K=#!}6kVHHt*2cQ`_r6MO(V(5N+#7nsi8~ldzYX_ z*%oSL86&O4S}-T0gdPgtC$kQ!>48z^`eB*93i^Bnw?eIi@Y;oHHCKiRUh*QwzsW;Q zca1VBZ_d1*Fa&RSSk_O7`;M!89F)<{&4#v9NkgKJqxu|qUQeni zy*^#O{^FMSt^2o1UbvVMpSeGi1v$5u502Wu2tckE?O)u(|6RuaE$9DwP&nR0;(AfW z*iZd1T9l$bAAs0uJ@;B%<0cMT(OmsNZE1@Fl}0I$`UxWnt}TRCtd*E|jy$P9{~A(H z^Fwou?tE8|du`gck=u10ZvSaLb|sRLHg@M2{%&l-El6g(`jrt5;Jv4{N-9vL2%XMFn zJL~z`%(eU=rhM9LHFsmw?z%DR%Vbu2rKmyXtUG+F_4!TETA9_6x0N~dGaz$TPdPJ( z_E-DGLMtw%&x+%FTA^`O6~h>*!biAANGj~bC{M0kz$o&JhjmAirXA41yr!77Kp{w- zXS{WxOJDm4)tF$QQmi%>TLc;enT%5~+Yh2~>>`hN>&B6V4cPiX=pFQGp@d{9>SsY%y)E-ztBhCu0ScLXYeJ11VIb*g*=rs~fqNxW*q2p-O01kU|*Cr7&*c6tzq@(6`_*Y(YEO_tXmz&--AiQ0v3i^3;oYW+?q4yR)0rq80Yp@q$#u zr6VNrrQ6M9Hp|Ai+PWLiySGL zyV_MwE{!hSS-AR6|3ZI#bTismt!`%}>S%wodcMWL zHu!-CN*POvETNjHS|g)wLUg<(R23ynqLJNdK;9-FBU1{itMPk?)zw;5eo=V!7c6vL z*nX<*RVcK50Y+#intN2+KM!dK0tQD%LF+Bl4pkuSurQyma&~wdon0lp^Ayg0rO`P+ zv^DOXd9!Lz5hCjXQqQ>*+(#(b)y@u@rx3z}&i)dCDzs^yqDG);o#E{w7{>4GR`dGA zV8D~WkH@kRJAG6l;w8T*t}U*9+Ei>LntD<2Pp>JLd%x?l%#XXu1S+QobmJO!d(?po zcDYLo%v2!`8ttUrR}S5*<8Z98Hvn9yc_U+O0-e!_7^WE=Uj!nhtPklwlBC}GC)FXyLPywqYktII~Teebb5uLJM=R%X%*qRz9YsD z$^7Xv!u;ciLZ~=VZL37gfJ-H9lFeLQ8*=pEOf~JxuUZvdq|}bjNEwF=Q1$>wtE}wN z;4a{#SBQ_$_Ej!l3A}i2TQ$rj)C+tZs#Yk%6?V^JN|4vy&?|(3`<1pMxNEgQ9}4uC zdKK91Ne$?2nDTC+4n$0 z;Y%Aw4kJB%|59P3(vi{7~Z{OLT*w1yI`|Wf(jA%yup1G*t+#WSoiQJYqhxRm) z{tY_}QX?U?DS8CPZx6__yzQ+cHYXR!McV?tA01r_dO{t<+ij+!k>xr_iRO-rDQhO~ z{8n`|mmRCrZPQkg(QJIPnIm$Wtk;(Lxfpi>bq@AoXSgt%Fh1`jn1`HaxK*~ZHeu{N z70iwAOeO2_-c;Pp3Fjre#Yq!6W%tGJst%lnvCOBphTkr|^e>ZkXFQGjM?B|}xu?6S z!W?l)=>I32T_7dBC4F^doGd>wP%`ue(hb)c@VMzdengNUE>YK|?UnQ`n57%g4iRkE z>Uo0p*cyva6rEFalxlg=447Bru&2C(J3`wVlVkx(PNwaONqQ7~N$0f#F-gmx0N)qdp`~n) z_uy!uHHaSc(00f8DU#)I{$cRYcE)h%W}(5^54_9_f*5BX_&On`E2ev76!3rJ9FFmm zpdc^0h_ddTHaHrSwCZudgn1+;$+QZ5T`+Sbf-b5$GvL!;IqJ#RTl=jg^ikEuJ=(u3 zlyx0={zj{)P%Qu0M!1SS#_CO>l-)(o{k)plMbFM++pHCx7RQS424zSTjY7g{6nGG~ zV2|}ubz?V2S!!r#UF%rOYQJ66VsRu!k<}vo!wYPTT!JiN@^I;S8d+5G@JhM`V!p43 zn0AP%k%u>04^jI3dMaN2d9^kzbH}zcW>&lZoMLs}AVtP}>vBdRo3$7Ab6{bbv4d7A zkJVOmHaRVhN1`l8SA<)RE)T!I1*{SLn$)q5p=tjJqeT_!Yk^Zci^|~p3=3KVgr>-X zhO~>aGVp}O;RX3jY^Tom#T;81W;*R___uR>x=GB@@f_np``-U==jiu-;1#?=w^^&q zYAdb4+LXP?53Q&U#@~foXx4fyORdw&0R9``rS z`5)!sR?ug0e|Nw2UHbHb;;>?)X)UwnONDOp%1z&Gig^M?knHX*=AkdVVxEApFZ&{j zdC}${oX2dp&5C&v#8Q5WeO8fIDGS707-K5Mo9qxV5Nc>@CQwVVj zz%L)#211MxY>&xQKb2}yw=xj#GIt$FVe_8yBnrrFcMnjwZ1B|q&6jAZ5^EP zHQ3Fy&|+ilwe)j`z(Y!NJLcgetp0dLqKqJWRPlSbojDV8vduI7BxiD~+P_%Ik$P!N z-tS>rKg|ER9kj4se|fC7%3Q()wDarque?&+9Q~OhO_iwwK36!YF!vn!SxG*`SJG!m zJgz|jPEpCv3Utf(^gk=oe1YyPmuM^5{rOwt?d!m8Ewr!0{|vX1Tk{s9TrI6Ox$kQK zM15WG6dSEc1#cB5;kG%$J@(d0Sl8nP`+Rat?Ym<&x$n?hLb(Z0ZZ-We@U`)M z2Z^&i2yvx24p|8=CvB2lbKWJX^-CeOj6SJIyQ4r%EvcI;q_+JMQaQR+kv6MPOqJAK z`GC;&+z+WX`U6E;xEZHPcDtG><4)tH55VF_Yc!`nz%_ZSGsvbyU6w-LNiQW+5ht|Yi~SACT!SE?$j>z% z-x@Jjh}VqzoF0!y;ZBf*!_CD;;Hz1b$dh0n7Gywv|D@Ot#MV^=elQVRj7QT({x~t7 zKX|+hNbl{Nu!)>SzI#@Cy~L_8`<$kXoU!_Cg54dgFtgVwWAPtJm<@yQ zRo90kMBk|}r(gfHg=i$99}9B-32&w3weHs6BG@@Ivs?()dW3Z$ja1xuhF&B1^{_K7 z67WCCAKSDqJm$qxJuq$r;FA`VOMQR;7 zOPW9y=s%e^i}>Qs3e;_+wrv}HQ?#wRlf9-E`WKJxwHc|3 zlZupi#uK3xCpNM{G_4`{j&s|@+2!MaFF>AU2Nf{q#o;;cZ9M0tDnIpF2lGpPRl8J*{-D{H~&!I?bUtLH^udx;v%tF zgf=UB7CC4E*Mu-GXR25VB_2ADOH4_+1UX-Z(0yWy$9>}VmR%-&YJ5j%H;}5M!aSF3MF?|B>KOV5qRo?9xDIOv zBts;He!H@PuMxBb$jQ4}*dJiMpI{zp9LMZF73vtzk#3ooW9VBG@ZN)60>48`-i#0p z_9Ahwlh{#Vo^!g04F-EB!9X2>FqVj4vrqJO?B|TI=i&3{`1=0trH-=n!X&2hpsa}1 z(=~C81_zvS_Dl8AhtcQNd#>n{4kEg8Jg1^p#GK-O#~JlpZCqp1Aw;liFA;3&%0f6P zA!QWp5q)uc!AioH8~3v4L%)TwZJcPAT?!|4*p@{wlbv{_0h>$I{$zYkhtIln9g%Qz z3#H#BW>O+?T|1Io3z7V-|8soQYf6Thj;dq{@}JLW`)lpBT&=r(@8l9 ze$y*;tFcVUe@}Mq<@Nl|T^K1SfLoV<&PU_#Dpt#A6$6gZr=6UpaH>Z1=g& z)g#Ybe{L}4YTA|W?^cB~Wins&`7SAEWM(v>N+UxxNve%-R+Uf6bbadV@H5VBAhlq# z<~xYbmF4X40ZSWL>%{rxm)d~_m9|TuJL?>vm!BCb8MZ4a$;$4;OJsNHdSMjQ?+5~W43i7@%gWUB z;0-(ICiW)Si=01*GOPE0mihVW{$~bOb$v5{%f#j3a(aZ*i`LK5KNt9Nk~TEGDcJiy zz-@R`CG_K?2tghC2`=q|IvAahpAddc+bt35Va!pefQp|bJI*9srA(H)!@+6=HvoFo zR$nCP^XpVwWz>>x_^Vn9{=3nNOW>DSalD2JqE$Qh&qKvVVINeS0w*{#X z@an8JdUdC;YPlbZ?8AAj`6`}e0_)*+;4zNu2#bE5k`~O`{Y+ptA#{H4d3ElYOs9J6 z^Qm-b>jXNGPuO2S>eab(65ZWs{;lP0nn1_%X?^<^J|*<6<>gJKGrn~TpBlf@Q~4~) znLx+$=`u~`b3ZHe=UZweC96QnWt9n}ZIa*L-|Lq z4mYS^U4$CIeCKoyz$hFFcm_hAiEo}84(n8?wB2DsPak@$Vyvg*-f+*MFVwSpTymBc z*2GrRNw)ZOF#8fcSBP=Idinj`8c`Ysu{12~RuA5d9=oI-Oh5&l>cKL^UQrLqD8`?j z39f{>i}nRq#>}E;fvaGA=sUnwfo66mxEe-H2h*uRG)#Zh%pLUIddPwCqvt7E2;WI- z=VI5N*3Cb{%M@=fa6CI%rnq{q&gzMM3><~t(#LU6PiS+#j|~UBIx8p9C7?N9PwlJL zq^Wf0fA7`#>Lj`{0LZYfjc_M|(eQflI+ zQX02U89g8&Zi@b9DrM1qQz_|+$&{i@!7ls4RBFfKsnlHAWNIvh?iqCZR7zx+N@*;f zJWpV`b<625rcx$HOrYd-v%$j2lvvVlohdpNPNj2gnM?;W1+S6SXTe&-&lJjpy3ep( zt#wO%-)gwAk7o#BX5cj;ZZnw~&J73iGeWR1BXBByM&NY>%?7tG{oBbif`gtqBNWMw zfGx2!sU!i(DDNKvW%tx;12B6D|juR&pY`m*aPs^>X2Q6 zTT9#rcL%8P+RnUWIE`)TE5M>2%KtU;e>wgyP2qT2vZ7jT92~7<`FY;2%1rJ#hWV-Z z`!Ivm*a}bX!@w%SV|A-VtTr{q8owK3-WlisT}Ni8LHFVg#er^BdkFLng_)cUs?0T= zUY#XHUgkwcjB)tJ3Hy}DJGuus(qw^xc3EcnxX&g^1qx@V=le90G5IU}aU zmdlbN&`5d@Ax}C+jwF$_UMHZX_!bIVTPf&gj0h674idP9yKLRZH(Ze@GG}8yp24mfwqY zOh=!Je$8|`0lCCboOhfHYlZlvo~$OW*91NMP`AJ(dLK%s6CT}5bCQ~+>NFdwIRO@G ziPzE?xe9bwTr;dq3j01qDQiUP^Me%8Bymb`hfa9e5GPkGWtQQS)`1z&E{nZR1|?xk zayx81msY8irBPuq$)lu*HZkk!(R4b-#J6Q9a0{9w+?zijwo%8sm`k)6Qe2Qi8}H+c zA*cyj(-Nw>%Afc0f5Z8|2;N*+G&KGj&i{q;Iqc{Ef`t>O8u4Gyh)asp@_s3^wizkR z`Xo3nt`ysfewA=xJ7}jJ!k$Ir#9A!wk2>JP&bj8*m;=xHrq5y(<|;P2H?~XLu`6>M zoaB`3zL<>Lz1UcgM0`BeDWED}8~QTi_fcep&gPZw3zV;{)%8XLRAG{R9`OH#y!Bb+2YG3_Mgt7e9lkj;356_9O?-Ffj`0j zZ~g`T{eGr&*}qbHxzFuO|Kr-9E1mS0apu3?U+Q)PGXFNRRy=i3nDLo|C?mWy^R0pT z3H;MB8$PG2SbIliELT!TBpdhr_&BL+gTA-bPp?T)o&n4>-;G#Gei~EmHHK;ZNlelo z%1Im)+>Qf0w-6w2ln(g9{YS9kz$^`~qsW<})I@`Y!Vh_$B$D4#;>jH{k-di_A8s-5 zqtaGF3pe0;N++b}jio~@-0k4?1GXkHbi2hXDT6`yct zn3uBFho+o5^Ol7NJ46dj^0M2dhxAN3mF8(mefV+Bud5FDJ05D4A+!W;YX^Wd!MSbD zWGj>_W8At#=ZNcX(W*%~{3wL@lf^i=lY(!lX*=+}hyZ8>*y}05LdxfF+^Fq>TN7aA z0(%VX@?mcX@vz=(6!UI{y8}FTd`&(A+Lz6CIg(1s?eaK}H4S!oE6u$0g~aNx%RA(2;IGER=s3Y% zt={7TzvQt7yH&0_4Ym+}M4e6)tTIJIU=5xbl%%BSD`YHo|D_J#G4Lh67*e-O>YAgH3D@+diF5dn}jv|y-8TZ-$yp4+1CtAI_Lgw8~`58kz52C3yPa?%dGZC8j9;@_SPExk9w7HVf zR+4dKOo=ds!RkvVthgeD*BZ*x{5b3)Tg~j;mo#ik(_}OImNC(UqT@x+jbRwRc zc&i*gsx@G9!XruBrRyD!bwC=)f$+k8EY3yTDlxzCS(rO<26DiRh%L!DAFvP$?ZLk9 z>?Qn?T7*6>-v7dPc$^*c6kr|X`M@P&y@RX^^}melAU>NZ67Kcr`e@Mb_ens1;CI1s zY4~2PZ5WpZZ)4zArc-FO?suL2a07FI@XfY>t&H@?O6>s5p+l14Hxx&@oW1i@$Ayv+ z%w(AJpL*}XNaV94w;ib@qn^9B^f=ro<1IMGd-+>uyq~^T`aX?H@1-f}5*kVGiEyOeepGz>F6hrAfnB&U{XcQ?{aabsna zw@|c4V|h0k`JvdMt<%$AB0JcE8=LCk9ODA)9BZ$yti^o0{hPjrzASnjF{36*&wa(W zPIMXHKBo_%!wn%t)6hBFsxoHQ1sQIgL>M)}a6(RZy4NTC-Ho>Ot%Ns%!M1b4X{-a* z2FmCIZ}5Kp?FgoVvq7@jXy8ne_c^ZJ{(h{sOlss1_b`{>eIi7*3tqbCQ831Cc@u!& z101i6t^^6$CcRgNr0g_lsc{#)KQkibWp%S3>O4^g5@_cPzbI_rI!g`PB~rsQ$*xQi z%gy&TmF(sc9vhK{PLpy82c$bCrI0R--Y(H~MfTe1jS^j7Y3RdJseHS%GjX~H@LenloV)}m5l8N5-Wjoc+ga;cG)?yTH- z$;+zPC~{;CP@0qt6Jw12G~^p1JBXZ|9#%uqx?tESzY=^YtUIyu?C`mv_5qwfO(|Wa zv1Rb;u-gH*BrBz{xVJo|IL>Z0qMeu2&9f0x;VB_J8&n1d^RlO`)UXZe?K#$Ch8egn z-lvNbxr73tb^NB6MhjS3%4K@_sW@EQrJba%=b*0D4bo80vHtah{@pgIe-oj9w?Y5H zyUv(x(7&G0zuRupzc@#+k6jX&UHP61yfm@rtTN1@vn)gbatLp$6kWmG<>bUvXR2p< zPl0Jm{TA;@`V)Q;QEHS?5ub7ihcA^HeW^k}Y$1~_ks+*OWLEo~kQ$XzpGu!ArG`pq z4dqyCa5rfamr$}>c}oiG#(hJ$sONiU>iQgHgL#p>2+eOt_(dpfTG|lQ4zE7HgZB#v z-fwz^NZ<`7y#5qleJV}x>a!hQefHp2oPaSMW8l}HlU{rZ6!_Jrw+UW-wue%HJA>c? z-GtYn6KVMupJHi1>tlLEu&c%Wj_l2`*8ejvH2INk{E>g5$**f2YVtx;++TmR2TQ!d z{QsxA7ws6Y`_H~ly8 zVKweRgaWVb`-kcW&h(${JJ;LZb)n-}C2jKej~wzgg?OEiNSooPwnNgZ?bi*YpMh7a z6yrs!-~}s4)Zpk2d3A}p(jV^KaYVATzzRnpM1QSAjOywVNv+9xRu{diQ`q?G9XRvKM)v(z9Ptvn0wmR?y+y+k`} zYgk5>Mp5vaC{^YvGwf^NRtw;b0N%}?#RFXia7JE&(^C~#`?kT{@bsk<@LMI@hT)dJ z)a~net+)Z|Bbomx)CSiR75dGjeTvmeKd{Hx_&OzSQzcV`e|Tq)`JaEOCRqw~!TBxe zEQELVCuHtBJ%{0a<#PO{m)UR_zq-mkj0{4IyWsFm++J$`ht6UJ?W2?Z>uhtKM}2EjY;ER`+FkA2r3NqLcd6DP4fT?$%L3ud^D~K0rTJ>{!#G8G<*;Kl ztR!S5Z>=1oI9(bAZ{auXl1PnS(z%s}&QfEQ)Y}Aaol9Lv$Kkg>daf+)tJ7d>e#NCI zeq>_<{@sD+Y!`&p63ylk;S_Ubsi6vHJ1@yAnQ#lw){|^XtxuJwUo42%|T6 z8T&INnW5&A^3ny5;CHxE>53|8i1rN$ml)#ptaNg&4&QW`U2n(9X%}#^+ohlqmo_-7 zC}V`fPW!>{{Mi4~50%DxNuWLw=|U(0>~V#@fgji8tmZC5Pg}owzafV9LBOrooASw} zwR%In1^##O{9`GRE+M&52~2sFXH5<*OXPFP{0hHn-PoYrHeR~=!i3U)A(rmPmyXwO z>sMUjYVK!RrHJt6p8opqR8Gu;6FBkOh6pD(SHg)q)p(;gF+}@{G{ox-Y5Iq0Tw`o4 zwfsZ8SHTva#EzhH8eXIMpy3I%}7p>2?L05u@-yiDfAbJIYq^Dv~zW>6PBI)1CldA3cKS-0RAFGa$`@nv}CE-pm0|u!2ySz@W zhIf6;GM7qcI|eNncy?|BWx_t6GfNyRZOm^CGx+$E_@x9xN##YUP^yF(IE=^j4w#2w z$FmY%mQEel%vMfP>MDcVtS}#yo<};H-5L#7HxI_uehQ=D_by3sVx_7_ODTwEW&VgClWe^&0CAh&jqTj_f;N$GoKl8>JvV@COjw0WB3 z8F&FqB@P0^&ZTcbSZe2~E z8%`NY8(808W0fAKC3oaHVF#82Z;2o1D5;}i?#I6#HgVp+xHbNT{Vzxg@%&#EHxJI^ zR4U;%(5c{rV~HozQYv;FVCod1YVLv;fDQjLfAid9_6 z+LF4kvZqHlh-szWiYG=HpVS#@>&T4h^mA}K8)JUvL9LK*LACSIy-A1B{grl@S(#K0 z>?JugNKF~6TDI$>&RTU7*qf@IamOmz7A2fUAN4S{_<-9=n?IxpljYX_M7gg+xz-kDW~!7*Xy;Z49Hf7UbHa69 z`k}x}3u)VuwLjCU*Cqj57Qi zD%aqBrl>KG{Z0z}Mha-m@ard_!-5}v{bV2P^(OvK3dDlOyblGP2aOqK1rbZ62$Ak1 z8Z-P(3Z#L?jB!C@o`5@%7UPSw2f&XtW>J@OIEmhfYerr1!GldGAWr|Y(PvMa?rlmCj4);5PW?`c%H;+VhtQThtMrS|9wGm^0@{LP43#=NM2xv@UZF6qB7%ycAvAbS3m$WGReFuVbZ5YBRD+k(Yh&qZvDB{f=X(c-i@{cXKsn^|EWDb4mkC zcCkP5A0T-!ZCYFUP=FIN8`12DtfoQ?T67>TqLXF!F$sN479EAKf+O9-)sXbJx=w7C$TUP2ptH7Fn11$3@CVog#>M=M&?a@Dj zd1MHcdUVeqX&p0|gdsSu`fLWXr3GpGV*C9bs*8cSul&n!p9W@5%XI1?ZJ(~6#C?19 zfq}*r7t*(!M{8b;A6oJ!#_dAUwqsolNZTDirc(P=@yE0+nu1d!39A zqt4j}w*cX__yX$4u(p$okM2bc;`n$SA?8M#4Bo1X`K4+vc`0;Pv{xb5L6WO+t@b+P zI^ygkxw4Qe+>)J=D;*)`T2v41^Ifzpa`=diu{O)q9_^#lLk!b{Vk^`h{)pM?A&uum ztE%HqV3ji+7xd}mOTbZKvkYvMNb2E%>>g;?{U1O4nDk+z2Tf_~=DeugjpG7OmCEI) zFrd)i{ika;8|5C&xu8zHyNb?wa-_wMGK3_Rl? zwV}Tbh=!Jw+rnT~kdS#p125#GYo%~=#%{efgE7j{k&~S9)duM@*jZg0r0gF3-dGP~ zhFc`1%RQmN5^?0)UiH+QQ2*YY#sW7R9*Y{Cb*aQ6A#(sQgv?75C@WNx$1q^0xE zIxE2X`_~d^&PLb`sc#O=@M+K+{z~cFtZ*)be=)+u`CTqO3rlXBAF8Bb?n3UGteZ?{ zgD1lVOpC6i&XlgCVFrR;+Ix0%UxSHr@39Uu-U?YG=Rv94B~sd03R_Zo$TTL2t*?^vA6-SUahBPxC`O0l?|(3`q0#mZyk0b- z`+s-f#WwkfAM?Tiu$$XA{Qy#fr0&iqZ>r@v^ra8g9K3#%s}xMWOVa3Z6m%bWLGD2- z2oJl@a>hziyzoM_b-FVdpT58xr6Ag?qvqczUHZ>TZ*H4ddWU>!>8XPZY;sMv%YPVE z!#*c^H{7R_hM;=%bpy4GoDrLjmcAoLm1%oRodB?n4ul8pgw<}W|0JvQ;&x^L7EsQqc_ z@|S=MTQk^^+a<;lIJK6)2R^@7O@2#v76jzhmcq#jK1;E~?)P}zfub)_NYQI3lACXG zXS(|3v|aw~XfDii1WS$g$aM$MDfpGZ*I;e&L3)q#;O2ldpN}I_Twf8-6`KSd?c&9p z_`Lmjb3u;r%{-lrGYY?Cd`V#*4?WmhW3AYDM^>EyRyvNp-_KN1jxAbu!0tz3_BE?m z9sJfBxdSTooDx>@7D2NjUpu78)eb1KwEc?p+CJa3ijC2|s+1~gB-jKAKdm1Uiy+n_ zsbxX_O?dT?1ickNlbNB9C=1=H06{Dm(lUUsiX zcO3quPtwwIJtKKX(r9zRzFdx)e$S-+fH)dX#cnz|^`IY|VBj}71h?&O_&vo1Ft_kC zT#*)T*z#*y+g!{I+|nQ~?dOZ}rVtzt+Bd_}zI((YK&ga&q_OO*b1WXiBe;FSX}Zz?=BZsL}Q~I(&k8=24lwb}>?a&q>uk zRE(;a_voW>>YJR@?op0jX7sDmP@~@|>htQ5qm5{vbe~78&E5Uin-L98oA*WU2B3%8 zxyBrF^dp=~yZ`>zn~mI4V29s~e9lDgmVzxOq^Jk%f6x|}+isQ=0ms+cWSHYuw_$nR z)8;G>DQW>e-B-T7>9@na$u`<3{{b{Cjni`%; zrxN%M5(pjy7p{t+$E`VRZhpEYJNLottUPveUM~3|FPqRG3IShq-|-^tW64>Ylb4eh zo)?i9X$iMPn8VEx=18;N9A!3`qs=jvNQ>SQWieQyEisnGmL--5K#IuI=SAfi@}e^> zdFDK;1@iu>au#@#a;(6T2EJ9R^^uzU?$=l#oXO@et5!!xrKCewZ^+5ZG&Aecv)Jb$ zQ)Yv}Zjj z%gKcAhlF~;W(Ro!OpQMYasB|?JPE$oU!prOjl@?8>Bohzh!3RvC(7kIp`R-RH%{n} zsd(^&xCqB(WSdhpFz_^)*{RkHRADPmo=vrXmBE%%9B=@34RD4f>*HXvNPF5 z*_I4*$|4PPla>)I8x6yF&^vT zx=39lkBvtqI4<>0o#V>tdN>Jfhr;p+jx{a5SrRLcL!`lRQi^R+>!Mkoh< zUWfnYz~7&%Pq@%8H}59={qMGOE^A@)c+TcAB!97;R|tIFI<8=J=H}s%#b%}cJKUsL zQ&S6`w-i`lR6frS7js^AE(pP59hvcAC<%=Qyfh2^F?_2b^r*n!)OdJeh`euup9^uI zirkV<9>n23n3~V8Ar7w{j5Rlx&C1iHz;NE6v8>CsW~6G?ne$mqS}x0KEIDR|)nsLF zno3^;w6g)G#_xf++wpe<;`#ERC17PsUd39h8F{g>)~rpr=A3!+lQl54nX@#>#@yUw z4Xkul7AO#k^CSJn2jGu5?$w7l`Yglt`Mghd!4>J$OB6(6w4!@k? zuvi}UW1hq?E+2mwH%=%|Oj`tTI86-S8}PuDq6y)L5os0kaB_3=qodL@&1tC&gh)K5eIa{;xqy!W-e7TKb91dZc?+SAdAWF%!$SanV%eqO z7wd)V6qK88Ve%J14Hg3Rc;1+17l25282p$H_X!5R9U{O3pNR9%+F@e7aUV}?m!E3~ zk>CHXw1e0NqDy76nc2Aoaf`#rC$SpR#>1c3hZ^v|1%PRAJ7O0vLAYET#x4$Hx-lMc#`qHk zq*z~Nh&eSCRuRiWhRw*Zpb)G$34U1XbIf_^DH$wE$0A@36vYys>^(xSsTixQ}>A2;)Y>pIr#!2EpId ztjPKX3x_o?HG5N*#sW3OidCv6)yiU3bQS2AkH;_9@I`xjej?--$LBVl-cv40xPB0i3f5`5S{7CT0XN%)Ljcz(WsJ(deb!Z2?ke8~Vf zh4+ug;wYXHdk9BBLCV2V;y=RWvjQ(98V7I;9}7{qF8A>ygd>Q578j?3G${Ta$V-RA zz$nibaUgM0EQBX>^!y8&WYTUgXr3jly9iK3ALN2FdLGaw#|kJsE>sOVvqtFWCP6?& zd0eAeo|%)uW`ZsQV-oL}1;JbRFf5vy)uK>6l}Y4jksuhi$`eQwq%{b5qCAb410}Gz z8q3&zR1>}#X2VE4bpeO10v(un`0u4VNO?Vidt7i6=8*UcLU@%BJ}9`?1lJ_!#jzTK z|Bm2Z5ZoSeJ&{{Rd9WSNqC;%nglmha7zUDZUO%lA-rF3 zor2pVxHkpYKZN94FVttT5MC*`X@dJ}!QCaeZwM|w{biXmG@u=1=f;8(54{Dmku?jp zc+5I8%+|0cPGzAz`EOk|DG%$;_{+-H@S6shBe4x8S7XkH{Wd1MSCh9c-J*eiSP#*p zr)dhZt+|?<40B#uc5bF7H9a-!o;*z|%Vd~yS&bRC+E|&KoE>Tq%7dRI=f8hvhat}D z#+rxiQ#{{Ch5Uo~5JJy_yO7Txba${! zq-Vj_*h&l!X}Q^%8o~Ght&-1XEYM)v2sUO-z~gOO#JCfy=@s(V3HkePB=r%M(@-Id z7xamrxK2%s!+yNb<4*%H3qVvF#C7g}N+;rrE@V0B`>FD#wi^djxL+7yU-T10y;;~7iKze57HU`+_abv*egB`@KfRnw`fcj|=@$6{^Im$+IyTpw!Hby6Lg?-k z7?*<^1~5JklVO^do4$4}9^rFA*+|Wf9oIylL3u?7#%q=ai}AghoZRfSx#moW&dAeg zo&Y5c%N$G$7QA5a>&rtzxsM6u?h(Rx?ZMvxAuRU$zdD|7GtR+evT->D~P!NP>oE7Vi8E8+DO*Yh^*`fu3fZnOWl-d=uJt&WI< zjsFCB%mij*HS>u@(E^*3^sKd-#~wFXJ= zg0}hPQA7jC0XzT{07?K)fN20;fa47?9bg843e`w`z?}*7YH)qQ^#kw+e*nO&yJ}D% zz-)jZfI9%@0Ne?17k~y}E|w0IvYN3h+CC-vc-R_5th%yaNCS z0S*Dw1H16{rvc6Y{0ZRC0G|S!1^5fVX8@lAoCEkP zz!w1Lfroa0F9H4r@D;Ssg}e5k{|o&83Gg+*H_!+F1#So6cLH1la07G!bOZDNd<)PE za0%ctz~2G-0ImRh2k;Moet@e0{|)dxzyQD?z%_s$0EPgr1N;bZ17H|n1mGsXD8RhU zWWEv?;Qyuh2o4X^dCh9^3nc$Xp}zPt0pPiD!r@_RdOj>3nv?>~7B)Bge~AHcLVQ;! zUz`uI(Hzfvx1PhmsVSHu9%nPsVq?MoJe*vv&09Bb{%sigmsfn8Pg**gkqXB!OC}w| zBo>l(5%)`SSitZa_Hi_cZx`HN!TnKiy<$lEoq`)KxbcGfgy5zL?he6q2<|b#{aA3@ z1-Dmle-vD=#X>oP8!ouQq~4ICCXYsj<}6rdCY}f`1q;47?T8&DEbBDC-7nDI3^#&XuL9 z3Gug{zvr4aJ)h4qpeHkCIIT<1E6`+v4K*zzdlTfBT14aqA57uzAt8*OjzfB+gFY*~L;O+VqX}8&e8!xz91h+(Rs{~iX z|J_PLcSdlB1b4UKA_0HCj#yycEg|@#{x0q>{{?$REbjkz1bXbp-wh!w?h~elqhd*U z1e?so*#DnGJb#?90StTQJk34#EYLh#O7O+})(By7Uoo|OvKxb)Hi+jqPv6sC>R!}mUl_O6WdR$AJ+TvCyw)|Uy^#% zClL2JBXKobJr{T`&}g=53N?lEJm)P4-wX!l2(UZr!=u6t;nCqS;fuq;bPy2{5gDP6 zh>9>oL`TF#ERI+b86FuC85yaMjEXcwMn}d(E{z71@ zM@2+MM(LxXq6|^dQ87`Aqm~%L4H1S&gWeEjFc_i@F^0v4CDGy05z&#+`sk==uu(+E zL@$nB5)&R15fd4skBN#g#6-u$#4L_kvN(Kk#Nx=s`o&R;VUx5tX7S?1OO^nOOQ85A zko6KE1JlM5zW!o+i0vS{yM_8Y1os&eX%DimCU-SR7iomfBq?B$)!1S7U$Qg`D1%5=Ihq_y;IutpOuphbhzGA%g1{xY@f!J%*xKwm^E-1kV{5B+-JL2 z1KK7ef!P7;zVpYbKDFKz0>9W6iND8wL--Zt^@xy;?UnfZXZ-#KaBkaARye7JbBaYd zxu8kl^9L+_z<&iPFBE4EA6`$Rv4?`+Gm^_C9&&|;(#P|TX@Op|y;ak_XUJ62nKRW& ze=0yWiwcy^_6VZxklf|3k^VxuaGH(^mqth;sn;ZjB~IDviXSC6=n=_H>8SF}%>~=5 z_lH0E)b^^HJHDPiV6> zt*w3W;Uj@T;SmL6ic5YmwX*89#eY6|;o?`l51+g;w|U z4av8EZW3! zkqCjtQkF*(DKLv*Rx?@H&}#c^Hgl-5`5zoc8wY4Ap+08+3 zEL*+xCr{KJvACqRu5#agTc{{02LB*uM&{1Pl38%91K zFJ$qGFadX~@uR%9VtRO?q-fi#qVf%jU>uw&D9!{Hq#YblJ4r2+m4bX*p)|=@t5C5aU^;5Tg_*as1%M zJr#B1ScYiH)qP<7_fpfPc=_GC?$ktTVUm00GB%4hQrx=k&6+Xtyb;>B%3SGJ0R`G7 zf3;k;YHzs5(AP(q1DZ-Bw4UMG#Y7syh&wmJlF38UP3^m3J$-2ky&Nws7#y`RqXz`8bEm}%3;*N z3yLC07*(~;hbm3Ne@v*pKwO2MI01@;CDIjb>~ZZjP0Mfuw`L@V_Kf)^JaT;R%$|~xhRD(_M_Nm{?r9V1 z&bLnBu0~GeZuU${?wMBBcB^&rxqCg6?cAL5UhtIT4Nj3u1OS2u6dIBP{Gbj47$Lxh zK)9{KkSWU$%s|HR&JU*}r1)U4yRZS1Fi?pK34=_%Ig=1YAt69W1_lO3Ffc+mpJrLwW!%6Cg+40MRnkGZ0WHVkM0FF(aM|U2qYGA%!ghr+FA^sn8UpC_*-k z=0VB52sD7R7$jv4DJyatWB)NSUOU%+zgx zwRIFb6nB;c@&tPwy#dxBHwJbkPU!0;fzTv0HYcJnU}7K&f>eGhAOo~FdYaA(P!F85 zI2g$$=;ui!h(nzjFG)lUXKz!^#h#PE1c5x5k&>m43XdKO*^Cosi(HM?s}CZMEAs+g z0`-B}3wqz_@c*u_M?l6yp2g?vnSLnn!ny8#(7Z4(@56f*-T$?I($vi@jsv4PpM1}v zH^cSt@ydVhs5d-178g-$9q&kLlT>Qt;uBU&yb}en+<;Lr_yyH*eDw{uf5;tzj()3FwXQ$1z zI`2JvykXrJd&XYN8ERheS8s|dU<-cuDt-Py{{6iU@ZZXPa{AJr@HtQ4;j_oUwEv0L zAwMmvktZZ literal 94904 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 diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index ddbf336ac1071bdfed06c14e22430dcea70069d8..76e0e59e4d925113d1bf6d7a7c08a2e2e7740ccc 100755 GIT binary patch literal 66376 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%0D){{#HSSA-Vg8Rf4pP&Ob_im`~PW(wq3b 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� zUJ&?C#_g;s?GCVv7=E92$N2A?R|mg`%_z4l#ZE~tc1rkdVPfPEKSJCmq(9md+|TU* zZxG{%eJn;ZtaTs*!ss5l$nJQ7!{(n$4k0r|aK(aV?h}|6oGEWRc}`@&U>fINA6GF* zEtVQ#=tJZC#QWw7e|rPp;$B0Zzqw4jAI2)5ui%FQM)=5gU;0*4K37cJgk^K6TTSP} z`XA$%-)c%H0b=o+_Uzif@K#fC#+L5rP3i;3%rVtG$InOk+f4mNspO0|h<1thTt>h> z)+cdtn|8S%U2q!g*(T*9-h$-+&E-(17)hRgq5eqEtfl=1jw=(asZKhErI<$5YL2kR z_1HX>2fO%Uq;u(w*G7CMod-MAZ~yUehWF%2KtPa>Io#(R$tiF;i67xFs2QcIZ{a4l8>|j2`0Mh<@aVJ7HzC@a|YeSVIY`>Fw z>3rzaQ#5xuS4#RP@ZN?jq1A$%=6_MzT@X3?^_|xf^;sxDvnn1RaMB5WMMe!oK5Fq zq??0P-JeqGCqQYv;8+@Zrnl;7e`&24vmO(z?j*;cwcOiJEvP!$#cl61^0a%Y zWtuwC>uGs{$0EL1NKZtYpaB~cSg=d2F%(6}C@Jj@pRJ-owaMsePdwDBs>3Qy<*Lt6GzR1e<5|&jA zmaI~7-r^LtRb$l}mndpA!MoR2taWp6t)^RoYYl~0#UlIf;#a`ymSDW5ee=uWRk>Ey zckZjU@PFBYTgVc>ObffdCTfJYSw9WOpCNo5Nh{ETNAXssIFe350}Cs{c=(W?w`m!C^)x_Ef2w^~7wj-#!FxJ? z0p@_<@g(iz-mC?;5-Yi!A%pN#rq6;oVsL1n8N|nLx0S&HAD+(fTeb{-+64Zn4dbQs-SlNsdQ4w7Wi!s5 ze7V|7aIQzBB))8fo=o&b*=Ri(;V?+Q#M361h}BW88LftYe&YXVWnDgH3(g9XZ~5g| zlb27~JmSeY;wdZONi&63U9twHQkE7Z!7_wwFX3s)k;Kn0S#ZC+rI&aFvPh(NB>iAC zpk^!21IfH+!ZzXgrl;LBm{Q zL(}~JSkNRF1VYnXJsKJx#_w3TDXAC>8eiGi(D;5o7Bs3XCC5R@XlTS)nNdB(F>Bfs z0vdsH+!Zj^xM4@ff+lU9#0@WlJvAJ&&%_*v>Z1iq`G7jlGNQo!4AB6Kp}FW6MJk=CMgbtTaS zti)V@x7Y(aCRn(e2Nz&wz!nNphI%f5^OxWbU)_3h|Dmln57Ovw=$SkDov?kA+v#i` zKY13rsbwR0q~X){KG>P6a;M-SVTXtF(bx^-yuNvuGT>Y#)($$qPV|au=F)RC$HJo` zwV(uoLN-(;aqn^a!jDjn9?B7m*$T?R^Y|WAu|(Xqr3dNxxokR{kM!8nA?-m6xOO?? zb3`42Lnm8EI*SiWDcl|_?+@Qi8YEY|de1bhf^Fu$-Ja=)ha8$ReGh4o^egzCwY>LC zpOOS+uuW!*AV0;`iIiQ5B4y@Hkj&(rX(hPtBG!R)IyE)*vXYYv%~^;9wS*AGHQJL-0*h{`@-7|bHm=z?+a_!y9drquJ=vh z_tWbgla#%@rH*-`r8?_Qy_wEOM>JkdFyU0RuF>>CEyY8YnAAAq0z60X-}=UBZ}8vd zUc8ym2(5fN-SQjWctwtghyP>5<1AZ>h>yCniI-2(D3_yRDW30U#yW87T4@Yh4j-E* zaZAd7H0r03b^F3Y-B&w56Mie|dvVXGz6PUo{1i9QS&ebaAbe*!z|);7w`%mp0rH9Q zlEH3Nrp9@@nm+QwFjc~E|W?8yqNLx9Bqz?;02aXfhL`C%H-1ykGNKiI=7&W!TX7%l|i_m z4mUj`jF901&lK_O(J5yc@iE{|NRk63B<^IqC*qofozBQqo1wKOc~??d%y}B4;>iSl zAJiq_6ih(MiGe9g#__gPVhBv>J3n@rCAgE+Uwbn4BFCzIq_-sx_8|Q!silI)BfNZ- zUy@hmJhjBfr2r0o_#`ROT|ci)o~hJxk}B`XdG3HTIDz-YX<(!DMddXAHB=hx5{dN! z9z+Qb0t(_B&9MKf#+Z32Oti=IB47vKNb8%>T6>m?9d7PZgt*FHoKL(6xm zzDhfjBfd(VKKKWcJ}5WWB~$e^Z9gTEuSj@3Q*h#H6s}(EokszgaDKCRUc^Z96;ERSf~_yJ~%M$k+Q{E&qx3EoU+}(wU+OVAmsUZ zOH4RtkCj&|TC<=)f2jdd2U)(wUl8ru{|nJB(=?*7nGP>}>_9(olDBJ;+B40m@Vw(Q z!<%?I?y=-OGfBXd{H@9n?MnO3g~R&Hbn=x+J#)JL3{ImBGz`@b(n;GYY31U1ShPg! z-KA~zLZ0I{z;Mk!@gDOw#`nfwwEWqOyBW=&kzKH+j_2p?^1S&1w^x?1Ln0vAg;RBS z`$hXTQnvUt`4`$S!t>fp4`UAC{^ABXOzafGpj&mL!CKf_J1ulARn62pH3T;l+OI{~+&3zybUyJ}#j1+)di${~_Ly zINlW1N8M9mM`oU5ufXT65}(idM`}p#NJ5?~ANGzU)`(|7_xPLE3V282oKy3}FYu1U zb9$Bqa9`Ztw&tJW9f@o^i0=nw;`#~oo=co&c9G28`pDi&>bcY{becI@-W1sk|Ki++ zZP0wdMLb{RPU~Fa{KOo;K(w6SIl(>Tw1WfOnYu6hov>1?k}4_UX+hJyv_s2N-HB8r z&5$h+mq{W)3%G?q$-fd0xy@;5$IKr(=BOX^I_mpf*809V3iOYlPS7y$n%Qn%xkrZRHjbaXP09T76`Pan1>ph(xpvd7bH-Qd)Xde zyWkSMzG`9r&;uO#_}VS)Eqo?XO5h$b`9KtPG#g1vVwU$O(QYJGdw#}JP{Gy;iRt^) z{UKmPcY=CJi;;`B_W9AjG$_NK z%F=A;7yibTk2@QL6mwj?u}YMbHdn6Ny#Jc-3FNp)*7Kh}87b@G^f@&0fzoZV-LI7k zuoi&?E&K8s|NIv3N!LV@PQW=-0maoMcN5o>BJJsjhgR33WO+tKtVJ9KScXTb=Xzjw zLAy0tzVa#XDtSb`d#MFh34Dg{&k|#9-a4H05qiD{^e~#iyUG+Q0wJ*SS$M?Heft(zK_NOjXL6*&@&`8 z^7+sr@uJ22BzyRa;%3m{^AKP1HVF<{a=xlH{mAti!<~7_K$O$0?r-{%jy7y0d8%EMif*o{0OVD zit#2i7*$(m!wnVgxFw;;sHJw_?(XG3ePv=ZV#FNOMU0TLXvBNLy7^ zeu4EK9|NLgVrHoCk~M+vXe`sL9hrt*4op)N7k##@q$tkBzZcQB$+`&Ni}-h3@(nzO zz86{XEqqz*)4>-l_P;r1deceQ#xbJ|V z-rPS^jmK|lc`WxHOFHV04j<=UY)9$M1zk%~dtz8`&S$uCr^N5K`Rc=a*YhtydUKw# zD_Qo_tz2&|#=&D>q&E+yivfPMcnPp{rriMW`C4@)gLOOo8_TcOI6kd-i6)$63hhse z_G_^7LEfN5O8BE949cfTYP|v8pm@4u=+Wt)mb^g;sQ*g)rbKgK<2Kr>lE`&7z^js| zuMhjRuyj_)s}he%`|}rjRpNAeSTmXiN~`YZ4AWuEe=&OLozTpieXt~Dq!SpX16Zqx zLr|@WgU>+z?RiO`tS3KVyiLCAHCF!)327mA6_|bSodONVj;vj<5`cGg__~4bM?NyU z=0~~~$-U#WlVZPw+8o#TIeY)?bQ)4y|B=eY!I z%?GEP;!nIL(*Q#n@V$#(U~_MHni-0t^5@V`>`KJ&sX{Pvd;1 z^5SW4#t2zoiDJrGyn!A^C^O-ZJZv{reKe-lmk2;hj+Pqpw zCb5H-J@)KFVde^h!yOaD?2jE{b5iYF4zY+gqtnRG3@`?%zQHvowPW3(OV3+#2DH7A zE+zE_wIrPuzP4f=Ee?Y(sxzfn^mvP7XP4})aH1*Vx2a3;V6i>(I#>DXE6f!!E%DV= z>9db) Js`5akz*^e#2V61jVVz3qF_+>gwbHLSbw6&N=Q<|wn*5UkF2_5XR6}P} zPqa^)RhyBLA=ZUb>nfLH;2l0b#0YTB5_n3z3Y<1?eaZEV`Nw2^MQNN-&kW`Y`^8ok zh0$r>xy%>BT*S_z)T)Q!fE;rng-yII5v5+ELE6b8E%F7V4a`gFhik*{DYuC^WPd15 zNAo9}4bLC9m_LDYM@fx!iFPNqN3D-*3Y<$OU)cIBhYdE3N9a*%ee;Ga72XP=rA&*R z-DSv+Dwg=07>|C4$4nB>Z4=`AwS($h_w1Y5s#s4J>obHt#ptSFwJ!B}I{Xx@WA@og zR`0$%OBt{(Q;bSXc@n;N*VA|7xv~<$cUpSpGjHegIGV*>`Q9GchY|2@k8>f~{udeT z3CuS%$TpQs7rxqJ+YbyK8+@z3{1unBqM-axwZ>d6W>BkPaq2u**&by@R+la@LKE=@ zrxdad*Sf?yU1BxU-4MZ|a$;R&yPF37g+1%qZGKh3O}>xPeZB*W>9_UwxKmIYOH@YY z-Jfn&;lu8Kgw^XS>jd<@%8J^)MKk8P-f~GUd*_@}s6*pc6pc}D1+OC8hy0da@w@dJ z&{5b3i1sQPc+lhJUB^hy2`mja=2oB&H>YmyE{@C)oGYh)uyq8D>ja*tk3fy#r|_&9 zeKen`*z$xiMz#mEIv5Npo?CD9_K12!uKjdRXh>{(Fn?&~h!Jq$Pw}1NS7jf0e6sX` zrY<6yZ2Bo&+(LQ zuYLN=Z*r=+gJ_%Ar4SuwA2u_vLif+bW|Brk72=&EM+f=r!q ztTZ*jb)4zoX~G`v)VcH>Gf!O7Ku_e-y->G6%8JcKOQk)^rFq_ibrHG|m*%EA#hO%U zzsjXcP%4=*EQWOy?*8nq-BeD;Z07~6bj-`_>ASS{pH}DzqE(m^v6W?emVWSxM`N8= zLGL>XcU?-T!37v+<*I)cptYYD(?*bbL2>5yo_m z3A%FYF6Q27WyV7>?CEaX$-S6`ZkN-yrA}!nPkdafOPrwHl_O$XKc1Lcw#T*N?u(Su zwPK%cr?wpLbxDuoJVAVqTPe_5dduT(*Xi_+>&lZRFx`^JS^1I)8r_YLYrMa!e`_u~ zqEG5yHhA+;i;q)HKIg4}z=&ceT=z(RDeb=|UKBOP{eC`+kb7F}!{z)VD6Zz{Mp|gs*A_YRC@ifB6rtODhoMg zDW|EvRjvw!qm}|vxPeZi@ z^M`sXQb%!aC-v5q?CGwUZUOP`*6Te>+sYHSq0N!Qz18?SwPWHNrK?;kHcQOx{&jhh zOqCn4GC_YdnOeHMU9|IEw6ms;>QVbP5`DXEMBlDL-)=+SMxt-Gp>HG6x7$MWEtLpr zE&8_+)SCC&%u|8AHt-5T=&hJ**afcTN@nQ9sC^{$k?zfrS>B9Q8Df8lWMbmK%oR}% z%u~%Pt*#Y|;mZ|vFIt^-s%GL5wFgSi1me5vmrAN@McE$B8ADoNyz?OSgQ#^Ldcwo} zycqTHtV)Hs!Ch%v>>E$8x!RYQlDfQZ)`>K&>^w9YT-e36{v_$8NfI6vt#3a-~+n+|V0>)0(nqm~uIiujJocO_A1v)g6k|Xnk5(Gg|s>ZMw#78r>_~*s*H6{RQT& z*1a0Z>`z2Ya))ih`lHt=x9|NN`r^lL|L$Geccf{K)o#=}%Nr{$la|_XMi*Cc+5DkS z31irK(3Z!&ep%NTskOXco>XzEJTdHY^;?=$`*WF^A1U75I~?|~jT%kr9M5*#2noIy zQaRFHM7m4krUOTZG#APHKYV1`wt))VbmmCdmaB|m6}paTQRiOqpcUFtt#~p*TmEXK zwsgf^6$h1P*bc|cHiCY;jbM*Cli+%WspZY?+A{S>Sk}-KPw8#;?gg5O6kcAS!AYTw z?%lVs1pTWl3VY_1bLJ5R>!Zf1&pz-_>O9Q~4SFt_nq^|I0=kC zy|(+zIm@p2?d6RV*wbfT@K8y{ikZw9`L>qwpE|3#gWkE`DF5Z-%y9;Fc~2C;v6C48NcIU5Vxgu2<42`FQYwWmM>7hE&TUyNud(<|zBVR$C zlpl2}{g*p(te6h4I|RX0EbV2?P@ zqKggrWZ&U+Db}55N`DuH=jU=r;}am+Z`D`>p7^dmNvo>{@9Mv&Z%yz0Jr8!y$eL=S z_1&$UzpSLX8==qG)y7J@;=J}U<;od3Zr8cX?uHn4Fl;Gi_5(+^Jm}W3Nk$!;yu@%7 zYcfn>t19eayQ0hWVa%;eW%loX%<3yOPi&cr~rQbeKc`Q8Pvv7@j?_11$bsjtT$x6+^Pu|1dc}>TT=@)A1j=Ahxck9cs znr^wze$RW_IW6|$B;}y;1|zEotgu7&Ump)^a9Jvkxn4SQQ=NNj3^M{c`?kGTl()sO zYQ=r-oX#E2CfPTgzv7K1SU4eN^_x@b-g4QeC28nsXDeW_K7GVe-B4|>*6QsQ5n-Ct zw_L|6bw~Bgr8jO0k1~db4<;<}v5PUw_M91rf(N)ml%{f3$oYTso-^m>c%mGd)S4sZ zsV-g3O3g}p`8k%f)xB{E+gY=_4YOr$o3?b-M9$rb*;)Hg%0nkNXdkKFoU&QfAe3#b z-&Ts*WCY$^rSAKuG2J&5ZTUA`T3v=!=dPgHRQ(&>p$XdiUA25PDyw#5Mumydyb8Ou zkSre8+z%bnU6o~f=5%4sJoyaPmkC-|n8@Scv*vnFX)5{>nCi$q-(%mtTdR8=7zRGw zPH23>*kt>|TeZs@*SHdvt=8P*3JGmVsrA5CO52gWwbQp-(tt_p7o zyNWrUY|uZWeDK8anvZIl^ix>J*5f_bH-abAEw7$ZT2?~8j7~)xgWtqY5U)Iycw$g> z>>RpOj@Li4EEP{Vw-?OFORDx(SX>RRq)P2xcj8P|;+tFbGdA~^VQgO&^jHDfvieG| zD<0_t-!k{Nq#LO1JJ5Tq=dI3neQSp9AAGPsy)UzOLr-q!4yW!_MSE4Dx5BODYwvO0 z>?_+l5vxmWPD;+nZ0%#UkET3&@)7-p16iqA-5L7g1KjJA?o=3CY^`2le=tsyi2eT; zwC;#}t$p%RjXR=Qu}@g4Q9N<5Vt;`x!1?VLm^;F!zvyvCn8Lg8ogDtAXO+~Vu)C+6 zQh)n?q5#E>pTCYgQ|>^lMhf z>y1I*XKNTAkk)79cfv;Oua@T2#P4>mwlWK}M19Z_#Z2bZkwytb%$CXNtad((jv(tX!=QyF?taRvHmyN5#w4`B~ zq-5?k*tD*LpP4lY#TlBK6|f->|DehKHD`F~inmf|9GTnkydqyiL zSw6TOyDKv6;*~WkY=?PnXND#rV?Qt97vXm|sc|R~wI^gWBG-4q8;9eKd%lj?RT$1b zWIyh5uXZp<3y>UM@@q|z0+K`B_KiCVpDT!39`E8D?N;=^hH{{-UC_%S2hSZKZ>W0L zxjN`&AxU5)X^<9@1f@m3fV6>mN%Bzh?n7RZBvc+ZZI9rmsb%g;Cu@JE<_Y7&1Cwjo z;$3$838YhwKxI=S={2W2>3KhH_!^~e6!t~0gv@^? zD1Xb0`4+F1NgWWq*h*ts6qBBln2KS`o$y?UCC-)g9-eH^oJ|==ix+C76 zw0M;}vTs85?aMdK3ZEXG5^fy+zB$|-7H*j1ap~=s+GbF%63=ejyH#hrck3F5;)w|2=DFg(h>{pghIYx$dhJsNG<%kxyM3$s7{ zp5mUqRoA}v;I)@oLepQ^15Ymfy+)*b&h zG5eOI22nC`H_8h8)kh~7we8d(t360F$28r2njYGz%j zRkLEI$7RKCf^wv0YFE@LSL)REvYgnQmhANGvPWYdZFwa9k;<%jS#24a8F8?gsJ4D^ zxW@X%VP!?N^=uRA-{U*o;nC4aJ@(HBnC8~K>oAVCuFSugpUo+)b8A_&(ZGfld+gP# zwHL3jS7@~zpEq1OXjsk4w;EW-(eTUm{)Q-Bm4Ug#`#!h76FzZT6?}8uI>lqDGWVwR z?cGErUid*mNAc>mW-Rtogm&ZD2{24V{=1UDNrzu{M}b%{M@|&YzS& zn9p7pO*g{{Dqwxni&^xM*M6~0JAXKj@*n0?Q3eZ6`6K6m$m#gK`2uoY^tMa-ft*vU zPH)Ux_D2tC4~DlgT@|=3g19wY7eCZcxfAeqRITox4tR0Taf>E(kEBrS&y02av~?(H z$aS(b)xPIY*mMWcB*$8^g2dgI+*T-U1LAFGDs+VSSm&uTpC+b!R77lIF8{TsHY#btfRW7+L?O=tF>>}RDby)L7^Z=!MV zQ;j`+jn){mo;^@=w@24D9a`gSnR^qoUGjZL;hIZ4kJVeHcsiaq-k(%iFWb=E&X^AJ zhP#S*ROH#SjuE9exb6_Mcc(M^Q+3diN7NZ(euMI3Ji1l`U$@*b^EFHKSFy7-l;fS6 zJHfet4`q#g-WDTtc36!cf*x&6BdfMfX8f0y~xZy0(O z)_OR-`9t$r^!mW`E_&)(X1;*FyD0i@|3Pp2b$ka!^j+7>-rg9ix38@KI!!&!2-O*| z7s7Gw!#xAEdOnNw`#Q{{Ci?H%W@FL0$wq_e3PBlfeci3SR&j3{m^`KKVB#NG zLh60Ym^6*u`NU6LF{jH@!wNgU(NWt@7y~+kdS@8Lg0UpKOcNZPjBQPGcSS zgkQ3k9GzNzbQ(jt@YwKb{R2-v{o{`RR))S`*W|c(`B_)ok6!q(yD?6?WX;9Pv-F3y zFZhWu=@5E}MzLo&HD^c!ra3Z)5;~9(VCsOCgN?;kmV^g1YE2b-! zdc;%aQ*Na%@@ki`MD%P%Dlz}RCf;}NB|0ERB!gFf(pf?>W0tB?>mv3->P)OTo0Nm$ zhu9R{_Pg)NPxKdKG;bI;4X}>l_bwUNh3k$t8C{COsE;<-H@1R0{UUijG4-4=nN5&N4*p)NWlS zXpNziHR)OO#iRu*XF}VsNtfVynN2BkKCy4|0O8;ms2A(#|KyVUlP|_WWqcqMrlvqB zQWyH6@cckPfqNt*{-*@se+2fO0{b6*0rtDifi;)>M_|ndU^Am)pWPd>W{La1rRLPR zfi?U7EwE<2$zO9C?i!&{XQ_&EOtl%6zVM6p5cU_`qIhWRB~;e2on`L5t-6n%*jYN4 zb+d%-Lu^Zo<}G`~YSIC*jxFnkXe54cn6!b40*gO`eN&_MI+g&*fNFw-kSs=A_sl@3 zN`4Xu)q!b#sMswkROMaJQ=C&YGf%q*6m89!78m7_8ifS%I!5zkbU#gelh2ajej1VT z@4#!@#K0D${V1>nm684y_>zPzgDw@LS)Z)8xa_$n!racb$uh2Qsb61eA0 zH!Z{W`T6nqUh>0(ja^#fdvWZb@*ZyDIh0(fxCgo>3*4pZ8+PlUpDJ%v;Ct?f7V;sa z^ki@mi#;!-x|KAo{gD%>YYMC11K$R^xg~8Z#^a8e#$LA4k_-c#$DBpS>;N> z5yz}2S}%vjlzY;WAG)>4`dLqQU3TksvZk&9<=H0(CaLM`HSpR5ydE6r(jF~87@n*L zG=S(-vOfGm;)R+E(^_`xWL@s?o$S!weI=i;xg||3zWN1g$I4fFjnklca&=!$*;B5E zHZoNY&JsA>yN|uc=CY&ct(_ryE%RmGYn;RJtPjv{257X&wj)&E-Rc|eyXOB7_uU`= zr}o`}=lp%=yCbmgb~vjFuFBmD&cW?!Er>}i+e&+NSLK#%HQ1)wq8%33A=mVd%a_-I zE8zR2Hp52qprO#*Z^$+G88(=Er)E|aB=tn6W49DLrBdp!h<(zLCHy*{xMIypcT6L@ zxKhsQhn}rc*u~VP9^=;O?BLe!WcwrUY2C-^cNcT-z7{iQ`|??P8d*o$w9EBMX`H<( zM)O)FrR>OgZ)hgZcOli@(;exael5ms^w;f%_dw+aS$UV08BeU%xb^2R+l$|0nw5*| zE?VuE4jJ6L=h2Mp!hQ~T$BRh`=OO*M!Zj3gyp(o0?2}JuA%T9~Qf2RK0`-ahdg;n< zgm)zym2;N`&6~H*u6jG!UcmbDUF}_kFBfUk9fo z!E%}ie+jieYE3|Put!XD?vX7v#al4LhyB>Ws<(Riphux^TCEaYx zG?(6`tc&r?&i|#1ws-EI?D2lS>oW@#KlHlr2E(1^c|9`$32CmQ(C(qan8D1^J zYh-Aa;UXC($?%&pOp)QOGQ3NM_sZ~JWLP1?Z8F>;!#y&5PKLEIbml&ko3|;~{!pH?xM*QvR*`+<^%*y&FIl>H zQMw}`J~1h2QRc!Wj-?s#j>LsUh4zJoj&)f@#g4*-MRuFB$YCigVlPB%dHdH867YE% ze=x3PYW-QcNMGp8FQ%9H1gGDIxNAeiKaRK=__GxkJ96@iO~rYp9A|cMR(|$o)26KA z^`^Xyj>63BJSb53C%9b7KOKJo`HP(C#f3I|@t4j&B`E*;tjuClwgX=yAjmQmt?kgD78MtzXI)?5$Z>K!W;$%e&O*mRJZIaA9cv3SinDS! zI@vW>2z)}c;~%J|n1a9H_$v{I%f-HQ`$FZXa;ILUDM7#t^o5Ta-eVBsdQyZ4v-4~j zCN#p7lb7Mlc9=G;cjTIE*@X^U#%2?}bYz4WVFD3_n|Z5qvI-0H3X3ejhTY=Ga9ZrS z*C#D@WF|Ql*)tX;Wu`Apzj2|8t3{T0%cART+4<{jmL#4%D?bYZZh}$Z2TL3O5FT)y z8Cz)2cNWpt^*OfuAE>2d6sJF6x`lU6ZeB6^1&z3NMAB zmfc}0E_66dg?V|!-!R#VikvxFx$8{4KGXd4&Bcx))9NBe;dk>e6zqA0j-rW?m*s~i z!q;vIr#dg#Q~|e&-;p5RYAd9YoVmrzOk!}|DAQB>=yQ*J){94U+{p6O77vdxUfSCA zD7c8`X_ZWmgTee0k8i?T!2GafWQ-ix_pDhQf1}g!aIp!Wd)6exo4$FIsR++Gj(qz) zYm#nA&%(HVh|g`cJr9_2vWjfWOlmttZLo?}f5>ow7(qqZ@cj+krWM+9*Evj%+zeAz zZieGw(`~s$m^XH!T&Xrpd_#hio_s z#pge!3H*N9c8?lwG}6}Eiwf5Q+1Y%^@p1=cxv~6-F&zG5$?`V^G)O9}LeIJr`cT>EZ0_On&_5=j1N~FbijhcEB|Q|9n$E zt8fR8zuzhwUxDezTR(&A1vAX__zM+()fn-!5YPFA zTwAsYTti;rGEfBY4~`6zGZ)0$zTTFOwa1>9;Rr7Gm&khs{(x3{<~kD=VgI6>m23LJ zqU%hH6CW52&&S9^V`!XwNeLnHX)tgoA65rPAyFw)CZ?k!W0?s=(ezEzcOBW8%a*0w zcJJCdtaq)v_tt;N;)tTxW@b6EGp=7`S&aXDUCho(2Z5h|r5HzPfQdd+03VI*!2TPf zzrQTXLp0%U=OA;6iopZ<>BOHT{P%I_(H{t@KZ%~9`_sP7nb>8^oVl9{ZTa&Tq?v$n znBK*J4->fgnK|lU!mgq;( z8r)(C9MC#F&nn=w$S_HUH_I?ph8tzLONP(L&?CbGGAv$?X=TbPGUeu(ik$ZKrsDOq z4%>==)IvwL?O`B2(~)a;aE{ErFg`P3>EaAqyd%kGUy_h%vn3=hSp-ob!x5jbG&AEy z`yxk1=3?8@g&2;7HgJ5z7xD2~v^m$l&{mw6lVwNy+OHDr`!?D{pCYWeoX;OMk8&`F zIlqyeX~}lv&R_8NLjq>Qu@DR_;CN`Zfa6X92Gi&To`d5*oxm8;<`9Gbt24LjZAI(T z3n7-#{9SB`=lChKZCbd_k?Sbr`00^wt(R~So)*a86a>!a@#t}=a%da{$755ImmexV zRQlaWPjZL)34mu5|2Ud9LU_zK&AG|6=or`jy&6 zACjM_9UJZu^XD-c{z!&i8MesqeHr%2@E_9e>CTLd&1;J`1I(PYAZU4Z%!fh@f*UQ1 z0%$nF>yz+j(*r&@6vpWwf56vx_@*?W@{=5^egg83D-VY%=LQrK98cqua2%?yNvOdL z22(#e-*=FQ`X#u$)rh0<6&z1;6v@QF@w8rG<78C)_Yg<(HaPwLW5i=4FJ$@$5g!Up zJL2cyFSz_X#1X!O;|mZ+{7tC%c_HEp5f`exq(`|fM0$$HrRbx|cOvdvW5h2-eBgK( zgFis3(B+ceCb&Ht5f=(RiVp=J$pbWg?9ReM@Oq|nOpb?C-fg{YqXY6eL~#f&kjkOa z3a+mNc}YeNj;}x*l^Y!I8Y7d?VsR zjk`lK{@YlZO;}G%`L^6F`$PXA?MqR97OhQ*a%sv#C7`LOl2u& zkHPsLMPAZHjFKaBixwv(CN8qcdXwWsy(BZxXA=Id;lIS!mmR;M%Aqm?@{d}-sD|Kt z#8;|16nYC^;{bH9Gournet7=pPEm7uZFT1 z7W^EXFBoq(BO}S7-*x6Y3O8mIjjYUg~79-K(;)LQG ziW7^Iq?C;EE5^{%ugDPNCkM)rtX#)hh}HIozARDxhcLJ5Kpd^Hhhp4OEa~{K%wjyQ zBV^$dk3SkKAwc*$lnTWg9VBF;+~lu|`c~sNeXhqJ(eClazlJm>a=`t;u+LSs;ak_N zD9YDaw#_uYz4)gKVsDK2S#|bZy-$5+F^m>-g>dP}v9B)#2ttdEjWttVrYRko{fwez zkg*-uKguPsdsP0+oZ^M)&aCVV$TP^l$@un--E-z!v!hPk@cYbrU;F4gkG;{f;KkFUo?-# z+NXN;f6V?A-&hcX56JoX^&`joG{n((FMD3h*B{BSR)!5SY>}b9R;0T^hKppFEW-z7 z_@WFC$?$an6G8v}I@Ie`Flwq4!q=~)7=Y2KYUvb*hF*!@iODUMf$H{ zaDwy0Efd#QjgxT;kuxDR;OZ zLKHU&&VNODB##8c|6>V%aQw5f{^0oMWI2ELFyv~Uh1s^vSOY*6-d`-nA?ZEn6ODCd zDMIW`VC&&w>{(oAdRUcv(N}WMBI$+&>iRmovm0`!Ej?b8AInQ;>=;4?f5Gv;MI4QP z^%Fq9$CY1#%Xt$8nD7^nKcxH;obO%aA-P%o1mqvZk5Zc8{C`B8X^eQ1-@h#DGYYHN z)GuBucK?ZpznmcOsmgl9M`LKPzk6KdI&-878l^GTC+oSLKQVR+3@Y`T`WX*D|6CqG z=*b_uLEs@n0`wvn+&L<62*-nuk_G4gBLo8Kr{MUvWPCt*1`QtI4LX~^h81b*@ zMSljD^XeG!htMzA0`3z0(I+_HCA=q@H#lB_KtlKmj-P<^G@eH5O$F!pO&D5W<0IV( z-A-}Q`~|`Jqh$WzcwJcNcG)nfLf6OZfjT{>h?KQ<8#HZM#hZi6Es*(x;~yC#{s`cR z4cWeccC95Q6Pu+g3-g@$%a+}D+lqT{MIQPD*YhUI3x(geWc+A6O4M1hiq_`mZE_T@ z&C6U{yeV(~f{^8J83S)Mh$ntG7@j8)Pclq!{8eM%O{6s#X!Yw55W+sCtT(sGIsZD_5A(!M;Vc0}_^6Dk#~G zjSd)8kSP-BCIZrNRfQ1JmzlmN%O|;oK9%yB^da=wEuSZd$Kh{GuaF;-A?ahnAMIPJ z`Ua30{`so;)bwg7iy02asxKICxyXU8`}^0YksE6c3`j>II#v~Ib}SS9^#chZ;g#r$ z`U#-lqt^4$bCg?sSuk>Fr|AE2n+byXhu;wGNs|p2wwoBWA1z=d3pJ3*VDpYIYT9t- z0Q`)*zDaNb*VnIXufz9q3bWR&4>DNg))JVs zN<@G2ug511fAog`_Qz5b&q+T7M93lPp(ypgfbxeD778g+2pm@LN0LOC#k$HgKGMi$;x z$#k?9(8pg7x1@v2uj;W)iypplQT!tM078${M)@v8lvP9rVojVjY9=-WnWicU|^8*dGO>2e9__5^zzc}2=KYIWN=a>EG4?@bf znNlw=v#IK1R@lT!C@!o*g#Y*L%L29WjNP6h+Ph8yPJB1D_aD;lD%UrH*a<@y$2yxG zrZB}BS$UkLcw53j{0n{N;BP+uem7IB7b^b)v6FwMT`S_dWq2!0s&LGLn}tfzW%y{w zKcp>V+H48=__!@W(G0=(@{JR6OzZq2g&Q2H->RVLCs|aY zl+oq?0&$`GyK#(o)ehvv8^nBgU4|dZuuq2iMDacV?hScRE^>y?o(JPve#SzGa_Nk%jrST9dUQr827y!?>^3bxCVqB%l@E#dHD8mghtiMg9J0!yc zGJH*jZ8Cf-==}-#{ILwXgWmsHKF?nz%3mbI8)cX*!&_ze9T|R4hG{ZfFT;Epnq>H} z3`=BK74&|Ge17V7QU5Pw_!}AeWH>0p=sQHZ`7%tF;rC>iuZDMubX79+$na$uzAeKZ z8M3=X`WZ4@B*R-}m?p!AWw=9zbuw(0p;bM{D#wCW+E=K2ff{B?yx*oOsbu=dG1A{E z)2|liW$zSb6xN5K;=(Buztx8tL+Ad~-!k#Nbhyl)l0Q;1{zImrqk{e<{E7Aizk?%L z{CL|P*!diO2sryT9H#=7yYUvVul}N}|EIWTfv&2$@}6_Q@4ip+Ab*l@gM1#4&-;H8 zexnisViNv;l90SmehHHVi*>9w0jB==X{TBo8R%FL?X$1);Wl)>5H%D#0ad zTx+IC$7M@(gxUMvb3?eiP(yI$z{`GTpL6!!=l|RLJQHDv#ln!VL39>=yBo~$R! zVcsp*d%U~RcxtDE`$W9w>z)2a`n{>rql|yGJj^SzIy9IqX=^WuHAW*%O`%95m=}hY zg_C8=;)$l_=0=;EJJ(%pmd7lX(USo245XL5*R3}(sy!XvCt^A~9yemRzO&=;9IGS+ zz8Ua_ezHxjRe;B`w9{D)c-(K>@vVK(SqpePu3O-Ebr``K-b&s~hqBsf^a_BLQXV9N-Mk{#b@Z9;voON>t~<5Me{_b_(+O2Fef z2{sa71qsHs&GB-rB?;%3pg4?%>2QQ;hG}!g7Hi8u0S%VU0GpdZ@dFjcO$O^{n&pRM z5W0t%-x_11<-&08f_Tt%EsI&NAhyHl%|48i3H0dt9&fb=~-2 z*$U1~wu8mE-Bz$gtDoG~X4wk1>E?W45w>`gdrbbfblgLeXf_X=VfnM>0VqbpUc{24 zSNmxqmQ^hapBR=9&#UBayRPv7jd@A{I z{!S%7;#1K_TbWex5uYl4NgweMpDKQ7AMp{NDn8D2spLU?s`&ms;v+s)eAIY^HR{%a$`Nsi|dS&)@Qpw^Ee7u7BVJ-H8wifKt2j-dMMGeqLcK`+wY%>GqW78kY znQ!u`HMl@o0iVPG_*|Xe;fMyb1ljP!>5Pvx-vwYH4Xjd}XBui~E3Vq;u4!0rJU3Fe z;_H41#^B8KlQS2X<+6&E%WVL0-DJmOfAYbn*Z6hA@z0(f`wQwt^iF@H^|U=bp4sAh zv{(8Yo~PK;MQ zRF0YPGzPhsSeNzR?x7#|Q)`!)_1?ld z&^-Wgei`uiZeRa1KGyi&v;Mc?Z`t~PshO{y^*{6XtpAxG=W2A9Y;suZ|NgAGkxmAy zZ~Tr9=N5F|bFu#Qe{9#bZPA%J^FM&WnM+2%lThufKx6K~;lU z&UjCYu0Q$)82|5oZ;nS>7~H|&%M8B9V86!SukpTW+A`L!Ph(2-x1NpA8alL5ql&dRS$ZqpVdm!g2hGg(qVeO$U$16T?=xOu)ePN>(eyGt$f!re1GY5GdfmzTJyZU{CwZIw%)CJv)ZRMPJH;W zS)VWb!Guj0Oc=M7V-Vymf{z^^0vwjDcAr|T7Hisl+Wp%7KGjz|+G_bd2kkg=fZDg& zV}8Np8v<$3CE=3+AOCvL8w`N{V8|c#NBmKL%pdo|!@+?-AQ%V*!huL28i)nrfkef1f#)NFdj^V{GmW77z%~Lp-3niiiP5#MA#n=goEKwI2?|Iqv2RM9!^C3 zkw7FE2}Qz@NF*AGMdFb})E^B*gV9hl9EBH(qp@f_nuz&hfmkpWiiKm5STq)k#bb%M zKOTq&$LaEFK7I$)rN^M6oTH#|nV2N_*F%Rsl2`K@uf9oCZYvW!WN$>$q= zRaxBVm$0~mcT`&pg;iVBlZ>7<51eOyJpV-Z25V1NzqqdT!EscXVftZE$Ey+Y|Ljb` z2lAKR(D61WptG}^w90HBx3K`UQ}Dv~MWv;sOYr8$YHheL=>6&dwzGPU+qBwD?_}w> zF~8Lg?BmrkcvYcK+A3vvu%n65ODbt%cK1Lx0p9 z@Afh}BN!dLYr{F-j>mOM6yp$H6ydj1WJysRUNzsD>&kGad)#S4IzMR8U`H0o7ISDW zpC{+j0x~p9VEp+#?4!{Kla>@UwQTLkz>F5;G^?bIKew;bRZlnuNXgd z+LDc1An+%zyn5tU$4`88o)g?2Bec9?a^=)%OPi7#w?FmtvEwJ)-qDk%&TC3;-u@g! zK78!#N9QlPy_2UlCH0N}a`3f7@1DN+#|@hvd1lXRhYr7W{KWget9tV1zd3UJ#MJ7V zc?*`-J+x)(kAL>kp*N1ab=sSiy=d{D{(Sk0?q2h^ADs214Q*-7FQ~i!+b`~a_2B1O z*@Z(Zr&QO>U$}Vbw;%ZF;dkEs_ltl0tgU@($GY#8)r~AIdv^azhu%7I`s|KLPdw@0 zI`s87j$f&+S-416($YtjUHGJ>H8y_Y?UT1{zkFrZ@^wd#oji5sxBqeZ3a8Z#>pClR z-Kh)_ByZ;n9{u@<Cwxe5`=gs>pb^FX4&cmC{`0LcxeSZH=&Ugnm@)I>6^iU0?DGh zdQqDGsL=I9t~2w&?}}w&g-ks;4*g$CI$ZjDc`i}EBI;*d7u@{D&3w$!xi~|AS<&Af z6X#Vau2d>6sl!>wFBBFy^bI-rYL;WVpg$}<|BNeJ2<#R*-yaD-87b;N^meXEU+)_u zLFi^de~ll)r@1-!F;>VPg=R`s(Mdf*I`Ps$;$UwE$)wpd*PSmGD8tE0eic1PPtkW= z?>gS2r|J8oTRcZUrWdq}!X^3_3JsOGMpaCxuGzYC=RZlZBRYP<+)q!Q5;Ah4vAOde z*!SZ8pGUd}ednPqJA0ZRw!Z3`rsU$Ey)-0WR#az3b~I7G_qj8_b;P!9-z%#X6Pj0S zeXON%I<&bO2}gb zT0c^)RDI&$t^N_%A^BlSQcRHu=n{H3b+*CVOf479s6KLn!a*=G}^wXoK3#vdjc<-D(UjM~7 zi3sr9)nVG{DHfVsb5;Gtc!9fEa6prm^c@?{C~n@(ceobF&}D=;$nR5zRd>#IW%9fz zJ91^&!Mo+r`r9MajZ&Y(GaIJsni@I`RjMiN=C}`2lHqVai{I_|d4R*Y&5oZ5IDFFy zQ~_Gs0HOis20`Pti}l=+!MnIY*}Do|T6f_m#oE|0{#|2R_tY2Dz1_uyUv!snmv=>W zUg?f}NgAR=-5nk7ZiqeaITtU>DN6YB8!A67+&%5$%7*Hi*4@=lA1ta#o;p{=f4fDSHD80JVJ<%tvhB19k= zGz+>v#0JU=k$IICk_t%cf|NcWp5R3o8)WJSblFCSrDw0Zx-#bz8gI^>*hl^^ELBhu&5X9ii6-uAviJQPL zb4i4!N6LxFkzW>Z{AN)PQu~$!44|B$ zbs;MP^23zFk%__#{0{jPL`9);q3~UviwQx6cu1B=(twKBpddmE6*zf~%+>1`x#`Ah ICPvr!UzPdW-~a#s diff --git a/os/Makefile b/os/Makefile index 505d37e..f3e40c1 100644 --- a/os/Makefile +++ b/os/Makefile @@ -1,6 +1,6 @@ # Building TARGET := riscv64gc-unknown-none-elf -MODE := release +MODE := debug KERNEL_ELF := target/$(TARGET)/$(MODE)/os KERNEL_BIN := $(KERNEL_ELF).bin DISASM_TMP := target/$(TARGET)/$(MODE)/asm @@ -11,6 +11,11 @@ SBI ?= rustsbi BOOTLOADER := ../bootloader/$(SBI)-$(BOARD).bin K210_BOOTLOADER_SIZE := 131072 +# Building mode argument +ifeq ($(MODE), release) + MODE_ARG := --release +endif + # KERNEL ENTRY ifeq ($(BOARD), qemu) KERNEL_ENTRY_PA := 0x80200000 @@ -51,7 +56,7 @@ kernel: @cd ../user && make build @echo Platform: $(BOARD) @cp src/linker-$(BOARD).ld src/linker.ld - @cargo build --release --features "board_$(BOARD)" + @cargo build $(MODE_ARG) --features "board_$(BOARD)" @rm src/linker.ld clean: @@ -92,4 +97,10 @@ debug: build tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -.PHONY: build env kernel clean disasm disasm-vim run-inner switch-check +gdbserver: build + @qemu-system-riscv64 -machine virt -nographic -bios $(BOOTLOADER) -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) -s -S + +gdbclient: + @riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234' + +.PHONY: build env kernel clean disasm disasm-vim run-inner switch-check gdbserver diff --git a/rust-toolchain b/rust-toolchain index 925656d..abcacd9 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -nightly-2022-01-19 +nightly-2022-04-11 From c8d138a7e3be8500c1913669bad339dfc1c53995 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 16 Apr 2022 15:39:10 -0700 Subject: [PATCH 49/87] Rollback rustsbi && debugging in release mode --- bootloader/rustsbi-k210.bin | Bin 38104 -> 94904 bytes bootloader/rustsbi-qemu.bin | Bin 66376 -> 161528 bytes os/Cargo.toml | 5 ++++- os/Makefile | 4 ++-- user/Cargo.toml | 3 +++ 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin index 158bfa4c6eece67bd9945abd10d35df86a29b9af..c53ed1fc198816f8d4a0cfec958eaae3f2976cd0 100755 GIT binary patch literal 94904 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 literal 38104 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 diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index 76e0e59e4d925113d1bf6d7a7c08a2e2e7740ccc..ddbf336ac1071bdfed06c14e22430dcea70069d8 100755 GIT binary patch literal 161528 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%0D){{#HSSA-Vg8Rf4pP&Ob_im`~PW(wq3b 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� zUJ&?C#_g;s?GCVv7=E92$N2A?R|mg`%_z4l#ZE~tc1rkdVPfPEKSJCmq(9md+|TU* zZxG{%eJn;ZtaTs*!ss5l$nJQ7!{(n$4k0r|aK(aV?h}|6oGEWRc}`@&U>fINA6GF* zEtVQ#=tJZC#QWw7e|rPp;$B0Zzqw4jAI2)5ui%FQM)=5gU;0*4K37cJgk^K6TTSP} z`XA$%-)c%H0b=o+_Uzif@K#fC#+L5rP3i;3%rVtG$InOk+f4mNspO0|h<1thTt>h> z)+cdtn|8S%U2q!g*(T*9-h$-+&E-(17)hRgq5eqEtfl=1jw=(asZKhErI<$5YL2kR z_1HX>2fO%Uq;u(w*G7CMod-MAZ~yUehWF%2KtPa>Io#(R$tiF;i67xFs2QcIZ{a4l8>|j2`0Mh<@aVJ7HzC@a|YeSVIY`>Fw z>3rzaQ#5xuS4#RP@ZN?jq1A$%=6_MzT@X3?^_|xf^;sxDvnn1RaMB5WMMe!oK5Fq zq??0P-JeqGCqQYv;8+@Zrnl;7e`&24vmO(z?j*;cwcOiJEvP!$#cl61^0a%Y zWtuwC>uGs{$0EL1NKZtYpaB~cSg=d2F%(6}C@Jj@pRJ-owaMsePdwDBs>3Qy<*Lt6GzR1e<5|&jA zmaI~7-r^LtRb$l}mndpA!MoR2taWp6t)^RoYYl~0#UlIf;#a`ymSDW5ee=uWRk>Ey zckZjU@PFBYTgVc>ObffdCTfJYSw9WOpCNo5Nh{ETNAXssIFe350}Cs{c=(W?w`m!C^)x_Ef2w^~7wj-#!FxJ? z0p@_<@g(iz-mC?;5-Yi!A%pN#rq6;oVsL1n8N|nLx0S&HAD+(fTeb{-+64Zn4dbQs-SlNsdQ4w7Wi!s5 ze7V|7aIQzBB))8fo=o&b*=Ri(;V?+Q#M361h}BW88LftYe&YXVWnDgH3(g9XZ~5g| zlb27~JmSeY;wdZONi&63U9twHQkE7Z!7_wwFX3s)k;Kn0S#ZC+rI&aFvPh(NB>iAC zpk^!21IfH+!ZzXgrl;LBm{Q zL(}~JSkNRF1VYnXJsKJx#_w3TDXAC>8eiGi(D;5o7Bs3XCC5R@XlTS)nNdB(F>Bfs z0vdsH+!Zj^xM4@ff+lU9#0@WlJvAJ&&%_*v>Z1iq`G7jlGNQo!4AB6Kp}FW6MJk=CMgbtTaS zti)V@x7Y(aCRn(e2Nz&wz!nNphI%f5^OxWbU)_3h|Dmln57Ovw=$SkDov?kA+v#i` zKY13rsbwR0q~X){KG>P6a;M-SVTXtF(bx^-yuNvuGT>Y#)($$qPV|au=F)RC$HJo` zwV(uoLN-(;aqn^a!jDjn9?B7m*$T?R^Y|WAu|(Xqr3dNxxokR{kM!8nA?-m6xOO?? zb3`42Lnm8EI*SiWDcl|_?+@Qi8YEY|de1bhf^Fu$-Ja=)ha8$ReGh4o^egzCwY>LC zpOOS+uuW!*AV0;`iIiQ5B4y@Hkj&(rX(hPtBG!R)IyE)*vXYYv%~^;9wS*AGHQJL-0*h{`@-7|bHm=z?+a_!y9drquJ=vh z_tWbgla#%@rH*-`r8?_Qy_wEOM>JkdFyU0RuF>>CEyY8YnAAAq0z60X-}=UBZ}8vd zUc8ym2(5fN-SQjWctwtghyP>5<1AZ>h>yCniI-2(D3_yRDW30U#yW87T4@Yh4j-E* zaZAd7H0r03b^F3Y-B&w56Mie|dvVXGz6PUo{1i9QS&ebaAbe*!z|);7w`%mp0rH9Q zlEH3Nrp9@@nm+QwFjc~E|W?8yqNLx9Bqz?;02aXfhL`C%H-1ykGNKiI=7&W!TX7%l|i_m z4mUj`jF901&lK_O(J5yc@iE{|NRk63B<^IqC*qofozBQqo1wKOc~??d%y}B4;>iSl zAJiq_6ih(MiGe9g#__gPVhBv>J3n@rCAgE+Uwbn4BFCzIq_-sx_8|Q!silI)BfNZ- zUy@hmJhjBfr2r0o_#`ROT|ci)o~hJxk}B`XdG3HTIDz-YX<(!DMddXAHB=hx5{dN! z9z+Qb0t(_B&9MKf#+Z32Oti=IB47vKNb8%>T6>m?9d7PZgt*FHoKL(6xm zzDhfjBfd(VKKKWcJ}5WWB~$e^Z9gTEuSj@3Q*h#H6s}(EokszgaDKCRUc^Z96;ERSf~_yJ~%M$k+Q{E&qx3EoU+}(wU+OVAmsUZ zOH4RtkCj&|TC<=)f2jdd2U)(wUl8ru{|nJB(=?*7nGP>}>_9(olDBJ;+B40m@Vw(Q z!<%?I?y=-OGfBXd{H@9n?MnO3g~R&Hbn=x+J#)JL3{ImBGz`@b(n;GYY31U1ShPg! z-KA~zLZ0I{z;Mk!@gDOw#`nfwwEWqOyBW=&kzKH+j_2p?^1S&1w^x?1Ln0vAg;RBS z`$hXTQnvUt`4`$S!t>fp4`UAC{^ABXOzafGpj&mL!CKf_J1ulARn62pH3T;l+OI{~+&3zybUyJ}#j1+)di${~_Ly zINlW1N8M9mM`oU5ufXT65}(idM`}p#NJ5?~ANGzU)`(|7_xPLE3V282oKy3}FYu1U zb9$Bqa9`Ztw&tJW9f@o^i0=nw;`#~oo=co&c9G28`pDi&>bcY{becI@-W1sk|Ki++ zZP0wdMLb{RPU~Fa{KOo;K(w6SIl(>Tw1WfOnYu6hov>1?k}4_UX+hJyv_s2N-HB8r z&5$h+mq{W)3%G?q$-fd0xy@;5$IKr(=BOX^I_mpf*809V3iOYlPS7y$n%Qn%xkrZRHjbaXP09T76`Pan1>ph(xpvd7bH-Qd)Xde zyWkSMzG`9r&;uO#_}VS)Eqo?XO5h$b`9KtPG#g1vVwU$O(QYJGdw#}JP{Gy;iRt^) z{UKmPcY=CJi;;`B_W9AjG$_NK z%F=A;7yibTk2@QL6mwj?u}YMbHdn6Ny#Jc-3FNp)*7Kh}87b@G^f@&0fzoZV-LI7k zuoi&?E&K8s|NIv3N!LV@PQW=-0maoMcN5o>BJJsjhgR33WO+tKtVJ9KScXTb=Xzjw zLAy0tzVa#XDtSb`d#MFh34Dg{&k|#9-a4H05qiD{^e~#iyUG+Q0wJ*SS$M?Heft(zK_NOjXL6*&@&`8 z^7+sr@uJ22BzyRa;%3m{^AKP1HVF<{a=xlH{mAti!<~7_K$O$0?r-{%jy7y0d8%EMif*o{0OVD zit#2i7*$(m!wnVgxFw;;sHJw_?(XG3ePv=ZV#FNOMU0TLXvBNLy7^ zeu4EK9|NLgVrHoCk~M+vXe`sL9hrt*4op)N7k##@q$tkBzZcQB$+`&Ni}-h3@(nzO zz86{XEqqz*)4>-l_P;r1deceQ#xbJ|V z-rPS^jmK|lc`WxHOFHV04j<=UY)9$M1zk%~dtz8`&S$uCr^N5K`Rc=a*YhtydUKw# zD_Qo_tz2&|#=&D>q&E+yivfPMcnPp{rriMW`C4@)gLOOo8_TcOI6kd-i6)$63hhse z_G_^7LEfN5O8BE949cfTYP|v8pm@4u=+Wt)mb^g;sQ*g)rbKgK<2Kr>lE`&7z^js| zuMhjRuyj_)s}he%`|}rjRpNAeSTmXiN~`YZ4AWuEe=&OLozTpieXt~Dq!SpX16Zqx zLr|@WgU>+z?RiO`tS3KVyiLCAHCF!)327mA6_|bSodONVj;vj<5`cGg__~4bM?NyU z=0~~~$-U#WlVZPw+8o#TIeY)?bQ)4y|B=eY!I z%?GEP;!nIL(*Q#n@V$#(U~_MHni-0t^5@V`>`KJ&sX{Pvd;1 z^5SW4#t2zoiDJrGyn!A^C^O-ZJZv{reKe-lmk2;hj+Pqpw zCb5H-J@)KFVde^h!yOaD?2jE{b5iYF4zY+gqtnRG3@`?%zQHvowPW3(OV3+#2DH7A zE+zE_wIrPuzP4f=Ee?Y(sxzfn^mvP7XP4})aH1*Vx2a3;V6i>(I#>DXE6f!!E%DV= z>9db) Js`5akz*^e#2V61jVVz3qF_+>gwbHLSbw6&N=Q<|wn*5UkF2_5XR6}P} zPqa^)RhyBLA=ZUb>nfLH;2l0b#0YTB5_n3z3Y<1?eaZEV`Nw2^MQNN-&kW`Y`^8ok zh0$r>xy%>BT*S_z)T)Q!fE;rng-yII5v5+ELE6b8E%F7V4a`gFhik*{DYuC^WPd15 zNAo9}4bLC9m_LDYM@fx!iFPNqN3D-*3Y<$OU)cIBhYdE3N9a*%ee;Ga72XP=rA&*R z-DSv+Dwg=07>|C4$4nB>Z4=`AwS($h_w1Y5s#s4J>obHt#ptSFwJ!B}I{Xx@WA@og zR`0$%OBt{(Q;bSXc@n;N*VA|7xv~<$cUpSpGjHegIGV*>`Q9GchY|2@k8>f~{udeT z3CuS%$TpQs7rxqJ+YbyK8+@z3{1unBqM-axwZ>d6W>BkPaq2u**&by@R+la@LKE=@ zrxdad*Sf?yU1BxU-4MZ|a$;R&yPF37g+1%qZGKh3O}>xPeZB*W>9_UwxKmIYOH@YY z-Jfn&;lu8Kgw^XS>jd<@%8J^)MKk8P-f~GUd*_@}s6*pc6pc}D1+OC8hy0da@w@dJ z&{5b3i1sQPc+lhJUB^hy2`mja=2oB&H>YmyE{@C)oGYh)uyq8D>ja*tk3fy#r|_&9 zeKen`*z$xiMz#mEIv5Npo?CD9_K12!uKjdRXh>{(Fn?&~h!Jq$Pw}1NS7jf0e6sX` zrY<6yZ2Bo&+(LQ zuYLN=Z*r=+gJ_%Ar4SuwA2u_vLif+bW|Brk72=&EM+f=r!q ztTZ*jb)4zoX~G`v)VcH>Gf!O7Ku_e-y->G6%8JcKOQk)^rFq_ibrHG|m*%EA#hO%U zzsjXcP%4=*EQWOy?*8nq-BeD;Z07~6bj-`_>ASS{pH}DzqE(m^v6W?emVWSxM`N8= zLGL>XcU?-T!37v+<*I)cptYYD(?*bbL2>5yo_m z3A%FYF6Q27WyV7>?CEaX$-S6`ZkN-yrA}!nPkdafOPrwHl_O$XKc1Lcw#T*N?u(Su zwPK%cr?wpLbxDuoJVAVqTPe_5dduT(*Xi_+>&lZRFx`^JS^1I)8r_YLYrMa!e`_u~ zqEG5yHhA+;i;q)HKIg4}z=&ceT=z(RDeb=|UKBOP{eC`+kb7F}!{z)VD6Zz{Mp|gs*A_YRC@ifB6rtODhoMg zDW|EvRjvw!qm}|vxPeZi@ z^M`sXQb%!aC-v5q?CGwUZUOP`*6Te>+sYHSq0N!Qz18?SwPWHNrK?;kHcQOx{&jhh zOqCn4GC_YdnOeHMU9|IEw6ms;>QVbP5`DXEMBlDL-)=+SMxt-Gp>HG6x7$MWEtLpr zE&8_+)SCC&%u|8AHt-5T=&hJ**afcTN@nQ9sC^{$k?zfrS>B9Q8Df8lWMbmK%oR}% z%u~%Pt*#Y|;mZ|vFIt^-s%GL5wFgSi1me5vmrAN@McE$B8ADoNyz?OSgQ#^Ldcwo} zycqTHtV)Hs!Ch%v>>E$8x!RYQlDfQZ)`>K&>^w9YT-e36{v_$8NfI6vt#3a-~+n+|V0>)0(nqm~uIiujJocO_A1v)g6k|Xnk5(Gg|s>ZMw#78r>_~*s*H6{RQT& z*1a0Z>`z2Ya))ih`lHt=x9|NN`r^lL|L$Geccf{K)o#=}%Nr{$la|_XMi*Cc+5DkS z31irK(3Z!&ep%NTskOXco>XzEJTdHY^;?=$`*WF^A1U75I~?|~jT%kr9M5*#2noIy zQaRFHM7m4krUOTZG#APHKYV1`wt))VbmmCdmaB|m6}paTQRiOqpcUFtt#~p*TmEXK zwsgf^6$h1P*bc|cHiCY;jbM*Cli+%WspZY?+A{S>Sk}-KPw8#;?gg5O6kcAS!AYTw z?%lVs1pTWl3VY_1bLJ5R>!Zf1&pz-_>O9Q~4SFt_nq^|I0=kC zy|(+zIm@p2?d6RV*wbfT@K8y{ikZw9`L>qwpE|3#gWkE`DF5Z-%y9;Fc~2C;v6C48NcIU5Vxgu2<42`FQYwWmM>7hE&TUyNud(<|zBVR$C zlpl2}{g*p(te6h4I|RX0EbV2?P@ zqKggrWZ&U+Db}55N`DuH=jU=r;}am+Z`D`>p7^dmNvo>{@9Mv&Z%yz0Jr8!y$eL=S z_1&$UzpSLX8==qG)y7J@;=J}U<;od3Zr8cX?uHn4Fl;Gi_5(+^Jm}W3Nk$!;yu@%7 zYcfn>t19eayQ0hWVa%;eW%loX%<3yOPi&cr~rQbeKc`Q8Pvv7@j?_11$bsjtT$x6+^Pu|1dc}>TT=@)A1j=Ahxck9cs znr^wze$RW_IW6|$B;}y;1|zEotgu7&Ump)^a9Jvkxn4SQQ=NNj3^M{c`?kGTl()sO zYQ=r-oX#E2CfPTgzv7K1SU4eN^_x@b-g4QeC28nsXDeW_K7GVe-B4|>*6QsQ5n-Ct zw_L|6bw~Bgr8jO0k1~db4<;<}v5PUw_M91rf(N)ml%{f3$oYTso-^m>c%mGd)S4sZ zsV-g3O3g}p`8k%f)xB{E+gY=_4YOr$o3?b-M9$rb*;)Hg%0nkNXdkKFoU&QfAe3#b z-&Ts*WCY$^rSAKuG2J&5ZTUA`T3v=!=dPgHRQ(&>p$XdiUA25PDyw#5Mumydyb8Ou zkSre8+z%bnU6o~f=5%4sJoyaPmkC-|n8@Scv*vnFX)5{>nCi$q-(%mtTdR8=7zRGw zPH23>*kt>|TeZs@*SHdvt=8P*3JGmVsrA5CO52gWwbQp-(tt_p7o zyNWrUY|uZWeDK8anvZIl^ix>J*5f_bH-abAEw7$ZT2?~8j7~)xgWtqY5U)Iycw$g> z>>RpOj@Li4EEP{Vw-?OFORDx(SX>RRq)P2xcj8P|;+tFbGdA~^VQgO&^jHDfvieG| zD<0_t-!k{Nq#LO1JJ5Tq=dI3neQSp9AAGPsy)UzOLr-q!4yW!_MSE4Dx5BODYwvO0 z>?_+l5vxmWPD;+nZ0%#UkET3&@)7-p16iqA-5L7g1KjJA?o=3CY^`2le=tsyi2eT; zwC;#}t$p%RjXR=Qu}@g4Q9N<5Vt;`x!1?VLm^;F!zvyvCn8Lg8ogDtAXO+~Vu)C+6 zQh)n?q5#E>pTCYgQ|>^lMhf z>y1I*XKNTAkk)79cfv;Oua@T2#P4>mwlWK}M19Z_#Z2bZkwytb%$CXNtad((jv(tX!=QyF?taRvHmyN5#w4`B~ zq-5?k*tD*LpP4lY#TlBK6|f->|DehKHD`F~inmf|9GTnkydqyiL zSw6TOyDKv6;*~WkY=?PnXND#rV?Qt97vXm|sc|R~wI^gWBG-4q8;9eKd%lj?RT$1b zWIyh5uXZp<3y>UM@@q|z0+K`B_KiCVpDT!39`E8D?N;=^hH{{-UC_%S2hSZKZ>W0L zxjN`&AxU5)X^<9@1f@m3fV6>mN%Bzh?n7RZBvc+ZZI9rmsb%g;Cu@JE<_Y7&1Cwjo z;$3$838YhwKxI=S={2W2>3KhH_!^~e6!t~0gv@^? zD1Xb0`4+F1NgWWq*h*ts6qBBln2KS`o$y?UCC-)g9-eH^oJ|==ix+C76 zw0M;}vTs85?aMdK3ZEXG5^fy+zB$|-7H*j1ap~=s+GbF%63=ejyH#hrck3F5;)w|2=DFg(h>{pghIYx$dhJsNG<%kxyM3$s7{ zp5mUqRoA}v;I)@oLepQ^15Ymfy+)*b&h zG5eOI22nC`H_8h8)kh~7we8d(t360F$28r2njYGz%j zRkLEI$7RKCf^wv0YFE@LSL)REvYgnQmhANGvPWYdZFwa9k;<%jS#24a8F8?gsJ4D^ zxW@X%VP!?N^=uRA-{U*o;nC4aJ@(HBnC8~K>oAVCuFSugpUo+)b8A_&(ZGfld+gP# zwHL3jS7@~zpEq1OXjsk4w;EW-(eTUm{)Q-Bm4Ug#`#!h76FzZT6?}8uI>lqDGWVwR z?cGErUid*mNAc>mW-Rtogm&ZD2{24V{=1UDNrzu{M}b%{M@|&YzS& zn9p7pO*g{{Dqwxni&^xM*M6~0JAXKj@*n0?Q3eZ6`6K6m$m#gK`2uoY^tMa-ft*vU zPH)Ux_D2tC4~DlgT@|=3g19wY7eCZcxfAeqRITox4tR0Taf>E(kEBrS&y02av~?(H z$aS(b)xPIY*mMWcB*$8^g2dgI+*T-U1LAFGDs+VSSm&uTpC+b!R77lIF8{TsHY#btfRW7+L?O=tF>>}RDby)L7^Z=!MV zQ;j`+jn){mo;^@=w@24D9a`gSnR^qoUGjZL;hIZ4kJVeHcsiaq-k(%iFWb=E&X^AJ zhP#S*ROH#SjuE9exb6_Mcc(M^Q+3diN7NZ(euMI3Ji1l`U$@*b^EFHKSFy7-l;fS6 zJHfet4`q#g-WDTtc36!cf*x&6BdfMfX8f0y~xZy0(O z)_OR-`9t$r^!mW`E_&)(X1;*FyD0i@|3Pp2b$ka!^j+7>-rg9ix38@KI!!&!2-O*| z7s7Gw!#xAEdOnNw`#Q{{Ci?H%W@FL0$wq_e3PBlfeci3SR&j3{m^`KKVB#NG zLh60Ym^6*u`NU6LF{jH@!wNgU(NWt@7y~+kdS@8Lg0UpKOcNZPjBQPGcSS zgkQ3k9GzNzbQ(jt@YwKb{R2-v{o{`RR))S`*W|c(`B_)ok6!q(yD?6?WX;9Pv-F3y zFZhWu=@5E}MzLo&HD^c!ra3Z)5;~9(VCsOCgN?;kmV^g1YE2b-! zdc;%aQ*Na%@@ki`MD%P%Dlz}RCf;}NB|0ERB!gFf(pf?>W0tB?>mv3->P)OTo0Nm$ zhu9R{_Pg)NPxKdKG;bI;4X}>l_bwUNh3k$t8C{COsE;<-H@1R0{UUijG4-4=nN5&N4*p)NWlS zXpNziHR)OO#iRu*XF}VsNtfVynN2BkKCy4|0O8;ms2A(#|KyVUlP|_WWqcqMrlvqB zQWyH6@cckPfqNt*{-*@se+2fO0{b6*0rtDifi;)>M_|ndU^Am)pWPd>W{La1rRLPR zfi?U7EwE<2$zO9C?i!&{XQ_&EOtl%6zVM6p5cU_`qIhWRB~;e2on`L5t-6n%*jYN4 zb+d%-Lu^Zo<}G`~YSIC*jxFnkXe54cn6!b40*gO`eN&_MI+g&*fNFw-kSs=A_sl@3 zN`4Xu)q!b#sMswkROMaJQ=C&YGf%q*6m89!78m7_8ifS%I!5zkbU#gelh2ajej1VT z@4#!@#K0D${V1>nm684y_>zPzgDw@LS)Z)8xa_$n!racb$uh2Qsb61eA0 zH!Z{W`T6nqUh>0(ja^#fdvWZb@*ZyDIh0(fxCgo>3*4pZ8+PlUpDJ%v;Ct?f7V;sa z^ki@mi#;!-x|KAo{gD%>YYMC11K$R^xg~8Z#^a8e#$LA4k_-c#$DBpS>;N> z5yz}2S}%vjlzY;WAG)>4`dLqQU3TksvZk&9<=H0(CaLM`HSpR5ydE6r(jF~87@n*L zG=S(-vOfGm;)R+E(^_`xWL@s?o$S!weI=i;xg||3zWN1g$I4fFjnklca&=!$*;B5E zHZoNY&JsA>yN|uc=CY&ct(_ryE%RmGYn;RJtPjv{257X&wj)&E-Rc|eyXOB7_uU`= zr}o`}=lp%=yCbmgb~vjFuFBmD&cW?!Er>}i+e&+NSLK#%HQ1)wq8%33A=mVd%a_-I zE8zR2Hp52qprO#*Z^$+G88(=Er)E|aB=tn6W49DLrBdp!h<(zLCHy*{xMIypcT6L@ zxKhsQhn}rc*u~VP9^=;O?BLe!WcwrUY2C-^cNcT-z7{iQ`|??P8d*o$w9EBMX`H<( zM)O)FrR>OgZ)hgZcOli@(;exael5ms^w;f%_dw+aS$UV08BeU%xb^2R+l$|0nw5*| zE?VuE4jJ6L=h2Mp!hQ~T$BRh`=OO*M!Zj3gyp(o0?2}JuA%T9~Qf2RK0`-ahdg;n< zgm)zym2;N`&6~H*u6jG!UcmbDUF}_kFBfUk9fo z!E%}ie+jieYE3|Put!XD?vX7v#al4LhyB>Ws<(Riphux^TCEaYx zG?(6`tc&r?&i|#1ws-EI?D2lS>oW@#KlHlr2E(1^c|9`$32CmQ(C(qan8D1^J zYh-Aa;UXC($?%&pOp)QOGQ3NM_sZ~JWLP1?Z8F>;!#y&5PKLEIbml&ko3|;~{!pH?xM*QvR*`+<^%*y&FIl>H zQMw}`J~1h2QRc!Wj-?s#j>LsUh4zJoj&)f@#g4*-MRuFB$YCigVlPB%dHdH867YE% ze=x3PYW-QcNMGp8FQ%9H1gGDIxNAeiKaRK=__GxkJ96@iO~rYp9A|cMR(|$o)26KA z^`^Xyj>63BJSb53C%9b7KOKJo`HP(C#f3I|@t4j&B`E*;tjuClwgX=yAjmQmt?kgD78MtzXI)?5$Z>K!W;$%e&O*mRJZIaA9cv3SinDS! zI@vW>2z)}c;~%J|n1a9H_$v{I%f-HQ`$FZXa;ILUDM7#t^o5Ta-eVBsdQyZ4v-4~j zCN#p7lb7Mlc9=G;cjTIE*@X^U#%2?}bYz4WVFD3_n|Z5qvI-0H3X3ejhTY=Ga9ZrS z*C#D@WF|Ql*)tX;Wu`Apzj2|8t3{T0%cART+4<{jmL#4%D?bYZZh}$Z2TL3O5FT)y z8Cz)2cNWpt^*OfuAE>2d6sJF6x`lU6ZeB6^1&z3NMAB zmfc}0E_66dg?V|!-!R#VikvxFx$8{4KGXd4&Bcx))9NBe;dk>e6zqA0j-rW?m*s~i z!q;vIr#dg#Q~|e&-;p5RYAd9YoVmrzOk!}|DAQB>=yQ*J){94U+{p6O77vdxUfSCA zD7c8`X_ZWmgTee0k8i?T!2GafWQ-ix_pDhQf1}g!aIp!Wd)6exo4$FIsR++Gj(qz) zYm#nA&%(HVh|g`cJr9_2vWjfWOlmttZLo?}f5>ow7(qqZ@cj+krWM+9*Evj%+zeAz zZieGw(`~s$m^XH!T&Xrpd_#hio_s z#pge!3H*N9c8?lwG}6}Eiwf5Q+1Y%^@p1=cxv~6-F&zG5$?`V^G)O9}LeIJr`cT>EZ0_On&_5=j1N~FbijhcEB|Q|9n$E zt8fR8zuzhwUxDezTR(&A1vAX__zM+()fn-!5YPFA zTwAsYTti;rGEfBY4~`6zGZ)0$zTTFOwa1>9;Rr7Gm&khs{(x3{<~kD=VgI6>m23LJ zqU%hH6CW52&&S9^V`!XwNeLnHX)tgoA65rPAyFw)CZ?k!W0?s=(ezEzcOBW8%a*0w zcJJCdtaq)v_tt;N;)tTxW@b6EGp=7`S&aXDUCho(2Z5h|r5HzPfQdd+03VI*!2TPf zzrQTXLp0%U=OA;6iopZ<>BOHT{P%I_(H{t@KZ%~9`_sP7nb>8^oVl9{ZTa&Tq?v$n znBK*J4->fgnK|lU!mgq;( z8r)(C9MC#F&nn=w$S_HUH_I?ph8tzLONP(L&?CbGGAv$?X=TbPGUeu(ik$ZKrsDOq z4%>==)IvwL?O`B2(~)a;aE{ErFg`P3>EaAqyd%kGUy_h%vn3=hSp-ob!x5jbG&AEy z`yxk1=3?8@g&2;7HgJ5z7xD2~v^m$l&{mw6lVwNy+OHDr`!?D{pCYWeoX;OMk8&`F zIlqyeX~}lv&R_8NLjq>Qu@DR_;CN`Zfa6X92Gi&To`d5*oxm8;<`9Gbt24LjZAI(T z3n7-#{9SB`=lChKZCbd_k?Sbr`00^wt(R~So)*a86a>!a@#t}=a%da{$755ImmexV zRQlaWPjZL)34mu5|2Ud9LU_zK&AG|6=or`jy&6 zACjM_9UJZu^XD-c{z!&i8MesqeHr%2@E_9e>CTLd&1;J`1I(PYAZU4Z%!fh@f*UQ1 z0%$nF>yz+j(*r&@6vpWwf56vx_@*?W@{=5^egg83D-VY%=LQrK98cqua2%?yNvOdL z22(#e-*=FQ`X#u$)rh0<6&z1;6v@QF@w8rG<78C)_Yg<(HaPwLW5i=4FJ$@$5g!Up zJL2cyFSz_X#1X!O;|mZ+{7tC%c_HEp5f`exq(`|fM0$$HrRbx|cOvdvW5h2-eBgK( zgFis3(B+ceCb&Ht5f=(RiVp=J$pbWg?9ReM@Oq|nOpb?C-fg{YqXY6eL~#f&kjkOa z3a+mNc}YeNj;}x*l^Y!I8Y7d?VsR zjk`lK{@YlZO;}G%`L^6F`$PXA?MqR97OhQ*a%sv#C7`LOl2u& zkHPsLMPAZHjFKaBixwv(CN8qcdXwWsy(BZxXA=Id;lIS!mmR;M%Aqm?@{d}-sD|Kt z#8;|16nYC^;{bH9Gournet7=pPEm7uZFT1 z7W^EXFBoq(BO}S7-*x6Y3O8mIjjYUg~79-K(;)LQG ziW7^Iq?C;EE5^{%ugDPNCkM)rtX#)hh}HIozARDxhcLJ5Kpd^Hhhp4OEa~{K%wjyQ zBV^$dk3SkKAwc*$lnTWg9VBF;+~lu|`c~sNeXhqJ(eClazlJm>a=`t;u+LSs;ak_N zD9YDaw#_uYz4)gKVsDK2S#|bZy-$5+F^m>-g>dP}v9B)#2ttdEjWttVrYRko{fwez zkg*-uKguPsdsP0+oZ^M)&aCVV$TP^l$@un--E-z!v!hPk@cYbrU;F4gkG;{f;KkFUo?-# z+NXN;f6V?A-&hcX56JoX^&`joG{n((FMD3h*B{BSR)!5SY>}b9R;0T^hKppFEW-z7 z_@WFC$?$an6G8v}I@Ie`Flwq4!q=~)7=Y2KYUvb*hF*!@iODUMf$H{ zaDwy0Efd#QjgxT;kuxDR;OZ zLKHU&&VNODB##8c|6>V%aQw5f{^0oMWI2ELFyv~Uh1s^vSOY*6-d`-nA?ZEn6ODCd zDMIW`VC&&w>{(oAdRUcv(N}WMBI$+&>iRmovm0`!Ej?b8AInQ;>=;4?f5Gv;MI4QP z^%Fq9$CY1#%Xt$8nD7^nKcxH;obO%aA-P%o1mqvZk5Zc8{C`B8X^eQ1-@h#DGYYHN z)GuBucK?ZpznmcOsmgl9M`LKPzk6KdI&-878l^GTC+oSLKQVR+3@Y`T`WX*D|6CqG z=*b_uLEs@n0`wvn+&L<62*-nuk_G4gBLo8Kr{MUvWPCt*1`QtI4LX~^h81b*@ zMSljD^XeG!htMzA0`3z0(I+_HCA=q@H#lB_KtlKmj-P<^G@eH5O$F!pO&D5W<0IV( z-A-}Q`~|`Jqh$WzcwJcNcG)nfLf6OZfjT{>h?KQ<8#HZM#hZi6Es*(x;~yC#{s`cR z4cWeccC95Q6Pu+g3-g@$%a+}D+lqT{MIQPD*YhUI3x(geWc+A6O4M1hiq_`mZE_T@ z&C6U{yeV(~f{^8J83S)Mh$ntG7@j8)Pclq!{8eM%O{6s#X!Yw55W+sCtT(sGIsZD_5A(!M;Vc0}_^6Dk#~G zjSd)8kSP-BCIZrNRfQ1JmzlmN%O|;oK9%yB^da=wEuSZd$Kh{GuaF;-A?ahnAMIPJ z`Ua30{`so;)bwg7iy02asxKICxyXU8`}^0YksE6c3`j>II#v~Ib}SS9^#chZ;g#r$ z`U#-lqt^4$bCg?sSuk>Fr|AE2n+byXhu;wGNs|p2wwoBWA1z=d3pJ3*VDpYIYT9t- z0Q`)*zDaNb*VnIXufz9q3bWR&4>DNg))JVs zN<@G2ug511fAog`_Qz5b&q+T7M93lPp(ypgfbxeD778g+2pm@LN0LOC#k$HgKGMi$;x z$#k?9(8pg7x1@v2uj;W)iypplQT!tM078${M)@v8lvP9rVojVjY9=-WnWicU|^8*dGO>2e9__5^zzc}2=KYIWN=a>EG4?@bf znNlw=v#IK1R@lT!C@!o*g#Y*L%L29WjNP6h+Ph8yPJB1D_aD;lD%UrH*a<@y$2yxG zrZB}BS$UkLcw53j{0n{N;BP+uem7IB7b^b)v6FwMT`S_dWq2!0s&LGLn}tfzW%y{w zKcp>V+H48=__!@W(G0=(@{JR6OzZq2g&Q2H->RVLCs|aY zl+oq?0&$`GyK#(o)ehvv8^nBgU4|dZuuq2iMDacV?hScRE^>y?o(JPve#SzGa_Nk%jrST9dUQr827y!?>^3bxCVqB%l@E#dHD8mghtiMg9J0!yc zGJH*jZ8Cf-==}-#{ILwXgWmsHKF?nz%3mbI8)cX*!&_ze9T|R4hG{ZfFT;Epnq>H} z3`=BK74&|Ge17V7QU5Pw_!}AeWH>0p=sQHZ`7%tF;rC>iuZDMubX79+$na$uzAeKZ z8M3=X`WZ4@B*R-}m?p!AWw=9zbuw(0p;bM{D#wCW+E=K2ff{B?yx*oOsbu=dG1A{E z)2|liW$zSb6xN5K;=(Buztx8tL+Ad~-!k#Nbhyl)l0Q;1{zImrqk{e<{E7Aizk?%L z{CL|P*!diO2sryT9H#=7yYUvVul}N}|EIWTfv&2$@}6_Q@4ip+Ab*l@gM1#4&-;H8 zexnisViNv;l90SmehHHVi*>9w0jB==X{TBo8R%FL?X$1);Wl)>5H%D#0ad zTx+IC$7M@(gxUMvb3?eiP(yI$z{`GTpL6!!=l|RLJQHDv#ln!VL39>=yBo~$R! zVcsp*d%U~RcxtDE`$W9w>z)2a`n{>rql|yGJj^SzIy9IqX=^WuHAW*%O`%95m=}hY zg_C8=;)$l_=0=;EJJ(%pmd7lX(USo245XL5*R3}(sy!XvCt^A~9yemRzO&=;9IGS+ zz8Ua_ezHxjRe;B`w9{D)c-(K>@vVK(SqpePu3O-Ebr``K-b&s~hqBsf^a_BLQXV9N-Mk{#b@Z9;voON>t~<5Me{_b_(+O2Fef z2{sa71qsHs&GB-rB?;%3pg4?%>2QQ;hG}!g7Hi8u0S%VU0GpdZ@dFjcO$O^{n&pRM z5W0t%-x_11<-&08f_Tt%EsI&NAhyHl%|48i3H0dt9&fb=~-2 z*$U1~wu8mE-Bz$gtDoG~X4wk1>E?W45w>`gdrbbfblgLeXf_X=VfnM>0VqbpUc{24 zSNmxqmQ^hapBR=9&#UBayRPv7jd@A{I z{!S%7;#1K_TbWex5uYl4NgweMpDKQ7AMp{NDn8D2spLU?s`&ms;v+s)eAIY^HR{%a$`Nsi|dS&)@Qpw^Ee7u7BVJ-H8wifKt2j-dMMGeqLcK`+wY%>GqW78kY znQ!u`HMl@o0iVPG_*|Xe;fMyb1ljP!>5Pvx-vwYH4Xjd}XBui~E3Vq;u4!0rJU3Fe z;_H41#^B8KlQS2X<+6&E%WVL0-DJmOfAYbn*Z6hA@z0(f`wQwt^iF@H^|U=bp4sAh zv{(8Yo~PK;MQ zRF0YPGzPhsSeNzR?x7#|Q)`!)_1?ld z&^-Wgei`uiZeRa1KGyi&v;Mc?Z`t~PshO{y^*{6XtpAxG=W2A9Y;suZ|NgAGkxmAy zZ~Tr9=N5F|bFu#Qe{9#bZPA%J^FM&WnM+2%lThufKx6K~;lU z&UjCYu0Q$)82|5oZ;nS>7~H|&%M8B9V86!SukpTW+A`L!Ph(2-x1NpA8alL5ql&dRS$ZqpVdm!g2hGg(qVeO$U$16T?=xOu)ePN>(eyGt$f!re1GY5GdfmzTJyZU{CwZIw%)CJv)ZRMPJH;W zS)VWb!Guj0Oc=M7V-Vymf{z^^0vwjDcAr|T7Hisl+Wp%7KGjz|+G_bd2kkg=fZDg& zV}8Np8v<$3CE=3+AOCvL8w`N{V8|c#NBmKL%pdo|!@+?-AQ%V*!huL28i)nrfkef1f#)NFdj^V{GmW77z%~Lp-3niiiP5#MA#n=goEKwI2?|Iqv2RM9!^C3 zkw7FE2}Qz@NF*AGMdFb})E^B*gV9hl9EBH(qp@f_nuz&hfmkpWiiKm5STq)k#bb%M zKOTq&$LaEFK7I$)rN^M6oTH#|nV2N_*F%Rsl2`K@uf9oCZYvW!WN$>$q= zRaxBVm$0~mcT`&pg;iVBlZ>7<51eOyJpV-Z25V1NzqqdT!EscXVftZE$Ey+Y|Ljb` z2lAKR(D61WptG}^w90HBx3K`UQ}Dv~MWv;sOYr8$YHheL=>6&dwzGPU+qBwD?_}w> zF~8Lg?BmrkcvYcK+A3vvu%n65ODbt%cK1Lx0p9 z@Afh}BN!dLYr{F-j>mOM6yp$H6ydj1WJysRUNzsD>&kGad)#S4IzMR8U`H0o7ISDW zpC{+j0x~p9VEp+#?4!{Kla>@UwQTLkz>F5;G^?bIKew;bRZlnuNXgd z+LDc1An+%zyn5tU$4`88o)g?2Bec9?a^=)%OPi7#w?FmtvEwJ)-qDk%&TC3;-u@g! zK78!#N9QlPy_2UlCH0N}a`3f7@1DN+#|@hvd1lXRhYr7W{KWget9tV1zd3UJ#MJ7V zc?*`-J+x)(kAL>kp*N1ab=sSiy=d{D{(Sk0?q2h^ADs214Q*-7FQ~i!+b`~a_2B1O z*@Z(Zr&QO>U$}Vbw;%ZF;dkEs_ltl0tgU@($GY#8)r~AIdv^azhu%7I`s|KLPdw@0 zI`s87j$f&+S-416($YtjUHGJ>H8y_Y?UT1{zkFrZ@^wd#oji5sxBqeZ3a8Z#>pClR z-Kh)_ByZ;n9{u@<Cwxe5`=gs>pb^FX4&cmC{`0LcxeSZH=&Ugnm@)I>6^iU0?DGh zdQqDGsL=I9t~2w&?}}w&g-ks;4*g$CI$ZjDc`i}EBI;*d7u@{D&3w$!xi~|AS<&Af z6X#Vau2d>6sl!>wFBBFy^bI-rYL;WVpg$}<|BNeJ2<#R*-yaD-87b;N^meXEU+)_u zLFi^de~ll)r@1-!F;>VPg=R`s(Mdf*I`Ps$;$UwE$)wpd*PSmGD8tE0eic1PPtkW= z?>gS2r|J8oTRcZUrWdq}!X^3_3JsOGMpaCxuGzYC=RZlZBRYP<+)q!Q5;Ah4vAOde z*!SZ8pGUd}ednPqJA0ZRw!Z3`rsU$Ey)-0WR#az3b~I7G_qj8_b;P!9-z%#X6Pj0S zeXON%I<&bO2}gb zT0c^)RDI&$t^N_%A^BlSQcRHu=n{H3b+*CVOf479s6KLn!a*=G}^wXoK3#vdjc<-D(UjM~7 zi3sr9)nVG{DHfVsb5;Gtc!9fEa6prm^c@?{C~n@(ceobF&}D=;$nR5zRd>#IW%9fz zJ91^&!Mo+r`r9MajZ&Y(GaIJsni@I`RjMiN=C}`2lHqVai{I_|d4R*Y&5oZ5IDFFy zQ~_Gs0HOis20`Pti}l=+!MnIY*}Do|T6f_m#oE|0{#|2R_tY2Dz1_uyUv!snmv=>W zUg?f}NgAR=-5nk7ZiqeaITtU>DN6YB8!A67+&%5$%7*Hi*4@=lA1ta#o;p{=f4fDSHD80JVJ<%tvhB19k= zGz+>v#0JU=k$IICk_t%cf|NcWp5R3o8)WJSblFCSrDw0Zx-#bz8gI^>*hl^^ELBhu&5X9ii6-uAviJQPL zb4i4!N6LxFkzW>Z{AN)PQu~$!44|B$ zbs;MP^23zFk%__#{0{jPL`9);q3~UviwQx6cu1B=(twKBpddmE6*zf~%+>1`x#`Ah ICPvr!UzPdW-~a#s literal 66376 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 Date: Fri, 13 May 2022 00:58:11 -0700 Subject: [PATCH 50/87] Fix #69. --- os/src/mm/address.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/os/src/mm/address.rs b/os/src/mm/address.rs index e0e88e5..d5cf59f 100644 --- a/os/src/mm/address.rs +++ b/os/src/mm/address.rs @@ -85,7 +85,11 @@ impl From for usize { } impl From for usize { fn from(v: VirtAddr) -> Self { - v.0 + if v.0 >= (1 << (VA_WIDTH_SV39 - 1)) { + v.0 | (!((1 << VA_WIDTH_SV39) - 1)) + } else { + v.0 + } } } impl From for usize { From ab99bc8c28dab35dbf88fe9da55e35d74ba261a1 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Fri, 20 May 2022 08:55:07 +0800 Subject: [PATCH 51/87] add cargo fmt in Makefile, and exec make fmt --- Makefile | 2 ++ os/src/boards/k210.rs | 1 - os/src/mm/frame_allocator.rs | 2 +- os/src/mm/memory_set.rs | 38 +++++++++++++++-------------------- os/src/mm/mod.rs | 5 ++--- os/src/syscall/process.rs | 2 +- os/src/trap/context.rs | 8 ++++---- os/src/trap/mod.rs | 8 +++++--- user/src/bin/04load_fault.rs | 6 +++--- user/src/bin/05store_fault.rs | 4 ++-- 10 files changed, 36 insertions(+), 40 deletions(-) diff --git a/Makefile b/Makefile index 2e33976..c67d48a 100644 --- a/Makefile +++ b/Makefile @@ -6,3 +6,5 @@ docker: build_docker: docker build -t ${DOCKER_NAME} . +fmt: + cd os ; cargo fmt; cd ../user; cargo fmt; cd .. \ No newline at end of file diff --git a/os/src/boards/k210.rs b/os/src/boards/k210.rs index cb97f76..4fea2d1 100644 --- a/os/src/boards/k210.rs +++ b/os/src/boards/k210.rs @@ -1,2 +1 @@ pub const CLOCK_FREQ: usize = 403000000 / 62; - diff --git a/os/src/mm/frame_allocator.rs b/os/src/mm/frame_allocator.rs index d4320da..7818ba8 100644 --- a/os/src/mm/frame_allocator.rs +++ b/os/src/mm/frame_allocator.rs @@ -1,4 +1,4 @@ -//! Implementation of [`FrameAllocator`] which +//! Implementation of [`FrameAllocator`] which //! controls all the frames in the operating system. use super::{PhysAddr, PhysPageNum}; diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index 32c91ed..e8de984 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -27,7 +27,7 @@ extern "C" { } lazy_static! { - /// a memory set instance through lazy_static! managing kernel space + /// a memory set instance through lazy_static! managing kernel space pub static ref KERNEL_SPACE: Arc> = Arc::new(unsafe { UPSafeCell::new(MemorySet::new_kernel()) }); } @@ -324,26 +324,20 @@ pub fn remap_test() { let mid_text: VirtAddr = ((stext as usize + etext as usize) / 2).into(); let mid_rodata: VirtAddr = ((srodata as usize + erodata as usize) / 2).into(); let mid_data: VirtAddr = ((sdata as usize + edata as usize) / 2).into(); - assert!( - !kernel_space - .page_table - .translate(mid_text.floor()) - .unwrap() - .writable(), - ); - assert!( - !kernel_space - .page_table - .translate(mid_rodata.floor()) - .unwrap() - .writable(), - ); - assert!( - !kernel_space - .page_table - .translate(mid_data.floor()) - .unwrap() - .executable(), - ); + assert!(!kernel_space + .page_table + .translate(mid_text.floor()) + .unwrap() + .writable(),); + assert!(!kernel_space + .page_table + .translate(mid_rodata.floor()) + .unwrap() + .writable(),); + assert!(!kernel_space + .page_table + .translate(mid_data.floor()) + .unwrap() + .executable(),); println!("remap_test passed!"); } diff --git a/os/src/mm/mod.rs b/os/src/mm/mod.rs index cafdbac..e0fd13c 100644 --- a/os/src/mm/mod.rs +++ b/os/src/mm/mod.rs @@ -1,12 +1,11 @@ //! Memory management implementation -//! +//! //! SV39 page-based virtual-memory architecture for RV64 systems, and //! everything about memory management, like frame allocator, page table, //! map area and memory set, is implemented here. -//! +//! //! Every task or process has a memory_set to control its virtual memory. - mod address; mod frame_allocator; mod heap_allocator; diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index e5b4ad4..ec469bd 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -16,7 +16,7 @@ pub fn sys_yield() -> isize { 0 } -/// get current time +/// get current time pub fn sys_get_time() -> isize { get_time_ms() as isize } diff --git a/os/src/trap/context.rs b/os/src/trap/context.rs index 527d1b6..dc8b78d 100644 --- a/os/src/trap/context.rs +++ b/os/src/trap/context.rs @@ -37,10 +37,10 @@ impl TrapContext { let mut cx = Self { x: [0; 32], sstatus, - sepc: entry, // entry point of app - kernel_satp, // addr of page table - kernel_sp, // kernel stack - trap_handler,// addr of trap_handler function + sepc: entry, // entry point of app + kernel_satp, // addr of page table + kernel_sp, // kernel stack + trap_handler, // addr of trap_handler function }; cx.set_sp(sp); // app's user stack pointer cx // return initial Trap Context of app diff --git a/os/src/trap/mod.rs b/os/src/trap/mod.rs index 14fb76b..4a11dc0 100644 --- a/os/src/trap/mod.rs +++ b/os/src/trap/mod.rs @@ -64,8 +64,10 @@ pub fn trap_handler() -> ! { cx.sepc += 4; cx.x[10] = syscall(cx.x[17], [cx.x[10], cx.x[11], cx.x[12]]) as usize; } - Trap::Exception(Exception::StoreFault) | Trap::Exception(Exception::StorePageFault) | - Trap::Exception(Exception::LoadFault) | Trap::Exception(Exception::LoadPageFault) => { + Trap::Exception(Exception::StoreFault) + | Trap::Exception(Exception::StorePageFault) + | Trap::Exception(Exception::LoadFault) + | Trap::Exception(Exception::LoadPageFault) => { println!("[kernel] PageFault in application, bad addr = {:#x}, bad instruction = {:#x}, kernel killed it.", stval, cx.sepc); exit_current_and_run_next(); } @@ -115,7 +117,7 @@ pub fn trap_return() -> ! { #[no_mangle] /// Unimplement: traps/interrupts/exceptions from kernel mode -/// Todo: Chapter 9: I/O device +/// Todo: Chapter 9: I/O device pub fn trap_from_kernel() -> ! { panic!("a trap from kernel!"); } diff --git a/user/src/bin/04load_fault.rs b/user/src/bin/04load_fault.rs index 87b2fad..2927e85 100644 --- a/user/src/bin/04load_fault.rs +++ b/user/src/bin/04load_fault.rs @@ -4,7 +4,7 @@ #[macro_use] extern crate user_lib; -use core::ptr::{read_volatile,null_mut}; +use core::ptr::{null_mut, read_volatile}; #[no_mangle] fn main() -> i32 { @@ -12,7 +12,7 @@ fn main() -> i32 { println!("Into Test load_fault, we will insert an invalid load operation..."); println!("Kernel should kill this application!"); unsafe { - let _i=read_volatile(null_mut::()); + let _i = read_volatile(null_mut::()); } 0 -} \ No newline at end of file +} diff --git a/user/src/bin/05store_fault.rs b/user/src/bin/05store_fault.rs index d94f337..0c86200 100644 --- a/user/src/bin/05store_fault.rs +++ b/user/src/bin/05store_fault.rs @@ -12,7 +12,7 @@ fn main() -> i32 { println!("Into Test store_fault, we will insert an invalid store operation..."); println!("Kernel should kill this application!"); unsafe { - null_mut::().write_volatile(1); + null_mut::().write_volatile(1); } 0 -} \ No newline at end of file +} From 0fcea5a05b6577a46d624a3267b9a1df3b38075e Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Tue, 21 Jun 2022 23:45:12 +0800 Subject: [PATCH 52/87] sbi spec uses a6, a7 as sbicall id, so we need to set a6 to 0 --- os/src/sbi.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/os/src/sbi.rs b/os/src/sbi.rs index 35243d9..f696cf6 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -18,6 +18,7 @@ fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize { let mut ret; unsafe { asm!( + "li x16, 0", "ecall", inlateout("x10") arg0 => ret, in("x11") arg1, From d7815c6297ec19e4a9b762bb30e4915bf7f5cb33 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Wed, 22 Jun 2022 00:43:08 +0800 Subject: [PATCH 53/87] update rustsbi commit-id 74c103bc0f0c1931074c6edcd65a83fdff3cec33 in git@github.com:YdrMaster/rustsbi-qemu.git --- bootloader/rustsbi-qemu.bin | Bin 161528 -> 43568 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index ddbf336ac1071bdfed06c14e22430dcea70069d8..9822f54e58daad6d5fa47ac4b9b51061dbad1a4a 100755 GIT binary patch literal 43568 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∓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 Date: Thu, 20 Oct 2022 11:51:02 +0800 Subject: [PATCH 60/87] build: update toolchain Signed-off-by: YdrMaster --- .github/workflows/doc-and-test.yml | 7 ++++--- rust-toolchain.toml | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/doc-and-test.yml b/.github/workflows/doc-and-test.yml index 1c4199e..d1fcebb 100644 --- a/.github/workflows/doc-and-test.yml +++ b/.github/workflows/doc-and-test.yml @@ -4,6 +4,7 @@ on: [push] env: CARGO_TERM_COLOR: always + rust_toolchain: nightly-2022-08-05 jobs: build-doc: @@ -13,7 +14,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: nightly-2022-07-20 + toolchain: ${{ env.rust_toolchain }} components: rust-src, llvm-tools-preview target: riscv64gc-unknown-none-elf - name: Build doc @@ -32,7 +33,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: nightly-2022-07-20 + toolchain: ${{ env.rust_toolchain }} components: rust-src, llvm-tools-preview target: riscv64gc-unknown-none-elf - uses: actions-rs/install@v0.1 @@ -66,4 +67,4 @@ jobs: timeout-minutes: 10 - name: Build for k210 - run: cd os && make build BOARD=k210 \ No newline at end of file + run: cd os && make build BOARD=k210 diff --git a/rust-toolchain.toml b/rust-toolchain.toml index c56a59e..553747b 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,5 @@ [toolchain] profile = "minimal" -channel = "nightly-2022-07-20" +# use the nightly version of the last stable toolchain, see +channel = "nightly-2022-08-05" components = ["rust-src", "llvm-tools-preview", "rustfmt", "clippy"] From 87a014df80b0678d0e9f897ccc4f85d0ed5f18e6 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 29 Nov 2022 09:41:56 +0800 Subject: [PATCH 61/87] in entry.asm: boot_stack->boot_stack_lower_bound --- os/src/entry.asm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/os/src/entry.asm b/os/src/entry.asm index 9d2ff71..3a9990f 100644 --- a/os/src/entry.asm +++ b/os/src/entry.asm @@ -5,8 +5,8 @@ _start: call rust_main .section .bss.stack - .globl boot_stack -boot_stack: + .globl boot_stack_lower_bound +boot_stack_lower_bound: .space 4096 * 16 .globl boot_stack_top boot_stack_top: \ No newline at end of file From 6915bd2e63ea40f86852152a54204074ee7b9701 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 13 Dec 2022 22:48:37 +0800 Subject: [PATCH 62/87] Remove K210 support. --- bootloader/rustsbi-k210.bin | Bin 94904 -> 0 bytes os/Makefile | 36 +++++------------------------------- os/src/main.rs | 4 ---- os/src/sbi.rs | 11 +---------- os/src/task/mod.rs | 6 ------ 5 files changed, 6 insertions(+), 51 deletions(-) delete mode 100755 bootloader/rustsbi-k210.bin diff --git a/bootloader/rustsbi-k210.bin b/bootloader/rustsbi-k210.bin deleted file mode 100755 index c53ed1fc198816f8d4a0cfec958eaae3f2976cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94904 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 diff --git a/os/Makefile b/os/Makefile index d56bf6b..21b9614 100644 --- a/os/Makefile +++ b/os/Makefile @@ -6,10 +6,9 @@ KERNEL_BIN := $(KERNEL_ELF).bin DISASM_TMP := target/$(TARGET)/$(MODE)/asm # BOARD -BOARD ?= qemu +BOARD := qemu SBI ?= rustsbi BOOTLOADER := ../bootloader/$(SBI)-$(BOARD).bin -K210_BOOTLOADER_SIZE := 131072 # Building mode argument ifeq ($(MODE), release) @@ -17,15 +16,7 @@ ifeq ($(MODE), release) endif # KERNEL ENTRY -ifeq ($(BOARD), qemu) - KERNEL_ENTRY_PA := 0x80200000 -else ifeq ($(BOARD), k210) - KERNEL_ENTRY_PA := 0x80020000 -endif - -# Run K210 -K210-SERIALPORT = /dev/ttyUSB0 -K210-BURNER = ../tools/kflash.py +KERNEL_ENTRY_PA := 0x80200000 # Binutils OBJDUMP := rust-objdump --arch-name=riscv64 @@ -34,14 +25,7 @@ OBJCOPY := rust-objcopy --binary-architecture=riscv64 # Disassembly DISASM ?= -x -build: env switch-check $(KERNEL_BIN) - -switch-check: -ifeq ($(BOARD), qemu) - (which last-qemu) || (rm -f last-k210 && touch last-qemu && make clean) -else ifeq ($(BOARD), k210) - (which last-k210) || (rm -f last-qemu && touch last-k210 && make clean) -endif +build: env $(KERNEL_BIN) env: (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) @@ -56,7 +40,7 @@ kernel: @cd ../user && make build @echo Platform: $(BOARD) @cp src/linker-$(BOARD).ld src/linker.ld - @cargo build $(MODE_ARG) --features "board_$(BOARD)" + @cargo build $(MODE_ARG) @rm src/linker.ld clean: @@ -75,21 +59,11 @@ run: run-inner run-inner: build -ifeq ($(BOARD),qemu) @qemu-system-riscv64 \ -machine virt \ -nographic \ -bios $(BOOTLOADER) \ -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) -else - (which $(K210-BURNER)) || (cd .. && git clone https://github.com/sipeed/kflash.py.git && mv kflash.py tools) - @cp $(BOOTLOADER) $(BOOTLOADER).copy - @dd if=$(KERNEL_BIN) of=$(BOOTLOADER).copy bs=$(K210_BOOTLOADER_SIZE) seek=1 - @mv $(BOOTLOADER).copy $(KERNEL_BIN) - @sudo chmod 777 $(K210-SERIALPORT) - python3 $(K210-BURNER) -p $(K210-SERIALPORT) -b 1500000 $(KERNEL_BIN) - python3 -m serial.tools.miniterm --eol LF --dtr 0 --rts 0 --filter direct $(K210-SERIALPORT) 115200 -endif debug: build @tmux new-session -d \ @@ -103,4 +77,4 @@ gdbserver: build gdbclient: @riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234' -.PHONY: build env kernel clean disasm disasm-vim run-inner switch-check gdbserver gdbclient +.PHONY: build env kernel clean disasm disasm-vim run-inner gdbserver gdbclient diff --git a/os/src/main.rs b/os/src/main.rs index 6494e1d..8016590 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -27,10 +27,6 @@ extern crate alloc; #[macro_use] extern crate bitflags; -#[cfg(feature = "board_k210")] -#[path = "boards/k210.rs"] -mod board; -#[cfg(not(any(feature = "board_k210")))] #[path = "boards/qemu.rs"] mod board; diff --git a/os/src/sbi.rs b/os/src/sbi.rs index bd1a3e3..cdee65b 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -5,14 +5,13 @@ use core::arch::asm; const SBI_SET_TIMER: usize = 0; const SBI_CONSOLE_PUTCHAR: usize = 1; -#[cfg(feature = "board_k210")] -const SBI_SHUTDOWN: usize = 8; // const SBI_CONSOLE_GETCHAR: usize = 2; // const SBI_CLEAR_IPI: usize = 3; // const SBI_SEND_IPI: usize = 4; // const SBI_REMOTE_FENCE_I: usize = 5; // const SBI_REMOTE_SFENCE_VMA: usize = 6; // const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7; +// const SBI_SHUTDOWN: usize = 8; #[inline(always)] /// general sbi call @@ -46,16 +45,8 @@ pub fn console_putchar(c: usize) { // sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0) // } -#[cfg(feature = "board_qemu")] use crate::board::QEMUExit; /// use sbi call to shutdown the kernel pub fn shutdown() -> ! { - #[cfg(feature = "board_k210")] - sbi_call(SBI_SHUTDOWN, 0, 0, 0); - - #[cfg(feature = "board_qemu")] crate::board::QEMU_EXIT_HANDLE.exit_failure(); - - #[cfg(feature = "board_k210")] - panic!("It should shutdown!"); } diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 91695d4..e96e857 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -144,14 +144,8 @@ impl TaskManager { // go back to user mode } else { println!("All applications completed!"); - - #[cfg(feature = "board_qemu")] use crate::board::QEMUExit; - #[cfg(feature = "board_qemu")] crate::board::QEMU_EXIT_HANDLE.exit_success(); - - #[cfg(feature = "board_k210")] - panic!("All applications completed!"); } } } From f0da2f412b47736fb2ca54e5b50a6df77152e008 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 14 Dec 2022 00:06:13 +0800 Subject: [PATCH 63/87] Remove K210 support. --- os/Cargo.toml | 4 ---- os/src/boards/k210.rs | 20 ---------------- os/src/linker-k210.ld | 53 ------------------------------------------- 3 files changed, 77 deletions(-) delete mode 100644 os/src/boards/k210.rs delete mode 100644 os/src/linker-k210.ld diff --git a/os/Cargo.toml b/os/Cargo.toml index d3f3f5b..6ff9866 100644 --- a/os/Cargo.toml +++ b/os/Cargo.toml @@ -13,9 +13,5 @@ buddy_system_allocator = "0.6" bitflags = "1.2.1" xmas-elf = "0.7.0" -[features] -board_qemu = [] -board_k210 = [] - [profile.release] debug = true diff --git a/os/src/boards/k210.rs b/os/src/boards/k210.rs deleted file mode 100644 index 2f8168c..0000000 --- a/os/src/boards/k210.rs +++ /dev/null @@ -1,20 +0,0 @@ -pub const CLOCK_FREQ: usize = 403000000 / 62; - -pub const MMIO: &[(usize, usize)] = &[ - // we don't need clint in S priv when running - // we only need claim/complete for target0 after initializing - (0x0C00_0000, 0x3000), /* PLIC */ - (0x0C20_0000, 0x1000), /* PLIC */ - (0x3800_0000, 0x1000), /* UARTHS */ - (0x3800_1000, 0x1000), /* GPIOHS */ - (0x5020_0000, 0x1000), /* GPIO */ - (0x5024_0000, 0x1000), /* SPI_SLAVE */ - (0x502B_0000, 0x1000), /* FPIOA */ - (0x502D_0000, 0x1000), /* TIMER0 */ - (0x502E_0000, 0x1000), /* TIMER1 */ - (0x502F_0000, 0x1000), /* TIMER2 */ - (0x5044_0000, 0x1000), /* SYSCTL */ - (0x5200_0000, 0x1000), /* SPI0 */ - (0x5300_0000, 0x1000), /* SPI1 */ - (0x5400_0000, 0x1000), /* SPI2 */ -]; \ No newline at end of file diff --git a/os/src/linker-k210.ld b/os/src/linker-k210.ld deleted file mode 100644 index eaa2c9f..0000000 --- a/os/src/linker-k210.ld +++ /dev/null @@ -1,53 +0,0 @@ -OUTPUT_ARCH(riscv) -ENTRY(_start) -BASE_ADDRESS = 0x80020000; - -SECTIONS -{ - . = BASE_ADDRESS; - skernel = .; - - stext = .; - .text : { - *(.text.entry) - . = ALIGN(4K); - strampoline = .; - *(.text.trampoline); - . = ALIGN(4K); - *(.text .text.*) - } - - . = ALIGN(4K); - etext = .; - srodata = .; - .rodata : { - *(.rodata .rodata.*) - *(.srodata .srodata.*) - } - - . = ALIGN(4K); - erodata = .; - sdata = .; - .data : { - *(.data .data.*) - *(.sdata .sdata.*) - } - - . = ALIGN(4K); - edata = .; - sbss_with_stack = .; - .bss : { - *(.bss.stack) - sbss = .; - *(.bss .bss.*) - *(.sbss .sbss.*) - } - - . = ALIGN(4K); - ebss = .; - ekernel = .; - - /DISCARD/ : { - *(.eh_frame) - } -} \ No newline at end of file From 0692fe93d8e7d16fd0797acf8fabaa9b5202e19a Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 14 Dec 2022 00:33:33 +0800 Subject: [PATCH 64/87] Workflow: Remove k210 support. --- .github/workflows/doc-and-test.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/doc-and-test.yml b/.github/workflows/doc-and-test.yml index d1fcebb..49d9eed 100644 --- a/.github/workflows/doc-and-test.yml +++ b/.github/workflows/doc-and-test.yml @@ -18,7 +18,7 @@ jobs: components: rust-src, llvm-tools-preview target: riscv64gc-unknown-none-elf - name: Build doc - run: cd os && cargo doc --no-deps --verbose --features "board_qemu" + run: cd os && cargo doc --no-deps --verbose - name: Deploy to Github Pages uses: peaceiris/actions-gh-pages@v3 with: @@ -65,6 +65,4 @@ jobs: - name: Run usertests run: cd os && make run TEST=1 timeout-minutes: 10 - - - name: Build for k210 - run: cd os && make build BOARD=k210 + From b6f4c1aa56c62793e7954e076f57a9a5c03c484d Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 21 Dec 2022 21:21:57 +0800 Subject: [PATCH 65/87] user add fp support --- user/.cargo/config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/.cargo/config b/user/.cargo/config index e5ded8a..334d01e 100644 --- a/user/.cargo/config +++ b/user/.cargo/config @@ -3,5 +3,5 @@ target = "riscv64gc-unknown-none-elf" [target.riscv64gc-unknown-none-elf] rustflags = [ - "-Clink-args=-Tsrc/linker.ld", + "-Clink-args=-Tsrc/linker.ld", "-Cforce-frame-pointers=yes" ] From b3ea15a1618c28fff0a3201a35bd27fa336c926e Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Sat, 31 Dec 2022 11:09:23 +0800 Subject: [PATCH 66/87] fix for rust-analyzer warning --- .vscode/settings.json | 6 +++--- user/Cargo.toml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index bf81ab5..6a40655 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,7 +7,7 @@ // For Rust Analyzer plugin users: "rust-analyzer.cargo.target": "riscv64gc-unknown-none-elf", "rust-analyzer.checkOnSave.allTargets": false, - "rust-analyzer.cargo.features": [ - "board_qemu" - ] + // "rust-analyzer.cargo.features": [ + // "board_qemu" + // ] } \ No newline at end of file diff --git a/user/Cargo.toml b/user/Cargo.toml index 8edd701..d3384a7 100644 --- a/user/Cargo.toml +++ b/user/Cargo.toml @@ -11,6 +11,6 @@ edition = "2018" [profile.release] debug = true -[features] -board_qemu = [] -board_k210 = [] \ No newline at end of file +# [features] +# board_qemu = [] +# board_k210 = [] \ No newline at end of file From aaa42cfeb2ab049becb1b38ad5eb48f899d4fa44 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 1 Feb 2023 21:11:09 +0800 Subject: [PATCH 67/87] Remove unnecessary output. --- user/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user/Makefile b/user/Makefile index 5e0f87c..9ec3185 100644 --- a/user/Makefile +++ b/user/Makefile @@ -13,7 +13,7 @@ elf: $(APPS) @cargo build --release binary: elf - $(foreach elf, $(ELFS), $(OBJCOPY) $(elf) --strip-all -O binary $(patsubst $(TARGET_DIR)/%, $(TARGET_DIR)/%.bin, $(elf));) + @$(foreach elf, $(ELFS), $(OBJCOPY) $(elf) --strip-all -O binary $(patsubst $(TARGET_DIR)/%, $(TARGET_DIR)/%.bin, $(elf));) build: binary From f45e14bfebfa46360441593d7b0d6e864b9e7362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=AD=E6=B5=A9=E6=89=AC?= Date: Sat, 4 Feb 2023 22:15:17 +0800 Subject: [PATCH 68/87] add sbrk and a usertest --- os/src/mm/memory_set.rs | 50 +++++++++++++++++++++++++++++++++++++++ os/src/syscall/mod.rs | 2 ++ os/src/syscall/process.rs | 11 ++++++++- os/src/task/mod.rs | 12 ++++++++++ os/src/task/task.rs | 23 ++++++++++++++++++ user/src/bin/sbrk_test.rs | 47 ++++++++++++++++++++++++++++++++++++ user/src/lib.rs | 4 ++++ user/src/syscall.rs | 5 ++++ 8 files changed, 153 insertions(+), 1 deletion(-) create mode 100644 user/src/bin/sbrk_test.rs diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index f947154..93e2f43 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -204,6 +204,16 @@ impl MemorySet { ), None, ); + // used in sbrk + memory_set.push( + MapArea::new( + user_stack_top.into(), + user_stack_top.into(), + MapType::Framed, + MapPermission::R | MapPermission::W | MapPermission::U, + ), + None, + ); // map TrapContext memory_set.push( MapArea::new( @@ -230,6 +240,32 @@ impl MemorySet { pub fn translate(&self, vpn: VirtPageNum) -> Option { self.page_table.translate(vpn) } + #[allow(unused)] + pub fn shrink_to(&mut self, start: VirtAddr, end: VirtAddr, new_end: VirtAddr) -> bool { + if let Some(area) = self + .areas + .iter_mut() + .find(|area| area.vpn_range.get_start() == start.floor() + && area.vpn_range.get_end() == end.ceil()) { + area.shrink_to(&mut self.page_table, new_end.ceil()); + true + } else { + false + } + } + #[allow(unused)] + pub fn append_to(&mut self, start: VirtAddr, end: VirtAddr, new_end: VirtAddr) -> bool { + if let Some(area) = self + .areas + .iter_mut() + .find(|area| area.vpn_range.get_start() == start.floor() + && area.vpn_range.get_end() == end.ceil()) { + area.append_to(&mut self.page_table, new_end.ceil()); + true + } else { + false + } + } } /// map area structure, controls a contiguous piece of virtual memory @@ -289,6 +325,20 @@ impl MapArea { self.unmap_one(page_table, vpn); } } + #[allow(unused)] + pub fn shrink_to(&mut self, page_table: &mut PageTable, new_end: VirtPageNum) { + for vpn in VPNRange::new(new_end, self.vpn_range.get_end()) { + self.unmap_one(page_table, vpn) + } + self.vpn_range = VPNRange::new(self.vpn_range.get_start(), new_end); + } + #[allow(unused)] + pub fn append_to(&mut self, page_table: &mut PageTable, new_end: VirtPageNum) { + for vpn in VPNRange::new(self.vpn_range.get_end(), new_end) { + self.map_one(page_table, vpn) + } + self.vpn_range = VPNRange::new(self.vpn_range.get_start(), new_end); + } /// data: start-aligned but maybe with shorter length /// assume that all frames were cleared before pub fn copy_data(&mut self, page_table: &mut PageTable, data: &[u8]) { diff --git a/os/src/syscall/mod.rs b/os/src/syscall/mod.rs index ee52f5b..e5b4ff0 100644 --- a/os/src/syscall/mod.rs +++ b/os/src/syscall/mod.rs @@ -14,6 +14,7 @@ const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; const SYSCALL_GET_TIME: usize = 169; +const SYSCALL_SBRK: usize = 214; mod fs; mod process; @@ -28,6 +29,7 @@ pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize { SYSCALL_EXIT => sys_exit(args[0] as i32), SYSCALL_YIELD => sys_yield(), SYSCALL_GET_TIME => sys_get_time(), + SYSCALL_SBRK => sys_sbrk(args[0] as i32), _ => panic!("Unsupported syscall_id: {}", syscall_id), } } diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index ec469bd..a39914a 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -1,6 +1,6 @@ //! Process management syscalls -use crate::task::{exit_current_and_run_next, suspend_current_and_run_next}; +use crate::task::{exit_current_and_run_next, suspend_current_and_run_next, change_program_brk}; use crate::timer::get_time_ms; /// task exits and submit an exit code @@ -20,3 +20,12 @@ pub fn sys_yield() -> isize { pub fn sys_get_time() -> isize { get_time_ms() as isize } + +/// change data segment size +pub fn sys_sbrk(size: i32) -> isize { + if let Some(old_brk) = change_program_brk(size) { + old_brk as isize + } else { + -1 + } +} \ No newline at end of file diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index e96e857..bba26a1 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -126,6 +126,13 @@ impl TaskManager { inner.tasks[inner.current_task].get_trap_cx() } + /// Change the current 'Running' task's program break + pub fn change_current_program_brk(&self, size: i32) -> Option { + let mut inner = self.inner.exclusive_access(); + let cur = inner.current_task; + inner.tasks[cur].change_program_brk(size) + } + /// Switch current `Running` task to the task we have found, /// or there is no `Ready` task and we can exit with all applications completed fn run_next_task(&self) { @@ -192,3 +199,8 @@ pub fn current_user_token() -> usize { pub fn current_trap_cx() -> &'static mut TrapContext { TASK_MANAGER.get_current_trap_cx() } + + /// Change the current 'Running' task's program break + pub fn change_program_brk(size: i32) -> Option { + TASK_MANAGER.change_current_program_brk(size) + } diff --git a/os/src/task/task.rs b/os/src/task/task.rs index 6588ad8..64e9f67 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -11,6 +11,8 @@ pub struct TaskControlBlock { pub memory_set: MemorySet, pub trap_cx_ppn: PhysPageNum, pub base_size: usize, + pub heap_bottom: usize, + pub program_brk: usize, } impl TaskControlBlock { @@ -41,6 +43,8 @@ impl TaskControlBlock { memory_set, trap_cx_ppn, base_size: user_sp, + heap_bottom: user_sp, + program_brk: user_sp, }; // prepare TrapContext in user space let trap_cx = task_control_block.get_trap_cx(); @@ -53,6 +57,25 @@ impl TaskControlBlock { ); task_control_block } + /// change the location of the program break. return None if failed. + pub fn change_program_brk(&mut self, size: i32) -> Option { + let old_break = self.program_brk; + let new_brk = self.program_brk as isize + size as isize; + if new_brk < self.heap_bottom as isize { + return None + } + let result = if size < 0 { + self.memory_set.shrink_to(VirtAddr(self.heap_bottom), VirtAddr(self.program_brk), VirtAddr(new_brk as usize)) + } else { + self.memory_set.append_to(VirtAddr(self.heap_bottom), VirtAddr(self.program_brk), VirtAddr(new_brk as usize)) + }; + if result { + self.program_brk = new_brk as usize; + Some(old_break) + } else { + None + } + } } #[derive(Copy, Clone, PartialEq)] diff --git a/user/src/bin/sbrk_test.rs b/user/src/bin/sbrk_test.rs new file mode 100644 index 0000000..3dfe4f4 --- /dev/null +++ b/user/src/bin/sbrk_test.rs @@ -0,0 +1,47 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::sbrk; +use core::ptr::slice_from_raw_parts_mut; + +#[no_mangle] +fn main() -> i32 { + println!("Test sbrk start."); + const PAGE_SIZE: usize = 0x1000; + let origin_brk = sbrk(0); + println!("origin break point = {:x}", origin_brk); + let brk = sbrk(PAGE_SIZE as i32); + if brk != origin_brk { + return -1 + } + let brk = sbrk(0); + println!("one page allocated, break point = {:x}", brk); + println!("try write to allocated page"); + let new_page = unsafe { &mut *slice_from_raw_parts_mut(origin_brk as usize as *const u8 as *mut u8, PAGE_SIZE) }; + for pos in 0..PAGE_SIZE { + new_page[pos] = 1; + } + println!("write ok"); + sbrk(PAGE_SIZE as i32 * 10); + let brk = sbrk(0); + println!("10 page allocated, break point = {:x}", brk); + sbrk(PAGE_SIZE as i32 * -11); + let brk = sbrk(0); + println!("11 page DEALLOCATED, break point = {:x}", brk); + println!("try DEALLOCATED more one page, should be failed."); + let ret = sbrk(PAGE_SIZE as i32 * -1); + if ret != -1 { + println!("Test sbrk failed!"); + return -1 + } + println!("Test sbrk almost OK!"); + println!("now write to deallocated page, should cause page fault."); + for pos in 0..PAGE_SIZE { + new_page[pos] = 2; + } + println!("Test sbrk OK!"); + 0 +} diff --git a/user/src/lib.rs b/user/src/lib.rs index 2e99ba4..bd59ab7 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -34,3 +34,7 @@ pub fn yield_() -> isize { pub fn get_time() -> isize { sys_get_time() } + +pub fn sbrk(size: i32) -> isize { + sys_sbrk(size) +} diff --git a/user/src/syscall.rs b/user/src/syscall.rs index b009569..73f936b 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -4,6 +4,7 @@ const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; const SYSCALL_GET_TIME: usize = 169; +const SYSCALL_SBRK: usize = 214; fn syscall(id: usize, args: [usize; 3]) -> isize { let mut ret: isize; @@ -34,3 +35,7 @@ pub fn sys_yield() -> isize { pub fn sys_get_time() -> isize { syscall(SYSCALL_GET_TIME, [0, 0, 0]) } + +pub fn sys_sbrk(size: i32) -> isize { + syscall(SYSCALL_SBRK, [size as usize, 0, 0]) +} \ No newline at end of file From 76ac3b9886decedee2c28bcba4ba98d20186da06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=97=AD=E6=B5=A9=E6=89=AC?= Date: Sat, 4 Feb 2023 22:43:58 +0800 Subject: [PATCH 69/87] fmt & fixed --- os/src/mm/memory_set.rs | 20 ++++++++++---------- os/src/sbi.rs | 1 - os/src/syscall/process.rs | 4 ++-- os/src/task/mod.rs | 8 ++++---- os/src/task/task.rs | 8 +++++--- user/src/bin/sbrk_test.rs | 1 - 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index 93e2f43..a6a0fdb 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -241,27 +241,27 @@ impl MemorySet { self.page_table.translate(vpn) } #[allow(unused)] - pub fn shrink_to(&mut self, start: VirtAddr, end: VirtAddr, new_end: VirtAddr) -> bool { + pub fn shrink_to(&mut self, start: VirtAddr, new_end: VirtAddr) -> bool { if let Some(area) = self .areas .iter_mut() - .find(|area| area.vpn_range.get_start() == start.floor() - && area.vpn_range.get_end() == end.ceil()) { - area.shrink_to(&mut self.page_table, new_end.ceil()); - true + .find(|area| area.vpn_range.get_start() == start.floor()) + { + area.shrink_to(&mut self.page_table, new_end.ceil()); + true } else { false } } #[allow(unused)] - pub fn append_to(&mut self, start: VirtAddr, end: VirtAddr, new_end: VirtAddr) -> bool { + pub fn append_to(&mut self, start: VirtAddr, new_end: VirtAddr) -> bool { if let Some(area) = self .areas .iter_mut() - .find(|area| area.vpn_range.get_start() == start.floor() - && area.vpn_range.get_end() == end.ceil()) { - area.append_to(&mut self.page_table, new_end.ceil()); - true + .find(|area| area.vpn_range.get_start() == start.floor()) + { + area.append_to(&mut self.page_table, new_end.ceil()); + true } else { false } diff --git a/os/src/sbi.rs b/os/src/sbi.rs index cdee65b..269581f 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -44,7 +44,6 @@ pub fn console_putchar(c: usize) { // pub fn console_getchar() -> usize { // sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0) // } - use crate::board::QEMUExit; /// use sbi call to shutdown the kernel pub fn shutdown() -> ! { diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index a39914a..d302373 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -1,6 +1,6 @@ //! Process management syscalls -use crate::task::{exit_current_and_run_next, suspend_current_and_run_next, change_program_brk}; +use crate::task::{change_program_brk, exit_current_and_run_next, suspend_current_and_run_next}; use crate::timer::get_time_ms; /// task exits and submit an exit code @@ -28,4 +28,4 @@ pub fn sys_sbrk(size: i32) -> isize { } else { -1 } -} \ No newline at end of file +} diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index bba26a1..dd27422 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -126,7 +126,7 @@ impl TaskManager { inner.tasks[inner.current_task].get_trap_cx() } - /// Change the current 'Running' task's program break + /// Change the current 'Running' task's program break pub fn change_current_program_brk(&self, size: i32) -> Option { let mut inner = self.inner.exclusive_access(); let cur = inner.current_task; @@ -200,7 +200,7 @@ pub fn current_trap_cx() -> &'static mut TrapContext { TASK_MANAGER.get_current_trap_cx() } - /// Change the current 'Running' task's program break - pub fn change_program_brk(size: i32) -> Option { +/// Change the current 'Running' task's program break +pub fn change_program_brk(size: i32) -> Option { TASK_MANAGER.change_current_program_brk(size) - } +} diff --git a/os/src/task/task.rs b/os/src/task/task.rs index 64e9f67..6c87ddd 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -62,12 +62,14 @@ impl TaskControlBlock { let old_break = self.program_brk; let new_brk = self.program_brk as isize + size as isize; if new_brk < self.heap_bottom as isize { - return None + return None; } let result = if size < 0 { - self.memory_set.shrink_to(VirtAddr(self.heap_bottom), VirtAddr(self.program_brk), VirtAddr(new_brk as usize)) + self.memory_set + .shrink_to(VirtAddr(self.heap_bottom), VirtAddr(new_brk as usize)) } else { - self.memory_set.append_to(VirtAddr(self.heap_bottom), VirtAddr(self.program_brk), VirtAddr(new_brk as usize)) + self.memory_set + .append_to(VirtAddr(self.heap_bottom), VirtAddr(new_brk as usize)) }; if result { self.program_brk = new_brk as usize; diff --git a/user/src/bin/sbrk_test.rs b/user/src/bin/sbrk_test.rs index 3dfe4f4..af21bd1 100644 --- a/user/src/bin/sbrk_test.rs +++ b/user/src/bin/sbrk_test.rs @@ -42,6 +42,5 @@ fn main() -> i32 { for pos in 0..PAGE_SIZE { new_page[pos] = 2; } - println!("Test sbrk OK!"); 0 } From 0ae57e1779696ebafa15543d9cd6d859d0b6c38a Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 28 Mar 2023 00:03:29 +0800 Subject: [PATCH 70/87] Using sbi-rt instead of asm && update rustsbi-qemu to latest rustsbi-qemu version: a4f0bbe44d9f2f1069a9e5becd09f291e542852c --- bootloader/rustsbi-qemu.bin | Bin 38920 -> 32328 bytes os/Cargo.toml | 2 + os/src/boards/qemu.rs | 80 ------------------------------------ os/src/lang_items.rs | 2 +- os/src/sbi.rs | 54 ++++++------------------ 5 files changed, 16 insertions(+), 122 deletions(-) diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index 022c7f27b18efadbfa80301fb467421c52f7cd5e..f9015b81a17ef461aec196971b2dec52957bf51f 100755 GIT binary patch literal 32328 zcmdUX3s_TEw(veVIfsBjLqm9oI*|yYxf+o`c(olsPpq^$))qVMv{T|CC>D@cRN8tk z5KaIqC{2M{YcEozm}wc60Xuz4TWsx2z3tqAPJ5@lAP>P&2U|dFRsOZlJ^@5+XXgI* z`~E)~_S)~Y*Is+Awb$M|wOWME7HT7E5f0-$wy4l1gdWRr^eSztoad0K*Kjp_Oqr=l z_q8f4hT-rb(|P?stra1sa43EuQYmWJ;+kF6R9{1i#Zp}84|!_F`g&~|lyUUG;lB~$ z9%tK}%n{ihR2wh$w*;Z$LN!Hwth>`ELKj^Wp^K=B(1p#9)ZMwvsEbZ8>LTtp>bnfR z{sL}|IqI}UqJ7noNX-t-it}qlIeUK-%J@<%BX{TQj@-TUr+u@n-^X>dBDHN~R_#t1 za_&s}8$XLN`3o{!f2bBhryzX6Up|C%M;LT~>A7&|x_>$3dM^6&Vw5D*sxW3J^6ZhG zvW0=QVK|oZKB+JCI&JOaxNl+AZyFe1fx`m6Cn6D9WkN?$g4@jhwa`(kjz7Z&O}UUGNa{t5?mGd%Fhwlf}03T<4vPC)G4m8-nM& zZ(h@|m*d!&>uOTBp-&O0A0*|3mHG=(`&SK@^dp{}{+g@LS^coA>4LXehuUTqkGQVr z<|>lx?at-{?p6*PHrviZ)-@Mb|g3?+iUUd0RmEU-f^}Up9h6SZ#L-}=9~`(+cV~C7F6_VpT{L{dJ`07GLid|>(E#0f zAQZ|ktYUO`9$g5n>JON85ufRyq#kN4)WaTxCo>>uChi9J_O3*A6CL?+AFJr#!d9dy} zuMr>}QSHaeIeuQt0+>(A9$8N1g`!yXR(2>)#m45TP#li8ZQbV>on@;O()KynBgvIG z&$B2`rHRW6L9tORHNL}?QxU}~(ESy8Dke6HQE2m2A!4qYRSh})9Mm;GTg7n}%}N$a zs5?SXo+?r-;nc9QYnsf8*SKQMYB6`mgKEt%ou}gBYKc^sNy5Tm5~A+=%yR{kbRdaH&5&CC zFpPG_$au)AsN{Rlz8M`6*B&Ok6yN!qNX$n9T54iu+rCpf`o`5JKg8Pw8UK7Fjn~Mn zOY~F;*L|(Zba|#OfA&&$e!K&(g!k^Fp){ z{BkCPSA}d$wAt@sD1Pn^ihuDwhG5n82T{(3an#{=qmuK`K1Pu9ZHHzs94~*(*OTL! z*8&naKH#<3K#otZR;#P;M72Omkc*t5T4g!TASz9eIVi4*t2*G#@g=XuLamBd*LGSvuX-}f#x1u@lf-s`nHqLSA=5X5kiJpGy>DtXm|K}_^dplrX@~Fu%NGOL&i1u=49LQ3pVX&Dhe;o z+rvhH#EPIep`jr8t_J7GwOLJVyQroyLO0IYbaioHQ&({xk*IyIHeGOC+7-|Q+JdBT zZfr|~5XhUUmmk&*c{UTtFJYO^2utYUw+vEwzwlm~tS zx>%Hm@vqjWQKuA^%)Op{!8V0O;FN6)*Bse_G!?h1$4K=~G)}K~Uz_I-)bn)rcW8P& zWxMwe)bn=tcVK$G``Ueepq`Jrzn7-hQ=ZcNKs}ASzZa(0yYE!s57Y~E_g6c;p7N8q zVm%|<5wDJ9 z+6!5IQ3y^WGnO*b)>y<9BtO=uW=arALkqC(5m!2rqk3z4qqD;s>bDK5tLMs`$r@Qf z@@L(o?1^WpK$~HSBE@&=!WfijQ>_B6T8OdY=XJ_&Tn~v`l^Ytn6&rLB0;AYaZ_T)- zxaFD{IqH@OCmf!@RXf&$O+dFJmq2lWb++UpE^(_0R@UNvU9^Kqv@X23!MgApnQh^y zF1p4;cV~k~UWh8f2egMK!jl92p#}Y+y`KN8f_Dn$J$Zfeubz14iFp~{J^jdzH+Fy| zpI=-Ed`zs|f4iBBNsjhkZ_L4bN^%OHzA*=LBFX7`^2Qv@Ya}PW;Km%xO(dso+l@Jx zUq}wxdSede2$GYM-{ZktR9MtoTgEZvdwkf7Sejv2Fh6+u)Y~8z8CBR|%eNt_OB8pi zSqhboL&2n`mE$T-3f~&+tox-sbp$Ltaiz zq@JSFu)uvM(kiD!tD#JQJe+6@x{#ss0ScI#4VSsCl z>=J}mTvx&N?%b#{fvzMO4~}sU9Zn22Ug)6qw_{PB>!3+q1p@IsZo zSL&lqKj0?ybvBjuqz;#{`AmQ)j4;ZWE2Tk=|%&LzepN!z( zrws$e6Q$}rNGt8jU0t}$)VwaH{-(4#xg@EMGv*>m&Z2in8$!IquZd2kP~xUK*o!Cl zu)V=uM5lf*f_196*EKKwDdXF`?L$=b*XEUIqY!oQ0V!jfi=CgpuL?X3;w1a0qqUDYG&nc zpeN(-=ZG3GesC7qcHOmW=>j1jbJ%(L@~rTZqO(iLuF3)ZTwe;BzIj`xh*dut*?rWF z)z;Bj1=pDq>hcmqI~e3F*TBC1m_X=J_|^{J(}Hza#H$eGezq+COlo3!eL4qT3-u_6 zmYoiQT9%VRj*)Ta$&qnerE|R>ih3wHImqLo1HF3|+bUygoa@bC zhaLBuH4FA?L$=D}EJf{e_^IO9PFc`;2eo5oxtaIrRP0GO?sxqH?Bl-Tf6^(V&vKM= zeJM)7w$;$3O6NnRRL5?oUnz=GjHBjJmJ0GOrM{>%o*hN)W`6tU@?W&UuBxrLa9^?m zwc-8X&`8BTXuqQZc6lhuV;o(n+`uMRepYc`8@5VdL@biw-h1fIF@bxtx*gruhW9GP zh4y|9sXuq1f=c*HJzS}-bs*z54{BeH1Nv+pIEkEWp^U%$XQT_(P@w;yHG4lp;W}*_ z_mz4K?bz*vnvd;vLd__49POyYb(1Ua->u#ng4&7Eky;feyTTxcG017V{1PWF+c7{ z?WkM?m~%4qFWi_Lw~rwa_e~Jq0l33lHedb*VeB8PY~F~mk3!xb?-M*w6<`lEJ$ZS& z{P@(KtHpjEYzq*3-7Ci8$_C=8m3)taN-X8KT}F>W?tU?6iJ5%CJ5r~yGj*~yv`&*=K__;1)+6}?4hS87?x zb2;~+U`KHc#hpn>Os!94EZ`XcjizP}og>mc^qWar;lzI+6qCbVRao}ep3Bj9g^!tr z%QE+*KWE)#(GP{gzTMDUOY~unmk@@CMno}Zvgbp)ZVDzzx}oHGnvqlCIFGsRgP2Go-#$dtP2jf>hH&P1c*L(Ol&;BOpV$v!tB( z{lvLD!DHHZw=*kvPeB25$h3Hoxw3viDAE6Q3n$rpEii|m5BF6^0Jjn^w_tv=rWFIrDW8I= z_Fi4a)j5v-`ZJ-|lfGLsiYdX&#FX$P z{yySMd|-kSGle^#53d$q(q{Wdq)qc_Hzf)W{@^fTC6LS_QoWIqab=@_6&RSFaQoqSx zS8%K#XF@7)Z%FigYjVy~DiN|(NPXN7Iiob_ zvE97NW9_kBhH~``4$fpo$Ax>#SC?~!0f94|hi@;{=xl+Vj7bCj7XAh1K1Blf(8ibS z-n zITksYFd46I0T?L2gn96DTf%8B6yQB9?~h>9P00#&$&MO@_fTklF%>g zQIM0tx+o{e2fnh!r@#CWA#wAD%-~f1-)%k=7gJxp+H$bC_XyDEV}X>8|Jpr2Jw?nJ z%fT3q-`U^?p3|C!;0Y?JS^)NgQ2=FTw`d8Kx>(*9!zM_N_ki^`Z-Pnz7+w$QS`YpX z3}Y$*Jf~%jL?sX255t&B$b(m57*h$_ncXrQQ%R(-FNRwI1`5w>381-?0K+Tpwj`Je4+ue^@gVI=pUd^VRyU2`W`Grz`3SWne_=78RikU^Ta8CZS9==AW7LA#cil zXf+jAdI<5fM?l==URl9kFZTMFk9~9w=FIh{rp_ecBFx*B#tBLXwRn;CR4nipz@ad* zc+6i4iP9_|h+#9Ni~R$PDJ}NTO8n>n{R6xe(t)piFzf&rcs8g-PADCQ+XuLT)cr|| zj8GaV8i?VOkPfgK!<|zo>N7Znp7-kq%2&^AEK~%;-p%AV=Lju5T}rsL%j04%9$m0Q z;2M#c+T1rE53#j=EfbG=8Y ziz#bTn^I?{pDRdu()Fa*Q|F#Y%5Y_PW%ln_g5@ZOt*hj%{$>c-liNkxMbv6tG2l56 zbNjMMZhsc=GfgB5igxER+ej{3Anv<~Ml`u|LkdW4Lpo4aM(V~#AT&3}alU?_q4(pi zHCOFvESkSkU(P?@uau{i<)F>BPxe^LELEJaif3B2ARXtl8fryLE~LoYOtcC5cVlE7 zaz?Jea$ye01&|Q-b~)^hBar>%0u;=wu5fA`sH5UNfR0;p^T99X&(CaG0OuQ72c@wk z=LDKTFA~kU7f#iKf2^H6Xoq_Ubi7u>@hJyG35`N>H52WmRD+ya@QKTZ<4YS@29M&! zhTyUs?{44C*m_Z>!I`4Mx0}CmGMJ7mM<$1)9}fwuVh)1TMF#_*?(BmBKZ1+RmbXuc zWTAbK6RYZdvjR4&(h9An^RWZry^v}-IH$z&BW<|pB5(1XN|%nuC+U(>#xu+vKh};! z7iEhI=#qNSm(b-<$|PO7?7SzVf?li#?;yGDDU-dRV$gLeg=(=R-3uR<*)}4dBi?4XeIVL_@!N$}k%LTKAfC&#gDkYK_pJVoq&HWz)|Tgy7XG zuF|xhgAP!*eXMof?zJ`&BjuatHWCawqDjh0v!;%uv_whkaiynJrrJbO9QRDFeeHMn z4h!^W0jWTBH&<=Q)4{14?N_x!-7}BA?yrU&4Q)SATuA(D*jpIOkTWgjsG(YbI|nT) zIKxy`SzXosES4>4-}|2(ABWpA3tbLL;{DpEJx{|#)Tdw{8o@7lc`b|)&TTpWl~Bv$ zr>ihlUJfETQZB=eW=db2%TNtBU{uA0^UeImc96hG#s6zNTGZ&&^dWLfhiz=Fb_$G& z=i5;cXAp`D@eQE*uF$K75?6^qn&H9|o~J^EdMTE&aBlnF#$b2s-KlwKspqLBjgw_h ztkLul+^zBY^9-jSlJ$~!-`#q!z!xKTJKE!c?F`qD!ls_d$G3?N$lW=0uLp{~yYtA7 zk=DBNl{3vwjx}>Rvn#_%;OJ^iaihH}ZER)3^k`f!VQTGhs_!si(Pg~c5LEW-ebk9!-^;sIJ4 zR}IiwfKuWPLv9K{*>ObxWdl?gw-<5?0ooH632A!(s*Cdms1BebaUqa<1fUafc>E^- z`ZUf5picqnidzJ^T>xRac(E7oX-wRew=pi=@HZ^(6#R{ky9DWLo)`B+nNLMHu>Unk?-JpV_na*F8qK5NNhW(LmV0gk*;Sog5x_ei z@&hlWrm}f!KX{W1Dor({RKs$2snX@Rlo{P!W2-c>{W8n56!bJCwx0YA>>K5ttkLiH zsF^(xKT@%iG1RoYNq9Z6puRx% zo+Pzw%kWvyVq_SqjTCjoOvA8JVHlHQaIY{-ajdJUS4lMu)Q*gggZ%lR>AcGG*ih53 z%IDZv(^c3fUMcQw>QnnA%bctOwGLL8b;{3_#h02!imxqN8GFX*aT47Px5z$I=`R|- zk$o3?{hc#9`DeaOaH`ZadhEImeHMVvlnmd7!ws^}X2Tg$Pt)0^za6^_b>_jz(ztdG zzT2V*#J9=c%!HqHPevr{egOwnq;jUTqfnbssa#SG?lTKMu*k#?pL$WJ` zHbSrqXycM(-6200_!LN;zSk5gRUo0ZmZk>bv~~fU)-C|5hq&eXArB(gL%k%q?t|re z*c?);YcIK%sj|=;!R~&j6rTf>vEYOC$7c!DSCvkG>HGkEup2xc+iedQkkR@%!hQ(; zY`xN+c2e~F8@EA?3IBaFls?0LRry6_v7h>LR>q$_;|12H3`(HpF;cR50DRN65SPj} z_xn-Be$GF$vgXn=@%*5_=cDV4ihdOIxrh~qgmQgBsvJ{q;(+=5u`X4nZ+ZZD5yG#U#$t!{LtcVPC7tGtNq0;| zo@>x7tCP6TFIK3LG!fbfx?ao=)tH5M+`6j*Yin##yBzme)E+7YpWP=nI9hvM1C2<3 z)gL%e&GhYqdyt|%Z`HW<)ZzfcupTs2xa3hltNT+X?Tmg6wlgFPs1zIXR}zsqv(|;S|hd z{H#LRMriMDClqK4r<8BHf)f@X@r>x`+;17u`qe?i``Lg!+`?J;m0CKiQ#K)xJY>SKAKF z+*2pIKj_oF9^$EcE7DVUgqxxJZSoA=>(&{%w`?zm^uOIT(z18CFCAf1Q6&ry!kd+A8;T3UG4g ztP!M>%`;3#ML_0f6~!87CnMwe&*l8A&yga%h%;3;v!BNs*%sLMuxRdk0@L$C>vf5b zu1frPU9{RoK00wXLi|O{7bLHL)Fiwit?U%Qi=?ubF=mq71#3{PXdORr58tKu*-S<4 zJ%D}Lz<1{7>1YL#mC+wDV1s|k@;(E1(jS2@(_;ucdIPcaN5BUj;APQZ7;dh6tObwD zKs5ak@P!BVhzvxR|6c95JZ>yKiRhIci1+Y_R`ykMLLF%nye$3$CekMOuzWC#+f?E9 zBS@Q&uE8*FbFBxoA5MRi3^3FU90;G*zS1LH*$1bCgNvGQ4^9OFk6FMn+=Ek5$nq)- zhX4#c%nn$JdvGecz$1rY4qzC~ynrRR2d4r?5P)GTz%a5q0+ulM@N+z9`xzEd_c;Gt z3}=Kv9&koDHUL_um}(w?&{-_bs4=ex1=SW)#*G_M^Co|aS1T6cvu4kg0d2*F(&(Z6 zfzSzx-hp8}`cGMY&cFgPdW=7Y@#q0(6^8NXfhw~Hf-!Dtk3E1thHU_A0sjFl{gD7L z#vjAg0Au_Iw0l1^Iz9(Jf_uEPSgo?}F!#mVgia~oaSZqgp%b(>Ctxn2lNQqtU`!|I zQ-xtnCzy%Z0YQXLfR`_ZF`b~#c>#eK7pDUJW&s!$0ETw%z;HFLi`)07KRN_(HVf_h zgXHx6Fu>l&!i}HFHR8O*8o{Uknh6?;^W_(yCU}2}=NI4*Xcusr9pFRo20VN*%t3k> z#%~tEdkD`jz*a~v#PbU<#(OQs&wB!IKMYHFt1yi5?!xWQpg(Fs>U-|-FmCdo0$1`r z3NNe3*&-cg2Y61<(-*@SFQ_*!z=PlgGz`En#;Xw12jFCYPspHuhTw%T{Q<^!0gfsR z3jmAbqX}Nnrf&ei7_WHTK85j;_!r=IfY-7;vVaa{pK8z-wC8*^!YFJe~s-Yqc;bYreFW?5;{&tahQT@~$rj6vha!g}xZ=9Ml@(#)II6Bw-#SJ;u zw@A*$-`r)k-H;Rc2FdyGwGi{_x~Z*Mk6G%R9%k5`J0`HQHW>z#DnsvqM1o~?3wKkQ zki(=*g;b{H7#U~hL4VK@YDMEgqAM0QEHd{sl6DULCemD=%~>R_cx5UceJ*LdFDICN zrTeDwt+;e?;Z67*yb(X^A=0qx;E7+@7VWYo_Z3$$KR7 zA^Jx0ERprHcWPeU*o0?E%+)S*dzRY&-EFZG?a#e5;aMWwU3H^psS10RNPkYk*AreM z(IR+TqEv4X@o;mbVobCcq6v zy~7T^ZG+%s{LtQy4P9hKweKRUW@Uv>qdQHgBxxSIL(DrRzi3?%@u5~q?{iczN`$~? zBEI0k@T64y|K`Tf3h^H0;}bWAkoaoxPVrO>-(I-=jUlq1J4t4WJvC_|*X{Z{ZVZW% z`_N(W#t_-*jofr&2yj!&Qwjkw!@^?XQ8zeTfk5KX&_wbXe4}6`WxIjc+kmS(@xr_PLbM$i}rGG zW{KeLI`jtbUX#kYNox#fQup1LMl0Sw&tyrAzJ+~_$J0k%sNkh6>bp^xQ3*g z)njn8TG__Ry7hgs3)N=RCBukLQREeT&DHH1Y`O$@tY^Be$Y(cPD^uvtg!dE5SYOkh z^WpRt6$p=XK*Bs$i)hU$k2++N`tE51r2%p6K&u&l={!|1G=)z**o{3(1fu&Qp(8O(=n{QB& z-WiOkbb|^!IqRm}pptFII$WZonwhr8(B0VN!*(piJckro_!g7ZsMa_-jU^S_% z;$E4^&T+k?+6-reJ3H7aGhf*;yTZ&@cZAy+7VUG4T){7q(^vA}_M;+=b7W+elO2*n zewZEP=B@KnaK6FLgu-iykt=GrM?GkUR|QgiHH-7x7Z-7-4&J_xwQ}Csp}2h?S_bl2 z+{dkP5cB1B#&nx}7=yDzW(Ujhruw2+NXx*feo=q$?JGVs>YyEb5-E$qKvJcJlC_5tG5GBLHsv;BHFv_>S{#>0vpvc9>) z%5HLpuj~x&30p2rrTQ*%?qSXGj{+&>aW*FgER(yX+gDwei9V?{Vb54-t|#$~iK~72 z35A8Kb4w5F5d}yRTMpY7+}&{XiKUaDD^2DaX}| z_0K}&I?t@A9|{Wy6;4a{z0lVAgZKu56J)rWp;rIq$lmHEoW*Bv^2zc%}B|n+qBWR>6p|w(tk)!2O$)@Gb&{ZVvCo?ZX`&bU@}M z)P9Oz1;w8v=Op^8O0rhTk(7lbwGR8Lqmz7Ahv{UnVbt$lYVp5T*?otu@Uxv{2z1Cb9Mu_sc1(MbzS5 zvf)=1O>p+GPzByc5tsOH5L%YQUJJewI+Ap0&4qP?>-!$*{`%^fvHsz6Ll@53XW zS_O9;SL1umGN7f9w0>;Sz4kbUqGR9?!m96mbmBhw1^K;V>AgZKZs z!e66ct8Zo!@W#3F$1bShEpGB4|9y!}SiPnqbQfQ;*NbkSfv8isl#dz8S&M5P9yGFd zCNwj#R8QcY-&0)XyFG&?SB;L6_-1w|;&W^0B98gkDBzwL@L^iP72XrrdY$5q2|S%l z@2y+JfiIQp5zg>l$&{uM-s7>!RAe1qY53gxw_qu1P)~mKck8NgD?LB4UMX4~ToJqr z!5FC5<>>Z`xy&A)v%TCI7<$D#JOHbPD+U)g2|5N6t8=hu&^k*&te#yyU zM}jYfUPu~T)3>g>^XivlUk~d`Xih-Fy}}CbHl6%A^s+pk0zS+3%0HKyl4(Xz9{QOcc(+qnC*3nB{L1?p=~0MV zh&;`NkF)YnZPZ&XQMq7P6b682M$i9v27v7&{d*S0LKWkk)kVDIG2)?>Pq!W z?=LVv+3=({@E6t!__Z0FHHq(1I+6G;#SHIKI^kW)MRh0muG3g}m(m93RwJ~t55G$} z3bPFFQaa&X$~konyi0j@AG}L(_TzUcpP_YrldnwNb#(MmmBPzNZl>zy(fH0LcjjFy&OXfSfs*;bYHPVu$Y@Qi&(syR6}G zA5q^MhTz7UNV6_PYD~U2J$?R<1D(BJb{#8c%zl31WcMedTRjoHWPsPGhTim(bW1tn zXEG{#iznrT-Do9SQLHZagSVCfcsC1aqgRVeEq72tlK=N`-aX^@Pwq+a{J1_%X0^AJ zj6auET*Lb?s(V)Gzr?$C{1RBXf^PAY8UAcHm5eJ>%1={Z3$3S~Wn9&Jth_vpqRjK_ zc3E~=7;`viVkmXp9w{IH!E!@z4-SK+*z?g{W3Eoy{u z$d;XgQQ+~3BYBps5=R2qBlT=f9FZ!8BDhBq++(`;q|h)9+@|-11bM>jHhIrHudC1+ z#cw){mef(JL^$WL3`RvcHLDOlImF{vZcwG+@dvgspj{}gKiiz&kk1zMr<*r7Y-XSE zgf)vTh5Dg}^B)hK?)_ue`m2wO{c3o_P}=#;16jTAl*g8vo(bQn-}SpTI#o%lZNBKZ zmk$bTb9x<-H7g@2wQU8`e4>VTNPPCM<)8uS8S*bdzS>zhPiCDB>{aJUxDTW;RbLxf zQb#XP(#~Ch$m#W|4A-=bP)YFKfub(#ty>3@mgrL?xL(Am-lyohc2WH3tI%%=O6aq5 zyJ&ASXjgkX_LsqLXBnCO3EgdA$yT*1snuW9(Gf~ykJyERg$7~0*imibizN;LF+QO2dlU!1NrQXi zQ%9P@cwV!&R>1GI;E@#9_>2^-;Jx+($9c;HIcdZCg<2RMXX>8I$dXF+sF{mJ_v-Zb z(Qt0Bd{y?v+na^vxI@&HmZ|=XeI6{lhV((P<*g-f!cxwcdr-dFYv4XRXa<4dsxB1$ zVNS*x7=M!EhIIW5?ADl=d+8)}nNH7j8nw03JpK$N3qZEbfJWfWd9Sei+TK-Q4FC~0q9(!~C!@V=gO;i}tKc`;L58{!?-srT^U z7G9}q=Ohn1ztkW)&I{S&b|U+NB${x&C-CqL*(1Okn1`99C5@PenIyjapv>O-4E2b_ ziQe7R3Vs*ZJy4pFlk&i?%<#BR-Fm?on@p{f?!8XKp%A~&dNHfGl<4v2b6x~(N zWecp?@?#~%wayk_L@tuX54A(wVb!NLLw}hS zOdH)Ur+vz)3*w7iXGz}zY)y3yFHlN&z)E|zH*VGudZG^O<{sgAy zO5;`dr8gNrqa8In4#BG#kX&Uf#lRl7;d&8w%(19W;9L$L_=`QXWGuCzq95mJ{C0H$Z0^xj$8O0#C1~mw;yj!c<9E~xF>JdTHQH> z^p3fVdYdrbtoSgVKd+&TWts$aWEpZEe;zqM^hb|X_`t7V?LBoXX$hy(w(SVcAZLAu zj2`{*;R62cONMdVG>k`U?T*WE5(?Jh-cQuFvhij|J)#8`2`v2T%vJoWGuJfwnrkEK zhoX_c=&7+*&_9FU#uVX@3VSqzqBKZ#2g5Llj9Q@qSv-nD>ePOBqh{Ir$XNP*f_f{! zqZ;Z!QS*p~YOQV-7`m;>P@Qll?Wr)Q~aB2n|q_t7U` z6>+m2$zKL+aIU;OzTX~b_f30jw{hE9>Wym54|DB%i|1^Ho2#S!(5@4HePMsG`tyxw zPS(w7Bt^}#vexPz|IY7!_b%^6%W&U(Z!>bzND04xFlt0IS$peDbYP~teNxZj*II2I z^{Ff3j1wa{HZc<7_cN3gaRCWVMG-ojc-Qj4#%9OsDCi*$-SyJTyHB#$H2l*qqgcTS zzxV*!knZVz=(-xb$b;{y1xA72RKaf`$QB}a6XL-rnmvxh`vb4S%aa6wD>o-fub)rc z?@Ga5H;ap~{Oo{@YQouHbIhV1w5pGrz5UrjvzV5djOzR0F?73BN+yfWB&^RuZXo@|X74 zSyZ03&(7w+FI`r)u5`-cSv6RX$NNW^pxvXhT&2cH4ZWl&j3CeGdCBaT0O^&;DDOe`|6q~b;fJ=?*yUj1nOV?Hf0DgS4bwXM zIoZpy4`ez1J^c80YL9IqwmsiB46FSZdeyV|_fK0_8sQgpxMDcHVc!Huv)`;qs4DQ^ zT5V^+iUOaZ)58b7QTuY?=iujj1$4$Db5Cab5X(5(v*TN>p)$XFZWUJMR_BidLui0?K{i4VZy z&dI73b-b`ZV=gYm``tN`-KDZ9w(7?ex%y#6mVQXFS%2O)t;}K?P;CHT09an6_d>}F zps-Aw0De0@4jz=BO^e@6aO&}S+suD=5-3y`uO8b9`VMZQC>6+6+T@^1f#QW{k>CN^ z^W3)U&1DQ_RImxo+_G`!$ac_f51{>@@V{6qS3BW8+2yiv75^ra60g24&`yt1tTWfA zp=Qm8a0^X$q!}Hc4|v2ndiwtJ`m#os!~2YPBmc-+bW+%3(H(go=Q2Hi{m<*o!Y{yY zx*hp^Y^tG48Ni?)q&|3v&z-zpTqt5I$Jp-QiRWSONmr?^@HpVubK&guW<_Vb6Yywe zFC%{4kWBr&Kp*#4sh;(4mU^g~qsC?%p~o&!!arSsuZGW`En`#(hO2>y$1521-4c+iOE zz}Joc&$IK>w`5JnUz@UKOO{o_e`#h`{!)JFw!Dm`xwgFgybb9~a;%xQrJM3Hm+;n% zj2n7IWW*qdVX`JstOdt8}tK$dcC24rJ2@Dep4=R!L8a~W689->!)X>TDNPr*z&bo(zF}4 z*s@adVzv33tlA7~mNq?aDt_kl+{|s3T&p%AH8t0omj_MUfZqiE53F80f!~z=AFyRx zbGN4FZONTz;fDIFGP5(Rnbxd)3ua2Og;+Pem)y^-PS&oMi0<`~H25CsL?-@gwM)e`F-d|jJdrw4 z6Ia3QJpK40sqjQ2xD5U-TmqjI_~IN9o=n9_VoeN)_&^2H3r=zWCpbPTVM3B|1gD6p zkc3Bar&vYA2a+Gfof#ktI{zs&Wx#PjQ^bk{kaoc3MJeS zG=kfC9E#nTDismSK8=u8n!hG#V#5sKhOi};jO8d<@Ca`E@w!`^59%Zq;{Cwe@k{YD9CM~y|lKhJX?15mRz8NI4hA{4g4JH8B|QtI*Fv7)86cI@0^KzLKQHMSDH*wi?2>FtRyzNfc9SJHU#mrE zlT;tq!Ji#c+`TTR*UKx&%eQ7~^ETP?Q@3o((&q7-tf@Av>Qil2QNT;$U+f2=I;lN) z_9T8lU0HLpEE!sBZtj-cSS<)MYcABbW#w8e{3gqW46Bykl4_kku4RCbC=)0+laYHe ztcRxpH~6J58NV2TxI3KZN7DZy<@ahx{2$Tl{~IR9zEpyT+uq;-=bym$=UJfmM4CNe zP5tMLfxPVWEHDLP3=yK5+X5|0Mh>*Ev66o80~mki0zKzLNcznM#k<9pmr4X|6oYNw$|Uv-_!AjE2-d(2K@6t5Q^G8&5{nwDps4Bo~pg`E^VGQBh3IN$HGNW zAl;I2lR!unji<-+!FU4N#cU+=jd=@y9)>Tb&-8RmSDY>ylDEiz9MUjeU@n2hb#wg< zkOvN&o7#N<(y)xr+rqmk`*&>x;&lXXs49Md&BRZ>fu!FwY^(xGA#zOECQ@#m zRL=t8O!yiw)4*qwlrJMubTWjLe?63hA4uV+Qur4s9FW3cDFmVw;wF?*7$AiUq%ceh z@07xOr0_v0JSK$=Qvaz^yPKsjTMD;I;nPxBEQMuKSSf|iN#P4pSSN)IQuwMA9+SdE zso#H)4;QkW=(_etS;DLf~Q{~uxwp!etk zLU&Ai{BiTg|Mos{?Pk)iTW(`Hg!hRz@gr8OkMnuCkK6LoGxC5Z-5T^UZFVMDECz#i z;UcidrS{x*(BGuEn=da-i+?*UenN_48sN|L_=uG6rqA{z+j702T*eb*9Paci*fAAY z^R?;jt%Wu9hW4;r!=InS7q6p#PBs0Yyr0~RL;FW0{II;jp9=V5+hltBbCBi_-}sCh z`2o`pkIg+k0L9OyY2|L3w;RPL+AfuM%TL_b68Qe3{CZwb@Pq4z;zurpk3^94>HXmS z7z^K9%*#zEV=u$w`PRIA;IeR3_k?_w_m>o{yTP1$kBZV$0{6Gr7mclV9 zR78?`i=}Y06c$QhqZIZ_;Q|vW|3H2&cxv(%xiI6)Slkm^9Y!`Ff z<=pnSJG@&eC$;e~4H)#-VbjP#9Qo07cAc&;UD zqZM`%saoQzS(OFOL8t*f60-%okEH(cEwI(dk|KC~B$;&a;Ff$~LP)&Nl9#`HOJ=s@ zNRfiomW}EBWQTyi+n#tmo6yZIxBm|N?SFyIvvaqA=P17bdqzbw2z@KzwLzLUKL|nX z+?0;x8kQB@cHSzwIswL?hG;S__dL48HB$O2yl>03W#hTTpWBsxQYxRE^+Xoz7gxg` zFFni3Z6~|HNr#s^1^WTquvGZL^i1##Ot{9xC@v-fQW@+zm@Fd3^1? zEU6QbDf}^!=0+@Q>vHg1Pd3Go1Q9JM4>v6F6+n|*f%}-~Y%)0!HnvZ|wkj)Ml66zM zp8`%+5b5crH`clMGlK-8%)}tP1ra}Pe}p^4zFhoq=X;PSQb_)UdvnRW#!F$86fTs) zIZ~*S!s|Jt{NJQ-KnmUd0=Hgs_lspG{ z>X{H%no* z6mFG5Wz4PD&DvO!K2yr~lj833(y%A&mfNKx8)@fmslP-i+9+f)x97Ic-Sqf-_4xF5-2R!M zUuORDG0{i3YK{5lLB9;kd?;bv8iX1pJl*o&H7)+?w0Nr&mrLXR-}d`>ZzFX4XZ=3Y z>%09vHFuGArD06)?d{TEm+%;lC-ugp@H;8|x!KIETle#IE4akul@G2G&-zGk!U)vZ!Uz%VNUA!k2}Iha1Bq!Xv{?;Zfny;W5TA<1%Bo z(P)e?MjB1VC}XrSCL%0iSwwh*F(M)&GQt!Q6%ic~6B!n{EHXUO2(Nu2BTbP}kMJO8JL@nZu+^y42f=Ar7&U@q2q>We6$Ig`6+yftqcAx zaNiTob01BT95^1;iU*wdv=ZEf8{v2XV-WTfY1hq%iBdcmXToQNq)*-Ye0sjLJSNt8 zvh)EOi=SE2hmt<-_5P`}?mzhh`Ix28r~g4dh0?_Wjj~ zGmOE1`lZacRQGPjg||;%@Bgp=ifH}3`0JqM?~g2eboYBB3-5i{5#8CI8Ic!g8n`t4 zeDxoXB>mUjA+xsrrxYR-u=V@DMBB!%laHHTZaUvC-CfQdPLxOE;y?Ger-!iW#E%=_ z<=cOo^T8uedo5W$=dWi>vwwyPyP^u-Pgp)Z?jDDmj(f=`@C7M!k5^)YKTIztmES9s M-#fkiADfr|19gLOQUCw| literal 38920 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 diff --git a/os/Cargo.toml b/os/Cargo.toml index 6ff9866..9c2a7d3 100644 --- a/os/Cargo.toml +++ b/os/Cargo.toml @@ -12,6 +12,8 @@ lazy_static = { version = "1.4.0", features = ["spin_no_std"] } buddy_system_allocator = "0.6" bitflags = "1.2.1" xmas-elf = "0.7.0" +log = "0.4" +sbi-rt = { version = "0.0.2", features = ["legacy"] } [profile.release] debug = true diff --git a/os/src/boards/qemu.rs b/os/src/boards/qemu.rs index df564eb..05527ad 100644 --- a/os/src/boards/qemu.rs +++ b/os/src/boards/qemu.rs @@ -5,83 +5,3 @@ pub const CLOCK_FREQ: usize = 12500000; pub const MMIO: &[(usize, usize)] = &[ (0x0010_0000, 0x00_2000), // VIRT_TEST/RTC in virt machine ]; - -//ref:: https://github.com/andre-richter/qemu-exit -use core::arch::asm; - -const EXIT_SUCCESS: u32 = 0x5555; // Equals `exit(0)`. qemu successful exit - -const EXIT_FAILURE_FLAG: u32 = 0x3333; -const EXIT_FAILURE: u32 = exit_code_encode(1); // Equals `exit(1)`. qemu failed exit -const EXIT_RESET: u32 = 0x7777; // qemu reset - -pub trait QEMUExit { - /// Exit with specified return code. - /// - /// Note: For `X86`, code is binary-OR'ed with `0x1` inside QEMU. - fn exit(&self, code: u32) -> !; - - /// Exit QEMU using `EXIT_SUCCESS`, aka `0`, if possible. - /// - /// Note: Not possible for `X86`. - fn exit_success(&self) -> !; - - /// Exit QEMU using `EXIT_FAILURE`, aka `1`. - fn exit_failure(&self) -> !; -} - -/// RISCV64 configuration -pub struct RISCV64 { - /// Address of the sifive_test mapped device. - addr: u64, -} - -/// Encode the exit code using EXIT_FAILURE_FLAG. -const fn exit_code_encode(code: u32) -> u32 { - (code << 16) | EXIT_FAILURE_FLAG -} - -impl RISCV64 { - /// Create an instance. - pub const fn new(addr: u64) -> Self { - RISCV64 { addr } - } -} - -impl QEMUExit for RISCV64 { - /// Exit qemu with specified exit code. - fn exit(&self, code: u32) -> ! { - // If code is not a special value, we need to encode it with EXIT_FAILURE_FLAG. - let code_new = match code { - EXIT_SUCCESS | EXIT_FAILURE | EXIT_RESET => code, - _ => exit_code_encode(code), - }; - - unsafe { - asm!( - "sw {0}, 0({1})", - in(reg)code_new, in(reg)self.addr - ); - - // For the case that the QEMU exit attempt did not work, transition into an infinite - // loop. Calling `panic!()` here is unfeasible, since there is a good chance - // this function here is the last expression in the `panic!()` handler - // itself. This prevents a possible infinite loop. - loop { - asm!("wfi", options(nomem, nostack)); - } - } - } - - fn exit_success(&self) -> ! { - self.exit(EXIT_SUCCESS); - } - - fn exit_failure(&self) -> ! { - self.exit(EXIT_FAILURE); - } -} - -const VIRT_TEST: u64 = 0x100000; - -pub const QEMU_EXIT_HANDLE: RISCV64 = RISCV64::new(VIRT_TEST); diff --git a/os/src/lang_items.rs b/os/src/lang_items.rs index e8cf681..6e71116 100644 --- a/os/src/lang_items.rs +++ b/os/src/lang_items.rs @@ -16,5 +16,5 @@ fn panic(info: &PanicInfo) -> ! { } else { println!("[kernel] Panicked: {}", info.message().unwrap()); } - shutdown() + shutdown(true) } diff --git a/os/src/sbi.rs b/os/src/sbi.rs index 269581f..5a2eed2 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -1,51 +1,23 @@ //! SBI call wrappers -use core::arch::asm; - -const SBI_SET_TIMER: usize = 0; -const SBI_CONSOLE_PUTCHAR: usize = 1; - -// const SBI_CONSOLE_GETCHAR: usize = 2; -// const SBI_CLEAR_IPI: usize = 3; -// const SBI_SEND_IPI: usize = 4; -// const SBI_REMOTE_FENCE_I: usize = 5; -// const SBI_REMOTE_SFENCE_VMA: usize = 6; -// const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7; -// const SBI_SHUTDOWN: usize = 8; - -#[inline(always)] -/// general sbi call -fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> usize { - let mut ret; - unsafe { - asm!( - "li x16, 0", - "ecall", - inlateout("x10") arg0 => ret, - in("x11") arg1, - in("x12") arg2, - in("x17") which, - ); - } - ret +/// use sbi call to putchar in console (qemu uart handler) +pub fn console_putchar(c: usize) { + #[allow(deprecated)] + sbi_rt::legacy::console_putchar(c); } /// use sbi call to set timer pub fn set_timer(timer: usize) { - sbi_call(SBI_SET_TIMER, timer, 0, 0); + sbi_rt::set_timer(timer as _); } -/// use sbi call to putchar in console (qemu uart handler) -pub fn console_putchar(c: usize) { - sbi_call(SBI_CONSOLE_PUTCHAR, c, 0, 0); -} - -/// use sbi call to getchar from console (qemu uart handler) -// pub fn console_getchar() -> usize { -// sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0) -// } -use crate::board::QEMUExit; /// use sbi call to shutdown the kernel -pub fn shutdown() -> ! { - crate::board::QEMU_EXIT_HANDLE.exit_failure(); +pub fn shutdown(failure: bool) -> ! { + use sbi_rt::{system_reset, NoReason, Shutdown, SystemFailure}; + if !failure { + system_reset(Shutdown, NoReason); + } else { + system_reset(Shutdown, SystemFailure); + } + unreachable!() } From 22e52514a5c23406f4f29ea1cce9547a7cd4ab5d Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 28 Mar 2023 23:42:48 +0800 Subject: [PATCH 71/87] Use error! instead of println! when panicking --- os/src/lang_items.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/os/src/lang_items.rs b/os/src/lang_items.rs index 6e71116..a9111ce 100644 --- a/os/src/lang_items.rs +++ b/os/src/lang_items.rs @@ -2,19 +2,20 @@ use crate::sbi::shutdown; use core::panic::PanicInfo; +use log::*; #[panic_handler] /// panic handler fn panic(info: &PanicInfo) -> ! { if let Some(location) = info.location() { - println!( + error!( "[kernel] Panicked at {}:{} {}", location.file(), location.line(), info.message().unwrap() ); } else { - println!("[kernel] Panicked: {}", info.message().unwrap()); + error!("[kernel] Panicked: {}", info.message().unwrap()); } shutdown(true) } From 5a439b8689b87f8e477292c737b9382f68da9a21 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 29 Mar 2023 20:40:34 +0800 Subject: [PATCH 72/87] fix ch4 --- os/src/task/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index dd27422..f80440e 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -15,6 +15,7 @@ mod switch; mod task; use crate::loader::{get_app_data, get_num_app}; +use crate::sbi::shutdown; use crate::sync::UPSafeCell; use crate::trap::TrapContext; use alloc::vec::Vec; @@ -151,8 +152,7 @@ impl TaskManager { // go back to user mode } else { println!("All applications completed!"); - use crate::board::QEMUExit; - crate::board::QEMU_EXIT_HANDLE.exit_success(); + shutdown(false); } } } From 9c227174afd28b5e889913a31c66cd97ffcc96b8 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 30 Mar 2023 22:56:11 +0800 Subject: [PATCH 73/87] cargo fmt --- user/src/bin/sbrk_test.rs | 10 ++++++---- user/src/syscall.rs | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/user/src/bin/sbrk_test.rs b/user/src/bin/sbrk_test.rs index af21bd1..780693d 100644 --- a/user/src/bin/sbrk_test.rs +++ b/user/src/bin/sbrk_test.rs @@ -4,8 +4,8 @@ #[macro_use] extern crate user_lib; -use user_lib::sbrk; use core::ptr::slice_from_raw_parts_mut; +use user_lib::sbrk; #[no_mangle] fn main() -> i32 { @@ -15,12 +15,14 @@ fn main() -> i32 { println!("origin break point = {:x}", origin_brk); let brk = sbrk(PAGE_SIZE as i32); if brk != origin_brk { - return -1 + return -1; } let brk = sbrk(0); println!("one page allocated, break point = {:x}", brk); println!("try write to allocated page"); - let new_page = unsafe { &mut *slice_from_raw_parts_mut(origin_brk as usize as *const u8 as *mut u8, PAGE_SIZE) }; + let new_page = unsafe { + &mut *slice_from_raw_parts_mut(origin_brk as usize as *const u8 as *mut u8, PAGE_SIZE) + }; for pos in 0..PAGE_SIZE { new_page[pos] = 1; } @@ -35,7 +37,7 @@ fn main() -> i32 { let ret = sbrk(PAGE_SIZE as i32 * -1); if ret != -1 { println!("Test sbrk failed!"); - return -1 + return -1; } println!("Test sbrk almost OK!"); println!("now write to deallocated page, should cause page fault."); diff --git a/user/src/syscall.rs b/user/src/syscall.rs index 73f936b..31144b9 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -38,4 +38,4 @@ pub fn sys_get_time() -> isize { pub fn sys_sbrk(size: i32) -> isize { syscall(SYSCALL_SBRK, [size as usize, 0, 0]) -} \ No newline at end of file +} From 45477b345f50ff0d019011583784499198827896 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 30 Apr 2023 01:02:04 +0800 Subject: [PATCH 74/87] Update os/Makefile: Added QEMU_ARGS --- os/Makefile | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/os/Makefile b/os/Makefile index 21b9614..460f6f2 100644 --- a/os/Makefile +++ b/os/Makefile @@ -56,23 +56,22 @@ disasm-vim: kernel run: run-inner - +QEMU_ARGS := -machine virt \ + -nographic \ + -bios $(BOOTLOADER) \ + -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) run-inner: build - @qemu-system-riscv64 \ - -machine virt \ - -nographic \ - -bios $(BOOTLOADER) \ - -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) + @qemu-system-riscv64 $(QEMU_ARGS) debug: build @tmux new-session -d \ - "qemu-system-riscv64 -machine virt -nographic -bios $(BOOTLOADER) -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) -s -S" && \ + "qemu-system-riscv64 $(QEMU_ARGS) -s -S" && \ tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d gdbserver: build - @qemu-system-riscv64 -machine virt -nographic -bios $(BOOTLOADER) -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) -s -S + @qemu-system-riscv64 $(QEMU_ARGS) -s -S gdbclient: @riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234' From 90e969c0ae0ae65a57eb6d025e2d3a128b5c5070 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Wed, 31 May 2023 21:17:53 +0800 Subject: [PATCH 75/87] Fix issue #123 --- os/src/mm/address.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/os/src/mm/address.rs b/os/src/mm/address.rs index d5cf59f..a438c25 100644 --- a/os/src/mm/address.rs +++ b/os/src/mm/address.rs @@ -103,7 +103,11 @@ impl VirtAddr { VirtPageNum(self.0 / PAGE_SIZE) } pub fn ceil(&self) -> VirtPageNum { - VirtPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) + if self.0 == 0 { + VirtPageNum(0) + } else { + VirtPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) + } } pub fn page_offset(&self) -> usize { self.0 & (PAGE_SIZE - 1) @@ -128,7 +132,11 @@ impl PhysAddr { PhysPageNum(self.0 / PAGE_SIZE) } pub fn ceil(&self) -> PhysPageNum { - PhysPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) + if self.0 == 0 { + PhysPageNum(0) + } else { + PhysPageNum((self.0 - 1 + PAGE_SIZE) / PAGE_SIZE) + } } pub fn page_offset(&self) -> usize { self.0 & (PAGE_SIZE - 1) From 7147cf95f7f956407e6891070d4339bba8d03521 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Tue, 10 Oct 2023 21:50:45 +0800 Subject: [PATCH 76/87] Bump rust to version 1.75.0-nightly --- rust-toolchain.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 553747b..3425f94 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] profile = "minimal" # use the nightly version of the last stable toolchain, see -channel = "nightly-2022-08-05" +channel = "nightly-2023-10-09" components = ["rust-src", "llvm-tools-preview", "rustfmt", "clippy"] From 821784080c8b7bc6edfa089cb63433f17b93c7d5 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 15 Oct 2023 15:26:51 +0800 Subject: [PATCH 77/87] Update doc-and-test.yml --- .github/workflows/doc-and-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/doc-and-test.yml b/.github/workflows/doc-and-test.yml index 49d9eed..d06a230 100644 --- a/.github/workflows/doc-and-test.yml +++ b/.github/workflows/doc-and-test.yml @@ -4,7 +4,7 @@ on: [push] env: CARGO_TERM_COLOR: always - rust_toolchain: nightly-2022-08-05 + rust_toolchain: nightly-2023-10-09 jobs: build-doc: From 89f8a5263627c821fa05550f0e72c9429cd40e80 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 20 Jan 2024 21:50:24 +0800 Subject: [PATCH 78/87] Bump rust to version 1.77.0-nightly --- .github/workflows/doc-and-test.yml | 2 +- rust-toolchain.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/doc-and-test.yml b/.github/workflows/doc-and-test.yml index d06a230..0a05371 100644 --- a/.github/workflows/doc-and-test.yml +++ b/.github/workflows/doc-and-test.yml @@ -4,7 +4,7 @@ on: [push] env: CARGO_TERM_COLOR: always - rust_toolchain: nightly-2023-10-09 + rust_toolchain: nightly-2024-01-18 jobs: build-doc: diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 3425f94..dd54f2e 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,5 +1,5 @@ [toolchain] profile = "minimal" # use the nightly version of the last stable toolchain, see -channel = "nightly-2023-10-09" +channel = "nightly-2024-01-18" components = ["rust-src", "llvm-tools-preview", "rustfmt", "clippy"] From f2c7dcc72b1dfdc39f9758c5693651bfbb37e891 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 21 Jan 2024 00:53:18 +0800 Subject: [PATCH 79/87] Merge pull request #134 from cndoit18/add-devcontainer feat: support devcontainer --- .devcontainer/devcontainer.json | 21 +++++++++++++++++++ .gitignore | 7 +++++-- Dockerfile | 37 ++++++++++++++++++--------------- rust-toolchain.toml | 1 + 4 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..2d7932f --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "rcore-tutorial-v3", + "build": { + "dockerfile": "../Dockerfile", + "args": { + "QEMU_VERSION": "7.0.0", + "DEBIAN_FRONTEND": "noninteractive", + "GDB_VERSION": "14.1" + } + }, + "postCreateCommand": "rustup show", + "customizations": { + "vscode": { + "extensions": [ + "rust-lang.rust-analyzer", + "ms-vscode.cpptools", + "tamasfe.even-better-toml" + ] + } + } +} diff --git a/.gitignore b/.gitignore index 4391862..67ee557 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,12 @@ .*/* !.github/* !.vscode/settings.json +!.devcontainer/devcontainer.json + .idea -Cargo.lock -target +**/Cargo.lock +**/target/ + os/src/link_app.S os/src/linker.ld os/last-* diff --git a/Dockerfile b/Dockerfile index 284db4c..a365475 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,16 +7,17 @@ FROM ubuntu:20.04 ARG QEMU_VERSION=7.0.0 +ARG GDB_VERSION=14.1 ARG HOME=/root # 0. Install general tools ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y \ - curl \ - git \ - python3 \ - wget + curl \ + git \ + python3 \ + wget # 1. Set up QEMU RISC-V # - https://learningos.github.io/rust-based-os-comp2022/0setup-devel-env.html#qemu @@ -29,13 +30,18 @@ WORKDIR ${HOME} RUN wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \ tar xvJf qemu-${QEMU_VERSION}.tar.xz +RUN wget https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.xz && \ + tar xvJf gdb-${GDB_VERSION}.tar.xz + # 1.2. Install dependencies # - https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html#prerequisites RUN apt-get install -y \ - autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ - gawk build-essential bison flex texinfo gperf libtool patchutils bc \ - zlib1g-dev libexpat-dev git \ - ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev + autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ + gawk build-essential bison flex texinfo gperf libtool patchutils bc \ + zlib1g-dev libexpat-dev git \ + ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \ + libncurses5-dev python2 python2-dev libreadline-dev tmux + # 1.3. Build and install from source WORKDIR ${HOME}/qemu-${QEMU_VERSION} @@ -43,9 +49,14 @@ RUN ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \ make -j$(nproc) && \ make install +WORKDIR ${HOME}/gdb-${GDB_VERSION} +RUN ./configure --prefix=/usr/local --target=riscv64-unknown-elf --enable-tui=yes && \ + make -j$(nproc) && \ + make install + # 1.4. Clean up WORKDIR ${HOME} -RUN rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz +RUN rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz ${HOME}/gdb-${GDB_VERSION} gdb-${GDB_VERSION}.tar.xz # 1.5. Sanity checking RUN qemu-system-riscv64 --version && \ @@ -73,13 +84,5 @@ RUN rustup --version && \ cargo --version && \ rustc --version -# 3. Build env for labs -# See os1/Makefile `env:` for example. -# This avoids having to wait for these steps each time using a new container. -RUN rustup target add riscv64gc-unknown-none-elf && \ - cargo install cargo-binutils --vers ~0.2 && \ - rustup component add rust-src && \ - rustup component add llvm-tools-preview - # Ready to go WORKDIR ${HOME} diff --git a/rust-toolchain.toml b/rust-toolchain.toml index dd54f2e..61bbf13 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -3,3 +3,4 @@ profile = "minimal" # use the nightly version of the last stable toolchain, see channel = "nightly-2024-01-18" components = ["rust-src", "llvm-tools-preview", "rustfmt", "clippy"] +targets = ["riscv64gc-unknown-none-elf"] From 28c8a9e9fc986daf40a12f86a297a61881ce310d Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 21 Jan 2024 22:06:20 +0800 Subject: [PATCH 80/87] config: use MEMORY_END from mod boards #136 --- os/src/boards/qemu.rs | 1 + os/src/config.rs | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/os/src/boards/qemu.rs b/os/src/boards/qemu.rs index 05527ad..f1f4e56 100644 --- a/os/src/boards/qemu.rs +++ b/os/src/boards/qemu.rs @@ -1,6 +1,7 @@ //! Constants used in rCore for qemu pub const CLOCK_FREQ: usize = 12500000; +pub const MEMORY_END: usize = 0x8800_0000; pub const MMIO: &[(usize, usize)] = &[ (0x0010_0000, 0x00_2000), // VIRT_TEST/RTC in virt machine diff --git a/os/src/config.rs b/os/src/config.rs index e7dcee3..8c3c88f 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -3,7 +3,6 @@ pub const USER_STACK_SIZE: usize = 4096 * 2; pub const KERNEL_STACK_SIZE: usize = 4096 * 2; pub const KERNEL_HEAP_SIZE: usize = 0x30_0000; -pub const MEMORY_END: usize = 0x80800000; pub const PAGE_SIZE: usize = 0x1000; pub const PAGE_SIZE_BITS: usize = 0xc; @@ -16,4 +15,4 @@ pub fn kernel_stack_position(app_id: usize) -> (usize, usize) { (bottom, top) } -pub use crate::board::{CLOCK_FREQ, MMIO}; +pub use crate::board::{CLOCK_FREQ, MEMORY_END, MMIO}; From a274521e80cc44e256fc6a6e3f80deb62277ea55 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Fri, 26 Jan 2024 22:09:29 +0800 Subject: [PATCH 81/87] Merge pull request #139 from jklincn/main --- .dockerignore | 3 +- Dockerfile | 124 +++++++++++++++++++------------------------- Makefile | 6 +-- rust-toolchain.toml | 4 +- 4 files changed, 61 insertions(+), 76 deletions(-) diff --git a/.dockerignore b/.dockerignore index df3359d..8971c06 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,2 @@ -*/* \ No newline at end of file +*/* +!rust-toolchain.toml \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index a365475..30731a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,88 +1,72 @@ # syntax=docker/dockerfile:1 -# This Dockerfile is adapted from https://github.com/LearningOS/rCore-Tutorial-v3/blob/main/Dockerfile -# with the following major updates: -# - ubuntu 18.04 -> 20.04 -# - qemu 5.0.0 -> 7.0.0 -# - Extensive comments linking to relevant documentation -FROM ubuntu:20.04 + +# Stage 1 Build QEMU +# - https://www.qemu.org/download/ +# - https://wiki.qemu.org/Hosts/Linux#Building_QEMU_for_Linux +# - https://wiki.qemu.org/Documentation/Platforms/RISCV + +FROM ubuntu:20.04 as build_qemu ARG QEMU_VERSION=7.0.0 -ARG GDB_VERSION=14.1 -ARG HOME=/root -# 0. Install general tools -ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update && \ - apt-get install -y \ - curl \ - git \ - python3 \ - wget +RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \ + sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y wget build-essential libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build -# 1. Set up QEMU RISC-V -# - https://learningos.github.io/rust-based-os-comp2022/0setup-devel-env.html#qemu -# - https://www.qemu.org/download/ -# - https://wiki.qemu.org/Documentation/Platforms/RISCV -# - https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html - -# 1.1. Download source -WORKDIR ${HOME} RUN wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \ - tar xvJf qemu-${QEMU_VERSION}.tar.xz - -RUN wget https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.xz && \ - tar xvJf gdb-${GDB_VERSION}.tar.xz - -# 1.2. Install dependencies -# - https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html#prerequisites -RUN apt-get install -y \ - autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ - gawk build-essential bison flex texinfo gperf libtool patchutils bc \ - zlib1g-dev libexpat-dev git \ - ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \ - libncurses5-dev python2 python2-dev libreadline-dev tmux - - -# 1.3. Build and install from source -WORKDIR ${HOME}/qemu-${QEMU_VERSION} -RUN ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \ + tar xf qemu-${QEMU_VERSION}.tar.xz && \ + cd qemu-${QEMU_VERSION} && \ + ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \ make -j$(nproc) && \ make install -WORKDIR ${HOME}/gdb-${GDB_VERSION} -RUN ./configure --prefix=/usr/local --target=riscv64-unknown-elf --enable-tui=yes && \ - make -j$(nproc) && \ - make install +# Stage 2 Set Lab Environment +FROM ubuntu:20.04 as build -# 1.4. Clean up -WORKDIR ${HOME} -RUN rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz ${HOME}/gdb-${GDB_VERSION} gdb-${GDB_VERSION}.tar.xz +WORKDIR /tmp -# 1.5. Sanity checking -RUN qemu-system-riscv64 --version && \ - qemu-riscv64 --version +# 2.0. Install general tools +RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \ + apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y jq curl git python3 wget build-essential \ + # qemu dependency + libglib2.0-0 libfdt1 libpixman-1-0 zlib1g \ + # gdb + gdb-multiarch -# 2. Set up Rust -# - https://learningos.github.io/rust-based-os-comp2022/0setup-devel-env.html#qemu +# 2.1. Copy qemu +COPY --from=build_qemu /usr/local/bin/* /usr/local/bin + +# 2.2. Install Rust # - https://www.rust-lang.org/tools/install -# - https://github.com/rust-lang/docker-rust/blob/master/Dockerfile-debian.template - -# 2.1. Install ENV RUSTUP_HOME=/usr/local/rustup \ CARGO_HOME=/usr/local/cargo \ PATH=/usr/local/cargo/bin:$PATH \ - RUST_VERSION=nightly -RUN set -eux; \ - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init; \ - chmod +x rustup-init; \ - ./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION; \ - rm rustup-init; \ - chmod -R a+w $RUSTUP_HOME $CARGO_HOME; + RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static \ + RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \ + sh -s -- -y --no-modify-path --profile minimal --default-toolchain nightly -# 2.2. Sanity checking -RUN rustup --version && \ +# 2.3. Build env for labs +# See os/Makefile `env:` for example. +# This avoids having to wait for these steps each time using a new container. +COPY rust-toolchain.toml rust-toolchain.toml +RUN rustup target add riscv64gc-unknown-none-elf && \ + cargo install toml-cli cargo-binutils && \ + RUST_VERSION=$(toml get -r rust-toolchain.toml toolchain.channel) && \ + Components=$(toml get -r rust-toolchain.toml toolchain.components | jq -r 'join(" ")') && \ + rustup install $RUST_VERSION && \ + rustup component add --toolchain $RUST_VERSION $Components + +# 2.4. Set GDB +RUN ln -s /usr/bin/gdb-multiarch /usr/bin/riscv64-unknown-elf-gdb + +# Stage 3 Sanity checking +FROM build as test +RUN qemu-system-riscv64 --version && \ + qemu-riscv64 --version && \ + rustup --version && \ cargo --version && \ - rustc --version - -# Ready to go -WORKDIR ${HOME} + rustc --version && \ + riscv64-unknown-elf-gdb --version \ No newline at end of file diff --git a/Makefile b/Makefile index ede5291..80fe9a1 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ -DOCKER_NAME ?= rcore-tutorial-v3 +DOCKER_TAG ?= rcore-tutorial-v3:latest .PHONY: docker build_docker docker: - docker run --rm -it -v ${PWD}:/mnt -w /mnt ${DOCKER_NAME} bash + docker run --rm -it -v ${PWD}:/mnt -w /mnt --name rcore-tutorial-v3 ${DOCKER_TAG} bash build_docker: - docker build -t ${DOCKER_NAME} . + docker build -t ${DOCKER_TAG} --target build . fmt: cd os ; cargo fmt; cd .. diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 61bbf13..8193d6f 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -2,5 +2,5 @@ profile = "minimal" # use the nightly version of the last stable toolchain, see channel = "nightly-2024-01-18" -components = ["rust-src", "llvm-tools-preview", "rustfmt", "clippy"] -targets = ["riscv64gc-unknown-none-elf"] +components = ["rust-src", "llvm-tools", "rustfmt", "clippy"] +targets = ["riscv64gc-unknown-none-elf"] \ No newline at end of file From decd33075faa8f0c7a7080bc68a324c537770185 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Thu, 2 May 2024 11:04:17 +0800 Subject: [PATCH 82/87] toolchain: Bump Rust to 1.80.0-nightly --- os/.cargo/{config => config.toml} | 0 os/src/task/task.rs | 1 + rust-toolchain.toml | 4 ++-- user/.cargo/{config => config.toml} | 0 4 files changed, 3 insertions(+), 2 deletions(-) rename os/.cargo/{config => config.toml} (100%) rename user/.cargo/{config => config.toml} (100%) diff --git a/os/.cargo/config b/os/.cargo/config.toml similarity index 100% rename from os/.cargo/config rename to os/.cargo/config.toml diff --git a/os/src/task/task.rs b/os/src/task/task.rs index 6c87ddd..be97639 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -10,6 +10,7 @@ pub struct TaskControlBlock { pub task_cx: TaskContext, pub memory_set: MemorySet, pub trap_cx_ppn: PhysPageNum, + #[allow(unused)] pub base_size: usize, pub heap_bottom: usize, pub program_brk: usize, diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 8193d6f..c65d258 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,6 +1,6 @@ [toolchain] profile = "minimal" # use the nightly version of the last stable toolchain, see -channel = "nightly-2024-01-18" +channel = "nightly-2024-05-01" components = ["rust-src", "llvm-tools", "rustfmt", "clippy"] -targets = ["riscv64gc-unknown-none-elf"] \ No newline at end of file +targets = ["riscv64gc-unknown-none-elf"] diff --git a/user/.cargo/config b/user/.cargo/config.toml similarity index 100% rename from user/.cargo/config rename to user/.cargo/config.toml From 5c2fb9326766c00db1071b95ccb82c93c8920dd6 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 30 Jun 2024 20:09:43 +0800 Subject: [PATCH 83/87] mm: bugfix #133: MapArea::copy_data does not need &mut PageTable --- os/src/mm/memory_set.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index a6a0fdb..de4a50d 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -63,7 +63,7 @@ impl MemorySet { fn push(&mut self, mut map_area: MapArea, data: Option<&[u8]>) { map_area.map(&mut self.page_table); if let Some(data) = data { - map_area.copy_data(&mut self.page_table, data); + map_area.copy_data(&self.page_table, data); } self.areas.push(map_area); } @@ -341,7 +341,7 @@ impl MapArea { } /// data: start-aligned but maybe with shorter length /// assume that all frames were cleared before - pub fn copy_data(&mut self, page_table: &mut PageTable, data: &[u8]) { + pub fn copy_data(&mut self, page_table: &PageTable, data: &[u8]) { assert_eq!(self.map_type, MapType::Framed); let mut start: usize = 0; let mut current_vpn = self.vpn_range.get_start(); From eaacb4fa2506aa6471ad2c077ee4669aa7c30720 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 14 Jul 2024 20:50:53 +0800 Subject: [PATCH 84/87] buildtools: feat #135: Check the version of QEMU ahead --- os/Makefile | 12 ++++++++---- os/scripts/qemu-ver-check.sh | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 os/scripts/qemu-ver-check.sh diff --git a/os/Makefile b/os/Makefile index 460f6f2..a4c7967 100644 --- a/os/Makefile +++ b/os/Makefile @@ -61,19 +61,23 @@ QEMU_ARGS := -machine virt \ -bios $(BOOTLOADER) \ -device loader,file=$(KERNEL_BIN),addr=$(KERNEL_ENTRY_PA) -run-inner: build +QEMU_NAME := qemu-system-riscv64 +qemu-version-check: + @sh scripts/qemu-ver-check.sh $(QEMU_NAME) + +run-inner: qemu-version-check build @qemu-system-riscv64 $(QEMU_ARGS) -debug: build +debug: qemu-version-check build @tmux new-session -d \ "qemu-system-riscv64 $(QEMU_ARGS) -s -S" && \ tmux split-window -h "riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234'" && \ tmux -2 attach-session -d -gdbserver: build +gdbserver: qemu-version-check build @qemu-system-riscv64 $(QEMU_ARGS) -s -S gdbclient: @riscv64-unknown-elf-gdb -ex 'file $(KERNEL_ELF)' -ex 'set arch riscv:rv64' -ex 'target remote localhost:1234' -.PHONY: build env kernel clean disasm disasm-vim run-inner gdbserver gdbclient +.PHONY: build env kernel clean disasm disasm-vim run-inner gdbserver gdbclient qemu-version-check diff --git a/os/scripts/qemu-ver-check.sh b/os/scripts/qemu-ver-check.sh new file mode 100644 index 0000000..8c20456 --- /dev/null +++ b/os/scripts/qemu-ver-check.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +# Argument1: The filename of qemu executable, e.g. qemu-system-riscv64 +QEMU_PATH=$(which $1) +RET=$? +MINIMUM_MAJOR_VERSION=7 +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' +if [ $RET != 0 ] +then + echo "$1 not found" + exit 1 +else + QEMU_VERSION=$($1 --version|head -n 1|awk '{print $4}') + MAJOR_VERSION=$(echo $QEMU_VERSION|cut -c1-1) + if [ $MAJOR_VERSION -lt $MINIMUM_MAJOR_VERSION ] + then + echo "${RED}Error: Required major version of QEMU is ${MINIMUM_MAJOR_VERSION}, " \ + "but current is ${QEMU_VERSION}.${NC}" + exit 1 + else + echo "${GREEN}QEMU version is ${QEMU_VERSION}(>=${MINIMUM_MAJOR_VERSION}), OK!${NC}" + exit 0 + fi +fi From cc1a9a4751f551c5acd5026214f9c5283efb2493 Mon Sep 17 00:00:00 2001 From: Tateisi Date: Sun, 3 Aug 2025 13:48:14 +0800 Subject: [PATCH 85/87] lab-04: mmap, munmap --- os/src/mm/memory_set.rs | 3 +++ os/src/mm/mod.rs | 3 ++- os/src/syscall/mod.rs | 4 ++++ os/src/syscall/process.rs | 48 +++++++++++++++++++++++++++++++++++++- os/src/task/mod.rs | 22 +++++++++++++++++ user/src/bin/ch4_mmap0.rs | 33 ++++++++++++++++++++++++++ user/src/bin/ch4_mmap1.rs | 25 ++++++++++++++++++++ user/src/bin/ch4_mmap2.rs | 26 +++++++++++++++++++++ user/src/bin/ch4_mmap3.rs | 25 ++++++++++++++++++++ user/src/bin/ch4_unmap.rs | 36 ++++++++++++++++++++++++++++ user/src/bin/ch4_unmap2.rs | 23 ++++++++++++++++++ user/src/bin/ch4b_sbrk.rs | 47 +++++++++++++++++++++++++++++++++++++ user/src/lib.rs | 8 +++++++ user/src/syscall.rs | 10 ++++++++ 14 files changed, 311 insertions(+), 2 deletions(-) create mode 100644 user/src/bin/ch4_mmap0.rs create mode 100644 user/src/bin/ch4_mmap1.rs create mode 100644 user/src/bin/ch4_mmap2.rs create mode 100644 user/src/bin/ch4_mmap3.rs create mode 100644 user/src/bin/ch4_unmap.rs create mode 100644 user/src/bin/ch4_unmap2.rs create mode 100644 user/src/bin/ch4b_sbrk.rs diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index de4a50d..3a187f0 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -266,6 +266,9 @@ impl MemorySet { false } } + pub fn unmap(&mut self, vpn: VirtPageNum) { + self.page_table.unmap(vpn) + } } /// map area structure, controls a contiguous piece of virtual memory diff --git a/os/src/mm/mod.rs b/os/src/mm/mod.rs index e0fd13c..f7024cf 100644 --- a/os/src/mm/mod.rs +++ b/os/src/mm/mod.rs @@ -13,7 +13,8 @@ mod memory_set; mod page_table; pub use address::{PhysAddr, PhysPageNum, VirtAddr, VirtPageNum}; -use address::{StepByOne, VPNRange}; +use address::StepByOne; +pub use address::VPNRange; pub use frame_allocator::{frame_alloc, FrameTracker}; pub use memory_set::remap_test; pub use memory_set::{MapPermission, MemorySet, KERNEL_SPACE}; diff --git a/os/src/syscall/mod.rs b/os/src/syscall/mod.rs index e5b4ff0..f0159c2 100644 --- a/os/src/syscall/mod.rs +++ b/os/src/syscall/mod.rs @@ -15,6 +15,8 @@ const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; const SYSCALL_GET_TIME: usize = 169; const SYSCALL_SBRK: usize = 214; +const SYSCALL_MMAP: usize = 222; +const SYSCALL_MUNMAP: usize = 215; mod fs; mod process; @@ -30,6 +32,8 @@ pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize { SYSCALL_YIELD => sys_yield(), SYSCALL_GET_TIME => sys_get_time(), SYSCALL_SBRK => sys_sbrk(args[0] as i32), + SYSCALL_MMAP => sys_mmap(args[0], args[1], args[2]), + SYSCALL_MUNMAP => sys_munmap(args[0], args[1]), _ => panic!("Unsupported syscall_id: {}", syscall_id), } } diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index d302373..dd873bf 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -1,6 +1,8 @@ //! Process management syscalls -use crate::task::{change_program_brk, exit_current_and_run_next, suspend_current_and_run_next}; +use crate::config::PAGE_SIZE; +use crate::mm::{MapPermission, VPNRange, VirtAddr}; +use crate::task::{change_program_brk, create_new_map_area, exit_current_and_run_next, get_current_task_page_table_entry, suspend_current_and_run_next, unmap_virtual_page}; use crate::timer::get_time_ms; /// task exits and submit an exit code @@ -29,3 +31,47 @@ pub fn sys_sbrk(size: i32) -> isize { -1 } } + +/// map files or devices into memory +pub fn sys_mmap(start: usize, len: usize, prot: usize) -> isize { + if start % PAGE_SIZE != 0 || prot & !0x7 != 0 || prot & 0x7 == 0 { + return -1; + } + let vpn_start = VirtAddr::from(start).floor(); + let vpn_end = VirtAddr::from(start + len).ceil(); + let vpn_range = VPNRange::new(vpn_start, vpn_end); + for vpn in vpn_range { + if let Some(pte) = get_current_task_page_table_entry(vpn) { + if pte.is_valid() { + return -1; + } + } + } + create_new_map_area( + vpn_start.into(), + vpn_end.into(), + MapPermission::from_bits_truncate((prot << 1) as u8) | MapPermission::U + ); + 0 +} + +/// unmap files or devices into memory +pub fn sys_munmap(start: usize, len: usize) -> isize { + if start % PAGE_SIZE != 0 { + return -1; + } + let vpn_start = VirtAddr::from(start).floor(); + let vpn_end = VirtAddr::from(start + len).ceil(); + let vpn_range = VPNRange::new(vpn_start, vpn_end); + for vpn in vpn_range { + if let Some(pte) = get_current_task_page_table_entry(vpn) { + if !pte.is_valid() { + return -1; + } + unmap_virtual_page(vpn) + } else { + return -1; + } + } + 0 +} diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index f80440e..d89f20e 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -15,6 +15,7 @@ mod switch; mod task; use crate::loader::{get_app_data, get_num_app}; +use crate::mm::{MapPermission, PageTableEntry, VirtAddr, VirtPageNum}; use crate::sbi::shutdown; use crate::sync::UPSafeCell; use crate::trap::TrapContext; @@ -204,3 +205,24 @@ pub fn current_trap_cx() -> &'static mut TrapContext { pub fn change_program_brk(size: i32) -> Option { TASK_MANAGER.change_current_program_brk(size) } + +/// Get the curent 'Running' task's PTE +pub fn get_current_task_page_table_entry(vpn: VirtPageNum) -> Option { + let inner = TASK_MANAGER.inner.exclusive_access(); + let current = inner.current_task; + inner.tasks[current].memory_set.translate(vpn) +} + +/// create new mapping area +pub fn create_new_map_area(start_va: VirtAddr, end_va: VirtAddr, perm: MapPermission) { + let mut inner = TASK_MANAGER.inner.exclusive_access(); + let current = inner.current_task; + inner.tasks[current].memory_set.insert_framed_area(start_va, end_va, perm); +} + +/// unmap virtual page +pub fn unmap_virtual_page(vpn: VirtPageNum) { + let mut inner = TASK_MANAGER.inner.exclusive_access(); + let current = inner.current_task; + inner.tasks[current].memory_set.unmap(vpn); +} diff --git a/user/src/bin/ch4_mmap0.rs b/user/src/bin/ch4_mmap0.rs new file mode 100644 index 0000000..5247eec --- /dev/null +++ b/user/src/bin/ch4_mmap0.rs @@ -0,0 +1,33 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::mmap; + +/* +理想结果:输出 Test 04_1 OK! +*/ + +#[no_mangle] +fn main() -> i32 { + let start: usize = 0x10000000; + let len: usize = 4096; + let prot: usize = 3; + assert_eq!(0, mmap(start, len, prot)); + for i in start..(start + len) { + let addr: *mut u8 = i as *mut u8; + unsafe { + *addr = i as u8; + } + } + for i in start..(start + len) { + let addr: *mut u8 = i as *mut u8; + unsafe { + assert_eq!(*addr, i as u8); + } + } + println!("Test 04_1 OK!"); + 0 +} diff --git a/user/src/bin/ch4_mmap1.rs b/user/src/bin/ch4_mmap1.rs new file mode 100644 index 0000000..63d6411 --- /dev/null +++ b/user/src/bin/ch4_mmap1.rs @@ -0,0 +1,25 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::mmap; + +/* +理想结果:程序触发访存异常,被杀死。不输出 error 就算过。 +*/ + +#[no_mangle] +fn main() -> i32 { + let start: usize = 0x10000000; + let len: usize = 4096; + let prot: usize = 1; + assert_eq!(0, mmap(start, len, prot)); + let addr: *mut u8 = start as *mut u8; + unsafe { + *addr = start as u8; + } + println!("Should cause error, Test 04_2 fail!"); + 0 +} diff --git a/user/src/bin/ch4_mmap2.rs b/user/src/bin/ch4_mmap2.rs new file mode 100644 index 0000000..2489fa6 --- /dev/null +++ b/user/src/bin/ch4_mmap2.rs @@ -0,0 +1,26 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::mmap; + +/* +理想结果:程序触发访存异常,被杀死。不输出 error 就算过。 +*/ + +#[no_mangle] +fn main() -> i32 { + let start: usize = 0x10000000; + let len: usize = 4096; + let prot: usize = 2; + assert_eq!(0, mmap(start, len, prot)); + let addr: *mut u8 = start as *mut u8; + unsafe { + // *addr = start as u8; // can't write, R == 0 && W == 1 is illegal in riscv + assert!(*addr != 0); + } + println!("Should cause error, Test 04_2 fail!"); + 0 +} diff --git a/user/src/bin/ch4_mmap3.rs b/user/src/bin/ch4_mmap3.rs new file mode 100644 index 0000000..d9d04b6 --- /dev/null +++ b/user/src/bin/ch4_mmap3.rs @@ -0,0 +1,25 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::mmap; + +/* +理想结果:对于错误的 mmap 返回 -1,最终输出 Test 04_4 test OK! +*/ + +#[no_mangle] +fn main() -> i32 { + let start: usize = 0x10000000; + let len: usize = 4096; + let prot: usize = 3; + assert_eq!(0, mmap(start, len, prot)); + assert_eq!(mmap(start - len, len + 1, prot), -1); + assert_eq!(mmap(start + len + 1, len, prot), -1); + assert_eq!(mmap(start + len, len, 0), -1); + assert_eq!(mmap(start + len, len, prot | 8), -1); + println!("Test 04_4 test OK!"); + 0 +} diff --git a/user/src/bin/ch4_unmap.rs b/user/src/bin/ch4_unmap.rs new file mode 100644 index 0000000..b64f862 --- /dev/null +++ b/user/src/bin/ch4_unmap.rs @@ -0,0 +1,36 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::{mmap, munmap}; + +/* +理想结果:输出 Test 04_5 ummap OK! +*/ + +#[no_mangle] +fn main() -> i32 { + let start: usize = 0x10000000; + let len: usize = 4096; + let prot: usize = 3; + assert_eq!(0, mmap(start, len, prot)); + assert_eq!(mmap(start + len, len * 2, prot), 0); + assert_eq!(munmap(start, len), 0); + assert_eq!(mmap(start - len, len + 1, prot), 0); + for i in (start - len)..(start + len * 3) { + let addr: *mut u8 = i as *mut u8; + unsafe { + *addr = i as u8; + } + } + for i in (start - len)..(start + len * 3) { + let addr: *mut u8 = i as *mut u8; + unsafe { + assert_eq!(*addr, i as u8); + } + } + println!("Test 04_5 ummap OK!"); + 0 +} diff --git a/user/src/bin/ch4_unmap2.rs b/user/src/bin/ch4_unmap2.rs new file mode 100644 index 0000000..85ddb75 --- /dev/null +++ b/user/src/bin/ch4_unmap2.rs @@ -0,0 +1,23 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::{mmap, munmap}; + +/* +理想结果:输出 Test 04_6 ummap2 OK! +*/ + +#[no_mangle] +fn main() -> i32 { + let start: usize = 0x10000000; + let len: usize = 4096; + let prot: usize = 3; + assert_eq!(0, mmap(start, len, prot)); + assert_eq!(munmap(start, len + 1), -1); + assert_eq!(munmap(start + 1, len - 1), -1); + println!("Test 04_6 ummap2 OK!"); + 0 +} diff --git a/user/src/bin/ch4b_sbrk.rs b/user/src/bin/ch4b_sbrk.rs new file mode 100644 index 0000000..72bffe2 --- /dev/null +++ b/user/src/bin/ch4b_sbrk.rs @@ -0,0 +1,47 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::sbrk; +use core::ptr::slice_from_raw_parts_mut; + +#[no_mangle] +fn main() -> i32 { + println!("Test sbrk start."); + const PAGE_SIZE: usize = 0x1000; + let origin_brk = sbrk(0); + println!("origin break point = {:x}", origin_brk); + let brk = sbrk(PAGE_SIZE as i32); + if brk != origin_brk { + return -1 + } + let brk = sbrk(0); + println!("one page allocated, break point = {:x}", brk); + println!("try write to allocated page"); + let new_page = unsafe { &mut *slice_from_raw_parts_mut(origin_brk as usize as *const u8 as *mut u8, PAGE_SIZE) }; + for pos in 0..PAGE_SIZE { + new_page[pos] = 1; + } + println!("write ok"); + sbrk(PAGE_SIZE as i32 * 10); + let brk = sbrk(0); + println!("10 page allocated, break point = {:x}", brk); + sbrk(PAGE_SIZE as i32 * -11); + let brk = sbrk(0); + println!("11 page DEALLOCATED, break point = {:x}", brk); + println!("try DEALLOCATED more one page, should be failed."); + let ret = sbrk(PAGE_SIZE as i32 * -1); + if ret != -1 { + println!("Test sbrk failed!"); + return -1 + } + println!("Test sbrk almost OK!"); + println!("now write to deallocated page, should cause page fault."); + for pos in 0..PAGE_SIZE { + new_page[pos] = 2; + } + println!("Test sbrk failed!"); + 0 +} diff --git a/user/src/lib.rs b/user/src/lib.rs index bd59ab7..6351f57 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -38,3 +38,11 @@ pub fn get_time() -> isize { pub fn sbrk(size: i32) -> isize { sys_sbrk(size) } + +pub fn munmap(start: usize, len: usize) -> isize { + sys_munmap(start, len) +} + +pub fn mmap(start: usize, len: usize, prot: usize) -> isize { + sys_mmap(start, len, prot) +} diff --git a/user/src/syscall.rs b/user/src/syscall.rs index 31144b9..12a1662 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -5,6 +5,8 @@ const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; const SYSCALL_GET_TIME: usize = 169; const SYSCALL_SBRK: usize = 214; +pub const SYSCALL_MMAP: usize = 222; +pub const SYSCALL_MUNMAP: usize = 215; fn syscall(id: usize, args: [usize; 3]) -> isize { let mut ret: isize; @@ -39,3 +41,11 @@ pub fn sys_get_time() -> isize { pub fn sys_sbrk(size: i32) -> isize { syscall(SYSCALL_SBRK, [size as usize, 0, 0]) } + +pub fn sys_mmap(start: usize, len: usize, prot: usize) -> isize { + syscall(SYSCALL_MMAP, [start, len, prot]) +} + +pub fn sys_munmap(start: usize, len: usize) -> isize { + syscall(SYSCALL_MUNMAP, [start, len, 0]) +} From 58fa67414edd1f82e5b4cf122e41594047a8cf14 Mon Sep 17 00:00:00 2001 From: Tateisi Date: Sun, 3 Aug 2025 15:42:14 +0800 Subject: [PATCH 86/87] time unmodified --- os/src/syscall/mod.rs | 2 +- os/src/syscall/process.rs | 21 ++++++++++++++++++--- os/src/timer.rs | 7 +++++++ user/src/bin/03sleep.rs | 12 +++++++++--- user/src/bin/03sleep1.rs | 22 ++++++++++++++++++++++ user/src/lib.rs | 26 +++++++++++++++++++++++++- user/src/syscall.rs | 11 +++++++---- 7 files changed, 89 insertions(+), 12 deletions(-) create mode 100644 user/src/bin/03sleep1.rs diff --git a/os/src/syscall/mod.rs b/os/src/syscall/mod.rs index f0159c2..d29ad2c 100644 --- a/os/src/syscall/mod.rs +++ b/os/src/syscall/mod.rs @@ -30,7 +30,7 @@ pub fn syscall(syscall_id: usize, args: [usize; 3]) -> isize { SYSCALL_WRITE => sys_write(args[0], args[1] as *const u8, args[2]), SYSCALL_EXIT => sys_exit(args[0] as i32), SYSCALL_YIELD => sys_yield(), - SYSCALL_GET_TIME => sys_get_time(), + SYSCALL_GET_TIME => sys_get_time(args[0] as *mut TimeVal, args[1]), SYSCALL_SBRK => sys_sbrk(args[0] as i32), SYSCALL_MMAP => sys_mmap(args[0], args[1], args[2]), SYSCALL_MUNMAP => sys_munmap(args[0], args[1]), diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index dd873bf..a0ca421 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -3,7 +3,7 @@ use crate::config::PAGE_SIZE; use crate::mm::{MapPermission, VPNRange, VirtAddr}; use crate::task::{change_program_brk, create_new_map_area, exit_current_and_run_next, get_current_task_page_table_entry, suspend_current_and_run_next, unmap_virtual_page}; -use crate::timer::get_time_ms; +use crate::timer::get_time_us; /// task exits and submit an exit code pub fn sys_exit(exit_code: i32) -> ! { @@ -18,9 +18,24 @@ pub fn sys_yield() -> isize { 0 } +#[repr(C)] +#[derive(Debug)] +pub struct TimeVal { + pub sec: usize, + pub usec: usize, +} + /// get current time -pub fn sys_get_time() -> isize { - get_time_ms() as isize +pub fn sys_get_time(ts: *mut TimeVal, _tz: usize) -> isize { + let us = get_time_us(); + unsafe { + *ts = TimeVal { + sec: us / 1_000_000, + usec: us % 1_000_000, + }; + } + 0 + -1 } /// change data segment size diff --git a/os/src/timer.rs b/os/src/timer.rs index 1948c6a..8ddca7c 100644 --- a/os/src/timer.rs +++ b/os/src/timer.rs @@ -6,16 +6,23 @@ use riscv::register::time; const TICKS_PER_SEC: usize = 100; const MSEC_PER_SEC: usize = 1000; +const MICRO_PER_SEC: usize = 1_000_000; pub fn get_time() -> usize { time::read() } /// get current time in microseconds +#[allow(unused)] pub fn get_time_ms() -> usize { time::read() / (CLOCK_FREQ / MSEC_PER_SEC) } +/// get current time in us +pub fn get_time_us() -> usize { + time::read() / (CLOCK_FREQ / MICRO_PER_SEC) +} + /// set the next timer interrupt pub fn set_next_trigger() { set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC); diff --git a/user/src/bin/03sleep.rs b/user/src/bin/03sleep.rs index 7e43d9c..d98c660 100644 --- a/user/src/bin/03sleep.rs +++ b/user/src/bin/03sleep.rs @@ -6,13 +6,19 @@ extern crate user_lib; use user_lib::{get_time, yield_}; +/// 正确输出:(无报错信息) +/// get_time OK! {...} +/// Test sleep OK! + #[no_mangle] fn main() -> i32 { - let current_timer = get_time(); - let wait_for = current_timer + 3000; + let current_time = get_time(); + assert!(current_time > 0); + println!("get_time OK! {}", current_time); + let wait_for = current_time + 3000; while get_time() < wait_for { yield_(); } println!("Test sleep OK!"); 0 -} +} \ No newline at end of file diff --git a/user/src/bin/03sleep1.rs b/user/src/bin/03sleep1.rs new file mode 100644 index 0000000..23b8060 --- /dev/null +++ b/user/src/bin/03sleep1.rs @@ -0,0 +1,22 @@ +#![no_std] +#![no_main] + +#[macro_use] +extern crate user_lib; + +use user_lib::{get_time, sleep}; + +#[no_mangle] +pub fn main() -> i32 { + let start = get_time(); + println!("current time_msec = {}", start); + sleep(100); + let end = get_time(); + println!( + "time_msec = {} after sleeping 100 ticks, delta = {}ms!", + end, + end - start + ); + println!("Test sleep1 passed!"); + 0 +} \ No newline at end of file diff --git a/user/src/lib.rs b/user/src/lib.rs index 6351f57..9d39c52 100644 --- a/user/src/lib.rs +++ b/user/src/lib.rs @@ -20,6 +20,19 @@ fn main() -> i32 { panic!("Cannot find main!"); } +#[repr(C)] +#[derive(Debug, Default)] +pub struct TimeVal { + pub sec: usize, + pub usec: usize, +} + +impl TimeVal { + pub fn new() -> Self { + Self::default() + } +} + use syscall::*; pub fn write(fd: usize, buf: &[u8]) -> isize { @@ -32,7 +45,11 @@ pub fn yield_() -> isize { sys_yield() } pub fn get_time() -> isize { - sys_get_time() + let time = TimeVal::new(); + match sys_get_time(&time, 0) { + 0 => ((time.sec & 0xffff) * 1000 + time.usec / 1000) as isize, + _ => -1, + } } pub fn sbrk(size: i32) -> isize { @@ -46,3 +63,10 @@ pub fn munmap(start: usize, len: usize) -> isize { pub fn mmap(start: usize, len: usize, prot: usize) -> isize { sys_mmap(start, len, prot) } + +pub fn sleep(period_ms: usize) { + let start = get_time(); + while get_time() < start + period_ms as isize { + sys_yield(); + } +} \ No newline at end of file diff --git a/user/src/syscall.rs b/user/src/syscall.rs index 12a1662..474684c 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -1,12 +1,15 @@ use core::arch::asm; +use crate::TimeVal; + const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; const SYSCALL_GET_TIME: usize = 169; +const SYSCALL_GETTIMEOFDAY: usize = 169; const SYSCALL_SBRK: usize = 214; -pub const SYSCALL_MMAP: usize = 222; -pub const SYSCALL_MUNMAP: usize = 215; +const SYSCALL_MMAP: usize = 222; +const SYSCALL_MUNMAP: usize = 215; fn syscall(id: usize, args: [usize; 3]) -> isize { let mut ret: isize; @@ -34,8 +37,8 @@ pub fn sys_yield() -> isize { syscall(SYSCALL_YIELD, [0, 0, 0]) } -pub fn sys_get_time() -> isize { - syscall(SYSCALL_GET_TIME, [0, 0, 0]) +pub fn sys_get_time(time: &TimeVal, tz: usize) -> isize { + syscall(SYSCALL_GETTIMEOFDAY, [time as *const _ as usize, tz, 0]) } pub fn sys_sbrk(size: i32) -> isize { From f830ce95d6ab22e94c4471f11ecdda08ff113cea Mon Sep 17 00:00:00 2001 From: Tateisi Date: Sun, 3 Aug 2025 17:36:14 +0800 Subject: [PATCH 87/87] lab04: sys_get_time --- os/src/syscall/process.rs | 29 +++++++++++++++++++++-------- user/src/syscall.rs | 3 +-- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/os/src/syscall/process.rs b/os/src/syscall/process.rs index a0ca421..f60a3df 100644 --- a/os/src/syscall/process.rs +++ b/os/src/syscall/process.rs @@ -1,8 +1,8 @@ //! Process management syscalls use crate::config::PAGE_SIZE; -use crate::mm::{MapPermission, VPNRange, VirtAddr}; -use crate::task::{change_program_brk, create_new_map_area, exit_current_and_run_next, get_current_task_page_table_entry, suspend_current_and_run_next, unmap_virtual_page}; +use crate::mm::{translated_byte_buffer, MapPermission, VPNRange, VirtAddr}; +use crate::task::{change_program_brk, create_new_map_area, current_user_token, exit_current_and_run_next, get_current_task_page_table_entry, suspend_current_and_run_next, unmap_virtual_page}; use crate::timer::get_time_us; /// task exits and submit an exit code @@ -28,14 +28,27 @@ pub struct TimeVal { /// get current time pub fn sys_get_time(ts: *mut TimeVal, _tz: usize) -> isize { let us = get_time_us(); - unsafe { - *ts = TimeVal { - sec: us / 1_000_000, - usec: us % 1_000_000, - }; + let dst_vec = translated_byte_buffer( + current_user_token(), + ts as *const u8, core::mem::size_of::() + ); + let ref time_val = TimeVal { + sec: us / 1_000_000, + usec: us % 1_000_000, + }; + let src_ptr = time_val as *const TimeVal; + for (idx, dst) in dst_vec.into_iter().enumerate() { + let unit_len = dst.len(); + unsafe { + dst.copy_from_slice( + core::slice::from_raw_parts( + src_ptr.wrapping_byte_add(idx * unit_len) as *const u8, + unit_len + ) + ); + } } 0 - -1 } /// change data segment size diff --git a/user/src/syscall.rs b/user/src/syscall.rs index 474684c..9ce185d 100644 --- a/user/src/syscall.rs +++ b/user/src/syscall.rs @@ -6,7 +6,6 @@ const SYSCALL_WRITE: usize = 64; const SYSCALL_EXIT: usize = 93; const SYSCALL_YIELD: usize = 124; const SYSCALL_GET_TIME: usize = 169; -const SYSCALL_GETTIMEOFDAY: usize = 169; const SYSCALL_SBRK: usize = 214; const SYSCALL_MMAP: usize = 222; const SYSCALL_MUNMAP: usize = 215; @@ -38,7 +37,7 @@ pub fn sys_yield() -> isize { } pub fn sys_get_time(time: &TimeVal, tz: usize) -> isize { - syscall(SYSCALL_GETTIMEOFDAY, [time as *const _ as usize, tz, 0]) + syscall(SYSCALL_GET_TIME, [time as *const _ as usize, tz, 0]) } pub fn sys_sbrk(size: i32) -> isize {

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%0D){{#HSSA-Vg8Rf4pP&Ob_im`~PW(wq3b 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� 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 ICPvr!UzPdW-~a#s From 31cbc6d290d9d7970c2acceae6e712be10f7f0e9 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Fri, 24 Jun 2022 00:00:37 +0800 Subject: [PATCH 54/87] add CI autotest, update README --- .github/workflows/build-doc.yml | 25 --------- .github/workflows/doc-and-test.yml | 69 ++++++++++++++++++++++++ README.md | 82 ++++++++++++++++++++-------- os/Cargo.toml | 2 +- os/src/boards/k210.rs | 19 +++++++ os/src/boards/qemu.rs | 86 ++++++++++++++++++++++++++++++ os/src/config.rs | 2 +- os/src/mm/memory_set.rs | 14 ++++- os/src/sbi.rs | 12 ++++- os/src/task/mod.rs | 8 +++ 10 files changed, 267 insertions(+), 52 deletions(-) delete mode 100644 .github/workflows/build-doc.yml create mode 100644 .github/workflows/doc-and-test.yml diff --git a/.github/workflows/build-doc.yml b/.github/workflows/build-doc.yml deleted file mode 100644 index a48f147..0000000 --- a/.github/workflows/build-doc.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: Build Rust Doc - -on: [push] - -env: - CARGO_TERM_COLOR: always - -jobs: - build-doc: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Build doc - run: | - rustup target add riscv64gc-unknown-none-elf - rustup component add llvm-tools-preview - rustup component add rust-src - cd os - cargo doc --no-deps --verbose - - name: Deploy to Github Pages - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./os/target/riscv64gc-unknown-none-elf/doc - destination_dir: ${{ github.ref_name }} \ No newline at end of file diff --git a/.github/workflows/doc-and-test.yml b/.github/workflows/doc-and-test.yml new file mode 100644 index 0000000..0ddd1d3 --- /dev/null +++ b/.github/workflows/doc-and-test.yml @@ -0,0 +1,69 @@ +name: Build Rust Doc And Run tests + +on: [push] + +env: + CARGO_TERM_COLOR: always + +jobs: + build-doc: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly-2022-04-11 + components: rust-src, llvm-tools-preview + target: riscv64gc-unknown-none-elf + - name: Build doc + run: cd os && cargo doc --no-deps --verbose --features "board_qemu" + - name: Deploy to Github Pages + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./os/target/riscv64gc-unknown-none-elf/doc + destination_dir: ${{ github.ref_name }} + + run-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly-2022-04-11 + components: rust-src, llvm-tools-preview + target: riscv64gc-unknown-none-elf + - uses: actions-rs/install@v0.1 + with: + crate: cargo-binutils + version: latest + use-tool-cache: true + - name: Cache QEMU + uses: actions/cache@v3 + with: + path: qemu-7.0.0 + key: qemu-7.0.0-x86_64-riscv64 + - name: Install QEMU + run: | + sudo apt-get update + sudo apt-get install ninja-build -y + if [ ! -d qemu-7.0.0 ]; then + wget https://download.qemu.org/qemu-7.0.0.tar.xz + tar -xf qemu-7.0.0.tar.xz + cd qemu-7.0.0 + ./configure --target-list=riscv64-softmmu + make -j + else + cd qemu-7.0.0 + fi + sudo make install + qemu-system-riscv64 --version + + - name: Run usertests + run: cd os && make run TEST=1 + timeout-minutes: 10 + + - name: Build for k210 + run: cd os && make build BOARD=k210 \ No newline at end of file diff --git a/README.md b/README.md index 5f27d55..767cb14 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ # rCore-Tutorial-v3 -rCore-Tutorial version 3.5. See the [Documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/). +rCore-Tutorial version 3.6. See the [Documentation in Chinese](https://rcore-os.github.io/rCore-Tutorial-Book-v3/). rCore-Tutorial API Docs. See the [API Docs of Ten OSes ](#OS-API-DOCS) +If you don't know Rust Language and try to learn it, please visit [Rust Learning Resources](https://github.com/rcore-os/rCore/wiki/study-resource-of-system-programming-in-RUST) + Official QQ group number: 735045051 ## news -- 25/01/2022: Version 3.6.0 is on the way! Now we directly update the code on chX branches, please periodically check if there are any updates. +- 23/06/2022: Version 3.6.0 is on the way! Now we directly update the code on chX branches, please periodically check if there are any updates. ## Overview @@ -42,7 +44,7 @@ $ rustup component add rust-src ### Install Qemu -Here we manually compile and install Qemu 5.0.0. For example, on Ubuntu 18.04: +Here we manually compile and install Qemu 7.0.0. For example, on Ubuntu 18.04: ```sh # install dependency packages @@ -50,10 +52,10 @@ $ sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev l gawk build-essential bison flex texinfo gperf libtool patchutils bc \ zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev git tmux python3 python3-pip # download Qemu source code -$ wget https://download.qemu.org/qemu-5.0.0.tar.xz -# extract to qemu-5.0.0/ -$ tar xvJf qemu-5.0.0.tar.xz -$ cd qemu-5.0.0 +$ wget https://download.qemu.org/qemu-7.0.0.tar.xz +# extract to qemu-7.0.0/ +$ tar xvJf qemu-7.0.0.tar.xz +$ cd qemu-7.0.0 # build $ ./configure --target-list=riscv64-softmmu,riscv64-linux-user $ make -j$(nproc) @@ -62,9 +64,9 @@ $ make -j$(nproc) Then, add following contents to `~/.bashrc`(please adjust these paths according to your environment): ``` -export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-5.0.0 -export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-5.0.0/riscv64-softmmu -export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-5.0.0/riscv64-linux-user +export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-7.0.0 +export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-7.0.0/riscv64-softmmu +export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-7.0.0/riscv64-linux-user ``` Finally, update the current shell: @@ -77,7 +79,7 @@ Now we can check the version of Qemu: ```sh $ qemu-system-riscv64 --version -QEMU emulator version 5.0.0 +QEMU emulator version 7.0.0 Copyright (c) 2003-2020 Fabrice Bellard and the QEMU Project developers ``` @@ -188,6 +190,46 @@ $ make run BOARD=k210 Type `Ctrl+]` to disconnect from K210. + +## Show runtime debug info of OS kernel version +The branch of ch9-log contains a lot of debug info. You could try to run rcore tutorial +for understand the internal behavior of os kernel. + +```sh +$ git clone https://github.com/rcore-os/rCore-Tutorial-v3.git +$ cd rCore-Tutorial-v3/os +$ git checkout ch9-log +$ make run +...... +[rustsbi] RustSBI version 0.2.0-alpha.10, adapting to RISC-V SBI v0.3 +.______ __ __ _______.___________. _______..______ __ +| _ \ | | | | / | | / || _ \ | | +| |_) | | | | | | (----`---| |----`| (----`| |_) || | +| / | | | | \ \ | | \ \ | _ < | | +| |\ \----.| `--' |.----) | | | .----) | | |_) || | +| _| `._____| \______/ |_______/ |__| |_______/ |______/ |__| + +[rustsbi] Implementation: RustSBI-QEMU Version 0.0.2 +[rustsbi-dtb] Hart count: cluster0 with 1 cores +[rustsbi] misa: RV64ACDFIMSU +[rustsbi] mideleg: ssoft, stimer, sext (0x222) +[rustsbi] medeleg: ima, ia, bkpt, la, sa, uecall, ipage, lpage, spage (0xb1ab) +[rustsbi] pmp0: 0x10000000 ..= 0x10001fff (rw-) +[rustsbi] pmp1: 0x2000000 ..= 0x200ffff (rw-) +[rustsbi] pmp2: 0xc000000 ..= 0xc3fffff (rw-) +[rustsbi] pmp3: 0x80000000 ..= 0x8fffffff (rwx) +[rustsbi] enter supervisor 0x80200000 +[KERN] rust_main() begin +[KERN] clear_bss() begin +[KERN] clear_bss() end +[KERN] mm::init() begin +[KERN] mm::init_heap() begin +[KERN] mm::init_heap() end +[KERN] mm::init_frame_allocator() begin +[KERN] mm::frame_allocator::lazy_static!FRAME_ALLOCATOR begin +...... +``` + ## Rustdoc Currently it can only help you view the code since only a tiny part of the code has been documented. @@ -209,13 +251,9 @@ The API Docs for Ten OS ## Working in progress -Our first release 3.5.0 (chapter 1-7) has been published. +Our first release 3.6.0 (chapter 1-9) has been published, and we are still working on it. -There will be 9 chapters in our next release 3.6.0, where 2 new chapters will be added: -* chapter 8: synchronization on a uniprocessor -* chapter 9: I/O devices - -Current version is 3.6.0-alpha.1 and we are still working on it. +* chapter 9: need more descripts about different I/O devices Here are the updates since 3.5.0: @@ -237,18 +275,16 @@ Here are the updates since 3.5.0: * [x] switch the code of chapter 6 and chapter 7 * [x] support signal mechanism in chapter 7/8(only works for apps with a single thread) * [x] Add boards/ directory and support rustdoc, for example you can use `cargo doc --no-deps --open` to view the documentation of a crate - +* [x] code of chapter 9: device drivers based on interrupts, including UART, block, keyboard, mouse, gpu devices +* [x] add CI autotest and doc in github ### Todo(High priority) -* [ ] review documentation, current progress: 5/9 -* [ ] support user-level sync primitives in chapter 8 -* [ ] code of chapter 9: device drivers based on interrupts, including UART and block devices +* [ ] review documentation, current progress: 8/9 * [ ] use old fs image optionally, do not always rebuild the image -* [ ] add new system calls: getdents64/fstat * [ ] shell functionality improvement(to be continued...) * [ ] give every non-zero process exit code an unique and clear error type * [ ] effective error handling of mm module - +* [ ] add more os functions for understanding os conecpts and principles ### Todo(Low priority) * [ ] rewrite practice doc and remove some inproper questions diff --git a/os/Cargo.toml b/os/Cargo.toml index c690db6..d3f3f5b 100644 --- a/os/Cargo.toml +++ b/os/Cargo.toml @@ -2,7 +2,7 @@ name = "os" version = "0.1.0" authors = ["Yifan Wu "] -edition = "2018" +edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/os/src/boards/k210.rs b/os/src/boards/k210.rs index 4fea2d1..2f8168c 100644 --- a/os/src/boards/k210.rs +++ b/os/src/boards/k210.rs @@ -1 +1,20 @@ pub const CLOCK_FREQ: usize = 403000000 / 62; + +pub const MMIO: &[(usize, usize)] = &[ + // we don't need clint in S priv when running + // we only need claim/complete for target0 after initializing + (0x0C00_0000, 0x3000), /* PLIC */ + (0x0C20_0000, 0x1000), /* PLIC */ + (0x3800_0000, 0x1000), /* UARTHS */ + (0x3800_1000, 0x1000), /* GPIOHS */ + (0x5020_0000, 0x1000), /* GPIO */ + (0x5024_0000, 0x1000), /* SPI_SLAVE */ + (0x502B_0000, 0x1000), /* FPIOA */ + (0x502D_0000, 0x1000), /* TIMER0 */ + (0x502E_0000, 0x1000), /* TIMER1 */ + (0x502F_0000, 0x1000), /* TIMER2 */ + (0x5044_0000, 0x1000), /* SYSCTL */ + (0x5200_0000, 0x1000), /* SPI0 */ + (0x5300_0000, 0x1000), /* SPI1 */ + (0x5400_0000, 0x1000), /* SPI2 */ +]; \ No newline at end of file diff --git a/os/src/boards/qemu.rs b/os/src/boards/qemu.rs index 98874fb..df564eb 100644 --- a/os/src/boards/qemu.rs +++ b/os/src/boards/qemu.rs @@ -1 +1,87 @@ +//! Constants used in rCore for qemu + pub const CLOCK_FREQ: usize = 12500000; + +pub const MMIO: &[(usize, usize)] = &[ + (0x0010_0000, 0x00_2000), // VIRT_TEST/RTC in virt machine +]; + +//ref:: https://github.com/andre-richter/qemu-exit +use core::arch::asm; + +const EXIT_SUCCESS: u32 = 0x5555; // Equals `exit(0)`. qemu successful exit + +const EXIT_FAILURE_FLAG: u32 = 0x3333; +const EXIT_FAILURE: u32 = exit_code_encode(1); // Equals `exit(1)`. qemu failed exit +const EXIT_RESET: u32 = 0x7777; // qemu reset + +pub trait QEMUExit { + /// Exit with specified return code. + /// + /// Note: For `X86`, code is binary-OR'ed with `0x1` inside QEMU. + fn exit(&self, code: u32) -> !; + + /// Exit QEMU using `EXIT_SUCCESS`, aka `0`, if possible. + /// + /// Note: Not possible for `X86`. + fn exit_success(&self) -> !; + + /// Exit QEMU using `EXIT_FAILURE`, aka `1`. + fn exit_failure(&self) -> !; +} + +/// RISCV64 configuration +pub struct RISCV64 { + /// Address of the sifive_test mapped device. + addr: u64, +} + +/// Encode the exit code using EXIT_FAILURE_FLAG. +const fn exit_code_encode(code: u32) -> u32 { + (code << 16) | EXIT_FAILURE_FLAG +} + +impl RISCV64 { + /// Create an instance. + pub const fn new(addr: u64) -> Self { + RISCV64 { addr } + } +} + +impl QEMUExit for RISCV64 { + /// Exit qemu with specified exit code. + fn exit(&self, code: u32) -> ! { + // If code is not a special value, we need to encode it with EXIT_FAILURE_FLAG. + let code_new = match code { + EXIT_SUCCESS | EXIT_FAILURE | EXIT_RESET => code, + _ => exit_code_encode(code), + }; + + unsafe { + asm!( + "sw {0}, 0({1})", + in(reg)code_new, in(reg)self.addr + ); + + // For the case that the QEMU exit attempt did not work, transition into an infinite + // loop. Calling `panic!()` here is unfeasible, since there is a good chance + // this function here is the last expression in the `panic!()` handler + // itself. This prevents a possible infinite loop. + loop { + asm!("wfi", options(nomem, nostack)); + } + } + } + + fn exit_success(&self) -> ! { + self.exit(EXIT_SUCCESS); + } + + fn exit_failure(&self) -> ! { + self.exit(EXIT_FAILURE); + } +} + +const VIRT_TEST: u64 = 0x100000; + +pub const QEMU_EXIT_HANDLE: RISCV64 = RISCV64::new(VIRT_TEST); diff --git a/os/src/config.rs b/os/src/config.rs index eeda71c..e7dcee3 100644 --- a/os/src/config.rs +++ b/os/src/config.rs @@ -16,4 +16,4 @@ pub fn kernel_stack_position(app_id: usize) -> (usize, usize) { (bottom, top) } -pub use crate::board::CLOCK_FREQ; +pub use crate::board::{CLOCK_FREQ, MMIO}; diff --git a/os/src/mm/memory_set.rs b/os/src/mm/memory_set.rs index e8de984..f947154 100644 --- a/os/src/mm/memory_set.rs +++ b/os/src/mm/memory_set.rs @@ -4,7 +4,7 @@ use super::{frame_alloc, FrameTracker}; use super::{PTEFlags, PageTable, PageTableEntry}; use super::{PhysAddr, PhysPageNum, VirtAddr, VirtPageNum}; use super::{StepByOne, VPNRange}; -use crate::config::{MEMORY_END, PAGE_SIZE, TRAMPOLINE, TRAP_CONTEXT, USER_STACK_SIZE}; +use crate::config::{MEMORY_END, MMIO, PAGE_SIZE, TRAMPOLINE, TRAP_CONTEXT, USER_STACK_SIZE}; use crate::sync::UPSafeCell; use alloc::collections::BTreeMap; use alloc::sync::Arc; @@ -138,6 +138,18 @@ impl MemorySet { ), None, ); + println!("mapping memory-mapped registers"); + for pair in MMIO { + memory_set.push( + MapArea::new( + (*pair).0.into(), + ((*pair).0 + (*pair).1).into(), + MapType::Identical, + MapPermission::R | MapPermission::W, + ), + None, + ); + } memory_set } /// Include sections in elf and trampoline and TrapContext and user stack, diff --git a/os/src/sbi.rs b/os/src/sbi.rs index f696cf6..bd1a3e3 100644 --- a/os/src/sbi.rs +++ b/os/src/sbi.rs @@ -4,13 +4,15 @@ use core::arch::asm; const SBI_SET_TIMER: usize = 0; const SBI_CONSOLE_PUTCHAR: usize = 1; + +#[cfg(feature = "board_k210")] +const SBI_SHUTDOWN: usize = 8; // const SBI_CONSOLE_GETCHAR: usize = 2; // const SBI_CLEAR_IPI: usize = 3; // const SBI_SEND_IPI: usize = 4; // const SBI_REMOTE_FENCE_I: usize = 5; // const SBI_REMOTE_SFENCE_VMA: usize = 6; // const SBI_REMOTE_SFENCE_VMA_ASID: usize = 7; -const SBI_SHUTDOWN: usize = 8; #[inline(always)] /// general sbi call @@ -44,8 +46,16 @@ pub fn console_putchar(c: usize) { // sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0) // } +#[cfg(feature = "board_qemu")] +use crate::board::QEMUExit; /// use sbi call to shutdown the kernel pub fn shutdown() -> ! { + #[cfg(feature = "board_k210")] sbi_call(SBI_SHUTDOWN, 0, 0, 0); + + #[cfg(feature = "board_qemu")] + crate::board::QEMU_EXIT_HANDLE.exit_failure(); + + #[cfg(feature = "board_k210")] panic!("It should shutdown!"); } diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 0f548d0..91695d4 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -143,6 +143,14 @@ impl TaskManager { } // go back to user mode } else { + println!("All applications completed!"); + + #[cfg(feature = "board_qemu")] + use crate::board::QEMUExit; + #[cfg(feature = "board_qemu")] + crate::board::QEMU_EXIT_HANDLE.exit_success(); + + #[cfg(feature = "board_k210")] panic!("All applications completed!"); } } From 426d4bead8176613808a5357b0d834507ef78444 Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Thu, 14 Jul 2022 10:09:01 +0800 Subject: [PATCH 55/87] support rust-analyzer for board_qemu features --- .gitignore | 3 +++ .vscode/settings.json | 13 +++++++++++++ user/Cargo.toml | 4 ++++ 3 files changed, 20 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 32f926a..4391862 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +.*/* +!.github/* +!.vscode/settings.json .idea Cargo.lock target diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bf81ab5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + // Prevent "can't find crate for `test`" error on no_std + // Ref: https://github.com/rust-lang/vscode-rust/issues/729 + // For vscode-rust plugin users: + "rust.target": "riscv64gc-unknown-none-elf", + "rust.all_targets": false, + // For Rust Analyzer plugin users: + "rust-analyzer.cargo.target": "riscv64gc-unknown-none-elf", + "rust-analyzer.checkOnSave.allTargets": false, + "rust-analyzer.cargo.features": [ + "board_qemu" + ] +} \ No newline at end of file diff --git a/user/Cargo.toml b/user/Cargo.toml index d843673..8edd701 100644 --- a/user/Cargo.toml +++ b/user/Cargo.toml @@ -10,3 +10,7 @@ edition = "2018" [profile.release] debug = true + +[features] +board_qemu = [] +board_k210 = [] \ No newline at end of file From 36ec7312b069bed00bc8951f56a7a5047f7140ed Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Mon, 18 Jul 2022 11:23:20 +0800 Subject: [PATCH 56/87] update Dockerfile: ubuntu 18.04-->20.04, QEMU-5.0-->7.0 --- Dockerfile | 117 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 81 insertions(+), 36 deletions(-) diff --git a/Dockerfile b/Dockerfile index ac784bc..284db4c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,40 +1,85 @@ -FROM ubuntu:18.04 -LABEL maintainer="dinghao188" \ - version="1.1" \ - description="ubuntu 18.04 with tools for tsinghua's rCore-Tutorial-V3" +# syntax=docker/dockerfile:1 +# This Dockerfile is adapted from https://github.com/LearningOS/rCore-Tutorial-v3/blob/main/Dockerfile +# with the following major updates: +# - ubuntu 18.04 -> 20.04 +# - qemu 5.0.0 -> 7.0.0 +# - Extensive comments linking to relevant documentation +FROM ubuntu:20.04 -#install some deps -RUN set -x \ - && apt-get update \ - && apt-get install -y curl wget autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ - gawk build-essential bison flex texinfo gperf libtool patchutils bc xz-utils \ - zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev git tmux python3 +ARG QEMU_VERSION=7.0.0 +ARG HOME=/root -#install rust and qemu -RUN set -x; \ - RUSTUP='/root/rustup.sh' \ - && cd $HOME \ - #install rust - && curl https://sh.rustup.rs -sSf > $RUSTUP && chmod +x $RUSTUP \ - && $RUSTUP -y --default-toolchain nightly --profile minimal \ +# 0. Install general tools +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update && \ + apt-get install -y \ + curl \ + git \ + python3 \ + wget - #compile qemu - && wget https://ftp.osuosl.org/pub/blfs/conglomeration/qemu/qemu-5.0.0.tar.xz \ - && tar xvJf qemu-5.0.0.tar.xz \ - && cd qemu-5.0.0 \ - && ./configure --target-list=riscv64-softmmu,riscv64-linux-user \ - && make -j$(nproc) install \ - && cd $HOME && rm -rf qemu-5.0.0 qemu-5.0.0.tar.xz +# 1. Set up QEMU RISC-V +# - https://learningos.github.io/rust-based-os-comp2022/0setup-devel-env.html#qemu +# - https://www.qemu.org/download/ +# - https://wiki.qemu.org/Documentation/Platforms/RISCV +# - https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html -#for chinese network -RUN set -x; \ - APT_CONF='/etc/apt/sources.list'; \ - CARGO_CONF='/root/.cargo/config'; \ - BASHRC='/root/.bashrc' \ - && echo 'export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static' >> $BASHRC \ - && echo 'export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup' >> $BASHRC \ - && touch $CARGO_CONF \ - && echo '[source.crates-io]' > $CARGO_CONF \ - && echo "replace-with = 'ustc'" >> $CARGO_CONF \ - && echo '[source.ustc]' >> $CARGO_CONF \ - && echo 'registry = "git://mirrors.ustc.edu.cn/crates.io-index"' >> $CARGO_CONF \ No newline at end of file +# 1.1. Download source +WORKDIR ${HOME} +RUN wget https://download.qemu.org/qemu-${QEMU_VERSION}.tar.xz && \ + tar xvJf qemu-${QEMU_VERSION}.tar.xz + +# 1.2. Install dependencies +# - https://risc-v-getting-started-guide.readthedocs.io/en/latest/linux-qemu.html#prerequisites +RUN apt-get install -y \ + autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \ + gawk build-essential bison flex texinfo gperf libtool patchutils bc \ + zlib1g-dev libexpat-dev git \ + ninja-build pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev + +# 1.3. Build and install from source +WORKDIR ${HOME}/qemu-${QEMU_VERSION} +RUN ./configure --target-list=riscv64-softmmu,riscv64-linux-user && \ + make -j$(nproc) && \ + make install + +# 1.4. Clean up +WORKDIR ${HOME} +RUN rm -rf qemu-${QEMU_VERSION} qemu-${QEMU_VERSION}.tar.xz + +# 1.5. Sanity checking +RUN qemu-system-riscv64 --version && \ + qemu-riscv64 --version + +# 2. Set up Rust +# - https://learningos.github.io/rust-based-os-comp2022/0setup-devel-env.html#qemu +# - https://www.rust-lang.org/tools/install +# - https://github.com/rust-lang/docker-rust/blob/master/Dockerfile-debian.template + +# 2.1. Install +ENV RUSTUP_HOME=/usr/local/rustup \ + CARGO_HOME=/usr/local/cargo \ + PATH=/usr/local/cargo/bin:$PATH \ + RUST_VERSION=nightly +RUN set -eux; \ + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup-init; \ + chmod +x rustup-init; \ + ./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION; \ + rm rustup-init; \ + chmod -R a+w $RUSTUP_HOME $CARGO_HOME; + +# 2.2. Sanity checking +RUN rustup --version && \ + cargo --version && \ + rustc --version + +# 3. Build env for labs +# See os1/Makefile `env:` for example. +# This avoids having to wait for these steps each time using a new container. +RUN rustup target add riscv64gc-unknown-none-elf && \ + cargo install cargo-binutils --vers ~0.2 && \ + rustup component add rust-src && \ + rustup component add llvm-tools-preview + +# Ready to go +WORKDIR ${HOME} From 0ad6203b6992146ae2c4ea62f2c354191e4002fa Mon Sep 17 00:00:00 2001 From: Yu Chen Date: Mon, 25 Jul 2022 11:47:07 +0800 Subject: [PATCH 57/87] udpate rust-toolchain: nightly-2022-07-20, cargo-utils 0.36 --- .github/workflows/doc-and-test.yml | 4 ++-- os/Makefile | 2 +- rust-toolchain | 1 - rust-toolchain.toml | 4 ++++ 4 files changed, 7 insertions(+), 4 deletions(-) delete mode 100644 rust-toolchain create mode 100644 rust-toolchain.toml diff --git a/.github/workflows/doc-and-test.yml b/.github/workflows/doc-and-test.yml index 0ddd1d3..1c4199e 100644 --- a/.github/workflows/doc-and-test.yml +++ b/.github/workflows/doc-and-test.yml @@ -13,7 +13,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: nightly-2022-04-11 + toolchain: nightly-2022-07-20 components: rust-src, llvm-tools-preview target: riscv64gc-unknown-none-elf - name: Build doc @@ -32,7 +32,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: nightly-2022-04-11 + toolchain: nightly-2022-07-20 components: rust-src, llvm-tools-preview target: riscv64gc-unknown-none-elf - uses: actions-rs/install@v0.1 diff --git a/os/Makefile b/os/Makefile index 6da9228..d56bf6b 100644 --- a/os/Makefile +++ b/os/Makefile @@ -45,7 +45,7 @@ endif env: (rustup target list | grep "riscv64gc-unknown-none-elf (installed)") || rustup target add $(TARGET) - cargo install cargo-binutils --vers =0.3.3 + cargo install cargo-binutils rustup component add rust-src rustup component add llvm-tools-preview diff --git a/rust-toolchain b/rust-toolchain deleted file mode 100644 index abcacd9..0000000 --- a/rust-toolchain +++ /dev/null @@ -1 +0,0 @@ -nightly-2022-04-11 diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..c56a59e --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +profile = "minimal" +channel = "nightly-2022-07-20" +components = ["rust-src", "llvm-tools-preview", "rustfmt", "clippy"] From 24dd2837374dc73681391e69497227df7cdecd7c Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sat, 1 Oct 2022 20:23:53 +0800 Subject: [PATCH 58/87] Update Docker --- Makefile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index c67d48a..ede5291 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,12 @@ -DOCKER_NAME ?= dinghao188/rcore-tutorial +DOCKER_NAME ?= rcore-tutorial-v3 .PHONY: docker build_docker - + docker: - docker run --rm -it --mount type=bind,source=$(shell pwd),destination=/mnt ${DOCKER_NAME} + docker run --rm -it -v ${PWD}:/mnt -w /mnt ${DOCKER_NAME} bash build_docker: docker build -t ${DOCKER_NAME} . + fmt: - cd os ; cargo fmt; cd ../user; cargo fmt; cd .. \ No newline at end of file + cd os ; cargo fmt; cd .. + From 628f05a2c3cbaef23270fe3baf64aaad88e4a977 Mon Sep 17 00:00:00 2001 From: Yifan Wu Date: Sun, 9 Oct 2022 05:09:36 +0800 Subject: [PATCH 59/87] Bump rustsbi-qemu to 701e891 --- bootloader/rustsbi-qemu.bin | Bin 43568 -> 38920 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bootloader/rustsbi-qemu.bin b/bootloader/rustsbi-qemu.bin index 9822f54e58daad6d5fa47ac4b9b51061dbad1a4a..022c7f27b18efadbfa80301fb467421c52f7cd5e 100755 GIT binary patch literal 38920 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 literal 43568 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∓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